Skip to content

国际化 专业版

INFO

该特性由 vue-i18n 提供技术支持。

vscode 扩展

如果使用 vscode 进行开发,推荐安装 i18n Ally 这个扩展。

安装该扩展后,代码里可以实时查看对应语言的内容。

语言包

语言包存放在 /src/locales/lang/ 目录下,因为 Element Plus 本身也有自己的语言包,所以在做国际化支持的时候,框架的语言包和 Element Plus 的语言包需要进行数据合并,可点击这里查看 Element Plus 的语言包文件。

假设你已经在 /src/locales/lang/ 目录下新增并配置好了一个日文语言包 ja.json ,然后你需要到 /src/locales/index.ts 文件里做以下调整:

ts
import elementLocaleZhCN from 'element-plus/dist/locale/zh-cn.mjs'
import elementLocaleZhTW from 'element-plus/dist/locale/zh-tw.mjs'
import elementLocaleEn from 'element-plus/dist/locale/en.mjs'
// 引入 Element Plus 的日文语言包
import elementLocaleJa from 'element-plus/dist/locale/ja.mjs'

function getElementLocales() {
  const locales: {
    [key: string]: any
  } = {}
  for (const key in messages) {
    locales[key] = {}
    switch (key) {
      case 'zh-cn':
        Object.assign(locales[key], elementLocaleZhCN, { labelName: '中文(简体)' })
        break
      case 'zh-tw':
        Object.assign(locales[key], elementLocaleZhTW, { labelName: '中文(繁體)' })
        break
      case 'en':
        Object.assign(locales[key], elementLocaleEn, { labelName: 'English' })
        break
      // 在这里增加一个 case 选项,其中 labelName 会在语言选择器里显示
      case 'ja':
        Object.assign(locales[key], elementLocaleJa, { labelName: '日本語' })
        break
    }
  }
  return locales
}

路由设置

以中文(简体)为例,打开 /src/locales/lang/zh-cn.json 文件可以看到路由相关的配置,在 route 对象里可以扩展需要开启国际化支持的路由。

json
{
  "pages": {
    "navbar": {
      "root": "导航栏",
      "default": "默认导航栏",
      "none": "无导航栏"
    }
  }
}

如果需要新增某个路由的国际化支持,光设置好中文(简体)的还不行,其它语言包文件里也要同步添加。当都设置好后,可在该路由的 title 参数上直接设置对应 key 值,例如:

ts
meta: {
  title: 'pages.navbar.default',
},

单页组件

如果每个页面都要做国际化支持,那语言包文件就会变得无比庞大且难以维护,推荐在每个页面组件里使用 <i18n> 自定义块进行语言维护,可访问 /src/views/feature/function/i18n.vue 查看示例。

更多 vue-i18n 的使用技巧请参考官方文档。

与服务端交互

所有的请求均会在请求头里带上 Accept-Language ,后端可根据这一状态信息做动态数据国际化处理。