当前位置:首页 » 《关注互联网》 » 正文

Vue 国际化之 vue-i18n 的使用

0 人参与  2024年03月30日 10:55  分类 : 《关注互联网》  评论

点击全文阅读


目录

一、安装

二、使用

1、准备语言包

2、准备翻译的语言环境

3、实现语言翻译

三、整合 ElementUI 语言包

1、扩展中文

2、扩展英文 

3、使用扩展语言翻译

四、问题记录

五、扩展

vue3 中使用 vue-i18n


一、安装

npm install vue-i18n

如果在一个模块系统中使用它,你必须通过 Vue.use() 明确地安装 vue-i18n: 

import Vue from 'vue'import VueI18n from 'vue-i18n'Vue.use(VueI18n)

二、使用

在 src 下创建 lang 文件夹。

1、准备语言包

本例我准备了两种语言包,分别是中文和英文:zn、en。在 lang 下创建两个文件,zn.js 和 en.js。

// zn.jsexport default {  main:{    message:"消息",    display:"展示"  }};
// en.jsexport default {  main:{    message:"message",    display:"display"  }}

2、准备翻译的语言环境

在 lang 下创建 index.js,使用如上的两种语言包。

import Vue from "vue";import VueI18n from 'vue-i18n'import zn from "./zn"import en from "./en"Vue.use(VueI18n);   // 全局注册国际化包 // 准备翻译的语言环境信息const i18n = new VueI18n({  locale: "zn",   // 初始化中文  messages: {    "zn":zn,    "en":en  }}); export default i18n

3、实现语言翻译

在 main.js 中将 i18n 注入 vue 中

import i18n from './lang'new Vue({  el: '#app',  router,  store,  i18n,   // 注入,不能缺少  components: { App },  template: '<App/>'})

使用方式

(1)直接使用

<template>  <div style="width: 100%;">    <div>      <div>        <span>{{$t('main.message')}}</span>      </div>    </div>  </div></template>

(2) 语言切换

<template>  <div style="width: 100%;">    <div>      <div>        <span>{{$t('main.message')}}</span>        <button @click="changeLang">切换语言</button>      </div>    </div>  </div></template><script>export default {  methods: {    changeLang() {      if(this.$i18n.locale === 'zn'){   // 判断当前语言        this.$i18n.locale = 'en'   // 设置当前语言      } else {        this.$i18n.locale = 'zn'      }    }  }}</script>

(3)data 变量翻译

假如页面某个名称绑定了 data 中变量,即可能存在多个值,此时又该如何进行语言翻译?

如下,“msg”存在多个取值,我们希望在切换“msg”值同时根据当前语言环境进行翻译。

<template>  <div style="width: 100%;">    <div>      <div>        <span>{{$t('main.message')}}</span>        <button @click="changeLang">切换语言</button>      </div>      <p>{{msg}}</p>      <button @click="changeWord">切换msg值</button>    </div>  </div></template><script>export default {  data() {    return {      msg:'message'    }  },  methods: {    changeLang() {      if(this.$i18n.locale === 'zn'){   // 判断当前语言        this.$i18n.locale = 'en'   // 设置当前语言      } else {        this.$i18n.locale = 'zn'      }    },    changeWord() {      if(this.msg === 'message'){        this.msg = 'display'      } else {        this.msg = 'message'      }    },  }}</script>

首先,明确“msg”的取值有两个,分别为“message”、“display”,此时确保语言包中都存在这两个词与对应的翻译值。

其次,在组件中不能直接 $t('main.message') 使用,该种方式确定了翻译对象,而“msg”的翻译对象不确定,有可能是“message”、“display”甚至更多,于是,我使用了模板字符串,实现了值动态变化自动翻译的效果。

<p>{{$t(`main.${msg}`)}}</p>// 当 msg 为 "message" 时,为 $t('main.message')// 当 msg 为 "display" 时,为 $t('main.display')

Tips:在使用的过程中,出现了报错情况,将在第四点记录

三、整合 ElementUI 语言包

我们可以整合 ElementUI 中存在的语言包。

1、扩展中文

// zn.jsimport zhLocale from 'element-ui/lib/locale/lang/zh-CN'   //引入element语言包export default {  main:{    message:"消息",    display:"展示"  },  ...zhLocale};

2、扩展英文 

// en.jsimport enLocale from 'element-ui/lib/locale/lang/en'   //引入element语言包export default {  main:{    message:"message",    display:"display"  },  ...enLocale}

3、使用扩展语言翻译

根据上图(语言包)取可翻译字段。 

<p>{{$t('el.colorpicker.confirm')}}</p>// 中文“确定”,英文“OK”

四、问题记录

在使用过程中,中间有如下报错信息。

报错的原因主要是因为当前使用的版本不匹配,解决方案入下。

npm install vue-i18n@8

五、扩展

vue3 中使用 vue-i18n

vue-i18n 在 vue3 中使用方式与 vue2 有些差异。

1、安装

npm install vue-i18n@next -S

2、准备语言环境

import { createI18n } from 'vue-i18n';   // 与vue2的VueI18n使用方式不同import zn from './zn';import en from './en';const i18n = createI18n({  locale: 'zn',  messages: {    'zn': zn,    'en': en  }});export default i18n;

3、实现语言翻译

// main.js 引入import i18n from './lang';App.use(i18n);
// vue3使用方式import { useI18n } from 'vue-i18n';setup() {    const { locale } = useI18n();    // 通过locale.value切换    const changeLang = (val) =>{        locale.value = val.value;    }    return {        changeLang    } }
// 在标签中使用 通过 $t() 或者 t()<p>{{ $t('main.message') }}</p><p>{{ t('main.message') }}</p>

点击全文阅读


本文链接:http://zhangshiyu.com/post/88005.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 祖母寿宴,侯府冒牌嫡女被打脸了(沈屿安秦秀婉)阅读 -
  • 《雕花锦年,昭都旧梦》(裴辞鹤昭都)完结版小说全文免费阅读_最新热门小说《雕花锦年,昭都旧梦》(裴辞鹤昭都) -
  • 郊区41号(许洛竹王云云)完整版免费阅读_最新全本小说郊区41号(许洛竹王云云) -
  • 负我情深几许(白诗茵陆司宴)完结版小说阅读_最热门小说排行榜负我情深几许白诗茵陆司宴 -
  • 九胞胎孕妇赖上我萱萱蓉蓉免费阅读全文_免费小说在线看九胞胎孕妇赖上我萱萱蓉蓉 -
  • 为保白月光,侯爷拿我抵了债(谢景安花田)小说完结版_完结版小说全文免费阅读为保白月光,侯爷拿我抵了债谢景安花田 -
  • 陆望程映川上官硕《我的阿爹是带攻略系统的替身》最新章节阅读_(我的阿爹是带攻略系统的替身)全章节免费在线阅读陆望程映川上官硕
  • 郑雅琴魏旭明免费阅读_郑雅琴魏旭明小说全文阅读笔趣阁
  • 头条热门小说《乔书意贺宴临(乔书意贺宴临)》乔书意贺宴临(全集完整小说大结局)全文阅读笔趣阁
  • 完结好看小说跨年夜,老婆初恋送儿子故意出车祸_沈月柔林瀚枫完结的小说免费阅读推荐
  • 热推《郑雅琴魏旭明》郑雅琴魏旭明~小说全文阅读~完本【已完结】笔趣阁
  • 《你的遗憾与我无关》宋怀川冯洛洛无弹窗小说免费阅读_免费小说大全《你的遗憾与我无关》宋怀川冯洛洛 -

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1