torchv-translate 1.0.9 → 1.0.10
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 +371 -923
|
@@ -2086,13 +2086,8 @@ var translate = {
|
|
|
2086
2086
|
20 浏览器缓存渲染完毕,ajax通过文本翻译接口开始请求,在发起ajax请求前,状态变为20,然后再发起ajax请求
|
|
2087
2087
|
至于翻译完毕后进行渲染,这个就不单独记录了,因为如果页面存在不同的语种,不同的语种是按照不同的请求来的,是多个异步同时进行的过程
|
|
2088
2088
|
*/
|
|
2089
|
-
state:0,
|
|
2090
|
-
|
|
2091
|
-
/*
|
|
2092
|
-
取消翻译任务的版本号(路由切换时+1),用于忽略未完成的翻译请求
|
|
2093
|
-
*/
|
|
2094
|
-
cancelVersion:0,
|
|
2095
|
-
|
|
2089
|
+
state:0,
|
|
2090
|
+
|
|
2096
2091
|
|
|
2097
2092
|
/*
|
|
2098
2093
|
等待翻译队列 v3.12.6 增加
|
|
@@ -2100,72 +2095,45 @@ var translate = {
|
|
|
2100
2095
|
当执行 translate.execute() 时,会先判断状态 translate.state 是否是0空闲的状态,如果空闲,才会执行,如果不是空闲,则不会执行,而是进入到这里进行等待,等待执行完毕后 translate.state 变成0空闲之后,再来执行这里的
|
|
2101
2096
|
|
|
2102
2097
|
*/
|
|
2103
|
-
waitingExecute:{
|
|
2104
|
-
use:true, //默认是使用,自有部署场景不担心并发的场景,可以禁用,以提高用户使用体验。
|
|
2105
|
-
|
|
2106
|
-
/*
|
|
2107
|
-
一维数组形态,存放执行的翻译任务
|
|
2108
|
-
二维对象形态,存放执行传入的 docs
|
|
2109
|
-
*/
|
|
2110
|
-
queue:[],
|
|
2111
|
-
|
|
2112
|
-
|
|
2113
|
-
|
|
2114
|
-
|
|
2115
|
-
|
|
2116
|
-
|
|
2117
|
-
|
|
2118
|
-
|
|
2119
|
-
|
|
2120
|
-
|
|
2121
|
-
|
|
2122
|
-
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
|
|
2126
|
-
|
|
2127
|
-
|
|
2128
|
-
|
|
2129
|
-
break;
|
|
2130
|
-
}
|
|
2131
|
-
}
|
|
2132
|
-
if(translate.waitingExecute.queue.length < 1){
|
|
2133
|
-
return;
|
|
2134
|
-
}
|
|
2135
|
-
var docs = translate.waitingExecute.get();
|
|
2136
|
-
if(docs != null){
|
|
2137
|
-
translate.execute(docs);
|
|
2138
|
-
}
|
|
2139
|
-
//console.log('stop waitingExecute setInterval');
|
|
2140
|
-
}
|
|
2141
|
-
}, 500);
|
|
2142
|
-
translate.waitingExecute.intervalIds.push(intervalId);
|
|
2143
|
-
},
|
|
2098
|
+
waitingExecute:{
|
|
2099
|
+
use:true, //默认是使用,自有部署场景不担心并发的场景,可以禁用,以提高用户使用体验。
|
|
2100
|
+
|
|
2101
|
+
/*
|
|
2102
|
+
一维数组形态,存放执行的翻译任务
|
|
2103
|
+
二维对象形态,存放执行传入的 docs
|
|
2104
|
+
*/
|
|
2105
|
+
queue:[],
|
|
2106
|
+
/*
|
|
2107
|
+
增加一个翻译任务到翻译队列中
|
|
2108
|
+
docs 同 translate.execute(docs) 的传入参数
|
|
2109
|
+
*/
|
|
2110
|
+
add:function(docs){
|
|
2111
|
+
//向数组末尾追加
|
|
2112
|
+
translate.waitingExecute.queue.push(docs);
|
|
2113
|
+
//开启一个定时器进行触发
|
|
2114
|
+
let intervalId = setInterval(function() {
|
|
2115
|
+
if(translate.state == 0){
|
|
2116
|
+
//清除定时器,结束循环
|
|
2117
|
+
clearInterval(intervalId);
|
|
2118
|
+
var docs = translate.waitingExecute.get();
|
|
2119
|
+
translate.execute(docs);
|
|
2120
|
+
//console.log('stop waitingExecute setInterval');
|
|
2121
|
+
}
|
|
2122
|
+
}, 500);
|
|
2123
|
+
},
|
|
2144
2124
|
/*
|
|
2145
2125
|
从 quque 中取第一个元素,同时将其从queue中删除掉它。
|
|
2146
2126
|
如果取的时候 quque已经没有任何元素了,会返回 null, 但是理论上不会出现null
|
|
2147
2127
|
*/
|
|
2148
|
-
get:function(){
|
|
2149
|
-
//使用 shift 方法删除数组的第一个元素,并将第一个元素的值返回
|
|
2150
|
-
if(translate.waitingExecute.queue.length > 0){
|
|
2151
|
-
return translate.waitingExecute.queue.shift();
|
|
2152
|
-
}else{
|
|
2153
|
-
translate.log('警告, translate.waitingExecute.get 出现异常,quque已空,但还往外取。');
|
|
2154
|
-
return null;
|
|
2155
|
-
}
|
|
2156
|
-
},
|
|
2157
|
-
/*
|
|
2158
|
-
清空等待队列,并取消定时器
|
|
2159
|
-
*/
|
|
2160
|
-
clear:function(){
|
|
2161
|
-
translate.waitingExecute.queue = [];
|
|
2162
|
-
if(typeof(translate.waitingExecute.intervalIds) != 'undefined' && translate.waitingExecute.intervalIds.length > 0){
|
|
2163
|
-
for(var i = 0; i < translate.waitingExecute.intervalIds.length; i++){
|
|
2164
|
-
clearInterval(translate.waitingExecute.intervalIds[i]);
|
|
2165
|
-
}
|
|
2166
|
-
translate.waitingExecute.intervalIds = [];
|
|
2167
|
-
}
|
|
2168
|
-
},
|
|
2128
|
+
get:function(){
|
|
2129
|
+
//使用 shift 方法删除数组的第一个元素,并将第一个元素的值返回
|
|
2130
|
+
if(translate.waitingExecute.queue.length > 0){
|
|
2131
|
+
return translate.waitingExecute.queue.shift();
|
|
2132
|
+
}else{
|
|
2133
|
+
translate.log('警告, translate.waitingExecute.get 出现异常,quque已空,但还往外取。');
|
|
2134
|
+
return null;
|
|
2135
|
+
}
|
|
2136
|
+
},
|
|
2169
2137
|
/*
|
|
2170
2138
|
当前 translate.translateRequest[uuid] 的是否已经全部执行完毕
|
|
2171
2139
|
这里单纯只是对 translate.translateRequest[uuid] 的进行判断
|
|
@@ -2183,38 +2151,28 @@ var translate = {
|
|
|
2183
2151
|
@param result 本次网络请求的结果, 1成功, 0失败。 网络不通,翻译结果返回result非1都是记入0
|
|
2184
2152
|
@param info 如果result为0,这里是失败信息
|
|
2185
2153
|
*/
|
|
2186
|
-
isAllExecuteFinish:function(uuid, from, to, result, info){
|
|
2187
|
-
|
|
2188
|
-
translate.listener.execute.renderFinishByApiRun(uuid, from, to);
|
|
2189
|
-
|
|
2190
|
-
//通过 uuid、from 取得本次翻译相关的 texts、nodes , 触发 translateNetworkAfter_Trigger 钩子
|
|
2191
|
-
//获取请求日志
|
|
2192
|
-
|
|
2193
|
-
|
|
2194
|
-
|
|
2195
|
-
|
|
2196
|
-
|
|
2197
|
-
|
|
2198
|
-
|
|
2199
|
-
|
|
2200
|
-
|
|
2201
|
-
|
|
2202
|
-
|
|
2203
|
-
|
|
2204
|
-
|
|
2205
|
-
|
|
2206
|
-
|
|
2207
|
-
|
|
2208
|
-
}
|
|
2209
|
-
|
|
2210
|
-
//console.log('uuid:'+uuid+', from:'+from+', to:'+to);
|
|
2211
|
-
if(typeof(translate.translateRequest) !== 'object' || typeof(translate.translateRequest[uuid]) !== 'object'){
|
|
2212
|
-
return;
|
|
2213
|
-
}
|
|
2214
|
-
for(var lang in translate.translateRequest[uuid]){
|
|
2215
|
-
if (!translate.translateRequest[uuid].hasOwnProperty(lang)) {
|
|
2216
|
-
continue;
|
|
2217
|
-
}
|
|
2154
|
+
isAllExecuteFinish:function(uuid, from, to, result, info){
|
|
2155
|
+
|
|
2156
|
+
translate.listener.execute.renderFinishByApiRun(uuid, from, to);
|
|
2157
|
+
|
|
2158
|
+
//通过 uuid、from 取得本次翻译相关的 texts、nodes , 触发 translateNetworkAfter_Trigger 钩子
|
|
2159
|
+
//获取请求日志
|
|
2160
|
+
var requestData = translate.request.data[uuid].list[from][to];
|
|
2161
|
+
translate.lifecycle.execute.translateNetworkAfter_Trigger({
|
|
2162
|
+
uuid: uuid,
|
|
2163
|
+
from: from,
|
|
2164
|
+
to: to,
|
|
2165
|
+
texts: requestData.texts,
|
|
2166
|
+
nodes: requestData.nodes,
|
|
2167
|
+
result: result,
|
|
2168
|
+
info: info
|
|
2169
|
+
});
|
|
2170
|
+
|
|
2171
|
+
//console.log('uuid:'+uuid+', from:'+from+', to:'+to);
|
|
2172
|
+
for(var lang in translate.translateRequest[uuid]){
|
|
2173
|
+
if (!translate.translateRequest[uuid].hasOwnProperty(lang)) {
|
|
2174
|
+
continue;
|
|
2175
|
+
}
|
|
2218
2176
|
if(translate.translateRequest[uuid][lang].executeFinish == 0){
|
|
2219
2177
|
//这个还没执行完,那么直接退出,不在向后执行了
|
|
2220
2178
|
//console.log('uuid:'+uuid+' lang:'+lang+' executeFinish:0 time:'+translate.translateRequest[uuid][lang][i][addtime]);
|
|
@@ -2231,36 +2189,12 @@ var translate = {
|
|
|
2231
2189
|
//都执行完了,那么设置完毕
|
|
2232
2190
|
translate.state = 0;
|
|
2233
2191
|
translate.executeNumber++;
|
|
2234
|
-
}
|
|
2235
|
-
|
|
2236
|
-
},
|
|
2237
|
-
|
|
2238
|
-
|
|
2239
|
-
|
|
2240
|
-
*/
|
|
2241
|
-
routeChange:function(){
|
|
2242
|
-
//版本号递增,旧请求全部失效
|
|
2243
|
-
translate.cancelVersion = translate.cancelVersion + 1;
|
|
2244
|
-
//清空等待队列
|
|
2245
|
-
translate.waitingExecute.clear();
|
|
2246
|
-
//清空翻译请求去重缓存
|
|
2247
|
-
if(typeof(translate.request) === 'object' && typeof(translate.request.pending) === 'object'){
|
|
2248
|
-
translate.request.pending.clear();
|
|
2249
|
-
}
|
|
2250
|
-
//终止当前执行状态
|
|
2251
|
-
translate.state = 0;
|
|
2252
|
-
//中断未完成的翻译请求
|
|
2253
|
-
if(typeof(translate.request) === 'object' && typeof(translate.request.abortTranslateRequests) === 'function'){
|
|
2254
|
-
translate.request.abortTranslateRequests();
|
|
2255
|
-
}
|
|
2256
|
-
//清理本轮翻译请求记录
|
|
2257
|
-
translate.translateRequest = {};
|
|
2258
|
-
translate.request.data = {};
|
|
2259
|
-
translate.nodeQueue = {};
|
|
2260
|
-
},
|
|
2261
|
-
|
|
2262
|
-
//execute() 方法已经被执行过多少次了, 只有 translate.execute() 完全执行完,也就是界面渲染完毕后,它才会+1
|
|
2263
|
-
executeNumber:0,
|
|
2192
|
+
}
|
|
2193
|
+
|
|
2194
|
+
},
|
|
2195
|
+
|
|
2196
|
+
//execute() 方法已经被执行过多少次了, 只有 translate.execute() 完全执行完,也就是界面渲染完毕后,它才会+1
|
|
2197
|
+
executeNumber:0,
|
|
2264
2198
|
//translate.execute() 方法已经被触发过多少次了, 只要 translate.execute() 被触发,它就会在触发时立即 +1 (translate.execute() 默认是同一时刻只能执行一次,这个触发是在这个同一时刻执行一次的判定之前进行++ 的,如果这个同一时刻执行一次不通过,还有其他在执行,进入排队执行时,这里也会++ ,当从排队的中顺序排到进行执行时,又会执行++ ) 。 当页面打开第一次触发执行translate.execute(),这里便是 1
|
|
2265
2199
|
executeTriggerNumber:0,
|
|
2266
2200
|
|
|
@@ -2562,11 +2496,9 @@ var translate = {
|
|
|
2562
2496
|
translate.executeTriggerNumber = translate.executeTriggerNumber + 1;
|
|
2563
2497
|
var triggerNumber = translate.executeTriggerNumber; //为了整个 translate.execute 的数据一致性,下面都是使用这个变量
|
|
2564
2498
|
|
|
2565
|
-
//每次执行execute,都会生成一个唯一uuid,也可以叫做队列的唯一标识,每一次执行execute都会创建一个独立的翻译执行队列
|
|
2566
|
-
var uuid = translate.util.uuid();
|
|
2567
|
-
translate.time.log('创建uuid:'+uuid);
|
|
2568
|
-
var executeCancelVersion = translate.cancelVersion;
|
|
2569
|
-
var pendingKeysCreated = [];
|
|
2499
|
+
//每次执行execute,都会生成一个唯一uuid,也可以叫做队列的唯一标识,每一次执行execute都会创建一个独立的翻译执行队列
|
|
2500
|
+
var uuid = translate.util.uuid();
|
|
2501
|
+
translate.time.log('创建uuid:'+uuid);
|
|
2570
2502
|
|
|
2571
2503
|
//如果页面打开第一次使用,先判断缓存中有没有上次使用的语种,从缓存中取出
|
|
2572
2504
|
if(translate.to == null || translate.to == ''){
|
|
@@ -2982,12 +2914,12 @@ var translate = {
|
|
|
2982
2914
|
//console.log(originalWord);
|
|
2983
2915
|
|
|
2984
2916
|
//根据hash,判断本地是否有缓存了
|
|
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){
|
|
2917
|
+
var cacheHash = originalWord == translateText ? hash:translate.util.hash(translateText); //如果匹配到了自定义术语库,那翻译前的hash是被改变了
|
|
2918
|
+
translate.nodeQueue[uuid]['list'][lang][hash]['cacheHash'] = cacheHash; //缓存的hash。 缓存时,其hash跟翻译的语言是完全对应的,缓存的hash就是翻译的语言转换来的
|
|
2919
|
+
var cache = translate.storage.get('hash_'+translate.to+'_'+cacheHash);
|
|
2920
|
+
|
|
2921
|
+
//缓存是否有拿到具体缓存内容
|
|
2922
|
+
if(cache != null && cache.length > 0){
|
|
2991
2923
|
for(var node_index = 0; node_index < translate.nodeQueue[uuid]['list'][lang][hash]['nodes'].length; node_index++){
|
|
2992
2924
|
//console.log(translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][node_index]);
|
|
2993
2925
|
|
|
@@ -3070,40 +3002,14 @@ var translate = {
|
|
|
3070
3002
|
}
|
|
3071
3003
|
|
|
3072
3004
|
|
|
3073
|
-
|
|
3074
|
-
continue; //跳出,不用在传入下面的翻译接口了
|
|
3075
|
-
}
|
|
3076
|
-
|
|
3077
|
-
|
|
3078
|
-
|
|
3079
|
-
|
|
3080
|
-
|
|
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){
|
|
3005
|
+
|
|
3006
|
+
continue; //跳出,不用在传入下面的翻译接口了
|
|
3007
|
+
}
|
|
3008
|
+
|
|
3009
|
+
/*
|
|
3010
|
+
//取出数组
|
|
3011
|
+
var queueNodes = this.nodeQueue[lang][hash];
|
|
3012
|
+
if(queueNodes.length > 0){
|
|
3107
3013
|
//因为在这个数组中的值都是一样的,那么只需要取出第一个就行了
|
|
3108
3014
|
var valueStr = queueNodes[0].nodeValue;
|
|
3109
3015
|
valueStr = this.util.charReplace(valueStr);
|
|
@@ -3131,20 +3037,13 @@ var translate = {
|
|
|
3131
3037
|
//console.log(translateTextArray);
|
|
3132
3038
|
//return;
|
|
3133
3039
|
|
|
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
|
-
|
|
3139
|
-
|
|
3140
|
-
|
|
3141
|
-
translate.request.pending.take(pendingKeysCreated[pk]);
|
|
3142
|
-
}
|
|
3143
|
-
}
|
|
3144
|
-
|
|
3145
|
-
//生命周期触发事件
|
|
3146
|
-
translate.lifecycle.execute.renderFinish_Trigger(uuid, translate.to);
|
|
3147
|
-
translate.executeNumber++;
|
|
3040
|
+
if(typeof(translate.request.api.translate) != 'string' || translate.request.api.translate == null || translate.request.api.translate.length < 1){
|
|
3041
|
+
//用户已经设置了不掉翻译接口进行翻译
|
|
3042
|
+
translate.state = 0;
|
|
3043
|
+
|
|
3044
|
+
//生命周期触发事件
|
|
3045
|
+
translate.lifecycle.execute.renderFinish_Trigger(uuid, translate.to);
|
|
3046
|
+
translate.executeNumber++;
|
|
3148
3047
|
|
|
3149
3048
|
//钩子
|
|
3150
3049
|
translate.lifecycle.execute.finally_Trigger({
|
|
@@ -3323,25 +3222,18 @@ var translate = {
|
|
|
3323
3222
|
texts: 当前网络请求有哪些文本进行翻译,值为 [text1, text2, ...]
|
|
3324
3223
|
|
|
3325
3224
|
*/
|
|
3326
|
-
translate.request.data[uuid] = {
|
|
3327
|
-
time:Date.now(),
|
|
3328
|
-
list:{}
|
|
3329
|
-
};
|
|
3330
|
-
|
|
3331
|
-
|
|
3332
|
-
|
|
3333
|
-
|
|
3334
|
-
translate.progress.api.startUITip();
|
|
3335
|
-
}
|
|
3336
|
-
}
|
|
3337
|
-
|
|
3338
|
-
|
|
3339
|
-
//进行掉接口翻译
|
|
3340
|
-
for(var lang_index in fanyiLangs){ //一维数组,取语言
|
|
3225
|
+
translate.request.data[uuid] = {
|
|
3226
|
+
time:Date.now(),
|
|
3227
|
+
list:{}
|
|
3228
|
+
};
|
|
3229
|
+
|
|
3230
|
+
|
|
3231
|
+
//进行掉接口翻译
|
|
3232
|
+
for(var lang_index in fanyiLangs){ //一维数组,取语言
|
|
3341
3233
|
if (!fanyiLangs.hasOwnProperty(lang_index)) {
|
|
3342
3234
|
continue;
|
|
3343
3235
|
}
|
|
3344
|
-
|
|
3236
|
+
var lang = fanyiLangs[lang_index];
|
|
3345
3237
|
if(typeof(lang) != 'string'){
|
|
3346
3238
|
continue;
|
|
3347
3239
|
}
|
|
@@ -3401,280 +3293,151 @@ var translate = {
|
|
|
3401
3293
|
if(typeof(translate.request.data[uuid].list[lang]) === 'undefined'){
|
|
3402
3294
|
translate.request.data[uuid].list[lang] = {};
|
|
3403
3295
|
}
|
|
3404
|
-
translate.request.data[uuid].list[lang][translate.to] = {
|
|
3405
|
-
texts: translateTextArray[lang],
|
|
3406
|
-
nodes: translateTextNodes,
|
|
3407
|
-
};
|
|
3408
|
-
|
|
3409
|
-
|
|
3410
|
-
/*** 翻译开始 ***/
|
|
3411
|
-
var url = translate.request.api.translate;
|
|
3412
|
-
|
|
3413
|
-
|
|
3414
|
-
|
|
3415
|
-
|
|
3416
|
-
|
|
3417
|
-
|
|
3418
|
-
|
|
3419
|
-
translate.
|
|
3420
|
-
|
|
3421
|
-
|
|
3422
|
-
|
|
3423
|
-
|
|
3424
|
-
|
|
3425
|
-
|
|
3426
|
-
|
|
3427
|
-
|
|
3428
|
-
|
|
3429
|
-
|
|
3430
|
-
|
|
3431
|
-
|
|
3432
|
-
|
|
3433
|
-
|
|
3434
|
-
|
|
3435
|
-
|
|
3436
|
-
|
|
3437
|
-
|
|
3438
|
-
|
|
3439
|
-
|
|
3440
|
-
|
|
3441
|
-
|
|
3442
|
-
|
|
3443
|
-
|
|
3444
|
-
|
|
3445
|
-
|
|
3446
|
-
|
|
3447
|
-
|
|
3448
|
-
|
|
3449
|
-
|
|
3450
|
-
|
|
3451
|
-
|
|
3452
|
-
|
|
3453
|
-
|
|
3454
|
-
|
|
3455
|
-
|
|
3456
|
-
|
|
3457
|
-
|
|
3458
|
-
|
|
3459
|
-
|
|
3460
|
-
|
|
3461
|
-
|
|
3462
|
-
|
|
3463
|
-
|
|
3464
|
-
|
|
3465
|
-
|
|
3466
|
-
|
|
3467
|
-
|
|
3468
|
-
|
|
3469
|
-
|
|
3470
|
-
|
|
3471
|
-
|
|
3472
|
-
|
|
3473
|
-
|
|
3474
|
-
|
|
3475
|
-
|
|
3476
|
-
|
|
3477
|
-
|
|
3478
|
-
|
|
3479
|
-
|
|
3480
|
-
|
|
3481
|
-
|
|
3482
|
-
|
|
3483
|
-
|
|
3484
|
-
|
|
3485
|
-
|
|
3486
|
-
|
|
3487
|
-
|
|
3488
|
-
|
|
3489
|
-
|
|
3490
|
-
|
|
3491
|
-
|
|
3492
|
-
|
|
3493
|
-
|
|
3494
|
-
translate.
|
|
3495
|
-
|
|
3496
|
-
|
|
3497
|
-
|
|
3498
|
-
|
|
3499
|
-
|
|
3500
|
-
|
|
3501
|
-
|
|
3502
|
-
|
|
3503
|
-
|
|
3504
|
-
|
|
3505
|
-
|
|
3506
|
-
|
|
3507
|
-
|
|
3508
|
-
|
|
3509
|
-
|
|
3510
|
-
|
|
3511
|
-
|
|
3512
|
-
|
|
3513
|
-
|
|
3514
|
-
|
|
3515
|
-
|
|
3516
|
-
|
|
3517
|
-
|
|
3518
|
-
|
|
3519
|
-
|
|
3520
|
-
|
|
3521
|
-
|
|
3522
|
-
|
|
3523
|
-
|
|
3524
|
-
|
|
3525
|
-
|
|
3526
|
-
|
|
3527
|
-
|
|
3528
|
-
|
|
3529
|
-
|
|
3530
|
-
|
|
3531
|
-
|
|
3532
|
-
|
|
3533
|
-
|
|
3534
|
-
|
|
3535
|
-
|
|
3536
|
-
|
|
3537
|
-
|
|
3538
|
-
|
|
3539
|
-
|
|
3540
|
-
|
|
3541
|
-
}
|
|
3542
|
-
|
|
3543
|
-
|
|
3544
|
-
|
|
3545
|
-
|
|
3546
|
-
|
|
3547
|
-
|
|
3548
|
-
|
|
3549
|
-
//console.log('bef:'+translate.nodeQueue[uuid]['list'][lang][hash]['beforeText']);
|
|
3550
|
-
}catch(e){
|
|
3551
|
-
translate.log('uuid:'+uuid+', originalWord:'+originalWord+', lang:'+lang+', hash:'+hash+', text:'+text+', queue:'+translate.nodeQueue[uuid]);
|
|
3552
|
-
translate.log(e);
|
|
3553
|
-
continue;
|
|
3554
|
-
}
|
|
3555
|
-
|
|
3556
|
-
//for(var index = 0; index < translate.nodeQueue[lang][hash].length; index++){
|
|
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
|
-
}
|
|
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
|
-
}
|
|
3593
|
-
//}
|
|
3594
|
-
/*
|
|
3595
|
-
for(var index = 0; index < translate.nodeQueue[data.from][hash].length; index++){
|
|
3596
|
-
translate.nodeQueue[data.from][hash][index].nodeValue = text;
|
|
3597
|
-
}
|
|
3598
|
-
*/
|
|
3599
|
-
|
|
3600
|
-
//将翻译结果以 key:hash value翻译结果的形式缓存
|
|
3601
|
-
translate.storage.set('hash_'+responseData.to+'_'+cacheHash,text);
|
|
3602
|
-
//如果离线翻译启用了全部提取,那么还要存入离线翻译指定存储
|
|
3603
|
-
if(translate.offline.fullExtract.isUse){
|
|
3604
|
-
translate.offline.fullExtract.set(hash, originalWord, responseData.to, text);
|
|
3605
|
-
}
|
|
3606
|
-
}
|
|
3607
|
-
task.execute(); //执行渲染任务
|
|
3608
|
-
//translate.temp_executeFinishNumber++; //记录执行完的次数
|
|
3609
|
-
|
|
3610
|
-
splitRequestFinish(1, '', 0);
|
|
3611
|
-
}, function(xhr){
|
|
3612
|
-
if(translate.cancelVersion != executeCancelVersion){
|
|
3613
|
-
return;
|
|
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
|
-
}
|
|
3657
|
-
var info = '';
|
|
3658
|
-
if(typeof(xhr.status) != 'undefined'){
|
|
3659
|
-
if(xhr.status < 1){
|
|
3660
|
-
info = 'Network connection failed. url: '+xhr.requestURL;
|
|
3661
|
-
}else{
|
|
3662
|
-
info = 'HTTP response code : '+xhr.status+', url: '+xhr.requestURL;
|
|
3663
|
-
}
|
|
3664
|
-
}else{
|
|
3665
|
-
info = 'Network connection failed. url: '+xhr.requestURL;
|
|
3666
|
-
}
|
|
3667
|
-
splitRequestFinish(0, info, 3);
|
|
3668
|
-
});
|
|
3669
|
-
if(xhr != null && typeof(xhr) == 'object' && typeof(translate.translateRequest[uuid]) == 'object' && typeof(translate.translateRequest[uuid][lang]) == 'object'){
|
|
3670
|
-
if(typeof(translate.translateRequest[uuid][lang].xhrs) == 'undefined'){
|
|
3671
|
-
translate.translateRequest[uuid][lang].xhrs = [];
|
|
3672
|
-
}
|
|
3673
|
-
translate.translateRequest[uuid][lang].xhrs.push(xhr);
|
|
3674
|
-
}
|
|
3675
|
-
}
|
|
3676
|
-
/*** 翻译end ***/
|
|
3677
|
-
}
|
|
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
|
+
var data = {
|
|
3305
|
+
from:lang,
|
|
3306
|
+
to:translate.to,
|
|
3307
|
+
//lowercase:translate.whole.isEnableAll? '0':'1', //首字母大写
|
|
3308
|
+
//text:JSON.stringify(translateTextArray[lang])
|
|
3309
|
+
text:encodeURIComponent(JSON.stringify(translateTextArray[lang]))
|
|
3310
|
+
};
|
|
3311
|
+
translate.request.post(url, data, function(responseData, requestData){
|
|
3312
|
+
//console.log(data);
|
|
3313
|
+
//console.log(translateTextArray[data.from]);
|
|
3314
|
+
|
|
3315
|
+
//针对 giteeai 增加了账户余额、账户是否激活的拍的判定,所以增加了 401 这个参数,凡是账户异常的,参数值是 401~499 之间。所以只要不是1都是失败
|
|
3316
|
+
if(responseData.result != 1){
|
|
3317
|
+
if(typeof(translate.translateRequest[uuid]) == 'object' && typeof(translate.translateRequest[uuid][requestData.from]) == 'object'){
|
|
3318
|
+
translate.translateRequest[uuid][requestData.from]['result'] = 2;
|
|
3319
|
+
translate.translateRequest[uuid][requestData.from].executeFinish = 1; //1是执行完毕
|
|
3320
|
+
translate.translateRequest[uuid][requestData.from].stoptime = Math.floor(Date.now() / 1000);
|
|
3321
|
+
}else{
|
|
3322
|
+
translate.log('WARINNG!!! translate.translateRequest[uuid][requestData.from] is not object');
|
|
3323
|
+
}
|
|
3324
|
+
|
|
3325
|
+
//为了兼容 v3.14以前的translate.service 版本,做了判断
|
|
3326
|
+
var from = '';
|
|
3327
|
+
if(typeof(requestData.from) != 'undefined' && requestData.from != null){
|
|
3328
|
+
from = requestData.from;
|
|
3329
|
+
}
|
|
3330
|
+
var to = '';
|
|
3331
|
+
if(typeof(requestData.to) != 'undefined' && requestData.to != null){
|
|
3332
|
+
to = requestData.to;
|
|
3333
|
+
}else{
|
|
3334
|
+
to = translate.to;
|
|
3335
|
+
}
|
|
3336
|
+
translate.waitingExecute.isAllExecuteFinish(uuid, from, to, 0, responseData.info);
|
|
3337
|
+
|
|
3338
|
+
|
|
3339
|
+
translate.log('=======ERROR START=======');
|
|
3340
|
+
translate.log(translateTextArray[requestData.from]);
|
|
3341
|
+
//console.log(encodeURIComponent(JSON.stringify(translateTextArray[data.from])));
|
|
3342
|
+
translate.log('response : '+responseData.info);
|
|
3343
|
+
translate.log('=======ERROR END =======');
|
|
3344
|
+
//translate.temp_executeFinishNumber++; //记录执行完的次数
|
|
3345
|
+
return;
|
|
3346
|
+
}
|
|
3347
|
+
|
|
3348
|
+
if(typeof(translate.nodeQueue[uuid]) == 'undefined'){
|
|
3349
|
+
translate.log('提示:你很可能多次引入了 translate.js 所以造成了翻译本身的数据错乱,这只是个提示,它还是会给你正常翻译的,但是你最好不要重复引入太多次 translate.js ,正常情况下只需要引入一次 translate.js 就可以了。太多的话很可能会导致你页面卡顿');
|
|
3350
|
+
return;
|
|
3351
|
+
}
|
|
3352
|
+
|
|
3353
|
+
//console.log('-----待翻译3:----');
|
|
3354
|
+
//console.log(translate.nodeQueue);
|
|
3355
|
+
|
|
3356
|
+
//console.log('response:'+uuid);
|
|
3357
|
+
let task = new translate.renderTask();
|
|
3358
|
+
//遍历 translateHashArray
|
|
3359
|
+
for(var i=0; i<translateHashArray[responseData.from].length; i++){
|
|
3360
|
+
//翻译前的语种,如 english
|
|
3361
|
+
var lang = responseData.from;
|
|
3362
|
+
//翻译后的内容
|
|
3363
|
+
var text = responseData.text[i];
|
|
3364
|
+
//如果text为null,那么这个可能是一次翻译字数太多,为了保持数组长度,拼上的null
|
|
3365
|
+
if(text == null){
|
|
3366
|
+
continue;
|
|
3367
|
+
}
|
|
3368
|
+
|
|
3369
|
+
// v3.0.3 添加,避免像是 JavaScript 被错误翻译为 “JavaScript的” ,然后出现了多个句子中都出现了Javascript时,会出现翻译后文本重复的问题
|
|
3370
|
+
// 这里就是验证一下,翻译后的文本,是否会完全包含翻以前的文本,如果包含了,那么强制将翻译后的文本赋予翻译前的原始文本(也就是不被翻译)
|
|
3371
|
+
if(text.toLowerCase().indexOf(translateTextArray[responseData.from][i].toLowerCase()) > -1){
|
|
3372
|
+
//发现了,那么强制赋予翻以前内容
|
|
3373
|
+
text = translateTextArray[responseData.from][i];
|
|
3374
|
+
}
|
|
3375
|
+
|
|
3376
|
+
|
|
3377
|
+
//翻译前的hash对应下标
|
|
3378
|
+
var hash = translateHashArray[responseData.from][i];
|
|
3379
|
+
var cacheHash = translate.nodeQueue[uuid]['list'][lang][hash]['cacheHash'];
|
|
3380
|
+
|
|
3381
|
+
|
|
3382
|
+
|
|
3383
|
+
//取原始的词,还未经过翻译的,需要进行翻译的词
|
|
3384
|
+
var originalWord = '';
|
|
3385
|
+
try{
|
|
3386
|
+
originalWord = translate.nodeQueue[uuid]['list'][lang][hash]['original'];
|
|
3387
|
+
//console.log('bef:'+translate.nodeQueue[uuid]['list'][lang][hash]['beforeText']);
|
|
3388
|
+
}catch(e){
|
|
3389
|
+
translate.log('uuid:'+uuid+', originalWord:'+originalWord+', lang:'+lang+', hash:'+hash+', text:'+text+', queue:'+translate.nodeQueue[uuid]);
|
|
3390
|
+
translate.log(e);
|
|
3391
|
+
continue;
|
|
3392
|
+
}
|
|
3393
|
+
|
|
3394
|
+
//for(var index = 0; index < translate.nodeQueue[lang][hash].length; index++){
|
|
3395
|
+
for(var node_index = 0; node_index < translate.nodeQueue[uuid]['list'][lang][hash]['nodes'].length; node_index++){
|
|
3396
|
+
//translate.nodeQueue[lang][hash]['nodes'][node_index].nodeValue = translate.nodeQueue[lang][hash]['nodes'][node_index].nodeValue.replace(new RegExp(originalWord,'g'), text);
|
|
3397
|
+
//加入任务
|
|
3398
|
+
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']);
|
|
3399
|
+
}
|
|
3400
|
+
//}
|
|
3401
|
+
/*
|
|
3402
|
+
for(var index = 0; index < translate.nodeQueue[data.from][hash].length; index++){
|
|
3403
|
+
translate.nodeQueue[data.from][hash][index].nodeValue = text;
|
|
3404
|
+
}
|
|
3405
|
+
*/
|
|
3406
|
+
|
|
3407
|
+
//将翻译结果以 key:hash value翻译结果的形式缓存
|
|
3408
|
+
translate.storage.set('hash_'+responseData.to+'_'+cacheHash,text);
|
|
3409
|
+
//如果离线翻译启用了全部提取,那么还要存入离线翻译指定存储
|
|
3410
|
+
if(translate.offline.fullExtract.isUse){
|
|
3411
|
+
translate.offline.fullExtract.set(hash, originalWord, responseData.to, text);
|
|
3412
|
+
}
|
|
3413
|
+
}
|
|
3414
|
+
task.execute(); //执行渲染任务
|
|
3415
|
+
//translate.temp_executeFinishNumber++; //记录执行完的次数
|
|
3416
|
+
|
|
3417
|
+
translate.translateRequest[uuid][lang].result = 1;
|
|
3418
|
+
translate.translateRequest[uuid][lang].executeFinish = 1; //1是执行完毕
|
|
3419
|
+
translate.translateRequest[uuid][lang].stoptime = Math.floor(Date.now() / 1000);
|
|
3420
|
+
setTimeout(function(){
|
|
3421
|
+
translate.waitingExecute.isAllExecuteFinish(uuid, responseData.from, responseData.to, 1, '');
|
|
3422
|
+
},5);
|
|
3423
|
+
}, function(xhr){
|
|
3424
|
+
translate.translateRequest[uuid][xhr.data.from].executeFinish = 1; //1是执行完毕
|
|
3425
|
+
translate.translateRequest[uuid][xhr.data.from].stoptime = Math.floor(Date.now() / 1000);
|
|
3426
|
+
translate.translateRequest[uuid][xhr.data.from].result = 3;
|
|
3427
|
+
var info = '';
|
|
3428
|
+
if(typeof(xhr.status) != 'undefined'){
|
|
3429
|
+
if(xhr.status < 1){
|
|
3430
|
+
info = 'Network connection failed. url: '+xhr.requestURL;
|
|
3431
|
+
}else{
|
|
3432
|
+
info = 'HTTP response code : '+xhr.status+', url: '+xhr.requestURL;
|
|
3433
|
+
}
|
|
3434
|
+
}else{
|
|
3435
|
+
info = 'Network connection failed. url: '+xhr.requestURL;
|
|
3436
|
+
}
|
|
3437
|
+
translate.waitingExecute.isAllExecuteFinish(uuid, xhr.data.from, translate.to, 0, info);
|
|
3438
|
+
});
|
|
3439
|
+
/*** 翻译end ***/
|
|
3440
|
+
}
|
|
3678
3441
|
|
|
3679
3442
|
//钩子
|
|
3680
3443
|
translate.lifecycle.execute.finally_Trigger({
|
|
@@ -8386,7 +8149,7 @@ var translate = {
|
|
|
8386
8149
|
*/
|
|
8387
8150
|
data:{},
|
|
8388
8151
|
//相关API接口方面
|
|
8389
|
-
api:{
|
|
8152
|
+
api:{
|
|
8390
8153
|
/**
|
|
8391
8154
|
* 翻译接口请求的域名主机 host
|
|
8392
8155
|
* 格式注意前面要带上协议如 https:// 域名后要加 /
|
|
@@ -8400,130 +8163,9 @@ var translate = {
|
|
|
8400
8163
|
translate:'translate.json', //翻译接口
|
|
8401
8164
|
ip:'ip.json', //根据用户当前ip获取其所在地的语种
|
|
8402
8165
|
connectTest:'connectTest.json', //用于 translate.js 多节点翻译自动检测网络连通情况
|
|
8403
|
-
init:'init.json', //获取最新版本号,跟当前版本进行比对,用于提醒版本升级等使用
|
|
8404
|
-
|
|
8405
|
-
},
|
|
8406
|
-
/*
|
|
8407
|
-
translate.json 接口单次请求的文本大小控制
|
|
8408
|
-
size: 按 JSON.stringify(array) 的长度进行拆分
|
|
8409
|
-
maxSize: 拆分后的数组最大元素数量,0则不限制
|
|
8410
|
-
*/
|
|
8411
|
-
translateTextSplit:{
|
|
8412
|
-
size:20000,
|
|
8413
|
-
maxSize:10,
|
|
8414
|
-
//单条文本达到该长度后单独成组,避免与其它文本拼接,0则使用 size/2
|
|
8415
|
-
singleTextMinSize:0
|
|
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
|
-
},
|
|
8460
|
-
/*
|
|
8461
|
-
将翻译文本数组拆分为多个请求,避免一次请求过大导致超时
|
|
8462
|
-
注意:不会拆分单条文本,避免破坏段落/语义
|
|
8463
|
-
*/
|
|
8464
|
-
splitTranslateTextArray:function(textArray){
|
|
8465
|
-
if(typeof(textArray) == 'undefined' || textArray == null){
|
|
8466
|
-
return [];
|
|
8467
|
-
}
|
|
8468
|
-
if(typeof(textArray.length) == 'undefined'){
|
|
8469
|
-
return [textArray];
|
|
8470
|
-
}
|
|
8471
|
-
var size = translate.request.translateTextSplit.size;
|
|
8472
|
-
var maxSize = translate.request.translateTextSplit.maxSize;
|
|
8473
|
-
var singleMinSize = translate.request.translateTextSplit.singleTextMinSize;
|
|
8474
|
-
if(typeof(size) !== 'number' || size <= 0){
|
|
8475
|
-
return [textArray];
|
|
8476
|
-
}
|
|
8477
|
-
if(typeof(singleMinSize) !== 'number' || singleMinSize <= 0){
|
|
8478
|
-
singleMinSize = Math.floor(size / 2);
|
|
8479
|
-
}
|
|
8480
|
-
|
|
8481
|
-
var list = [];
|
|
8482
|
-
var current = [];
|
|
8483
|
-
var currentSize = 2; // "[]"
|
|
8484
|
-
var pushCurrent = function(){
|
|
8485
|
-
if(current.length > 0){
|
|
8486
|
-
list.push(current);
|
|
8487
|
-
current = [];
|
|
8488
|
-
currentSize = 2;
|
|
8489
|
-
}
|
|
8490
|
-
};
|
|
8491
|
-
|
|
8492
|
-
for(var i = 0; i < textArray.length; i++){
|
|
8493
|
-
var item = textArray[i];
|
|
8494
|
-
if(typeof(item) !== 'string'){
|
|
8495
|
-
item = '' + item;
|
|
8496
|
-
}
|
|
8497
|
-
|
|
8498
|
-
var itemJson = JSON.stringify(item);
|
|
8499
|
-
var itemLen = itemJson.length + 2; // 作为单元素数组的长度
|
|
8500
|
-
|
|
8501
|
-
//大文本单独成组,避免与其他文本拼接
|
|
8502
|
-
if(singleMinSize > 0 && itemLen >= singleMinSize){
|
|
8503
|
-
pushCurrent();
|
|
8504
|
-
list.push([item]);
|
|
8505
|
-
continue;
|
|
8506
|
-
}
|
|
8507
|
-
|
|
8508
|
-
var nextSize = current.length === 0 ? (2 + itemJson.length) : (currentSize + 1 + itemJson.length);
|
|
8509
|
-
|
|
8510
|
-
//超过限制或达到数组最大元素数量,先提交当前组
|
|
8511
|
-
if((maxSize && maxSize > 0 && current.length >= maxSize) || nextSize > size){
|
|
8512
|
-
pushCurrent();
|
|
8513
|
-
current.push(item);
|
|
8514
|
-
currentSize = 2 + itemJson.length;
|
|
8515
|
-
}else{
|
|
8516
|
-
current.push(item);
|
|
8517
|
-
currentSize = nextSize;
|
|
8518
|
-
}
|
|
8519
|
-
}
|
|
8520
|
-
|
|
8521
|
-
pushCurrent();
|
|
8522
|
-
if(list.length < 1){
|
|
8523
|
-
list = [textArray];
|
|
8524
|
-
}
|
|
8525
|
-
return list;
|
|
8526
|
-
},
|
|
8166
|
+
init:'init.json', //获取最新版本号,跟当前版本进行比对,用于提醒版本升级等使用
|
|
8167
|
+
|
|
8168
|
+
},
|
|
8527
8169
|
/*
|
|
8528
8170
|
v3.18.35.20250920 增加
|
|
8529
8171
|
|
|
@@ -8940,12 +8582,12 @@ var translate = {
|
|
|
8940
8582
|
* 注意,是响应数据是第一个参数,请求数据是第二个参数。 以向前兼容
|
|
8941
8583
|
* @param abnormalFunc 响应异常所执行的方法,响应码不是200就会执行这个方法 ,传入如 function(xhr){} 另外这里的 xhr 会额外有个参数 xhr.requestURL 返回当前请求失败的url
|
|
8942
8584
|
*/
|
|
8943
|
-
post:function(path, data, func, abnormalFunc){
|
|
8944
|
-
var headers = {
|
|
8945
|
-
'content-type':'application/x-www-form-urlencoded',
|
|
8946
|
-
};
|
|
8947
|
-
if(typeof(data) == 'undefined'){
|
|
8948
|
-
return;
|
|
8585
|
+
post:function(path, data, func, abnormalFunc){
|
|
8586
|
+
var headers = {
|
|
8587
|
+
'content-type':'application/x-www-form-urlencoded',
|
|
8588
|
+
};
|
|
8589
|
+
if(typeof(data) == 'undefined'){
|
|
8590
|
+
return;
|
|
8949
8591
|
}
|
|
8950
8592
|
|
|
8951
8593
|
//企业级翻译自动检测
|
|
@@ -8956,25 +8598,26 @@ var translate = {
|
|
|
8956
8598
|
// ------- edge start --------
|
|
8957
8599
|
var url = translate.request.getUrl(path);
|
|
8958
8600
|
//if(url.indexOf('edge') > -1 && path == translate.request.api.translate){
|
|
8959
|
-
if(translate.service.name == 'client.edge'){
|
|
8960
|
-
if(path == translate.request.api.translate){
|
|
8961
|
-
|
|
8962
|
-
|
|
8963
|
-
|
|
8964
|
-
|
|
8965
|
-
d
|
|
8966
|
-
d.
|
|
8967
|
-
d.
|
|
8968
|
-
|
|
8969
|
-
|
|
8970
|
-
|
|
8971
|
-
|
|
8972
|
-
|
|
8973
|
-
|
|
8974
|
-
|
|
8975
|
-
|
|
8976
|
-
|
|
8977
|
-
|
|
8601
|
+
if(translate.service.name == 'client.edge'){
|
|
8602
|
+
if(path == translate.request.api.translate){
|
|
8603
|
+
translate.service.edge.translate(path, data, func, abnormalFunc);
|
|
8604
|
+
return;
|
|
8605
|
+
}
|
|
8606
|
+
if(path == translate.request.api.language){
|
|
8607
|
+
var d = {};
|
|
8608
|
+
d.info = 'SUCCESS';
|
|
8609
|
+
d.result = 1;
|
|
8610
|
+
d.list = translate.service.edge.language.json;
|
|
8611
|
+
func(d);
|
|
8612
|
+
return;
|
|
8613
|
+
}
|
|
8614
|
+
|
|
8615
|
+
//return;
|
|
8616
|
+
}
|
|
8617
|
+
// ------- edge end --------
|
|
8618
|
+
|
|
8619
|
+
this.send(path, data, data, func, 'post', true, headers, abnormalFunc, true);
|
|
8620
|
+
},
|
|
8978
8621
|
/**
|
|
8979
8622
|
* 发送请求
|
|
8980
8623
|
* url 请求的url或者path(path,传入的是translate.request.api.translate 这种的,需要使用 getUrl 来组合真正请求的url )
|
|
@@ -8990,7 +8633,7 @@ var translate = {
|
|
|
8990
8633
|
* abnormalFunc 响应异常所执行的方法,响应码不是200就会执行这个方法 ,传入如 function(xhr){} 另外这里的 xhr 会额外有个参数 xhr.requestURL 返回当前请求失败的url
|
|
8991
8634
|
* showErrorLog 是否控制台打印出来错误日志,true打印, false 不打印
|
|
8992
8635
|
*/
|
|
8993
|
-
send:function(url, data, appendXhrData, func, method, isAsynchronize, headers, abnormalFunc, showErrorLog){
|
|
8636
|
+
send:function(url, data, appendXhrData, func, method, isAsynchronize, headers, abnormalFunc, showErrorLog){
|
|
8994
8637
|
//post提交的参数
|
|
8995
8638
|
var params = '';
|
|
8996
8639
|
|
|
@@ -9127,41 +8770,8 @@ var translate = {
|
|
|
9127
8770
|
}
|
|
9128
8771
|
}
|
|
9129
8772
|
}
|
|
9130
|
-
return xhr;
|
|
9131
|
-
},
|
|
9132
|
-
/*
|
|
9133
|
-
中断未完成的翻译请求(translate.json)
|
|
9134
|
-
*/
|
|
9135
|
-
abortTranslateRequests:function(){
|
|
9136
|
-
if(typeof(translate.translateRequest) == 'undefined' || translate.translateRequest == null){
|
|
9137
|
-
return;
|
|
9138
|
-
}
|
|
9139
|
-
for(var uuid in translate.translateRequest){
|
|
9140
|
-
if (!translate.translateRequest.hasOwnProperty(uuid)) {
|
|
9141
|
-
continue;
|
|
9142
|
-
}
|
|
9143
|
-
var langs = translate.translateRequest[uuid];
|
|
9144
|
-
for(var lang in langs){
|
|
9145
|
-
if (!langs.hasOwnProperty(lang)) {
|
|
9146
|
-
continue;
|
|
9147
|
-
}
|
|
9148
|
-
var item = langs[lang];
|
|
9149
|
-
if(typeof(item) !== 'object' || item == null){
|
|
9150
|
-
continue;
|
|
9151
|
-
}
|
|
9152
|
-
if(typeof(item.xhrs) === 'object' && item.xhrs.length > 0){
|
|
9153
|
-
for(var xi = 0; xi < item.xhrs.length; xi++){
|
|
9154
|
-
try{
|
|
9155
|
-
if(item.xhrs[xi] && typeof(item.xhrs[xi].abort) === 'function'){
|
|
9156
|
-
item.xhrs[xi].abort();
|
|
9157
|
-
}
|
|
9158
|
-
}catch(e){}
|
|
9159
|
-
}
|
|
9160
|
-
item.xhrs = [];
|
|
9161
|
-
}
|
|
9162
|
-
}
|
|
9163
|
-
}
|
|
9164
|
-
},
|
|
8773
|
+
return xhr;
|
|
8774
|
+
},
|
|
9165
8775
|
/*
|
|
9166
8776
|
|
|
9167
8777
|
手动进行翻译操作。参数说明:
|
|
@@ -9205,11 +8815,10 @@ var translate = {
|
|
|
9205
8815
|
console.log(xhr);
|
|
9206
8816
|
});
|
|
9207
8817
|
*/
|
|
9208
|
-
translateText:function(obj, func, abnormalFunc){
|
|
9209
|
-
var texts = new Array();
|
|
9210
|
-
var from = translate.language.getLocal();
|
|
9211
|
-
var to = translate.language.getCurrent();
|
|
9212
|
-
var executeCancelVersion = translate.cancelVersion;
|
|
8818
|
+
translateText:function(obj, func, abnormalFunc){
|
|
8819
|
+
var texts = new Array();
|
|
8820
|
+
var from = translate.language.getLocal();
|
|
8821
|
+
var to = translate.language.getCurrent();
|
|
9213
8822
|
|
|
9214
8823
|
if(typeof(obj) == 'string'){
|
|
9215
8824
|
//案例一的场景,传入单个字符串
|
|
@@ -9287,104 +8896,47 @@ var translate = {
|
|
|
9287
8896
|
return;
|
|
9288
8897
|
}
|
|
9289
8898
|
|
|
9290
|
-
var url = translate.request.api.translate;
|
|
9291
|
-
|
|
9292
|
-
|
|
9293
|
-
|
|
9294
|
-
|
|
9295
|
-
}
|
|
9296
|
-
|
|
9297
|
-
|
|
9298
|
-
|
|
9299
|
-
|
|
9300
|
-
|
|
9301
|
-
|
|
9302
|
-
|
|
9303
|
-
|
|
9304
|
-
|
|
9305
|
-
|
|
9306
|
-
|
|
9307
|
-
|
|
9308
|
-
|
|
9309
|
-
|
|
9310
|
-
|
|
9311
|
-
|
|
9312
|
-
|
|
9313
|
-
|
|
9314
|
-
|
|
9315
|
-
|
|
9316
|
-
|
|
9317
|
-
|
|
9318
|
-
|
|
9319
|
-
|
|
9320
|
-
|
|
9321
|
-
|
|
9322
|
-
|
|
9323
|
-
|
|
9324
|
-
|
|
9325
|
-
|
|
9326
|
-
|
|
9327
|
-
|
|
9328
|
-
}
|
|
9329
|
-
|
|
9330
|
-
|
|
9331
|
-
to: to,
|
|
9332
|
-
text:encodeURIComponent(JSON.stringify(splitTexts))
|
|
9333
|
-
};
|
|
9334
|
-
//console.log(splitTexts);
|
|
9335
|
-
translate.request.post(url, data, function(responseData, requestData){
|
|
9336
|
-
//console.log(responseData);
|
|
9337
|
-
//console.log(data);
|
|
9338
|
-
if(translate.cancelVersion != executeCancelVersion){
|
|
9339
|
-
return;
|
|
9340
|
-
}
|
|
9341
|
-
if(responseData.result != 1){
|
|
9342
|
-
splitResponseError = true;
|
|
9343
|
-
if(typeof(responseData.info) === 'string' && responseData.info.length > 0 && splitResponseErrorInfo.length < 1){
|
|
9344
|
-
splitResponseErrorInfo = responseData.info;
|
|
9345
|
-
}
|
|
9346
|
-
translate.log('=======ERROR START=======');
|
|
9347
|
-
translate.log('from : '+requestData.from);
|
|
9348
|
-
translate.log('to : '+requestData.to);
|
|
9349
|
-
translate.log('translate text array : '+texts);
|
|
9350
|
-
translate.log('response error info: '+responseData.info);
|
|
9351
|
-
translate.log('=======ERROR END =======');
|
|
9352
|
-
//return;
|
|
9353
|
-
}
|
|
9354
|
-
|
|
9355
|
-
if(typeof(responseData.text) == 'undefined' || responseData.text == null){
|
|
9356
|
-
responseData.text = [];
|
|
9357
|
-
}
|
|
9358
|
-
var loopLength = responseData.text.length;
|
|
9359
|
-
if(loopLength > splitTexts.length){
|
|
9360
|
-
loopLength = splitTexts.length;
|
|
9361
|
-
}
|
|
9362
|
-
for(var i = 0; i < loopLength; i++){
|
|
9363
|
-
//将翻译结果以 key:hash value翻译结果的形式缓存
|
|
9364
|
-
var hash = translate.util.hash(splitTexts[i]);
|
|
9365
|
-
translate.storage.set('hash_'+to+'_'+hash, responseData.text[i]);
|
|
9366
|
-
//如果离线翻译启用了全部提取,那么还要存入离线翻译指定存储
|
|
9367
|
-
if(translate.offline.fullExtract.isUse){
|
|
9368
|
-
translate.offline.fullExtract.set(hash, splitTexts[i], data.to, responseData.text[i]);
|
|
9369
|
-
}
|
|
9370
|
-
|
|
9371
|
-
//进行组合数据到 translateResultArray
|
|
9372
|
-
translateResultArray[apiTranslateArray[hash]] = responseData.text[i];
|
|
9373
|
-
}
|
|
9374
|
-
|
|
9375
|
-
splitFinish();
|
|
9376
|
-
}, (function(xhr){
|
|
9377
|
-
if(translate.cancelVersion != executeCancelVersion){
|
|
9378
|
-
return;
|
|
9379
|
-
}
|
|
9380
|
-
splitNetworkError = true;
|
|
9381
|
-
if(abnormalFunc && typeof(abnormalFunc) == 'function'){
|
|
9382
|
-
abnormalFunc(xhr);
|
|
9383
|
-
}
|
|
9384
|
-
splitFinish();
|
|
9385
|
-
}));
|
|
9386
|
-
}
|
|
9387
|
-
},
|
|
8899
|
+
var url = translate.request.api.translate;
|
|
8900
|
+
var data = {
|
|
8901
|
+
from:from,
|
|
8902
|
+
to: to,
|
|
8903
|
+
text:encodeURIComponent(JSON.stringify(apiTranslateText))
|
|
8904
|
+
};
|
|
8905
|
+
//console.log(apiTranslateText);
|
|
8906
|
+
translate.request.post(url, data, function(responseData, requestData){
|
|
8907
|
+
//console.log(responseData);
|
|
8908
|
+
//console.log(data);
|
|
8909
|
+
if(responseData.result != 1){
|
|
8910
|
+
translate.log('=======ERROR START=======');
|
|
8911
|
+
translate.log('from : '+requestData.from);
|
|
8912
|
+
translate.log('to : '+requestData.to);
|
|
8913
|
+
translate.log('translate text array : '+texts);
|
|
8914
|
+
translate.log('response error info: '+responseData.info);
|
|
8915
|
+
translate.log('=======ERROR END =======');
|
|
8916
|
+
//return;
|
|
8917
|
+
}
|
|
8918
|
+
|
|
8919
|
+
for(var i = 0; i < responseData.text.length; i++){
|
|
8920
|
+
//将翻译结果以 key:hash value翻译结果的形式缓存
|
|
8921
|
+
var hash = translate.util.hash(apiTranslateText[i]);
|
|
8922
|
+
translate.storage.set('hash_'+to+'_'+hash, responseData.text[i]);
|
|
8923
|
+
//如果离线翻译启用了全部提取,那么还要存入离线翻译指定存储
|
|
8924
|
+
if(translate.offline.fullExtract.isUse){
|
|
8925
|
+
translate.offline.fullExtract.set(hash, apiTranslateText[i], data.to, responseData.text[i]);
|
|
8926
|
+
}
|
|
8927
|
+
|
|
8928
|
+
//进行组合数据到 translateResultArray
|
|
8929
|
+
translateResultArray[apiTranslateArray[hash]] = responseData.text[i];
|
|
8930
|
+
}
|
|
8931
|
+
responseData.text = translateResultArray;
|
|
8932
|
+
|
|
8933
|
+
func(responseData);
|
|
8934
|
+
}, (function(xhr){
|
|
8935
|
+
if(abnormalFunc && typeof(abnormalFunc) == 'function'){
|
|
8936
|
+
abnormalFunc(xhr);
|
|
8937
|
+
}
|
|
8938
|
+
}));
|
|
8939
|
+
},
|
|
9388
8940
|
listener:{
|
|
9389
8941
|
//是否已经启动过 translate.request.listener.addListener() 开始监听了,开始了则是true,默认没开始则是false
|
|
9390
8942
|
isStart:false,
|
|
@@ -9579,33 +9131,19 @@ var translate = {
|
|
|
9579
9131
|
|
|
9580
9132
|
}
|
|
9581
9133
|
},
|
|
9582
|
-
//存储,本地缓存
|
|
9583
|
-
storage:{
|
|
9584
|
-
|
|
9585
|
-
|
|
9586
|
-
|
|
9587
|
-
|
|
9588
|
-
|
|
9589
|
-
|
|
9590
|
-
|
|
9591
|
-
|
|
9592
|
-
|
|
9593
|
-
|
|
9594
|
-
|
|
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;
|
|
9134
|
+
//存储,本地缓存
|
|
9135
|
+
storage:{
|
|
9136
|
+
/*js translate.storage.IndexedDB start*/
|
|
9137
|
+
//对浏览器的 IndexedDB 操作
|
|
9138
|
+
IndexedDB:{
|
|
9139
|
+
db: null,
|
|
9140
|
+
// 初始化数据库
|
|
9141
|
+
initDB: function () {
|
|
9142
|
+
const self = this;
|
|
9143
|
+
return new Promise((resolve, reject) => {
|
|
9144
|
+
const DB_NAME = 'translate.js';
|
|
9145
|
+
const STORE_NAME = 'kvStore';
|
|
9146
|
+
const DB_VERSION = 1;
|
|
9609
9147
|
|
|
9610
9148
|
const request = indexedDB.open(DB_NAME, DB_VERSION);
|
|
9611
9149
|
|
|
@@ -9671,8 +9209,8 @@ var translate = {
|
|
|
9671
9209
|
const users = await translate.storage.IndexedDB.list("*us*r*");
|
|
9672
9210
|
其中传入的key可以模糊搜索,其中的 * 标识另个或多个
|
|
9673
9211
|
*/
|
|
9674
|
-
list: async function (key = '') {
|
|
9675
|
-
if (!this.db) await this.initDB();
|
|
9212
|
+
list: async function (key = '') {
|
|
9213
|
+
if (!this.db) await this.initDB();
|
|
9676
9214
|
|
|
9677
9215
|
return new Promise((resolve, reject) => {
|
|
9678
9216
|
const tx = this.db.transaction('kvStore', 'readonly');
|
|
@@ -9698,68 +9236,18 @@ var translate = {
|
|
|
9698
9236
|
|
|
9699
9237
|
request.onerror = () => reject('游标读取失败');
|
|
9700
9238
|
});
|
|
9701
|
-
}
|
|
9702
|
-
},
|
|
9703
|
-
/*js translate.storage.IndexedDB end*/
|
|
9704
|
-
|
|
9705
|
-
set:function(key,value){
|
|
9706
|
-
|
|
9707
|
-
|
|
9708
|
-
|
|
9709
|
-
|
|
9710
|
-
|
|
9711
|
-
|
|
9712
|
-
|
|
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
|
-
},
|
|
9239
|
+
}
|
|
9240
|
+
},
|
|
9241
|
+
/*js translate.storage.IndexedDB end*/
|
|
9242
|
+
|
|
9243
|
+
set:function(key,value){
|
|
9244
|
+
localStorage.setItem(key,value);
|
|
9245
|
+
},
|
|
9246
|
+
get:function(key){
|
|
9247
|
+
return localStorage.getItem(key);
|
|
9248
|
+
}
|
|
9249
|
+
|
|
9250
|
+
},
|
|
9763
9251
|
//针对图片进行相关的语种图片替换
|
|
9764
9252
|
images:{
|
|
9765
9253
|
/* 要替换的图片队列,数组形态,其中某个数组的:
|
|
@@ -10208,13 +9696,12 @@ var translate = {
|
|
|
10208
9696
|
/*
|
|
10209
9697
|
通过文本翻译API进行的
|
|
10210
9698
|
*/
|
|
10211
|
-
api:{
|
|
10212
|
-
isTip:true,//是否显示ui的提示,true显示,false不显示
|
|
10213
|
-
use: false, //默认不使用,translate.progress.api.startUITip(); 可以设置为启用
|
|
10214
|
-
|
|
10215
|
-
|
|
10216
|
-
|
|
10217
|
-
},
|
|
9699
|
+
api:{
|
|
9700
|
+
isTip:true,//是否显示ui的提示,true显示,false不显示
|
|
9701
|
+
use: false, //默认不使用,translate.progress.api.startUITip(); 可以设置为启用
|
|
9702
|
+
setUITip:function(tip){
|
|
9703
|
+
translate.progress.api.isTip = tip;
|
|
9704
|
+
},
|
|
10218
9705
|
//移除子元素(无限级别)中的所有 class name 的loading 遮罩
|
|
10219
9706
|
//level 层级,数字,比如第一次调用,传入1, 第一次里面产生的第二次调用,这里就是2
|
|
10220
9707
|
removeChildClass:function(node, level){
|
|
@@ -10253,15 +9740,12 @@ var translate = {
|
|
|
10253
9740
|
|
|
10254
9741
|
|
|
10255
9742
|
*/
|
|
10256
|
-
startUITip:function(config){
|
|
10257
|
-
|
|
10258
|
-
|
|
10259
|
-
|
|
10260
|
-
|
|
10261
|
-
|
|
10262
|
-
if(typeof(config) === 'undefined'){
|
|
10263
|
-
config = {};
|
|
10264
|
-
}
|
|
9743
|
+
startUITip:function(config){
|
|
9744
|
+
translate.progress.api.use = true;
|
|
9745
|
+
|
|
9746
|
+
if(typeof(config) === 'undefined'){
|
|
9747
|
+
config = {};
|
|
9748
|
+
}
|
|
10265
9749
|
if(typeof(config.maskLayerMinWidth) !== 'number'){
|
|
10266
9750
|
config.maskLayerMinWidth = 10;
|
|
10267
9751
|
}
|
|
@@ -10288,10 +9772,10 @@ var translate = {
|
|
|
10288
9772
|
document.head.appendChild(style);
|
|
10289
9773
|
}
|
|
10290
9774
|
|
|
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){
|
|
9775
|
+
|
|
9776
|
+
if(translate.progress.api.isTip){
|
|
9777
|
+
//translate.listener.execute.renderStartByApi.push(function(uuid, from, to){
|
|
9778
|
+
translate.lifecycle.execute.translateNetworkBefore.push(function(data){
|
|
10295
9779
|
var startTime = new Date().getTime();
|
|
10296
9780
|
|
|
10297
9781
|
//取出当前变动的node,对应的元素
|
|
@@ -10349,7 +9833,7 @@ var translate = {
|
|
|
10349
9833
|
//console.log('计算+渲染耗时:'+(new Date().getTime() - startTime));
|
|
10350
9834
|
});
|
|
10351
9835
|
|
|
10352
|
-
translate.lifecycle.execute.translateNetworkAfter.push(function(data){
|
|
9836
|
+
translate.lifecycle.execute.translateNetworkAfter.push(function(data){
|
|
10353
9837
|
//取出当前变动的node,对应的元素
|
|
10354
9838
|
var elements = translate.element.nodeToElement(data.nodes);
|
|
10355
9839
|
|
|
@@ -10365,48 +9849,12 @@ var translate = {
|
|
|
10365
9849
|
}
|
|
10366
9850
|
|
|
10367
9851
|
|
|
10368
|
-
});
|
|
10369
|
-
|
|
10370
|
-
}
|
|
10371
|
-
}
|
|
10372
|
-
|
|
10373
|
-
|
|
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
|
-
},
|
|
9852
|
+
});
|
|
9853
|
+
|
|
9854
|
+
}
|
|
9855
|
+
}
|
|
9856
|
+
}
|
|
9857
|
+
},
|
|
10410
9858
|
/*js translate.progress end*/
|
|
10411
9859
|
|
|
10412
9860
|
/*js dispose start*/
|