yh-i18n 2.0.2 → 2.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/index.js +35 -23
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -29,14 +29,17 @@ const navLang = navigator.language.replace("-", "_");
29
29
  const initlang = localStorage.translateLanguage || navLang || "zh_CN";
30
30
 
31
31
  export let i18n = null;
32
- window.translateReady = !!localStorage.translateReady || import.meta.env.DEV;
32
+ window.translateReady = localStorage.translateReady ? localStorage.translateReady === "1" : import.meta.env.DEV;
33
33
  const isDev = window.translateReady;
34
+ let contentReady = false;
34
35
 
35
36
  const keySet = new Set();
36
37
  Object.keys(zhCNBase).forEach((key) => {
37
38
  keySet.add(key);
38
39
  });
39
40
 
41
+ const unHandle: string[] = [];
42
+
40
43
  function addTranslate(key) {
41
44
  if (key.indexOf("vxe") === -1) {
42
45
  try {
@@ -54,12 +57,33 @@ function addTranslate(key) {
54
57
  }
55
58
  }
56
59
 
57
- export const ct = (key, args) => {
58
- if (isDev) {
60
+ function recursionAddTranslate() {
61
+ // 当触发 content 加载完成触发递归方法后,判断是否有需要处理的键,有则处理,没有则忽略
62
+ if (unHandle.length) {
63
+ let key = unHandle.pop();
59
64
  if (!keySet.has(key) && window.translateReady) {
60
65
  keySet.add(key);
61
66
  addTranslate(key);
62
67
  }
68
+ // 通过延时降低任务密度,避免挤兑正常逻辑的运算资源
69
+ setTimeout(() => {
70
+ recursionAddTranslate();
71
+ }, 500);
72
+ }
73
+ }
74
+
75
+ export const ct = (key, args) => {
76
+ if (isDev) {
77
+ // 当 content 加载完成时,进行翻译键是否已存在的判断
78
+ if (contentReady) {
79
+ if (!keySet.has(key) && window.translateReady) {
80
+ keySet.add(key);
81
+ addTranslate(key);
82
+ }
83
+ } else {
84
+ // 当 content 加载未完成时,现将翻译键放入缓存中,等待加载完成后再处理。
85
+ unHandle.push(key);
86
+ }
63
87
  }
64
88
  if (i18n) {
65
89
  return i18n.global.t(key, args);
@@ -200,6 +224,9 @@ async function getRemoteMessage(list) {
200
224
  let m = i18n.global.getLocaleMessage(key);
201
225
  i18n.global.setLocaleMessage(key, Object.assign(m, messages[key]));
202
226
  });
227
+ // 翻译内容加载完成,打开开关并运行递归函数,处理累积的数据
228
+ contentReady = true;
229
+ recursionAddTranslate();
203
230
  } catch (error) {}
204
231
  }
205
232
 
@@ -248,17 +275,9 @@ export function addI18nPage(router) {
248
275
 
249
276
  export function cLog(string, isError = false) {
250
277
  if (isError) {
251
- console.error(
252
- "%cyhI18n:",
253
- "font-size: 16px;font-weight: bold;color: #61AFEF",
254
- string
255
- );
278
+ console.error("%cyhI18n:", "font-size: 16px;font-weight: bold;color: #61AFEF", string);
256
279
  } else {
257
- console.log(
258
- "%cYHI18n",
259
- "font-size: 18px;font-weight: bold;color: #61AFEF",
260
- string
261
- );
280
+ console.log("%cYHI18n", "font-size: 18px;font-weight: bold;color: #61AFEF", string);
262
281
  }
263
282
  }
264
283
 
@@ -266,9 +285,7 @@ export const yhI18n = {
266
285
  install(app, config) {
267
286
  let { list, router, pinia, VXETable } = config;
268
287
  if (!list) {
269
- cLog(
270
- "请设置 Config.i18nList ,并将其设置到 yhI18n 的 congfig.list 上,否则 国际化插件将失效"
271
- );
288
+ cLog("请设置 Config.i18nList ,并将其设置到 yhI18n 的 congfig.list 上,否则 国际化插件将失效");
272
289
  return false;
273
290
  }
274
291
  let messages = createLocalMessage(list);
@@ -280,9 +297,7 @@ export const yhI18n = {
280
297
  app.config.globalProperties.$T = ct;
281
298
 
282
299
  if (!isDev) {
283
- cLog(
284
- "没有开启翻译管理,可以在开发环境或者在控制台运行后面的代码再刷新页面: `localStorage.translateLanguage = '1'`"
285
- );
300
+ cLog("没有开启翻译管理,可以在开发环境或者在控制台运行后面的代码再刷新页面: `localStorage.translateLanguage = '1'`");
286
301
  }
287
302
  if (router && isDev) {
288
303
  addI18nPage(router);
@@ -307,10 +322,7 @@ export const yhI18n = {
307
322
  });
308
323
  } else {
309
324
  if (!pinia) {
310
- cLog(
311
- "没有传递 VXETable 对象,所以无法为 SLW 和 VXETable 设置国际化",
312
- true
313
- );
325
+ cLog("没有传递 VXETable 对象,所以无法为 SLW 和 VXETable 设置国际化", true);
314
326
  }
315
327
  }
316
328
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yh-i18n",
3
- "version": "2.0.2",
3
+ "version": "2.1.3",
4
4
  "description": "对于国际化的封装",
5
5
  "main": "index.js",
6
6
  "scripts": {