简单四部搞定vue-i18n在vue3项目中的简单使用

495 阅读1分钟

本篇主要是介绍vue-i18n在vue3项目中的简单用法,涉及vue-i18n的一些特性或者项目第三方组件的国际化,需要自行研究。 vue-i18n官网

第一步:安装

这里我们需要使用vue-i18n@next

npm i vue-i18n@next

第二步:创建本地语言包

在src下创建locales文件夹

image.png

en.ts

const en_US = {
    menu: {
        home: 'Home',
        components: 'Components',
        test: 'Test'
    }
}

export default en_US

zh.ts

const zh_CN = {
    menu: {
        home: '首页',
        components: '组件',
        test: '测试'
    }
}

export default zh_CN

index.ts

import { createI18n } from 'vue-i18n'

// 自定义国际化文件
import zh_CN from './zh'
import en_US from './en'

const i18n = createI18n({
    legacy: false, // Composition API 模式
    globalInjection: true, // 全局注册 $t方法
    // 默认语言
    locale: localStorage.getItem('locale') || 'zh_CN',
    // 语言库
    messages: {
        zh_CN: zh_CN,
        en_US: en_US
    }
});

// 将i18n暴露出去,在main.js中引入挂载
export default i18n;

第三步:全局引入

main.ts

import i18n from './locales'
app.use(i18n)

第四步:页面使用

...
<el-dropdown-menu>
    <el-dropdown-item @click="setLanguage('zh_CN')">简体中文</el-dropdown-item>
    <el-dropdown-item @click="setLanguage('en_US')">English</el-dropdown-item>
</el-dropdown-menu>
...

import { useI18n } from 'vue-i18n'
const { locale } = useI18n()

const setLanguage = (val: string) => {
    locale.value = val // 加上这句话就不用刷新页面
    localStorage.setItem('locale', val)
}
...
<span>{{ $t('menu.home') }}</span>