torchv-translate 1.0.3 → 1.0.4
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.
- package/package.json +1 -1
- package/translate.js/translate.js +352 -191
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "torchv-translate",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
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
|
"exports": {
|
|
@@ -3233,7 +3233,7 @@ var translate = {
|
|
|
3233
3233
|
if (!fanyiLangs.hasOwnProperty(lang_index)) {
|
|
3234
3234
|
continue;
|
|
3235
3235
|
}
|
|
3236
|
-
|
|
3236
|
+
let lang = fanyiLangs[lang_index];
|
|
3237
3237
|
if(typeof(lang) != 'string'){
|
|
3238
3238
|
continue;
|
|
3239
3239
|
}
|
|
@@ -3293,151 +3293,186 @@ var translate = {
|
|
|
3293
3293
|
if(typeof(translate.request.data[uuid].list[lang]) === 'undefined'){
|
|
3294
3294
|
translate.request.data[uuid].list[lang] = {};
|
|
3295
3295
|
}
|
|
3296
|
-
translate.request.data[uuid].list[lang][translate.to] = {
|
|
3297
|
-
texts: translateTextArray[lang],
|
|
3298
|
-
nodes: translateTextNodes,
|
|
3299
|
-
};
|
|
3300
|
-
|
|
3301
|
-
|
|
3302
|
-
/*** 翻译开始 ***/
|
|
3303
|
-
var url = translate.request.api.translate;
|
|
3304
|
-
|
|
3305
|
-
|
|
3306
|
-
|
|
3307
|
-
|
|
3308
|
-
|
|
3309
|
-
|
|
3310
|
-
|
|
3311
|
-
translate.
|
|
3312
|
-
|
|
3313
|
-
|
|
3314
|
-
|
|
3315
|
-
|
|
3316
|
-
|
|
3317
|
-
|
|
3318
|
-
|
|
3319
|
-
|
|
3320
|
-
|
|
3321
|
-
|
|
3322
|
-
|
|
3323
|
-
|
|
3324
|
-
|
|
3325
|
-
|
|
3326
|
-
|
|
3327
|
-
|
|
3328
|
-
|
|
3329
|
-
}
|
|
3330
|
-
|
|
3331
|
-
|
|
3332
|
-
|
|
3333
|
-
|
|
3334
|
-
|
|
3335
|
-
|
|
3336
|
-
|
|
3337
|
-
|
|
3338
|
-
|
|
3339
|
-
|
|
3340
|
-
|
|
3341
|
-
|
|
3342
|
-
|
|
3343
|
-
|
|
3344
|
-
|
|
3345
|
-
|
|
3346
|
-
|
|
3347
|
-
|
|
3348
|
-
|
|
3349
|
-
|
|
3350
|
-
|
|
3351
|
-
|
|
3352
|
-
|
|
3353
|
-
|
|
3354
|
-
|
|
3355
|
-
|
|
3356
|
-
|
|
3357
|
-
|
|
3358
|
-
|
|
3359
|
-
|
|
3360
|
-
|
|
3361
|
-
|
|
3362
|
-
|
|
3363
|
-
|
|
3364
|
-
|
|
3365
|
-
|
|
3366
|
-
|
|
3367
|
-
|
|
3368
|
-
|
|
3369
|
-
//
|
|
3370
|
-
//
|
|
3371
|
-
|
|
3372
|
-
|
|
3373
|
-
|
|
3374
|
-
|
|
3375
|
-
|
|
3376
|
-
|
|
3377
|
-
|
|
3378
|
-
|
|
3379
|
-
|
|
3380
|
-
|
|
3381
|
-
|
|
3382
|
-
|
|
3383
|
-
|
|
3384
|
-
|
|
3385
|
-
|
|
3386
|
-
|
|
3387
|
-
|
|
3388
|
-
|
|
3389
|
-
|
|
3390
|
-
|
|
3391
|
-
|
|
3392
|
-
|
|
3393
|
-
|
|
3394
|
-
//
|
|
3395
|
-
|
|
3396
|
-
|
|
3397
|
-
|
|
3398
|
-
|
|
3399
|
-
|
|
3400
|
-
|
|
3401
|
-
|
|
3402
|
-
|
|
3403
|
-
|
|
3404
|
-
|
|
3405
|
-
|
|
3406
|
-
|
|
3407
|
-
|
|
3408
|
-
|
|
3409
|
-
|
|
3410
|
-
|
|
3411
|
-
|
|
3412
|
-
|
|
3413
|
-
|
|
3414
|
-
|
|
3415
|
-
|
|
3416
|
-
|
|
3417
|
-
|
|
3418
|
-
|
|
3419
|
-
|
|
3420
|
-
|
|
3421
|
-
|
|
3422
|
-
|
|
3423
|
-
|
|
3424
|
-
|
|
3425
|
-
|
|
3426
|
-
|
|
3427
|
-
|
|
3428
|
-
|
|
3429
|
-
|
|
3430
|
-
|
|
3431
|
-
|
|
3432
|
-
|
|
3433
|
-
|
|
3434
|
-
|
|
3435
|
-
|
|
3436
|
-
|
|
3437
|
-
|
|
3438
|
-
|
|
3439
|
-
|
|
3440
|
-
|
|
3296
|
+
translate.request.data[uuid].list[lang][translate.to] = {
|
|
3297
|
+
texts: translateTextArray[lang],
|
|
3298
|
+
nodes: translateTextNodes,
|
|
3299
|
+
};
|
|
3300
|
+
|
|
3301
|
+
|
|
3302
|
+
/*** 翻译开始 ***/
|
|
3303
|
+
var url = translate.request.api.translate;
|
|
3304
|
+
//按配置拆分文本数组,避免一次请求过大导致超时
|
|
3305
|
+
var splitTextList = translate.request.splitTranslateTextArray(translateTextArray[lang]);
|
|
3306
|
+
if(typeof(splitTextList) == 'undefined' || splitTextList == null || splitTextList.length < 1){
|
|
3307
|
+
splitTextList = [translateTextArray[lang]];
|
|
3308
|
+
}
|
|
3309
|
+
|
|
3310
|
+
translate.translateRequest[uuid][lang].requestTotal = splitTextList.length;
|
|
3311
|
+
translate.translateRequest[uuid][lang].requestFinish = 0;
|
|
3312
|
+
translate.translateRequest[uuid][lang].requestError = 0;
|
|
3313
|
+
translate.translateRequest[uuid][lang].requestErrorInfo = '';
|
|
3314
|
+
translate.translateRequest[uuid][lang].requestErrorResult = 0;
|
|
3315
|
+
|
|
3316
|
+
var splitHashIndex = 0;
|
|
3317
|
+
var splitRequestFinish = function(result, info, errorResult){
|
|
3318
|
+
if(typeof(translate.translateRequest[uuid]) != 'object' || typeof(translate.translateRequest[uuid][lang]) != 'object'){
|
|
3319
|
+
return;
|
|
3320
|
+
}
|
|
3321
|
+
var requestItem = translate.translateRequest[uuid][lang];
|
|
3322
|
+
requestItem.requestFinish++;
|
|
3323
|
+
if(result === 0){
|
|
3324
|
+
requestItem.requestError = 1;
|
|
3325
|
+
if(typeof(info) === 'string' && info.length > 0){
|
|
3326
|
+
if(typeof(requestItem.requestErrorInfo) !== 'string' || requestItem.requestErrorInfo.length < 1){
|
|
3327
|
+
requestItem.requestErrorInfo = info;
|
|
3328
|
+
}
|
|
3329
|
+
}
|
|
3330
|
+
if(typeof(errorResult) === 'number' && errorResult > 0){
|
|
3331
|
+
if(typeof(requestItem.requestErrorResult) !== 'number' || requestItem.requestErrorResult < errorResult){
|
|
3332
|
+
requestItem.requestErrorResult = errorResult;
|
|
3333
|
+
}
|
|
3334
|
+
}
|
|
3335
|
+
}
|
|
3336
|
+
if(requestItem.requestFinish >= requestItem.requestTotal){
|
|
3337
|
+
if(requestItem.requestError === 1){
|
|
3338
|
+
requestItem.result = requestItem.requestErrorResult > 0 ? requestItem.requestErrorResult : 2;
|
|
3339
|
+
}else{
|
|
3340
|
+
requestItem.result = 1;
|
|
3341
|
+
}
|
|
3342
|
+
requestItem.executeFinish = 1; //1是执行完毕
|
|
3343
|
+
requestItem.stoptime = Math.floor(Date.now() / 1000);
|
|
3344
|
+
var resultFlag = requestItem.requestError === 1 ? 0 : 1;
|
|
3345
|
+
var infoText = requestItem.requestError === 1 ? (requestItem.requestErrorInfo || '') : '';
|
|
3346
|
+
setTimeout(function(){
|
|
3347
|
+
translate.waitingExecute.isAllExecuteFinish(uuid, lang, translate.to, resultFlag, infoText);
|
|
3348
|
+
},5);
|
|
3349
|
+
}
|
|
3350
|
+
};
|
|
3351
|
+
|
|
3352
|
+
for(var splitIndex = 0; splitIndex < splitTextList.length; splitIndex++){
|
|
3353
|
+
let splitTexts = splitTextList[splitIndex];
|
|
3354
|
+
if(typeof(splitTexts) == 'undefined' || splitTexts == null || splitTexts.length < 1){
|
|
3355
|
+
splitRequestFinish(1, '', 0);
|
|
3356
|
+
continue;
|
|
3357
|
+
}
|
|
3358
|
+
let splitHashes = translateHashArray[lang].slice(splitHashIndex, splitHashIndex + splitTexts.length);
|
|
3359
|
+
splitHashIndex = splitHashIndex + splitTexts.length;
|
|
3360
|
+
|
|
3361
|
+
let data = {
|
|
3362
|
+
from:lang,
|
|
3363
|
+
to:translate.to,
|
|
3364
|
+
//lowercase:translate.whole.isEnableAll? '0':'1', //首字母大写
|
|
3365
|
+
//text:JSON.stringify(translateTextArray[lang])
|
|
3366
|
+
text:encodeURIComponent(JSON.stringify(splitTexts))
|
|
3367
|
+
};
|
|
3368
|
+
translate.request.post(url, data, function(responseData, requestData){
|
|
3369
|
+
//console.log(data);
|
|
3370
|
+
//console.log(translateTextArray[data.from]);
|
|
3371
|
+
|
|
3372
|
+
//针对 giteeai 增加了账户余额、账户是否激活的拍的判定,所以增加了 401 这个参数,凡是账户异常的,参数值是 401~499 之间。所以只要不是1都是失败
|
|
3373
|
+
if(responseData.result != 1){
|
|
3374
|
+
splitRequestFinish(0, responseData.info, 2);
|
|
3375
|
+
|
|
3376
|
+
translate.log('=======ERROR START=======');
|
|
3377
|
+
translate.log(translateTextArray[requestData.from]);
|
|
3378
|
+
//console.log(encodeURIComponent(JSON.stringify(translateTextArray[data.from])));
|
|
3379
|
+
translate.log('response : '+responseData.info);
|
|
3380
|
+
translate.log('=======ERROR END =======');
|
|
3381
|
+
//translate.temp_executeFinishNumber++; //记录执行完的次数
|
|
3382
|
+
return;
|
|
3383
|
+
}
|
|
3384
|
+
|
|
3385
|
+
if(typeof(translate.nodeQueue[uuid]) == 'undefined'){
|
|
3386
|
+
translate.log('提示:你很可能多次引入了 translate.js 所以造成了翻译本身的数据错乱,这只是个提示,它还是会给你正常翻译的,但是你最好不要重复引入太多次 translate.js ,正常情况下只需要引入一次 translate.js 就可以了。太多的话很可能会导致你页面卡顿');
|
|
3387
|
+
splitRequestFinish(0, 'translate.nodeQueue not find', 2);
|
|
3388
|
+
return;
|
|
3389
|
+
}
|
|
3390
|
+
|
|
3391
|
+
//console.log('-----待翻译3:----');
|
|
3392
|
+
//console.log(translate.nodeQueue);
|
|
3393
|
+
|
|
3394
|
+
//console.log('response:'+uuid);
|
|
3395
|
+
let task = new translate.renderTask();
|
|
3396
|
+
//遍历 translateHashArray
|
|
3397
|
+
var loopLength = responseData.text.length;
|
|
3398
|
+
if(loopLength > splitHashes.length){
|
|
3399
|
+
loopLength = splitHashes.length;
|
|
3400
|
+
}
|
|
3401
|
+
for(var i=0; i<loopLength; i++){
|
|
3402
|
+
//翻译前的语种,如 english
|
|
3403
|
+
var lang = responseData.from;
|
|
3404
|
+
//翻译后的内容
|
|
3405
|
+
var text = responseData.text[i];
|
|
3406
|
+
//如果text为null,那么这个可能是一次翻译字数太多,为了保持数组长度,拼上的null
|
|
3407
|
+
if(text == null){
|
|
3408
|
+
continue;
|
|
3409
|
+
}
|
|
3410
|
+
|
|
3411
|
+
// v3.0.3 添加,避免像是 JavaScript 被错误翻译为 “JavaScript的” ,然后出现了多个句子中都出现了Javascript时,会出现翻译后文本重复的问题
|
|
3412
|
+
// 这里就是验证一下,翻译后的文本,是否会完全包含翻以前的文本,如果包含了,那么强制将翻译后的文本赋予翻译前的原始文本(也就是不被翻译)
|
|
3413
|
+
if(text.toLowerCase().indexOf(splitTexts[i].toLowerCase()) > -1){
|
|
3414
|
+
//发现了,那么强制赋予翻以前内容
|
|
3415
|
+
text = splitTexts[i];
|
|
3416
|
+
}
|
|
3417
|
+
|
|
3418
|
+
|
|
3419
|
+
//翻译前的hash对应下标
|
|
3420
|
+
var hash = splitHashes[i];
|
|
3421
|
+
var cacheHash = translate.nodeQueue[uuid]['list'][lang][hash]['cacheHash'];
|
|
3422
|
+
|
|
3423
|
+
|
|
3424
|
+
|
|
3425
|
+
//取原始的词,还未经过翻译的,需要进行翻译的词
|
|
3426
|
+
var originalWord = '';
|
|
3427
|
+
try{
|
|
3428
|
+
originalWord = translate.nodeQueue[uuid]['list'][lang][hash]['original'];
|
|
3429
|
+
//console.log('bef:'+translate.nodeQueue[uuid]['list'][lang][hash]['beforeText']);
|
|
3430
|
+
}catch(e){
|
|
3431
|
+
translate.log('uuid:'+uuid+', originalWord:'+originalWord+', lang:'+lang+', hash:'+hash+', text:'+text+', queue:'+translate.nodeQueue[uuid]);
|
|
3432
|
+
translate.log(e);
|
|
3433
|
+
continue;
|
|
3434
|
+
}
|
|
3435
|
+
|
|
3436
|
+
//for(var index = 0; index < translate.nodeQueue[lang][hash].length; index++){
|
|
3437
|
+
for(var node_index = 0; node_index < translate.nodeQueue[uuid]['list'][lang][hash]['nodes'].length; node_index++){
|
|
3438
|
+
//translate.nodeQueue[lang][hash]['nodes'][node_index].nodeValue = translate.nodeQueue[lang][hash]['nodes'][node_index].nodeValue.replace(new RegExp(originalWord,'g'), text);
|
|
3439
|
+
//加入任务
|
|
3440
|
+
task.add(translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][node_index]['node'], originalWord, translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][node_index]['beforeText']+text+translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][node_index]['afterText'], translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][node_index]['attribute']);
|
|
3441
|
+
}
|
|
3442
|
+
//}
|
|
3443
|
+
/*
|
|
3444
|
+
for(var index = 0; index < translate.nodeQueue[data.from][hash].length; index++){
|
|
3445
|
+
translate.nodeQueue[data.from][hash][index].nodeValue = text;
|
|
3446
|
+
}
|
|
3447
|
+
*/
|
|
3448
|
+
|
|
3449
|
+
//将翻译结果以 key:hash value翻译结果的形式缓存
|
|
3450
|
+
translate.storage.set('hash_'+responseData.to+'_'+cacheHash,text);
|
|
3451
|
+
//如果离线翻译启用了全部提取,那么还要存入离线翻译指定存储
|
|
3452
|
+
if(translate.offline.fullExtract.isUse){
|
|
3453
|
+
translate.offline.fullExtract.set(hash, originalWord, responseData.to, text);
|
|
3454
|
+
}
|
|
3455
|
+
}
|
|
3456
|
+
task.execute(); //执行渲染任务
|
|
3457
|
+
//translate.temp_executeFinishNumber++; //记录执行完的次数
|
|
3458
|
+
|
|
3459
|
+
splitRequestFinish(1, '', 0);
|
|
3460
|
+
}, function(xhr){
|
|
3461
|
+
var info = '';
|
|
3462
|
+
if(typeof(xhr.status) != 'undefined'){
|
|
3463
|
+
if(xhr.status < 1){
|
|
3464
|
+
info = 'Network connection failed. url: '+xhr.requestURL;
|
|
3465
|
+
}else{
|
|
3466
|
+
info = 'HTTP response code : '+xhr.status+', url: '+xhr.requestURL;
|
|
3467
|
+
}
|
|
3468
|
+
}else{
|
|
3469
|
+
info = 'Network connection failed. url: '+xhr.requestURL;
|
|
3470
|
+
}
|
|
3471
|
+
splitRequestFinish(0, info, 3);
|
|
3472
|
+
});
|
|
3473
|
+
}
|
|
3474
|
+
/*** 翻译end ***/
|
|
3475
|
+
}
|
|
3441
3476
|
|
|
3442
3477
|
//钩子
|
|
3443
3478
|
translate.lifecycle.execute.finally_Trigger({
|
|
@@ -8149,7 +8184,7 @@ var translate = {
|
|
|
8149
8184
|
*/
|
|
8150
8185
|
data:{},
|
|
8151
8186
|
//相关API接口方面
|
|
8152
|
-
api:{
|
|
8187
|
+
api:{
|
|
8153
8188
|
/**
|
|
8154
8189
|
* 翻译接口请求的域名主机 host
|
|
8155
8190
|
* 格式注意前面要带上协议如 https:// 域名后要加 /
|
|
@@ -8163,9 +8198,87 @@ var translate = {
|
|
|
8163
8198
|
translate:'translate.json', //翻译接口
|
|
8164
8199
|
ip:'ip.json', //根据用户当前ip获取其所在地的语种
|
|
8165
8200
|
connectTest:'connectTest.json', //用于 translate.js 多节点翻译自动检测网络连通情况
|
|
8166
|
-
init:'init.json', //获取最新版本号,跟当前版本进行比对,用于提醒版本升级等使用
|
|
8167
|
-
|
|
8168
|
-
},
|
|
8201
|
+
init:'init.json', //获取最新版本号,跟当前版本进行比对,用于提醒版本升级等使用
|
|
8202
|
+
|
|
8203
|
+
},
|
|
8204
|
+
/*
|
|
8205
|
+
translate.json 接口单次请求的文本大小控制
|
|
8206
|
+
size: 按 JSON.stringify(array) 的长度进行拆分
|
|
8207
|
+
maxSize: 拆分后的数组最大元素数量,0则不限制
|
|
8208
|
+
*/
|
|
8209
|
+
translateTextSplit:{
|
|
8210
|
+
size:20000,
|
|
8211
|
+
maxSize:900,
|
|
8212
|
+
//单条文本达到该长度后单独成组,避免与其它文本拼接,0则使用 size/2
|
|
8213
|
+
singleTextMinSize:0
|
|
8214
|
+
},
|
|
8215
|
+
/*
|
|
8216
|
+
将翻译文本数组拆分为多个请求,避免一次请求过大导致超时
|
|
8217
|
+
注意:不会拆分单条文本,避免破坏段落/语义
|
|
8218
|
+
*/
|
|
8219
|
+
splitTranslateTextArray:function(textArray){
|
|
8220
|
+
if(typeof(textArray) == 'undefined' || textArray == null){
|
|
8221
|
+
return [];
|
|
8222
|
+
}
|
|
8223
|
+
if(typeof(textArray.length) == 'undefined'){
|
|
8224
|
+
return [textArray];
|
|
8225
|
+
}
|
|
8226
|
+
var size = translate.request.translateTextSplit.size;
|
|
8227
|
+
var maxSize = translate.request.translateTextSplit.maxSize;
|
|
8228
|
+
var singleMinSize = translate.request.translateTextSplit.singleTextMinSize;
|
|
8229
|
+
if(typeof(size) !== 'number' || size <= 0){
|
|
8230
|
+
return [textArray];
|
|
8231
|
+
}
|
|
8232
|
+
if(typeof(singleMinSize) !== 'number' || singleMinSize <= 0){
|
|
8233
|
+
singleMinSize = Math.floor(size / 2);
|
|
8234
|
+
}
|
|
8235
|
+
|
|
8236
|
+
var list = [];
|
|
8237
|
+
var current = [];
|
|
8238
|
+
var currentSize = 2; // "[]"
|
|
8239
|
+
var pushCurrent = function(){
|
|
8240
|
+
if(current.length > 0){
|
|
8241
|
+
list.push(current);
|
|
8242
|
+
current = [];
|
|
8243
|
+
currentSize = 2;
|
|
8244
|
+
}
|
|
8245
|
+
};
|
|
8246
|
+
|
|
8247
|
+
for(var i = 0; i < textArray.length; i++){
|
|
8248
|
+
var item = textArray[i];
|
|
8249
|
+
if(typeof(item) !== 'string'){
|
|
8250
|
+
item = '' + item;
|
|
8251
|
+
}
|
|
8252
|
+
|
|
8253
|
+
var itemJson = JSON.stringify(item);
|
|
8254
|
+
var itemLen = itemJson.length + 2; // 作为单元素数组的长度
|
|
8255
|
+
|
|
8256
|
+
//大文本单独成组,避免与其他文本拼接
|
|
8257
|
+
if(singleMinSize > 0 && itemLen >= singleMinSize){
|
|
8258
|
+
pushCurrent();
|
|
8259
|
+
list.push([item]);
|
|
8260
|
+
continue;
|
|
8261
|
+
}
|
|
8262
|
+
|
|
8263
|
+
var nextSize = current.length === 0 ? (2 + itemJson.length) : (currentSize + 1 + itemJson.length);
|
|
8264
|
+
|
|
8265
|
+
//超过限制或达到数组最大元素数量,先提交当前组
|
|
8266
|
+
if((maxSize && maxSize > 0 && current.length >= maxSize) || nextSize > size){
|
|
8267
|
+
pushCurrent();
|
|
8268
|
+
current.push(item);
|
|
8269
|
+
currentSize = 2 + itemJson.length;
|
|
8270
|
+
}else{
|
|
8271
|
+
current.push(item);
|
|
8272
|
+
currentSize = nextSize;
|
|
8273
|
+
}
|
|
8274
|
+
}
|
|
8275
|
+
|
|
8276
|
+
pushCurrent();
|
|
8277
|
+
if(list.length < 1){
|
|
8278
|
+
list = [textArray];
|
|
8279
|
+
}
|
|
8280
|
+
return list;
|
|
8281
|
+
},
|
|
8169
8282
|
/*
|
|
8170
8283
|
v3.18.35.20250920 增加
|
|
8171
8284
|
|
|
@@ -8896,47 +9009,95 @@ var translate = {
|
|
|
8896
9009
|
return;
|
|
8897
9010
|
}
|
|
8898
9011
|
|
|
8899
|
-
var url = translate.request.api.translate;
|
|
8900
|
-
|
|
8901
|
-
|
|
8902
|
-
|
|
8903
|
-
|
|
8904
|
-
}
|
|
8905
|
-
|
|
8906
|
-
|
|
8907
|
-
|
|
8908
|
-
|
|
8909
|
-
|
|
8910
|
-
|
|
8911
|
-
|
|
8912
|
-
|
|
8913
|
-
|
|
8914
|
-
|
|
8915
|
-
|
|
8916
|
-
|
|
8917
|
-
|
|
8918
|
-
|
|
8919
|
-
|
|
8920
|
-
|
|
8921
|
-
|
|
8922
|
-
|
|
8923
|
-
|
|
8924
|
-
|
|
8925
|
-
|
|
8926
|
-
|
|
8927
|
-
|
|
8928
|
-
|
|
8929
|
-
|
|
8930
|
-
|
|
8931
|
-
|
|
8932
|
-
|
|
8933
|
-
|
|
8934
|
-
|
|
8935
|
-
|
|
8936
|
-
|
|
8937
|
-
|
|
8938
|
-
|
|
8939
|
-
|
|
9012
|
+
var url = translate.request.api.translate;
|
|
9013
|
+
//按配置拆分文本数组,避免一次请求过大导致超时
|
|
9014
|
+
var splitTextList = translate.request.splitTranslateTextArray(apiTranslateText);
|
|
9015
|
+
if(typeof(splitTextList) == 'undefined' || splitTextList == null || splitTextList.length < 1){
|
|
9016
|
+
splitTextList = [apiTranslateText];
|
|
9017
|
+
}
|
|
9018
|
+
|
|
9019
|
+
var splitFinishCount = 0;
|
|
9020
|
+
var splitResponseError = false;
|
|
9021
|
+
var splitResponseErrorInfo = '';
|
|
9022
|
+
var splitNetworkError = false;
|
|
9023
|
+
var splitFinish = function(){
|
|
9024
|
+
splitFinishCount++;
|
|
9025
|
+
if(splitFinishCount >= splitTextList.length){
|
|
9026
|
+
if(splitNetworkError){
|
|
9027
|
+
return;
|
|
9028
|
+
}
|
|
9029
|
+
var resultData = {
|
|
9030
|
+
from:from,
|
|
9031
|
+
to: to,
|
|
9032
|
+
text:translateResultArray,
|
|
9033
|
+
result: splitResponseError ? 0 : 1
|
|
9034
|
+
};
|
|
9035
|
+
if(splitResponseError && typeof(splitResponseErrorInfo) === 'string' && splitResponseErrorInfo.length > 0){
|
|
9036
|
+
resultData.info = splitResponseErrorInfo;
|
|
9037
|
+
}
|
|
9038
|
+
func(resultData);
|
|
9039
|
+
}
|
|
9040
|
+
};
|
|
9041
|
+
|
|
9042
|
+
for(var splitIndex = 0; splitIndex < splitTextList.length; splitIndex++){
|
|
9043
|
+
let splitTexts = splitTextList[splitIndex];
|
|
9044
|
+
if(typeof(splitTexts) == 'undefined' || splitTexts == null || splitTexts.length < 1){
|
|
9045
|
+
splitFinish();
|
|
9046
|
+
continue;
|
|
9047
|
+
}
|
|
9048
|
+
let data = {
|
|
9049
|
+
from:from,
|
|
9050
|
+
to: to,
|
|
9051
|
+
text:encodeURIComponent(JSON.stringify(splitTexts))
|
|
9052
|
+
};
|
|
9053
|
+
//console.log(splitTexts);
|
|
9054
|
+
translate.request.post(url, data, function(responseData, requestData){
|
|
9055
|
+
//console.log(responseData);
|
|
9056
|
+
//console.log(data);
|
|
9057
|
+
if(responseData.result != 1){
|
|
9058
|
+
splitResponseError = true;
|
|
9059
|
+
if(typeof(responseData.info) === 'string' && responseData.info.length > 0 && splitResponseErrorInfo.length < 1){
|
|
9060
|
+
splitResponseErrorInfo = responseData.info;
|
|
9061
|
+
}
|
|
9062
|
+
translate.log('=======ERROR START=======');
|
|
9063
|
+
translate.log('from : '+requestData.from);
|
|
9064
|
+
translate.log('to : '+requestData.to);
|
|
9065
|
+
translate.log('translate text array : '+texts);
|
|
9066
|
+
translate.log('response error info: '+responseData.info);
|
|
9067
|
+
translate.log('=======ERROR END =======');
|
|
9068
|
+
//return;
|
|
9069
|
+
}
|
|
9070
|
+
|
|
9071
|
+
if(typeof(responseData.text) == 'undefined' || responseData.text == null){
|
|
9072
|
+
responseData.text = [];
|
|
9073
|
+
}
|
|
9074
|
+
var loopLength = responseData.text.length;
|
|
9075
|
+
if(loopLength > splitTexts.length){
|
|
9076
|
+
loopLength = splitTexts.length;
|
|
9077
|
+
}
|
|
9078
|
+
for(var i = 0; i < loopLength; i++){
|
|
9079
|
+
//将翻译结果以 key:hash value翻译结果的形式缓存
|
|
9080
|
+
var hash = translate.util.hash(splitTexts[i]);
|
|
9081
|
+
translate.storage.set('hash_'+to+'_'+hash, responseData.text[i]);
|
|
9082
|
+
//如果离线翻译启用了全部提取,那么还要存入离线翻译指定存储
|
|
9083
|
+
if(translate.offline.fullExtract.isUse){
|
|
9084
|
+
translate.offline.fullExtract.set(hash, splitTexts[i], data.to, responseData.text[i]);
|
|
9085
|
+
}
|
|
9086
|
+
|
|
9087
|
+
//进行组合数据到 translateResultArray
|
|
9088
|
+
translateResultArray[apiTranslateArray[hash]] = responseData.text[i];
|
|
9089
|
+
}
|
|
9090
|
+
|
|
9091
|
+
splitFinish();
|
|
9092
|
+
}, (function(xhr){
|
|
9093
|
+
splitNetworkError = true;
|
|
9094
|
+
if(abnormalFunc && typeof(abnormalFunc) == 'function'){
|
|
9095
|
+
abnormalFunc(xhr);
|
|
9096
|
+
}
|
|
9097
|
+
splitFinish();
|
|
9098
|
+
}));
|
|
9099
|
+
}
|
|
9100
|
+
},
|
|
8940
9101
|
listener:{
|
|
8941
9102
|
//是否已经启动过 translate.request.listener.addListener() 开始监听了,开始了则是true,默认没开始则是false
|
|
8942
9103
|
isStart:false,
|