element-plus/website/docs/zh-CN/i18n.md

252 lines
6.7 KiB
Markdown
Raw Normal View History

## 国际化
Element Plus 组件内部默认使用英语,若希望使用其他语言,则需要进行多语言设置。以中文为例,在 main.js 中:
```javascript
// 完整引入 Element
import { createApp } from 'vue'
import ElementPlus from 'element-plus'
import 'dayjs/locale/zh-cn'
import locale from 'element-plus/lib/locale/lang/zh-cn'
createApp(App).use(ElementPlus, { locale })
```
```javascript
// 按需引入 Element
import Vue from 'vue'
2020-11-23 16:28:06 +08:00
import { ElButton, ElSelect } from 'element-plus'
import lang from 'element-plus/lib/locale/lang/zh-cn'
import 'dayjs/locale/zh-cn'
2020-10-16 11:14:34 +08:00
import locale from 'element-plus/lib/locale'
// 设置语言
locale.use(lang)
// 引入组件
2020-11-23 16:28:06 +08:00
Vue.component(ElButton.name, ElButton)
Vue.component(ElSelect.name, ElSelect)
```
### 设置 Day.js 国际化
Element Plus 直接使用了 [Day.js](https://day.js.org/) 项目的时间日期国际化设置,如月份名称、每周第一天是周几等。并且会自动全局设置已经导入的 Day.js 国际化配置。
```javascript
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 国际化配置
```javascript
import 'dayjs/locale/fr'
dayjs.locale('fr')
```
如果使用其它语言,默认情况下英文语言包依旧是被引入的,可以使用 webpack 的 NormalModuleReplacementPlugin 替换默认语言包。
**webpack.config.js**
```javascript
{
plugins: [
new webpack.NormalModuleReplacementPlugin(/element-plus[\/\\]lib[\/\\]locale[\/\\]lang[\/\\]en/, 'element-plus/lib/locale/lang/zh-cn')
]
}
```
## 兼容 `vue-i18n@5.x`
2020-10-16 11:14:34 +08:00
Element Plus 兼容 [vue-i18n@5.x](https://github.com/kazupon/vue-i18n),搭配使用能更方便地实现多语言切换。
```javascript
import Vue from 'vue'
import VueI18n 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'
2020-10-16 11:22:08 +08:00
import App from './App.vue';
2020-10-16 11:22:08 +08:00
const app = createApp(App)
app.use(ElementPlus)
Vue.use(VueI18n)
Vue.config.lang = 'zh-cn'
Vue.locale('zh-cn', zhLocale)
Vue.locale('en', enLocale)
```
## 兼容其他 i18n 插件
2020-10-16 11:14:34 +08:00
如果不使用 `vue-i18n@5.x`,而是用其他的 i18n 插件Element Plus 将无法兼容,但是可以自定义 Element Plus 的 i18n 的处理方法。
```javascript
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'
Vue.use(Element, {
i18n: function (path, options) {
// ...
}
})
```
## 兼容 `vue-i18n@6.x`
默认不支持 6.x 的 `vue-i18n`,你需要手动处理。
```javascript
import Vue from 'vue'
2020-10-16 11:19:36 +08:00
import ElementPlus from 'element-plus'
import VueI18n from 'vue-i18n'
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'
Vue.use(VueI18n)
const messages = {
en: {
message: 'hello',
...enLocale // 或者用 Object.assign({ message: 'hello' }, enLocale)
},
zh: {
message: '你好',
...zhLocale // 或者用 Object.assign({ message: '你好' }, zhLocale)
}
}
// Create VueI18n instance with options
const i18n = new VueI18n({
locale: 'en', // set locale
messages, // set locale messages
})
Vue.use(Element, {
i18n: (key, value) => i18n.t(key, value)
})
new Vue({ i18n }).$mount('#app')
```
## 按需加载里定制 i18n
```js
import Vue from 'vue'
import DatePicker from 'element/lib/date-picker'
import VueI18n from 'vue-i18n'
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'
Vue.use(VueI18n)
Vue.use(DatePicker)
const messages = {
en: {
message: 'hello',
...enLocale
},
zh: {
message: '你好',
...zhLocale
}
}
// Create VueI18n instance with options
const i18n = new VueI18n({
locale: 'en', // set locale
messages, // set locale messages
})
ElementLocale.i18n((key, value) => i18n.t(key, value))
```
## 通过 CDN 的方式加载语言文件
```html
<script src="//unpkg.com/vue"></script>
2020-10-16 11:14:34 +08:00
<script src="//unpkg.com/element-plus"></script>
<script src="//unpkg.com/element-plus/lib/umd/locale/es.js"></script>
<script src="//unpkg.com/dayjs/locale/zh-cn.js"></script>
<script>
ELEMENT.locale(ELEMENT.lang.zhCn)
</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>
<script>
Vue.locale('en', ELEMENT.lang.en)
Vue.locale('zh-cn', ELEMENT.lang.zhCN)
</script>
```
2020-10-16 11:14:34 +08:00
目前 Element Plus 内置了以下语言:
<ul class="language-list">
<li>简体中文zh-cn</li>
<li>英语en</li>
<li>德语de</li>
<li>葡萄牙语pt</li>
<li>西班牙语es</li>
<li>丹麦语da</li>
<li>法语fr</li>
<li>挪威语nb-no</li>
<li>繁体中文zh-tw</li>
<li>意大利语it</li>
<li>韩语ko</li>
<li>日语ja</li>
<li>荷兰语nl</li>
<li>越南语vi</li>
<li>俄语ru</li>
<li>土耳其语tr</li>
<li>巴西葡萄牙语pt-br</li>
<li>波斯语fa</li>
<li>泰语th</li>
<li>印尼语id</li>
<li>保加利亚语bg</li>
<li>波兰语pl</li>
<li>芬兰语fi</li>
<li>瑞典语sv</li>
<li>希腊语el</li>
<li>斯洛伐克语sk</li>
<li>加泰罗尼亚语ca</li>
<li>捷克语cs</li>
<li>乌克兰语uk</li>
<li>土库曼语tk</li>
<li>泰米尔语ta</li>
<li>拉脱维亚语lv</li>
<li>南非荷兰语af</li>
<li>爱沙尼亚语et</li>
<li>斯洛文尼亚语sl</li>
<li>阿拉伯语ar</li>
<li>希伯来语he</li>
<li>立陶宛语lt</li>
<li>蒙古语mn</li>
<li>哈萨克斯坦语kk</li>
<li>匈牙利语hu</li>
<li>罗马尼亚语ro</li>
<li>库尔德语ku</li>
<li>维吾尔语ug-cn</li>
<li>高棉语km</li>
<li>塞尔维亚语sr</li>
<li>巴斯克语eu</li>
<li>吉尔吉斯语ky</li>
<li>亚美尼亚语 (hy-am)</li>
<li>克罗地亚 (hr)</li>
<li>世界语 (eo)</li>
</ul>
如果你需要使用其他的语言,欢迎贡献 PR只需在 [这里](https://github.com/element-plus/element-plus/tree/dev/packages/locale/lang) 添加一个语言配置文件即可。