i18n.js 2.2 KB
Newer Older
1 2 3 4 5 6 7
import langEn from './en'
import zhHans from './zh-Hans'
import uniStarterConfig from '../uni-starter.config.js'
const {i18n:{enable:i18nEnable} }= uniStarterConfig
const messages = {
	'en': langEn,
	'zh-Hans': zhHans
8
}
9 10 11 12 13 14
let currentLang
if(i18nEnable){
	currentLang = uni.getStorageSync('CURRENT_LANG')
}else{
	currentLang = "zh-Hans"
}
15
// console.log(uni.getStorageSync('CURRENT_LANG'),currentLang);
16
if (!currentLang) {
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
	if (uni.getLocale) {
		console.log('获取应用语言:', uni.getLocale());
		let language = 'en'
		if (uni.getLocale() != 'en') {
			language = 'zh-Hans'
		}
		uni.setStorageSync('CURRENT_LANG', language)
		currentLang = language
	} else {
		uni.getSystemInfo({
			success: function(res) {
				console.log('获取设备信息:', res);
				let language = 'zh-Hans'
				if (res.language == 'en') {
					language = 'en'
				}
				uni.setStorageSync('CURRENT_LANG', language)
				currentLang = language
			},
			fail: (err) => {
				console.error(err)
			}
		})
	}
}
let i18nConfig = {
	locale: currentLang, // set locale
	messages // set locale messages
}

// #ifdef VUE2
48 49 50
import Vue from 'vue'
import VueI18n from 'vue-i18n'
Vue.use(VueI18n)
51 52 53 54 55 56 57 58 59 60 61
const i18n = new VueI18n(i18nConfig)
// #endif

// #ifdef VUE3
import {
	createI18n
} from 'vue-i18n'
const i18n = createI18n(i18nConfig)
// #endif

export default i18n
62 63


64
if(i18nEnable){
65 66 67 68 69
console.log(`
	你已开启多语言国际化,将自动根据语言获取【lang/en.js】或【lang/en.js】文件中配置的tabbar的值,
	覆盖你在pages.json中的tabbar的值
	如果你不需要多语言国际化,请打开配置文件uni-starter.config.js找到 -> i18n -> enable把值设置为false
`);
70 71
	let initLanguageAfter = () => {
		function $i18n(e){
72 73 74
			// #ifdef VUE3
			return i18n.global.messages[i18n.global.locale][e]
			// #endif
75 76 77 78 79
			return i18n.messages[i18n.locale][e]
		}
		setTimeout(function(){
			//底部tabbar更新
			$i18n('tabbar').split(',').forEach((text, index) => {
80
				// console.log(text);
81 82 83 84
				uni.setTabBarItem({
					index,
					text,
					complete: e => {
85
						// console.log("e: " + JSON.stringify(e));
86 87 88 89 90 91 92 93 94 95 96
					}
				})
			})
		},1)
	}
	initLanguageAfter()
	uni.$on('changeLanguage', e => {
		console.log('changeLanguage', e);
		initLanguageAfter(e)
	})
}