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

6.7 KiB
Raw Blame History

国际化

Element Plus 组件内部默认使用英语,若希望使用其他语言,则需要进行多语言设置。以中文为例,在 main.js 中:

// 完整引入 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 })

// 按需引入 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 项目的时间日期国际化设置,如月份名称、每周第一天是周几等。并且会自动全局设置已经导入的 Day.js 国际化配置。

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 国际化配置

import 'dayjs/locale/fr'
dayjs.locale('fr')

如果使用其它语言,默认情况下英文语言包依旧是被引入的,可以使用 webpack 的 NormalModuleReplacementPlugin 替换默认语言包。

webpack.config.js

{
  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,搭配使用能更方便地实现多语言切换。

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 的处理方法。

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,你需要手动处理。

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

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 的方式加载语言文件

<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 使用

<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 内置了以下语言:

  • 简体中文zh-cn
  • 英语en
  • 德语de
  • 葡萄牙语pt
  • 西班牙语es
  • 丹麦语da
  • 法语fr
  • 挪威语nb-no
  • 繁体中文zh-tw
  • 意大利语it
  • 韩语ko
  • 日语ja
  • 荷兰语nl
  • 越南语vi
  • 俄语ru
  • 土耳其语tr
  • 巴西葡萄牙语pt-br
  • 波斯语fa
  • 泰语th
  • 印尼语id
  • 保加利亚语bg
  • 波兰语pl
  • 芬兰语fi
  • 瑞典语sv
  • 希腊语el
  • 斯洛伐克语sk
  • 加泰罗尼亚语ca
  • 捷克语cs
  • 乌克兰语uk
  • 土库曼语tk
  • 泰米尔语ta
  • 拉脱维亚语lv
  • 南非荷兰语af
  • 爱沙尼亚语et
  • 斯洛文尼亚语sl
  • 阿拉伯语ar
  • 希伯来语he
  • 立陶宛语lt
  • 蒙古语mn
  • 哈萨克斯坦语kk
  • 匈牙利语hu
  • 罗马尼亚语ro
  • 库尔德语ku
  • 维吾尔语ug-cn
  • 高棉语km
  • 塞尔维亚语sr
  • 巴斯克语eu
  • 吉尔吉斯语ky
  • 亚美尼亚语 (hy-am)
  • 克罗地亚 (hr)
  • 世界语 (eo)

如果你需要使用其他的语言,欢迎贡献 PR只需在 这里 添加一个语言配置文件即可。