i18n-jsautotranslate 3.18.53 → 3.18.55

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.
@@ -52,10 +52,8 @@ const LanguageSelectOnChange = (value: string) => {
52
52
  };
53
53
 
54
54
  onMounted(() => {
55
-
56
55
  //重写渲染语言下拉列表出现时的函数,这里是为了把默认创建的 <div id="translate" 这个给去掉,其他无改变
57
56
  translate.selectLanguageTag.render = function(){ //v2增加
58
- console.log('translate.selectLanguageTag.render已被渲染,触发来源:', new Error('调用栈追踪').stack);
59
57
  if(translate.selectLanguageTag.alreadyRender){
60
58
  return;
61
59
  }
@@ -74,6 +72,7 @@ onMounted(() => {
74
72
  console.log('load language list error : '+data.info);
75
73
  return;
76
74
  }
75
+ translate.request.api.language = data.list; //进行缓存,下一次切换语言渲染的时候直接从缓存取,就不用在通过网络加载了
77
76
  translate.selectLanguageTag.customUI(data.list);
78
77
  }, null);
79
78
  }else if(typeof(translate.request.api.language) == 'object'){
@@ -82,7 +81,7 @@ onMounted(() => {
82
81
  }
83
82
 
84
83
  //显示切换语言
85
- var TranslateJsSelectLanguages = document.getElementsByClassName('TranslateJsSelectLanguage');
84
+ var TranslateJsSelectLanguages = document.getElementsByClassName('LanguageSelect');
86
85
  TranslateJsSelectLanguages[0].style.display = 'block';
87
86
  }
88
87
 
@@ -114,14 +113,12 @@ onMounted(() => {
114
113
  languageList.value = allowLanguageList;
115
114
 
116
115
  //显示上一次切换后的语种
117
- setTimeout(function(){
118
- language.value = translate.language.getCurrent();
119
- }, 50);
116
+ language.value = translate.language.getCurrent();
117
+ //setTimeout(function(){
118
+ //language.value = translate.language.getCurrent();
119
+ //}, 100);
120
120
  }
121
121
 
122
-
123
- console.log('1111')
124
-
125
122
  const refreshLanguage = function(){
126
123
  //渲染语言下拉列表出现
127
124
  window.translate.selectLanguageTag.refreshRender();
@@ -129,18 +126,18 @@ onMounted(() => {
129
126
  language.value = translate.language.getCurrent();
130
127
  };
131
128
 
129
+
132
130
  // 当用户打开页面后,第一次触发 translate.execute() 时,进行触发
133
131
  translate.lifecycle.execute.trigger.push(function(data){
134
- if(translate.executeTriggerNumber === 0){
135
- console.log('这是打开页面后,第一次触发 translate.execute() ,因为translate.executeNumber 记录的是translate.execute() 执行完的次数。');
132
+ if(data.executeTriggerNumber === 1){
133
+ //console.log('这是打开页面后,第一次触发 translate.execute() ,因为translate.executeNumber 记录的是translate.execute() 执行完的次数。');
136
134
  // 触发语言下拉列表出现
137
135
  //渲染语言下拉列表出现
138
136
  refreshLanguage();
139
137
  }
140
138
  });
141
-
142
139
  //如果已经触发了 translate.execute() 那么直接就渲染
143
- console.log(translate.executeTriggerNumber+ ', '+translate.state)
140
+ //console.log(translate.executeTriggerNumber+ ', '+translate.state)
144
141
  if(translate.executeTriggerNumber > 0 || translate.state > 0){
145
142
  refreshLanguage();
146
143
  }
package/index.js CHANGED
@@ -14,7 +14,7 @@ var translate = {
14
14
  * 格式:major.minor.patch.date
15
15
  */
16
16
  // AUTO_VERSION_START
17
- version: '3.18.53.20250927',
17
+ version: '3.18.55.20250928',
18
18
  // AUTO_VERSION_END
19
19
  /*
20
20
  当前使用的版本,默认使用v2. 可使用 setUseVersion2();
@@ -185,6 +185,7 @@ var translate = {
185
185
  return;
186
186
  }
187
187
  //console.log(data.list);
188
+ translate.request.api.language = data.list; //进行缓存,下一次切换语言渲染的时候直接从缓存取,就不用在通过网络加载了
188
189
  translate.selectLanguageTag.customUI(data.list);
189
190
  }, null);
190
191
  }else if(typeof(translate.request.api.language) == 'object'){
@@ -1892,22 +1893,34 @@ var translate = {
1892
1893
  这个触发是指在所有判断之前,也就是只要 触发了 translate.execute() 会立即触发此,然后在进行执行其他的。
1893
1894
  {
1894
1895
  to: , //翻译为的语种
1895
- docs: //当前触发 translate.execute() 要进行翻译的元素。
1896
- 比如单纯触发执行 translate.execute() 、translate.request.listener.start() 那么这里 docs 则是 通过 translate.setDocuments(...) 所设置的元素
1896
+ docs: //当前触发 translate.execute() 要进行翻译的元素。
1897
+ 比如单纯触发执行 translate.execute() 、translate.request.listener.start() 那么这里 docs 则是 通过 translate.setDocuments(...) 所设置的元素。 如果没有使用 translate.setDocuments(...) 设置过,那就是翻译整个html页面。
1897
1898
  如果是 translate.listener.start(); 监控页面发生变化的元素进行翻译,则这里的docs 则是发生变化的元素
1898
-
1899
+ executeTriggerNumber: 整数型,当前触发 translate.execute() 执行,属于打开页面后第几次执行 translate.execute() , 它不会经过任何初始化判断,只要触发了 translate.execute() 就会立即+1,即使初始化判断当前不需要翻译、或者当前正在翻译需要排队等待,它依旧也会+1
1900
+
1899
1901
  }
1900
1902
 
1903
+ 注意,它有返回参数,boolean 类型:
1904
+ true 则是继续执行 translate.execute()
1905
+ false 则是不继续执行,直接终止本次的 translate.execute() 也就是后面的 translate.lifecycle.execute.start 都不会执行到,不会触发。
1906
+ 如果钩子没有任何返回值,则默认是 true
1907
+
1908
+ 如果本钩子有多个实现,其中某个实现返回 false,它不会阻止其他钩子的执行,其他的钩子实现也都会触发执行。 只不过里面只要其中有一个是返回 false,那么 translate.execute() 都会终止。
1901
1909
  */
1902
1910
  trigger: [],
1903
1911
  trigger_Trigger:function(data){
1912
+ var isNextExecute = true; //是否继续向下执行,true则是继续执行,false则是不继续执行。
1904
1913
  for(var i = 0; i < translate.lifecycle.execute.trigger.length; i++){
1905
1914
  try{
1906
- translate.lifecycle.execute.trigger[i](data);
1915
+ var isNext = translate.lifecycle.execute.trigger[i](data);
1916
+ if(typeof(isNext) === 'boolean' && boolean === false){
1917
+ isNextExecute = false;
1918
+ }
1907
1919
  }catch(e){
1908
1920
  console.log(e);
1909
1921
  }
1910
1922
  }
1923
+ return isNextExecute;
1911
1924
  },
1912
1925
 
1913
1926
  /*
@@ -2104,15 +2117,53 @@ var translate = {
2104
2117
  如果不传入或者传入null,则是翻译整个网页所有能翻译的元素
2105
2118
  */
2106
2119
  execute:function(docs){
2120
+ translate.executeTriggerNumber = translate.executeTriggerNumber + 1;
2121
+ var triggerNumber = translate.executeTriggerNumber; //为了整个 translate.execute 的数据一致性,下面都是使用这个变量
2122
+
2123
+ //每次执行execute,都会生成一个唯一uuid,也可以叫做队列的唯一标识,每一次执行execute都会创建一个独立的翻译执行队列
2124
+ var uuid = translate.util.uuid();
2125
+ translate.time.log('创建uuid:'+uuid);
2126
+
2127
+ //如果页面打开第一次使用,先判断缓存中有没有上次使用的语种,从缓存中取出
2128
+ if(translate.to == null || translate.to == ''){
2129
+ var to_storage = translate.storage.get('to');
2130
+ if(to_storage != null && typeof(to_storage) != 'undefined' && to_storage.length > 0){
2131
+ translate.to = to_storage;
2132
+ }
2133
+ }
2134
+
2135
+ /*
2136
+ 进行翻译指定的node操作。优先级为:
2137
+ 1. 这个方法已经指定的翻译 nodes
2138
+ 2. setDocuments 指定的
2139
+ 3. 整个网页
2140
+ 其实2、3都是通过 getDocuments() 取,在getDocuments() 就对2、3进行了判断
2141
+ */
2142
+ var all;
2143
+ if(typeof(docs) != 'undefined' && docs != null){
2144
+ if(typeof(docs.length) == 'undefined'){
2145
+ //不是数组,是单个元素
2146
+ all = new Array();
2147
+ all[0] = docs;
2148
+ }else{
2149
+ //是数组,直接赋予
2150
+ all = docs;
2151
+ }
2152
+ }else{
2153
+ //2、3
2154
+ all = translate.getDocuments();
2155
+ }
2156
+
2157
+
2107
2158
  //钩子
2108
2159
  translate.lifecycle.execute.trigger_Trigger({
2109
2160
  to:translate.to,
2110
- docs: docs
2161
+ docs: all,
2162
+ executeTriggerNumber: triggerNumber
2163
+ uuid: uuid
2111
2164
  });
2112
2165
 
2113
2166
 
2114
- translate.executeTriggerNumber = translate.executeTriggerNumber + 1;
2115
- var triggerNumber = translate.executeTriggerNumber; //为了整个 translate.execute 的数据一致性,下面都是使用这个变量
2116
2167
 
2117
2168
  if(translate.waitingExecute.use){
2118
2169
  if(translate.state != 0){
@@ -2149,7 +2200,7 @@ var translate = {
2149
2200
 
2150
2201
  //钩子
2151
2202
  translate.lifecycle.execute.finally_Trigger({
2152
- uuid:'',
2203
+ uuid:uuid,
2153
2204
  to:translate.to,
2154
2205
  state: 2,
2155
2206
  triggerNumber: triggerNumber
@@ -2187,9 +2238,7 @@ var translate = {
2187
2238
  /****** 采用 2.x 版本的翻译,使用自有翻译算法 */
2188
2239
 
2189
2240
 
2190
- //每次执行execute,都会生成一个唯一uuid,也可以叫做队列的唯一标识,每一次执行execute都会创建一个独立的翻译执行队列
2191
- var uuid = translate.util.uuid();
2192
- translate.time.log('创建uuid:'+uuid);
2241
+
2193
2242
  //console.log('=====')
2194
2243
  //console.log(translate.nodeQueue);
2195
2244
 
@@ -2202,13 +2251,7 @@ var translate = {
2202
2251
  //console.log(translate.nodeQueue);
2203
2252
  //console.log('=====end')
2204
2253
 
2205
- //如果页面打开第一次使用,先判断缓存中有没有上次使用的语种,从缓存中取出
2206
- if(translate.to == null || translate.to == ''){
2207
- var to_storage = translate.storage.get('to');
2208
- if(to_storage != null && typeof(to_storage) != 'undefined' && to_storage.length > 0){
2209
- translate.to = to_storage;
2210
- }
2211
- }
2254
+
2212
2255
 
2213
2256
  translate.time.log('渲染出选择语言的select窗口-开始');
2214
2257
  //渲染select选择语言
@@ -2231,7 +2274,7 @@ var translate = {
2231
2274
 
2232
2275
  //钩子
2233
2276
  translate.lifecycle.execute.finally_Trigger({
2234
- uuid:'',
2277
+ uuid:uuid,
2235
2278
  to:translate.to,
2236
2279
  state: 3,
2237
2280
  triggerNumber: triggerNumber
@@ -2251,8 +2294,8 @@ var translate = {
2251
2294
 
2252
2295
  //钩子
2253
2296
  translate.lifecycle.execute.finally_Trigger({
2254
- uuid:'',
2255
- to:'',
2297
+ uuid:uuid,
2298
+ to:translate.to,
2256
2299
  state: 5,
2257
2300
  triggerNumber: triggerNumber
2258
2301
  });
@@ -2278,39 +2321,7 @@ var translate = {
2278
2321
  translate.images.execute();
2279
2322
  translate.time.log('进行图片翻译-完成');
2280
2323
 
2281
- /*
2282
- 进行翻译指定的node操作。优先级为:
2283
- 1. 这个方法已经指定的翻译 nodes
2284
- 2. setDocuments 指定的
2285
- 3. 整个网页
2286
- 其实2、3都是通过 getDocuments() 取,在getDocuments() 就对2、3进行了判断
2287
- */
2288
- var all;
2289
- if(typeof(docs) != 'undefined' && docs != null){
2290
- //1. 这个方法已经指定的翻译 nodes
2291
-
2292
- /* v3.12.6 注释,转到判断非null
2293
- if(docs == null){
2294
- //要翻译的目标区域不存在
2295
- console.log('translate.execute(...) 中传入的要翻译的目标区域不存在。');
2296
- translate.state = 0;
2297
- return;
2298
- }
2299
- */
2300
-
2301
- if(typeof(docs.length) == 'undefined'){
2302
- //不是数组,是单个元素
2303
- all = new Array();
2304
- all[0] = docs;
2305
- }else{
2306
- //是数组,直接赋予
2307
- all = docs;
2308
- }
2309
-
2310
- }else{
2311
- //2、3
2312
- all = translate.getDocuments();
2313
- }
2324
+
2314
2325
  //console.log('----要翻译的目标元素-----');
2315
2326
  //console.log(all)
2316
2327
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "i18n-jsautotranslate",
3
- "version": "3.18.53",
3
+ "version": "3.18.55",
4
4
  "description": "Two lines of js realize automatic html translation. No need to change the page, no language configuration file, no API key, SEO friendly!",
5
5
  "main": "index.js",
6
6
  "scripts": {