vue2+element-ui使用vue-i18n进行国际化的多语言/国际化详细教程

 更新时间:2023年12月20日 10:52:48   作者:V-Velaciela  
这篇文章主要给大家介绍了关于vue2+element-ui使用vue-i18n进行国际化的多语言/国际化的相关资料,I18n是Vue.js的国际化插件,项目里面的中英文等多语言切换会使用到这个东西,需要的朋友可以参考下

安装包

注意:vue2.0要用8版本的,使用9版本的会报错

npm install vue-i18n@8.27.0 --save

创建相关的语言包文件

在src目录下,创建新的文件夹,命名为i18n

  在文件夹i18n中新建langs文件夹,里边放语言文件.js
      zh.js:存放所有的中文显示内容
      en.js:存放所有的英文显示内容
 与langs文件夹同级,创建index.js:用于配置i18n,并导出i18n 

文件夹目录

zh.js

export default { 
    //中文
    msg: {
        msg1: '测试一',
        msg2: '测试二',
        msg3: '测试三',
        message: "第一个值",
        display: "第二个值",
        // 材料列表的材料类型
        materialType: {
            nameSteel: '钢材',
            nameAlumialloy: '铝合金',
            nameCfrp: '碳纤维复合材料',
            nameSoft: '软材料',
            nameOther: '其他',
        },
    }
}

en.js

export default { 
  //英文
    msg: {
        msg1: 'test one',
        msg2: 'test two',
        msg3: 'test three',
        message: "first value",
        display: "second value",
        // 材料列表的材料类型
        materialType: {
            nameSteel: 'Steel',
            nameAlumialloy: 'Aluminum alloy',
            nameCfrp: 'Carbon Fiber Composites',
            nameSoft: 'Soft Materials',
            nameOther: 'Other',
        },
    }
}

index.js

import Vue from "vue"
import VueI18n from "vue-i18n"
//引入自定义语言配置  
import zh from './langs/zh'
import en from './langs/en'
//引入UI框架语言配置---elementui
import ElementLocale from 'element-ui/lib/locale'
import enLocale from 'element-ui/lib/locale/lang/en'
import zhLocale from 'element-ui/lib/locale/lang/zh-CN'

ElementLocale.i18n((key, value) => i18n.t(key, value)) //为了实现element插件的多语言切换
Vue.use(VueI18n); // 全局注册国际化包

// 准备翻译的语言环境信息
const i18n = new VueI18n({
    locale: localStorage.getItem('lang') || "zh", //将语言标识存入localStorage或sessionStorage中,页面刷新不会默认中文显示
    messages: {
        // 中文语言包
        'zh': {
            ...zh,
            ...zhLocale
        },
        //英文语言包
        'en': {
            ...en,
            ...enLocale
        }
    },
    silentTranslationWarn: true, //解决vue-i18n黄色警告"value of key 'xxx' is not a string"和"cannot translate the value of keypath 'xxx'.use the value of keypath as default",可忽略
    globalInjection: true, // 全局注入
    fallbackLocale: 'zh', // 指定的locale没有找到对应的资源或当前语种不存在时,默认设置当前语种为中文
});

export default i18n

在main里导入语言包文件

main.js

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import ELEMENT from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import 'element-ui/lib/theme-chalk/display.css'
import i18n from './i18n'
...

// Vue.use(ELEMENT)
Vue.use(ELEMENT,
    {
      i18n: (key, value) => i18n.t(key, value) // 在注册Element时设置i18n的处理方法,可以实现当点击切换按钮后,elementUI可以自动调用.js语言文件实现多语言切换
    }
)

...

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

基本使用

使用方式一

<!-- 使用方式一,在模板字符串中使用 -->
 <h1>使用方式一:</h1>
 <h4>{{ $t('msg.msg1') }}</h4>

效果图

英文

中文

