vue3+i18n 国际化处理
yarn add vue-i18n
1. 创建i18n文件
/i18n/index.js
import { createI18n } from 'vue-i18n'
import mZhLocale from './lang/zh'
import mEnLocale from './lang/en'
import store from '@/store'
const messages = {
en: {
msg: {
...mEnLocale
}
},
zh: {
msg: {
...mZhLocale
}
}
}
/**
* 返回当前 lang
*/
function getLanguage() {
return store && store.getters && store.getters.language
}
const i18n = createI18n({
// 使用 Composition API 模式,则需要将其设置为false
legacy: false,
// 全局注入 $t 函数
globalInjection: true,
locale: getLanguage(),
messages
})
export default i18n
/i18n/lang/zh.js
export default { login: { title: '用户登录', loginBtn: '登录', } }
/i18n/lang/en.js
export default {
login: {
title: 'User Login',
loginBtn: 'Login',
}
}
2. main.js中引用
import i18n from '@/i18n';
app
.use(store)
.use(router)
.use(i18n)
.mount('#app')
3. store/index.js
import getters from './getters'
import app from './modules/app'
export default createStore({ getters, modules: { app, } })
store/getters.js
const getters = { language: state => state.app.language, } export default getters
store/modules/app.js
import { LANG} from '@/constant'
import { getItem, setItem } from '@/utils/storage'
export default {
namespaced: true,
state: () => ({
language: getItem(LANG) || 'zh',
}),
mutations: {
/**
* 设置国际化
*/
setLanguage(state, lang) {
setItem(LANG, lang)
state.language = lang
},
},
actions: {}
}
以上就是基础代码,使用方式如下
在vue文件中
{{ $t('msg.userInfo.title') }}
<script setup>
const i18n = useI18n();
i18n.t('msg.login.usernameRule')
</script>
在js文件中
import i18n from '@/i18n'
i18n.global.t('msg.login.passwordRule')