element-plus/website/docs/zh-CN/i18n.md
zazzaz c17332f3a9
doc: Set Day.js locale (#1096)
* chore: update time picker doc

* chore: update

* chore: update

* chore: update
2020-12-23 16:38:06 +08:00

252 lines
6.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 国际化
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'
import { ElButton, ElSelect } from 'element-plus'
import lang from 'element-plus/lib/locale/lang/zh-cn'
import 'dayjs/locale/zh-cn'
import locale from 'element-plus/lib/locale'
// 设置语言
locale.use(lang)
// 引入组件
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`
Element Plus 兼容 [vue-i18n@5.x](https://github.com/kazupon/vue-i18n),搭配使用能更方便地实现多语言切换。
```javascript
import Vue from 'vue'
import VueI18n from 'vue-i18n'
import ElementPlus from 'element-plus'
import enLocale from 'element-plus/lib/locale/lang/en'
import zhLocale from 'element-plus/lib/locale/lang/zh-cn'
import App from './App.vue';
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 插件
如果不使用 `vue-i18n@5.x`,而是用其他的 i18n 插件Element Plus 将无法兼容,但是可以自定义 Element Plus 的 i18n 的处理方法。
```javascript
import Vue from 'vue'
import ElementPlus from 'element-plus'
import enLocale from 'element-plus/lib/locale/lang/en'
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'
import ElementPlus from 'element-plus'
import VueI18n from 'vue-i18n'
import enLocale from 'element-plus/lib/locale/lang/en'
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'
import enLocale from 'element-plus/lib/locale/lang/en'
import zhLocale from 'element-plus/lib/locale/lang/zh-cn'
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>
<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>
<script src="//unpkg.com/element-plus"></script>
<script src="//unpkg.com/element-plus/lib/umd/locale/zh-cn.js"></script>
<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>
```
目前 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) 添加一个语言配置文件即可。