language.js 3.4 KB

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