• Vue 国际化之 vue-i18n 的使用


    目录

    一、安装

    二、使用

    1、准备语言包

    2、准备翻译的语言环境

    3、实现语言翻译

    三、整合 ElementUI 语言包

    1、扩展中文

    2、扩展英文 

    3、使用扩展语言翻译

    四、问题记录

    五、扩展

    vue3 中使用 vue-i18n


    一、安装

    npm install vue-i18n

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

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

    二、使用

    在 src 下创建 lang 文件夹。

    1、准备语言包

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

    1. // zn.js
    2. export default {
    3. main:{
    4. message:"消息",
    5. display:"展示"
    6. }
    7. };
    1. // en.js
    2. export default {
    3. main:{
    4. message:"message",
    5. display:"display"
    6. }
    7. }

    2、准备翻译的语言环境

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

    1. import Vue from "vue";
    2. import VueI18n from 'vue-i18n'
    3. import zn from "./zn"
    4. import en from "./en"
    5. Vue.use(VueI18n); // 全局注册国际化包
    6. // 准备翻译的语言环境信息
    7. const i18n = new VueI18n({
    8. locale: "zn", // 初始化中文
    9. messages: {
    10. "zn":zn,
    11. "en":en
    12. }
    13. });
    14. export default i18n

    3、实现语言翻译

    在 main.js 中将 i18n 注入 vue 中

    1. import i18n from './lang'
    2. new Vue({
    3. el: '#app',
    4. router,
    5. store,
    6. i18n, // 注入,不能缺少
    7. components: { App },
    8. template: ''
    9. })

    使用方式

    (1)直接使用

    (2) 语言切换

    1. <script>
    2. export default {
    3. methods: {
    4. changeLang() {
    5. if(this.$i18n.locale === 'zn'){ // 判断当前语言
    6. this.$i18n.locale = 'en' // 设置当前语言
    7. } else {
    8. this.$i18n.locale = 'zn'
    9. }
    10. }
    11. }
    12. }
    13. script>

    (3)data 变量翻译

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

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

    1. <script>
    2. export default {
    3. data() {
    4. return {
    5. msg:'message'
    6. }
    7. },
    8. methods: {
    9. changeLang() {
    10. if(this.$i18n.locale === 'zn'){ // 判断当前语言
    11. this.$i18n.locale = 'en' // 设置当前语言
    12. } else {
    13. this.$i18n.locale = 'zn'
    14. }
    15. },
    16. changeWord() {
    17. if(this.msg === 'message'){
    18. this.msg = 'display'
    19. } else {
    20. this.msg = 'message'
    21. }
    22. },
    23. }
    24. }
    25. script>

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

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

    1. {{$t(`main.${msg}`)}}

    2. // 当 msg 为 "message" 时,为 $t('main.message')
    3. // 当 msg 为 "display" 时,为 $t('main.display')

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

    三、整合 ElementUI 语言包

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

    1、扩展中文

    1. // zn.js
    2. import zhLocale from 'element-ui/lib/locale/lang/zh-CN' //引入element语言包
    3. export default {
    4. main:{
    5. message:"消息",
    6. display:"展示"
    7. },
    8. ...zhLocale
    9. };

    2、扩展英文 

    1. // en.js
    2. import enLocale from 'element-ui/lib/locale/lang/en' //引入element语言包
    3. export default {
    4. main:{
    5. message:"message",
    6. display:"display"
    7. },
    8. ...enLocale
    9. }

    3、使用扩展语言翻译

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

    1. {{$t('el.colorpicker.confirm')}}

    2. // 中文“确定”,英文“OK”

    四、问题记录

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

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

    npm install vue-i18n@8

    五、扩展

    vue3 中使用 vue-i18n

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

    1、安装

    npm install vue-i18n@next -S

    2、准备语言环境

    1. import { createI18n } from 'vue-i18n'; // 与vue2的VueI18n使用方式不同
    2. import zn from './zn';
    3. import en from './en';
    4. const i18n = createI18n({
    5. locale: 'zn',
    6. messages: {
    7. 'zn': zn,
    8. 'en': en
    9. }
    10. });
    11. export default i18n;

    3、实现语言翻译

    1. // main.js 引入
    2. import i18n from './lang';
    3. App.use(i18n);
    1. // vue3使用方式
    2. import { useI18n } from 'vue-i18n';
    3. setup() {
    4. const { locale } = useI18n();
    5. // 通过locale.value切换
    6. const changeLang = (val) =>{
    7. locale.value = val.value;
    8. }
    9. return {
    10. changeLang
    11. }
    12. }
    1. // 在标签中使用 通过 $t() 或者 t()
    2. {{ $t('main.message') }}

    3. <p>{{ t('main.message') }}p>
  • 相关阅读:
    安全狗又拿下一场重保胜战 第22届投洽会顺利谢幕
    shell中的简单的for循环
    Jenkins 和 GitLab CI/CD比较
    代码随想录训练营补充|图论|Golang
    Javaweb 之 Filter(过滤器)快速入门,执行流程,使用细节
    冯登国院士团队重磅论文!《具体高效的安全多方计算协议综述》解读
    【Linux】对进程概念的理解
    GGAI重磅发布《自动泊车行业发展蓝皮书》: 竞争格局生变,谁在领跑市场?
    jQuery源码学习
    MySQL语法
  • 原文地址:https://blog.csdn.net/qq_41809113/article/details/126679610