Vue I18n 国际化插件,从安装到使用最全篇

news/2025/2/1 12:52:23/

目录

一、介绍

二、插件基本思路

三、插件版本适用框架

四、Vue3 中使用

1. 安装插件 vue-i18n

2. 定义和组合语言包

3. 引入插件并创建 i18n 实例

4. 挂载实例对象

main.js 文件中的完整代码:

在组件中使用:

四、动态切换语言

1. 获取浏览器当前使用的语言

2. 按钮切换


一、介绍

国际化是指项目能够根据不同国家的语言进行转换,便于不同国家的用户使用。Vue I18 是 Vue.js 的国际化插件,它可以轻松地将一些本地化功能集成到应用程序中。

为什么插件名称是 i18n 呢?它的全程是 internationalization,插件名取了首字母 i 和尾字母 n,中间一共有 18 个字母,所以组合起来就叫 i18n。哈哈哈哈,起名起的离谱。

二、插件基本思路

1. 定义语言包:需要几种语言展示,就定义几个语言包。

2. 组合语言包对象:创建对象,对语言包进行组合,对象的 key 为语言包引用,值为语言包对象。

3. 创建实例:创建 vue-i18n 类的对象,添加 message 和 locale 属性。

4. 挂载:挂载创建的实例对象。

三、插件版本适用框架

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

四、Vue3 中使用

1. 安装插件 vue-i18n

// 使用 npm
npm install vue-i18n@9// 使用 yarn
yarn add vue-i18n@9

2. 定义和组合语言包

先定义常用的两个语言包:

// src/langurage/en.js 
// 定义英文语言包对象
export default {navigateBar: {hotspot: 'Hotspot',experience: 'Experience',focus: 'Focus',recommend: 'Recommend'},tabs: {work: 'Work',private: 'Private',collect: 'Collect',like: 'Like'}
}
// src/langurage/zh.js 
// 定义中文语言包对象
export default {navigateBar: {hotspot: '热点',experience: '经验',focus: '关注',recommend: '推荐'},tabs: {work: '作品',private: '私密',collect: '收藏',like: '喜欢'}
}

组合语言包对象:

// src/main.js
const message = {en,zh
}

3. 引入插件并创建 i18n 实例

// src/main.js
import { createI18n } from 'vue-i18n';const i18n = createI18n({legacy: false,  // 设置为 false,启用 composition API 模式messages,locale: 'en'  // 设置默认语言
})

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

4. 挂载实例对象

// src/main.js
import { createApp } from 'vue';const app = createApp(App);app.use(i18n);

main.js 文件中的完整代码:

import { createApp } from 'vue';
import App from './App.vue';
import { createI18n } from 'vue-i18n';
import en from './langurage/en';
import zh from './langurage/zh';// 组合语言包对象
const messages = {en,zh
}// 创建实例对象
const i18n = createI18n({legacy: false,  // 设置为 false,启用 composition API 模式messages,locale: 'en'
})// 创建 Vue 实例
const app = createApp(App);// 注册对象
app.use(i18n);// 挂载到 Dom 元素中
app.mount('#app');

在组件中使用:

<template><div><ul><li>{{ $t("navigateBar.hotspot") }}</li><li>{{ $t("navigateBar.experience") }}</li><li>{{ $t("navigateBar.focus") }}</li><li>{{ $t("navigateBar.recommend") }}</li></ul><ol><li>{{ $t("tabs.work") }}</li><li>{{ $t("tabs.private") }}</li><li>{{ $t("tabs.collect") }}</li><li>{{ $t("tabs.like") }}</li></ol><div>
</template>

在步骤 2 中定义的语言包是对象形式的,如果你定义的是简单的属性形式,要注意在组件中使用时的形式。

四、动态切换语言

想要切换语言时,修改 locale 属性就可以了。

1. 获取浏览器当前使用的语言

如果一开始想使用浏览器中默认的语言,那么将 locale 属性改成如下即可:

const i18n = createI18n({messages,locale: navigator.language // 获取浏览器的语言
})

2. 按钮切换

