i18n-多语言切换

484 阅读2分钟

在工作中,遇到了对项目使用多语言切换的需求,该怎么做

装包: npm i vue-i18n@8.22.2

配置i18n

// 进行多语言支持配置
import Vue from 'vue' // 引入Vue
import VueI18n from 'vue-i18n' // 引入国际化的插件包
import locale from 'element-ui/lib/locale'
import elementEN from 'element-ui/lib/locale/lang/en' // 引入ele的英文包
import elementZH from 'element-ui/lib/locale/lang/zh-CN' // 引入ele的中文包
Vue.use(VueI18n) // 全局注册国际化包

// 创建国际化插件的实例
const i18n = new VueI18n({
  // 指定语言类型 zh表示中文  en表示英文
  locale: 'zh',
  // 将elementUI语言包加入到插件语言数据里
  messages: {
    // 英文环境下的语言数据
    en: {
      ...elementEN
    },
    // 中文环境下的语言数据
    zh: {
      ...elementZH
    }
  }
})
// 配置elementUI 语言转换关系
locale.i18n((key, value) => i18n.t(key, value))

export default i18n

挂载 i18n的插件

// 省略其他...
import i18n from '@/lang'
// 加入到根实例配置项中
new Vue({
  el: '#app',
  router,
  store,
  i18n,
  render: h => h(App)
})

image.png

自定义内容多语言配置

将文件放在index.js同一级

image.png

index.js导入:

// 进行多语言支持配置
import Vue from 'vue' // 引入Vue
import VueI18n from 'vue-i18n' // 引入国际化的插件包
import locale from 'element-ui/lib/locale'
import elementEN from 'element-ui/lib/locale/lang/en' // 引入饿了么的英文包
import elementZH from 'element-ui/lib/locale/lang/zh-CN' // 引入饿了么的中文包
import elementUG from 'element-ui/lib/locale/lang/ug-CN' // 引入饿了么的阿拉伯包
// 引入自定义中文包
import customZH from './zh'
// 引入自定义英文包
import customEN from './en'
Vue.use(VueI18n) // 全局注册国际化包

// 创建国际化插件的实例
const i18n = new VueI18n({
  // 指定语言类型 zh表示中文  en表示英文
  locale: 'en',
  // 将elementUI语言包加入到插件语言数据里
  messages: {
    // 英文环境下的语言数据
    en: {
      ...elementEN,
      ...customEN
    },
    // 中文环境下的语言数据
    zh: {
      ...elementZH,
      ...customZH
    },
    // 阿拉伯环境下的语言数据
    ug: {
      ...elementUG
    }
  }
})
// 配置elementUI 语言转换关系
locale.i18n((key, value) => i18n.t(key, value))

export default i18n

新增内容截图

image.png

在en.js和zh.中分别设置哪个需要更改转换的内容

image.png

image.png

用t(′属性名′)来生成标题。这里的t('属性名')来生成标题。这里的t(′属性名′)来生成标题。这里的t是引入了i18n之后,自动挂载在vue实例上的功能。

eg:

 <el-dropdown-item divided @click.native="logout">
            <span style="display:block;"> 退出登录</span>
          </el-dropdown-item>
<el-dropdown-item divided @click.native="logout">
            <span style="display:block;">{{ $t('navbar.logOut') }}</span>
          </el-dropdown-item>

locale: '',转换 en 或 zh 即可

熟悉用法后,还是需要去封装全局组件,达到全屏转换的效果.