vue-i18n国际化使用方法

安装

js 复制代码
npm i vue-i18n
// or
yarn add vue-i18n
// ...

直接上代码,注意代码中的注释

在src目录下创建一个i18n文件夹

js 复制代码
// /src/i18n/index.js
import { createI18n } from 'vue-i18n';
import zh from './langs/zh';// 中文语言包
import en from './langs/en';// 英文语言包

const messages = {
    zh, en
}

// 获取本地默认语言
export function getLocale() {
    let res = localStorage.getItem('lang');// 先获取本地缓存语言类型
    if (res) return res;// 如果缓存中有直接返回缓存,防止刷新页面后变回默认语言
    const webLang = navigator.language;// 获取浏览器默认语言
    if (webLang.includes('zh')) {
        res = 'zh';
    }
    if (webLang.includes('en')) {
        res = 'en';
    }
    return res || 'zh';
}

// 创建实例
const i18n = createI18n({
    legacy: false,
    locale: getLocale(),
    messages
})

export default i18n

语言包写法

js 复制代码
// /src/i18n/lang/zh.js  中文语言包
export default {
    message: {
        'Welcome': '欢迎',
        'Home': '首页'
    }
}

// /src/i18n/lang/en.js  英文语言包
export default {
    message: {
        'Welcome': 'Welcome',
        'Home': 'Home'
    }
}

// 注意两个语言包的键名要相同

另外可以写一个hook用来后面切换语言的时候用

js 复制代码
// /src/i18n/useLang.js
import { useI18n } from 'vue-i18n';
import { computed } from 'vue';

export default () => {

    // locale表示当前语言,可以直接修改他
    const { locale } = useI18n();
    // 当前语言的名称
    const langName = computed(() => {
        const map = {
            'zh': '简体中文',
            'en': 'English'
        }
        return map[locale.value];
    });

    // 切换语言的方法,传入需要切换的语言
    function langChange(lang) {
        locale.value = lang;// 直接修改locale,注意要加上.value
        localStorage.setItem('lang', lang);// 存入缓存
        window.location.reload();// 刷新页面,也可以不刷新,但是一般要修改ui框架的语言,就需要刷新
    }

    return { langChange, langName }
}

到这里准备工作就做完了,接下来看如何使用 首先将/src/i18n/index.js中导出的i18n实例在main.js中引入

js 复制代码
import { createApp } from 'vue'
import App from './App.vue'
// ...
import i18n from '@/i18n' // 引入i18n
// ...

在template中使用

html 复制代码
<template>
    <div>
        <!--$t就是i18n提供的全局方法-->
        <h1>{{$t("message.Welcome")}}</h1>
        <p v-html="$t('message.Home')"><p>
    </div>
</template>

在js中使用

js 复制代码
<script setup>
import { useI18n } from "vue-i18n";
    
const { t } = useI18n();

const fn = () => {
    return t("message.Welcome");
}
</script>

如何切换语言 上面我们封装了useLang,切换语言的时候就会用到它了

js 复制代码
<script setup>
import useLang from "@/i18n/useLang";

// 语言切换
const { langChange, langName } = useLang();
// 需要切换语言时直接调用langChange方法,传入需要需要切换的语言类型
// 注意传入值是/src/i18n/index.js文件中message对象的键值
// langName是当前语言的名称,用于展示当前是什么语言
</script>

至此i18n的基本使用方式就介绍完毕了

另外介绍一下如何让elementUI的语言跟随i18n的语言一起切换

在app.vue中给router-view套上一层组件el-config-provider,代码如下:

js 复制代码
<template>
    <el-config-provider :locale="lang">
        <router-view></router-view>
    </el-config-provider>
</template>

<script setup>
import { computed } from "vue";
import { ElConfigProvider } from "element-plus";
import zhCn from "element-plus/es/locale/lang/zh-cn";
import en from "element-plus/es/locale/lang/en";

const lang = computed(() => {
    const map = {
        zh: zhCn,
        en: en,
    };
    return map[localStorage.getItem("lang") || "zh"];
});
</script>
相关推荐
WHOAMI_老猫44 分钟前
XSS-LABS靶场通关讲解
前端·xss
要加油哦~1 小时前
前端 | 向后端传数据,判断问题所在的调试过程
前端·javascript·vue.js
中工钱袋3 小时前
Vue 中地址栏参数与 HTTP 请求参数的同步问题
前端·vue.js·http
一只月月鸟呀3 小时前
Vue 过滤器 filter(s) 的使用
javascript·vue.js·ecmascript
zzlyx993 小时前
设备管理系统功能与.NET+VUE(IVIEW)技术实现
前端·vue.js·view design
秋月华星5 小时前
【flutter】TextField输入框工具栏文本为英文解决(不用安装插件版本
前端·javascript·flutter
千里码aicood5 小时前
[含文档+PPT+源码等]精品基于Python实现的校园小助手小程序的设计与实现
开发语言·前端·python
青红光硫化黑6 小时前
React基础之React.memo
前端·javascript·react.js
大麦大麦6 小时前
深入剖析 Sass:从基础到进阶的 CSS 预处理器应用指南
开发语言·前端·css·面试·rust·uni-app·sass
m0_616188497 小时前
Vue3 中 Computed 用法
前端·javascript·vue.js