2020-08-13 15:18:26 +08:00
|
|
|
|
## 国际化
|
|
|
|
|
|
2020-11-09 14:53:43 +08:00
|
|
|
|
Element Plus 组件内部默认使用英语,若希望使用其他语言,则需要进行多语言设置。以中文为例,在 main.js 中:
|
2020-08-13 15:18:26 +08:00
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
// 完整引入 Element
|
2020-10-26 17:16:22 +08:00
|
|
|
|
import { createApp } from 'vue'
|
|
|
|
|
import ElementPlus from 'element-plus'
|
2020-12-23 16:38:06 +08:00
|
|
|
|
import 'dayjs/locale/zh-cn'
|
2020-11-09 14:53:43 +08:00
|
|
|
|
import locale from 'element-plus/lib/locale/lang/zh-cn'
|
2020-08-13 15:18:26 +08:00
|
|
|
|
|
2020-10-26 17:16:22 +08:00
|
|
|
|
createApp(App).use(ElementPlus, { locale })
|
2020-08-13 15:18:26 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
或
|
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
// 按需引入 Element
|
|
|
|
|
import Vue from 'vue'
|
2020-11-23 16:28:06 +08:00
|
|
|
|
import { ElButton, ElSelect } from 'element-plus'
|
2020-11-09 14:53:43 +08:00
|
|
|
|
import lang from 'element-plus/lib/locale/lang/zh-cn'
|
2020-12-23 16:38:06 +08:00
|
|
|
|
import 'dayjs/locale/zh-cn'
|
2020-10-16 11:14:34 +08:00
|
|
|
|
import locale from 'element-plus/lib/locale'
|
2020-08-13 15:18:26 +08:00
|
|
|
|
|
|
|
|
|
// 设置语言
|
|
|
|
|
locale.use(lang)
|
|
|
|
|
|
|
|
|
|
// 引入组件
|
2020-11-23 16:28:06 +08:00
|
|
|
|
Vue.component(ElButton.name, ElButton)
|
|
|
|
|
Vue.component(ElSelect.name, ElSelect)
|
2020-08-13 15:18:26 +08:00
|
|
|
|
```
|
|
|
|
|
|
2020-12-23 16:38:06 +08:00
|
|
|
|
### 设置 Day.js 国际化
|
|
|
|
|
|
|
|
|
|
Element Plus 直接使用了 [Day.js](https://day.js.org/) 项目的时间日期国际化设置,如月份名称、每周第一天是周几等。并且会自动全局设置已经导入的 Day.js 国际化配置。
|
2021-01-19 23:49:07 +08:00
|
|
|
|
|
|
|
|
|
```typescript
|
2020-12-23 16:38:06 +08:00
|
|
|
|
import locale from 'element-plus/lib/locale/lang/zh-cn'
|
|
|
|
|
import 'dayjs/locale/zh-cn'
|
|
|
|
|
|
|
|
|
|
// 将自动设置 Day.js 的国际化设置为 'zh-cn'
|
|
|
|
|
app.use(ElementPlus, { locale })
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
当然,如果有需要,你也可以手动设置成其他 Day.js 国际化配置
|
|
|
|
|
|
2021-01-19 23:49:07 +08:00
|
|
|
|
```typescript
|
2020-12-23 16:38:06 +08:00
|
|
|
|
import 'dayjs/locale/fr'
|
|
|
|
|
dayjs.locale('fr')
|
|
|
|
|
```
|
|
|
|
|
|
2020-11-09 14:53:43 +08:00
|
|
|
|
如果使用其它语言,默认情况下英文语言包依旧是被引入的,可以使用 webpack 的 NormalModuleReplacementPlugin 替换默认语言包。
|
2020-08-13 15:18:26 +08:00
|
|
|
|
|
|
|
|
|
**webpack.config.js**
|
2021-01-19 23:49:07 +08:00
|
|
|
|
|
|
|
|
|
```typescript
|
2020-08-13 15:18:26 +08:00
|
|
|
|
{
|
|
|
|
|
plugins: [
|
2021-01-19 23:49:07 +08:00
|
|
|
|
new webpack.NormalModuleReplacementPlugin(
|
|
|
|
|
/element-plus[\/\\]lib[\/\\]locale[\/\\]lang[\/\\]en/,
|
|
|
|
|
'element-plus/lib/locale/lang/zh-cn',
|
|
|
|
|
),
|
2020-08-13 15:18:26 +08:00
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
2021-01-19 23:49:07 +08:00
|
|
|
|
### 兼容 `vue-i18n@9.x`
|
2020-08-13 15:18:26 +08:00
|
|
|
|
|
2021-01-19 23:49:07 +08:00
|
|
|
|
如果需要查看 [VueI18n的文档](https://vue-i18n-next.intlify.dev/guide/#html), 请点击这个链接去查看
|
2020-08-13 15:18:26 +08:00
|
|
|
|
|
2021-01-19 23:49:07 +08:00
|
|
|
|
```typescript
|
|
|
|
|
import { createApp } from 'vue'
|
|
|
|
|
import { createI18n } from 'vue-i18n'
|
2020-10-16 11:19:36 +08:00
|
|
|
|
import ElementPlus from 'element-plus'
|
2020-10-16 11:14:34 +08:00
|
|
|
|
import enLocale from 'element-plus/lib/locale/lang/en'
|
2020-11-14 01:39:03 +08:00
|
|
|
|
import zhLocale from 'element-plus/lib/locale/lang/zh-cn'
|
2021-01-19 23:49:07 +08:00
|
|
|
|
import App from './App.vue'
|
2020-08-13 15:18:26 +08:00
|
|
|
|
|
2021-01-19 23:49:07 +08:00
|
|
|
|
const messages = {
|
|
|
|
|
[enLocale.name]: {
|
|
|
|
|
// el 这个属性很关键,一定要保证有这个属性,
|
|
|
|
|
el: enLocale.el,
|
|
|
|
|
// 定义您自己的字典,但是请不要和 `el` 重复,这样会导致 ElementPlus 内部组件的翻译失效.
|
|
|
|
|
message: {
|
|
|
|
|
hello: 'hello world',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
[zhLocale.name]: {
|
|
|
|
|
el: zhLocale.el,
|
|
|
|
|
// 定义您自己的字典,但是请不要和 `el` 重复,这样会导致 ElementPlus 内部组件的翻译失效.
|
|
|
|
|
message: {
|
|
|
|
|
hello: '你好,世界',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
testLocale: {
|
|
|
|
|
el: {},
|
|
|
|
|
// 没有定义 message 字段,会 fallback 回到 en 去, fallbackLocale 的定义在下方 👇
|
|
|
|
|
},
|
|
|
|
|
}
|
2020-08-13 15:18:26 +08:00
|
|
|
|
|
2021-01-19 23:49:07 +08:00
|
|
|
|
const i18n = createI18n({
|
|
|
|
|
locale: zhLocale.name,
|
|
|
|
|
fallbackLocale: enLocale.name,
|
|
|
|
|
messages,
|
|
|
|
|
})
|
2020-08-13 15:18:26 +08:00
|
|
|
|
|
2021-01-19 23:49:07 +08:00
|
|
|
|
const app = createApp(App)
|
2020-08-13 15:18:26 +08:00
|
|
|
|
|
2021-01-19 23:49:07 +08:00
|
|
|
|
app.use(ElementPlus, {
|
|
|
|
|
i18n: i18n.global.t,
|
2020-08-13 15:18:26 +08:00
|
|
|
|
})
|
2021-01-19 23:49:07 +08:00
|
|
|
|
|
|
|
|
|
// 要记得使用这个插件.
|
|
|
|
|
app.use(i18n)
|
2020-08-13 15:18:26 +08:00
|
|
|
|
```
|
|
|
|
|
|
2021-01-19 23:49:07 +08:00
|
|
|
|
### 兼容其他 i18n 插件
|
2020-08-13 15:18:26 +08:00
|
|
|
|
|
2021-01-19 23:49:07 +08:00
|
|
|
|
如果不使用 `vue-i18n@9.x`,而是用其他的 i18n 插件,Element Plus 将无法兼容,但是可以自定义 Element Plus 的 i18n 的处理方法。
|
2020-08-13 15:18:26 +08:00
|
|
|
|
|
2021-01-19 23:49:07 +08:00
|
|
|
|
:::tip
|
|
|
|
|
一旦设置了这个方法,ElementPlus 内置的翻译功能就会失效,会使用用户定义的翻译功能,所以一定要确保翻译方法能够正确的翻译 `el.scope.subName` 的格式,如果自定义的方法无法翻译 `el.select.noData` 的格式,将会使组件的文本失效.
|
|
|
|
|
:::
|
|
|
|
|
|
|
|
|
|
```typescript
|
2020-08-13 15:18:26 +08:00
|
|
|
|
import Vue from 'vue'
|
2020-10-16 11:19:36 +08:00
|
|
|
|
import ElementPlus from 'element-plus'
|
2020-10-16 11:14:34 +08:00
|
|
|
|
import enLocale from 'element-plus/lib/locale/lang/en'
|
2020-11-14 01:39:03 +08:00
|
|
|
|
import zhLocale from 'element-plus/lib/locale/lang/zh-cn'
|
2020-08-13 15:18:26 +08:00
|
|
|
|
|
2021-01-19 23:49:07 +08:00
|
|
|
|
// 这是 i18n 函数的函数签名.
|
|
|
|
|
type i18n = (...args: any[]) => string
|
2020-08-13 15:18:26 +08:00
|
|
|
|
Vue.use(Element, {
|
2021-01-19 23:49:07 +08:00
|
|
|
|
i18n: function(path, options) {
|
|
|
|
|
// ...
|
|
|
|
|
},
|
|
|
|
|
// others.
|
2020-08-13 15:18:26 +08:00
|
|
|
|
})
|
|
|
|
|
```
|
|
|
|
|
|
2021-01-19 23:49:07 +08:00
|
|
|
|
### 按需加载里定制 i18n
|
2020-08-13 15:18:26 +08:00
|
|
|
|
|
2021-01-19 23:49:07 +08:00
|
|
|
|
如果您需要按需加载翻译文件,请查看[按需加载](https://vue-i18n-next.intlify.dev/guide/advanced/lazy.html)
|
2020-08-13 15:18:26 +08:00
|
|
|
|
|
2021-01-19 23:49:07 +08:00
|
|
|
|
```typescript
|
|
|
|
|
import { createApp } from 'vue'
|
|
|
|
|
import { createI18n } from 'vue-i18n'
|
|
|
|
|
import ElementPlus from 'element-plus'
|
2020-10-16 11:14:34 +08:00
|
|
|
|
import enLocale from 'element-plus/lib/locale/lang/en'
|
2020-11-14 01:39:03 +08:00
|
|
|
|
import zhLocale from 'element-plus/lib/locale/lang/zh-cn'
|
2020-10-16 11:14:34 +08:00
|
|
|
|
import ElementLocale from 'element-plus/lib/locale'
|
2021-01-19 23:49:07 +08:00
|
|
|
|
import App from './App.vue'
|
2020-08-13 15:18:26 +08:00
|
|
|
|
|
|
|
|
|
const messages = {
|
2021-01-19 23:49:07 +08:00
|
|
|
|
[enLocale.name]: {
|
|
|
|
|
// el 这个属性很关键,一定要保证有这个属性,
|
|
|
|
|
el: enLocale.el,
|
|
|
|
|
// 定义您自己的字典,但是请不要和 `el` 重复,这样会导致 ElementPlus 内部组件的翻译失效.
|
|
|
|
|
message: {
|
|
|
|
|
hello: 'hello world',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
[zhLocale.name]: {
|
|
|
|
|
el: zhLocale.el,
|
|
|
|
|
// 定义您自己的字典,但是请不要和 `el` 重复,这样会导致 ElementPlus 内部组件的翻译失效.
|
|
|
|
|
message: {
|
|
|
|
|
hello: '你好,世界',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
testLocale: {
|
|
|
|
|
el: {},
|
|
|
|
|
// 没有定义 message 字段,会 fallback 回到 en 去, fallbackLocale 的定义在下方 👇
|
2020-08-13 15:18:26 +08:00
|
|
|
|
},
|
|
|
|
|
}
|
2021-01-19 23:49:07 +08:00
|
|
|
|
|
|
|
|
|
const i18n = createI18n({
|
|
|
|
|
locale: zhLocale.name,
|
|
|
|
|
fallbackLocale: enLocale.name,
|
|
|
|
|
messages,
|
2020-08-13 15:18:26 +08:00
|
|
|
|
})
|
|
|
|
|
|
2021-01-19 23:49:07 +08:00
|
|
|
|
ElementLocale.i18n(i18n.global.t)
|
|
|
|
|
|
|
|
|
|
const app = createApp(App)
|
|
|
|
|
app.use(i18n)
|
2020-08-13 15:18:26 +08:00
|
|
|
|
```
|
|
|
|
|
|
2021-01-19 23:49:07 +08:00
|
|
|
|
### 通过 CDN 的方式加载语言文件
|
2020-08-13 15:18:26 +08:00
|
|
|
|
|
|
|
|
|
```html
|
|
|
|
|
<script src="//unpkg.com/vue"></script>
|
2020-10-16 11:14:34 +08:00
|
|
|
|
<script src="//unpkg.com/element-plus"></script>
|
2020-12-23 16:38:06 +08:00
|
|
|
|
<script src="//unpkg.com/element-plus/lib/umd/locale/es.js"></script>
|
|
|
|
|
<script src="//unpkg.com/dayjs/locale/zh-cn.js"></script>
|
2020-08-13 15:18:26 +08:00
|
|
|
|
|
|
|
|
|
<script>
|
2020-12-23 16:38:06 +08:00
|
|
|
|
ELEMENT.locale(ELEMENT.lang.zhCn)
|
2020-08-13 15:18:26 +08:00
|
|
|
|
</script>
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
搭配 `vue-i18n` 使用
|
|
|
|
|
|
|
|
|
|
```html
|
|
|
|
|
<script src="//unpkg.com/vue"></script>
|
|
|
|
|
<script src="//unpkg.com/vue-i18n/dist/vue-i18n.js"></script>
|
2020-10-16 11:14:34 +08:00
|
|
|
|
<script src="//unpkg.com/element-plus"></script>
|
2020-11-14 01:39:03 +08:00
|
|
|
|
<script src="//unpkg.com/element-plus/lib/umd/locale/zh-cn.js"></script>
|
2020-10-16 11:14:34 +08:00
|
|
|
|
<script src="//unpkg.com/element-plus/lib/umd/locale/en.js"></script>
|
2020-08-13 15:18:26 +08:00
|
|
|
|
|
|
|
|
|
<script>
|
2021-01-19 23:49:07 +08:00
|
|
|
|
const i18n = Vue18n.createI18n({
|
|
|
|
|
locale: Element.lang.zhCN.name,
|
|
|
|
|
fallbackLocale: Element.lang.en.name,
|
|
|
|
|
messages: {
|
|
|
|
|
[ELEMENT.lang.en.name]: {
|
|
|
|
|
// el 这个属性很关键,一定要保证有这个属性,
|
|
|
|
|
el: ELEMENT.lang.en.el,
|
|
|
|
|
// 定义您自己的字典,但是请不要和 `el` 重复,这样会导致 ElementPlus 内部组件的翻译失效.
|
|
|
|
|
message: {
|
|
|
|
|
hello: 'hello world',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
[ELEMENT.lang.zhCN.name]: {
|
|
|
|
|
el: ELEMENT.lang.zhCN.el,
|
|
|
|
|
// 定义您自己的字典,但是请不要和 `el` 重复,这样会导致 ElementPlus 内部组件的翻译失效.
|
|
|
|
|
message: {
|
|
|
|
|
hello: '你好,世界',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
testLocale: {
|
|
|
|
|
el: {},
|
|
|
|
|
// 没有定义 message 字段,会 fallback 回到 en 去.
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
const app = Vue.createApp()
|
|
|
|
|
app.use(i18n)
|
2020-08-13 15:18:26 +08:00
|
|
|
|
</script>
|
|
|
|
|
```
|
|
|
|
|
|
2020-10-16 11:14:34 +08:00
|
|
|
|
目前 Element Plus 内置了以下语言:
|
2021-01-19 23:49:07 +08:00
|
|
|
|
|
2020-08-13 15:18:26 +08:00
|
|
|
|
<ul class="language-list">
|
2020-11-09 14:53:43 +08:00
|
|
|
|
<li>简体中文(zh-cn)</li>
|
2020-08-13 15:18:26 +08:00
|
|
|
|
<li>英语(en)</li>
|
|
|
|
|
<li>德语(de)</li>
|
|
|
|
|
<li>葡萄牙语(pt)</li>
|
|
|
|
|
<li>西班牙语(es)</li>
|
|
|
|
|
<li>丹麦语(da)</li>
|
|
|
|
|
<li>法语(fr)</li>
|
2020-11-09 14:53:43 +08:00
|
|
|
|
<li>挪威语(nb-no)</li>
|
|
|
|
|
<li>繁体中文(zh-tw)</li>
|
2020-08-13 15:18:26 +08:00
|
|
|
|
<li>意大利语(it)</li>
|
|
|
|
|
<li>韩语(ko)</li>
|
|
|
|
|
<li>日语(ja)</li>
|
|
|
|
|
<li>荷兰语(nl)</li>
|
|
|
|
|
<li>越南语(vi)</li>
|
2020-11-19 15:58:25 +08:00
|
|
|
|
<li>俄语(ru)</li>
|
|
|
|
|
<li>土耳其语(tr)</li>
|
2020-08-13 15:18:26 +08:00
|
|
|
|
<li>巴西葡萄牙语(pt-br)</li>
|
|
|
|
|
<li>波斯语(fa)</li>
|
|
|
|
|
<li>泰语(th)</li>
|
|
|
|
|
<li>印尼语(id)</li>
|
|
|
|
|
<li>保加利亚语(bg)</li>
|
|
|
|
|
<li>波兰语(pl)</li>
|
|
|
|
|
<li>芬兰语(fi)</li>
|
2020-11-19 15:58:25 +08:00
|
|
|
|
<li>瑞典语(sv)</li>
|
2020-08-13 15:18:26 +08:00
|
|
|
|
<li>希腊语(el)</li>
|
|
|
|
|
<li>斯洛伐克语(sk)</li>
|
|
|
|
|
<li>加泰罗尼亚语(ca)</li>
|
2020-11-19 15:58:25 +08:00
|
|
|
|
<li>捷克语(cs)</li>
|
|
|
|
|
<li>乌克兰语(uk)</li>
|
2020-08-13 15:18:26 +08:00
|
|
|
|
<li>土库曼语(tk)</li>
|
|
|
|
|
<li>泰米尔语(ta)</li>
|
|
|
|
|
<li>拉脱维亚语(lv)</li>
|
2020-11-19 15:58:25 +08:00
|
|
|
|
<li>南非荷兰语(af)</li>
|
|
|
|
|
<li>爱沙尼亚语(et)</li>
|
2020-08-13 15:18:26 +08:00
|
|
|
|
<li>斯洛文尼亚语(sl)</li>
|
|
|
|
|
<li>阿拉伯语(ar)</li>
|
|
|
|
|
<li>希伯来语(he)</li>
|
|
|
|
|
<li>立陶宛语(lt)</li>
|
|
|
|
|
<li>蒙古语(mn)</li>
|
2020-11-19 15:58:25 +08:00
|
|
|
|
<li>哈萨克斯坦语(kk)</li>
|
2020-08-13 15:18:26 +08:00
|
|
|
|
<li>匈牙利语(hu)</li>
|
|
|
|
|
<li>罗马尼亚语(ro)</li>
|
|
|
|
|
<li>库尔德语(ku)</li>
|
2020-11-09 14:53:43 +08:00
|
|
|
|
<li>维吾尔语(ug-cn)</li>
|
2020-08-13 15:18:26 +08:00
|
|
|
|
<li>高棉语(km)</li>
|
|
|
|
|
<li>塞尔维亚语(sr)</li>
|
|
|
|
|
<li>巴斯克语(eu)</li>
|
2020-11-19 15:58:25 +08:00
|
|
|
|
<li>吉尔吉斯语(ky)</li>
|
|
|
|
|
<li>亚美尼亚语 (hy-am)</li>
|
2020-08-13 15:18:26 +08:00
|
|
|
|
<li>克罗地亚 (hr)</li>
|
|
|
|
|
<li>世界语 (eo)</li>
|
|
|
|
|
</ul>
|
|
|
|
|
|
2020-11-09 14:53:43 +08:00
|
|
|
|
如果你需要使用其他的语言,欢迎贡献 PR:只需在 [这里](https://github.com/element-plus/element-plus/tree/dev/packages/locale/lang) 添加一个语言配置文件即可。
|