| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- 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
- }
|