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