torchv-translate 1.0.7 → 1.0.9
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 +359 -89
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "torchv-translate",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.9",
|
|
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": {
|
|
@@ -2243,6 +2243,10 @@ var translate = {
|
|
|
2243
2243
|
translate.cancelVersion = translate.cancelVersion + 1;
|
|
2244
2244
|
//清空等待队列
|
|
2245
2245
|
translate.waitingExecute.clear();
|
|
2246
|
+
//清空翻译请求去重缓存
|
|
2247
|
+
if(typeof(translate.request) === 'object' && typeof(translate.request.pending) === 'object'){
|
|
2248
|
+
translate.request.pending.clear();
|
|
2249
|
+
}
|
|
2246
2250
|
//终止当前执行状态
|
|
2247
2251
|
translate.state = 0;
|
|
2248
2252
|
//中断未完成的翻译请求
|
|
@@ -2562,6 +2566,7 @@ var translate = {
|
|
|
2562
2566
|
var uuid = translate.util.uuid();
|
|
2563
2567
|
translate.time.log('创建uuid:'+uuid);
|
|
2564
2568
|
var executeCancelVersion = translate.cancelVersion;
|
|
2569
|
+
var pendingKeysCreated = [];
|
|
2565
2570
|
|
|
2566
2571
|
//如果页面打开第一次使用,先判断缓存中有没有上次使用的语种,从缓存中取出
|
|
2567
2572
|
if(translate.to == null || translate.to == ''){
|
|
@@ -2977,12 +2982,12 @@ var translate = {
|
|
|
2977
2982
|
//console.log(originalWord);
|
|
2978
2983
|
|
|
2979
2984
|
//根据hash,判断本地是否有缓存了
|
|
2980
|
-
var cacheHash = originalWord == translateText ? hash:translate.util.hash(translateText); //如果匹配到了自定义术语库,那翻译前的hash是被改变了
|
|
2981
|
-
translate.nodeQueue[uuid]['list'][lang][hash]['cacheHash'] = cacheHash; //缓存的hash。 缓存时,其hash跟翻译的语言是完全对应的,缓存的hash就是翻译的语言转换来的
|
|
2982
|
-
var cache = translate.storage.get('hash_'+translate.to+'_'+cacheHash);
|
|
2983
|
-
|
|
2984
|
-
//缓存是否有拿到具体缓存内容
|
|
2985
|
-
if(cache != null && cache.length > 0){
|
|
2985
|
+
var cacheHash = originalWord == translateText ? hash:translate.util.hash(translateText); //如果匹配到了自定义术语库,那翻译前的hash是被改变了
|
|
2986
|
+
translate.nodeQueue[uuid]['list'][lang][hash]['cacheHash'] = cacheHash; //缓存的hash。 缓存时,其hash跟翻译的语言是完全对应的,缓存的hash就是翻译的语言转换来的
|
|
2987
|
+
var cache = translate.storage.get('hash_'+translate.to+'_'+cacheHash);
|
|
2988
|
+
|
|
2989
|
+
//缓存是否有拿到具体缓存内容
|
|
2990
|
+
if(cache != null && cache.length > 0){
|
|
2986
2991
|
for(var node_index = 0; node_index < translate.nodeQueue[uuid]['list'][lang][hash]['nodes'].length; node_index++){
|
|
2987
2992
|
//console.log(translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][node_index]);
|
|
2988
2993
|
|
|
@@ -3065,14 +3070,40 @@ var translate = {
|
|
|
3065
3070
|
}
|
|
3066
3071
|
|
|
3067
3072
|
|
|
3068
|
-
|
|
3069
|
-
continue; //跳出,不用在传入下面的翻译接口了
|
|
3070
|
-
}
|
|
3071
|
-
|
|
3072
|
-
|
|
3073
|
-
|
|
3074
|
-
|
|
3075
|
-
|
|
3073
|
+
|
|
3074
|
+
continue; //跳出,不用在传入下面的翻译接口了
|
|
3075
|
+
}
|
|
3076
|
+
|
|
3077
|
+
//避免虚拟滚动等场景重复请求:如果同一文本正在翻译中,则加入等待队列
|
|
3078
|
+
if(typeof(translate.request) === 'object' && typeof(translate.request.pending) === 'object'){
|
|
3079
|
+
var pendingKey = translate.request.pending.key(lang, translate.to, cacheHash);
|
|
3080
|
+
var pendingItem = translate.request.pending.get(pendingKey);
|
|
3081
|
+
if(pendingItem != null){
|
|
3082
|
+
translate.request.pending.add(pendingKey, {uuid:uuid, lang:lang, hash:hash});
|
|
3083
|
+
//加入loading提示
|
|
3084
|
+
if(typeof(translate.progress) === 'object' && typeof(translate.progress.api) === 'object'){
|
|
3085
|
+
if(translate.progress.api.autoStart && !translate.progress.api.use){
|
|
3086
|
+
translate.progress.api.startUITip();
|
|
3087
|
+
}
|
|
3088
|
+
if(translate.progress.api.use){
|
|
3089
|
+
var pendingNodes = [];
|
|
3090
|
+
for(var pni = 0; pni < translate.nodeQueue[uuid]['list'][lang][hash]['nodes'].length; pni++){
|
|
3091
|
+
pendingNodes.push(translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][pni].node);
|
|
3092
|
+
}
|
|
3093
|
+
translate.progress.api.applyLoadingByNodes(pendingNodes);
|
|
3094
|
+
}
|
|
3095
|
+
}
|
|
3096
|
+
continue;
|
|
3097
|
+
}
|
|
3098
|
+
//记录本次创建的pending,方便异常情况下清理
|
|
3099
|
+
translate.request.pending.add(pendingKey, {uuid:uuid, lang:lang, hash:hash});
|
|
3100
|
+
pendingKeysCreated.push(pendingKey);
|
|
3101
|
+
}
|
|
3102
|
+
|
|
3103
|
+
/*
|
|
3104
|
+
//取出数组
|
|
3105
|
+
var queueNodes = this.nodeQueue[lang][hash];
|
|
3106
|
+
if(queueNodes.length > 0){
|
|
3076
3107
|
//因为在这个数组中的值都是一样的,那么只需要取出第一个就行了
|
|
3077
3108
|
var valueStr = queueNodes[0].nodeValue;
|
|
3078
3109
|
valueStr = this.util.charReplace(valueStr);
|
|
@@ -3100,13 +3131,20 @@ var translate = {
|
|
|
3100
3131
|
//console.log(translateTextArray);
|
|
3101
3132
|
//return;
|
|
3102
3133
|
|
|
3103
|
-
if(typeof(translate.request.api.translate) != 'string' || translate.request.api.translate == null || translate.request.api.translate.length < 1){
|
|
3104
|
-
//用户已经设置了不掉翻译接口进行翻译
|
|
3105
|
-
translate.state = 0;
|
|
3106
|
-
|
|
3107
|
-
|
|
3108
|
-
translate.
|
|
3109
|
-
|
|
3134
|
+
if(typeof(translate.request.api.translate) != 'string' || translate.request.api.translate == null || translate.request.api.translate.length < 1){
|
|
3135
|
+
//用户已经设置了不掉翻译接口进行翻译
|
|
3136
|
+
translate.state = 0;
|
|
3137
|
+
|
|
3138
|
+
//清理本次创建的pending记录
|
|
3139
|
+
if(pendingKeysCreated.length > 0 && typeof(translate.request) === 'object' && typeof(translate.request.pending) === 'object'){
|
|
3140
|
+
for(var pk = 0; pk < pendingKeysCreated.length; pk++){
|
|
3141
|
+
translate.request.pending.take(pendingKeysCreated[pk]);
|
|
3142
|
+
}
|
|
3143
|
+
}
|
|
3144
|
+
|
|
3145
|
+
//生命周期触发事件
|
|
3146
|
+
translate.lifecycle.execute.renderFinish_Trigger(uuid, translate.to);
|
|
3147
|
+
translate.executeNumber++;
|
|
3110
3148
|
|
|
3111
3149
|
//钩子
|
|
3112
3150
|
translate.lifecycle.execute.finally_Trigger({
|
|
@@ -3285,14 +3323,21 @@ var translate = {
|
|
|
3285
3323
|
texts: 当前网络请求有哪些文本进行翻译,值为 [text1, text2, ...]
|
|
3286
3324
|
|
|
3287
3325
|
*/
|
|
3288
|
-
translate.request.data[uuid] = {
|
|
3289
|
-
time:Date.now(),
|
|
3290
|
-
list:{}
|
|
3291
|
-
};
|
|
3292
|
-
|
|
3293
|
-
|
|
3294
|
-
|
|
3295
|
-
|
|
3326
|
+
translate.request.data[uuid] = {
|
|
3327
|
+
time:Date.now(),
|
|
3328
|
+
list:{}
|
|
3329
|
+
};
|
|
3330
|
+
|
|
3331
|
+
//自动启用翻译loading提示
|
|
3332
|
+
if(typeof(translate.progress) === 'object' && typeof(translate.progress.api) === 'object'){
|
|
3333
|
+
if(translate.progress.api.autoStart && !translate.progress.api.use){
|
|
3334
|
+
translate.progress.api.startUITip();
|
|
3335
|
+
}
|
|
3336
|
+
}
|
|
3337
|
+
|
|
3338
|
+
|
|
3339
|
+
//进行掉接口翻译
|
|
3340
|
+
for(var lang_index in fanyiLangs){ //一维数组,取语言
|
|
3296
3341
|
if (!fanyiLangs.hasOwnProperty(lang_index)) {
|
|
3297
3342
|
continue;
|
|
3298
3343
|
}
|
|
@@ -3486,14 +3531,19 @@ var translate = {
|
|
|
3486
3531
|
}
|
|
3487
3532
|
|
|
3488
3533
|
|
|
3489
|
-
|
|
3490
|
-
|
|
3491
|
-
|
|
3534
|
+
//翻译前的hash对应下标
|
|
3535
|
+
var hash = splitHashes[i];
|
|
3536
|
+
var cacheHash = translate.nodeQueue[uuid]['list'][lang][hash]['cacheHash'];
|
|
3537
|
+
var pendingItem = null;
|
|
3538
|
+
if(typeof(translate.request) === 'object' && typeof(translate.request.pending) === 'object'){
|
|
3539
|
+
var pendingKey = translate.request.pending.key(lang, responseData.to, cacheHash);
|
|
3540
|
+
pendingItem = translate.request.pending.take(pendingKey);
|
|
3541
|
+
}
|
|
3492
3542
|
|
|
3493
3543
|
|
|
3494
|
-
|
|
3495
|
-
|
|
3496
|
-
|
|
3544
|
+
|
|
3545
|
+
//取原始的词,还未经过翻译的,需要进行翻译的词
|
|
3546
|
+
var originalWord = '';
|
|
3497
3547
|
try{
|
|
3498
3548
|
originalWord = translate.nodeQueue[uuid]['list'][lang][hash]['original'];
|
|
3499
3549
|
//console.log('bef:'+translate.nodeQueue[uuid]['list'][lang][hash]['beforeText']);
|
|
@@ -3504,11 +3554,42 @@ var translate = {
|
|
|
3504
3554
|
}
|
|
3505
3555
|
|
|
3506
3556
|
//for(var index = 0; index < translate.nodeQueue[lang][hash].length; index++){
|
|
3507
|
-
|
|
3508
|
-
|
|
3509
|
-
|
|
3510
|
-
|
|
3557
|
+
for(var node_index = 0; node_index < translate.nodeQueue[uuid]['list'][lang][hash]['nodes'].length; node_index++){
|
|
3558
|
+
//translate.nodeQueue[lang][hash]['nodes'][node_index].nodeValue = translate.nodeQueue[lang][hash]['nodes'][node_index].nodeValue.replace(new RegExp(originalWord,'g'), text);
|
|
3559
|
+
//加入任务
|
|
3560
|
+
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']);
|
|
3561
|
+
}
|
|
3562
|
+
//处理等待同一文本的其他节点
|
|
3563
|
+
if(pendingItem != null && typeof(pendingItem.waits) === 'object'){
|
|
3564
|
+
var waitLoadingNodes = [];
|
|
3565
|
+
for(var wi = 0; wi < pendingItem.waits.length; wi++){
|
|
3566
|
+
var waitItem = pendingItem.waits[wi];
|
|
3567
|
+
if(waitItem.uuid === uuid && waitItem.lang === lang && waitItem.hash === hash){
|
|
3568
|
+
continue;
|
|
3569
|
+
}
|
|
3570
|
+
if(typeof(translate.nodeQueue[waitItem.uuid]) === 'undefined'){
|
|
3571
|
+
continue;
|
|
3572
|
+
}
|
|
3573
|
+
if(typeof(translate.nodeQueue[waitItem.uuid]['list'][waitItem.lang]) === 'undefined'){
|
|
3574
|
+
continue;
|
|
3575
|
+
}
|
|
3576
|
+
if(typeof(translate.nodeQueue[waitItem.uuid]['list'][waitItem.lang][waitItem.hash]) === 'undefined'){
|
|
3577
|
+
continue;
|
|
3578
|
+
}
|
|
3579
|
+
var waitQueue = translate.nodeQueue[waitItem.uuid]['list'][waitItem.lang][waitItem.hash];
|
|
3580
|
+
if(typeof(waitQueue) === 'undefined' || typeof(waitQueue.nodes) === 'undefined'){
|
|
3581
|
+
continue;
|
|
3582
|
+
}
|
|
3583
|
+
var waitOriginal = waitQueue.original;
|
|
3584
|
+
for(var wni = 0; wni < waitQueue.nodes.length; wni++){
|
|
3585
|
+
task.add(waitQueue.nodes[wni]['node'], waitOriginal, waitQueue.nodes[wni]['beforeText']+text+waitQueue.nodes[wni]['afterText'], waitQueue.nodes[wni]['attribute']);
|
|
3586
|
+
waitLoadingNodes.push(waitQueue.nodes[wni]['node']);
|
|
3587
|
+
}
|
|
3511
3588
|
}
|
|
3589
|
+
if(waitLoadingNodes.length > 0 && typeof(translate.progress) === 'object' && typeof(translate.progress.api) === 'object' && translate.progress.api.use){
|
|
3590
|
+
translate.progress.api.removeLoadingByNodes(waitLoadingNodes);
|
|
3591
|
+
}
|
|
3592
|
+
}
|
|
3512
3593
|
//}
|
|
3513
3594
|
/*
|
|
3514
3595
|
for(var index = 0; index < translate.nodeQueue[data.from][hash].length; index++){
|
|
@@ -3531,6 +3612,48 @@ var translate = {
|
|
|
3531
3612
|
if(translate.cancelVersion != executeCancelVersion){
|
|
3532
3613
|
return;
|
|
3533
3614
|
}
|
|
3615
|
+
//请求异常,清理pending,允许后续重试
|
|
3616
|
+
if(typeof(translate.request) === 'object' && typeof(translate.request.pending) === 'object'){
|
|
3617
|
+
for(var ph = 0; ph < splitHashes.length; ph++){
|
|
3618
|
+
if(typeof(translate.nodeQueue[uuid]) === 'undefined'){
|
|
3619
|
+
break;
|
|
3620
|
+
}
|
|
3621
|
+
if(typeof(translate.nodeQueue[uuid]['list'][lang]) === 'undefined'){
|
|
3622
|
+
break;
|
|
3623
|
+
}
|
|
3624
|
+
if(typeof(translate.nodeQueue[uuid]['list'][lang][splitHashes[ph]]) === 'undefined'){
|
|
3625
|
+
continue;
|
|
3626
|
+
}
|
|
3627
|
+
var cacheHash = translate.nodeQueue[uuid]['list'][lang][splitHashes[ph]]['cacheHash'];
|
|
3628
|
+
var pendingKey = translate.request.pending.key(lang, translate.to, cacheHash);
|
|
3629
|
+
var pendingItem = translate.request.pending.take(pendingKey);
|
|
3630
|
+
if(pendingItem != null && typeof(pendingItem.waits) === 'object' && typeof(translate.progress) === 'object' && typeof(translate.progress.api) === 'object' && translate.progress.api.use){
|
|
3631
|
+
var waitNodes = [];
|
|
3632
|
+
for(var wi = 0; wi < pendingItem.waits.length; wi++){
|
|
3633
|
+
var waitItem = pendingItem.waits[wi];
|
|
3634
|
+
if(typeof(translate.nodeQueue[waitItem.uuid]) === 'undefined'){
|
|
3635
|
+
continue;
|
|
3636
|
+
}
|
|
3637
|
+
if(typeof(translate.nodeQueue[waitItem.uuid]['list'][waitItem.lang]) === 'undefined'){
|
|
3638
|
+
continue;
|
|
3639
|
+
}
|
|
3640
|
+
if(typeof(translate.nodeQueue[waitItem.uuid]['list'][waitItem.lang][waitItem.hash]) === 'undefined'){
|
|
3641
|
+
continue;
|
|
3642
|
+
}
|
|
3643
|
+
var waitQueue = translate.nodeQueue[waitItem.uuid]['list'][waitItem.lang][waitItem.hash];
|
|
3644
|
+
if(typeof(waitQueue) === 'undefined' || typeof(waitQueue.nodes) === 'undefined'){
|
|
3645
|
+
continue;
|
|
3646
|
+
}
|
|
3647
|
+
for(var wni = 0; wni < waitQueue.nodes.length; wni++){
|
|
3648
|
+
waitNodes.push(waitQueue.nodes[wni]['node']);
|
|
3649
|
+
}
|
|
3650
|
+
}
|
|
3651
|
+
if(waitNodes.length > 0){
|
|
3652
|
+
translate.progress.api.removeLoadingByNodes(waitNodes);
|
|
3653
|
+
}
|
|
3654
|
+
}
|
|
3655
|
+
}
|
|
3656
|
+
}
|
|
3534
3657
|
var info = '';
|
|
3535
3658
|
if(typeof(xhr.status) != 'undefined'){
|
|
3536
3659
|
if(xhr.status < 1){
|
|
@@ -8291,6 +8414,49 @@ var translate = {
|
|
|
8291
8414
|
//单条文本达到该长度后单独成组,避免与其它文本拼接,0则使用 size/2
|
|
8292
8415
|
singleTextMinSize:0
|
|
8293
8416
|
},
|
|
8417
|
+
/*
|
|
8418
|
+
翻译请求去重(处理中)
|
|
8419
|
+
*/
|
|
8420
|
+
pending:{
|
|
8421
|
+
map:new Map(),
|
|
8422
|
+
key:function(from, to, cacheHash){
|
|
8423
|
+
return from+'|'+to+'|'+cacheHash;
|
|
8424
|
+
},
|
|
8425
|
+
get:function(key){
|
|
8426
|
+
if(this.map == null){
|
|
8427
|
+
this.map = new Map();
|
|
8428
|
+
}
|
|
8429
|
+
return this.map.get(key) || null;
|
|
8430
|
+
},
|
|
8431
|
+
add:function(key, waitItem){
|
|
8432
|
+
if(this.map == null){
|
|
8433
|
+
this.map = new Map();
|
|
8434
|
+
}
|
|
8435
|
+
var item = this.map.get(key);
|
|
8436
|
+
if(item == null){
|
|
8437
|
+
item = {waits:[]};
|
|
8438
|
+
this.map.set(key, item);
|
|
8439
|
+
}
|
|
8440
|
+
if(waitItem != null){
|
|
8441
|
+
item.waits.push(waitItem);
|
|
8442
|
+
}
|
|
8443
|
+
return item;
|
|
8444
|
+
},
|
|
8445
|
+
take:function(key){
|
|
8446
|
+
if(this.map == null){
|
|
8447
|
+
this.map = new Map();
|
|
8448
|
+
return null;
|
|
8449
|
+
}
|
|
8450
|
+
var item = this.map.get(key) || null;
|
|
8451
|
+
if(item != null){
|
|
8452
|
+
this.map.delete(key);
|
|
8453
|
+
}
|
|
8454
|
+
return item;
|
|
8455
|
+
},
|
|
8456
|
+
clear:function(){
|
|
8457
|
+
this.map = new Map();
|
|
8458
|
+
}
|
|
8459
|
+
},
|
|
8294
8460
|
/*
|
|
8295
8461
|
将翻译文本数组拆分为多个请求,避免一次请求过大导致超时
|
|
8296
8462
|
注意:不会拆分单条文本,避免破坏段落/语义
|
|
@@ -9413,19 +9579,33 @@ var translate = {
|
|
|
9413
9579
|
|
|
9414
9580
|
}
|
|
9415
9581
|
},
|
|
9416
|
-
//存储,本地缓存
|
|
9417
|
-
storage:{
|
|
9418
|
-
|
|
9419
|
-
|
|
9420
|
-
IndexedDB
|
|
9421
|
-
|
|
9422
|
-
|
|
9423
|
-
|
|
9424
|
-
|
|
9425
|
-
|
|
9426
|
-
|
|
9427
|
-
|
|
9428
|
-
|
|
9582
|
+
//存储,本地缓存
|
|
9583
|
+
storage:{
|
|
9584
|
+
//是否启用 IndexedDB 作为额外持久化缓存(默认启用)
|
|
9585
|
+
useIndexedDB:true,
|
|
9586
|
+
//IndexedDB 的内存级缓存,避免频繁异步回填
|
|
9587
|
+
indexedDBCache:new Map(),
|
|
9588
|
+
//IndexedDB 读取中的 key,避免重复请求
|
|
9589
|
+
indexedDBCachePending:new Map(),
|
|
9590
|
+
//设置是否启用 IndexedDB 缓存
|
|
9591
|
+
setUseIndexedDB:function(use){
|
|
9592
|
+
translate.storage.useIndexedDB = use ? true : false;
|
|
9593
|
+
},
|
|
9594
|
+
/*js translate.storage.IndexedDB start*/
|
|
9595
|
+
//对浏览器的 IndexedDB 操作
|
|
9596
|
+
IndexedDB:{
|
|
9597
|
+
db: null,
|
|
9598
|
+
// 初始化数据库
|
|
9599
|
+
initDB: function () {
|
|
9600
|
+
const self = this;
|
|
9601
|
+
return new Promise((resolve, reject) => {
|
|
9602
|
+
if(typeof(indexedDB) == 'undefined'){
|
|
9603
|
+
reject('IndexedDB not supported');
|
|
9604
|
+
return;
|
|
9605
|
+
}
|
|
9606
|
+
const DB_NAME = 'translate.js';
|
|
9607
|
+
const STORE_NAME = 'kvStore';
|
|
9608
|
+
const DB_VERSION = 1;
|
|
9429
9609
|
|
|
9430
9610
|
const request = indexedDB.open(DB_NAME, DB_VERSION);
|
|
9431
9611
|
|
|
@@ -9491,8 +9671,8 @@ var translate = {
|
|
|
9491
9671
|
const users = await translate.storage.IndexedDB.list("*us*r*");
|
|
9492
9672
|
其中传入的key可以模糊搜索,其中的 * 标识另个或多个
|
|
9493
9673
|
*/
|
|
9494
|
-
list: async function (key = '') {
|
|
9495
|
-
if (!this.db) await this.initDB();
|
|
9674
|
+
list: async function (key = '') {
|
|
9675
|
+
if (!this.db) await this.initDB();
|
|
9496
9676
|
|
|
9497
9677
|
return new Promise((resolve, reject) => {
|
|
9498
9678
|
const tx = this.db.transaction('kvStore', 'readonly');
|
|
@@ -9518,18 +9698,68 @@ var translate = {
|
|
|
9518
9698
|
|
|
9519
9699
|
request.onerror = () => reject('游标读取失败');
|
|
9520
9700
|
});
|
|
9521
|
-
}
|
|
9522
|
-
},
|
|
9523
|
-
/*js translate.storage.IndexedDB end*/
|
|
9524
|
-
|
|
9525
|
-
set:function(key,value){
|
|
9526
|
-
|
|
9527
|
-
|
|
9528
|
-
|
|
9529
|
-
|
|
9530
|
-
|
|
9531
|
-
|
|
9532
|
-
|
|
9701
|
+
}
|
|
9702
|
+
},
|
|
9703
|
+
/*js translate.storage.IndexedDB end*/
|
|
9704
|
+
|
|
9705
|
+
set:function(key,value){
|
|
9706
|
+
try{
|
|
9707
|
+
localStorage.setItem(key,value);
|
|
9708
|
+
}catch(e){}
|
|
9709
|
+
if(translate.storage.useIndexedDB && typeof(indexedDB) != 'undefined'){
|
|
9710
|
+
try{
|
|
9711
|
+
if(translate.storage.indexedDBCache instanceof Map){
|
|
9712
|
+
translate.storage.indexedDBCache.set(key, value);
|
|
9713
|
+
}
|
|
9714
|
+
translate.storage.IndexedDB.set(key, value);
|
|
9715
|
+
}catch(e){}
|
|
9716
|
+
}
|
|
9717
|
+
},
|
|
9718
|
+
get:function(key){
|
|
9719
|
+
var value = null;
|
|
9720
|
+
try{
|
|
9721
|
+
value = localStorage.getItem(key);
|
|
9722
|
+
}catch(e){
|
|
9723
|
+
value = null;
|
|
9724
|
+
}
|
|
9725
|
+
if(value != null){
|
|
9726
|
+
return value;
|
|
9727
|
+
}
|
|
9728
|
+
|
|
9729
|
+
//尝试从 IndexedDB 读取并回填(异步)
|
|
9730
|
+
if(translate.storage.useIndexedDB && typeof(indexedDB) != 'undefined'){
|
|
9731
|
+
if(translate.storage.indexedDBCache instanceof Map && translate.storage.indexedDBCache.has(key)){
|
|
9732
|
+
return translate.storage.indexedDBCache.get(key);
|
|
9733
|
+
}
|
|
9734
|
+
if(translate.storage.indexedDBCachePending instanceof Map && translate.storage.indexedDBCachePending.has(key)){
|
|
9735
|
+
return value;
|
|
9736
|
+
}
|
|
9737
|
+
if(translate.storage.indexedDBCachePending instanceof Map){
|
|
9738
|
+
translate.storage.indexedDBCachePending.set(key, 1);
|
|
9739
|
+
}
|
|
9740
|
+
translate.storage.IndexedDB.get(key).then(function(v){
|
|
9741
|
+
if(translate.storage.indexedDBCachePending instanceof Map){
|
|
9742
|
+
translate.storage.indexedDBCachePending.delete(key);
|
|
9743
|
+
}
|
|
9744
|
+
if(typeof(v) == 'undefined' || v == null){
|
|
9745
|
+
return;
|
|
9746
|
+
}
|
|
9747
|
+
try{
|
|
9748
|
+
localStorage.setItem(key, v);
|
|
9749
|
+
}catch(e){}
|
|
9750
|
+
if(translate.storage.indexedDBCache instanceof Map){
|
|
9751
|
+
translate.storage.indexedDBCache.set(key, v);
|
|
9752
|
+
}
|
|
9753
|
+
}).catch(function(){
|
|
9754
|
+
if(translate.storage.indexedDBCachePending instanceof Map){
|
|
9755
|
+
translate.storage.indexedDBCachePending.delete(key);
|
|
9756
|
+
}
|
|
9757
|
+
});
|
|
9758
|
+
}
|
|
9759
|
+
return value;
|
|
9760
|
+
}
|
|
9761
|
+
|
|
9762
|
+
},
|
|
9533
9763
|
//针对图片进行相关的语种图片替换
|
|
9534
9764
|
images:{
|
|
9535
9765
|
/* 要替换的图片队列,数组形态,其中某个数组的:
|
|
@@ -9978,12 +10208,13 @@ var translate = {
|
|
|
9978
10208
|
/*
|
|
9979
10209
|
通过文本翻译API进行的
|
|
9980
10210
|
*/
|
|
9981
|
-
api:{
|
|
9982
|
-
isTip:true,//是否显示ui的提示,true显示,false不显示
|
|
9983
|
-
use: false, //默认不使用,translate.progress.api.startUITip(); 可以设置为启用
|
|
9984
|
-
|
|
9985
|
-
|
|
9986
|
-
|
|
10211
|
+
api:{
|
|
10212
|
+
isTip:true,//是否显示ui的提示,true显示,false不显示
|
|
10213
|
+
use: false, //默认不使用,translate.progress.api.startUITip(); 可以设置为启用
|
|
10214
|
+
autoStart:true, //是否在触发翻译时自动启用loading
|
|
10215
|
+
setUITip:function(tip){
|
|
10216
|
+
translate.progress.api.isTip = tip;
|
|
10217
|
+
},
|
|
9987
10218
|
//移除子元素(无限级别)中的所有 class name 的loading 遮罩
|
|
9988
10219
|
//level 层级,数字,比如第一次调用,传入1, 第一次里面产生的第二次调用,这里就是2
|
|
9989
10220
|
removeChildClass:function(node, level){
|
|
@@ -10022,12 +10253,15 @@ var translate = {
|
|
|
10022
10253
|
|
|
10023
10254
|
|
|
10024
10255
|
*/
|
|
10025
|
-
startUITip:function(config){
|
|
10026
|
-
translate.progress.api.use
|
|
10027
|
-
|
|
10028
|
-
|
|
10029
|
-
|
|
10030
|
-
|
|
10256
|
+
startUITip:function(config){
|
|
10257
|
+
if(translate.progress.api.use){
|
|
10258
|
+
return;
|
|
10259
|
+
}
|
|
10260
|
+
translate.progress.api.use = true;
|
|
10261
|
+
|
|
10262
|
+
if(typeof(config) === 'undefined'){
|
|
10263
|
+
config = {};
|
|
10264
|
+
}
|
|
10031
10265
|
if(typeof(config.maskLayerMinWidth) !== 'number'){
|
|
10032
10266
|
config.maskLayerMinWidth = 10;
|
|
10033
10267
|
}
|
|
@@ -10054,10 +10288,10 @@ var translate = {
|
|
|
10054
10288
|
document.head.appendChild(style);
|
|
10055
10289
|
}
|
|
10056
10290
|
|
|
10057
|
-
|
|
10058
|
-
if(translate.progress.api.isTip){
|
|
10059
|
-
//translate.listener.execute.renderStartByApi.push(function(uuid, from, to){
|
|
10060
|
-
translate.lifecycle.execute.translateNetworkBefore.push(function(data){
|
|
10291
|
+
|
|
10292
|
+
if(translate.progress.api.isTip){
|
|
10293
|
+
//translate.listener.execute.renderStartByApi.push(function(uuid, from, to){
|
|
10294
|
+
translate.lifecycle.execute.translateNetworkBefore.push(function(data){
|
|
10061
10295
|
var startTime = new Date().getTime();
|
|
10062
10296
|
|
|
10063
10297
|
//取出当前变动的node,对应的元素
|
|
@@ -10115,7 +10349,7 @@ var translate = {
|
|
|
10115
10349
|
//console.log('计算+渲染耗时:'+(new Date().getTime() - startTime));
|
|
10116
10350
|
});
|
|
10117
10351
|
|
|
10118
|
-
translate.lifecycle.execute.translateNetworkAfter.push(function(data){
|
|
10352
|
+
translate.lifecycle.execute.translateNetworkAfter.push(function(data){
|
|
10119
10353
|
//取出当前变动的node,对应的元素
|
|
10120
10354
|
var elements = translate.element.nodeToElement(data.nodes);
|
|
10121
10355
|
|
|
@@ -10131,12 +10365,48 @@ var translate = {
|
|
|
10131
10365
|
}
|
|
10132
10366
|
|
|
10133
10367
|
|
|
10134
|
-
});
|
|
10135
|
-
|
|
10136
|
-
}
|
|
10137
|
-
}
|
|
10138
|
-
|
|
10139
|
-
|
|
10368
|
+
});
|
|
10369
|
+
|
|
10370
|
+
}
|
|
10371
|
+
},
|
|
10372
|
+
//对指定nodes应用loading样式
|
|
10373
|
+
applyLoadingByNodes:function(nodes){
|
|
10374
|
+
if(typeof(nodes) == 'undefined' || nodes == null || nodes.length < 1){
|
|
10375
|
+
return;
|
|
10376
|
+
}
|
|
10377
|
+
var elements = translate.element.nodeToElement(nodes);
|
|
10378
|
+
for(var r = 0; r<elements.length; r++){
|
|
10379
|
+
if(typeof(elements[r].className) !== 'string'){
|
|
10380
|
+
continue;
|
|
10381
|
+
}
|
|
10382
|
+
if(elements[r].className.indexOf('translate_api_in_progress') < 0){
|
|
10383
|
+
elements[r].className = elements[r].className+' translate_api_in_progress';
|
|
10384
|
+
}
|
|
10385
|
+
if(translate.progress.api.isTip && elements[r].className.indexOf('translatejs-text-element-hidden') < 0){
|
|
10386
|
+
elements[r].className = elements[r].className+' translatejs-text-element-hidden';
|
|
10387
|
+
}
|
|
10388
|
+
}
|
|
10389
|
+
},
|
|
10390
|
+
//移除指定nodes的loading样式
|
|
10391
|
+
removeLoadingByNodes:function(nodes){
|
|
10392
|
+
if(typeof(nodes) == 'undefined' || nodes == null || nodes.length < 1){
|
|
10393
|
+
return;
|
|
10394
|
+
}
|
|
10395
|
+
var elements = translate.element.nodeToElement(nodes);
|
|
10396
|
+
for(var r = 0; r<elements.length; r++){
|
|
10397
|
+
if(typeof(elements[r].className) !== 'string'){
|
|
10398
|
+
continue;
|
|
10399
|
+
}
|
|
10400
|
+
if(elements[r].className.indexOf('translate_api_in_progress') > -1){
|
|
10401
|
+
elements[r].className = elements[r].className.replace(/translate_api_in_progress/g, '');
|
|
10402
|
+
}
|
|
10403
|
+
if(elements[r].className.indexOf('translatejs-text-element-hidden') > -1){
|
|
10404
|
+
elements[r].className = elements[r].className.replace(/translatejs-text-element-hidden/g, '');
|
|
10405
|
+
}
|
|
10406
|
+
}
|
|
10407
|
+
}
|
|
10408
|
+
}
|
|
10409
|
+
},
|
|
10140
10410
|
/*js translate.progress end*/
|
|
10141
10411
|
|
|
10142
10412
|
/*js dispose start*/
|