## 国际化 Element Plus 组件内部默认使用英语,若希望使用其他语言,则需要进行多语言设置。以中文为例,在 main.js 中,如果是完整引入 Element Plus: ```javascript 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 }) ``` 如果是通过 **es modules** 按需引入 Element Plus: ```typescript import { createApp } from 'vue' import { ElButton, locale } from 'element-plus' import lang from 'element-plus/lib/locale/lang/zh-cn' import 'dayjs/locale/zh-cn' locale(lang) createApp(App).component(ElButton.name, ElButton) ``` 如果是通过 [babel-plugin-component](#/zh-CN/component/quickstart#on-demand) 插件按需引入 Element Plus: ```typescript import { createApp } 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) // 引入组件 createApp(App).component(ElButton.name, ElButton) createApp(App).component(ElSelect.name, ElSelect) ``` ### 设置 Day.js 国际化 Element Plus 直接使用了 [Day.js](https://day.js.org/) 项目的时间日期国际化设置,如月份名称、每周第一天是周几等。并且会自动全局设置已经导入的 Day.js 国际化配置。 ```typescript 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 国际化配置 ```typescript import 'dayjs/locale/fr' dayjs.locale('fr') ``` 如果使用其它语言,默认情况下英文语言包依旧是被引入的,可以使用 webpack 的 NormalModuleReplacementPlugin 替换默认语言包。 **webpack.config.js** ```typescript { plugins: [ new webpack.NormalModuleReplacementPlugin( /element-plus[\/\\]lib[\/\\]locale[\/\\]lang[\/\\]en/, 'element-plus/lib/locale/lang/zh-cn', ), ] } ``` ### 兼容 `vue-i18n@9.x` 如果需要查看 [VueI18n的文档](https://vue-i18n-next.intlify.dev/guide/#html), 请点击这个链接去查看 ```typescript import { createApp } from 'vue' import { createI18n } 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 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 的定义在下方 👇 }, } const i18n = createI18n({ locale: zhLocale.name, fallbackLocale: enLocale.name, messages, }) const app = createApp(App) app.use(ElementPlus, { i18n: i18n.global.t, }) // 要记得使用这个插件. app.use(i18n) ``` ### 兼容其他 i18n 插件 如果不使用 `vue-i18n@9.x`,而是用其他的 i18n 插件,Element Plus 将无法兼容,但是可以自定义 Element Plus 的 i18n 的处理方法。 :::tip 一旦设置了这个方法,ElementPlus 内置的翻译功能就会失效,会使用用户定义的翻译功能,所以一定要确保翻译方法能够正确的翻译 `el.scope.subName` 的格式,如果自定义的方法无法翻译 `el.select.noData` 的格式,将会使组件的文本失效. ::: ```typescript 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' // 这是 i18n 函数的函数签名. type i18n = (...args: any[]) => string Vue.use(Element, { i18n: function(path, options) { // ... }, // others. }) ``` ### 按需加载里定制 i18n 如果您需要按需加载翻译文件,请查看[按需加载](https://vue-i18n-next.intlify.dev/guide/advanced/lazy.html) ```typescript import { createApp } from 'vue' import { createI18n } 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 ElementLocale from 'element-plus/lib/locale' import App from './App.vue' 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 的定义在下方 👇 }, } const i18n = createI18n({ locale: zhLocale.name, fallbackLocale: enLocale.name, messages, }) ElementLocale.i18n(i18n.global.t) const app = createApp(App) app.use(i18n) ``` ### 通过 CDN 的方式加载语言文件 ```html ``` 搭配 `vue-i18n` 使用 ```html ``` 目前 Element Plus 内置了以下语言: