公司项目需要添加多语言切换功能,考虑到是vue2.0项目,采用vue-i18n。不适用第三方,自己写实现,下文也写了。
一、vue-i18n实现
1、安装:npm i vue-i18n -save
安装后:package.json中
再看下node_modules中:
2、main.js主入口引入:
import Vue from 'vue' import VueI18n from 'vue-i18n' Vue.use(VueI18n); const i18n = new VueI18n({ locale: 'chs', // 将要切换的语言,可以通过url拼的参数获取,用户行为select选择获取,本地manifest配置获取等,根据场景动态获取 messages: { 'chs': require('../../assets/languages/chs.json'), // 本地资源文件,我这里配2个语言,中文&英文,src下根据个人情况放置 'en': require('../../assets/languages/en.json') } }); const app = new Vue({ el: '#app', i18n, router, store, components: { App }, template: '<App/>, mounted: function () { console.log('mounted'); } });
chs.json文件
// 我分2级,home是页面模块,say是首页内需要的语言包文字内容
{ "home": { "say": "你好" } }
en.json文件类似cha.json 值 你好改成"hello"
2、vue页面使用:
// html中 <div>{{$t('home.say')}}</div> <input type="text" :value="$t('home.say')"> // js中 mounted () { let vm = this; vm.$t('home.say'); }
到这 VueI18n 解决语言包问题结束
二、本地不用插件实现
1、新建本地json文件
// 根据需求,有多少种语言,建多少个json文件 // chs.json文件 { "home": { "say": "你好" } } // en.json文件 { "home": { "say": "hello" } }
2、main.js主入口引入并注入vue
// 读取本地json语言包 const LANGUAGES = { chs: require('../../assets/languages/chs.json'), en: require('../../assets/languages/en.json') } // 注入vue new Vue({ components: {App}, template: '<App :LANGUAGES ="LANGUAGES" '/>', data: { LANGUAGES: LANGUAGES['en'] // en这个值,根据项目情况动态获取 }, mounted: function () { console.log('mounted'); } });
3、app.vue使用
export default { data(){ return { } }, props: { LANG: Object }, mounted () { let vm = this; console.log(vm.LANG); // js中使用 } } // html中使用 <div>{{LANG}}</div> <input type="text" :value="LANG" />