vue项目中 i18n(vue-i18n) 国际化解决方案,从安装到使用

1、国际化介绍

        国际化(Internationalization,通常缩写为"i18n")是指设计和开发软件应用程序,使其能够轻松地适应不同的语言、文化和地区的需求。国际化不仅仅涉及将文字翻译成其他语言,还包括调整日期、时间、货币格式,以及考虑不同文化中的布局、颜色和图标等因素。通过国际化,开发人员可以使其应用程序更易于被全球用户理解和接受,从而扩大应用程序的市场和影响力。使用的基本思路定义如下:

  • 定义语言包:需要几种语言展示,就定义几个语言包
  • 创建对象,对语言包进行整合,对象的 key 为语言包的引用,值为语言包对象
  •  创建 vue-i18n 类的对象,同时为其 messages 属性为第二步创建的对象,为其 locale 属性赋值为第二步中语言对象对应的 key
  •  再创建 Vue 实例对象时,挂载 vue-i18n 类的对象
  •  第三方库的国际化配置,如 element组件库

 2、插件的试用版本介绍

        vue-i18n 作为国际化插件,它主要有两个版本:v8 和 v9。v8 版本适用于 Vue2 框架,v9 版本适用于 Vue3 框架。具体区别可以查看 官网 ,以下内容均在 Vue3 中使用。

3、在vue项目安装并组合语言包

  • 安装插件 vue-i18n  

          可以使用 npm 或 yarn 进行安装:

// npm 安装
npm install vue-i18n// 或者// yarn 安装yarn add vue-i18n
  • 定义和组合语言包

       在项目中首先创建语言包文件夹i18n,在下面创建一个lang.js文件和存放需要的语言包;例如创建zh.json和en.json两个语言,键名是自定义的,中英文是的一样的,需要几种语言就定义几个对象,后面会在组件中使用。 先定义常用的语言包,列如常用的两个语言包:中文(zh.json)English(en.json)。(如图,图中显示的是三个语言)

  • 常用语言包的定义如下见代码

        中文:zh_cn.json

{"auto": "系统","calendar": {"cancel": "取消","confirm": "确定","empty": "清空","sevenDaysAgo": "近七天","submit": "提交","thirtyDaysAgo": "近三十天","threeDaysAgo": "近三天","login": "登录"}
}

        英文:en_cn.json

{"auto": "System","calendar": {"cancel": "Cancel","confirm": "OK","empty": "Clear","sevenDaysAgo": "近七天","submit": "Submit","thirtyDaysAgo": "Last 30 days","threeDaysAgo": "Nearly three days","login": "Login"}
}

       注意:在语言环境定义中,我们使用的是key:value的形式,两个语言文件里面的key必须保持一致 

  • 引入插件并创建 i18n 实例组合语言包对象:

        在当前文件夹中的index.js文件中将我们的语言包对象组合并后续使用

import { createI18n } from 'vue-i18n'
import ZH from './zh_CN.json'
import EN from './en_US.json'
import ES from './es_US.json'const messages = {zh_CN: { ...ZH },en_US: { ...EN },es_US: { ...ES }
}const i18n = createI18n({legacy: false,globalInjection: true,locale:'',messages
})/*** 可以是请求后台接口获取语言包或者本地的(......为自定义逻辑)* @param type* @returns {Promise}*/
const getLang=(lang)=>{// 将选择的语言存储vuexlocalStorage.setItem('lang', lang)// 转换语言类型并赋值i18n,按照自己页面定义的值转换为想要的数据let language=lang=='中文'?'zh_CN':lang=='English'?'en_US':'es_US'i18n.global.locale.value = language; // 如果调用后端接口请自己写逻辑......i18n.global.locale.value = language; 
}// 导出getLang
export  {getLang}
export default i18n

        注意:在创建实例时,一定要将 legacy 属性设置为 false,因为 legacy 默认为 true,它支持使用 Vue2 框架中的 Options API,如果要在 Vue3 更好的使用 Composition API 模式,那么就需要将此属性手动设置为 false。 

4、将i18n文件 挂载到实例对象

        在项目的主文件:main.js 中引入并挂载到app实例文件中 

import { createApp } from 'vue'
//引入语言包文件
import i18n from './i18n/index'
import {getLang} from '@/i18n/index'// 创建app实例并挂载
const app = createApp(App).use(i18n)// 全局挂载语言改变函数
app.config.globalProperties.$getLang = getLangapp.mount('#app')

