i18n-jsautotranslate 3.12.9 → 3.13.0
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/README.md +16 -10
- package/index.js +111 -25
- package/package.json +1 -1
    
        package/README.md
    CHANGED
    
    | @@ -148,16 +148,8 @@ translate.execute();//进行翻译 | |
| 148 148 | 
             
            [详细使用说明](https://translate.zvo.cn/4041.html) |  [Vue2 中使用 translate.js 在线 Demo](https://lruihao.github.io/vue-el-demo/#/translate-js)
         | 
| 149 149 |  | 
| 150 150 | 
             
            # 谁在使用
         | 
| 151 | 
            -
            截止 2023.7 月份时,本项目的后端免费翻译服务的请求量就已经达到了 1.5亿次/月 的规模,并且还在非常快速的持续增大,包括一些城投集团像是长沙城投、以及一些政府单位像是环境保障局、企业国际化经营服务平台、海外矿业产业联合、国际潮青联谊年会、人力资源和社会保障局、政务服务网、海外的一些平台如futrom智能住宅、bitheime全球区块链等等都在广泛使用。
         | 
| 152 | 
            -
            这里给出两个使用比较好的网站作为实际示例参考:
         | 
| 153 | 
            -
              
         | 
| 154 | 
            -
            * [**RICE中国大米展**](https://www.cnrice.com.cn)
         | 
| 155 | 
            -
            * [**第十一届国际潮青联谊年会组委会**](http://ityc.org.cn)
         | 
| 156 | 
            -
             | 
| 157 | 
            -
            另外,很多开源框架及产品也都已将此翻译能力接入了自身系统,赋予自身系统多语言切换能力。
         | 
| 158 | 
            -
             | 
| 159 151 |  | 
| 160 | 
            -
             | 
| 152 | 
            +
            开源项目:  
         | 
| 161 153 | 
             
            * [管伊佳ERP](https://gitee.com/jishenghua/JSH_ERP) 国产开源ERP系统关注度第一,专注进销存、生产、总账
         | 
| 162 154 | 
             
            * [FixIt](https://github.com/hugo-fixit/cmpt-translate) 一款简洁、优雅且先进的Hugo 博客主题
         | 
| 163 155 | 
             
            * [Z-Blog](https://app.zblogcn.com/?id=49226) 易用的博客程序,功能丰富,模板多样,助轻松搭建个性博客。
         | 
| @@ -172,8 +164,22 @@ translate.execute();//进行翻译 | |
| 172 164 | 
             
            * [phpok cms](https://gitee.com/phpok/phpok) 极其自由的企业站程序,支持各种自定义配置。
         | 
| 173 165 | 
             
            * [RPCMS](https://app.rpcms.cn/app/149.html) 轻量型php内容管理系统,小型、轻量,但功能丰富,可扩展性强。
         | 
| 174 166 | 
             
            * [Masuit.MyBlogs](https://gitee.com/masuit/Masuit.MyBlogs) 高性能高安全性低占用的个人博客系统
         | 
| 167 | 
            +
             | 
| 175 168 | 
             
            ...  
         | 
| 176 | 
            -
             | 
| 169 | 
            +
              
         | 
| 170 | 
            +
            |   |   | | | | 
         | 
| 171 | 
            +
            | ------------ | ------------ |------------ |------------ |------------ | 
         | 
| 172 | 
            +
            |  高校 |  清华大学 | 北京理工大学 |  西苏格兰大学 | 中国美术学院 | 亚利桑那州立大学|  
         | 
| 173 | 
            +
            |  集团 |  中国一汽 | 京东 | 中兴 | 中国铁建 | 长城汽车 |    
         | 
| 174 | 
            +
            |  政务 |  湖北省人民检察院 | 云南省药品监督管理局 | 云南省机关事务管理局 | 香港一带一路研究院 | 曲靖市生态环境局 |    
         | 
| 175 | 
            +
            |  科研 |  国家生物信息中心 | 德国科工创新院 | 中科能研电力技术研究院 | 国家新能源汽车技术创新中心 | 北方华创 |  
         | 
| 176 | 
            +
            |  云厂商 |  指点云 | 每刻云 | 雨云 | DOGSSL | 多彩云 |  
         | 
| 177 | 
            +
            |  协会 |  中国国际环保展览会 | 国际研发方法协会 | 中国内燃机学会 | 深圳市智慧城市产业协会 | 山东省社会组织总会 |  
         | 
| 178 | 
            +
            |  平台 |  东盟 | ESG国际服务平台 | 安徽省外贸综合服务平台 | 湖南企业国际化经营服务平台 | 中亚采招网 | 
         | 
| 179 | 
            +
             | 
| 180 | 
            +
            ...
         | 
| 181 | 
            +
             | 
| 182 | 
            +
            如果您有开源项目,比如文档、cms、UI 框架、后台管理框架、等等,需要采用此进行多语言切换,欢迎喊我,无偿提供全程接入讨论及遇到的问题跟随优化,希望我们的开源项目能互相产生作用一起越来越好。如果你的项目在这个列表中没有,欢迎联系我说明,我给加入进去。如果您不想出现在这里,也联系我,我给隐去。
         | 
| 177 183 |  | 
| 178 184 |  | 
| 179 185 | 
             
            # 哪些能力
         | 
    
        package/index.js
    CHANGED
    
    | @@ -12,7 +12,7 @@ var translate = { | |
| 12 12 | 
             
            	 * 格式:major.minor.patch.date
         | 
| 13 13 | 
             
            	 */
         | 
| 14 14 | 
             
            	// AUTO_VERSION_START
         | 
| 15 | 
            -
            	version: '3. | 
| 15 | 
            +
            	version: '3.13.0.20250124',
         | 
| 16 16 | 
             
            	// AUTO_VERSION_END
         | 
| 17 17 | 
             
            	/*
         | 
| 18 18 | 
             
            		当前使用的版本,默认使用v2. 可使用 setUseVersion2(); 
         | 
| @@ -179,7 +179,7 @@ var translate = { | |
| 179 179 | 
             
            					document.getElementById('translateSelectLanguage').style.width = '94px';
         | 
| 180 180 | 
             
            				}catch(e){ console.log(e);} 
         | 
| 181 181 | 
             
            				*/
         | 
| 182 | 
            -
            			});
         | 
| 182 | 
            +
            			}, null);
         | 
| 183 183 |  | 
| 184 184 |  | 
| 185 185 | 
             
            		}
         | 
| @@ -1121,14 +1121,6 @@ var translate = { | |
| 1121 1121 | 
             
            										//console.log("inProgressNodes -- 减去node length: "+translate.inProgressNodes.length+', text:'+ipnode.nodeValue);
         | 
| 1122 1122 | 
             
            									}
         | 
| 1123 1123 |  | 
| 1124 | 
            -
            									//当前已经全部翻译并渲染完毕,则将其恢复到闲置状态,闲置状态则可以进行下一轮翻译。
         | 
| 1125 | 
            -
            									if(translate.inProgressNodes.length == 0){
         | 
| 1126 | 
            -
            										setTimeout(function(){
         | 
| 1127 | 
            -
            											translate.state = 0;
         | 
| 1128 | 
            -
            										}, 50);
         | 
| 1129 | 
            -
            										//console.log('set translate.state = 0');
         | 
| 1130 | 
            -
            									}
         | 
| 1131 | 
            -
            									
         | 
| 1132 1124 | 
             
            									break;
         | 
| 1133 1125 | 
             
            								}
         | 
| 1134 1126 | 
             
            							}
         | 
| @@ -1233,8 +1225,8 @@ var translate = { | |
| 1233 1225 | 
             
            	/*
         | 
| 1234 1226 | 
             
            		当前状态,执行状态
         | 
| 1235 1227 | 
             
            		0 空闲(或者执行翻译完毕)
         | 
| 1236 | 
            -
            		10 扫描要翻译的node
         | 
| 1237 | 
            -
            		20 ajax通过文本翻译接口开始请求,在发起ajax请求前,状态变为20,然后再发起ajax请求
         | 
| 1228 | 
            +
            		10 扫描要翻译的node,并读取浏览器缓存的翻译内容进行渲染显示
         | 
| 1229 | 
            +
            		20 浏览器缓存渲染完毕,ajax通过文本翻译接口开始请求,在发起ajax请求前,状态变为20,然后再发起ajax请求
         | 
| 1238 1230 | 
             
            		至于翻译完毕后进行渲染,这个就不单独记录了,因为如果页面存在不同的语种,不同的语种是按照不同的请求来的,是多个异步同时进行的过程
         | 
| 1239 1231 | 
             
            	*/
         | 
| 1240 1232 | 
             
            	state:0,
         | 
| @@ -1282,9 +1274,33 @@ var translate = { | |
| 1282 1274 | 
             
            				console.log('警告, translate.waitingExecute.get 出现异常,quque已空,但还往外取。');
         | 
| 1283 1275 | 
             
            				return null;
         | 
| 1284 1276 | 
             
            			}
         | 
| 1277 | 
            +
            		},
         | 
| 1278 | 
            +
            		//当前 translate.translateRequest[uuid] 的是否已经全部执行完毕,这里单纯只是对 translate.translateRequest[uuid] 的进行判断,这里要在 translate.json 接口触发完并渲染完毕后触发,当然接口失败时也要触发
         | 
| 1279 | 
            +
            		isAllExecuteFinish:function(uuid){
         | 
| 1280 | 
            +
            			
         | 
| 1281 | 
            +
            			for(var lang in translate.translateRequest[uuid]){
         | 
| 1282 | 
            +
            				for(var i = 0; i<translate.translateRequest[uuid][lang].length; i++){
         | 
| 1283 | 
            +
            					if(translate.translateRequest[uuid][lang][i].executeFinish == 0){
         | 
| 1284 | 
            +
            						//这个还没执行完,那么直接退出,不在向后执行了
         | 
| 1285 | 
            +
            						//console.log('uuid:'+uuid+'  lang:'+lang+'  executeFinish:0  time:'+translate.translateRequest[uuid][lang][i][addtime]);
         | 
| 1286 | 
            +
            						
         | 
| 1287 | 
            +
            						//这里要考虑进行时间判断
         | 
| 1288 | 
            +
             | 
| 1289 | 
            +
            						return;
         | 
| 1290 | 
            +
            					}
         | 
| 1291 | 
            +
            				}
         | 
| 1292 | 
            +
            			}
         | 
| 1293 | 
            +
             | 
| 1294 | 
            +
            			//都执行完了,那么设置完毕
         | 
| 1295 | 
            +
            			translate.state = 0;
         | 
| 1296 | 
            +
            			translate.executeNumber++;
         | 
| 1285 1297 | 
             
            		}
         | 
| 1298 | 
            +
             | 
| 1286 1299 | 
             
            	},
         | 
| 1287 1300 |  | 
| 1301 | 
            +
            	//execute() 方法已经被执行过多少次了, 只有execute() 完全执行完,也就是界面渲染完毕后,它才会+1
         | 
| 1302 | 
            +
            	executeNumber:0,
         | 
| 1303 | 
            +
             | 
| 1288 1304 | 
             
            	/*
         | 
| 1289 1305 | 
             
            		执行翻译操作。翻译的是 nodeQueue 中的
         | 
| 1290 1306 | 
             
            		docs 如果传入,那么翻译的只是传入的这个docs的。传入如 [document.getElementById('xxx'),document.getElementById('xxx'),...]
         | 
| @@ -1801,6 +1817,7 @@ var translate = { | |
| 1801 1817 | 
             
            		if(fanyiLangs.length == 0){
         | 
| 1802 1818 | 
             
            			//没有需要翻译的,直接退出
         | 
| 1803 1819 | 
             
            			translate.state = 0;
         | 
| 1820 | 
            +
            			translate.executeNumber++;
         | 
| 1804 1821 | 
             
            			return;
         | 
| 1805 1822 | 
             
            		}
         | 
| 1806 1823 |  | 
| @@ -1850,6 +1867,8 @@ var translate = { | |
| 1850 1867 | 
             
            		//状态
         | 
| 1851 1868 | 
             
            		translate.state = 20;
         | 
| 1852 1869 |  | 
| 1870 | 
            +
             | 
| 1871 | 
            +
             | 
| 1853 1872 | 
             
            		//进行掉接口翻译
         | 
| 1854 1873 | 
             
            		for(var lang_index in fanyiLangs){ //一维数组,取语言
         | 
| 1855 1874 | 
             
            			var lang = fanyiLangs[lang_index];
         | 
| @@ -1858,6 +1877,7 @@ var translate = { | |
| 1858 1877 | 
             
            			if(typeof(translateTextArray[lang]) == 'undefined' || translateTextArray[lang].length < 1){
         | 
| 1859 1878 | 
             
            				console.log('异常,理论上不应该存在: typeof(translateTextArray[lang]) == \'undefined\' || translateTextArray[lang].length < 1');
         | 
| 1860 1879 | 
             
            				translate.state = 0;
         | 
| 1880 | 
            +
            				translate.executeNumber++;
         | 
| 1861 1881 | 
             
            				return;
         | 
| 1862 1882 | 
             
            			}
         | 
| 1863 1883 |  | 
| @@ -1867,11 +1887,21 @@ var translate = { | |
| 1867 1887 | 
             
            				console.log(translateTextArray[lang][ttr_index])
         | 
| 1868 1888 | 
             
            			}*/
         | 
| 1869 1889 |  | 
| 1890 | 
            +
            			//将需要请求翻译接口的加入到 translate.translateRequest 中
         | 
| 1891 | 
            +
            			if(typeof(translate.translateRequest[uuid]) == 'undefined' || translate.translateRequest[uuid] == null){
         | 
| 1892 | 
            +
            				translate.translateRequest[uuid] = {};
         | 
| 1893 | 
            +
            			}
         | 
| 1894 | 
            +
            			translate.translateRequest[uuid][lang] = {};
         | 
| 1895 | 
            +
            			translate.translateRequest[uuid][lang].executeFinish = 0; //是否执行完毕,0是执行中, 1是执行完毕(不管是失败还是成功) 而且执行完毕是指ajax请求获得响应,并且dom渲染完成之后才算完毕。当然如果ajax接口失败那也是直接算完毕
         | 
| 1896 | 
            +
            			translate.translateRequest[uuid][lang].addtime = Math.floor(Date.now() / 1000);
         | 
| 1897 | 
            +
             | 
| 1898 | 
            +
             | 
| 1870 1899 | 
             
            			/*** 翻译开始 ***/
         | 
| 1871 1900 | 
             
            			var url = translate.request.api.translate;
         | 
| 1872 1901 | 
             
            			var data = {
         | 
| 1873 1902 | 
             
            				from:lang,
         | 
| 1874 1903 | 
             
            				to:translate.to,
         | 
| 1904 | 
            +
            				lowercase:translate.whole.isEnableAll? '0':'1', //首字母大写
         | 
| 1875 1905 | 
             
            				//text:JSON.stringify(translateTextArray[lang])
         | 
| 1876 1906 | 
             
            				text:encodeURIComponent(JSON.stringify(translateTextArray[lang]))
         | 
| 1877 1907 | 
             
            			};
         | 
| @@ -1880,6 +1910,10 @@ var translate = { | |
| 1880 1910 | 
             
            				//console.log(data); 
         | 
| 1881 1911 | 
             
            				//console.log(translateTextArray[data.from]);
         | 
| 1882 1912 | 
             
            				if(data.result == 0){
         | 
| 1913 | 
            +
            					translate.translateRequest[uuid][lang].result = 2;
         | 
| 1914 | 
            +
            					translate.translateRequest[uuid][lang].executeFinish = 1; //1是执行完毕
         | 
| 1915 | 
            +
            					translate.translateRequest[uuid][lang].stoptime = Math.floor(Date.now() / 1000);
         | 
| 1916 | 
            +
            					translate.waitingExecute.isAllExecuteFinish();
         | 
| 1883 1917 | 
             
            					console.log('=======ERROR START=======');
         | 
| 1884 1918 | 
             
            					console.log(translateTextArray[data.from]);
         | 
| 1885 1919 | 
             
            					//console.log(encodeURIComponent(JSON.stringify(translateTextArray[data.from])));
         | 
| @@ -1887,6 +1921,7 @@ var translate = { | |
| 1887 1921 | 
             
            					console.log('response : '+data.info);
         | 
| 1888 1922 | 
             
            					console.log('=======ERROR END  =======');
         | 
| 1889 1923 | 
             
            					//translate.temp_executeFinishNumber++; //记录执行完的次数
         | 
| 1924 | 
            +
             | 
| 1890 1925 | 
             
            					return;
         | 
| 1891 1926 | 
             
            				}
         | 
| 1892 1927 |  | 
| @@ -1950,12 +1985,49 @@ var translate = { | |
| 1950 1985 | 
             
            				task.execute(); //执行渲染任务
         | 
| 1951 1986 | 
             
            				//translate.temp_executeFinishNumber++; //记录执行完的次数
         | 
| 1952 1987 |  | 
| 1988 | 
            +
            				translate.translateRequest[uuid][lang].result = 1;
         | 
| 1989 | 
            +
            				translate.translateRequest[uuid][lang].executeFinish = 1; //1是执行完毕
         | 
| 1990 | 
            +
            				translate.translateRequest[uuid][lang].stoptime = Math.floor(Date.now() / 1000);
         | 
| 1991 | 
            +
            				translate.waitingExecute.isAllExecuteFinish();
         | 
| 1992 | 
            +
            			}, function(xhr){
         | 
| 1993 | 
            +
            				translate.translateRequest[uuid][lang].executeFinish = 1; //1是执行完毕
         | 
| 1994 | 
            +
            				translate.translateRequest[uuid][lang].stoptime = Math.floor(Date.now() / 1000);
         | 
| 1995 | 
            +
            				translate.translateRequest[uuid][lang].result = 3;
         | 
| 1996 | 
            +
            				translate.waitingExecute.isAllExecuteFinish();
         | 
| 1953 1997 | 
             
            			});
         | 
| 1954 1998 | 
             
            			/*** 翻译end ***/
         | 
| 1955 | 
            -
             | 
| 1956 | 
            -
            			
         | 
| 1957 1999 | 
             
            		}
         | 
| 1958 2000 | 
             
            	},
         | 
| 2001 | 
            +
             | 
| 2002 | 
            +
            	/**
         | 
| 2003 | 
            +
            	 * 翻译请求记录
         | 
| 2004 | 
            +
            	 * 一维:key:uuid,也就是execute每次执行都会创建一个翻译队列,这个是翻译队列的唯一标识。  这个uuid跟 nodeQueue 的uuid是一样的
         | 
| 2005 | 
            +
            	 * 		value:对象
         | 
| 2006 | 
            +
            	 * 二维: 对象,包含:
         | 
| 2007 | 
            +
            	 * 		from 存放的是要翻译的源语种,比如要讲简体中文翻译为英文,这里存放的就是 chinese_simplified
         | 
| 2008 | 
            +
            	 * 		state 是否执行完毕,0是执行中, 1是执行完毕(不管是失败还是成功) 而且执行完毕是指ajax请求获得响应,并且dom渲染完成之后才算完毕。当然如果ajax接口失败那也是直接算完毕
         | 
| 2009 | 
            +
            	 * 		addtime 这条数据加入到本数组的时间,也就是进行ajax请求开始那一刻的时间,10位时间戳
         | 
| 2010 | 
            +
            	 * 		stoptime 执行完毕的时间,也就是state转为2那一刻的时间
         | 
| 2011 | 
            +
            	 * 		result 执行结果, 0 是还没执行完,等待执行完, > 0 是执行完了有结果了,  
         | 
| 2012 | 
            +
            	 * 												  1 是执行成功
         | 
| 2013 | 
            +
            	 * 												  2 是接口有响应,也是200响应,但是接口响应的结果返回了错误,也就是返回了 {result:0, info:'...'}
         | 
| 2014 | 
            +
            	 * 												  3 是接口不是200响应码
         | 
| 2015 | 
            +
            	 * 
         | 
| 2016 | 
            +
            	 */
         | 
| 2017 | 
            +
            	translateRequest:{
         | 
| 2018 | 
            +
            		/* 
         | 
| 2019 | 
            +
            		uuid:[
         | 
| 2020 | 
            +
            			'chinese_simplified':{
         | 
| 2021 | 
            +
            				executeFinish:0,
         | 
| 2022 | 
            +
            				addtime:150001111,
         | 
| 2023 | 
            +
            				stoptime:150001111,
         | 
| 2024 | 
            +
            				result:0
         | 
| 2025 | 
            +
            			},
         | 
| 2026 | 
            +
            			...
         | 
| 2027 | 
            +
            		] 
         | 
| 2028 | 
            +
            		*/
         | 
| 2029 | 
            +
            	},
         | 
| 2030 | 
            +
             | 
| 1959 2031 | 
             
            	/*
         | 
| 1960 2032 | 
             
            		将已成功翻译并渲染的node节点进行缓存记录
         | 
| 1961 2033 | 
             
            		key: node节点的唯一标识符,通过 nodeuuid.uuid() 生成
         | 
| @@ -3955,7 +4027,7 @@ var translate = { | |
| 3955 4027 | 
             
            				translate.selectLanguageTag
         | 
| 3956 4028 | 
             
            				translate.execute(); //执行翻译
         | 
| 3957 4029 | 
             
            			}
         | 
| 3958 | 
            -
            		});
         | 
| 4030 | 
            +
            		}, null);
         | 
| 3959 4031 | 
             
            	},
         | 
| 3960 4032 |  | 
| 3961 4033 | 
             
            	util:{
         | 
| @@ -4469,7 +4541,7 @@ var translate = { | |
| 4469 4541 | 
             
            			 * @param data 请求的参数数据
         | 
| 4470 4542 | 
             
            			 * @param func 请求完成的回调,传入如 function(data){ console.log(data); }
         | 
| 4471 4543 | 
             
            			 */
         | 
| 4472 | 
            -
            			translate:function(path, data, func){
         | 
| 4544 | 
            +
            			translate:function(path, data, func, abnormalFunc){
         | 
| 4473 4545 | 
             
            				var textArray = JSON.parse(decodeURIComponent(data.text));
         | 
| 4474 4546 | 
             
            				let translateTextArray = translate.util.split(textArray, 48000);
         | 
| 4475 4547 | 
             
            				//console.log(translateTextArray);
         | 
| @@ -4544,10 +4616,7 @@ var translate = { | |
| 4544 4616 | 
             
            							}
         | 
| 4545 4617 |  | 
| 4546 4618 | 
             
            							func(d);
         | 
| 4547 | 
            -
            						}, 'post', true, {'Authorization':'Bearer '+auth, 'Content-Type':'application/json'},  | 
| 4548 | 
            -
            							console.log('---------error--------');
         | 
| 4549 | 
            -
            							console.log('edge translate service error, http code : '+xhr.status + ', response text : '+xhr.responseText);
         | 
| 4550 | 
            -
            						}, true);
         | 