添加按钮切换语言时,Vue2 和 Vue3 的修改方式是不同的,在 Vue2 中使用全局的 this.$i18n.locale 就可以修改,但在 Vue3 中,需要 Hook 进行修改,如下所示:

<template><div><div><button @click="changeLocale('zh')">切换为中文</button><button @click="changeLocale('en')">切换为中文</button></div><ul><li>{{ $t("navigateBar.hotspot") }}</li><li>{{ $t("navigateBar.experience") }}</li><li>{{ $t("navigateBar.focus") }}</li><li>{{ $t("navigateBar.recommend") }}</li></ul><ol><li>{{ $t("tabs.work") }}</li><li>{{ $t("tabs.private") }}</li><li>{{ $t("tabs.collect") }}</li><li>{{ $t("tabs.like") }}</li></ol><div>
</template><script setup>
import { useI18n } from "vue-i18n";const { locale } = useI18n();// 切换语言
const changeLocale = (lang) => {locale.value = lang;
};
</script>


http://www.ppmy.cn/news/1212741.html

相关文章

数据管理系统-week1-数据库设计

文章目录 一、数据库设计过程二、数据库域三、数据库模式四、对象建模参考文献 一、数据库设计过程 数据库设计的简化过程包括以下阶段&#xff1a; -概念建模 概念建模将数据库域的规范转换为概念模式。 -逻辑设计 逻辑设计将概念模式转换为逻辑模式&#xff0c;例如关系表的…

【Redis】String字符串类型

上一篇&#xff1a;Redis-key的使用 https://blog.csdn.net/m0_67930426/article/details/134361821?spm1001 .2014.3001.5501 目录 appen (附加&#xff09; strlen(获取字符串的长度&#xff09; incr decr getRange(获取字符串&#xff09; setRange&#xff08;替…

状态图和活动图的含义及其区别

状态图主要用于描述一个对象在其生存期间的动态行为&#xff0c;表现一个对象所经历的状态序 列&#xff0c;引起状态转移的事件(event)&#xff0c;以及因状态转移而伴随的动作(action)。 活动图可以用于描述系统的工作流程和并发行为。活动图其实可看作状态图的特殊形 式&am…

详解数据仓库之拉链表(原理、设计以及在Hive中的实现)

最近发现一本好书&#xff0c;读完感觉讲的非常好&#xff0c;首先安利给大家&#xff0c;国内第一本系统讲解数据血缘的书&#xff01;点赞&#xff01;近几天也会安排朋友圈点赞赠书活动(ง•̀_•́)ง 0x00 前言 本文将会谈一谈在数据仓库中拉链表相关的内容&#xff0c;包…

开发者测试2023省赛--UnrolledLinkedList测试用例

测试结果 官方提交结果 EclEmma PITest 被测文件UnrolledLinkedList.java /** This source code is placed in the public domain. This means you can use it* without any restrictions.*/package net.mooctest;import java.util.AbstractList; import java.util.Collectio…

SpringBoot |引用外部jar包中的类方式

需求 在本工程中引入外部jar包的类进行反射获取&#xff0c;如何获取&#xff1f; 方案 ComponentScanImport Import 其中Import中有4种用法 导入Bean导入配置类导入ImportSelector的实现类导入ImportBeanDefinitionRegistrar实现类

【C语言:深入理解指针一】

文章目录 1.指针存在的意义2.指针变量和地址3.指针变量类型的意义3.1指针解引用3.2指针 - 整数3.3void* 4.关键字const4.1const修饰变量4.2 const修饰指针 5.指针运算5.1指针 -整数5.2指针-指针5.3指针比较大小 6. 野指针7.assert断言8. 数组名的理解9.一维数组传参的本质 1.指…

leetcode刷题日记:111. Minimum Depth of Binary Tree(二叉树的最小深度)

给我们一个二叉树&#xff0c;我们应该如何来求二叉树的最小深度呢&#xff1f; 二叉树的最小深度指的是叶子结点到所处的位置最小的&#xff0c;这就是二叉树的最小深度&#xff0c;也就是说我们要找的是离根结点最近的叶子结点。如果我们从根结点向下出发寻找叶子节点&#x…