import dxMap from '../../dxmodules/dxMap.js' import dxui from '../../dxmodules/dxUi.js' // 语言包 import messages from '../../resource/langPack.js' class I18n { constructor() { const i18nMap = dxMap.get("i18n") this.locale = i18nMap.get("language") || 'EN' this.fallbackLocale = 'CN' } // 获取翻译文本 t(key) { const keys = key.split('.') let result = messages[this.locale] for (const k of keys) { if (result && result[k]) { result = result[k] } else { // 如果当前语言没有找到翻译,使用备用语言 result = this._getFallbackText(key) break } } return result || key } // 获取备用语言的翻译 _getFallbackText(key) { const keys = key.split('.') let result = messages[this.fallbackLocale] for (const k of keys) { if (result && result[k]) { result = result[k] } else { return key } } return result } // 刷新 refresh() { for (const key in dxui.all) { const obj = dxui.all[key] if (obj.dataI18n) { obj.text(this.t(obj.dataI18n)) } } } // 刷新指定对象 refreshObj(obj) { if (obj.dataI18n) { obj.text(this.t(obj.dataI18n)) } } // 切换语言 setLanguage(lang) { if (messages[lang]) { this.locale = lang dxMap.get("i18n").put("language", lang) // 触发自定义事件,通知语言变化 for (const key in dxui.all) { const obj = dxui.all[key] if (obj.dataI18n) { obj.text(this.t(obj.dataI18n)) } } } } } // 创建单例 const i18n = new I18n() export default i18n