1:起步
1: 安装i18n依赖,npm install i18n --save-dev。
2: 也可以直接去下载 i18n的依赖js,我这直接下载好了,直接拿去用 vue-i18n.js 提取码: 8bjs
2:在根目录下,跟components同级,新建文件夹,i18n。
3: 在刚新建的 i18n 文件夹下,新建 lang 文件夹(也可以不用新建,看个人)。
1: lang文件夹存放我们的语言包。
2: index.js 是对我们的语言包做处理。
3: vue-i18n.js 刚上面也有提,如果你通过npm install 安装了依赖,那么就不需要了。
4: index.js 处理我们的语言包
import Vue from 'vue';
import LangEn from './lang/en.js';
import LangCn from './lang/zh.js';
import VueI18n from './vue-i18n.js'(没有通过npm) 或 import VueI18n from 'vue-i18n' (通过npm)
Vue.use(VueI18n);
// 去保存好的值
const system_key = uni.getStorageSync('system_key');
if(!system_key){
// 获取设备信息
uni.getSystemInfo({
success: function(res) {
console.log(res)
uni.setStorageSync('system_key',res);
}
})
}
// 判断获取后的值是什么语言
let lang_cur = '';
switch(lang_cur){
case 'zh':
lang_cur = 'zh'
break;
case 'en':
lang_cur = 'en'
break;
}
// 实例化VueI18n对象
const i18n = new VueI18n({
// 默认语言
locale: lang_cur || 'en',
// 两种方式
messages: {
'en': require('./lang/en.js'),
'zh': require('./lang/zh.js')
},
messages: {
'en': LangEn,
'zh': LangCn
}
})
// 抛出去
export default i18n
5: 处理完之后,将index.js挂载到全局,也就是main.js中。
/**
* @note internationalization 国际化
* */
import i18n from './i18n/index.js';
Vue.prototype._i18n = i18n
App.mpType = 'app'
// 引入仓库全局挂载
Vue.prototype.$store = store
const app = new Vue({
i18n,
store,
...App
})
app.$mount()
6: 在页面中使用,以及在设置页面切换不同的语言。
<template>
<view>
<tui-list-cell :hover="false" unlined :arrow="true" padding="30rpx 32rpx" :lineLeft="false" @tap="langClick">
<view class="tui-item-box">
<view class="tui-list-cell_name">{{$t('langChinese.lang')}}</view>
<view class="tui-right">{{ lang | filer() }}</view>
</view>
</tui-list-cell>
<!-- 语言筛选 -->
<tui-picker
:show="showActionSheetList"
:cancelText="$t('langChinese.cancel')"
:confirmText="$t('langChinese.confirm')"
:pickerData="languagePack"
:value="pickerValue"
@hide="hide"
@change="changePicker">
</tui-picker>
</view>
</template>
<script>
export default {
data(){
return {
name: this.$t('langChinese.cancel'),
lang: '',
showActionSheetList: false,
languagePack: [],
pickerValue: []
}
},
onLoad() {
// 进入页面获取语言包
const system_key = uni.getStorageSync('system_key');
this.lang = system_key.language;
},
filters:{
filer(e){
let nameLang = '';
e == 'en' ? nameLang = 'English' : nameLang = '中文';
return nameLang
}
},
changePicker(e){
// 获取缓存中的语言
const system_key = uni.getStorageSync('system_key');
// 通过switch 遍历
switch (e.value) {
case 0:
system_key.language = this._i18n.locale = 'en'
break;
case 1:
system_key.language = this._i18n.locale = 'zh'
break;
}
this.lang = system_key.language;
uni.setStorageSync('system_key',system_key);
uni.switchTab({
url: "../../tabbar/index/index"
});
// title 动态渲染
uni.setNavigationBarTitle({
title: this.$t('langChinese.set')
});
},
hide(){
this.showActionSheetList = false;
},
}
</script>
7: 小结
1: 以上内容就是有国际化需求提供参考,
2: 如果大家有好的方式,方法,都可以讨论,
3: 希望能对你有帮助,