| 4619 | 
            +
            						}, 'post', true, {'Authorization':'Bearer '+auth, 'Content-Type':'application/json'}, abnormalFunc, true);
         | 
| 4551 4620 |  | 
| 4552 4621 |  | 
| 4553 4622 | 
             
            					}
         | 
| @@ -4844,8 +4913,9 @@ var translate = { | |
| 4844 4913 | 
             
            		 * 		}
         | 
| 4845 4914 | 
             
            		 * 		
         | 
| 4846 4915 | 
             
            		 * @param func 请求完成的回调,传入如 function(data){ console.log(data); }
         | 
| 4916 | 
            +
            		 * @param abnormalFunc 响应异常所执行的方法,响应码不是200就会执行这个方法 ,传入如 function(xhr){}  另外这里的 xhr 会额外有个参数  xhr.requestURL 返回当前请求失败的url
         | 
| 4847 4917 | 
             
            		 */
         | 
| 4848 | 
            -
            		post:function(path, data, func){
         | 
| 4918 | 
            +
            		post:function(path, data, func, abnormalFunc){
         | 
| 4849 4919 | 
             
            			var headers = {
         | 
| 4850 4920 | 
             
            				'content-type':'application/x-www-form-urlencoded',
         | 
| 4851 4921 | 
             
            			};
         | 
| @@ -4861,7 +4931,7 @@ var translate = { | |
| 4861 4931 | 
             
            			//if(url.indexOf('edge') > -1 && path == translate.request.api.translate){
         | 
| 4862 4932 | 
             
            			if(translate.service.name == 'client.edge'){	
         | 
| 4863 4933 | 
             
            				if(path == translate.request.api.translate){
         | 
| 4864 | 
            -
            					translate.service.edge.translate(path, data, func);
         | 
| 4934 | 
            +
            					translate.service.edge.translate(path, data, func, abnormalFunc);
         | 
| 4865 4935 | 
             
            					return;
         | 
| 4866 4936 | 
             
            				}
         | 
| 4867 4937 | 
             
            				if(path == translate.request.api.language){
         | 
| @@ -4877,7 +4947,7 @@ var translate = { | |
| 4877 4947 | 
             
            			}
         | 
| 4878 4948 | 
             
            			// ------- edge end --------
         | 
| 4879 4949 |  | 
| 4880 | 
            -
            			this.send(path, data, func, 'post', true, headers,  | 
| 4950 | 
            +
            			this.send(path, data, func, 'post', true, headers, abnormalFunc, true);
         | 
| 4881 4951 | 
             
            		},
         | 
| 4882 4952 | 
             
            		/**
         | 
| 4883 4953 | 
             
            		 * 发送请求
         | 
| @@ -5096,7 +5166,7 @@ var translate = { | |
| 5096 5166 | 
             
            				}
         | 
| 5097 5167 |  | 
| 5098 5168 | 
             
            				func(data);
         | 
| 5099 | 
            -
            			});
         | 
| 5169 | 
            +
            			}, null);
         | 
| 5100 5170 | 
             
            		},
         | 
| 5101 5171 | 
             
            		listener:{
         | 
| 5102 5172 | 
             
            			minIntervalTime:800, // 两次触发的最小间隔时间,单位是毫秒,这里默认是800毫秒。最小填写时间为 200毫秒
         | 
| @@ -5447,7 +5517,7 @@ var translate = { | |
| 5447 5517 | 
             
            				curTooltipEle.style.top =selectionY+20+"px";
         | 
| 5448 5518 | 
             
            				curTooltipEle.style.left = selectionX+50+"px" ;
         | 
| 5449 5519 | 
             
            				curTooltipEle.style.display = "";
         | 
| 5450 | 
            -
            			});
         | 
| 5520 | 
            +
            			}, null);
         | 
| 5451 5521 | 
             
            		},
         | 
| 5452 5522 | 
             
            		start:function () {
         | 
| 5453 5523 | 
             
            			//新建一个tooltip元素节点用于显示翻译
         | 
| @@ -5618,6 +5688,22 @@ var nodeuuid = { | |
| 5618 5688 | 
             
            		}
         | 
| 5619 5689 | 
             
            		return uuid;
         | 
| 5620 5690 | 
             
            	},
         | 
| 5691 | 
            +
            	/*
         | 
| 5692 | 
            +
            		开启远程调试能力,当你使用中遇到问题,需要向开源作者求助时,可以在你项目中主动调用这个方法,也就是 translate.enableRemoteDebug(); 即可启动远程调试能力
         | 
| 5693 | 
            +
            		开源项目作者就可以对你当前出错的页面进行远程调试排查问题所在。当然前提是你的页面要保持别关闭。
         | 
| 5694 | 
            +
             | 
| 5695 | 
            +
            		这个能力是通过开源项目 https://github.com/HuolalaTech/page-spy-web 来实现的
         | 
| 5696 | 
            +
            		
         | 
| 5697 | 
            +
            	*/
         | 
| 5698 | 
            +
            	enableRemoteDebug:function(){
         | 
| 5699 | 
            +
             | 
| 5700 | 
            +
            		/*
         | 
| 5701 | 
            +
             | 
| 5702 | 
            +
            			待同事实现
         | 
| 5703 | 
            +
            		*/
         | 
| 5704 | 
            +
             | 
| 5705 | 
            +
            	}
         | 
| 5706 | 
            +
             | 
| 5621 5707 |  | 
| 5622 5708 | 
             
            }
         | 
| 5623 5709 | 
             
            console.log('------ translate.js ------\nTwo lines of js html automatic translation, page without change, no language configuration file, no API Key, SEO friendly! Open warehouse : https://github.com/xnx3/translate \n两行js实现html全自动翻译。 无需改动页面、无语言配置文件、无API Key、对SEO友好!完全开源,代码仓库:https://gitee.com/mail_osc/translate');
         | 
    
        package/package.json
    CHANGED
    
    | @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            {
         | 
| 2 2 | 
             
              "name": "i18n-jsautotranslate",
         | 
| 3 | 
            -
              "version": "3. | 
| 3 | 
            +
              "version": "3.13.0",
         | 
| 4 4 | 
             
              "description": "Two lines of js realize automatic html translation. No need to change the page, no language configuration file, no API key, SEO friendly!",
         | 
| 5 5 | 
             
              "main": "index.js",
         | 
| 6 6 | 
             
              "scripts": {
         |