为什么需要国际化
我们常在一些框架的文档右上角看到一个图标,鼠标移上去就会出现一个下拉框显示各种语言,比如 Vue 的官方文档,选择其中一个语言就会跳转到对应语言版本的网站,又或是重新刷新页面后显示对应语言,像这种效果就是国际化,让网站支持各种语言版本,这些多语言版本通常由作者维护或其他区域的开发者进行贡献完善
vue-i18n
是 vue 生态下的一个第三方插件,用于实现国际化
i18n,即 internationalization 的缩写,i 和 n 为单词首末字母,18 为中间的字母
安装依赖
pnpm add vue-i18n@9配置插件
const i18n = createI18n({
locale: 'ja',
fallbackLocale: 'en',
messages: {
en: {
message: {
hello: 'hello world'
}
},
ja: {
message: {
hello: 'こんにちは、世界'
}
}
}
})locale 为当前语言
fallbackLocale 为当前语言匹配不到对应 id 时的备用语言
messages 为对应语言的映射
注册插件
const app = createApp(Vue)
app.use(i18n)
app.mount('#app')使用
<template>
<el-button> {{ t('deng-lu') }} </el-button>
</template>
<script setup lang="ts">
import { useI18n } from 'vue-i18n'
const { t } = useI18n()
</script>结合 vscode 插件,可以实现三种效果:
- 预览翻译
- 自动翻译
- 自动映射
安装插件后在 .vscode/settings.json 下配置
{
"i18n-ally.localesPaths": ["src/locales"]
}这个配置表示插件会尝试读取 src/locales 下的映射文件,实现预览和自动添加翻译到映射中,映射文件结构如下
// zh.json
{
"deng-lu": "登录"
}
// en.json
{
"deng-lu": "Login"
}然后就可以在使用了 deng-lu 的文件中看到对应翻译的预览,想要预览对应语言,在 vscode 右下角选择
鼠标聚焦到 id 上还会显示对应 id 没有翻译的语言,你可以手动修改或配置一个翻译引擎自动翻译,更加详细的用法参考插件介绍
疑难解答
如果
src/locales的映射文件是 ts 文件, 读取不到翻译
配置 i18n-ally.enabledParsers 数组, 加上 “ts”