i18n-jsautotranslate 3.12.7 → 3.12.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/README.md +1 -1
- package/index.js +95 -13
- package/package.json +1 -1
    
        package/README.md
    CHANGED
    
    | @@ -145,7 +145,7 @@ translate.execute();//进行翻译 | |
| 145 145 | 
             
                const translate = require("i18n-jsautotranslate")
         | 
| 146 146 | 
             
                ```
         | 
| 147 147 |  | 
| 148 | 
            -
            [Vue2 中使用 translate.js 在线 Demo](https://lruihao.github.io/vue-el-demo/#/translate-js)
         | 
| 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 151 | 
             
            截止 2023.7 月份时,本项目的后端免费翻译服务的请求量就已经达到了 1.5亿次/月 的规模,并且还在非常快速的持续增大,包括一些城投集团像是长沙城投、以及一些政府单位像是环境保障局、企业国际化经营服务平台、海外矿业产业联合、国际潮青联谊年会、人力资源和社会保障局、政务服务网、海外的一些平台如futrom智能住宅、bitheime全球区块链等等都在广泛使用。
         | 
    
        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.12. | 
| 15 | 
            +
            	version: '3.12.9.20250116',
         | 
| 16 16 | 
             
            	// AUTO_VERSION_END
         | 
| 17 17 | 
             
            	/*
         | 
| 18 18 | 
             
            		当前使用的版本,默认使用v2. 可使用 setUseVersion2(); 
         | 
| @@ -852,6 +852,7 @@ var translate = { | |
| 852 852 | 
             
            			return doms;
         | 
| 853 853 | 
             
            		}
         | 
| 854 854 | 
             
            	},
         | 
| 855 | 
            +
            	
         | 
| 855 856 | 
             
            	listener:{
         | 
| 856 857 | 
             
            		//当前页面打开后,是否已经执行完execute() 方法进行翻译了,只要执行完一次,这里便是true。 (多种语言的API请求完毕并已渲染html)
         | 
| 857 858 | 
             
            		//isExecuteFinish:false,
         | 
| @@ -1116,16 +1117,22 @@ var translate = { | |
| 1116 1117 | 
             
            									translate.inProgressNodes[ini].number = translate.inProgressNodes[ini].number - 1;
         | 
| 1117 1118 | 
             
            									//console.log("inProgressNodes -- number: "+translate.inProgressNodes[ini].number+', text:'+ipnode.nodeValue);
         | 
| 1118 1119 | 
             
            									if(translate.inProgressNodes[ini].number < 1){
         | 
| 1119 | 
            -
            										
         | 
| 1120 | 
            -
            										
         | 
| 1121 | 
            -
             | 
| 1122 | 
            -
             | 
| 1123 | 
            -
             | 
| 1124 | 
            -
             | 
| 1120 | 
            +
            										translate.inProgressNodes.splice(ini,1);	
         | 
| 1121 | 
            +
            										//console.log("inProgressNodes -- 减去node length: "+translate.inProgressNodes.length+', text:'+ipnode.nodeValue);
         | 
| 1122 | 
            +
            									}
         | 
| 1123 | 
            +
             | 
| 1124 | 
            +
            									//当前已经全部翻译并渲染完毕,则将其恢复到闲置状态,闲置状态则可以进行下一轮翻译。
         | 
| 1125 | 
            +
            									if(translate.inProgressNodes.length == 0){
         | 
| 1126 | 
            +
            										setTimeout(function(){
         | 
| 1127 | 
            +
            											translate.state = 0;
         | 
| 1128 | 
            +
            										}, 50);
         | 
| 1129 | 
            +
            										//console.log('set translate.state = 0');
         | 
| 1125 1130 | 
             
            									}
         | 
| 1131 | 
            +
            									
         | 
| 1126 1132 | 
             
            									break;
         | 
| 1127 1133 | 
             
            								}
         | 
| 1128 1134 | 
             
            							}
         | 
| 1135 | 
            +
            							
         | 
| 1129 1136 | 
             
            						}, 50, ipnode);
         | 
| 1130 1137 |  | 
| 1131 1138 | 
             
            						translate.element.nodeAnalyse.set(this.nodes[hash][task_index], task.originalText, task.resultText, task['attribute']);
         | 
| @@ -1221,10 +1228,76 @@ var translate = { | |
| 1221 1228 | 
             
            			}
         | 
| 1222 1229 | 
             
            		}
         | 
| 1223 1230 | 
             
            	},
         | 
| 1231 | 
            +
             | 
| 1232 | 
            +
             | 
| 1233 | 
            +
            	/*
         | 
| 1234 | 
            +
            		当前状态,执行状态
         | 
| 1235 | 
            +
            		0 空闲(或者执行翻译完毕)
         | 
| 1236 | 
            +
            		10 扫描要翻译的node
         | 
| 1237 | 
            +
            		20 ajax通过文本翻译接口开始请求,在发起ajax请求前,状态变为20,然后再发起ajax请求
         | 
| 1238 | 
            +
            		至于翻译完毕后进行渲染,这个就不单独记录了,因为如果页面存在不同的语种,不同的语种是按照不同的请求来的,是多个异步同时进行的过程
         | 
| 1239 | 
            +
            	*/
         | 
| 1240 | 
            +
            	state:0,
         | 
| 1241 | 
            +
             | 
| 1242 | 
            +
            	/*
         | 
| 1243 | 
            +
            		等待翻译队列  v3.12.6 增加
         | 
| 1244 | 
            +
            		当前是否有需要等待翻译的任务,这个目的是为了保证同一时间 translate.execute() 只有一次在执行,免得被新手前端给造成死循环,导致edge翻译给你屏蔽,用户网页还卡死
         | 
| 1245 | 
            +
            		当执行 translate.execute() 时,会先判断状态 translate.state 是否是0空闲的状态,如果空闲,才会执行,如果不是空闲,则不会执行,而是进入到这里进行等待,等待执行完毕后 translate.state 变成0空闲之后,再来执行这里的
         | 
| 1246 | 
            +
            		
         | 
| 1247 | 
            +
            	*/
         | 
| 1248 | 
            +
            	waitingExecute:{
         | 
| 1249 | 
            +
             | 
| 1250 | 
            +
            		/*
         | 
| 1251 | 
            +
            			一维数组形态,存放执行的翻译任务
         | 
| 1252 | 
            +
            			二维对象形态,存放执行传入的 docs
         | 
| 1253 | 
            +
            		*/
         | 
| 1254 | 
            +
            		queue:[],
         | 
| 1255 | 
            +
            		/*
         | 
| 1256 | 
            +
            			增加一个翻译任务到翻译队列中
         | 
| 1257 | 
            +
            			docs 同 translate.execute(docs) 的传入参数
         | 
| 1258 | 
            +
            		 */ 
         | 
| 1259 | 
            +
            		add:function(docs){
         | 
| 1260 | 
            +
            			//向数组末尾追加
         | 
| 1261 | 
            +
            			translate.waitingExecute.queue.push(docs);
         | 
| 1262 | 
            +
            			//开启一个定时器进行触发
         | 
| 1263 | 
            +
            			let intervalId = setInterval(function() {
         | 
| 1264 | 
            +
            				if(translate.state == 0){
         | 
| 1265 | 
            +
            					//清除定时器,结束循环
         | 
| 1266 | 
            +
            					clearInterval(intervalId);
         | 
| 1267 | 
            +
            					var docs = translate.waitingExecute.get();
         | 
| 1268 | 
            +
            					translate.execute(docs);
         | 
| 1269 | 
            +
            					//console.log('stop waitingExecute setInterval');
         | 
| 1270 | 
            +
            				}
         | 
| 1271 | 
            +
            			}, 500);
         | 
| 1272 | 
            +
            		},
         | 
| 1273 | 
            +
            		/*
         | 
| 1274 | 
            +
            			从 quque 中取第一个元素,同时将其从queue中删除掉它。
         | 
| 1275 | 
            +
            			如果取的时候 quque已经没有任何元素了,会返回 null, 但是理论上不会出现null
         | 
| 1276 | 
            +
            		 */
         | 
| 1277 | 
            +
            		get:function(){
         | 
| 1278 | 
            +
            			//使用 shift 方法删除数组的第一个元素,并将第一个元素的值返回
         | 
| 1279 | 
            +
            			if(translate.waitingExecute.queue.length > 0){
         | 
| 1280 | 
            +
            				return translate.waitingExecute.queue.shift();
         | 
| 1281 | 
            +
            			}else{
         | 
| 1282 | 
            +
            				console.log('警告, translate.waitingExecute.get 出现异常,quque已空,但还往外取。');
         | 
| 1283 | 
            +
            				return null;
         | 
| 1284 | 
            +
            			}
         | 
| 1285 | 
            +
            		}
         | 
| 1286 | 
            +
            	},
         | 
| 1224 1287 |  | 
| 1225 | 
            -
            	 | 
| 1226 | 
            -
             | 
| 1288 | 
            +
            	/*
         | 
| 1289 | 
            +
            		执行翻译操作。翻译的是 nodeQueue 中的
         | 
| 1290 | 
            +
            		docs 如果传入,那么翻译的只是传入的这个docs的。传入如 [document.getElementById('xxx'),document.getElementById('xxx'),...]
         | 
| 1291 | 
            +
            			 如果不传入或者传入null,则是翻译整个网页所有能翻译的元素	
         | 
| 1292 | 
            +
            	 */ 
         | 
| 1227 1293 | 
             
            	execute:function(docs){
         | 
| 1294 | 
            +
            		if(translate.state != 0){
         | 
| 1295 | 
            +
            			console.log('当前翻译还未完结,新的翻译任务已加入等待翻译队列中,待翻译结束后便会执行当前翻译任务。');
         | 
| 1296 | 
            +
            			translate.waitingExecute.add(docs);
         | 
| 1297 | 
            +
            			return;
         | 
| 1298 | 
            +
            		}
         | 
| 1299 | 
            +
            		translate.state = 1;
         | 
| 1300 | 
            +
            		//console.log('translate.state = 1');
         | 
| 1228 1301 | 
             
            		if(typeof(docs) != 'undefined'){
         | 
| 1229 1302 | 
             
            			//execute传入参数,只有v2版本才支持
         | 
| 1230 1303 | 
             
            			translate.useVersion = 'v2';
         | 
| @@ -1285,6 +1358,7 @@ var translate = { | |
| 1285 1358 | 
             
            			}
         | 
| 1286 1359 |  | 
| 1287 1360 | 
             
            			//没有指定翻译目标语言、又没自动获取用户本国语种,则不翻译
         | 
| 1361 | 
            +
            			translate.state = 0;
         | 
| 1288 1362 | 
             
            			return;
         | 
| 1289 1363 | 
             
            		}
         | 
| 1290 1364 |  | 
| @@ -1294,6 +1368,7 @@ var translate = { | |
| 1294 1368 | 
             
            				//这是自定义设置的允许翻译本地语种中,跟本地语种不一致的语言进行翻译
         | 
| 1295 1369 |  | 
| 1296 1370 | 
             
            			}else{
         | 
| 1371 | 
            +
            				translate.state = 0;
         | 
| 1297 1372 | 
             
            				return;
         | 
| 1298 1373 | 
             
            			}
         | 
| 1299 1374 | 
             
            		}
         | 
| @@ -1312,14 +1387,17 @@ var translate = { | |
| 1312 1387 | 
             
            			其实2、3都是通过 getDocuments() 取,在getDocuments() 就对2、3进行了判断
         | 
| 1313 1388 | 
             
            		*/
         | 
| 1314 1389 | 
             
            		var all;
         | 
| 1315 | 
            -
            		if(typeof(docs) != 'undefined'){
         | 
| 1390 | 
            +
            		if(typeof(docs) != 'undefined' && docs != null){
         | 
| 1316 1391 | 
             
            			//1. 这个方法已经指定的翻译 nodes
         | 
| 1317 1392 |  | 
| 1393 | 
            +
            			/* v3.12.6 注释,转到判断非null
         | 
| 1318 1394 | 
             
            			if(docs == null){
         | 
| 1319 1395 | 
             
            				//要翻译的目标区域不存在
         | 
| 1320 1396 | 
             
            				console.log('translate.execute(...) 中传入的要翻译的目标区域不存在。');
         | 
| 1397 | 
            +
            				translate.state = 0;
         | 
| 1321 1398 | 
             
            				return;
         | 
| 1322 1399 | 
             
            			}
         | 
| 1400 | 
            +
            			*/
         | 
| 1323 1401 |  | 
| 1324 1402 | 
             
            			if(typeof(docs.length) == 'undefined'){
         | 
| 1325 1403 | 
             
            				//不是数组,是单个元素
         | 
| @@ -1722,6 +1800,7 @@ var translate = { | |
| 1722 1800 | 
             
            		//console.log(translate.nodeQueue[uuid]['list'])
         | 
| 1723 1801 | 
             
            		if(fanyiLangs.length == 0){
         | 
| 1724 1802 | 
             
            			//没有需要翻译的,直接退出
         | 
| 1803 | 
            +
            			translate.state = 0;
         | 
| 1725 1804 | 
             
            			return;
         | 
| 1726 1805 | 
             
            		}
         | 
| 1727 1806 |  | 
| @@ -1767,8 +1846,9 @@ var translate = { | |
| 1767 1846 | 
             
            			}
         | 
| 1768 1847 | 
             
            		}
         | 
| 1769 1848 | 
             
            		//加入 translate.inProgressNodes -- end
         | 
| 1770 | 
            -
             | 
| 1771 | 
            -
             | 
| 1849 | 
            +
            	
         | 
| 1850 | 
            +
            		//状态
         | 
| 1851 | 
            +
            		translate.state = 20;
         | 
| 1772 1852 |  | 
| 1773 1853 | 
             
            		//进行掉接口翻译
         | 
| 1774 1854 | 
             
            		for(var lang_index in fanyiLangs){ //一维数组,取语言
         | 
| @@ -1776,6 +1856,8 @@ var translate = { | |
| 1776 1856 | 
             
            			//console.log(typeof(translateTextArray[lang]))
         | 
| 1777 1857 |  | 
| 1778 1858 | 
             
            			if(typeof(translateTextArray[lang]) == 'undefined' || translateTextArray[lang].length < 1){
         | 
| 1859 | 
            +
            				console.log('异常,理论上不应该存在: typeof(translateTextArray[lang]) == \'undefined\' || translateTextArray[lang].length < 1');
         | 
| 1860 | 
            +
            				translate.state = 0;
         | 
| 1779 1861 | 
             
            				return;
         | 
| 1780 1862 | 
             
            			}
         | 
| 1781 1863 |  | 
| @@ -4363,7 +4445,7 @@ var translate = { | |
| 4363 4445 | 
             
            			},
         | 
| 4364 4446 |  | 
| 4365 4447 | 
             
            			language:{
         | 
| 4366 | 
            -
            				json:[{"id":"ukrainian","name":" | 
| 4448 | 
            +
            				json:[{"id":"ukrainian","name":"Україна","serviceId":"uk"},{"id":"norwegian","name":"Norge","serviceId":"no"},{"id":"welsh","name":"Iaith Weleg","serviceId":"cy"},{"id":"dutch","name":"nederlands","serviceId":"nl"},{"id":"japanese","name":"日本語","serviceId":"ja"},{"id":"filipino","name":"Pilipino","serviceId":"fil"},{"id":"english","name":"English","serviceId":"en"},{"id":"lao","name":"ກະຣຸນາ","serviceId":"lo"},{"id":"telugu","name":"తెలుగుName","serviceId":"te"},{"id":"romanian","name":"Română","serviceId":"ro"},{"id":"nepali","name":"नेपालीName","serviceId":"ne"},{"id":"french","name":"Français","serviceId":"fr"},{"id":"haitian_creole","name":"Kreyòl ayisyen","serviceId":"ht"},{"id":"czech","name":"český","serviceId":"cs"},{"id":"swedish","name":"Svenska","serviceId":"sv"},{"id":"russian","name":"Русский язык","serviceId":"ru"},{"id":"malagasy","name":"Malagasy","serviceId":"mg"},{"id":"burmese","name":"ဗာရမ်","serviceId":"my"},{"id":"pashto","name":"پښتوName","serviceId":"ps"},{"id":"thai","name":"คนไทย","serviceId":"th"},{"id":"armenian","name":"Արմենյան","serviceId":"hy"},{"id":"chinese_simplified","name":"简体中文","serviceId":"zh-CHS"},{"id":"persian","name":"Persian","serviceId":"fa"},{"id":"chinese_traditional","name":"繁體中文","serviceId":"zh-CHT"},{"id":"kurdish","name":"Kurdî","serviceId":"ku"},{"id":"turkish","name":"Türkçe","serviceId":"tr"},{"id":"hindi","name":"हिन्दी","serviceId":"hi"},{"id":"bulgarian","name":"български","serviceId":"bg"},{"id":"malay","name":"Malay","serviceId":"ms"},{"id":"swahili","name":"Kiswahili","serviceId":"sw"},{"id":"oriya","name":"ଓଡିଆ","serviceId":"or"},{"id":"icelandic","name":"ÍslandName","serviceId":"is"},{"id":"irish","name":"Íris","serviceId":"ga"},{"id":"khmer","name":"ភាសាខ្មែរName","serviceId":"km"},{"id":"gujarati","name":"ગુજરાતી","serviceId":"gu"},{"id":"slovak","name":"Slovenská","serviceId":"sk"},{"id":"kannada","name":"ಕನ್ನಡ್Name","serviceId":"kn"},{"id":"hebrew","name":"היברית","serviceId":"he"},{"id":"hungarian","name":"magyar","serviceId":"hu"},{"id":"marathi","name":"मराठीName","serviceId":"mr"},{"id":"tamil","name":"தாமில்","serviceId":"ta"},{"id":"estonian","name":"eesti keel","serviceId":"et"},{"id":"malayalam","name":"മലമാലം","serviceId":"ml"},{"id":"inuktitut","name":"ᐃᓄᒃᑎᑐᑦ","serviceId":"iu"},{"id":"arabic","name":"بالعربية","serviceId":"ar"},{"id":"deutsch","name":"Deutsch","serviceId":"de"},{"id":"slovene","name":"slovenščina","serviceId":"sl"},{"id":"bengali","name":"বেঙ্গালী","serviceId":"bn"},{"id":"urdu","name":"اوردو","serviceId":"ur"},{"id":"azerbaijani","name":"azerbaijani","serviceId":"az"},{"id":"portuguese","name":"português","serviceId":"pt"},{"id":"samoan","name":"lifiava","serviceId":"sm"},{"id":"afrikaans","name":"afrikaans","serviceId":"af"},{"id":"tongan","name":"汤加语","serviceId":"to"},{"id":"greek","name":"ελληνικά","serviceId":"el"},{"id":"indonesian","name":"IndonesiaName","serviceId":"id"},{"id":"spanish","name":"Español","serviceId":"es"},{"id":"danish","name":"dansk","serviceId":"da"},{"id":"amharic","name":"amharic","serviceId":"am"},{"id":"punjabi","name":"ਪੰਜਾਬੀName","serviceId":"pa"},{"id":"albanian","name":"albanian","serviceId":"sq"},{"id":"lithuanian","name":"Lietuva","serviceId":"lt"},{"id":"italian","name":"italiano","serviceId":"it"},{"id":"vietnamese","name":"Tiếng Việt","serviceId":"vi"},{"id":"korean","name":"한국어","serviceId":"ko"},{"id":"maltese","name":"Malti","serviceId":"mt"},{"id":"finnish","name":"suomi","serviceId":"fi"},{"id":"catalan","name":"català","serviceId":"ca"},{"id":"croatian","name":"hrvatski","serviceId":"hr"},{"id":"bosnian","name":"bosnian","serviceId":"bs-Latn"},{"id":"polish","name":"Polski","serviceId":"pl"},{"id":"latvian","name":"latviešu","serviceId":"lv"},{"id":"maori","name":"Maori","serviceId":"mi"}],
         | 
| 4367 4449 | 
             
            				/*
         | 
| 4368 4450 | 
             
            					获取map形式的语言列表 
         | 
| 4369 4451 | 
             
            					key为 translate.service 的 name  
         | 
    
        package/package.json
    CHANGED
    
    | @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            {
         | 
| 2 2 | 
             
              "name": "i18n-jsautotranslate",
         | 
| 3 | 
            -
              "version": "3.12. | 
| 3 | 
            +
              "version": "3.12.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 | 
             
              "scripts": {
         |