torchv-translate 1.0.8 → 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 +213 -59
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": {
|
|
@@ -3080,6 +3080,19 @@ var translate = {
|
|
|
3080
3080
|
var pendingItem = translate.request.pending.get(pendingKey);
|
|
3081
3081
|
if(pendingItem != null){
|
|
3082
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
|
+
}
|
|
3083
3096
|
continue;
|
|
3084
3097
|
}
|
|
3085
3098
|
//记录本次创建的pending,方便异常情况下清理
|
|
@@ -3310,14 +3323,21 @@ var translate = {
|
|
|
3310
3323
|
texts: 当前网络请求有哪些文本进行翻译,值为 [text1, text2, ...]
|
|
3311
3324
|
|
|
3312
3325
|
*/
|
|
3313
|
-
translate.request.data[uuid] = {
|
|
3314
|
-
time:Date.now(),
|
|
3315
|
-
list:{}
|
|
3316
|
-
};
|
|
3317
|
-
|
|
3318
|
-
|
|
3319
|
-
|
|
3320
|
-
|
|
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){ //一维数组,取语言
|
|
3321
3341
|
if (!fanyiLangs.hasOwnProperty(lang_index)) {
|
|
3322
3342
|
continue;
|
|
3323
3343
|
}
|
|
@@ -3541,6 +3561,7 @@ var translate = {
|
|
|
3541
3561
|
}
|
|
3542
3562
|
//处理等待同一文本的其他节点
|
|
3543
3563
|
if(pendingItem != null && typeof(pendingItem.waits) === 'object'){
|
|
3564
|
+
var waitLoadingNodes = [];
|
|
3544
3565
|
for(var wi = 0; wi < pendingItem.waits.length; wi++){
|
|
3545
3566
|
var waitItem = pendingItem.waits[wi];
|
|
3546
3567
|
if(waitItem.uuid === uuid && waitItem.lang === lang && waitItem.hash === hash){
|
|
@@ -3562,8 +3583,12 @@ var translate = {
|
|
|
3562
3583
|
var waitOriginal = waitQueue.original;
|
|
3563
3584
|
for(var wni = 0; wni < waitQueue.nodes.length; wni++){
|
|
3564
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']);
|
|
3565
3587
|
}
|
|
3566
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
|
+
}
|
|
3567
3592
|
}
|
|
3568
3593
|
//}
|
|
3569
3594
|
/*
|
|
@@ -3601,7 +3626,32 @@ var translate = {
|
|
|
3601
3626
|
}
|
|
3602
3627
|
var cacheHash = translate.nodeQueue[uuid]['list'][lang][splitHashes[ph]]['cacheHash'];
|
|
3603
3628
|
var pendingKey = translate.request.pending.key(lang, translate.to, cacheHash);
|
|
3604
|
-
translate.request.pending.take(pendingKey);
|
|
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
|
+
}
|
|
3605
3655
|
}
|
|
3606
3656
|
}
|
|
3607
3657
|
var info = '';
|
|
@@ -9529,19 +9579,33 @@ var translate = {
|
|
|
9529
9579
|
|
|
9530
9580
|
}
|
|
9531
9581
|
},
|
|
9532
|
-
//存储,本地缓存
|
|
9533
|
-
storage:{
|
|
9534
|
-
|
|
9535
|
-
|
|
9536
|
-
IndexedDB
|
|
9537
|
-
|
|
9538
|
-
|
|
9539
|
-
|
|
9540
|
-
|
|
9541
|
-
|
|
9542
|
-
|
|
9543
|
-
|
|
9544
|
-
|
|
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;
|
|
9545
9609
|
|
|
9546
9610
|
const request = indexedDB.open(DB_NAME, DB_VERSION);
|
|
9547
9611
|
|
|
@@ -9607,8 +9671,8 @@ var translate = {
|
|
|
9607
9671
|
const users = await translate.storage.IndexedDB.list("*us*r*");
|
|
9608
9672
|
其中传入的key可以模糊搜索,其中的 * 标识另个或多个
|
|
9609
9673
|
*/
|
|
9610
|
-
list: async function (key = '') {
|
|
9611
|
-
if (!this.db) await this.initDB();
|
|
9674
|
+
list: async function (key = '') {
|
|
9675
|
+
if (!this.db) await this.initDB();
|
|
9612
9676
|
|
|
9613
9677
|
return new Promise((resolve, reject) => {
|
|
9614
9678
|
const tx = this.db.transaction('kvStore', 'readonly');
|
|
@@ -9634,18 +9698,68 @@ var translate = {
|
|
|
9634
9698
|
|
|
9635
9699
|
request.onerror = () => reject('游标读取失败');
|
|
9636
9700
|
});
|
|
9637
|
-
}
|
|
9638
|
-
},
|
|
9639
|
-
/*js translate.storage.IndexedDB end*/
|
|
9640
|
-
|
|
9641
|
-
set:function(key,value){
|
|
9642
|
-
|
|
9643
|
-
|
|
9644
|
-
|
|
9645
|
-
|
|
9646
|
-
|
|
9647
|
-
|
|
9648
|
-
|
|
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
|
+
},
|
|
9649
9763
|
//针对图片进行相关的语种图片替换
|
|
9650
9764
|
images:{
|
|
9651
9765
|
/* 要替换的图片队列,数组形态,其中某个数组的:
|
|
@@ -10094,12 +10208,13 @@ var translate = {
|
|
|
10094
10208
|
/*
|
|
10095
10209
|
通过文本翻译API进行的
|
|
10096
10210
|
*/
|
|
10097
|
-
api:{
|
|
10098
|
-
isTip:true,//是否显示ui的提示,true显示,false不显示
|
|
10099
|
-
use: false, //默认不使用,translate.progress.api.startUITip(); 可以设置为启用
|
|
10100
|
-
|
|
10101
|
-
|
|
10102
|
-
|
|
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
|
+
},
|
|
10103
10218
|
//移除子元素(无限级别)中的所有 class name 的loading 遮罩
|
|
10104
10219
|
//level 层级,数字,比如第一次调用,传入1, 第一次里面产生的第二次调用,这里就是2
|
|
10105
10220
|
removeChildClass:function(node, level){
|
|
@@ -10138,12 +10253,15 @@ var translate = {
|
|
|
10138
10253
|
|
|
10139
10254
|
|
|
10140
10255
|
*/
|
|
10141
|
-
startUITip:function(config){
|
|
10142
|
-
translate.progress.api.use
|
|
10143
|
-
|
|
10144
|
-
|
|
10145
|
-
|
|
10146
|
-
|
|
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
|
+
}
|
|
10147
10265
|
if(typeof(config.maskLayerMinWidth) !== 'number'){
|
|
10148
10266
|
config.maskLayerMinWidth = 10;
|
|
10149
10267
|
}
|
|
@@ -10170,10 +10288,10 @@ var translate = {
|
|
|
10170
10288
|
document.head.appendChild(style);
|
|
10171
10289
|
}
|
|
10172
10290
|
|
|
10173
|
-
|
|
10174
|
-
if(translate.progress.api.isTip){
|
|
10175
|
-
//translate.listener.execute.renderStartByApi.push(function(uuid, from, to){
|
|
10176
|
-
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){
|
|
10177
10295
|
var startTime = new Date().getTime();
|
|
10178
10296
|
|
|
10179
10297
|
//取出当前变动的node,对应的元素
|
|
@@ -10231,7 +10349,7 @@ var translate = {
|
|
|
10231
10349
|
//console.log('计算+渲染耗时:'+(new Date().getTime() - startTime));
|
|
10232
10350
|
});
|
|
10233
10351
|
|
|
10234
|
-
translate.lifecycle.execute.translateNetworkAfter.push(function(data){
|
|
10352
|
+
translate.lifecycle.execute.translateNetworkAfter.push(function(data){
|
|
10235
10353
|
//取出当前变动的node,对应的元素
|
|
10236
10354
|
var elements = translate.element.nodeToElement(data.nodes);
|
|
10237
10355
|
|
|
@@ -10247,12 +10365,48 @@ var translate = {
|
|
|
10247
10365
|
}
|
|
10248
10366
|
|
|
10249
10367
|
|
|
10250
|
-
});
|
|
10251
|
-
|
|
10252
|
-
}
|
|
10253
|
-
}
|
|
10254
|
-
|
|
10255
|
-
|
|
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
|
+
},
|
|
10256
10410
|
/*js translate.progress end*/
|
|
10257
10411
|
|
|
10258
10412
|
/*js dispose start*/
|