5、在App.vue中判断当前语言

 created(){let langType = localStorage.getItem('lang')// let type=langType=='中文'?'zh_CN':langType=='English'?'en_US':'es_US'this.$getLang(langType ? langType : '中文')},

 

6、在组件中使用:

  • html文件中使用
    // 没有使用国际化语言之前<el-button class="buttons" style="width:100%;" type="primary" @click="submitLongin">登录</el-button>//使用国际化语言之后<el-button class="buttons" style="width:100%;" type="primary" @click="submitLongin">{{ $t('calendar.login') }}</el-button>
  • js或者ts文件中使用
    // js文件中没有使用国际化之前
    // 如:提示信息的国际化if (ruleForm.name.length == 0 || ruleForm.pass.length == 0) {ElMessage.error('请正确输入用户名或者密码')return} //js文件中使用国际化之后
    //首先在js引入中语言包并定义js使用的变量import { useI18n } from 'vue-i18n';
    const { t } = useI18n();//具体使用if (ruleForm.name.length == 0 || ruleForm.pass.length == 0) {ElMessage.error(t('message.pleaseUserOrPassword')return} 
    
  • 画面上规划切换语言切换的文字或者按钮或者图标​​​​​​​
  • 点击执行语言切换:想要切换语言时,修改 locale 属性就可以了。(我这里是登录画面切换的)
    //html 
    <!-- 多语言 -->
    <div class="language"><div  v-for="(item, index) in languageList" :key="index" :class="langIndex==index?'language-item':'language-item2 language-item'" @click="changeLanguage(index)"><img class="icon" src="../../assets/language/china.png" alt="china" v-if="index==0"/><img class="icon" src="../../assets/language/MG.png" alt="china" v-if="index==1"/><img class="icon" src="../../assets/language/MXG.png" alt="china" v-if="index==2"/><span class="text">{{item}}</span></div>
    </div>
    
    // js中引入import {getLang} from '@/i18n/index'// 定义多语言
    const langIndex = ref() // 当前选择的语言
    let langTypes = ["中文", "English", "español"] 
    let languageList = computed(() => {return ["中文", "English", "español"]
    })// 多语言切换
    const changeLanguage = (index) => {langIndex.value = index// localStorage.setItem('langIndex',langIndex)let type = langTypes[index];getLang(type)  // 调用全局方法改变语言
    }
    

可以参考文档:安装 | Vue I18n 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/867895.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据列表组件-报表

当数据在后端接口查询到&#xff0c;需要在页面展示出来&#xff0c;如果项目有很多report &#xff0c;可以把列表做一个组件 效果如下&#xff1a; js代码&#xff1a; <!DOCTYPE html> <html> <head><meta charset"utf-8" /><title&g…

中英双语介绍东京的商业核心区域:日本桥(Nihonbashi)

中文版 日本的日本桥&#xff08;Nihonbashi&#xff09; 位置 日本桥位于东京中央区&#xff0c;是东京市中心的重要商业和金融区之一。日本桥的名字来源于这里的同名桥梁“日本桥”&#xff0c;该桥建于江户时代&#xff0c;横跨日本桥川&#xff0c;是当时五街道的起点&a…

作业训练二编程题3. 数的距离差

【问题描述】 给定一组正整数&#xff0c;其中最大值和最小值分别为Max和Min, 其中一个数x到Max和Min的距离差定义为&#xff1a; abs(abs(x-Max)-(x-Min)) 其中abs()为求一个数的绝对值 【输入形式】 包括两行&#xff0c;第一行一个数n&#xff0c;表示第二行有n个正整数…

Linux内核链表使用方法

简介&#xff1a; 链表是linux内核中最简单&#xff0c;同时也是应用最广泛的数据结构。内核中定义的是双向链表。 linux的链表不是将用户数据保存在链表节点中&#xff0c;而是将链表节点保存在用户数据中。linux的链表节点只有2个指针(pre和next)&#xff0c;这样的话&#x…

AcWing 1260:二叉树输出

【题目来源】https://www.acwing.com/problem/content/1262/【题目描述】 树的凹入表示法主要用于树的屏幕或打印输出&#xff0c;其表示的基本思想是兄弟间等长&#xff0c;一个结点的长度要不小于其子结点的长度。 二叉树也可以这样表示&#xff0c;假设叶结点的长度为 1&…

SAP_MM模块-特殊业务场景下的系统实现方案

一、业务背景 目前公司有一种电商业务&#xff0c;卖的是备品配件&#xff0c;是公司先跟供应商采购&#xff0c;然后再销售给客户&#xff0c;系统账就是按照正常业务来流转&#xff0c;公司进行采购订单入库&#xff0c;然后销售订单出库。 不过这种备品配件&#xff0c;实…

STM32-I2C

本内容基于江协科技STM32视频学习之后整理而得。 文章目录 1. I2C通信1.1 I2C通信简介1.2 硬件电路1.3 I2C时序基本单元1.3.1 起始条件和终止条件1.3.2 发送一个字节1.3.3 接收一个字节1.3.4 发送应答和接收应答 1.4 I2C时序1.4.1 指定地址写1.4.2 当前地址读1.4.3 指定地址读…

Python实战训练(方程与拟合曲线)

1.方程 求e^x-派&#xff08;3.14&#xff09;的解 用二分法来求解&#xff0c;先简单算出解所在的区间&#xff0c;然后用迭代法求逼近解&#xff0c;一般不能得到精准的解&#xff0c;所以设置一个能满足自己进度的标准来判断解是否满足 这里打印出解x0是因为在递归过程中…

什么是PPG(光电容积描记)传感器?

PPG&#xff08;光电容积描记&#xff09;传感器是一种用于测量血液容量变化的设备。PPG传感器利用光学技术&#xff0c;通过检测皮肤下血液的反射光量变化来获取心率、血氧饱和度和其他生理参数。以下是PPG传感器的工作原理和应用&#xff1a;

python语句性能分析

1、for语句性能优于while import timeif __name__ __main__:start_time time.time()for i in range(10 ** 8):passend_time time.time()run_time end_time - start_timeprint(run_time)i 0start_time time.time()while i < 10 ** 8:i 1end_time time.time()run_tim…

强化学习的数学原理:时序差分算法

概述 之前第五次课时学习的 蒙特卡洛 的方法是全课程当中第一次介绍的第一种 model-free 的方法&#xff0c;而本次课的 Temporal-Difference Learning 简称 TD learning &#xff08;时序差分算法&#xff09;就是第二种 model-free 的方法。而对于 蒙特卡洛方法其是一种 non…

IntelliJ IDEA 同时多行同时编辑操作快捷键

首先 点击要编辑的地方,长按鼠标左键不放,同时按住 Ctrl Shift Alt,然后就可以进行多行编辑了

Android项目中,查看项目依赖树的多种方式

1.使用预设的Task来进行查看 1.1 命令行 查看某个模块的所有依赖树&#xff1a; gradlew [模块名称]:dependencies 例如&#xff1a;gradlew app:dependencies查看某个模块的某功能的依赖树&#xff1a; gradlew [模块名称]:dependencies --configuration [功能名称] 例如&…

k8s学习之cobra命令库学习

1.前言 打开k8s代码的时候&#xff0c;我发现基本上那几个核心服务都是使用cobra库作为命令行处理的能力。因此&#xff0c;为了对代码之后的代码学习的有比较深入的理解&#xff0c;因此先基于这个库写个demo&#xff0c;加深对这个库的一些理解吧 2.cobra库的基本简介 Git…

前端JS特效第22波:jQuery滑动手风琴内容切换特效

jQuery滑动手风琴内容切换特效&#xff0c;先来看看效果&#xff1a; 部分核心的代码如下&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xm…

linux RTC时钟时间出现了明显的偏移

RTC时钟时间出现了明显的偏移 1、开发环境2、问题阐述3、验证问题3.1、首先去排查了硬件电路和芯片电压不稳定的问题。3.2、晶振的问题。3.3、芯片本身3.4、芯片寄存器 4、代码修改 1、开发环境 平台&#xff1a;imx6ul kernel版本&#xff1a;linux4.1.5 RTC芯片&#xff1a;…

机械键盘有哪些分类

机械键盘是一种比传统的薄膜键盘更耐用、更快捷、更具有手感的键盘。它的键帽和按键是独立的&#xff0c;能够提供更好的反应速度和操作感。机械键盘在现代化生活中得到了广泛的应用。根据其特性和使用场景&#xff0c;机械键盘可以分为以下几类&#xff1a; 1.轴体分类 机械…

设计模式探索:建造者模式

1. 什么是建造者模式 建造者模式 (Builder Pattern)&#xff0c;也被称为生成器模式&#xff0c;是一种创建型设计模式。 定义&#xff1a;将一个复杂对象的构建与表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。 建造者模式要解决的问题&#xff1a; 建造者模…

誉天教育7月开班计划:为梦想插上腾飞的翅膀!

随着夏日的脚步渐近&#xff0c;誉天教育也迎来了新一轮的学习热潮。在这个充满活力和希望的季节里&#xff0c;我们精心策划了7月的开班计划&#xff0c;旨在为广大学子提供一个优质、高效的学习平台&#xff0c;助力他们追逐梦想&#xff0c;实现自我价值。 本月 Linux云计算…

探讨3D沉浸式在线会议系统的研发 - Meta演示的元宇宙虚拟化身多人对话场景,Web端现在也可以实现了 !

要实现一个元宇宙多人会议系统&#xff0c;关键技术有&#xff1a; 1. 3D虚拟空间的构建&#xff08;含光影特效、虚拟现实和增强现实&#xff09; 2. 3D虚拟化身的构建&#xff08;含动画、表情、语音&#xff09; 3. 多人角色管理 4. 会话控制和信息同步 5. 语音合成 6…