使用方式二

 <!-- 使用方式二,绑定属性使用 -->
 <h1>使用方式二:</h1>
 <h4 v-text="$t('msg.msg2')"></h4>
 <el-input :placeholder="$t('msg.msg2')"></el-input>

效果图

英文

中文

使用方式三

 <template>
    <!-- 使用方式三,在script标签内的data中先声明变量,然后获取到值,最后渲染到html中 -->
    <h1>使用方式三:</h1>
    <h4>{{ title }}</h4>
    <h4 v-text="title"></h4>
    <!-- 标签页-->
    <el-tabs @tab-click = "handleClick">
        <el-tab-pane :label = "materialType[0].name" :name = "materialType[0].id" v-model="getSteel">
        </el-tab-pane>
        <el-tab-pane :label = "materialType[0].name" :name = "materialType[0].id" v-model="getAlumialloy">
        </el-tab-pane>
        <el-tab-pane :label = "materialType[0].name" :name = "materialType[0].id" v-model="getCfrp">
        </el-tab-pane>
        <el-tab-pane :label = "materialType[0].name" :name = "materialType[0].id" v-model="getSoft">
        </el-tab-pane>
        <el-tab-pane :label = "materialType[0].name" :name = "materialType[0].id" v-model="getOther">
        </el-tab-pane>
    </el-tabs>
 </template>
 <script>
   export default {
     name: '',
     // 在data节点中使用
     data () {
       return {
         title: this.$t('msg.msg3'), //this.$i18n.t('')也行
         // 标签页
         materialType: [
           {
             id: '1',
             // name: '钢材'
             name: this.$t('msg.materialType.nameSteel')
           },
           {
             id: '2',
             // name: '铝合金'
             name: this.$t('msg.materialType.nameAlumialloy')
           },
           {
             id: '3',
             // name: '碳纤维复合材料'
             name: this.$t('msg.materialType.nameCfrp')
           },
           {
             id: '4',
             // name: '软材料'
             name: this.$t('msg.materialType.nameSoft')
           },
           {
             id: '5',
             // name: '其他'
             name: this.$t('msg.materialType.nameOther')
           }
         ],
       }
     },
     // 在methods节点中使用
     methods: {
        console.log(this.$t('msg.materialType.nameOther'))
     },
     // 在 computed节点中使用
     computed: {
       infoX() {
         return this.$t('msg.materialDetailsTitle3.infoX')
       },
     },
     mounted() {},
   }
 </script>

