i18n-jsautotranslate 3.12.7 → 3.12.11

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 (3) hide show
  1. package/README.md +1 -1
  2. package/index.js +193 -25
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -145,7 +145,7 @@ translate.execute();//进行翻译
145
145
  const translate = require("i18n-jsautotranslate")
146
146
  ```
147
147
 
148
- [Vue2 中使用 translate.js 在线 Demo](https://lruihao.github.io/vue-el-demo/#/translate-js)
148
+ [详细使用说明](https://translate.zvo.cn/4041.html) | [Vue2 中使用 translate.js 在线 Demo](https://lruihao.github.io/vue-el-demo/#/translate-js)
149
149
 
150
150
  # 谁在使用
151
151
  截止 2023.7 月份时,本项目的后端免费翻译服务的请求量就已经达到了 1.5亿次/月 的规模,并且还在非常快速的持续增大,包括一些城投集团像是长沙城投、以及一些政府单位像是环境保障局、企业国际化经营服务平台、海外矿业产业联合、国际潮青联谊年会、人力资源和社会保障局、政务服务网、海外的一些平台如futrom智能住宅、bitheime全球区块链等等都在广泛使用。
package/index.js CHANGED
@@ -12,7 +12,7 @@ var translate = {
12
12
  * 格式:major.minor.patch.date
13
13
  */
14
14
  // AUTO_VERSION_START
15
- version: '3.12.7.20250111',
15
+ version: '3.12.11.20250122',
16
16
  // AUTO_VERSION_END
17
17
  /*
18
18
  当前使用的版本,默认使用v2. 可使用 setUseVersion2();
@@ -179,7 +179,7 @@ var translate = {
179
179
  document.getElementById('translateSelectLanguage').style.width = '94px';
180
180
  }catch(e){ console.log(e);}
181
181
  */
182
- });
182
+ }, null);
183
183
 
184
184
 
185
185
  }
@@ -852,6 +852,7 @@ var translate = {
852
852
  return doms;
853
853
  }
854
854
  },
855
+
855
856
  listener:{
856
857
  //当前页面打开后,是否已经执行完execute() 方法进行翻译了,只要执行完一次,这里便是true。 (多种语言的API请求完毕并已渲染html)
857
858
  //isExecuteFinish:false,
@@ -1116,16 +1117,14 @@ var translate = {
1116
1117
  translate.inProgressNodes[ini].number = translate.inProgressNodes[ini].number - 1;
1117
1118
  //console.log("inProgressNodes -- number: "+translate.inProgressNodes[ini].number+', text:'+ipnode.nodeValue);
1118
1119
  if(translate.inProgressNodes[ini].number < 1){
1119
-
1120
-
1121
- //console.log('ini-'+ini)
1122
- translate.inProgressNodes.splice(ini,1);
1123
- //console.log("inProgressNodes -- 减去node length: "+translate.inProgressNodes.length+', text:'+ipnode.nodeValue);
1124
- //
1120
+ translate.inProgressNodes.splice(ini,1);
1121
+ //console.log("inProgressNodes -- 减去node length: "+translate.inProgressNodes.length+', text:'+ipnode.nodeValue);
1125
1122
  }
1123
+
1126
1124
  break;
1127
1125
  }
1128
1126
  }
1127
+
1129
1128
  }, 50, ipnode);
1130
1129
 
1131
1130
  translate.element.nodeAnalyse.set(this.nodes[hash][task_index], task.originalText, task.resultText, task['attribute']);
@@ -1221,10 +1220,100 @@ var translate = {
1221
1220
  }
1222
1221
  }
1223
1222
  },
1223
+
1224
+
1225
+ /*
1226
+ 当前状态,执行状态
1227
+ 0 空闲(或者执行翻译完毕)
1228
+ 10 扫描要翻译的node,并读取浏览器缓存的翻译内容进行渲染显示
1229
+ 20 浏览器缓存渲染完毕,ajax通过文本翻译接口开始请求,在发起ajax请求前,状态变为20,然后再发起ajax请求
1230
+ 至于翻译完毕后进行渲染,这个就不单独记录了,因为如果页面存在不同的语种,不同的语种是按照不同的请求来的,是多个异步同时进行的过程
1231
+ */
1232
+ state:0,
1233
+
1234
+ /*
1235
+ 等待翻译队列 v3.12.6 增加
1236
+ 当前是否有需要等待翻译的任务,这个目的是为了保证同一时间 translate.execute() 只有一次在执行,免得被新手前端给造成死循环,导致edge翻译给你屏蔽,用户网页还卡死
1237
+ 当执行 translate.execute() 时,会先判断状态 translate.state 是否是0空闲的状态,如果空闲,才会执行,如果不是空闲,则不会执行,而是进入到这里进行等待,等待执行完毕后 translate.state 变成0空闲之后,再来执行这里的
1238
+
1239
+ */
1240
+ waitingExecute:{
1241
+
1242
+ /*
1243
+ 一维数组形态,存放执行的翻译任务
1244
+ 二维对象形态,存放执行传入的 docs
1245
+ */
1246
+ queue:[],
1247
+ /*
1248
+ 增加一个翻译任务到翻译队列中
1249
+ docs 同 translate.execute(docs) 的传入参数
1250
+ */
1251
+ add:function(docs){
1252
+ //向数组末尾追加
1253
+ translate.waitingExecute.queue.push(docs);
1254
+ //开启一个定时器进行触发
1255
+ let intervalId = setInterval(function() {
1256
+ if(translate.state == 0){
1257
+ //清除定时器,结束循环
1258
+ clearInterval(intervalId);
1259
+ var docs = translate.waitingExecute.get();
1260
+ translate.execute(docs);
1261
+ //console.log('stop waitingExecute setInterval');
1262
+ }
1263
+ }, 500);
1264
+ },
1265
+ /*
1266
+ 从 quque 中取第一个元素,同时将其从queue中删除掉它。
1267
+ 如果取的时候 quque已经没有任何元素了,会返回 null, 但是理论上不会出现null
1268
+ */
1269
+ get:function(){
1270
+ //使用 shift 方法删除数组的第一个元素,并将第一个元素的值返回
1271
+ if(translate.waitingExecute.queue.length > 0){
1272
+ return translate.waitingExecute.queue.shift();
1273
+ }else{
1274
+ console.log('警告, translate.waitingExecute.get 出现异常,quque已空,但还往外取。');
1275
+ return null;
1276
+ }
1277
+ },
1278
+ //当前 translate.translateRequest[uuid] 的是否已经全部执行完毕,这里单纯只是对 translate.translateRequest[uuid] 的进行判断,这里要在 translate.json 接口触发完并渲染完毕后触发,当然接口失败时也要触发
1279
+ isAllExecuteFinish:function(uuid){
1280
+
1281
+ for(var lang in translate.translateRequest[uuid]){
1282
+ for(var i = 0; i<translate.translateRequest[uuid][lang].length; i++){
1283
+ if(translate.translateRequest[uuid][lang][i].executeFinish == 0){
1284
+ //这个还没执行完,那么直接退出,不在向后执行了
1285
+ //console.log('uuid:'+uuid+' lang:'+lang+' executeFinish:0 time:'+translate.translateRequest[uuid][lang][i][addtime]);
1286
+
1287
+ //这里要考虑进行时间判断
1288
+
1289
+ return;
1290
+ }
1291
+ }
1292
+ }
1293
+
1294
+ //都执行完了,那么设置完毕
1295
+ translate.state = 0;
1296
+ translate.executeNumber++;
1297
+ }
1298
+
1299
+ },
1224
1300
 
1225
- //执行翻译操作。翻译的是 nodeQueue 中的
1226
- //docs 如果传入,那么翻译的只是传入的这个docs的。传入如 [document.getElementById('xxx'),document.getElementById('xxx'),...]
1301
+ //execute() 方法已经被执行过多少次了, 只有execute() 完全执行完,也就是界面渲染完毕后,它才会+1
1302
+ executeNumber:0,
1303
+
1304
+ /*
1305
+ 执行翻译操作。翻译的是 nodeQueue 中的
1306
+ docs 如果传入,那么翻译的只是传入的这个docs的。传入如 [document.getElementById('xxx'),document.getElementById('xxx'),...]
1307
+ 如果不传入或者传入null,则是翻译整个网页所有能翻译的元素
1308
+ */
1227
1309
  execute:function(docs){
1310
+ if(translate.state != 0){
1311
+ console.log('当前翻译还未完结,新的翻译任务已加入等待翻译队列中,待翻译结束后便会执行当前翻译任务。');
1312
+ translate.waitingExecute.add(docs);
1313
+ return;
1314
+ }
1315
+ translate.state = 1;
1316
+ //console.log('translate.state = 1');
1228
1317
  if(typeof(docs) != 'undefined'){
1229
1318
  //execute传入参数,只有v2版本才支持
1230
1319
  translate.useVersion = 'v2';
@@ -1285,6 +1374,7 @@ var translate = {
1285
1374
  }
1286
1375
 
1287
1376
  //没有指定翻译目标语言、又没自动获取用户本国语种,则不翻译
1377
+ translate.state = 0;
1288
1378
  return;
1289
1379
  }
1290
1380
 
@@ -1294,6 +1384,7 @@ var translate = {
1294
1384
  //这是自定义设置的允许翻译本地语种中,跟本地语种不一致的语言进行翻译
1295
1385
 
1296
1386
  }else{
1387
+ translate.state = 0;
1297
1388
  return;
1298
1389
  }
1299
1390
  }
@@ -1312,14 +1403,17 @@ var translate = {
1312
1403
  其实2、3都是通过 getDocuments() 取,在getDocuments() 就对2、3进行了判断
1313
1404
  */
1314
1405
  var all;
1315
- if(typeof(docs) != 'undefined'){
1406
+ if(typeof(docs) != 'undefined' && docs != null){
1316
1407
  //1. 这个方法已经指定的翻译 nodes
1317
1408
 
1409
+ /* v3.12.6 注释,转到判断非null
1318
1410
  if(docs == null){
1319
1411
  //要翻译的目标区域不存在
1320
1412
  console.log('translate.execute(...) 中传入的要翻译的目标区域不存在。');
1413
+ translate.state = 0;
1321
1414
  return;
1322
1415
  }
1416
+ */
1323
1417
 
1324
1418
  if(typeof(docs.length) == 'undefined'){
1325
1419
  //不是数组,是单个元素
@@ -1722,6 +1816,8 @@ var translate = {
1722
1816
  //console.log(translate.nodeQueue[uuid]['list'])
1723
1817
  if(fanyiLangs.length == 0){
1724
1818
  //没有需要翻译的,直接退出
1819
+ translate.state = 0;
1820
+ translate.executeNumber++;
1725
1821
  return;
1726
1822
  }
1727
1823
 
@@ -1767,6 +1863,9 @@ var translate = {
1767
1863
  }
1768
1864
  }
1769
1865
  //加入 translate.inProgressNodes -- end
1866
+
1867
+ //状态
1868
+ translate.state = 20;
1770
1869
 
1771
1870
 
1772
1871
 
@@ -1776,6 +1875,9 @@ var translate = {
1776
1875
  //console.log(typeof(translateTextArray[lang]))
1777
1876
 
1778
1877
  if(typeof(translateTextArray[lang]) == 'undefined' || translateTextArray[lang].length < 1){
1878
+ console.log('异常,理论上不应该存在: typeof(translateTextArray[lang]) == \'undefined\' || translateTextArray[lang].length < 1');
1879
+ translate.state = 0;
1880
+ translate.executeNumber++;
1779
1881
  return;
1780
1882
  }
1781
1883
 
@@ -1785,11 +1887,21 @@ var translate = {
1785
1887
  console.log(translateTextArray[lang][ttr_index])
1786
1888
  }*/
1787
1889
 
1890
+ //将需要请求翻译接口的加入到 translate.translateRequest 中
1891
+ if(typeof(translate.translateRequest[uuid]) == 'undefined' || translate.translateRequest[uuid] == null){
1892
+ translate.translateRequest[uuid] = {};
1893
+ }
1894
+ translate.translateRequest[uuid][lang] = {};
1895
+ translate.translateRequest[uuid][lang].executeFinish = 0; //是否执行完毕,0是执行中, 1是执行完毕(不管是失败还是成功) 而且执行完毕是指ajax请求获得响应,并且dom渲染完成之后才算完毕。当然如果ajax接口失败那也是直接算完毕
1896
+ translate.translateRequest[uuid][lang].addtime = Math.floor(Date.now() / 1000);
1897
+
1898
+
1788
1899
  /*** 翻译开始 ***/
1789
1900
  var url = translate.request.api.translate;
1790
1901
  var data = {
1791
1902
  from:lang,
1792
1903
  to:translate.to,
1904
+ lowercase:translate.whole.isEnableAll? '0':'1', //首字母大写
1793
1905
  //text:JSON.stringify(translateTextArray[lang])
1794
1906
  text:encodeURIComponent(JSON.stringify(translateTextArray[lang]))
1795
1907
  };
@@ -1798,6 +1910,10 @@ var translate = {
1798
1910
  //console.log(data);
1799
1911
  //console.log(translateTextArray[data.from]);
1800
1912
  if(data.result == 0){
1913
+ translate.translateRequest[uuid][lang].result = 2;
1914
+ translate.translateRequest[uuid][lang].executeFinish = 1; //1是执行完毕
1915
+ translate.translateRequest[uuid][lang].stoptime = Math.floor(Date.now() / 1000);
1916
+ translate.waitingExecute.isAllExecuteFinish();
1801
1917
  console.log('=======ERROR START=======');
1802
1918
  console.log(translateTextArray[data.from]);
1803
1919
  //console.log(encodeURIComponent(JSON.stringify(translateTextArray[data.from])));
@@ -1805,6 +1921,7 @@ var translate = {
1805
1921
  console.log('response : '+data.info);
1806
1922
  console.log('=======ERROR END =======');
1807
1923
  //translate.temp_executeFinishNumber++; //记录执行完的次数
1924
+
1808
1925
  return;
1809
1926
  }
1810
1927
 
@@ -1868,12 +1985,49 @@ var translate = {
1868
1985
  task.execute(); //执行渲染任务
1869
1986
  //translate.temp_executeFinishNumber++; //记录执行完的次数
1870
1987
 
1988
+ translate.translateRequest[uuid][lang].result = 1;
1989
+ translate.translateRequest[uuid][lang].executeFinish = 1; //1是执行完毕
1990
+ translate.translateRequest[uuid][lang].stoptime = Math.floor(Date.now() / 1000);
1991
+ translate.waitingExecute.isAllExecuteFinish();
1992
+ }, function(xhr){
1993
+ translate.translateRequest[uuid][lang].executeFinish = 1; //1是执行完毕
1994
+ translate.translateRequest[uuid][lang].stoptime = Math.floor(Date.now() / 1000);
1995
+ translate.translateRequest[uuid][lang].result = 3;
1996
+ translate.waitingExecute.isAllExecuteFinish();
1871
1997
  });
1872
1998
  /*** 翻译end ***/
1873
-
1874
-
1875
1999
  }
1876
2000
  },
2001
+
2002
+ /**
2003
+ * 翻译请求记录
2004
+ * 一维:key:uuid,也就是execute每次执行都会创建一个翻译队列,这个是翻译队列的唯一标识。 这个uuid跟 nodeQueue 的uuid是一样的
2005
+ * value:对象
2006
+ * 二维: 对象,包含:
2007
+ * from 存放的是要翻译的源语种,比如要讲简体中文翻译为英文,这里存放的就是 chinese_simplified
2008
+ * state 是否执行完毕,0是执行中, 1是执行完毕(不管是失败还是成功) 而且执行完毕是指ajax请求获得响应,并且dom渲染完成之后才算完毕。当然如果ajax接口失败那也是直接算完毕
2009
+ * addtime 这条数据加入到本数组的时间,也就是进行ajax请求开始那一刻的时间,10位时间戳
2010
+ * stoptime 执行完毕的时间,也就是state转为2那一刻的时间
2011
+ * result 执行结果, 0 是还没执行完,等待执行完, > 0 是执行完了有结果了,
2012
+ * 1 是执行成功
2013
+ * 2 是接口有响应,也是200响应,但是接口响应的结果返回了错误,也就是返回了 {result:0, info:'...'}
2014
+ * 3 是接口不是200响应码
2015
+ *
2016
+ */
2017
+ translateRequest:{
2018
+ /*
2019
+ uuid:[
2020
+ 'chinese_simplified':{
2021
+ executeFinish:0,
2022
+ addtime:150001111,
2023
+ stoptime:150001111,
2024
+ result:0
2025
+ },
2026
+ ...
2027
+ ]
2028
+ */
2029
+ },
2030
+
1877
2031
  /*
1878
2032
  将已成功翻译并渲染的node节点进行缓存记录
1879
2033
  key: node节点的唯一标识符,通过 nodeuuid.uuid() 生成
@@ -3873,7 +4027,7 @@ var translate = {
3873
4027
  translate.selectLanguageTag
3874
4028
  translate.execute(); //执行翻译
3875
4029
  }
3876
- });
4030
+ }, null);
3877
4031
  },
3878
4032
 
3879
4033
  util:{
@@ -4363,7 +4517,7 @@ var translate = {
4363
4517
  },
4364
4518
 
4365
4519
  language:{
4366
- json:[{"id":"ukrainian","name":"УкраїнськаName","serviceId":"uk"},{"id":"norwegian","name":"Norge","serviceId":"no"},{"id":"welsh","name":"color name","serviceId":"cy"},{"id":"dutch","name":"nederlands","serviceId":"nl"},{"id":"japanese","name":"日本語","serviceId":"ja"},{"id":"filipino","name":"Pilipino","serviceId":"fil"},{"id":"english","name":"English","serviceId":"en"},{"id":"lao","name":"ກະຣຸນາ","serviceId":"lo"},{"id":"telugu","name":"తెలుగుQFontDatabase","serviceId":"te"},{"id":"romanian","name":"Română","serviceId":"ro"},{"id":"nepali","name":"नेपालीName","serviceId":"ne"},{"id":"french","name":"Français","serviceId":"fr"},{"id":"haitian_creole","name":"Kreyòl ayisyen","serviceId":"ht"},{"id":"czech","name":"český","serviceId":"cs"},{"id":"swedish","name":"Svenska","serviceId":"sv"},{"id":"russian","name":"Русский язык","serviceId":"ru"},{"id":"malagasy","name":"Malagasy","serviceId":"mg"},{"id":"burmese","name":"ဗာရမ်","serviceId":"my"},{"id":"pashto","name":"پښتوName","serviceId":"ps"},{"id":"thai","name":"คนไทย","serviceId":"th"},{"id":"armenian","name":"Արմենյան","serviceId":"hy"},{"id":"chinese_simplified","name":"简体中文","serviceId":"zh-CHS"},{"id":"persian","name":"Persian","serviceId":"fa"},{"id":"chinese_traditional","name":"繁體中文","serviceId":"zh-CHT"},{"id":"kurdish","name":"Kurdî","serviceId":"ku"},{"id":"turkish","name":"Türkçe","serviceId":"tr"},{"id":"hindi","name":"हिन्दी","serviceId":"hi"},{"id":"bulgarian","name":"български","serviceId":"bg"},{"id":"malay","name":"Malay","serviceId":"ms"},{"id":"swahili","name":"Kiswahili","serviceId":"sw"},{"id":"oriya","name":"ଓଡିଆ","serviceId":"or"},{"id":"icelandic","name":"ÍslandName","serviceId":"is"},{"id":"irish","name":"Íris","serviceId":"ga"},{"id":"khmer","name":"ខ្មែរKCharselect unicode block name","serviceId":"km"},{"id":"gujarati","name":"ગુજરાતી","serviceId":"gu"},{"id":"slovak","name":"Slovenská","serviceId":"sk"},{"id":"kannada","name":"ಕನ್ನಡ್Name","serviceId":"kn"},{"id":"hebrew","name":"היברית","serviceId":"he"},{"id":"hungarian","name":"magyar","serviceId":"hu"},{"id":"marathi","name":"मराठीName","serviceId":"mr"},{"id":"tamil","name":"தாமில்","serviceId":"ta"},{"id":"estonian","name":"eesti keel","serviceId":"et"},{"id":"malayalam","name":"മലമാലം","serviceId":"ml"},{"id":"inuktitut","name":"ᐃᓄᒃᑎᑐᑦ","serviceId":"iu"},{"id":"arabic","name":"بالعربية","serviceId":"ar"},{"id":"deutsch","name":"Deutsch","serviceId":"de"},{"id":"slovene","name":"slovenščina","serviceId":"sl"},{"id":"bengali","name":"বেঙ্গালী","serviceId":"bn"},{"id":"urdu","name":"اوردو","serviceId":"ur"},{"id":"azerbaijani","name":"azerbaijani","serviceId":"az"},{"id":"portuguese","name":"português","serviceId":"pt"},{"id":"samoan","name":"lifiava","serviceId":"sm"},{"id":"afrikaans","name":"afrikaans","serviceId":"af"},{"id":"tongan","name":"汤加语","serviceId":"to"},{"id":"greek","name":"ελληνικά","serviceId":"el"},{"id":"indonesian","name":"IndonesiaName","serviceId":"id"},{"id":"spanish","name":"Español","serviceId":"es"},{"id":"danish","name":"dansk","serviceId":"da"},{"id":"amharic","name":"amharic","serviceId":"am"},{"id":"punjabi","name":"ਪੰਜਾਬੀName","serviceId":"pa"},{"id":"albanian","name":"albanian","serviceId":"sq"},{"id":"lithuanian","name":"Lietuva","serviceId":"lt"},{"id":"italian","name":"italiano","serviceId":"it"},{"id":"vietnamese","name":"Tiếng Việt","serviceId":"vi"},{"id":"korean","name":"한국어","serviceId":"ko"},{"id":"maltese","name":"Malti","serviceId":"mt"},{"id":"finnish","name":"suomi","serviceId":"fi"},{"id":"catalan","name":"català","serviceId":"ca"},{"id":"croatian","name":"hrvatski","serviceId":"hr"},{"id":"bosnian","name":"bosnian","serviceId":"bs-Latn"},{"id":"polish","name":"Polski","serviceId":"pl"},{"id":"latvian","name":"latviešu","serviceId":"lv"},{"id":"maori","name":"Maori","serviceId":"mi"}],
4520
+ json:[{"id":"ukrainian","name":"Україна","serviceId":"uk"},{"id":"norwegian","name":"Norge","serviceId":"no"},{"id":"welsh","name":"Iaith Weleg","serviceId":"cy"},{"id":"dutch","name":"nederlands","serviceId":"nl"},{"id":"japanese","name":"日本語","serviceId":"ja"},{"id":"filipino","name":"Pilipino","serviceId":"fil"},{"id":"english","name":"English","serviceId":"en"},{"id":"lao","name":"ກະຣຸນາ","serviceId":"lo"},{"id":"telugu","name":"తెలుగుName","serviceId":"te"},{"id":"romanian","name":"Română","serviceId":"ro"},{"id":"nepali","name":"नेपालीName","serviceId":"ne"},{"id":"french","name":"Français","serviceId":"fr"},{"id":"haitian_creole","name":"Kreyòl ayisyen","serviceId":"ht"},{"id":"czech","name":"český","serviceId":"cs"},{"id":"swedish","name":"Svenska","serviceId":"sv"},{"id":"russian","name":"Русский язык","serviceId":"ru"},{"id":"malagasy","name":"Malagasy","serviceId":"mg"},{"id":"burmese","name":"ဗာရမ်","serviceId":"my"},{"id":"pashto","name":"پښتوName","serviceId":"ps"},{"id":"thai","name":"คนไทย","serviceId":"th"},{"id":"armenian","name":"Արմենյան","serviceId":"hy"},{"id":"chinese_simplified","name":"简体中文","serviceId":"zh-CHS"},{"id":"persian","name":"Persian","serviceId":"fa"},{"id":"chinese_traditional","name":"繁體中文","serviceId":"zh-CHT"},{"id":"kurdish","name":"Kurdî","serviceId":"ku"},{"id":"turkish","name":"Türkçe","serviceId":"tr"},{"id":"hindi","name":"हिन्दी","serviceId":"hi"},{"id":"bulgarian","name":"български","serviceId":"bg"},{"id":"malay","name":"Malay","serviceId":"ms"},{"id":"swahili","name":"Kiswahili","serviceId":"sw"},{"id":"oriya","name":"ଓଡିଆ","serviceId":"or"},{"id":"icelandic","name":"ÍslandName","serviceId":"is"},{"id":"irish","name":"Íris","serviceId":"ga"},{"id":"khmer","name":"ភាសា​ខ្មែរName","serviceId":"km"},{"id":"gujarati","name":"ગુજરાતી","serviceId":"gu"},{"id":"slovak","name":"Slovenská","serviceId":"sk"},{"id":"kannada","name":"ಕನ್ನಡ್Name","serviceId":"kn"},{"id":"hebrew","name":"היברית","serviceId":"he"},{"id":"hungarian","name":"magyar","serviceId":"hu"},{"id":"marathi","name":"मराठीName","serviceId":"mr"},{"id":"tamil","name":"தாமில்","serviceId":"ta"},{"id":"estonian","name":"eesti keel","serviceId":"et"},{"id":"malayalam","name":"മലമാലം","serviceId":"ml"},{"id":"inuktitut","name":"ᐃᓄᒃᑎᑐᑦ","serviceId":"iu"},{"id":"arabic","name":"بالعربية","serviceId":"ar"},{"id":"deutsch","name":"Deutsch","serviceId":"de"},{"id":"slovene","name":"slovenščina","serviceId":"sl"},{"id":"bengali","name":"বেঙ্গালী","serviceId":"bn"},{"id":"urdu","name":"اوردو","serviceId":"ur"},{"id":"azerbaijani","name":"azerbaijani","serviceId":"az"},{"id":"portuguese","name":"português","serviceId":"pt"},{"id":"samoan","name":"lifiava","serviceId":"sm"},{"id":"afrikaans","name":"afrikaans","serviceId":"af"},{"id":"tongan","name":"汤加语","serviceId":"to"},{"id":"greek","name":"ελληνικά","serviceId":"el"},{"id":"indonesian","name":"IndonesiaName","serviceId":"id"},{"id":"spanish","name":"Español","serviceId":"es"},{"id":"danish","name":"dansk","serviceId":"da"},{"id":"amharic","name":"amharic","serviceId":"am"},{"id":"punjabi","name":"ਪੰਜਾਬੀName","serviceId":"pa"},{"id":"albanian","name":"albanian","serviceId":"sq"},{"id":"lithuanian","name":"Lietuva","serviceId":"lt"},{"id":"italian","name":"italiano","serviceId":"it"},{"id":"vietnamese","name":"Tiếng Việt","serviceId":"vi"},{"id":"korean","name":"한국어","serviceId":"ko"},{"id":"maltese","name":"Malti","serviceId":"mt"},{"id":"finnish","name":"suomi","serviceId":"fi"},{"id":"catalan","name":"català","serviceId":"ca"},{"id":"croatian","name":"hrvatski","serviceId":"hr"},{"id":"bosnian","name":"bosnian","serviceId":"bs-Latn"},{"id":"polish","name":"Polski","serviceId":"pl"},{"id":"latvian","name":"latviešu","serviceId":"lv"},{"id":"maori","name":"Maori","serviceId":"mi"}],
4367
4521
  /*
4368
4522
  获取map形式的语言列表
4369
4523
  key为 translate.service 的 name
@@ -4387,7 +4541,7 @@ var translate = {
4387
4541
  * @param data 请求的参数数据
4388
4542
  * @param func 请求完成的回调,传入如 function(data){ console.log(data); }
4389
4543
  */
4390
- translate:function(path, data, func){
4544
+ translate:function(path, data, func, abnormalFunc){
4391
4545
  var textArray = JSON.parse(decodeURIComponent(data.text));
4392
4546
  let translateTextArray = translate.util.split(textArray, 48000);
4393
4547
  //console.log(translateTextArray);
@@ -4462,10 +4616,7 @@ var translate = {
4462
4616
  }
4463
4617
 
4464
4618
  func(d);
4465
- }, 'post', true, {'Authorization':'Bearer '+auth, 'Content-Type':'application/json'}, function(xhr){
4466
- console.log('---------error--------');
4467
- console.log('edge translate service error, http code : '+xhr.status + ', response text : '+xhr.responseText);
4468
- }, true);
4619
+ }, 'post', true, {'Authorization':'Bearer '+auth, 'Content-Type':'application/json'}, abnormalFunc, true);
4469
4620
 
4470
4621
 
4471
4622
  }
@@ -4762,8 +4913,9 @@ var translate = {
4762
4913
  * }
4763
4914
  *
4764
4915
  * @param func 请求完成的回调,传入如 function(data){ console.log(data); }
4916
+ * @param abnormalFunc 响应异常所执行的方法,响应码不是200就会执行这个方法 ,传入如 function(xhr){} 另外这里的 xhr 会额外有个参数 xhr.requestURL 返回当前请求失败的url
4765
4917
  */
4766
- post:function(path, data, func){
4918
+ post:function(path, data, func, abnormalFunc){
4767
4919
  var headers = {
4768
4920
  'content-type':'application/x-www-form-urlencoded',
4769
4921
  };
@@ -4779,7 +4931,7 @@ var translate = {
4779
4931
  //if(url.indexOf('edge') > -1 && path == translate.request.api.translate){
4780
4932
  if(translate.service.name == 'client.edge'){
4781
4933
  if(path == translate.request.api.translate){
4782
- translate.service.edge.translate(path, data, func);
4934
+ translate.service.edge.translate(path, data, func, abnormalFunc);
4783
4935
  return;
4784
4936
  }
4785
4937
  if(path == translate.request.api.language){
@@ -4795,7 +4947,7 @@ var translate = {
4795
4947
  }
4796
4948
  // ------- edge end --------
4797
4949
 
4798
- this.send(path, data, func, 'post', true, headers, null, true);
4950
+ this.send(path, data, func, 'post', true, headers, abnormalFunc, true);
4799
4951
  },
4800
4952
  /**
4801
4953
  * 发送请求
@@ -5014,7 +5166,7 @@ var translate = {
5014
5166
  }
5015
5167
 
5016
5168
  func(data);
5017
- });
5169
+ }, null);
5018
5170
  },
5019
5171
  listener:{
5020
5172
  minIntervalTime:800, // 两次触发的最小间隔时间,单位是毫秒,这里默认是800毫秒。最小填写时间为 200毫秒
@@ -5365,7 +5517,7 @@ var translate = {
5365
5517
  curTooltipEle.style.top =selectionY+20+"px";
5366
5518
  curTooltipEle.style.left = selectionX+50+"px" ;
5367
5519
  curTooltipEle.style.display = "";
5368
- });
5520
+ }, null);
5369
5521
  },
5370
5522
  start:function () {
5371
5523
  //新建一个tooltip元素节点用于显示翻译
@@ -5536,6 +5688,22 @@ var nodeuuid = {
5536
5688
  }
5537
5689
  return uuid;
5538
5690
  },
5691
+ /*
5692
+ 开启远程调试能力,当你使用中遇到问题,需要向开源作者求助时,可以在你项目中主动调用这个方法,也就是 translate.enableRemoteDebug(); 即可启动远程调试能力
5693
+ 开源项目作者就可以对你当前出错的页面进行远程调试排查问题所在。当然前提是你的页面要保持别关闭。
5694
+
5695
+ 这个能力是通过开源项目 https://github.com/HuolalaTech/page-spy-web 来实现的
5696
+
5697
+ */
5698
+ enableRemoteDebug:function(){
5699
+
5700
+ /*
5701
+
5702
+ 待同事实现
5703
+ */
5704
+
5705
+ }
5706
+
5539
5707
 
5540
5708
  }
5541
5709
  console.log('------ translate.js ------\nTwo lines of js html automatic translation, page without change, no language configuration file, no API Key, SEO friendly! Open warehouse : https://github.com/xnx3/translate \n两行js实现html全自动翻译。 无需改动页面、无语言配置文件、无API Key、对SEO友好!完全开源,代码仓库:https://gitee.com/mail_osc/translate');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "i18n-jsautotranslate",
3
- "version": "3.12.7",
3
+ "version": "3.12.11",
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": {