class Language { constructor() { this.getLanguages = this.getLanguages.bind(this); this.languagecode = wx.getStorageSync('languagecode') || 'ZH'; this.languageRequestInProgress = null; // 新增:用于标识请求是否正在进行 if (this.languagecode != 'ZH') { setTimeout(() => { this.getLanguages(this.languagecode) }, 300) } else { wx.removeStorageSync('languagePackage'); wx.setStorageSync('languagePackage', { "新建": "新建" }) } } async getLanguages(languagecode) { if (this.languageRequestInProgress) return this.languageRequestInProgress; // 先创建请求 Promise let requestPromise = (async () => { try { let res = { data: {} }; if (languagecode !== 'ZH') { res = await getApp().globalData.http.base({ id: 2024062809072801, content: { date: Date.now() } }); } // 更新语言包和语言代码 wx.removeStorageSync('languagePackage'); wx.setStorageSync('languagePackage', res.data[languagecode] || { "新建": "新建" }); this.languagecode = languagecode; // 保存到本地存储 wx.removeStorageSync('languagecode'); wx.setStorageSync('languagecode', languagecode); } catch (error) { throw error; } })(); // 🔑 把 this.languageRequestInProgress 设为一个带 finally 的 Promise this.languageRequestInProgress = requestPromise.finally(() => { this.languageRequestInProgress = null; }); return this.languageRequestInProgress; } getLanguagePackage(that, setNavBarTitle, count = 0) { if (count == 10) return; if (this.languagecode == 'ZH') { that.setData({ language: { "新建": "新建" }, sColors: getApp().globalData.sColors }); if (setNavBarTitle) this.setNavBarTitle(setNavBarTitle); } else { if (!wx.getStorageSync('languagePackage')['新建']) { if (count == 0) that.setData({ sColors: getApp().globalData.sColors, language: { "新建": "新建" }, }); setTimeout(() => { this.getLanguagePackage(that, setNavBarTitle, count + 1); }, count == 0 ? 400 : 100); } else { that.setData({ language: wx.getStorageSync('languagePackage'), sColors: getApp().globalData.sColors }); if (setNavBarTitle) this.setNavBarTitle(setNavBarTitle); } } } getMapText(text, f = '', r = '') { let v = '' try { v = wx.getStorageSync('languagePackage')[text] || text } catch (error) { if (wx.getStorageSync('languagecode') != 'ZH') console.log('getMapText:未获取到', text) v = text } return f + v + r } setNavBarTitle(title) { wx.setNavigationBarTitle({ title: this.getMapText(title) }) } showToast(list, mask = false) { if (list.length) wx.showToast({ title: this.joint(list), icon: "none", mask: mask }) } modeBoxPrompts(list = [], title = '提示', confirmText = '确定') { wx.showModal({ title: this.getMapText(title), content: this.joint(list), showCancel: false, confirmText: this.getMapText(confirmText), }) } /* t:translate 是否翻译 v:value 值 f:front 前面 r:rear 后面 */ joint(list) { if (typeof list == 'string') return this.getMapText(list) let str = '' list.forEach(v => { let value = '' try { value = v.t ? this.getMapText(v.v, v.f || '', v.r || '') : ((v.f || '') + v.v + (v.r || '')) } catch (error) { value = (v.f || '') + v.v + (v.r || '') } str += value }) return str } } export { Language }