效果图`

英文

英文

中文

中文

注意:这种方式存在更新this.$i18n.locale的值时无法自动切换的问题,需要刷新页面才能切换语言。解决办法主要有两种:

解决办法一:调整写法

错误的写法为:

错误写法

正确的写法为:

正确写法

解决方法二:写在计算属性computed:{…}中,不要写在data(){return{…}}中

正确写法

请查看官方讨论贴,官方回复https://github.com/kazupon/vue-i18n/issues/271

使用方式四

<!-- 使用方式四,msgss存在多个值,使用了模板字符串,拿到msgss的值再拼接,构成msg.message或者msg.display -->
<h1>使用方式四:存在多个值之间的切换</h1>
<h4>{{ $t(`msg.${msgss}`) }}</h4>
<button @click="changeWord">切换按钮</button>

 data () {
    return {
       // 定义变量用于切换不同的值,对应着en.js和zh.js中的message和display
       msgss:'message'
     }
  },
  methods: {
    // 用于不同的值
    changeWord() {
      if(this.msgss === 'message'){
        this.msgss = 'display'
      } else {
        this.msgss = 'message'
      }
    }
   } 

效果图

第一个值

第二个值

英文

英文

使用方式五

<!-- 使用elementui的翻译包 -->
<h1>使用方式五:elementui的翻译包</h1>
<h4>{{$t('el.colorpicker.confirm')}}</h4>

在‘node_modules/_element-ui@2.15.13@element-ui/lib/locale/lang中有elementui组件库提供的语言包文件

文件路径

例子

效果图

英文

中文

切换语言

   <!-- 切换语言 -->
   <h1>切换语言方式</h1>
   <button @click="switchLang">切换语言</button>
   <el-select @change="langChange" placeholder="请选择语言">
      <el-option v-for="item in options"
         :key="item.value"
         :label="item.label"
         :value="item.value">
      </el-option>
    </el-select>

   options:[
        {
          value:'zh',
          label:'中文'
        },
        {
          value: 'en',
          label: 'English'
        }
   ],
   
   switchLang(){
      // 读取缓存
      let lang = localStorage.getItem('lang') ? localStorage.getItem('lang') : 'zh'
      if (lang === 'zh') {
        this.$i18n.locale = 'en'
        localStorage.setItem('lang', 'en') // en表示英文,zh表示中文,可根据自己喜好设定,尽量通俗易懂
      } else {
        this.$i18n.locale = 'zh'
        localStorage.setItem('lang', 'zh')
      }
      location.replace(location) //刷新网页
    },

    langChange(e){
      // this.$nextTick无法修改方式三
      this.$nextTick(() => {
        localStorage.setItem('lang', e)
        this.$i18n.locale = e
      })
      // location.replace(location)
    },

总结

到此这篇关于vue2+element-ui使用vue-i18n进行国际化的多语言/国际化的文章就介绍到这了,更多相关vue2 vue-i18n国际化多语言内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 在 vue-cli v3.0 中使用 SCSS/SASS的方法

    在 vue-cli v3.0 中使用 SCSS/SASS的方法

    关于如何在 vue-cli v3.0 中使用 SCSS/SASS,这里提供三种方案。感兴趣的朋友通过本文一起学习吧
    2018-06-06
  • 详解element-ui动态限定的日期范围选择器代码片段

    详解element-ui动态限定的日期范围选择器代码片段

    这篇文章主要介绍了element-ui动态限定的日期范围选择器代码片段,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • vue2项目中全局封装axios问题

    vue2项目中全局封装axios问题

    这篇文章主要介绍了vue2项目中全局封装axios问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • vue 在单页面应用里使用二级套嵌路由

    vue 在单页面应用里使用二级套嵌路由

    这篇文章主要介绍了vue 在单页面应用里使用二级套嵌路由,帮助大家更好的理解和使用vue框架,感兴趣的朋友可以了解下
    2020-12-12
  • 基于mpvue搭建微信小程序项目框架的教程详解

    基于mpvue搭建微信小程序项目框架的教程详解

    mpvue从底层支持 Vue.js 语法和构建工具体系,同时再结合相关UI组件库,便可以高效的实现小程序开发。这篇文章主要介绍了基于mpvue搭建小程序项目框架 ,需要的朋友可以参考下
    2019-04-04
  • 详解如何添加babel polyfill

    详解如何添加babel polyfill

    这篇文章主要介绍了详解vue如何添加babel polyfill实现方法,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • vue3中h函数的常用使用方式汇总

    vue3中h函数的常用使用方式汇总

    其实h()函数和createVNode()函数都是创建dom节点,他们的作用是一样的,下面这篇文章主要给大家介绍了关于vue3中h函数的常用使用方式,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • Vue3 diff算法之双端diff算法详解

    Vue3 diff算法之双端diff算法详解

    双端Diff在可以解决更多简单Diff算法处理不了的场景,且比简单Diff算法性能更好。本文将通过示例为大家详细讲讲双端diff算法的实现与使用,需要的可以参考一下
    2022-09-09
  • vue实现移动端可拖拽式icon图标

    vue实现移动端可拖拽式icon图标

    这篇文章主要为大家详细介绍了vue实现移动端可拖拽式icon图标,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • vue3:vue2中protoType更改为config.globalProperties问题

    vue3:vue2中protoType更改为config.globalProperties问题

    这篇文章主要介绍了vue3:vue2中protoType更改为config.globalProperties问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09

最新评论