language.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. class Language {
  2. constructor() {
  3. this.languagePackage = null;
  4. this.getLanguages = this.getLanguages.bind(this);
  5. this.languagecode = wx.getStorageSync('languagecode') || 'ZH';
  6. this.languageRequestInProgress = null; // 新增:用于标识请求是否正在进行
  7. if (this.languagecode != 'ZH') {
  8. setTimeout(() => {
  9. this.getLanguages(this.languagecode)
  10. }, 300)
  11. } else {
  12. this.languagePackage = {}
  13. }
  14. }
  15. async getLanguages(languagecode) {
  16. // 如果已有请求正在进行,直接返回当前请求的 Promise
  17. if (this.languageRequestInProgress) {
  18. return this.languageRequestInProgress;
  19. }
  20. return new Promise((resolve, reject) => {
  21. // 开始发起请求前,标记请求正在进行
  22. this.languageRequestInProgress = new Promise(async (resolveRequest, rejectRequest) => {
  23. try {
  24. let res = {
  25. data: {}
  26. };
  27. if (languagecode !== 'ZH') res = await getApp().globalData.http.base({
  28. id: 2024062809072801,
  29. content: {
  30. date: Date.now()
  31. }
  32. });
  33. // 更新语言包和语言代码
  34. this.languagePackage = res.data[languagecode] || {};
  35. this.languagecode = languagecode;
  36. // 保存到本地存储
  37. wx.removeStorageSync('languagecode');
  38. wx.setStorageSync('languagecode', languagecode);
  39. // 请求成功,解决 Promise
  40. resolveRequest(this.languagePackage);
  41. resolve(this.languagePackage);
  42. } catch (error) {
  43. // 请求失败,拒绝 Promise
  44. rejectRequest(error);
  45. reject(error);
  46. } finally {
  47. // 请求完成,清除锁定
  48. this.languageRequestInProgress = null;
  49. }
  50. });
  51. });
  52. }
  53. async getLanguagePackage(that, setNavBarTitle, count = 0) {
  54. if (count == 10) return;
  55. if (this.languagePackage == null) {
  56. if (count == 0) that.setData({
  57. language: {},
  58. sColors: getApp().globalData.sColors
  59. });
  60. setTimeout(() => {
  61. this.getLanguagePackage(that, setNavBarTitle, count + 1);
  62. }, 100);
  63. } else {
  64. that.setData({
  65. language: this.languagePackage,
  66. sColors: getApp().globalData.sColors
  67. });
  68. if (setNavBarTitle) this.setNavBarTitle(setNavBarTitle);
  69. }
  70. }
  71. getMapText(text, f = '', r = '') {
  72. let v = ''
  73. try {
  74. v = this.languagePackage[text] || text
  75. } catch (error) {
  76. if (wx.getStorageSync('languagecode') != 'ZH') console.log('getMapText:未获取到', text)
  77. v = text
  78. }
  79. return f + v + r
  80. }
  81. setNavBarTitle(title) {
  82. wx.setNavigationBarTitle({
  83. title: this.getMapText(title)
  84. })
  85. }
  86. showToast(list, mask = false) {
  87. if (list.length) wx.showToast({
  88. title: this.joint(list),
  89. icon: "none",
  90. mask: mask
  91. })
  92. }
  93. modeBoxPrompts(list = [], title = '提示', confirmText = '确定') {
  94. wx.showModal({
  95. title: this.getMapText(title),
  96. content: this.joint(list),
  97. showCancel: false,
  98. confirmText: this.getMapText(confirmText),
  99. })
  100. }
  101. /* t:translate 是否翻译 v:value 值 f:front 前面 r:rear 后面 */
  102. joint(list) {
  103. if (typeof list == 'string') return this.getMapText(list)
  104. let str = ''
  105. list.forEach(v => {
  106. let value = ''
  107. try {
  108. value = v.t ? this.getMapText(v.v, v.f || '', v.r || '') : ((v.f || '') + v.v + (v.r || ''))
  109. } catch (error) {
  110. value = (v.f || '') + v.v + (v.r || '')
  111. }
  112. str += value
  113. })
  114. return str
  115. }
  116. }
  117. export {
  118. Language
  119. }