从安装到使用详解vue项目中i18n(vue-i18n)实现国际化的完整指南

 更新时间:2025年10月11日 09:07:47   作者:可爱的秋秋啊  
国际化Internationalization,通常缩写为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)=>{
  // 将选择的语言存储vuex
  localStorage.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 = getLang

app.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 属性就可以了。(我这里是登录画面切换的)

 <!-- 多语言 -->
<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(vue-i18n)实现国际化的完整指南的文章就介绍到这了,更多相关vue i18n国际化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • antdv vue upload自定义上传结合表单提交方式

    antdv vue upload自定义上传结合表单提交方式

    这篇文章主要介绍了antdv vue upload自定义上传结合表单提交方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • vue中component组件的props使用详解

    vue中component组件的props使用详解

    本篇文章主要介绍了vue中component组件的props使用详解,这里整理了详细的用法,具有一定的参考价值,有兴趣的可以了解一下
    2017-09-09
  • 详解vue使用vue-layer-mobile组件实现toast,loading效果

    详解vue使用vue-layer-mobile组件实现toast,loading效果

    这篇文章主要介绍了详解vue使用vue-layer-mobile组件实现toast,loading效果,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • Vue Element 分组+多选+可搜索Select选择器实现示例

    Vue Element 分组+多选+可搜索Select选择器实现示例

    这篇文章主要介绍了Vue Element 分组+多选+可搜索Select选择器实现示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • vue.js 初体验之Chrome 插件开发实录

    vue.js 初体验之Chrome 插件开发实录

    这篇文章主要介绍了vue.js 初体验之Chrome 插件开发实录 ,需要的朋友可以参考下
    2017-05-05
  • Vue中vue-router路由使用示例详解

    Vue中vue-router路由使用示例详解

    Vue Router是Vue提供的路由管理器,将组件与路由一一对应起来,这种对应关系就路由,这篇文章主要介绍了Vue中vue-router路由使用,需要的朋友可以参考下
    2024-06-06
  • vue之保留小数点两位小数 使用filters(过滤器)

    vue之保留小数点两位小数 使用filters(过滤器)

    这篇文章主要介绍了vue之保留小数点两位小数 使用filters(过滤器),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • 使用Vuex解决Vue中的身份验证问题

    使用Vuex解决Vue中的身份验证问题

    这篇文章主要介绍了使用Vuex解决Vue中的身份验证问题,本文通过文字实例相结合给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-09-09
  • 详解Vue3中Teleport的使用

    详解Vue3中Teleport的使用

    门户(Portal)的概念是Vue3的新功能之一,也就是将模板 HTML 移至 DOM 的不同部分的方法。Portal 是 React 中的常见功能,Vue2 的 portal-vue &nbsp;库也提供了相似的功能。在 Vue3 中用 Teleport 对这个概念提供了原生支持。本文将介绍Teleport的相关用法
    2021-05-05
  • Vue中点击active并第一个默认选中功能的实现

    Vue中点击active并第一个默认选中功能的实现

    这篇文章主要介绍了Vue中点击active并第一个默认选中功能的实现代码,代码简单易懂,非常不错具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02

最新评论