Skip to content

Commit be91fc2

Browse files
committed
富文本编辑器支持国际化
1 parent 90939b4 commit be91fc2

6 files changed

Lines changed: 152 additions & 6 deletions

File tree

‎ui/zhontai.ui.admin.vue3/src/components/my-cron/dialog.vue‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { t } from '/@/i18n'
1616
defineProps({
1717
title: {
1818
type: String,
19-
default: 'Cron表达式生成器',
19+
default: () => t('Cron表达式生成器'),
2020
},
2121
})
2222

‎ui/zhontai.ui.admin.vue3/src/components/my-editor/index.vue‎

Lines changed: 142 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@
1616
<script setup lang="ts" name="wngEditor">
1717
// https://www.wangeditor.com/v5/for-frame.html#vue3
1818
import '@wangeditor/editor/dist/css/style.css'
19-
import { IDomEditor } from '@wangeditor/editor'
19+
import { IDomEditor, i18nChangeLanguage, i18nAddResources } from '@wangeditor/editor'
2020
import { Toolbar, Editor } from '@wangeditor/editor-for-vue'
2121
import { FileApi } from '/@/api/admin/File'
22-
import { t } from '/@/i18n'
22+
import { t, locale } from '/@/i18n'
2323
2424
type InsertFnType = (url: string, alt: string, href: string) => void
2525
type InsertVideoFnType = (url: string, poster: string) => void
@@ -113,6 +113,146 @@ const handleChange = (editor: IDomEditor) => {
113113
emit('update:modelValue', editor.getHtml())
114114
emit('update:getText', editor.getText())
115115
}
116+
117+
onMounted(() => {
118+
if (locale.value === 'en') {
119+
i18nChangeLanguage('en')
120+
} else if (locale.value === 'zh-tw') {
121+
i18nAddResources('zh-TW', {
122+
editor: {
123+
more: '更多',
124+
justify: '對齊',
125+
indent: '縮排',
126+
image: '圖片',
127+
video: '影片',
128+
},
129+
common: {
130+
ok: '確定',
131+
delete: '刪除',
132+
enter: '換行',
133+
},
134+
blockQuote: {
135+
title: '引用',
136+
},
137+
codeBlock: {
138+
title: '程式碼區塊',
139+
},
140+
color: {
141+
color: '文字顏色',
142+
bgColor: '背景色',
143+
default: '預設顏色',
144+
clear: '清除背景色',
145+
},
146+
divider: {
147+
title: '分隔線',
148+
},
149+
emotion: {
150+
title: '表情',
151+
},
152+
fontSize: {
153+
title: '字號',
154+
default: '預設字號',
155+
},
156+
fontFamily: {
157+
title: '字型',
158+
default: '預設字型',
159+
},
160+
fullScreen: {
161+
title: '全螢幕',
162+
},
163+
header: {
164+
title: '標題',
165+
text: '內文',
166+
},
167+
image: {
168+
netImage: '網路圖片',
169+
delete: '刪除圖片',
170+
edit: '編輯圖片',
171+
viewLink: '查看連結',
172+
src: '圖片位址',
173+
desc: '圖片描述',
174+
link: '圖片連結',
175+
},
176+
indent: {
177+
decrease: '減少縮排',
178+
increase: '增加縮排',
179+
},
180+
justify: {
181+
left: '左對齊',
182+
right: '右對齊',
183+
center: '置中對齊',
184+
justify: '兩端對齊',
185+
},
186+
lineHeight: {
187+
title: '行高',
188+
default: '預設行高',
189+
},
190+
link: {
191+
insert: '插入連結',
192+
text: '連結文字',
193+
url: '連結位址',
194+
unLink: '取消連結',
195+
edit: '修改連結',
196+
view: '查看連結',
197+
},
198+
textStyle: {
199+
bold: '粗體',
200+
clear: '清除格式',
201+
code: '行內程式碼',
202+
italic: '斜體',
203+
sub: '下標',
204+
sup: '上標',
205+
through: '刪除線',
206+
underline: '底線',
207+
},
208+
undo: {
209+
undo: '復原',
210+
redo: '重做',
211+
},
212+
todo: {
213+
todo: '待辦',
214+
},
215+
listModule: {
216+
unOrderedList: '無序清單',
217+
orderedList: '有序清單',
218+
},
219+
tableModule: {
220+
deleteCol: '刪除欄',
221+
deleteRow: '刪除列',
222+
deleteTable: '刪除表格',
223+
widthAuto: '寬度自動調整',
224+
insertCol: '插入欄',
225+
insertRow: '插入列',
226+
insertTable: '插入表格',
227+
header: '表頭',
228+
},
229+
videoModule: {
230+
delete: '刪除影片',
231+
uploadVideo: '上傳影片',
232+
insertVideo: '插入影片',
233+
videoSrc: '影片位址',
234+
videoSrcPlaceHolder: '影片檔案 url 或第三方 <iframe>',
235+
videoPoster: '影片封面',
236+
videoPosterPlaceHolder: '封面圖片 url',
237+
ok: '確定',
238+
editSize: '修改尺寸',
239+
width: '寬度',
240+
height: '高度',
241+
},
242+
uploadImgModule: {
243+
uploadImage: '上傳圖片',
244+
uploadError: '{{fileName}} 上傳出錯',
245+
},
246+
highLightModule: {
247+
selectLang: '選擇語言',
248+
},
249+
})
250+
i18nChangeLanguage('zh-TW')
251+
} else {
252+
i18nChangeLanguage('zh-CN')
253+
}
254+
})
255+
116256
// 页面销毁时
117257
onBeforeUnmount(() => {
118258
const editor = editorRef.value

‎ui/zhontai.ui.admin.vue3/src/i18n/admin/en.ts‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1043,4 +1043,6 @@ export default {
10431043
参考样例: 'Reference Examples',
10441044
操作成功: 'Operation successful',
10451045
操作失败: 'Operation failed',
1046+
后台权限管理框架: 'Backend Permission Management Framework',
1047+
Cron表达式生成器: 'Cron Expression Generator',
10461048
}

‎ui/zhontai.ui.admin.vue3/src/i18n/admin/zh-tw.ts‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1036,4 +1036,6 @@ export default {
10361036
平台管理: '平台管理',
10371037
帮助文档: '幫助文檔',
10381038
参考样例: '參考樣例',
1039+
后台权限管理框架: '後台權限管理框架',
1040+
Cron表达式生成器: 'Cron表達式生成器',
10391041
}

‎ui/zhontai.ui.admin.vue3/src/layout/logo/index.vue‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<template>
22
<div class="layout-logo" v-if="setShowLogo" @click="onThemeConfigChange">
33
<img v-if="showLogoMini" :src="logoMini" class="layout-logo-medium-img" />
4-
<span class="my-line-1">{{ themeConfig.globalTitle }}</span>
4+
<span class="my-line-1">{{ t(themeConfig.globalTitle) }}</span>
55
</div>
66
<div class="layout-logo-size" v-else @click="onThemeConfigChange">
77
<img v-if="showLogoMini" :src="logoMini" class="layout-logo-size-img" />
@@ -11,6 +11,7 @@
1111
<script setup lang="ts" name="layoutLogo">
1212
import { useThemeConfig } from '/@/stores/themeConfig'
1313
import logoMini from '/@/assets/logo-mini.svg'
14+
import { t } from '/@/i18n'
1415
1516
// 定义变量内容
1617
const storesThemeConfig = useThemeConfig()

‎ui/zhontai.ui.admin.vue3/src/views/admin/login/index.vue‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
<div class="login-left-logo">
66
<img :src="logoMini" />
77
<div class="login-left-logo-text">
8-
<span>{{ getThemeConfig.globalViceTitle }}</span>
9-
<span class="login-left-logo-text-msg">{{ getThemeConfig.globalViceTitleMsg }}</span>
8+
<span>{{ t(getThemeConfig.globalViceTitle) }}</span>
9+
<span class="login-left-logo-text-msg">{{ t(getThemeConfig.globalViceTitleMsg) }}</span>
1010
</div>
1111
</div>
1212
<div class="login-left-img">
@@ -34,6 +34,7 @@ import { useThemeConfig } from '/@/stores/themeConfig'
3434
import { NextLoading } from '/@/utils/loading'
3535
import logoMini from '/@/assets/logo-mini.svg'
3636
import loginMain from '/@/assets/login-main.svg'
37+
import { t } from '/@/i18n'
3738
3839
const LoginForm = defineAsyncComponent(() => import('./form.vue'))
3940

0 commit comments

Comments
 (0)