国际化
国际化
安装
Vue-Cli3 使用下面命令
vue add i18n
然后可能会报错
TypeError: _ctx.$t is not a function
解决办法
在创建国际化组件时,加上一个属性
globalInjection: true,
默认位于/src/i18n.js
本地国际化
最新版本还支持本地文件国际化,使用方法如下:
<template>
<p>{{ t('hello') }}</p>
</template>
<script>
import { defineComponent } from 'vue'
import { useI18n } from 'vue-i18n'
export default defineComponent({
name: 'HelloI18n',
setup() {
const { t } = useI18n({
inheritLocale: true,
useScope: 'local'
})
// Something todo ..
return { t }
}
})
</script>
<i18n>
{
"en": {
"hello": "Hello i18n in SFC!"
}
}
</i18n>
语言选择
添加语言选择功能
<template>
<div class="locale-changer">
<el-form label-width="120px">
<el-form-item label="语言选择">
<el-select placeholder="请选择语言" v-model="$i18n.locale" @change="langChanged">
<el-option :key="i" v-for="(lang, i) in langs" :label="lang.label" :value="lang.value"/>
</el-select>
</el-form-item>
</el-form>
</div>
</template>
<script>
export default {
name: 'locale-changer',
data() {
return {
langs: [
{
value: 'zh_CN',
label: "简体中文"
},
{
value: 'en_US',
label: "English"
}
]
}
},
methods: {
langChanged(lang) {
console.log("langChanged=>", lang);
localStorage.Lang = lang;
}
},
mounted() {
if (localStorage.Lang != null) this.$i18n.locale = localStorage.Lang;
}
}
</script>
参考