后台项目实现多语言切换

初始化多语言包

本功能使用国际化 i18n 方案。通过 vue-i18n而实现。

首先安装国际化的包

 npm i vue-i18n

第二步 ,需要单独一个多语言的实例化文件

import Vue from 'vue' // 引入Vue
import VueI18n from 'vue-i18n' // 引入国际化的包
import Cookie from 'js-cookie' // 引入cookie包
import elementEN from 'element-ui/lib/locale/lang/en' // 引入饿了么的英文包
import elementZH from 'element-ui/lib/locale/lang/zh-CN' // 引入饿了么的中文包
Vue.use(VueI18n) // 全局注册国际化包
export default new VueI18n({
     
  locale: Cookie.get('language') || 'zh', // 从cookie中获取语言类型 获取不到就是中文
  messages: {
     
    en: {
     
      ...elementEN // 将饿了么的英文语言包引入
    },
    zh: {
     
      ...elementZH // 将饿了么的中文语言包引入
    }
  }
})

第三步,,在main.js中对挂载 i18n的插件,并设置element为当前的语言

// 设置element为当前的语言
Vue.use(ElementUI, {
     
  i18n: (key, value) => i18n.t(key, value)
})

new Vue({
     
  el: '#app',
  router,
  store,
  i18n,
  render: h => h(App)
})

引入自定义语言包

针对英文和中文,我们可以提供两个不同的语言包zh.js ,en.js

import customZH from './zh' // 引入自定义中文包
import customEN from './en' // 引入自定义英文包
Vue.use(VueI18n) // 全局注册国际化包
export default new VueI18n({
     
  locale: Cookie.get('language') || 'zh', // 从cookie中获取语言类型 获取不到就是中文
  messages: {
     
    en: {
     
      ...elementEN, // 将饿了么的英文语言包引入
      ...customEN
    },
    zh: {
     
      ...elementZH, // 将饿了么的中文语言包引入
      ...customZH
    }
  }
})

应用到左侧菜单栏

当我们全局注册i18n的时候,每个组件都会拥有一个**$t**的方法,它会根据传入的key,自动的去寻找当前语言的文本,我们可以将左侧菜单变成多语言展示文本

<item :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)" :title="$t('route.'+onlyOneChild.name)" />

当文本的值为嵌套时,可以通过**$t(key1.key2.key3…)**的方式获取

封装多语言插件

<template>
  <el-dropdown trigger="click" @command="changeLanguage">
    <!-- 这里必须加一个div -->
    <div>
      <svg-icon style="color:#fff;font-size:20px" icon-class="language" />
    </div>
    <el-dropdown-menu slot="dropdown">
      <el-dropdown-item command="zh" :disabled="'zh'=== $i18n.locale ">中文</el-dropdown-item>
      <el-dropdown-item command="en" :disabled="'en'=== $i18n.locale ">en</el-dropdown-item>
    </el-dropdown-menu>
  </el-dropdown>
</template>

<script>
import Cookie from 'js-cookie'
export default {
     
  methods: {
     
    changeLanguage(lang) {
     
      Cookie.set('language', lang) // 切换多语言
      this.$i18n.locale = lang // 设置给本地的i18n插件
      this.$message.success('切换多语言成功')
    }
  }
}
</script>

在Navbar组件中引入

<lang class="right-menu-item" />

后台项目实现多语言切换_第1张图片
后台项目实现多语言切换_第2张图片

你可能感兴趣的:(vue)