推广小程序前端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

76 lines
1.8 KiB

import en from './en.json'//英语语言包
import zhHans from './zh-Hans.json'//英语语言包
import Vue from 'vue'
import VueI18n from 'vue-i18n'
// 国际化字段映射
import objectLangMap from './objectLangMap'
Vue.use(VueI18n)
// 获取系统语言
const systemInfo = uni.getSystemInfoSync();
const systemLang = 'en';
// const systemLang = systemInfo.language || 'en';
console.log(systemInfo.language, systemLang);
// 语言映射,将系统语言映射到我们支持的语言包
const langMap = {
'zh': 'zh-Hans',
'zh_CN': 'zh-Hans',
'zh-Hans': 'zh-Hans',
'zh-Hant': 'zh-Hans', // 暂时都映射到简体中文
'zh-TW': 'zh-Hans',
'zh-HK': 'zh-Hans',
'en': 'en',
'en-US': 'en',
'en-GB': 'en'
};
// 获取语言:优先缓存 -> 系统语言 -> 默认英语
const lang = uni.getStorageSync('language') || langMap[systemLang] || 'en';
// const lang = 'en';
// VueI18n构造函数所需要的配置
const i18nConfig = {
locale: lang,//当前语言
// 所需要用的语言包
messages:{
en,
'zh-Hans' : zhHans,
}
}
//将对象国际化
Vue.prototype.$ot = (obj, type, key) => {
// 如果对象不存在,返回空字符串
if (!obj) return '';
// 获取当前语言
const currentLang = i18n.locale;
// 获取字段映射配置
const typeConfig = objectLangMap[type];
if (!typeConfig) return obj[key] || '';
const fieldConfig = typeConfig[key];
if (!fieldConfig) return obj[key] || '';
// 获取当前语言对应的字段名
const fieldName = fieldConfig[currentLang];
if (!fieldName) return obj[key] || '';
// 返回对象中对应字段的值,如果不存在则返回默认字段的值
return obj[fieldName] || obj[key] || '';
}
const i18n = new VueI18n(i18nConfig)
export default i18n