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

目录

一、介绍

二、插件基本思路

三、插件版本适用框架

[四、Vue3 中使用](#四、Vue3 中使用)

[1. 安装插件 vue-i18n](#1. 安装插件 vue-i18n)

[2. 定义和组合语言包](#2. 定义和组合语言包)

[3. 引入插件并创建 i18n 实例](#3. 引入插件并创建 i18n 实例)

[4. 挂载实例对象](#4. 挂载实例对象)

[main.js 文件中的完整代码:](#main.js 文件中的完整代码:)

在组件中使用:

四、动态切换语言

[1. 获取浏览器当前使用的语言](#1. 获取浏览器当前使用的语言)

[2. 按钮切换](#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

bash 复制代码
// 使用 npm
npm install vue-i18n@9

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

2. 定义和组合语言包

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

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

组合语言包对象:

javascript 复制代码
// src/main.js
const message = {
    en,
    zh
}

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

javascript 复制代码
// 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. 挂载实例对象

javascript 复制代码
// src/main.js
import { createApp } from 'vue';

const app = createApp(App);

app.use(i18n);

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

javascript 复制代码
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');

在组件中使用:

html 复制代码
<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 属性改成如下即可:

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

2. 按钮切换

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

html 复制代码
<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>
相关推荐
CharlesYu016 小时前
前端性能优化的第一性原理,是不断缩短“用户发起意图 → 获得可用结果”之间的时间
前端
Bs_MoneyMagnet6 小时前
基于springboot+vue的医疗健康便民服务平台的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring
平头哥技术团队7 小时前
Day 21 _ 页内锚点_给每段起个 id,目录写 href=_#id_,点一下页面就滚到那一段
前端·html·html5
子兮曰8 小时前
Bun v1.4.1 深度解析:从 Zig 到 Rust,一场 11 天、64 个 AI 代理的语言迁徙
前端·后端·bun
人民广场吃泡面8 小时前
什么是AI Agent?它又能给前端带来哪些效率提升?
前端·人工智能
中科三方8 小时前
两家域名注册商资质被ICANN终止:企业域名资产安全再受关注
前端·网络·安全·域名
bug总结9 小时前
uniapp vue3全局方法注册使用
前端·javascript·uni-app
华无丽言9 小时前
如何在宜搭中实现获取子表中的字段值赋值到父表中?
前端·javascript·低代码
IT_陈寒10 小时前
Vue的computed属性竟然坑了我一把
前端·人工智能·后端
威斯软科的老司机10 小时前
通俗讲解 CNN 图像识别、向量 Embedding、Softmax 概率计算这三块的简化原理
前端·人工智能·ui·数字孪生