javascript" target="_blank">https://kazupon.github.io/vue-i18n/zh/started.html#javascript
安装依赖:
npm install vue-i18n@next
"vue-i18n": "^9.2.0-beta.33"
创建
i18n/index.js
import { createI18n } from 'vue-i18n'
// 国际化语言资源
const messages = {
// 英文
en: {
login: {
loginBtn: 'login',
pwdBtn: 'password'
}
},
// 中文
zh: {
login: {
loginBtn: '登录',
pwdBtn: '密码'
}
}
}
/**
* 获取
* @returns {string}
*/
function getLocal () {
// 如果缓存中存在,则直接返回
const myLocale = localStorage.getItem('my_locale')
if (myLocale) {
return myLocale
}
// 否则读取当前网页语言
const localName = navigator.language.indexOf('zh') !== -1 ? 'zh' : 'en'
// 设置缓存
localStorage.setItem('my_locale', localName)
return localName
}
// 创建i18n实例
export const i18n = createI18n({
locale: getLocal(),
messages
})
- main.js
import { i18n } from '@/i18n'
app.use(i18n)
- 使用:
{{$t('xx.xx')}}
<el-button type="primary" @click="handleLogin">{{$t('login.loginBtn')}}</el-button>
<el-button type="info" @click="changeType">{{ tips }}{{$t('login.pwdBtn')}}</el-button>
image.png
image.png
- 动态变更语言:
i18n.global.locale = lang
<el-button type="success" @click="changeLanguage">变更语言</el-button>
import { i18n } from '@/i18n'
const changeLanguage = () => {
console.log('i18n.global.locale', i18n.global.locale)
const lang = i18n.global.locale === 'en' ? 'zh' : 'en'
localStorage.setItem('my_locale', lang)
i18n.global.locale = lang
}
- 源码:https://gitee.com/FutaoSmile/bilibili-vue3.2
- 官方文档似乎比较老,不一定适用于vue3
- 把国际化资源文件单独拎出来
- en.js
export default {
login: {
loginBtn: 'login',
pwdBtn: 'password'
}
}
- zh.js
export default {
login: {
loginBtn: '登录',
pwdBtn: '密码'
}
}
- i18n/index.js
import zh from '@/i18n/zh'
import en from '@/i18n/en'
// 国际化语言资源
const messages = {
// 英文
en: {
...en
},
// 中文
zh: {
...zh
}
}