1/* 2 3 å½é åï¼ç½é¡µèªå¨ç¿»è¯ã 4 ä½è ï¼ç®¡é·é¸£ 5 å¼åä»åºï¼https://github.com/xnx3/translate 6 */ 7if(typeof(translate) == 'object' && typeof(translate.version) == 'string'){ 8 throw new Error('translate.js å·²ç»å è½½è¿ä¸æ¬¡äºï¼å½åæ¯éå¤å è½½ï¼é¿å ä½ çç¿»è¯åºç°å¼å¸¸ï¼å·²å¸®ä½ æ¦æªæ¤æ¬¡å è½½ãæ¬ä¿¡æ¯åªæ¯ç»ä½ ä¸ä¸ªæç¤ºï¼ä½ å¯ä»¥æ£æ¥ä¸ä¸ä½ ç项ç®ä¸æ¯å¦åºç°äºéå¤å¼å ¥ translate.js ï¼å½ç¶ï¼è¿ä¸ªå¼å¸¸å¹¶ä¸ä¼å½±åå°ä½ çå ·ä½ä½¿ç¨ï¼å®å·²ç»èªå¨å¸®ä½ å¤çæ¦æªäºè¿ä¸ªå¼å¸¸ï¼åªä¸è¿æç¤ºåºæ¥æ¯è®©ä½ ç¥éï¼ä½ ç代ç éåºç°äºéå¤å¼å ¥çæ åµã'); 9} 10var translate = { 11 /** 12 * å½åççæ¬ 13 * ç± npm èæ¬èªå¨æ´æ°ï¼æ éæå¨ä¿®æ¹ 14 * æ ¼å¼ï¼major.minor.patch.date 15 */ 16 // AUTO_VERSION_START 17 version: '3.18.98.20251202', 18 // AUTO_VERSION_END 19 /* 20 å½å使ç¨ççæ¬ï¼é»è®¤ä½¿ç¨v2. å¯ä½¿ç¨ setUseVersion2(); 21 æ¥è®¾ç½®ä½¿ç¨v2 ï¼å·²åºå¼ï¼ä¸»è¦æ¯åºåæ¯å¦æ¯v1çæ¬æ¥çï¼v2è·v3çæ¬æ¯åæ ·çä½¿ç¨æ¹å¼ 22 */ 23 useVersion:'v2', 24 /*js translate.setUseVersion2 start*/ 25 setUseVersion2:function(){ 26 translate.useVersion = 'v2'; 27 translate.log('æç¤ºï¼èª v2.10 ä¹åççæ¬é»è®¤å°±æ¯ä½¿ç¨V2çæ¬ï¼å½åçæ¬ä¸º:'+translate.version+'ï¼ï¼ translate.setUseVersion2() å¯ä»¥ä¸ç¨åå è¿ä¸è¡äºãå½ç¶å äºä¹æ æè°ï¼åªæ¯å äºè·ä¸å æ¯å®å ¨ä¸æ ·çã'); 28 }, 29 /*js translate.setUseVersion2 end*/ 30 /* 31 * ç¿»è¯ç对象ï¼ä¹å°±æ¯ new google.translate.TranslateElement(...) 32 * å·²åºå¼ï¼v1使ç¨ç 33 */ 34 translate:null, 35 36 /*js translate.includedLanguages end*/ 37 /* 38 * æ¯æåªäºè¯è¨åæ¢ï¼å æ¬ï¼de,hi,lt,hr,lv,ht,hu,zh-CN,hy,uk,mg,id,ur,mk,ml,mn,af,mr,uz,ms,el,mt,is,it,my,es,et,eu,ar,pt-PT,ja,ne,az,fa,ro,nl,en-GB,no,be,fi,ru,bg,fr,bs,sd,se,si,sk,sl,ga,sn,so,gd,ca,sq,sr,kk,st,km,kn,sv,ko,sw,gl,zh-TW,pt-BR,co,ta,gu,ky,cs,pa,te,tg,th,la,cy,pl,da,tr 39 * å·²åºå¼ï¼è¯·ä½¿ç¨ translate.selectLanguageTag.languages 40 */ 41 includedLanguages:'zh-CN,zh-TW,en', 42 /*js translate.includedLanguages end*/ 43 44 /*js translate.resourcesUrl start*/ 45 /* 46 * èµæºæä»¶urlçè·¯å¾ 47 * å·²åºå¼ï¼v1使ç¨ç 48 */ 49 resourcesUrl:'//res.zvo.cn/translate', 50 /*js translate.resourcesUrl end*/ 51 52 /*js translate.log start*/ 53 log: function(obj){ 54 console.log(obj); 55 }, 56 /*js translate.log end*/ 57 58 /** 59 * é»è®¤åºç°çéæ©è¯è¨ç select éæ©æ¡ï¼å¯ä»¥éè¿è¿ä¸ªéæ©åæ¢è¯è¨ã 60 */ 61 selectLanguageTag:{ 62 /* 63 v3.1 å¢å ï¼å° select忢è¯è¨çéæ©æ¡èµäºåªä¸ªidï¼è¿éæ¯å ·ä½çidçååã 64 妿è¿ä¸ªidä¸åå¨ï¼ä¼å建è¿ä¸ªidçå ç´ 65 */ 66 documentId:'translate', 67 /* æ¯å¦æ¾ç¤º selectéæ©è¯è¨çéæ©æ¡ï¼trueæ¾ç¤ºï¼ false䏿¾ç¤ºãé»è®¤ä¸ºtrue */ 68 show:true, 69 /* 70 æ¯æåªäºè¯è¨åæ¢ 71 v1.x çæ¬å æ¬ï¼de,hi,lt,hr,lv,ht,hu,zh-CN,hy,uk,mg,id,ur,mk,ml,mn,af,mr,uz,ms,el,mt,is,it,my,es,et,eu,ar,pt-PT,ja,ne,az,fa,ro,nl,en-GB,no,be,fi,ru,bg,fr,bs,sd,se,si,sk,sl,ga,sn,so,gd,ca,sq,sr,kk,st,km,kn,sv,ko,sw,gl,zh-TW,pt-BR,co,ta,gu,ky,cs,pa,te,tg,th,la,cy,pl,da,tr 72 v2.x çæ¬æ ¹æ®åç«¯ç¿»è¯æå¡ä¸åï¼æ¯æçè¯è¨ä¹ä¸åãå ·ä½æ¯æåªäºï¼å¯éè¿ http://api.translate.zvo.cn/doc/language.json.html è·å ï¼å¦ææ¨ç§æé¨ç½²çï¼å°è¯·æ±ååæ¢ä¸ºæ¨èªå·±ç§æé¨ç½²çååï¼ 73 */ 74 languages:'', 75 alreadyRender:false, //å½åæ¯å¦å·²æ¸²æè¿äº trueä¸ºæ¯ v2.2å¢å 76
77 changeLanguageBeforeLoadOfflineFile: function(path){ 78 79 }, 80 81 selectOnChange:function(event){ 82 var language = event.target.value; 83 translate.changeLanguage(language); 84 }, 85 //éæ°ç»å¶ select è¯ç§ä¸æéæ©ãæ¯å¦è¿è¡äºæ¬¡å¼åè¿translate.jsï¼æå¨è¿è¡äºè®¾ç½® translate.to ï¼ä½æ¯æå¨æ¹å¨åçï¼å¨selectè¯ç§éæ©æ¡ä¸å¹¶ä¸ä¼èªå¨è¿è¡æ¹åï¼è¿æ¯å°±éè¦æå¨éæ°ç»å¶ä¸ä¸ selectè¯ç§éæ©çä¸æéæ©æ¡ 86 refreshRender:function(){ 87 // è·åå ç´ 88 let element = document.getElementById(translate.selectLanguageTag.documentId+"SelectLanguage"); 89 90 // å é¤å ç´ 91 if (element) { 92 element.parentNode.removeChild(element); 93 } 94 95 //è®¾ç½®ä¸ºæª render ç¶æï¼å 许è¿è¡ render 96 translate.selectLanguageTag.alreadyRender = false; 97 98 translate.selectLanguageTag.render(); 99 }, 100 /* 101 èªå®ä¹è¯ç§ translate.selectLanguageTag.languages çå¤çï¼è¿è¡æé¡ºåºçéåºæ¥ 102 103 @param languageList å½åæ¯æçææè¯ç§å表ï¼ä¼ å ¥æ ¼å¼å¦ï¼ 104 [ 105 {id: 'english', name: 'English', serviceId: 'en'}, 106 {id: 'korean', name: 'íêµì´', serviceId: 'ko'}, 107 ... 108 ] 109 110 è¿å弿¯å°å½åç¿»è¯ééææ¯æçè¯ç§è¿è¡æé¡ºåºçéå®åçç»æè¿åã 111 æ¯å¦ 112 translate.selectLanguageTag.languages = 'english,chinese_simplified,korean'; 113 é£ä¹è¿éè¿åçä¾¿æ¯ 114 115 [ 116 {id: 'english', name: 'English', serviceId: 'en'}, 117 {id: 'chinese_simplified', name: 'ç®ä½ä¸æ', serviceId: 'zh-CHS'}, 118 {id: 'korean', name: 'íêµì´', serviceId: 'ko'} 119 ] 120 121 妿 translate.selectLanguageTag.languages æªè®¾ç½®ï¼é£ä¹è¿éå°è¿åå½åæ¯æçææè¯ç§ 122 */ 123 customLanguagesHandle:function(languageList){ 124 if(translate.selectLanguageTag.languages.length > 0){ 125 //设置äºèªå®ä¹æ¾ç¤ºçè¯è¨ï¼éè¦éæ°æ ¹æ®èªå®ä¹çè¯è¨è¿è¡è¿æ»¤ï¼åæ¶é¡ºåºä¹è¦ä¿æè·å®ä¸è´ 126 127 //é½è½¬å°å夿 128 var divLanguages = translate.selectLanguageTag.languages.toLowerCase(); 129 var divArray = divLanguages.split(','); 130 131 //å°æ¯æçè¯ç§ languageList 转å为 map å½¢æ 132 if(typeof(translate.selectLanguageTag.supportLanguageMap) == 'undefined'){ 133 translate.selectLanguageTag.supportLanguageMap = new Map(); 134 for(var si = 0; si<languageList.length; si++){ 135 if(typeof(languageList[si]) != 'undefined' && typeof(languageList[si].id)){ 136 translate.selectLanguageTag.supportLanguageMap.set(languageList[si].id, languageList[si]); 137 } 138 } 139 //console.log(translate.selectLanguageTag.supportLanguageMap) 140 } 141 142 143 //éæ°ç»åè¦æ¾ç¤ºçè¯ç§ 144 var newLangs = []; 145 for(var i = 0; i<divArray.length; i++){ 146 if(divArray[i].length > 0 && translate.selectLanguageTag.supportLanguageMap.get(divArray[i]) != null){ 147 newLangs.push(translate.selectLanguageTag.supportLanguageMap.get(divArray[i])); 148 } 149 } 150 return newLangs; 151 } 152 153 return languageList; 154 }, 155 156 /* 157 èªå®ä¹åæ¢è¯è¨çæ ·å¼æ¸²æ v3.2.4 å¢å 158 159 */ 160 customUI:function(languageList){ 161 //selectçonchangeäºä»¶ 162 var onchange = function(event){ translate.selectLanguageTag.selectOnChange(event); } 163 164 //å建 select æ ç¾ 165 var selectLanguage = document.createElement("select"); 166 selectLanguage.id = translate.selectLanguageTag.documentId+'SelectLanguage'; 167 selectLanguage.className = translate.selectLanguageTag.documentId+'SelectLanguage'; 168 var to = translate.language.getCurrent(); 169 170 171 for(var i = 0; i<languageList.length; i++){ 172 var option = document.createElement("option"); 173 option.setAttribute("value",languageList[i].id); 174 175 176 /*夿é»è®¤è¦éä¸åªä¸ªè¯è¨*/ 177 178 if(to != null && typeof(to) != 'undefined' && to.length > 0){ 179 //设置äºç®æ è¯è¨ï¼é£å°±è¿è¡å¤ææ¾ç¤ºç®æ è¯è¨ 180 if(to == languageList[i].id){ 181 option.setAttribute("selected",'selected'); 182 } 183 }else{ 184 //æ²¡è®¾ç½®ç®æ è¯è¨ï¼é£é»è®¤éä¸å½åæ¬å°çè¯ç§ 185 if(languageList[i].id == translate.language.getLocal()){ 186 option.setAttribute("selected",'selected'); 187 } 188 } 189 190 option.appendChild(document.createTextNode(languageList[i].name)); 191 selectLanguage.appendChild(option); 192 } 193 //å¢å onchange äºä»¶ 194 if(window.addEventListener){ // Mozilla, Netscape, Firefox 195 selectLanguage.addEventListener('change', onchange,false); 196 }else{ // IE 197 selectLanguage.attachEvent('onchange',onchange); 198 } 199 200 //å°selectå å ¥è¿ç½é¡µæ¾ç¤º 201 document.getElementById(translate.selectLanguageTag.documentId).appendChild(selectLanguage); 202 203 }, 204 render:function(){ //v2å¢å 205 if(translate.selectLanguageTag.alreadyRender){ 206 return; 207 } 208 translate.selectLanguageTag.alreadyRender = true; 209
210 //夿妿䏿¾ç¤ºselectéæ©è¯è¨ï¼ç´æ¥å°±éèæ 211 if(!translate.selectLanguageTag.show){ 212 return; 213 } 214 215 //夿translate çidæ¯å¦åå¨ï¼ä¸åå¨å°±å建ä¸ä¸ª 216 if(document.getElementById(translate.selectLanguageTag.documentId) == null){ 217 var findBody = document.getElementsByTagName('body'); 218 if(findBody.length == 0){ 219 translate.log('body tag not find, translate.selectLanguageTag.render() is not show Select Language'); 220 return; 221 } 222 var body_trans = findBody[0]; 223 var div = document.createElement("div"); //å建ä¸ä¸ªscriptæ ç¾ 224 div.id=translate.selectLanguageTag.documentId; 225 body_trans.appendChild(div); 226 }else{ 227 //åå¨ï¼é£ä¹å¤æä¸ä¸ selectæ¯å¦åå¨ï¼è¦æ¯åå¨å°±ä¸éå¤åå»ºäº 228 if(document.getElementById(translate.selectLanguageTag.documentId+'SelectLanguage') != null){ 229 //selectåå¨äºï¼å°±ä¸éå¤åå»ºäº 230 return; 231 } 232 } 233 234 //仿å¡å¨å è½½æ¯æçè¯è¨åº 235 if(typeof(translate.request.api.language) == 'string' && translate.request.api.language.length > 0){ 236 //仿¥å£å è½½è¯ç§ 237 translate.request.post(translate.request.api.language, {}, function(responseData, requestData){ 238 if(responseData.result == 0){ 239 translate.log('load language list error : '+responseData.info); 240 return; 241 } 242 //console.log(data.list); 243 translate.request.api.language = responseData.list; //è¿è¡ç¼åï¼ä¸ä¸æ¬¡åæ¢è¯è¨æ¸²æçæ¶åç´æ¥ä»ç¼ååï¼å°±ä¸ç¨å¨éè¿ç½ç»å è½½äº 244 translate.selectLanguageTag.customUI(translate.selectLanguageTag.customLanguagesHandle(responseData.list)); 245 }, null); 246 }else if(typeof(translate.request.api.language) == 'object'){ 247 //æ ç½ç»ç¯å¢ä¸ï¼èªå®ä¹æ¾ç¤ºè¯ç§ 248 translate.selectLanguageTag.customUI(translate.selectLanguageTag.customLanguagesHandle(translate.request.api.language)); 249 } 250 } 251 }, 252 253 /* 254 * å½åæ¬å°è¯è¨ 255 * å·²åºå¼ï¼v1使ç¨ç 256 */ 257 //localLanguage:'zh-CN', 258 /*js translate.localLanguage start*/ 259 localLanguage:'zh-CN', 260 /*js translate.localLanguage end*/ 261 262 /*js translate.googleTranslateElementInit start*/ 263 /** 264 * googleç¿»è¯æ§è¡ç 265 * å·²åºå¼ï¼v1使ç¨ç 266 */ 267 googleTranslateElementInit:function(){ 268 var selectId = ''; 269 if(document.getElementById('translate') != null){ // && document.getElementById('translate').innerHTML.indexOf('translateSelectLanguage') > 0 270 //å·²ç»å建è¿äº,åå¨ 271 selectId = 'translate'; 272 } 273 274 translate.translate = new google.translate.TranslateElement( 275 { 276 //è¿åæ°æ²¡ç¨ï¼è¯·å¿½ç¥ 277 pageLanguage: 'zh-CN', 278 //ä¸å ±80ç§è¯è¨éæ©ï¼è¿ä¸ªæ¯ä½ éè¦ç¿»è¯çè¯è¨ï¼æ¯å¦ä½ åªéè¦ç¿»è¯æè¶ååè±è¯ï¼è¿éå°±åªåen,vi 279 //includedLanguages: 'de,hi,lt,hr,lv,ht,hu,zh-CN,hy,uk,mg,id,ur,mk,ml,mn,af,mr,uz,ms,el,mt,is,it,my,es,et,eu,ar,pt-PT,ja,ne,az,fa,ro,nl,en-GB,no,be,fi,ru,bg,fr,bs,sd,se,si,sk,sl,ga,sn,so,gd,ca,sq,sr,kk,st,km,kn,sv,ko,sw,gl,zh-TW,pt-BR,co,ta,gu,ky,cs,pa,te,tg,th,la,cy,pl,da,tr', 280 includedLanguages: translate.selectLanguageTag.languages, 281 //éæ©è¯è¨çæ ·å¼ï¼è¿ä¸ªæ¯é¢æ¿ï¼è¿æä¸ææ¡çæ ·å¼ï¼å ·ä½çè®°ä¸å°äºï¼æ¾ä¸å°api~~ 282 layout: 0, 283 //èªå¨æ¾ç¤ºç¿»è¯æ¨ªå¹ ï¼å°±æ¯ç¿»è¯åé¡¶é¨åºç°çé£ä¸ªï¼æç¹ä¸ï¼è®¾ç½®è¿ä¸ªå±æ§ä¸èµ·ä½ç¨çè¯ï¼è¯·çæç« åºé¨çå ¶ä»æ¹æ³ 284 //autoDisplay: false, 285 //disableAutoTranslation:false, 286 //è¿æäºå ¶ä»åæ°ï¼ç±äºåæä»¶ä¸åç»´æ¤ï¼æ¾ä¸å°è¯¦ç»apiäºï¼å°å°±äºï¼å®å¨ä¸è¡ç´æ¥ä¸domæä½ 287 }, 288 selectId //触åæé®çid 289 ); 290 }, 291 /*js translate.googleTranslateElementInit end*/ 292 293 /** 294 * åå§åï¼å¦å è½½jsãcssèµæº 295 * å·²åºå¼ï¼v1使ç¨ç 296 */ 297 /* v2.11.11.20240124 å½»åºæ³¨éæï¼ææ°çinitæ¹æ³æ¿ä»£ 298 init:function(){ 299 var protocol = window.location.protocol; 300 if(window.location.protocol == 'file:'){ 301 //æ¬å°çï¼é£å°±ç¨http 302 protocol = 'http:'; 303 } 304 if(this.resourcesUrl.indexOf('://') == -1){ 305 //è¿æ²¡è®¾ç½®è¿ï¼è¿è¡è®¾ç½® 306 this.resourcesUrl = protocol + this.resourcesUrl; 307 } 308 309 //this.resourcesUrl = 'file://G:/git/translate'; 310 311 }, 312 */ 313 314 315 /*js translate.execute_v1 start*/ 316 /** 317 * æ§è¡ç¿»è¯æä½ 318 * å·²åºå¼ï¼v1使ç¨ç 319 */ 320 execute_v1:function(){ 321 translate.log('=====ERROR======'); 322 translate.log('The v1 version has been discontinued since 2022. Please use the latest V3 version and refer to: http://translate.zvo.cn/41162.html'); 323 }, 324 /*js translate.execute_v1 end*/ 325 326 /*js translate.setCookie start*/ 327 /** 328 * 设置Cookieï¼å¤±ææ¶é´ä¸å¹´ã 329 * @param name 330 * @param value 331 * * å·²åºå¼ï¼v1使ç¨ç 332 */ 333 setCookie:function (name,value){ 334 var cookieString=name+"="+escape(value); 335 document.cookie=cookieString; 336 }, 337 /*js translate.setCookie end*/ 338 339 /*js translate.getCookie start*/ 340 //è·åCookieãè¥æ¯ä¸ååï¼è¿å空å符串 341 //* å·²åºå¼ï¼v1使ç¨ç 342 getCookie:function (name){ 343 var strCookie=document.cookie; 344 var arrCookie=strCookie.split("; "); 345 for(var i=0;i<arrCookie.length;i++){ 346 var arr=arrCookie[i].split("="); 347 if(arr[0]==name){ 348 return unescape(arr[1]); 349 } 350 } 351 return ""; 352 }, 353 /*js translate.getCookie end*/ 354 355 356 /*js translate.currentLanguage start*/ 357 /* 358 è·åå½å页é¢éç¨çæ¯ä»ä¹è¯è¨ 359 è¿åå¼å¦ enãzh-CNãzh-TW ï¼å¦ææ¯ç¬¬ä¸æ¬¡ç¨ï¼æ²¡æè®¾ç½®è¿ï¼é£ä¹è¿åçæ¯ translate.localLanguage 设置çå¼ï¼ 360 å·²åºå¼ï¼v1使ç¨ç 361 */ 362 currentLanguage:function(){ 363 //translate.check(); 364 var cookieValue = translate.getCookie('googtrans'); 365 if(cookieValue.length > 0){ 366 return cookieValue.substr(cookieValue.lastIndexOf('/')+1,cookieValue.length-1); 367 }else{ 368 return translate.localLanguage; 369 } 370 }, 371 /*js translate.currentLanguage end*/ 372 373 /** 374 * 忢è¯è¨ï¼æ¯å¦åæ¢ä¸ºè±è¯ãæ³è¯ 375 * @param languageName è¦åæ¢çè¯è¨è¯ç§ãä¼ å ¥å¦ english 376 * ä¼èªå¨æ ¹æ®ä¼ å ¥çè¯è¨æ¥å¤æä½¿ç¨åªç§çæ¬ãæ¯å¦ä¼ å ¥ enãzh-CN çï¼åä¼ä½¿ç¨v1.xçæ¬ 377 * ä¼ å ¥ chinese_simplified ãenglish çï¼åä¼ä½¿ç¨ v2.xçæ¬ 378 */ 379 changeLanguage:function(languageName){ 380 translate.time.log('触å'); 381 //console.log('changeLanguage -> '+languageName); 382 //å¤æä½¿ç¨çæ¯å¦æ¯v1.x 383 var v1 = ',en,de,hi,lt,hr,lv,ht,hu,zh-CN,hy,uk,mg,id,ur,mk,ml,mn,af,mr,uz,ms,el,mt,is,it,my,es,et,eu,ar,pt-PT,ja,ne,az,fa,ro,nl,en-GB,no,be,fi,ru,bg,fr,bs,sd,se,si,sk,sl,ga,sn,so,gd,ca,sq,sr,kk,st,km,kn,sv,ko,sw,gl,zh-TW,pt-BR,co,ta,gu,ky,cs,pa,te,tg,th,la,cy,pl,da,tr,'; 384 if(v1.indexOf(','+languageName+',') > -1){ 385 //ç¨çæ¯v1.x 386 translate.log('æ¨ä½¿ç¨çæ¯v1çæ¬ç忢è¯ç§æ¹å¼ï¼v1å·²å¨2021年就以åºå¼ï¼è¯·æ´æ¢ä¸ºv2ï¼åèææ¡£ï¼ http://translate.zvo.cn/41549.html'); 387 translate.check(); 388 389 var googtrans = '/'+translate.localLanguage+'/'+languageName; 390
391 //å æ¸ 空æ³è§£æååç设置 392 var s = document.location.host.split('.'); 393 if(s.length > 2){ 394 var fanDomain = s[s.length-2]+'.'+s[s.length-1]; 395 document.cookie = 'googtrans=;expires='+(new Date(1))+';domain='+fanDomain+';path=/'; 396 document.cookie = 'googtrans='+googtrans+';domain='+fanDomain+';path=/'; 397 } 398 399 translate.setCookie('googtrans', ''+googtrans); 400 translate.refreshCurrentPage(); 401 return; 402 } 403 404 translate.lifecycle.changeLanguage.trigger_Trigger({ 405 to:languageName 406 }); 407 408 409 //ç¨çæ¯v2.xææ´é« 410 //translate.setUseVersion2(); 411 translate.useVersion = 'v2'; 412 var isReload = false; //æ è®°è¦å·æ°é¡µé¢, trueå·æ°ï¼ falseä¸å·æ° 413 //夿æ¯å¦æ¯ç¬¬ä¸æ¬¡ç¿»è¯ï¼å¦ææ¯ï¼é£å°±ä¸ç¨å·æ°é¡µé¢äºã true忝éè¦å·æ°ï¼ä¸æ¯ç¬¬ä¸æ¬¡ç¿»è¯ 414 if(translate.node.data == null){ 415 translate.node.data = new Map(); 416 } 417 if(translate.node.data.size > 0){ //é£å½åå·²ç»è¢«ç¿»è¯è¿ 418 isReload = true; //æ è®°è¦å·æ°é¡µé¢ 419 } 420 421 translate.to = languageName; 422 translate.storage.set('to',languageName); //è®¾ç½®ç®æ ç¿»è¯è¯è¨ 423 424 //夿å½å页颿¯å¦éè¦è¿è¡ç¿»è¯ï¼å¦æéè¦ï¼é£è¿è¦å¯¹æ´ä¸ªé¡µé¢å å®¹ææ¬è¿è¡éèå¤ç 425 if(translate.visual.webPageLoadTranslateBeforeHiddenText_use){ 426 //æ¸ é¤ æå¼å§çå ¨é¨ææ¬éèçfirstè®°å½ 427 if(typeof(translate.visual.hideText.first_translate_request_uuid) != 'undefined'){ 428 //æ¯ç¬¬ä¸æ¬¡ç¿»è¯è¯·æ±ï¼è®°å½å ¶uuid 429 translate.visual.hideText.first_translate_request_uuid = undefined; 430 } 431 432 //ç½é¡µæå¼æ¶èªå¨éèæåï¼ç¿»è¯å®æåæ¾ç¤ºè¯æ http://translate.zvo.cn/549731.html 433 translate.visual.webPageLoadTranslateBeforeHiddenText({ 434 inHeadTip: false //è¦åè¦å¨headä¸è§¦åçæ§å¶å°æ¶æ¯æéï¼trueæ¯å¦æåç°å°±æå°è¿ä¸ªæéã é»è®¤ä¸è®¾ç½®ä¾¿æ¯true 435 }); 436 } 437 438 439 //å°ç¿»è¯è¿è¡è¿å 440 translate.reset({ 441 selectLanguageRefreshRender:false //æ¯å¦éæ°æ¸²æselectéæ©è¯è¨å°åå§æªç¿»è¯åçç¶æï¼é»è®¤ä¸è®¾ç½®åæ¯trueï¼è¿è¡éæ°æ¸²æ 442 }); 443 444 445 /* 446 å 触åç¶çº§ï¼å å¾å½åå·æ°äºï¼å¯¼è´ç¶çº§ä¸æ§è¡ç¿»è¯äº 447 */ 448 //æ£æµå½åæ¯å¦å¤äºiframeä¸ï¼å¦æå½åæ¯å¨iframeä¸ï¼æç¶çº§é¡µé¢ï¼ä¹è¦è§¦åç¶çº§è¿è¡ç¿»è¯ 449 try{ 450 if(window.self !== window.top){ 451 if(typeof(window.parent.translate) == 'object' && typeof(window.parent.translate.version) == 'string'){ 452 //iframe页é¢ä¸åå¨ translate,é£ä¹ä¹æ§å¶iframeä¸çè¿è¡ç¿»è¯ 453 if(window.parent.translate.to !== languageName){ 454 //妿ç¶é¡µé¢å½åçè¯ç§ä¸æ¯éè¦ç¿»è¯çè¯ç§ï¼å¯¹å ¶è¿è¡ç¿»è¯ 455 window.parent.translate.changeLanguage(languageName); 456 } 457 } 458 } 459 }catch(e){ 460 //å¢å tryï¼é¿å å¼å¸¸å¯¼è´æ æ³ç¨ 461 translate.log(e); 462 } 463 464 translate.time.log('ç¶çº§ iframe 触åchangeLanguage宿'); 465 466 translate.to = languageName; 467 translate.storage.set('to',languageName); //è®¾ç½®ç®æ ç¿»è¯è¯è¨ 468 469 translate.lifecycle.changeLanguage.resetAfter_Trigger({ 470 to: languageName 471 }); 472 473 //éæ°ç»å¶ select éæ©è¯è¨ 474 translate.selectLanguageTag.refreshRender(); 475 476 //æ å·æ°åæ¢è¯è¨ 477 isReload = false; 478 if(isReload){ 479 location.reload(); //å·æ°é¡µé¢ 480 }else{ 481 //ä¸ç¨å·æ°ï¼ç´æ¥ç¿»è¯ 482 483 translate.execute(); //ç¿»è¯ 484 485 //æ£æµæ¯å¦æiframeä¸çå页é¢ï¼å¦ææï¼ä¹å¯¹å页é¢ä¸åç¿»è¯å½ä»¤ãè¿ä¸ªæ¯é对 LayuiAdmin æ¡æ¶çåºæ¯éé ï¼å®ç主ä½åºåæ¯å¨ iframe ä¸çï¼ä¸è½ç¹å»åæ¢è¯è¨åï¼åªç¿»è¯å¤é¢ç大æ¡ï¼èiframeä¸çä¸ç¿»è¯ 486 const iframes = document.querySelectorAll('iframe'); 487 for (let i = 0; i < iframes.length; i++) { 488 const iframe = iframes[i]; 489 // è·å iframe ç window 对象 490 const iframeWindow = iframe.contentWindow; 491 try{ 492 if(typeof(iframeWindow.translate) == 'object' && typeof(iframeWindow.translate.version) == 'string'){ 493 //iframe页é¢ä¸åå¨ translate,é£ä¹ä¹æ§å¶iframeä¸çè¿è¡ç¿»è¯ 494 if(iframeWindow.translate.to != languageName){ 495 iframeWindow.translate.to = languageName; 496 iframeWindow.translate.storage.set('to',languageName); //è®¾ç½®ç®æ ç¿»è¯è¯è¨ 497 //iframeWindow.translate.execute(); 498 iframeWindow.translate.changeLanguage(languageName); 499 } 500 } 501 }catch(e){ 502 //å¢å tryï¼é¿å å¼å¸¸,æ¯å¦è·¨åï¼ä¸æå¯¼è´æ æ³ç¨ 503 if(typeof(iframe.src) === 'string'){ 504 translate.log('change sub page iframe exception , iframe src : '+iframe.src); 505 } 506 translate.log(e); 507 } 508 } 509 } 510 511 /* 512 æ¾å°äº translate.init ä¸ 513 //å½ç¨æ·ä»£ç 设置éå¯ç¨äº translate.listener.start() ç¶åç¨æ·å 载页é¢å并没æç¿»è¯ï¼è¿æ¶listeneræ¯ä¸å¯å¨çåªæ¯ælistener.useæ 记为trueï¼ï¼ç¶åæå¨ç¹å»ç¿»è¯æé®ç¿»è¯ä¸ºå ¶ä»è¯ç§ï¼è¿æ¯ä¸ä¼å·æ°é¡µé¢ï¼ï¼ç¿»è¯åä¹è¦è·çå¯å¨çå¬ 514 if(translate.listener.use == true && translate.listener.isStart == false){ 515 if(typeof(translate.listener.start) != 'undefined'){ 516 translate.listener.addListener(); 517 } 518 } 519 */ 520 }, 521 522 /** 523 * èªæ£æç¤ºï¼éç¨äº v1.xï¼ å¨ v2.xä¸å·²åºå¼ 524 * english 525 * å·²åºå¼ï¼v1使ç¨ç 526 */
527 /*js translate.check start*/ 528 check:function(){ 529 if(window.location.protocol == 'file:'){ 530 translate.log('\r\n---WARNING----\r\ntranslate.js 主å¨ç¿»è¯ç»ä»¶èªæ£å¼å¸¸ï¼å½ååè®®æ¯fileåè®®ï¼ç¿»è¯ç»ä»¶è¦å¨æ£å¸¸ç线ä¸httpãhttpsåè®®ä¸æè½æ£å¸¸ä½¿ç¨ç¿»è¯åè½\r\n------------'); 531 } 532 }, 533 /*js translate.check end*/ 534 535 536 /**************************** v2.0 */ 537 to:'', //ç¿»è¯ä¸ºçç®æ è¯è¨ï¼å¦ english ãchinese_simplified 538 //ç¨æ·ç¬¬ä¸æ¬¡æå¼ç½é¡µæ¶ï¼èªå¨å¤æå½åç¨æ·æå¨å½å®¶ä½¿ç¨çæ¯åªç§è¯è¨ï¼æ¥èªå¨è¿è¡åæ¢ä¸ºç¨æ·æå¨å½å®¶çè¯ç§ã 539 //å¦æä½¿ç¨åï¼ç¬¬äºæ¬¡å¨ç¨ï¼é£å°±ä¼å ä»¥ç¨æ·æéæ©ç为主ï¼è¿ä¸ªå°±ä¸ç®¡ç¨äº 540 //é»è®¤æ¯falseï¼ä¸ä½¿ç¨ï¼å¯è®¾ç½®trueï¼ä½¿ç¨ 541 //ä½¿ç¨ setAutoDiscriminateLocalLanguage è¿è¡è®¾ç½® 542 autoDiscriminateLocalLanguage:false, 543 documents:[], //æå®è¦ç¿»è¯çå ç´ çéå,å¯è®¾ç½®å¤ä¸ªï¼å¦è®¾ç½®ï¼ document.getElementsByTagName('DIV') 544 545 //ç¿»è¯æ¶å¿½ç¥çä¸äºä¸è¥¿ï¼æ¯å¦å¿½ç¥æä¸ªtagãæä¸ªclassç 546 ignore:{ 547 tag:['style', 'script', 'link', 'pre', 'code'], 548 class:['ignore','translateSelectLanguage'], 549 id:[], 550 /* 551 ä¼ å ¥ä¸ä¸ªå ç´ ï¼å¤æè¿ä¸ªå ç´ æ¯å¦æ¯è¢«å¿½ç¥çå ç´ ã è¿ä¸ªä¼æ¾ç¶ç±»ï¼ççç¶ç±»ä¸æ¯å¦å å«å¨å¿½ç¥çä¹ä¸ã 552 return trueæ¯å¨å¿½ç¥çä¹ä¸ï¼falseä¸å忽ç¥çä¹ä¸ 553 */ 554 isIgnore:function(ele){ 555 if(ele == null || typeof(ele) == 'undefined'){ 556 return false; 557 } 558 if(ele.nodeType === 2){ //æ¯å±æ§ï¼å°å ¶è½¬ä¸ºå ç´ å¤æï¼å 为å½å忽ç¥é ç½®ï¼æ¯é对å ç´ é ç½®ç 559 ele = ele.ownerElement; 560 }else if(ele.nodeType === 3){ 561 //ææ¬èç¹ï¼è½¬ä¸ºå ç´ 562 ele = ele.parentNode; 563 } 564 565 var parentNode = ele; 566 var maxnumber = 100; //æå¤§å¾ªç¯æ¬¡æ°ï¼é¿å æ»å¾ªç¯ 567 while(maxnumber-- > 0){ 568 if(parentNode == null || typeof(parentNode) == 'undefined'){ 569 //没æç¶å ç´ äº 570 return false; 571 } 572 573 //夿Tag 574 //var tagName = parentNode.nodeName.toLowerCase(); //tagååï¼å°å 575 var nodename = translate.element.getNodeName(parentNode).toLowerCase(); //tagååï¼å°å 576 if(nodename.length > 0){ 577 //ænodename 578 if(nodename == 'body' || nodename == 'html' || nodename == '#document'){ 579 //ä¸å±å ç´ å·²ç»æ¯é¡¶çº§å ç´ äºï¼é£è¯å®å°±ä¸æ¯äº 580 return false; 581 } 582 if(translate.ignore.tag.indexOf(nodename) > -1){ 583 //åç°ignore.tag å½åæ¯å¤äºè¢«å¿½ç¥ç tag 584 return true; 585 } 586 } 587 588 589 //夿class name 590 if(parentNode.className !== null && typeof(parentNode.className) === 'string'){ 591 var classNames = parentNode.className; 592 if(classNames == null || typeof(classNames) != 'string'){ 593 continue; 594 } 595 //console.log('className:'+typeof(classNames)); 596 //console.log(classNames); 597 classNames = classNames.trim().split(' '); 598 for(var c_index = 0; c_index < classNames.length; c_index++){ 599 if(classNames[c_index] != null && classNames[c_index].trim().length > 0){ 600 //ææçclass nameï¼è¿è¡å¤æ 601 if(translate.ignore.class.indexOf(classNames[c_index]) > -1){ 602 //åç°ignore.class å½åæ¯å¤äºè¢«å¿½ç¥ç class 603 return true; 604 } 605 } 606 } 607 } 608 609 //夿id 610 if(parentNode.id != null && typeof(parentNode.id) != 'undefined'){ 611 //ææçclass nameï¼è¿è¡å¤æ 612 if(translate.ignore.id.indexOf(parentNode.id) > -1){ 613 //åç°ignore.id å½åæ¯å¤äºè¢«å¿½ç¥ç id 614 return true; 615 } 616 } 617 618 //èµäºå¤æçå ç´ åä¸ä¸çº§ 619 parentNode = parentNode.parentNode; 620 } 621 622 return false; 623 }, 624 625 /* 626 * 忽ç¥ä¸è¢«ç¿»è¯çææ¬ï¼è¿éåºç°çææ¬å°ä¸ä¼è¢«ç¿»è¯ã 627 * è¿ä¸ªå ¶å®æ¯åç¨äº èªå®ä¹æ¯è¯ çè½åï¼è®¾ç½®äºèªå®ä¹æ¯è¯çåå符çäºç¿»è¯åçåç¬¦ï¼ äºæ¯è¿ä¸ªå符就ä¸ä¼è¢«ç¿»è¯äº 628 * è¿éå¯ä»¥æ¯å¤ä¸ªï¼æ°ç»ï¼å¦ ['ä½ å¥½','ä¸ç'] 629 */ 630 text:[], 631 /* 632 ä¸é¢ç textRegex ã setTextRegexs æ£åæ¹å¼è®¾ç½®å¿½ç¥ä¸ç¿»è¯textçè½åï¼æ https://github.com/wangliangyu æäº¤è´¡ç®ï¼ 弥补 translate.ignore.text åºå®è®¾ç½®çä¸è¶³ 633 */ 634 textRegex:[], 635 /* 636 ä½¿ç¨æ¹å¼å¦ï¼ 637 translate.ignore.setTextRegexs([/请æ±/g, /[\u4a01-\u4a05]+/g]); 638 */ 639 setTextRegexs: function(arr) { 640 if (!Array.isArray(arr)) throw new Error('åæ°å¿ é¡»ä¸ºæ°ç»'); 641 for (let i = 0; i < arr.length; i++) { 642 if (!(arr[i] instanceof RegExp)) { 643 throw new Error('第' + i + '项䏿¯RegExp对象'); 644 } 645 } 646 //this.textRegex = [...this.textRegex, ...arr]; 647 //æ¹ä¸ºå ¼å®¹ es5 çæ¹å¼ï¼æä¾æ´å¤å ¼å®¹ 648 this.textRegex = this.textRegex.concat(arr); 649 }, 650 }, 651 //å·æ°é¡µé¢ï¼ä½ å¯ä»¥èªå®ä¹å·æ°é¡µé¢çæ¹å¼ï¼æ¯å¦å¨ uniapp æå çæ apk æ¶ï¼apkä¸çå·æ°é¡µé¢å°±ä¸æ¯h5çè¿ä¸ªå·æ°ï¼èæ¯appçå·æ°æ¹å¼ï¼å°±éè¦èªå·±è¿è¡éåè¿ä¸ªå·æ°é¡µé¢çæ¹æ³äº 652 refreshCurrentPage:function(){ 653 location.reload(); 654 }, 655 656 /* 657 å¤å®å½åæ¯å¦ä½¿ç¨ç¿»è¯ï¼ä¹å°±æ¯ä½¿ç¨å¤è¯è¨åæ¢è½å 658 注æï¼å®éé¢ä¼è§¦å translate.language.getLocal() è¿è¡å¤å®ï¼è¦ä¿è¯æåè®¾ç½®äºæ¬å°è¯ç§ï¼æå¨domå è½½å®ï¼ç½é¡µå 容已渲æå®æ¯ï¼ä»¥ä¾¿è½è¿è¡æ¬å°è¯ç§èªå¨è¯å«ï¼åä½¿ç¨æ¤ 659 660 @param to è¦ä»¥ä»ä¹è¯ç§æ¾ç¤ºã 妿ä¸ä¼ å ¥ï¼åé»è®¤èµäº translate.to 661 662 trueï¼æ¯ 663 falseï¼å¦ï¼ä¸éè¦è¿è¡ä»»ä½ç¿»è¯ 664 */ 665 isTranslate: function(to){ 666 if(typeof(to) === 'undefined'){ 667 to = translate.to; 668 } 669 if(to.length === 0){ 670 return false; 671 } 672 if(to === translate.language.getLocal()){ 673 if(translate.language.translateLocal){ 674 return true; 675 }else{ 676 return false; 677 } 678 }else{ 679 return true; 680 } 681 }, 682 683 //èªå®ä¹ç¿»è¯æ¯è¯ 684 nomenclature:{ 685 /* 686 æ¯è¯è¡¨ 687 ä¸ç»´ï¼è¦è½¬æ¢çè¯ç§ï¼å¦ english 688 äºç»´ï¼ç¿»è¯è³çç®æ è¯ç§ï¼å¦ english 689 ä¸ç»´ï¼è¦è½¬æ¢çå符串ï¼å¦ "ä½ å¥½" 690 ç»æï¼èªå®ä¹çç¿»è¯ç»æï¼å¦ âHalloâ 691 */ 692 data:new Array(), 693 694 /* 695 åå§æ¯è¯è¡¨ï¼å¯ç¼è¾ç 696 ä¸ç»´ï¼è¦èªå®ä¹ç®æ è¯ 697 äºç»´ï¼éå¯¹çæ¯åªä¸ªè¯ç§ 698 å¼ï¼è¦ç¿»è¯ä¸ºä»ä¹å 容 699 700 å ¶è®¾ç½®å¦ 701 var data = new Array(); 702 data['çæ¬'] = { 703 english : 'banben', 704 korean : 'BanBen' 705 }; 706 data['å½é å'] = { 707 english : 'guojihua', 708 korean : 'GuoJiHua' 709 }; 710 711 ãå·²è¿æ¶ã 712 */ 713 old_Data:[], 714 /* 715 set:function(data){ 716 translate.nomenclature.data = data; 717 }, 718 */ 719 set:function(data){ 720 alert('è¯·å° translate.nomenclature.set æ´æ¢ä¸º appendï¼å ·ä½ä½¿ç¨å¯åèï¼ https://github.com/xnx3/translate '); 721 }, 722 /* 723 åå½åæ¯è¯åºä¸è¿½å èªå®ä¹æ¯è¯ãå¦æè¿½å çæ°æ®éå¤ï¼ä¼èªå¨å»é 724 ä¼ å ¥åæ°ï¼ 725 from è¦è½¬æ¢çè¯ç§ 726 to ç¿»è¯è³çç®æ è¯ç§ 727 properties å±äºé ç½®è¡¨ï¼æ ¼å¼å¦ï¼ 728 ä½ å¥½=Hello 729 ä¸ç=ShiJie 730 731 */ 732 append:function(from, to, properties){ 733 if(typeof(from) == 'undefined' || from == null || from == 'auto'){ 734 //妿fromæªä¼ å ¥ï¼åèªå¨è¯å«å½å页é¢çè¯ç§ä¸ºfrom 735 //妿èªå¨è¯å«ï¼ä¹è¦ç¡®ä¿æ¯é¡µé¢å è½½å®åï¼å 徿¾å°äºheadéï¼é£è¯å®å¥ä¹è¯å«ä¸åºæ¥ 736 if(document.body == null){ 737 translate.log('使ç¨é误ï¼ä½ 使ç¨èªå®ä¹æ¯è¯ translate.nomenclature.append æ¶ï¼from æªä¼ å¼ï¼æ¤æ¶ translate.js ä¼èªå¨è¯å«å½åç¿»è¯åºåçå 容æ¯ä»ä¹è¯ç§ï¼ä½æ¯ä½ å½åå§ translate.nomenclature.append æ¾å¨äºbodyä¹åå°±å è½½äºï¼bodyé½è¿æ²¡å è½½åºæ¥ï¼ç¿»è¯åºåå½åæ å å®¹ï¼æä»¥æ æ³è¯å«å½å页é¢çè¯ç§ãè¯·å° translate.nomenclature.append æ¾å¨ç¿»è¯å 容å è½½å®ååæ§è¡ ï¼æ³¨æï¼è¦å° translate.nomenclature.append æ¾å¨ translate.execute() çåé¢ï¼ï¼å»ºè®®å° translate.nomenclature.append æ¾å¨ </body> è· </html> ä¹é´ã'); 738 }else{ 739 if (document.readyState === 'loading') { 740 translate.log('使ç¨å¼å¸¸åè¦ï¼ä½ 使ç¨çèªå®ä¹æ¯è¯ translate.nomenclature.append æ¶ï¼from æªä¼ å¼ï¼æ¤æ¶ translate.js ä¼èªå¨è¯å«å½åç¿»è¯åºåçå 容æ¯ä»ä¹è¯ç§ï¼ä½é¡µé¢Domè¿æªå è½½å®æ¯æ¶å°±è§¦åäºå®ï¼å¦æç¿»è¯åºåå½åæ å 容æè å 容䏿¯å®æ´çï¼ä¼é æè¯å«å½å页é¢çè¯ç§ä¼æå¼å¸¸ä¸åç¡®ï¼ä½ éè¦ä»ç»ç¡®è®¤è¿ä¸ªé®é¢ãå»ºè®®å° translate.nomenclature.append æ¾å¨ </body> è· </html> ä¹é´ã'); 741 } 742 } 743 744 from = translate.language.getLocal(); 745 } 746 747 if(typeof(translate.nomenclature.data[from]) == 'undefined'){ 748 translate.nomenclature.data[from] = new Array(); 749 } 750 if(typeof(translate.nomenclature.data[from][to]) == 'undefined'){ 751 translate.nomenclature.data[from][to] = new Array(); 752 } 753 754 //å°propertiesè¿è¡åæ 755 //æè¡æå 756 var line = properties.split('\n'); 757 //console.log(line) 758 for(var line_index = 0; line_index < line.length; line_index++){ 759 var item = line[line_index].trim(); 760 if(item.length < 1){ 761 //空è¡ï¼å¿½ç¥ 762 continue; 763 } 764 var kvs = item.split('='); 765 //console.log(kvs) 766 if(kvs.length != 2){
767 //䏿¯keyãvalueææçï¼å¿½ç¥ 768 continue; 769 } 770 var key = kvs[0].trim(); 771 var value = kvs[1].trim(); 772 //console.log(key) 773 if(key.length == 0 || value.length == 0){ 774 //å ¶ä¸æä¸ªæç©ºï¼åå¿½ç¥ 775 continue; 776 } 777 778 779 //å å ¥ï¼å¦æä¹åæå å ¥ï¼åä¼è¦ç 780 translate.nomenclature.data[from][to][key] = value; 781 //console.log(local+', '+target+', key:'+key+', value:'+value); 782 } 783 784 //追å å®åï¼å¯¹æ´ä¸ªå¯¹è±¡æ°ç»è¿è¡æåºï¼keyè¶å¤§è¶å¨åé¢ 785 translate.nomenclature.data[from][to] = translate.util.objSort(translate.nomenclature.data[from][to]); 786 787 }, 788 //è·åå½åå®ä¹çæ¯è¯è¡¨ 789 get:function(){ 790 return translate.nomenclature.data; 791 }, 792 793 /** 794 * 对æå®ææ¬è¿è¡èªå®ä¹æ¯è¯æ¿æ¢ 795 * 示ä¾ï¼ 796 * translate.nomenclature.replace(['ä½ å¥½æå¥½å¥¹ä¹å¥½'],'好','hao', null) 797 * ç»æï¼ 798 { 799 find:true, 800 texts: ['ä½ ', 'æ', '她ä¹'], 801 resultText: "ä½ haoæhao她ä¹hao" 802 } 803 * 804 * @param text è¦è¿è¡èªå®ä¹æ¯è¯æ¿æ¢çææ¬ 805 * @param nomenclatureKey èªå®ä¹æ¯è¯çkey 806 * @param nomenclatureValue èªå®ä¹æ¯è¯çvalue 807 * @param nodeObject è¦è¿è¡æ¿æ¢çèç¹å¯¹è±¡ï¼èªå®ä¹æ¯è¯å½ä¸åï¼ä¼ç´æ¥å¨è¿ä¸ªèç¹ä¸è¿è¡æ¿æ¢æ¾ç¤º 808 * å¦æä¼ å ¥ nullï¼åä¸è¿è¡ä»»ä½æ¿æ¢æä½ 809 * å¦æä¼ å ¥å ·ä½çå¼ï¼åæ¯ï¼ 810 * { 811 * node: nodeèç¹ ï¼è¦æ¹å¨çæåæå¨çnodeèç¹ã 妿æ¹å¨çæåæ¯å¦æ¯ div çtitleä¸ï¼é£ä¹è¿éä¼ å ¥çnodeåºè¯¥æ¯ title çnodeï¼è䏿¯ div çnode 812 * } 813 * 814 * @returns { 815 * find:false, //æ¯å¦å½ä¸äºèªå®ä¹æ¯è¯ï¼å½ä¸äºï¼åæ¯ trueï¼ä¹ä»£è¡¨ textArray å·²ç»ä¸æ¯ä¼ å ¥çé£ä¸ªäºï¼å·²ç»è¢«å¤çåå²è¿äº 816 texts:['ä½ ','好'], //éå¯¹ä¼ å ¥ç textArray åæ°ï¼è¿è¡æ¯è¯å½ä¸å®æåï¼å°å½ä¸æ¯è¯çé¨åå餿ï¼è¿è¡åå²ï¼æè¿åçæ°çtextArray 817 resultText: "ä½ haoæhao她ä¹hao" //对textå¤çåï¼æ¿æ¢åçææ¬ 818 819 } 820 */ 821 replace: function(text, nomenclatureKey, nomenclatureValue, nodeObject){ 822 /* 823 if(text.trim() == nomenclatureValue.trim()){ 824 825 826 827 //è¿éæ¯èªå®ä¹æ¯è¯è¢«æ¿æ¢åï¼éæ°æ«ææ¶æ«åºæ¥çï¼é£ä¹ç´æ¥å¿½ç¥ï¼ä¸åä»»ä½å¤çãå 为èªå®ä¹æ¯è¯çç»æå°±æ¯æç»ç»æäº 828 return { 829 texts:[text], 830 find:false, 831 resultText:text 832 } 833 } 834 */ 835 if(nomenclatureKey.length == 0){ //ä¸ä¸ªçæ¬æè¿ä¸ªï¼åºè¯¥ä¸ä¼æè¿ä¸ªæ åµï¼ä½æ¯è¿æ¯ä¿çäº 836 return { 837 texts:[text], 838 find:false, 839 resultText:text 840 } 841 } 842 843 //夿ä¸ä¸åå§ææ¬æ¯å¦æåºç°å¨äºè¿ä¸ªwordè¦ç¿»è¯çåç¬¦ä¸²ä¸ 844 var wordKeyIndex = text.indexOf(nomenclatureKey); 845 if(wordKeyIndex > -1){ 846 //åºç°äºï¼é£ä¹éè¦å°å ¶ç«å³è¿è¡æ´æ¹ï¼å°èªå®ä¹æ¯è¯å®ä¹çç»ææ¸²æå°é¡µé¢ä¸ï¼å¹¶ä¸å° word è¦ç¿»è¯çå符串ä¸ï¼èªå®ä¹æ¯è¯é¨åå é¤ï¼åªç¿»è¯é¤äºèªå®ä¹æ¯è¯å©ä½çé¨å 847 848 //è¿éèèé夿¿æ¢é®é¢ï¼æ¯å¦è¦å° 好 æ¿æ¢ä¸º ä½ å¥½ ï¼å¦æé夿¿æ¢ï¼å¯è½ä¼åºæ¥ ä½ ä½ ä½ ä½ ä½ å¥½ 849 //å¦å¤è¿è¦èèç¹æ®å符é®é¢ï¼å¦æç¨ split ä¼åºç°å¼å¸¸ 850 //注æï¼å¯è½ä¼åºç°å¤ä¸ªkeyçæ åµ 851 var positions = []; 852 var pos = wordKeyIndex; 853 // 彿¾å° keyçæåæ¶ç»§ç»æ¥æ¾ 854 while (pos !== -1) { 855 positions.push(pos); 856 // ä»å½åä½ç½®çä¸ä¸ä¸ªå符å¼å§ç»§ç»æ¥æ¾ 857 pos = text.indexOf(nomenclatureKey, pos + 1); 858 } 859 // éåæææ¾å°çä½ç½®ï¼å¤ææ¯å¦æ¯å·²ç»èªå®ä¹æ¯è¯æ¿æ¢åçï¼å¦æå ¨é¨é½æ¯æ¿æ¢åçï¼é£ä¹å°±ä¸éè¦ç»§ç»æ¿æ¢äºï¼ç´æ¥ return éåºï¼é¿å é夿¿æ¢ã 860 //使¯å¦æåªè¦æä¸æ¬¡æ¯æ²¡æè¢«æ¿æ¢çï¼é£ä¹é½ä¼å¾ä¸æ§è¡ï¼å¯è½ä¼åå¨é夿¿æ¢ã 861 //æ¯å¦ "ä½ å¥½åæå¥½å大家好é½å¥½å" å° "好" æ¿æ¢ä¸º â好åâï¼è¿é伿¿æ¢ä¸º âä½ å¥½ååæå¥½åå大家好åé½å¥½ååâ ï¼å 为æåçä¿©â好âç»è¿è¯å«ï¼æ¯æ²¡æè¢«æ¿æ¢è¿çï¼æä»¥è¿å¥æ¯è¦è¢«è¿è¡æ¿æ¢æ§è¡çï¼è¿ä¸ªæ´å¥æ¿æ¢æ¯ç°æçæ¹æ³ï¼è¿ä¸ªåç»å¯ä»¥ææè±ä½ æ¹æ³æåä¸ä¸ï¼è¿è¡é对æ§çåªé对æåçä¿©â好âè¿è¡ç²¾åæ¿æ¢ï¼èä¸å¯¹åé¢çä¿©â好åâå¨è¿è¡æ¿æ¢ 862 863 var texts = new Array(); //宿¯textç»è¿posçåå²åçæ°ç»ï¼è¦è¿åçæ°ç» 864 var resultText = text;
864 //è¿æ¯ætextææ¬ç»è¿å° nomenclatureKey æ¿æ¢ä¸º nomenclatureValue ä¹åï¼å¾å°çæ°çææ¬ 865 var lastPos = text.length; //è®°å½ä¸ä¸ä¸ªposçä½ç½® 866 for(var i = positions.length-1; i>=0; i--){ //éç¨--çæ¹å¼ï¼ä¿è¯æ¿æ¢å䏿 便§è½ä¿æä¸è´ 867 var itempos = positions[i]; 868 869 //å°posåå²ä¹åçææ¬ï¼å å ¥å° wordSplits æ°ç»ä¸ 870 texts.unshift(text.substring(itempos + nomenclatureKey.length, lastPos)); 871 //console.log(pos +' --> '+text.substring(pos + nomenclatureKey.length, lastPos)); 872 873 // å° text ä¸ ç pos 䏿 çææ¬ï¼ä¹å°±æ¯ä» pos å¼å§ï¼å°pos+nomenclatureKey.length ç»æçææ¬ï¼æ¿æ¢ä¸º nomenclatureValue 874 resultText = resultText.substring(0, itempos) + nomenclatureValue + resultText.substring(itempos+nomenclatureKey.length); 875 876 lastPos = itempos; 877 } 878 if(lastPos > 0){ 879 //å°posåå²ä¹åçææ¬ï¼å å ¥å° wordSplits æ°ç»ä¸ 880 texts.unshift(text.substring(0, lastPos)); 881 } 882 883 //çé texts ï¼å°ç©ºå符串 length == 0 çåé¤ 884 if(texts.length > 0){ 885 for(var di = texts.length - 1; di >= 0; di--){ 886 if(texts[di].length == 0){ 887 texts.splice(di, 1); 888 } 889 } 890 } 891 892 893 //妿æ¯èªå®ä¹æ¯è¯çkeyçäºvalueï¼åæ¯å±äºæå®çæäºææ¬ä¸è¿è¡ç¿»è¯çæ åµï¼æä»¥è¿éè¦åç¬å¤æä¸ä¸ï¼å®ä¿©ä¸ç¸çæä¼å»è¿è¡æ¿æ¢æä½ï¼å å¾è¿è¡æ§è½è®¡ç®æµªè´¹ - è½ç¶è¿ä¸æ¥æ¯ä¸ä¼å°çï¼å 为å¨è¿ä¸ªæ¹æ³çå ¥å£å¤å°±å·²ç»ç»è¿è¿ä¸ªå¤å®äº 894 if(nodeObject != null && typeof(nodeObject.node) !== 'undefined' && nodeObject.node !== null){ 895 896 // è®°å½æ¤æ¬¡nodeçæ¹åæ¯æ translate.js 导è´çï¼é¿å 被domæ¹åçå¬ç»è¯¯ä»¥ä¸ºå«çå¼èµ·ç 897 if(translate.node.get(nodeObject.node) != null){ 898 translate.node.get(nodeObject.node).lastTranslateRenderTime = Date.now(); 899 }else{ 900 //è¿ä¸ªå¦ææ translate.js å é¨èªä¸»è§¦åï¼è¯å®ä¸ä¼æ²¡æå¼çã使¯å¦ææå¨åå ¶ä»ç¨åºé触åï¼é£è¿ä¸ªæ¯ä¼æ²¡æå¼ç 901 } 902 903 if(nomenclatureKey === nomenclatureValue){ 904 //èªå®ä¹å¿½ç¥ç¿»è¯çæå ,key è· value ç¸çï¼ä¾¿æ¯å¿½ç¥ç¿»è¯ç 905 translate.element.nodeAnalyse.set(nodeObject.node, nomenclatureKey, nomenclatureValue, nodeObject.attribute); 906 }else{ 907 //èªå®ä¹æ¯è¯ç 908 translate.element.nodeAnalyse.set(nodeObject.node, nomenclatureKey, nomenclatureValue, nodeObject.attribute); 909 } 910 } 911 912 return { 913 texts:texts, 914 find:true, 915 resultText:resultText 916 } 917 }else{ 918 return { 919 texts:[text], 920 find:false, 921 resultText:text 922 } 923 } 924 }, 925 //å¯¹ä¼ å ¥çstrå符è¿è¡æ¿æ¢ï¼å°å ¶ä¸çèªå®ä¹æ¯è¯æåè¿è¡æ¿æ¢ï¼ç¶åå°æ¿æ¢åçç»æè¿å 926 /* 927 èªå®ä¹æ¯è¯ 928 示ä¾ï¼ 929 translate.nomenclature.dispose(['ä½ å¥½æå¥½å¥¹ä¹å¥½'],'好','hao', null) 930 ç»æï¼ 931 { 932 find:true, 933 texts: ['ä½ ', 'æ', '她ä¹'], 934 resultText: "ä½ haoæhao她ä¹hao" 935 } 936 937 @param {*} texts è¦è¿è¡èªå®ä¹æ¯è¯æ¿æ¢çææ¬æ°ç»ï¼ä¼ å ¥æ¯å¦ ["ä½ å¥½","ä¸ç"] 938 @param {*} nomenclatureKey 939 @param {*} nomenclatureValue 940 @param {*} nodeObject è¦è¿è¡æ¿æ¢çèç¹å¯¹è±¡ï¼èªå®ä¹æ¯è¯å½ä¸åï¼ä¼ç´æ¥å¨è¿ä¸ªèç¹ä¸è¿è¡æ¿æ¢æ¾ç¤º 941 å¦æä¼ å ¥ nullï¼åä¸è¿è¡ä»»ä½æ¿æ¢æä½ 942 å¦æä¼ å ¥å ·ä½çå¼ï¼åæ¯ï¼ 943 { 944 node: nodeèç¹ ï¼è¦æ¹å¨çæåæå¨çnodeèç¹ã 妿æ¹å¨çæåæ¯å¦æ¯ div çtitleä¸ï¼é£ä¹è¿éä¼ å ¥çnodeåºè¯¥æ¯ title çnodeï¼è䏿¯ div çnode 945 } 946 947 948 @returns { 949 find:false, //æ¯å¦å½ä¸äºèªå®ä¹æ¯è¯ï¼å½ä¸äºï¼åæ¯ trueï¼ä¹ä»£è¡¨ textArray å·²ç»ä¸æ¯ä¼ å ¥çé£ä¸ªäºï¼å·²ç»è¢«å¤çåå²è¿äº 950 texts:['ä½ ','好'], //éå¯¹ä¼ å ¥ç textArray åæ°ï¼è¿è¡æ¯è¯å½ä¸å®æåï¼å°å½ä¸æ¯è¯çé¨åå餿ï¼è¿è¡åå²ï¼æè¿åçæ°çtextArray . å¦ææ²¡æå½ä¸æ¯è¯ï¼é£ä¹è¿éæ¯åªæä¸ä¸ªå¼ï¼
950é£ä¾¿æ¯è¿åä¼ å ¥çtext 951 resultText: "ä½ haoæhao她ä¹hao" 952 } 953 */ 954 dispose: function(textArray, nomenclatureKey, nomenclatureValue, nodeObject){ 955 // è¾å ¥éªè¯ 956 if (!Array.isArray(textArray)) { 957 textArray = [String(textArray)]; 958 } 959 960 //è¿éè¦è°ç¨ translate.nomenclature.replace æ¹æ³ï¼å¯¹ textArray ä¸çæ¯ä¸ªææ¬è¿è¡èªå®ä¹æ¯è¯æ¿æ¢å¤ç 961 var result = { 962 find:false 963 }; 964 result.texts = new Array(); 965 result.resultText = new Array(); 966 for(var i = 0; i < textArray.length; i++){ 967 var text = textArray[i]; 968 var res = translate.nomenclature.replace(text, nomenclatureKey, nomenclatureValue, nodeObject); 969 if(res.find){ 970 result.find = true; 971 } 972 result.texts = result.texts.concat(res.texts); 973 result.resultText.push(res.resultText); 974 } 975 976 //对 result.texts è¿è¡å»éå¤ç 977 if(result.texts.length > 0){ 978 for(var di = result.texts.length - 1; di >= 0; di--){ 979 if(result.texts.indexOf(result.texts[di]) != di){ 980 result.texts.splice(di, 1); 981 } 982 } 983 } 984 985 return result; 986 987 }, 988 }, 989 990 //已转为 offline ï¼è¿ä¸ªæ¯å¯¹æ§çåå ¼å®¹ 991 office:{ 992 export:function(){ 993 console.log('è¯·ä½¿ç¨ææ°çæ¬ç translate.offline.export , è䏿¯ translate.office.export'); 994 }, 995 showPanel:function(){ 996 console.log('è¯·ä½¿ç¨ææ°çæ¬ç translate.offline.showPanel , è䏿¯ translate.office.export'); 997 }, 998 append:function(to, properties){ 999 translate.offline.append(to, properties); 1000 }, 1001 fullExtract:{ 1002 isUse:false 1003 } 1004 }, 1005 offline:{ 1006 /* 1007 ç½é¡µä¸ç¿»è¯ä¹åï¼èªå¨å¯¼åºå½å页é¢çæ¯è¯åº 1008 1009 éè¦å æå®æ¬å°è¯ç§ï¼ä¼èªå¨å°æ¬å°è¯ç§è¿è¡é ç½®æ¯è¯åº 1010 1011 */ 1012 export:function(){ 1013 if(translate.language.getLocal() == translate.language.getCurrent()){ 1014 alert('æ¬å°è¯ç§è·è¦ç¿»è¯çè¯ç§ä¸è´ï¼æ é导åº'); 1015 return; 1016 } 1017 1018 var text = ''; 1019 for(var uuid in translate.nodeQueue){ 1020 if (!translate.nodeQueue.hasOwnProperty(uuid)) { 1021 continue; 1022 } 1023 1024 var queueValue = translate.nodeQueue[uuid]; 1025 for(var lang in translate.nodeQueue[uuid].list){ 1026 if (!translate.nodeQueue[uuid].list.hasOwnProperty(lang)) { 1027 continue; 1028 } 1029 //console.log('------'+lang) 1030 if(typeof(lang) != 'string' || lang.length < 1){ 1031 continue; 1032 } 1033 //if(translate.language.getLocal() == lang){ 1034 //console.log(translate.nodeQueue[uuid].list[lang]); 1035 for(var hash in translate.nodeQueue[uuid].list[lang]){ 1036 if (!translate.nodeQueue[uuid].list[lang].hasOwnProperty(hash)) { 1037 continue; 1038 } 1039 1040 var result = translate.storage.get('hash_'+translate.language.getCurrent()+'_'+hash); 1041 //å¦æç¿»è¯ç»æä¸åå¨ï¼å¯è½æ¯åè¯ç§æ¬èº«å°±æ²¡æç¿»è¯ï¼å¿½ç¥å°±å¥½äº ï¼å 为æä¸ªæ¬å°è¯ç§ä¹å¼ºå¶ç¿»è¯çè½åï¼æä»¥åè¯ç§ä¹æ¾è¡ï¼å¨è¿éè¿è¡ä¸æ¬¡ç»æå¤æï¼å å¾éæ¼åè¯ç§ä¹ç¿»è¯çæ åµï¼ 1042 if(typeof(result) === 'undefined' || result === null || result.length === 0){ 1043 continue; 1044 } 1045 1046 //å°é ç½®ä¸åºç°çæ¢è¡æ¿æ¢ä¸º \n è¿ä¸ªç¬¦å· 1047 var lineText = translate.nodeQueue[uuid].list[lang][hash].original + '='+result; 1048 text = text + '\n' + (lineText.replace(/\n/g, '{\\\\n}')); 1049 } 1050 //} 1051 } 1052 1053 } 1054 1055 if(text.length > 0){ 1056 //æå 容 1057 text = 'translate.offline.append(\''+translate.language.getCurrent()+'\',`'+text+'\n`);'; 1058 //console.log(text); 1059 translate.util.loadMsgJs();
1060 msg.popups({ 1061 text:'<textarea id="msgPopupsTextarea" style="width:100%; height:100%; color: black; padding: 8px;">loaing...</textarea>', 1062 width:'750px', 1063 height:'600px', 1064 padding:'1px', 1065 }); 1066 document.getElementById('msgPopupsTextarea').value = text; 1067 }else{ 1068 msg.alert('æ ææå 容ï¼'); 1069 } 1070 1071 1072 }, 1073 //æ¾ç¤ºå¯¼åºé¢æ¿ 1074 showPanel:function(){ 1075 translate.recycle = function(){}; //éååå¾åæ¶ï¼å¼ç¨ 1076 1077 let panel = document.createElement('div'); 1078 panel.setAttribute('id', 'translate_export'); 1079 panel.setAttribute('class','ignore'); 1080 1081 //å¯¼åºæé® 1082 let button = document.createElement('button'); 1083 button.onclick = function() { 1084 translate.offline.export(); 1085 }; 1086 button.innerHTML = '导åºé 置信æ¯'; 1087 button.setAttribute('style', 'margin-left: 72px; margin-top: 30px; margin-bottom: 20px; font-size: 25px; background-color: blue; padding: 15px; padding-top: 3px; padding-bottom: 3px; border-radius: 3px;'); 1088 panel.appendChild(button); 1089 1090 //说ææå 1091 let textdiv = document.createElement('div'); 1092 textdiv.innerHTML = '1. é¦å å°å½åè¯ç§åæ¢ä¸ºä½ è¦ç¿»è¯çè¯ç§<br/>2. ç¹å»å¯¼åºæé®ï¼å°ç¿»è¯çé 置信æ¯å¯¼åº<br/>3. å°å¯¼åºçé 置信æ¯ç²è´´å°ä»£ç ä¸ï¼å³å¯å®æ<br/><a href="http://translate.zvo.cn/4076.html" target="_black" style="color: aliceblue; text-decoration: underline;">ç¹æ¤è¿è¡æ¥é 详ç»ä½¿ç¨è¯´æ</a>'; 1093 textdiv.setAttribute('style','font-size: 14px; padding: 12px;'); 1094 1095 panel.appendChild(textdiv); 1096 1097 panel.setAttribute('style', 'background-color: black; color: #fff; width: 320px; height: 206px; position: fixed; bottom: 50px; right: 50px;'); 1098 //æå ç´ èç¹æ·»å å°bodyå ç´ èç¹ä¸æä¸ºå ¶åèç¹ï¼æ¾å¨bodyçç°æåèç¹çæå 1099 document.body.appendChild(panel); 1100 1101 translate.util.loadMsgJs();
1102 }, 1103 /* 1104 追å ç¦»çº¿ç¿»è¯æ°æ®ãå¦æè¿½å çæ°æ®éå¤ï¼ä¼èªå¨å»é 1105 ä¼ å ¥åæ°ï¼ 1106 from è¦è½¬æ¢çè¯ç§ 1107 to ç¿»è¯è³çç®æ è¯ç§ 1108 properties å±äºé ç½®è¡¨ï¼æ ¼å¼å¦ï¼ 1109 ä½ å¥½=Hello 1110 ä¸ç=ShiJie 1111 è¿ä¸ªä¼ å ¥åæ°è· translate.nomenclature.append çä¼ å ¥åæ°æ ¼å¼æ¯ä¸è´ç 1112 */ 1113 append:function(to, properties){ 1114 //console.log(properties) 1115 //å°propertiesè¿è¡åæ 1116 //æè¡æå 1117 var line = properties.split('\n'); 1118 //console.log(line) 1119 1120 //计ç®å10è¡ï¼å¤å®å½åé ç½®æä»¶çè¡å¼å¤´ç¼©è¿æ¹å¼ 1121 var lmap = new Map(); 1122 for(var line_index = 0; line_index < line.length && line_index < 10; line_index++){ 1123 const match = line[line_index].match(/^[ \t]+/); 1124 var suojin = match ? match[0] : '0'; //0ä¾¿æ¯æ²¡æç©ºç½ç¬¦ç¼©è¿ 1125 var sum = 1; //ç´¯å æ¬¡æ° 1126 if(typeof(lmap.get(suojin)) !== 'undefined'){ 1127 sum = sum+lmap.get(suojin); 1128 } 1129 lmap.set(suojin, sum); 1130 } 1131 1132 // æ ¸å¿é»è¾ï¼éåMapæ¾å°æ¬¡æ°æå¤çkey 1133 let maxCount = 0; // è®°å½æå¤§æ¬¡æ°ï¼åå§ä¸º0ï¼æ¬¡æ°è³å°ä¸º1ï¼ä¸å½±åï¼ 1134 let maxKey = null; // è®°å½æ¬¡æ°æå¤çkey 1135 1136 // æ¹å¼1ï¼for...oféåMap.entries()ï¼æ¨èï¼ç´è§ï¼ 1137 for (const [key, count] of lmap.entries()) { 1138 if (count > maxCount) { 1139 maxCount = count; // æ´æ°æå¤§æ¬¡æ° 1140 maxKey = key; // æ´æ°å¯¹åºkey 1141 } 1142 } 1143 //console.log(lmap); 1144 //console.log(maxKey+' -> '+maxCount); 1145 lmap = null; 1146 1147 for(var line_index = 0; line_index < line.length; line_index++){ 1148 var item = line[line_index]; 1149 //æç¼©è¿ï¼é£å°±éè¦æè¡å¼å§ç缩è¿å»æ 1150 if(maxKey !== '0'){ 1151 if(line[line_index].startsWith(maxKey)){ 1152 var item = line[line_index].slice(maxKey.length); 1153 }else{ 1154 //å¼å¸¸æç¤ºåè¦ 1155 if(line[line_index].trim().length > 0){ 1156 translate.log('WAINING : translate.offline.append å¼å¸¸ï¼åç°æè¡çé 置项缩è¿å¼å¸¸ï¼è¿è¡ç缩è¿åºè¯¥è·å ¶ä»è¡ç缩è¿ä¿æä¸è´ï¼å¼å¸¸çè¿è¡é 置项为ï¼\n'+item); 1157 } 1158 } 1159 } 1160 if(item.length < 1){ 1161 //空è¡ï¼å¿½ç¥ 1162 continue; 1163 } 1164 item = item.replace(/\{\\n\}/g, '\n'); 1165 var kvs = item.split('='); 1166 //console.log(kvs) 1167 if(kvs.length != 2){ 1168 //䏿¯keyãvalueææçï¼å¿½ç¥ 1169 continue; 1170 } 1171 var key = kvs[0]; 1172 var value = kvs[1]; 1173 //console.log(key) 1174 if(key.length == 0 || value.length == 0){ 1175 //å ¶ä¸æä¸ªæç©ºï¼åå¿½ç¥ 1176 continue; 1177 } 1178 //console.log('set---'+key); 1179 //å å ¥ storate 1180 translate.storage.set('hash_'+to+'_'+translate.util.hash(key), value); 1181 } 1182 }, 1183 1184 1185 //å ¨é¨æåè½åï¼æ´ç«çç¦»çº¿ç¿»è¯æ°æ®æåï¼ 1186 fullExtract:{ 1187 /*js translate.offline.fullExtract.set start*/ 1188 /* 1189 å°ç¿»è¯çç»æå å ¥ 1190 hash: ç¿»è¯åçææ¬çhash 1191 originalText: 翻以åçææ¬ï¼åå§ææ¬ 1192 toLanguage: ç¿»è¯ä¸ºä»ä¹è¯è¨ 1193 translateText: ç¿»è¯ç»æçææ¬ 1194 */ 1195 set: async function(hash, originalText, toLanguage, translateText){ 1196 if(typeof(translate.storage.IndexedDB) == 'undefined'){ 1197 translate.log('ERROR: translate.storage.IndexedDB not find'); 1198 return; 1199 } 1200 var obj = await translate.storage.IndexedDB.get('hash_'+hash); 1201 if(typeof(obj) == 'undefined' && obj == null){ 1202 obj = { 1203 originalText:originalText 1204 }; 1205 } 1206 obj[toLanguage] = translateText; 1207 await translate.storage.IndexedDB.set('hash_'+hash, obj); 1208 }, 1209 /*js translate.offline.fullExtract.set end*/ 1210 1211 /*js translate.offline.fullExtract.export start*/ 1212 /* 1213 å°åå¨çæ°æ®å¯¼åºä¸º txt æä»¶ä¸è½½ä¸æ¥ 1214 */ 1215 export: async function(to){ 1216 if(typeof(translate.storage.IndexedDB) == 'undefined'){ 1217 translate.log('ERROR: translate.storage.IndexedDB not find'); 1218 return; 1219 } 1220 if(typeof(to) != 'string'){ 1221 translate.log('error : to param not find, example: "english"'); 1222 return; 1223 } 1224 var text = 'translate.offline.append(\''+to+'\',`'; 1225 1226 var data = await translate.storage.IndexedDB.list('hash_*'); 1227 for(var i in data){ 1228 if (!data.hasOwnProperty(i)) { 1229 continue; 1230 } 1231 //var originalText = data[i].value.originalText.replace(/\n/g, "\\n").replace(/\t/g, "\\t"); 1232 //text = text + '\n' + originalText + '='+data[i].value.english.replace(/\n/g, "\\n").replace(/\t/g, "\\t"); 1233 1234 //å¦æç¿»è¯ç»æä¸åå¨ï¼å¯è½æ¯åè¯ç§æ¬èº«å°±æ²¡æç¿»è¯ï¼å¿½ç¥å°±å¥½äº ï¼å 为æä¸ªæ¬å°è¯ç§ä¹å¼ºå¶ç¿»è¯çè½åï¼æä»¥åè¯ç§ä¹æ¾è¡ï¼å¨è¿éè¿è¡ä¸æ¬¡ç»æå¤æï¼å å¾éæ¼åè¯ç§ä¹ç¿»è¯çæ åµï¼ 1235 if(typeof(data[i].value) === 'undefined' || typeof(data[i].value[to]) === 'undefined' || data[i].value[to] === null || data[i].value[to].trim().length === 0){ 1236 continue; 1237 } 1238 1239 var lineText = data[i].value.originalText+'='+data[i].value[to]; 1240 text = text + '\n' + (lineText.replace(/\n/g, '{\\\\n}')); 1241 } 1242 text = text + '\n`);' 1243 1244 const blob = new Blob([text], { type: "text/plain" }); 1245 const url = URL.createObjectURL(blob); 1246 const link = document.createElement("a"); 1247 link.href = url; 1248 link.download = to+".txt"; 1249 link.click(); 1250 URL.revokeObjectURL(url); 1251 }, 1252 /*js translate.offline.fullExtract.export end*/ 1253 1254 /* 1255 æ¯å¦å¯ç¨å ¨é¨æåçè½å 1256 true: å¯ç¨ï¼ é»è®¤æ¯falseä¸å¯ç¨ã 1257 å¦æè®¾ç½®ä¸ºtrueï¼åæ¯æ¬¡éè¿è°ç¨ç¿»è¯æ¥å£è¿è¡ç¿»è¯åï¼é½ä¼å°ç¿»è¯çåæãè¯æãç¿»è¯ä¸ºä»ä¹è¯ç§ï¼é½ä¼åç¬è®°å½ä¸æ¬¡ï¼åå ¥æµè§å¨ç IndexedDB ç translate.js æ°æ®åº 1258 ç¶åå¯ä»¥æµè§ææé¡µé¢åï¼æææç¿»è¯ä¸å¯¹ä¸ç对åºç¿»è¯ç»æç´æ¥å ¨é¨å¯¼åºï¼ç¨äºå离线翻è¯é 置使ç¨ã 1259 */ 1260 isUse:false, 1261 } 1262 }, 1263 setAutoDiscriminateLocalLanguage:function(){ 1264 translate.autoDiscriminateLocalLanguage = true; 1265 }, 1266 /* 1267 å¾ ç¿»è¯ç页é¢çnodeéå 1268 ä¸ç»´ï¼key:uuidï¼ä¹å°±æ¯executeæ¯æ¬¡æ§è¡é½ä¼å建ä¸ä¸ªç¿»è¯éåï¼è¿ä¸ªæ¯ç¿»è¯éåçå¯ä¸æ è¯ã 1269 value: 1270 k/v 1271 äºç»´ï¼å¯¹è±¡å½¢æï¼å ·ä½æï¼ 1272 key:expireTime å½åä¸ç»´æ°ç»keyçè¿ææ¶é´ï¼å°è¾¾è¿ææ¶é´ä¼èªå¨å 餿è¿ä¸ªä¸ç»´æ°ç»ã妿<0å代表永ä¸å é¤ï¼å¸¸é©»å å 1273 value:list ä»DOMä¸èªå¨è¯å«åºçè¯è¨ææ¬åèç¹æ°æ®ï¼æç §è¯ç§è¿è¡äºååï¼æ¯ä¸ªè¯ç§ä¾¿æ¯å ¶ä¸çä¸é¡¹ã 1274 ä¸ç»´ï¼é对äºç»´çvalueï¼ key:englishãchinese_simplifiedçè¯ç§ï¼è¿éçkey便æ¯å¯¹valueç夿ï¼åvalueä¸çè¦ç¿»è¯çè¯æ¯ä»ä¹è¯ç§ï¼å¯¹å ¶è¿è¡äºè¯ç§åç±» value: k/v 1275 åç»´ï¼é对ä¸ç»´çvalueï¼ key:è¦ç¿»è¯çè¯ï¼ç»è¿è¯ç§åå²çï¼çhashï¼ value: n
1275odeæ°ç» 1276 äºç»´ï¼é对åç»´çvalueï¼ è¿æ¯ä¸ªå¯¹è±¡ï¼ å ¶ä¸ 1277 original: æ¯ä¸ç»´çkeyçhashçåå§æåï¼ node å ç´ ä¸çåå§æåï¼å¯è½æ¯nodeå ç´ æ´ä¸ªå 容ï¼ä¹å¯è½æ¯è¢«åå²åºçæä¸åå å®¹ï¼æ¯å¦ä¸è±ææ··åæ¶åç¬æåä¸æï¼ 1278 cacheHash: å¦æç¿»è¯æ¶å¹é å°äºèªå®ä¹æ¯è¯åºä¸çè¯ï¼é£ä¹ç¿»è¯å®ååå ¥å°ç¼å䏿¶ï¼å ¶ç¼åçç¿»è¯åå符串已ç»ä¸æ¯originalï¼èæ¯å¹é 宿¯è¯åºåçææ¬çhashäºãæä»¥è¿éé¢å¤å¤å¢å äºè¿ä¸ªå±æ§ã妿å¹é äºæ¯è¯åºï¼é£è¿éå°±æ¯è¦è¿è¡ç¼åçç¿»è¯åææ¬çhashï¼å¦ææªä½¿ç¨æ¯è¯åºï¼è¿éå°±è·å ¶key-hash ç¸åã 1279 translateText: é对 original çç»è¿å å·¥è¿çæåï¼æ¯å¦ç»è¿èªå®ä¹æ¯è¯ã以åå ¶ä»å¤çæä½åçï¼å¾ è¿è¡ææ¬ç¿»è¯çæåã 1280 nodes: æåªäºnodeå ç´ ä¸å å«äºè¿ä¸ªè¯ï¼é½ä¼å¨è¿éè®°å½ 1281 å ç»´ï¼é对äºç»´ç nodesï¼å°åä¸ªå ·ä½ç node 以å å ¶æä½ç attribute 以æ°ç»å½¢å¼ååº 1282 ä¸ç»´ï¼é对å ç»´ååºçnodesæ°ç»ï¼å ¶ä¸å å«ï¼ 1283 node: å ·ä½æä½çnodeå ç´ 1284 attribute: ä¹å°±æ¯ç¿»è¯ææ¬éå¯¹çæ¯ä»ä¹ï¼æ¯nodeæ¬èº«ï¼nodeValueï¼ï¼è¿æ¯ node çæä¸ªå±æ§ï¼æ¯å¦title屿§ï¼è¿åæ¯è®¾ç½®ä¸º "title"ã妿è¿éä¸ä¸ºç©ºï¼é£å°±æ¯é对ç屿§æä½çã 妿è¿é为空æè undefined ï¼é£å°±æ¯é对nodeæ¬èº«ï¼ä¹å°±æ¯ nodeValue çå符串æä½ç 1285 beforeText: nodeå ç´ ä¸è¿è¡ç¿»è¯ç»æèµäºæ¶ï¼é¢å¤å¨ç¿»è¯ç»æçåé¢å ä¸çå符串ãå ¶åºç¨åºæ¯ä¸ºï¼å¦æä¸è±ææ··ååºæ¯ä¸ï¼é¿å 䏿è·è±ææ¨ç导è´ç¿»è¯ä¸ºè±è¯åï¼è¿å°ä¸åäºãé»è®¤æ¯ç©ºå符串 '' 1286 afterText: nodeå ç´ ä¸è¿è¡ç¿»è¯ç»æèµäºæ¶ï¼é¢å¤å¨ç¿»è¯ç»æçåé¢å ä¸çå符串ãå ¶åºç¨åºæ¯ä¸ºï¼å¦æä¸è±ææ··ååºæ¯ä¸ï¼é¿å 䏿è·è±ææ¨ç导è´ç¿»è¯ä¸ºè±è¯åï¼è¿å°ä¸åäºãé»è®¤æ¯ç©ºå符串 '' 1287 1288 çå½å¨æï¼ å½execute()æ§è¡æ¶åå»ºï¼ å½executeç»æï¼å ¶ä¸çæærequestæ¥æ¶å°ååºå¹¶æ¸²æå®æ¯ï¼æ¶éæ¯ï¼å½åææ¶ä¸éæ¯ï¼ä»¥æ¹ä¾¿è°è¯ï¼ 1289 */ 1290 nodeQueue:{}, 1291 //æå®è¦ç¿»è¯çå ç´ çéå,å¯ä¼ å ¥ä¸ä¸ªå ç´ æå¤ä¸ªå ç´ 1292 //å¦è®¾ç½®ä¸ä¸ªå ç´ ï¼å¯ä¼ å ¥å¦ï¼ document.getElementById('test') 1293 //å¦è®¾ç½®å¤ä¸ªå ç´ ï¼å¯ä¼ å ¥å¦ï¼ document.getElementsByTagName('DIV') 1294 setDocuments:function(documents){ 1295 if (documents == null || typeof(documents) == 'undefined') { 1296 return; 1297 } 1298 1299 if(typeof(documents.length) == 'undefined'){ 1300 //䏿¯æ°ç»ï¼æ¯å个å ç´ 1301 translate.documents[0] = documents; 1302 }else{ 1303 //æ¯æ°ç»ï¼ç´æ¥èµäº 1304 translate.documents = documents; 1305 } 1306 //æ¸ ç©ºç¿»è¯éåï¼ä¸æ¬¡ç¿»è¯æ¶éæ°æ£ç´¢ 1307 translate.nodeQueue = {}; 1308 //console.log('set documents , clear translate.nodeQueue'); 1309 }, 1310 //è·åå½åæå®ç¿»è¯çå ç´ ï¼æ°ç»å½¢å¼ [document,document,...]ï¼ 1311 //å¦æç¨æ·æªä½¿ç¨setDocuments æå®çï¼é£ä¹è¿åæ´ä¸ªç½é¡µ 1312 //å®è¿åçæ°¸è¿æ¯ä¸ªæ°ç»å½¢å¼ 1313 getDocuments:function(){ 1314 if(translate.documents != null && typeof(translate.documents) != 'undefined' && translate.documents.length > 0){ 1315 // setDocuments æå®ç 1316 return translate.documents; 1317 }else{ 1318 //æªä½¿ç¨ setDocumentsæå®ï¼é£å°±æ¯æ´ä¸ªç½é¡µäº 1319 //return document.all; //ç¿»è¯ææç è¿æ¯ v3.5.0ä¹åç 1320 //v3.5.0 ä¹åéç¨ æ¿ htmlçæä¸å±çdemoï¼è䏿¯ document.all æ¿å°å¯è½å å个dom 1321 var doms = new Array(); 1322 doms[0] = document.documentElement; 1323 return doms; 1324 } 1325 }, 1326 1327 listener:{ 1328 //å½å页颿å¼åï¼æ¯å¦å·²ç»æ§è¡å®execute() æ¹æ³è¿è¡ç¿»è¯äºï¼åªè¦æ§è¡å®ä¸æ¬¡ï¼è¿é便æ¯trueã ï¼å¤ç§è¯è¨çAPI请æ±å®æ¯å¹¶å·²æ¸²æhtmlï¼ 1329 //isExecuteFinish:false, 1330 //æ¯å¦å·²ç»ä½¿ç¨äº translate.listener.start() äºï¼å¦æä½¿ç¨äºï¼é£è¿é为trueï¼å¤æ¬¡è°ç¨ translate.listener.start() åªæç¬¬ä¸æ¬¡ææ 1331 isStart:false, 1332 //ç¨æ·ç代ç 鿝å¦å¯ç¨äº translate.listener.start() ï¼trueï¼å¯ç¨ 1333 //å½ç¨æ·å 载页é¢åï¼ä½æ¯æªå¯ç¨ç¿»è¯æ¶ï¼ä¸ºäºé使§è½ï¼ç嬿¯ä¸ä¼å¯å¨çï¼ä½æ¯ç¨æ·æå¨ç¹å»ç¿»è¯åï¼ä¹è¦æçå¬å¯å¨èµ·æ¥ï¼æä»¥å°±å äºè¿ä¸ªåæ°ï¼æ¥è¡¨ç¤ºå½åæ¯å¦å¨ä»£ç éå¯ç¨äºçå¬ï¼ä»¥ä¾¿å½è§¦åç¿»è¯æ¶ï¼çå¬ä¹è·ç触å 1334 use:false, 1335 1336 //é对 input ç value ç嬿 åµ, 宿 æ³ç¨domçæ§ï¼é坹忝 vant æ¡æ¶ï¼è¦ç¨ input ç value è¿è¡ä½ä¸ºå 容æ
1336¾ç¤ºçï¼å°±è¦éç¨è¿ç§æ¹å¼æ¥çå¬åå¨å¹¶ç¿»è¯äº 1337 input:{ 1338 /* 1339 åçvalue屿§æè¿°ç¬¦ 1340 å¦æä¸ºnullï¼åæ¯è¿æ²¡å¯¹inputçvalueè¿è¡çå¬ã 1341 妿已è¿è¡çå¬ï¼ä¼æåæ¬ç value æ¹åç set ... èµäºè¿éã 1342 */ 1343 originalValueDescriptor : null, 1344 1345 /* 1346 å¯å¨å¯¹ input value åå¨ççå¬åç¿»è¯ 1347 */ 1348 start:function(){ 1349 if(translate.listener.input.originalValueDescriptor !== null){ 1350 console.log('å·²å¯å¨è¿äºï¼æ éå¨å¯å¨'); 1351 return; 1352 } 1353 1354 // 1. ä¿ååçvalue屿§æè¿°ç¬¦ 1355 translate.listener.input.originalValueDescriptor = Object.getOwnPropertyDescriptor( 1356 HTMLInputElement.prototype, 1357 'value' 1358 ); 1359 1360 // 2. éåHTMLInputElementååçvalue setterï¼å½±åææinputï¼ 1361 Object.defineProperty(HTMLInputElement.prototype, 'value', { 1362 ...translate.listener.input.originalValueDescriptor, 1363 set(newValue) { 1364 const oldValue = this.value; // thisæåå½å被修æ¹çinput 1365 1366 // æ§è¡åçèµå¼ 1367 translate.listener.input.originalValueDescriptor.set.call(this, newValue); 1368 1369 // å¼ååæ¶è§¦åé»è¾
1370 if (newValue !== oldValue) { 1371 //console.log(`JSä¿®æ¹äºinputå¼ï¼`); 1372 //console.log(` æ§å¼=${oldValue} â æ°å¼=${newValue}`); 1373 //console.log(this) 1374 1375 //妿æ translate.node åå²ï¼è¦æ ¹æ®åå²å¤å®ä¸ä¸ï¼å¦æå½å䏿¯translate.js 导è´çæ¹åï¼é£å°±æ¯å ¶ä»js触åçï¼é£ä¹å°å ¶å æï¼è¿æ ·æè½è§¦åå®éæ°ç¿»è¯ 1376 if(translate.node.find(this)){ 1377 var nodeData = translate.node.get(this); 1378 1379 if(typeof(nodeData.lastTranslateRenderTime) === 'number' && Date.now() - nodeData.lastTranslateRenderTime < 100){ 1380 //å°äº100毫ç§ï¼è¿æ¯ translate.js å¼èµ·çæ¹å¨ï¼ä¸éè¦ä»»ä½å¤ç 1381 }else{ 1382 //䏿¯ translate.js å¼èµ·çï¼é£ä¹éè¦è¿è¡ç¿»è¯ 1383 //å æå½åçè®°å½ï¼ä»¥ä¾¿è½æ£å¸¸æ«æå å ¥ç¿»è¯ 1384 translate.node.delete(this); 1385 } 1386 1387 } 1388 translate.execute([this]); 1389 } 1390 } 1391 }); 1392 1393 }, 1394 1395 /* 1396 å½å¯å¨å¯¹input valueç嬿¶ï¼å¦æåæ¢åæºè¯ç§äºä¸æ¬å°è¯ç§å¹¶ä¸å¼ºå¶ç¿»è¯ï¼é£ä¹å°±ä¸éè¦åç¿»è¯äºï¼è¿å忥ï¼é¿å æ§è½æµªè´¹ã 1397 ä¹å°±æ¯ç¸å½äºå¯¹ translate.listener.input.start() 触ååçè¿å 1398 */ 1399 reset: function(){ 1400 if(translate.listener.input.originalValueDescriptor === null){ 1401 return; 1402 } 1403 1404 // 1. è¿åHTMLInputElementååçåçvalue屿§æè¿°ç¬¦ 1405 Object.defineProperty( 1406 HTMLInputElement.prototype, 1407 'value', 1408 translate.listener.input.originalValueDescriptor 1409 ); 1410 1411 // 2. éç½®æ 记为æªçå¬ç¶æï¼å 许åç»éæ°å¯å¨çå¬ 1412 translate.listener.input.originalValueDescriptor = null; 1413 } 1414 1415 1416 }, 1417 1418 1419 //translate.listener.start(); //å¼å¯html页é¢ååççæ§ï¼å¯¹ååé¨åä¼è¿è¡èªå¨ç¿»è¯ã注æï¼è¿éåååºåï¼æ¯æä½¿ç¨ translate.setDocuments(...) 设置çåºåã妿æªè®¾ç½®ï¼é£ä¹ä¸ºçæ§æ´ä¸ªç½é¡µçåå 1420 start:function(){ 1421 if(typeof(translate.temp_listenerStartInterval) != 'undefined'){ 1422 //å·²ç»è§¦åè¿ä¸æ¬¡äºï¼ä¸éè¦å触åäº 1423 return; 1424 } 1425 translate.listener.use = true; 1426 1427 /* 1428 æ¾å°äº translate.init ä¸ 1429 translate.temp_listenerStartInterval = setInterval(function(){ 1430 if(document.readyState == 'complete'){ 1431 //domå è½½å®æï¼è¿è¡å¯å¨ 1432 1433 // å 夿宿¶å¨æ¯å¦å·²è¢«æ¸ é¤ï¼é²æ¢é夿§è¡ï¼ 1434 if (!translate.temp_listenerStartInterval){ 1435 return; 1436 } 1437 1438 clearInterval(translate.temp_listenerStartInterval);//忢 1439 1440 //妿ä¸éè¦ç¿»è¯çæ åµï¼æ¯ä¸éè¦è¿è¡çå¬ç 1441 if(translate.language.getCurrent() == translate.language.getLocal()){ 1442 if(translate.language.translateLocal){ 1443 //æ¬å°è¯ç§ä¹è¦å¼ºå¶ç¿»è¯è·æ¬å°è¯ç§ä¸ä¸è´çè¯ç§ 1444 }else{ 1445 //console.log('æ¬å°è¯ç§è·ç®æ è¯ç§ä¸è´ï¼ä¸è¿è¡ç¿»è¯æä½ï¼æ éçå¬ã'); 1446 return; 1447 } 1448 } 1449 1450 //console.log('è¿è¡çå¬ãã'); 1451 translate.listener.addListener(); 1452 } 1453 1454 }, 300); 1455 */ 1456 1457 }, 1458 /* 1459 对 dom 卿çå¬è¿è¡è¿åæä½ï¼è¿åå°æªç嬿¶çç¶æï¼è¿è¡è¿å 1460 */ 1461 reset: function(){ 1462 1463 //æ¸ é¤ translate.listener 1464 if(typeof(translate.listener.observer) != 'undefined' && translate.listener.observer != null){ 1465 translate.listener.observer.disconnect(); 1466 } 1467 1468 //设置为æªå¯å¨ 1469 if(translate.listener.isStart){ 1470 translate.listener.isStart = false; 1471 } 1472 1473 //è¿å input value çå¬ 1474 translate.listener.input.reset(); 1475 }, 1476 1477 /* 1478 ç¨äºçå¬åçæ¹åçè¿ä¸ª node æ¯å¦ææ£å¸¸éè¦ç¿»è¯çå 容ã以忝妿¯étranslate.js触åçéè¦è¢«ç¿»è¯ã 1479 注æï¼ä¼ å ¥è¿è¡å¤æçnodeä¸çææ¬å¿ é¡»æ¯ node.nodeValue ï¼ä¹å°±æ¯è¿ä¸ªå¿ é¡»æ¯ node.nodeType == 2(æä¸ªå ç´ ç屿§ï¼æ¯å¦ input ç placeholder) æ 3(ææ¬èç¹)ï¼ è¿æ ·ä»ä»¬æä¼ææ£å¸¸ç node.nodeValueï¼è䏿æ¬ä¹åå¨äº node.nodeValue ä¸ 1480 æ¯å¦ div title="ä½ å¥½" ï¼è¦å¯¹ title ç ä½ å¥½ è¿ä¸ªå¼è¿è¡å¤å®ï¼ä¼ å ¥çnodeå¿ é¡»æ¯ title ç nodeï¼èé div ç no
1480de 1481 å®ä¸»è¦æ¯ä¸ºäºç» translate.listener.addListener ä¸ç卿çå¬nodeæ¹åææå¡ç 1482 1483 @param node è¦å¤æçè¿ä¸ªæ¯å¦éè¦è§¦åç¿»è¯çnode 1484 @return boolean trueï¼éè¦è§¦å translate.execute(node) è¿è¡ç¿»è¯ 1485 */ 1486 nodeValueChangeNeedTranslate: function(node){ 1487 //æ¯å¦æ¯è¦å å ¥ç¿»è¯æ«æè§¦åæ§è¡ï¼æ¯åæ¯true 1488 var addTranslateExecute = true; 1489 1490 /* 1491 ä¸ä¼è¿å ¥ç¿»è¯çæ åµ - 1492 1. è®¤ä¸ºæ¯æ translate.js æ¬èº«ç¿»è¯å¯¼è´çæ¹åï¼ä¸è¿è¡ç¿»è¯ 1493 å translate.node.data ä¸çæ°æ®ï¼å½æ¹åçnodeèç¹å¨å ¶ä¸æ¾å°äºå¯¹åºçæ°æ®åï¼è¿è¡å¤å® 1494 1. æ¯æ´ä½ç¿»è¯ï¼ä¸å½ånodeæ¹ååçå 容ï¼è·ä¸æ¬¡ç¿»è¯åçç»æä¸æ ·ï¼é£è¯´æå½ånodeæ¹åäºä»¶ 1495 2. 䏿¯æ´ä½ç¿»è¯ï¼å¯è½æ¯è§¦åèªå®ä¹æ¯è¯ãæç´æ¥æ²¡å¯ç¨æ´ä½ç¿»è¯è½åï¼é£å°±è¦æ ¹æ®æåç¿»è¯æ¶é´è¿ä¸ªæ¥å¤å®äºã妿è¿ä¸ªnodeå ç´ ï¼å·²ç»è¢«ç¿»è¯è¿äºï¼æå䏿¬¡ç¿»è¯æ¸²ææ¶é´ï¼è·ç¦»å½åæ¶é´ä¸è¶ è¿500æ¯«ç§ 1496 2. å ¶ä»çæ åµå¦æåç»åç°æéæ¼ï¼åå å ¥ï¼å½å没æè¿ç§èè 1497 */ 1498 if(translate.node.get(node) != null){ 1499 //æ ¹æ®ç°å®ç»ææ¥å¤ææ¯å¦æ¯ætranslate.js æ¬èº«ç¿»è¯å¯¼è´çdomæ¹å 1500 if(typeof(translate.node.get(node).translateResults) !== 'undefined' && typeof(translate.node.get(node).translateResults[node.nodeValue]) === 'number'){ 1501 //æ¯translate.jsç¿»è¯å¯¼è´çdomæåæ¹å 1502 addTranslateExecute = false; 1503 } 1504 1505 if(addTranslateExecute === true){ 1506 if(typeof(translate.node.get(node).whole) !== 'undefined' && translate.node.get(node).whole === true){ 1507 //æ´ä½ç¿»è¯ 1508 if(typeof(translate.node.get(node).resultText) !== 'undefined' && translate.node.get(node).resultText === node.nodeValue){ 1509 //å½åæ¹ååçå 容ï¼è·ä¸æ¬¡ç¿»è¯åçç»æä¸æ ·ï¼é£è¯´æå½ånodeæ¹åäºä»¶ï¼æ¯ætranslate.js æ¬èº«ç¿»è¯å¯¼è´çï¼ä¸è¿è¡ç¿»è¯ 1510 addTranslateExecute = false; 1511 } 1512 }else{ 1513 //䏿¯æ´ä½ç¿»è¯ï¼å¯è½æ¯è§¦åèªå®ä¹æ¯è¯ãæç´æ¥æ²¡å¯ç¨æ´ä½ç¿»è¯è½å 1514 1515 //è¿å°±è¦æ ¹æ®æåç¿»è¯æ¶é´è¿ä¸ªæ¥å¤å®äº -- è¿ä¸ªè®¡åè¦åé¤ï¼å 为æ¬èº«å¨ translate.node.get(node).translateResults å·²ç»å¤å®äºï¼è¿ä¸ªå±äºéå¤å¤å®ã è¿ä¸ªå ç䏿®µæ¶é´ 1516 if(typeof(translate.node.get(node).lastTranslateRenderTime) === 'number' && translate.node.get(node).lastTranslateRenderTime + 30 > Date.now()){ 1517 //妿è¿ä¸ªnodeå ç´ ï¼å·²ç»è¢«ç¿»è¯è¿äºï¼æå䏿¬¡ç¿»è¯æ¸²ææ¶é´ï¼è·ç¦»å½åæ¶é´ä¸è¶ è¿500毫ç§ï¼é£è®¤ä¸ºè¿ä¸ªå ç´ å¨ææ¹åï¼æ¯ætranslate.js æ¬èº«å¼èµ·çï¼å°ä¸åä»»ä½å¨ä½ 1518 addTranslateExecute = false; 1519 } 1520 } 1521 } 1522 } 1523 1524 //妿æ°çé颿²¡æé空ç½å符çå¼ï¼é£ä¹ä¸å触åç¿»è¯ 1525 if(addTranslateExecute === true){ 1526 if(node.nodeValue.trim().length === 0){ 1527 addTranslateExecute = false; 1528 } 1529 } 1530 1531 return addTranslateExecute; 1532 }, 1533 1534 1535 //å¢å çå¬ï¼å¼å§çå¬ãè¿ä¸ªä¸è¦ç´æ¥è°ç¨ï¼éè¦ä½¿ç¨ä¸é¢ç start() å¼å¯ 1536 addListener:function(){ 1537 if(translate.listener.isStart == true){ 1538 //console.log('translate.listener.start() å·²ç»å¯å¨äºï¼æ éåéå¤å¯å¨çå¬ï¼å¢å æµè§å¨è´æ '); 1539 return; 1540 } 1541 translate.listener.isStart = true; //è®°å½å·²æ§è¡è¿å¯å¨æ¹æ³äº 1542 //console.log('translate.listener.addListener() ...'); 1543 1544 // è§å¯å¨çé ç½®ï¼éè¦è§å¯ä»ä¹åå¨ï¼ 1545 translate.listener.config = { attributes: true, childList: true, subtree: true, characterData: true, attributeOldValue:true, characterDataOldValue:true }; 1546 // å½è§å¯å°å卿¶æ§è¡çåè°å½æ° 1547 translate.listener.callback = function(mutationsList, observer) { 1548 var documents = []; //æåå¨çå ç´ 1549 //console.log('--------- lisetner åå¨'); 1550 //console.log(mutationsList); 1551 // Use traditional 'for loops' for IE 11 1552 for(let mutation of mutationsList) { 1553 let addNodes = []; 1554 if (mutation.type === 'childList') { 1555 if(mutation.addedNodes.length > 0){ 1556 //å¤äºç»ä»¶ 1557 for(var ani = 0; ani < mutation.addedNodes.length; ani++){ 1558 var addNodeName = translate.element.getNodeName(mutation.addedNodes[ani]).toLowerCase(); 1559 if(addNodeName.length >
1559 0 && translate.ignore.tag.indexOf(addNodeName) == -1){ 1560 addNodes.push(mutation.addedNodes[ani]); 1561 } 1562 } 1563 //addNodes = mutation.addedNodes; 1564 //documents.push.apply(documents, mutation.addedNodes); 1565 } 1566 if(mutation.removedNodes.length > 0){ 1567 //console.log('remove:'); 1568 //console.log(mutation.removedNodes); 1569 for(var ri = 0; ri < mutation.removedNodes.length; ri++){ 1570 //console.log('listener -- mutation.type === childList -- delete node ----: '); 1571 //console.log(mutation.removedNodes[ri]); 1572 translate.node.delete(mutation.removedNodes[ri]); //å é¤æè¢«domç»ç§»é¤çèç¹ï¼æ¯å¦æ§è¡äº InnerHTML æä½çå ç´ ä¼èªå¨å é¤ 1573 } 1574 } 1575 }else if (mutation.type === 'attributes') { 1576 if(mutation.attributeName === 'class' || mutation.attributeName === 'style'){ 1577 //妿æ¯class/ style è¿ç§å¸¸è§çï¼ä¸å任使¹åï¼ç´æ¥è·³åº 1578 continue; 1579 } 1580 1581 /* 1582 è¿éè¦å¤æä¸äºå 许翻è¯ç屿§ 1583 input ç placeholder 屿§ ,ç´æ¥å¤æ placeholder å°±è¡äºï¼ä¹å°± inputãtextarea æè¿ä¸ªå±æ§ 1584 img ç alt 屿§ 1585 æææ ç¾ç title 屿§ 1586 */ 1587 1588 if(mutation.attributeName === 'placeholder' || mutation.attributeName === 'alt' || mutation.attributeName === 'title'){ 1589 //å è®¸ç¿»è¯ 1590 }else{ 1591 //夿æ¯å¦æ¯ translate.element.tagAttribute èªå®ä¹ç¿»è¯å±æ§ç 1592 var divTagAttribute = translate.element.tagAttribute[mutation.target.nodeName.toLowerCase()]; 1593 //console.log('divTagAttribute:'+divTagAttribute); 1594 if(typeof(divTagAttribute) !== 'undefined' && divTagAttribute.attribute.indexOf(mutation.attributeName) > -1 && divTagAttribute.condition(mutation.target)){ 1595 //æ¯èªå®ä¹ç¿»è¯è¿ä¸ªå±æ§çï¼ä»¥åå¤å®æ¯å¦è¾¾å°ç¿»è¯æ¡ä»¶ 1596 //æ¡ä»¶æ»¡è¶³ï¼å è®¸ç¿»è¯ 1597 }else{ 1598 //æ¡ä»¶ä¸æ»¡è¶³ï¼ä¸å¨ç¿»è¯ç屿§èå´ 1599 continue; 1600 } 1601 } 1602 1603 //è¿éåºç°ç mutation.target æ¯å®ä½å°äºå ç´ ä¸é¢ï¼è䏿¯ååçè¿ä¸ª attributes 屿§ä¸ï¼éè¦ç¨ mutation.attributeName è·åå°è¿ä¸ªå±æ§çnode 1604 var node = mutation.target.getAttributeNode(mutation.attributeName); 1605 1606 //æ¯å¦æ¯è¦å å ¥ç¿»è¯æ«æè§¦åæ§è¡ï¼æ¯åæ¯true 1607 var addTranslateExecute = translate.listener.nodeValueChangeNeedTranslate(node); 1608 if(addTranslateExecute){ //䏿¯ translate.js ç¿»è¯å¼èµ·çæ¹åï¼é£ä¹ 1609 //console.log('listener attributes change ' + mutation.target.nodeName+'['+ mutation.attributeName + '] '+mutation.oldValue+' --> '+node.nodeValue); 1610 translate.node.delete(node); 1611 addNodes = [node]; //å°è¿ä¸ªå±æ§è½¬ä¸ºçnodeå å ¥å¾ ç¿»è¯ 1612 } 1613 }else if(mutation.type === 'characterData'){ 1614 //å 容æ¹å 1615 1616 //æ¯å¦æ¯è¦å å ¥ç¿»è¯æ«æè§¦åæ§è¡ï¼æ¯åæ¯true 1617 var addTranslateExecute = translate.listener.nodeValueChangeNeedTranslate(mutation.target); 1618 1619 if(addTranslateExecute){ //䏿¯ translate.js ç¿»è¯å¼èµ·çæ¹åï¼é£ä¹ 1620 translate.node.delete(mutation.target); 1621 addNodes = [mutation.target]; //å°éæ°è§¦å translate.execute(); 1622 //console.log('listener - mutation.type === \'characterData\' , node: '); 1623 //console.log(mutation.target) 1624 } 1625 1626 //documents.push.apply(documents, [mutation.target]); 1627 } 1628 1629 //å»éå¹¶å å ¥ documents 1630 for(let item of addNodes){ 1631 //console.log(item); 1632 1633 //夿æ¯å¦å·²ç»å å ¥è¿äºï¼å¦æå·²ç»å å ¥è¿äºï¼å°±ä¸éå¤å äº 1634 var isFind = false; 1635 for(var di = 0; di < documents.length; di++){ 1636 if(documents[di].isSameNode(item)){ 1637 isFind = true; 1638 break; 1639 } 1640 } 1641 if(isFind){ 1642 break; 1643 } 1644 documents.push.apply(documents, [item]); 1645 } 1646 } 1647 1648 if(documents.length > 0){ 1649 //æåå¨ï¼éè¦ççæ¯å¦éè¦ç¿»è¯ï¼å»¶è¿10æ¯«ç§æ§è¡ 1650 translate.time.log('çå¬å°å ç´ åçåå,'+documents.length+'个å ç´ '); 1651 translate.execute(documents); 1652 } 1653 }; 1654 // å建ä¸ä¸ªè§å¯å¨å®ä¾å¹¶ä¼ å ¥åè°å½æ° 1655 translate.listener.observer = new MutationObserver(translate.listener.callback); 1656 // 以ä¸è¿°é ç½®å¼å§è§å¯ç®æ èç¹ 1657 var docs = translate.getDocuments(); 1658 for(var docs_index = 0; docs_index < docs.length; docs_index++){ 1659 var doc = docs[docs_index]; 1660 if(doc != null){ 1661 translate.listener.observer.observe(doc, translate.listener.config); 1662 } 1663 } 1664 1665 1666 //妿è¦å¯¹ input çvalueè¿è¡ç¿»è¯ï¼é£ä¹è¿è¦çå¬ input ç value çå¼ 1667 if(typeof(translate.element.tagAttribute['input']) === 'object' && translate.element.tagAttribute['input'].attribute.indexOf('value') > -1){ 1668 translate.listener.input.start(); 1669 } 1670 1671 1672 }, 1673 /* 1674 æ¯å½æ§è¡å®ä¸æ¬¡æ¸²æä»»å¡ï¼ç¿»è¯ï¼æ¶ä¼è§¦åæ¤ã注æé¡µé¢ä¸æ¬¡ç¿»è¯ä¼è§¦åå¤ä¸ªæ¸²æä»»å¡ãæ®éæ åµä¸ï¼ä¸æ¬¡é¡µé¢çç¿»è¯å¯è½ä¼è§¦å䏤䏿¬¡æ¸²æä»»å¡ã 1675 å¦å¤å¦æé¡µé¢ä¸æajaxäº¤äºæ¹é¢çä¿¡æ¯ï¼æ¶ï¼æ¯æ¬¡ajaxä¿¡æ¯å·æ°åï¼ä¹ä¼è¿è¡ç¿»è¯ï¼ä¹æ¯ä¸æ¬¡æ¸²æä»»å¡ã 1676 è¿ä¸ªæ¯ä¸ºäºæ¹ä¾¿æ©å±ä½¿ç¨ãæ¯å¦å¨layui䏿©å±ï¼çæ§ select çæ¸²æ 1677 */ 1678 renderTaskFinish:function(renderTask){ 1679 //console.log(renderTask); 1680 }, 1681 1682 /* 1683 ç¿»è¯æ§è¡è¿ç¨ä¸ï¼ç¸å ³ççæ§ 1684 */ 1685 execute:{ 1686 1687 /* 1688 æ¯å½è§¦åæ§è¡ translate.execute() æ¶ï¼å½ç¼å䏿ªåç°ï¼éè¦è¯·æ±ç¿»è¯APIè¿è¡ç¿»è¯æ¶ï¼å¨åéAPI请æ±åï¼è§¦åæ¤ 1689 1690 @param uuidï¼translate.nodeQueue[uuid] è¿éç 1691 @param from æ¥æºè¯ç§ï¼ç¿»è¯åçè¯ç§ 1692 @param to ç¿»è¯ä¸ºçè¯ç§ 1693 */ 1694 renderStartByApi : [], 1695 renderStartByApiRun:function(uuid, from, to){ 1696 //console.log(translate.nodeQueue[uuid]); 1697 for(var i = 0;
1697 i < translate.listener.execute.renderStartByApi.length; i++){ 1698 try{ 1699 translate.listener.execute.renderStartByApi[i](uuid, from, to); 1700 }catch(e){ 1701 translate.log(e); 1702 } 1703 } 1704 }, 1705 1706 /* 1707 æ¯å½ translate.execute() æ§è¡å®æ¯ï¼åææ¯éç¨APIç¿»è¯çï¼APIå°ç¿»è¯ç»æè¿åï¼å¹¶ä¸çé¢ä¸çç¿»è¯ç»æä¹å·²ç»æ¸²æå®æ¯ï¼åï¼è§¦åæ¤æ¹æ³ã 1708 1709 @param uuidï¼translate.nodeQueue[uuid] è¿éç 1710 @param from æ¥æºè¯ç§ï¼ç¿»è¯åçè¯ç§ 1711 @param to ç¿»è¯ä¸ºçè¯ç§ 1712 */ 1713 renderFinishByApi : [], 1714 renderFinishByApiRun:function(uuid, from, to){ 1715 //console.log(translate.nodeQueue[uuid]); 1716 for(var i = 0; i < translate.listener.execute.renderFinishByApi.length; i++){ 1717 try{ 1718 translate.listener.execute.renderFinishByApi[i](uuid, from, to); 1719 }catch(e){ 1720 translate.log(e); 1721 } 1722 } 1723 } 1724 } 1725 1726 }, 1727 //对翻è¯ç»æè¿è¡æ¿æ¢æ¸²æçä»»å¡ï¼å°å¾ ç¿»è¯å å®¹æ¿æ¢ä¸ºç¿»è¯å 容çè¿ç¨ 1728 renderTask:class{ 1729 constructor(){ 1730 /* 1731 * ä»»å¡å表 1732 * map 1733 * key: node 1734 * value: [task,task,...] æ¯å¤ä¸ªtaskçæ°ç»éåï¼åæ¾å¤ä¸ª taskï¼æ¯ä¸ªtaskæ¯ä¸ä¸ªæ¿æ¢ãè¿éçæ°ç»æ¯åä¸ä¸ªnodeValueçå¤ä¸ªtaskæ¿æ¢ 1735 * æ¯ä¸ª task: 1736 task['originalText'] 1737 task['resultText'] åæ¾è¦æ¿æ¢çå符串 1738 task['attribute'] åæ¾è¦æ¿æ¢ç屿§ï¼æ¯å¦ aæ ç¾çtitle屿§ã 妿æ¯ç´æ¥æ¿æ¢node.nodeValue ï¼é£è¿ä¸ªæ²¡æ 1739 */ 1740 this.taskQueue = new Map(); 1741 1742 /* 1743 * è¦è¿è¡ç¿»è¯çnodeå ç´ ï¼ 1744 * ä¸ç»´æ°ç» key:node.nodeValue ç hash ï¼ value:nodeçå ç´ æ°ç»
1745 * äºç»´æ°ç»ï¼ä¹å°±æ¯valueä¸å å«çnodeéå [node,node,...] 1746 */ 1747 this.nodes = []; 1748 } 1749 1750 /** 1751 * åæ¿æ¢éåä¸å¢å æ¿æ¢ä»»å¡ 1752 * node:è¦æ¿æ¢çå符å±äºé£ä¸ªnodeå ç´ 1753 * originalText:å¾ ç¿»è¯çå符 1754 * resultText:ç¿»è¯åçç»æå符 1755 * attribute: è¦æ¿æ¢çæ¯åªä¸ªå±æ§ï¼æ¯å¦ aæ ç¾çtitle屿§ï¼è¿é便æ¯ä¼ å ¥titleã妿䏿¯æ¿æ¢å±æ§ï¼è¿éä¸ç¨ä¼ å ¥ï¼æè ä¼ å ¥null 1756 */ 1757 add(node, originalText, resultText, attribute){ 1758 //console.log('renderTask.add : originalText:'+originalText+', resultText:'+resultText+', attribute:'+attribute+', node:'); 1759 //console.log(node); 1760 var nodeAnaly = translate.element.nodeAnalyse.get(node, attribute); //nodeè§£æ 1761 //var hash = translate.util.hash(translate.element.getTextByNode(node)); //nodeä¸å 容çhash 1762 var hash = translate.util.hash(nodeAnaly['text']); 1763 //console.log('--------------'+hash); 1764 //console.log(nodeAnaly); 1765 1766 /****** å å ¥ç¿»è¯çå ç´ éå */ 1767 if(typeof(this.nodes[hash]) == 'undefined'){ 1768 this.nodes[hash] = new Array(); 1769 } 1770 this.nodes[hash].push(node); 1771 //console.log(node) 1772 1773 /****** å å ¥ç¿»è¯çä»»å¡éå */ 1774 //var tasks = this.taskQueue[hash]; 1775 var tasks = this.taskQueue.get(node); 1776 if(tasks == null || typeof(tasks) == 'undefined'){ 1777 //console.log(node.nodeValue); 1778 tasks = new Array(); //ä»»å¡å表ï¼åæ¾å¤ä¸ª taskï¼æ¯ä¸ªtaskæ¯ä¸ä¸ªæ¿æ¢ãè¿éçæ°ç»æ¯åä¸ä¸ªnodeValueçå¤ä¸ªtaskæ¿æ¢ 1779 } 1780 var task = new Array(); 1781 1782 //v2.3.3 å¢å -- å¼å§ 1783 //è¿éè¦è¿è¡å¤çï¼å ä¸ºææ¶åç¿»è¯åï¼å®åæè 忝æç©ºæ ¼çï¼ä½æ¯ç¿»è¯å伿åæè åçç©ºæ ¼ç»èªå¨å¼æ²¡äºï¼å¦ææ¯è¿ç§æ åµï¼è¦æå¨è¡¥ä¸ 1784 if (originalText.substr(0, 1) == ' ') { 1785 //console.log('第ä¸ä¸ªå符æ¯ç©ºæ ¼'); 1786 if(resultText.substr(0, 1) != ' '){ 1787 //ç¿»è¯ç»æç第ä¸ä¸ªåç¬¦ä¸æ¯ç©ºæ ¼ï¼é£ä¹è¡¥ä¸ 1788 resultText = ' ' + resultText; 1789 } 1790 } 1791 if (originalText.substr(originalText.length - 1, 1) === ' ') { 1792 //console.log('æåä¸ä¸ªå符æ¯ç©ºæ ¼'); 1793 if(resultText.substr(0, 1) != ' '){ 1794 //ç¿»è¯ç»æçæåä¸ä¸ªåç¬¦ä¸æ¯ç©ºæ ¼ï¼é£ä¹è¡¥ä¸ 1795 resultText = resultText + ' '; 1796 } 1797 } 1798 //v2.3.3 å¢å -- ç»æ 1799 1800 task['originalText'] = originalText; 1801 task['resultText'] = resultText; 1802 task['attribute'] = attribute; 1803 1804 //console.log(task); 1805 tasks.push(task); 1806 //this.taskQueue[hash] = tasks; 1807 this.taskQueue.set(node, tasks); 1808 /****** å å ¥ç¿»è¯çä»»å¡éå end */ 1809 } 1810 //è¿è¡æ¿æ¢æ¸²æä»»å¡ï¼å¯¹é¡µé¢è¿è¡æ¸²ææ¿æ¢ç¿»è¯ 1811 execute(){ 1812 //å 对tasksä»»å¡éåçæ¿æ¢è¯è¿è¡æåºï¼å°åä¸ä¸ªnodeçæ¿æ¢è¯æå¤§å°å°æåï¼é¿å å æ¿æ¢äºå°çï¼å¤§çæ¿æ¢æ¶æ¾ä¸å° 1813 //for(var hash in this.taskQueue){ 1814 for (let node of this.taskQueue.keys()) { 1815 var tasks = this.taskQueue.get(node); 1816 if (tasks == null) { 1817 continue; 1818 } 1819 if(typeof(tasks) == 'function'){ 1820 //è¿è¡å¼å¸¸çé¢å¤çè°åº 1821 continue; 1822 } 1823 1824 //è¿è¡æåº,å°åå符串é¿çæ¾åé¢ï¼é¿å é ææé¨åä¸ç¿»è¯çæ åµï¼bugæ¯å ç¿»è¯äºççï¼å¯¼è´é¿ç被ææèæ æ³è¿è¡éé ï¼ 1825 tasks.sort((a, b) => b.originalText.length - a.originalText.length); 1826 1827 //this.taskQueue[hash] = tasks; 1828 this.taskQueue.set(node, tasks); 1829 } 1830 1831 //console.log('===========task========='); 1832 //console.log(this.taskQueue); 1833 //console.log(this.nodes); 1834 //console.log('===========task======end==='); 1835 1836 1837 //对nodeQueueè¿è¡ç¿»è¯ 1838 for(var hash in this.nodes){ 1839 if (!this.nodes.hasOwnProperty(hash)) { 1840 continue; 1841 } 1842 1843 //var tasks = this.taskQueue[hash]; //ååºå½ånodeå ç´ å¯¹åºçæ¿æ¢ä»»å¡ 1844 //var tagName = this.nodes[hash][0].nodeName; //以ä¸èç¹çtag name 1845 //console.log(tasks); 1846 for(var node_index = 0; node_index < this.nodes[hash].length; node_index++){ 1847 //å½åç¿»è¯çnode 1848 var node = this.nodes[hash][node_index]; 1849 1850 //ååºå½ånodeå ç´ å¯¹åºçæ¿æ¢ä»»å¡ 1851 var tasks = this.taskQueue.get(node); 1852 //console.log(tasks); 1853 if (tasks == null) {
1854 translate.log('WARNING : renderTask.execute ä¸ï¼this.taskQueue.get(node) == null ï¼ç论ä¸è¦è¿è¡æ¿æ¢ä»»å¡ï¼å°±åºè¯¥ä¼æå 容çï¼æ°æ®å¨ç论ä¸åºç°å¼å¸¸'); 1855 continue; 1856 } 1857 1858 //对è¿ä¸ªnodeå ç´ è¿è¡æ¿æ¢ç¿»è¯å符 1859 for(var task_index=0; task_index<tasks.length; task_index++){ 1860 var task = tasks[task_index]; 1861 if(typeof(tasks) == 'function'){ 1862 //è¿è¡å¼å¸¸çé¢å¤çè°åº 1863 continue; 1864 } 1865 1866 1867 // translate.node è®°å½ 1868 1869 var translateNode = null; //å½åæä½çï¼è¦è®°å½å ¥ translate.node ä¸çï¼è¿è¡ç¿»è¯çnode 1870 var translateNode_attribute = ''; //å½åæä½çæ¯nodeä¸çåªä¸ªattributeï¼å¦ææ²¡ææ¯nodeæ¬èº«åæ¯ç©ºå符串 1871 if(typeof(task['attribute']) === 'string' && task['attribute'].length > 0){ 1872 //å½å渲æä»»å¡æ¯é对çå ç´ çæä¸ªå±æ§ï¼è¿æ¯è¦ååºè¿ä¸ªå ç´ çå ·ä½å±æ§ï¼ä½ä¸ºä¸ä¸ªç®ç node æ¥è¿è¡å å ¥ translate.node 1873 //æ¯æä½çå ç´ çæä¸ªå±æ§,è¿æ¶è¦å¤æ æ¯å¦æ¯ inputãtextarea çvalue屿§ 1874 if(task['attribute'] === 'value'){ 1875 var nodeNameLowerCase = translate.element.getNodeName(this.nodes[hash][node_index]).toLowerCase(); 1876 if((nodeNameLowerCase === 'input' || nodeNameLowerCase === 'textarea')){ 1877 translateNode = this.nodes[hash][node_index]; 1878 translateNode_attribute = 'value'; 1879 } 1880 } 1881 if(translateNode === null){ 1882 translateNode = this.nodes[hash][node_index].getAttributeNode(task['attribute']); 1883 translateNode_attribute = task['attribute']; 1884 } 1885 }else{ 1886 //æä½çå°±æ¯nodeæ¬èº« 1887 translateNode = this.nodes[hash][node_index]; 1888 } 1889 //console.log(translateNode) 1890 //var nodeAttribute = translate.node.getAttribute(task['attribute']); 1891 if(typeof(translate.node.data.get(translateNode)) === 'undefined' || translate.node.data.get(translateNode) === null){ 1892 translate.log('æ§è¡å¼å¸¸ï¼æ¸²ææ¶ï¼node æªå¨ translate.node 䏿¾å°, è¿ä¸ªå¾æå¯è½æ¯ç¹å»è¿å¿«ï¼ä¸ä¸ä¸ªç¿»è¯ä»»å¡è¿å¨ç½ç»è¯·æ±ä¸ï¼åç¹å»äºå«çå°æ¹å¯¼è´å 容å被æ¹åãå½åå¼å¸¸å·²è¢«å®¹éã nodeï¼'); 1893 translate.log(translateNode); 1894 1895 var getNodeText = translate.element.nodeAnalyse.get(node, task['attribute']); 1896 translate.node.set(translateNode, { 1897 attribute: translateNode_attribute, 1898 originalText: getNodeText.text, 1899 whole: true, 1900 translateTexts: {} 1901 }); 1902 translate.node.setModified(translateNode, 'create:translate.renderTask.execute'); 1903 } 1904 1905 // è®°å½å½åæ translate.js æè§¦åç¿»è¯ä¹å渲æå°domç颿¾ç¤ºçæ¶é´ï¼13使¶é´æ³ 1906 translate.node.get(translateNode).lastTranslateRenderTime = Date.now(); 1907 1908 1909 //渲æé¡µé¢è¿è¡ç¿»è¯æ¾ç¤º 1910 //console.log(task.originalText+' ('+task['attribute']+') --> ' + task.resultText+', node:'); 1911 //console.log(node); 1912 var analyseSet = translate.element.nodeAnalyse.set(node, task.originalText, task.resultText, task['attribute']); 1913 //console.log(analyseSet); 1914 1915 if(translate.node.data.get(translateNode) != null){ 1916 //å°å ·ä½éè¿ææ¬ç¿»è¯æ¥å£è¿è¡ç¿»è¯çææ¬è®°å½å° translate.node.data 1917 translate.node.get(translateNode).translateTexts[task.originalText] = task.resultText; 1918 //å°ç¿»è¯å®æåè¦æ¾ç¤ºåºçææ¬è¿è¡è®°å½ 1919 translate.node.get(translateNode).resultText = analyseSet.resultText; 1920 1921 //å°å ¶å å ¥ translate.history.translateTexts 1922 translate.history.translateText.add(translate.node.get(translateNode).originalText ,analyseSet.resultText); 1923 } 1924 1925 1926 /* 1927 //var tagName = translate.element.getTagNameByNode(this.nodes[hash][task_index]);//èç¹çtag name 1928 //console.log(tagName) 1929 //console.log(this.nodes[hash][task_index]) 1930 //var tagName = this.nodes[hash][task_index].nodeName; //èç¹çtag name 1931 var nodename = translate.element.getNodeName(this.nodes[hash][task_index]); 1932 1933 //console.log(this.nodes[hash][task_index]+', '+task.originalText+', '+task.resultText+', tagName:'+tagName); 1934 if(nodename == 'META'){ 1935 if(typeof(this.nodes[hash][task_index].name) != 'undefined' && this.nodes[hash][task_index].name != null){ 1936 //var nodeName = this.nodes[hash][task_index].name.toLowerCase(); //åmeta æ ç¾çname 屿§ 1937 1938 this.nodes[hash][task_index].content = this.nodes[hash][task_index].content.replace(new RegExp(translate.util.regExp.pattern(task.originalText),'g'), translate.util.regExp.resultText(task.resultText)); 1939 } 1940 }else if(nodename == 'IMG'){ 1941 this.nodes[hash][task_index].alt = this.nodes[hash][task_index].alt.replace(new RegExp(translate.util.regExp.pattern(task.originalText),'g'), translate.util.regExp.resultText(task.resultText)); 1942 }else{ 1943 //æ®éç 1944 //console.log('task.originalText : '+task.originalText); 1945 //console.log(translate.util.regExp.pattern(task.originalText)) 1946 //console.log('task.resultText : '+task.resultText); 1947 this.nodes[hash][task_index].nodeValue = this.nodes[hash][task_index].nodeValue.replace(new RegExp(translate.util.regExp.pattern(task.originalText),'g'), translate.util.regExp.resultText(task.resultText)); 1948 } 1949 */ 1950 } 1951 } 1952 } 1953 1954 //console.log('---listen'); 1955 1956 //çå¬ - å¢å å°ç¿»è¯åå²éé¢ nodeHistory 1957 if(typeof(this.taskQueue) != 'undefined' && Object.keys(this.taskQueue).length > 0){ 1958 //50毫ç§åæ§è¡ï¼ä»¥ä¾¿é¡µé¢æ¸²æå®æ¯ 1959 var renderTask = this; 1960 setTimeout(function() { 1961 /** æ§è¡å®æåï¼è§¦åç¨æ·èªå®ä¹çç¿»è¯å®ææ§è¡å½æ° **/ 1962 translate.listener.renderTaskFinish(renderTask); 1963 }, 5);
1964 1965 }else{ 1966 //console.log(this.taskQueue); 1967 //console.log('---this.taskQueue is null'); 1968 } 1969 } 1970 }, 1971 1972 1973 /* 1974 å½åç¶æï¼æ§è¡ç¶æ 1975 0 空é²(æè æ§è¡ç¿»è¯å®æ¯) 1976 2 translate.execute 触åï¼ç«å³å为3ï¼ç¶ååæ§è¡ translate.execute çä¸äºåå§åèªæ£å¥ç 1977 10 æ«æè¦ç¿»è¯çnodeï¼å¹¶è¯»åæµè§å¨ç¼åçç¿»è¯å 容è¿è¡æ¸²ææ¾ç¤º 1978 20 æµè§å¨ç¼å渲æå®æ¯ï¼ajaxéè¿ææ¬ç¿»è¯æ¥å£å¼å§è¯·æ±ï¼å¨åèµ·ajax请æ±åï¼ç¶æå为20ï¼ç¶åååèµ·ajaxè¯·æ± 1979 è³äºç¿»è¯å®æ¯åè¿è¡æ¸²æï¼è¿ä¸ªå°±ä¸åç¬è®°å½äºï¼å ä¸ºå¦æé¡µé¢åå¨ä¸åçè¯ç§ï¼ä¸åçè¯ç§æ¯æç §ä¸åçè¯·æ±æ¥çï¼æ¯å¤ä¸ªå¼æ¥åæ¶è¿è¡çè¿ç¨ 1980 */ 1981 state:0, 1982 1983 1984 /* 1985 çå¾ ç¿»è¯éå v3.12.6 å¢å 1986 å½åæ¯å¦æéè¦çå¾ ç¿»è¯çä»»å¡ï¼è¿ä¸ªç®çæ¯ä¸ºäºä¿è¯å䏿¶é´ translate.execute() åªæä¸æ¬¡å¨æ§è¡ï¼å å¾è¢«æ°æå端ç»é ææ»å¾ªç¯ï¼å¯¼è´edgeç¿»è¯ç»ä½ å±è½ï¼ç¨æ·ç½é¡µè¿å¡æ» 1987 彿§è¡ translate.execute() æ¶ï¼ä¼å å¤æç¶æ translate.state æ¯å¦æ¯0空é²çç¶æï¼å¦æç©ºé²ï¼æä¼æ§è¡ï¼å¦æä¸æ¯ç©ºé²ï¼åä¸ä¼æ§è¡ï¼èæ¯è¿å ¥å°è¿éè¿è¡çå¾ ï¼çå¾ æ§è¡å®æ¯å translate.state åæ0空é²ä¹åï¼åæ¥æ§è¡è¿éç 1988 1989 */ 1990 waitingExecute:{ 1991 use:true, //é»è®¤æ¯ä½¿ç¨ï¼èªæé¨ç½²åºæ¯ä¸æ å¿å¹¶åçåºæ¯ï¼å¯ä»¥ç¦ç¨ï¼ä»¥æé«ç¨æ·ä½¿ç¨ä½éªã 1992 1993 /* 1994 ä¸ç»´æ°ç»å½¢æï¼åæ¾æ§è¡çç¿»è¯ä»»å¡ 1995 äºç»´å¯¹è±¡å½¢æï¼åæ¾æ§è¡ä¼ å ¥ç docs 1996 */ 1997 queue:[], 1998 /* 1999 å¢å ä¸ä¸ªç¿»è¯ä»»å¡å°ç¿»è¯éåä¸ 2000 docs å translate.execute(docs) çä¼ å ¥åæ° 2001 */ 2002 add:function(docs){ 2003 //åæ°ç»æ«å°¾è¿½å 2004 translate.waitingExecute.queue.push(docs); 2005 //å¼å¯ä¸ä¸ªå®æ¶å¨è¿è¡è§¦å 2006 let intervalId = setInterval(function() { 2007 if(translate.state == 0){ 2008 //æ¸ é¤å®æ¶å¨ï¼ç»æå¾ªç¯ 2009 clearInterval(intervalId); 2010 var docs = translate.waitingExecute.get(); 2011 translate.execute(docs); 2012 //console.log('stop waitingExecute setInterval'); 2013 } 2014 }, 500); 2015 }, 2016 /* 2017 ä» quque ä¸å第ä¸ä¸ªå ç´ ï¼åæ¶å°å ¶ä»queueä¸å 餿å®ã 2018 妿åçæ¶å ququeå·²ç»æ²¡æä»»ä½å ç´ äºï¼ä¼è¿å nullï¼ ä½æ¯ç论ä¸ä¸ä¼åºç°null 2019 */ 2020 get:function(){ 2021 //ä½¿ç¨ shift æ¹æ³å 餿°ç»ç第ä¸ä¸ªå ç´ ï¼å¹¶å°ç¬¬ä¸ä¸ªå ç´ çå¼è¿å 2022 if(translate.waitingExecute.queue.length > 0){ 2023 return translate.waitingExecute.queue.shift(); 2024 }else{ 2025 translate.log('è¦åï¼ translate.waitingExecute.get åºç°å¼å¸¸ï¼quque已空ï¼ä½è¿å¾å¤åã'); 2026 return null; 2027 } 2028 }, 2029 /* 2030 å½å translate.translateRequest[uuid] çæ¯å¦å·²ç»å ¨é¨æ§è¡å®æ¯ 2031 è¿éåçº¯åªæ¯å¯¹ translate.translateRequest[uuid] çè¿è¡å¤æ 2032 è¿éè¦å¨ translate.json æ¥å£è§¦åå®å¹¶æ¸²æå®æ¯å触åï¼å½ç¶æ¥å£å¤±è´¥æ¶ä¹è¦è§¦åã 2033 2034 æ£å¸¸æ åµä¸ï¼æ¯æ ¹æ®æ¬å°è¯è¨ä¸åï¼è¿è¡åå«è¯·æ±ç¿»è¯çï¼æ¯å¦æ¬å°ä¸å å«ä¸æãè±æãä¿è¯ä¸ç§è¯ç§ï¼è¦ç¿»è¯ä¸ºé©è¯ï¼é£ä¹ 2035 * 䏿->é©è¯ä¼è¯·æ±ä¸æ¬¡api 2036 * è±æ->é©è¯ä¼è¯·æ±ä¸æ¬¡APi 2037 * ä¿è¯->é©è¯ä¼è¯·æ±ä¸æ¬¡APi 2038 ä¹å°±ä¼è§¦å䏿¬¡ 2039 2040 @param uuid translate.translateRequest[uuid]ä¸çuuidï¼ä¹æ¯ translate.nodeQueue ä¸çuuid 2041 @param from æ¥æºè¯ç§ï¼ç¿»è¯åçè¯ç§ 2042 @param to ç¿»è¯ä¸ºçè¯ç§ 2043 @param result æ¬æ¬¡ç½ç»è¯·æ±çç»æï¼ 1æåï¼ 0失败ã ç½ç»ä¸éï¼ç¿»è¯ç»æè¿åresulté1齿¯è®°å ¥0 2044 @param info 妿result为0ï¼è¿éæ¯å¤±è´¥ä¿¡æ¯ 2045 */ 2046 isAllExecuteFinish:function(uuid, from, to, result, info){ 2047 2048 translate.listener.execute.renderFinishByApiRun(uuid, from, to); 2049 2050 //éè¿ uuidãfrom å徿¬æ¬¡ç¿»è¯ç¸å ³ç textsãnodes , 触å translateNetworkAfter_Trigger é©å 2051 //è·åè¯·æ±æ¥å¿ 2052 var requestData = translate.request.data[uuid].list[from][to]; 2053 translate.lifecycle.execute.translateNetworkAfter_Trigger({ 2054 uuid: uuid, 2055 from: from, 2056 to: to, 2057 texts: requestData.texts, 2058 nodes: requestData.nodes, 2059 result: result, 2060 info: info 2061 }); 2062 2063 //console.log('uuid:'+uuid+', from:'+from+', to:'+to); 2064 for(var lang in translate.translateRequest[uuid]){ 2065 if (!translate.translateRequest[uuid].hasOwnProperty(lang)) { 2066 continue; 2067 } 2068 if(translate.translateRequest[uuid][lang].executeFinish == 0){ 2069 //è¿ä¸ªè¿æ²¡æ§è¡å®ï¼é£ä¹ç´æ¥éåºï¼ä¸å¨ååæ§è¡äº 2070 //console.log('uuid:'+uuid+' lang:'+lang+' executeFinish:0 time:'+translate.translateRequest[uuid][lang][i][addtime]); 2071 2072 //è¿éè¦èèè¿è¡æ¶é´å¤æ 2073 2074 return; 2075 } 2076 } 2077 2078 //çå½å¨æè§¦åäºä»¶
2079 translate.lifecycle.execute.renderFinish_Trigger(uuid, to); 2080 2081 //齿§è¡å®äºï¼é£ä¹è®¾ç½®å®æ¯ 2082 translate.state = 0; 2083 translate.executeNumber++; 2084 } 2085 2086 }, 2087 2088 //execute() æ¹æ³å·²ç»è¢«æ§è¡è¿å¤å°æ¬¡äºï¼ åªæ translate.execute() å®å ¨æ§è¡å®ï¼ä¹å°±æ¯ç颿¸²æå®æ¯åï¼å®æä¼+1 2089 executeNumber:0, 2090 //translate.execute() æ¹æ³å·²ç»è¢«è§¦åè¿å¤å°æ¬¡äºï¼ åªè¦ translate.execute() 被触åï¼å®å°±ä¼å¨è§¦åæ¶ç«å³ +1 (translate.execute() é»è®¤æ¯å䏿¶å»åªè½æ§è¡ä¸æ¬¡ï¼è¿ä¸ªè§¦åæ¯å¨è¿ä¸ªå䏿¶å»æ§è¡ä¸æ¬¡çå¤å®ä¹åè¿è¡++ çï¼å¦æè¿ä¸ªå䏿¶å»æ§è¡ä¸æ¬¡ä¸éè¿ï¼è¿æå ¶ä»å¨æ§è¡ï¼è¿å ¥æéæ§è¡æ¶ï¼è¿éä¹ä¼++ ï¼å½ä»æéçä¸é¡ºåºæå°è¿è¡æ§è¡æ¶ï¼å伿§è¡++ ) ã å½é¡µé¢æå¼ç¬¬ä¸æ¬¡è§¦åæ§è¡translate.execute()ï¼è¿éä¾¿æ¯ 1 2091 executeTriggerNumber:0, 2092 2093 lifecycle:{ 2094 2095 /* 2096 * 忢è¯è¨ 2097 */ 2098 changeLanguage:{ 2099 2100 /* 2101 å½è§¦å translate.changeLanguage(...) æ¶ï¼ä¼ç«å³å è§¦åæ¤ï¼å廿§è¡ translate.changeLanguage(...) çå¤ç 2102 */ 2103 trigger:[], 2104 trigger_Trigger:function(data){ 2105 for(var i = 0; i < translate.lifecycle.changeLanguage.trigger.length; i++){ 2106 try{ 2107 translate.lifecycle.changeLanguage.trigger[i](data); 2108 }catch(e){ 2109 translate.log(e); 2110 } 2111 } 2112 2113 //å ¼å®¹æ§çæ¬ç 2114 for(var i = 0; i < translate.lifecycle.changeLanguage.old_trigger_array.length; i++){ 2115 try{ 2116 translate.lifecycle.changeLanguage.old_trigger_array[i](data.to); 2117 }catch(e){ 2118 translate.log(e); 2119 } 2120 } 2121 }, 2122 /* 2123 ä¸é¢è¿ä¸¤ä¸ªæ¯å ¼å®¹ä»¥åçæ¬ç 2124 */ 2125 //éè¿ push å å ¥çï¼åªä¼å å ¥å° old_trigger_array ä¸ï¼ä¼ å ¥åæ°æ¯ toï¼ä¹å°±æ¯ stringæ ¼å¼ 2126 old_trigger_array:[], 2127 push: function(func){ 2128 translate.log('æç¤ºï¼ translate.lifecycle.changeLanguage.push æ¹å¼å·²è¿æ¶ï¼ä½ä¾æ§çæï¼å¯æ£å¸¸ä½¿ç¨ã ææ°çæ¹å¼ï¼ææ¡£åè http://translate.zvo.cn/540189.html '); 2129 translate.lifecycle.changeLanguage.trigger.push(func); 2130 translate.lifecycle.changeLanguage.old_trigger_array.push(func); 2131 }, 2132 2133 2134 2135 /* 2136 å¨è§¦å translate.reset() ä¹åã æ§è¡åæ¢è¯è¨å¨ä½ä¹åï¼è¿è¡è§¦å 2137 { 2138 to: //ç¿»è¯ä¸ºçè¯ç§ 2139 } 2140 */ 2141 resetAfter:[], 2142 resetAfter_Trigger:function(data){ 2143 var isNextExecute = true; //æ¯å¦ç»§ç»å䏿§è¡ï¼trueåæ¯ç»§ç»æ§è¡ï¼false忝ä¸ç»§ç»æ§è¡ã 2144 for(var i = 0; i < translate.lifecycle.changeLanguage.resetAfter.length; i++){ 2145 try{ 2146 translate.lifecycle.changeLanguage.resetAfter[i](data); 2147 }catch(e){ 2148 translate.log(e); 2149 } 2150 } 2151 }, 2152 2153 }, 2154 2155 /* 2156 translate.execute() æ§è¡ç¸å ³ 2157 */ 2158 execute:{ 2159 /* 2160 æ¯å½è§¦åæ§è¡ translate.execute() æ¶ï¼ä¼ç´æ¥è§¦åæ¤ã 2161 è¿ä¸ªè§¦åæ¯æå¨ææå¤æä¹åï¼ä¹å°±æ¯åªè¦ 触åäº translate.execute() ä¼ç«å³è§¦åæ¤ï¼ç¶åå¨è¿è¡æ§è¡å ¶ä»çã 2162 { 2163 to: , //ç¿»è¯ä¸ºçè¯ç§ 2164 docs: //å½å触å translate.execute() è¦è¿è¡ç¿»è¯çå ç´ ã 2165 æ¯å¦åçº¯è§¦åæ§è¡ translate.execute() ãtranslate.request.listener.start() é£ä¹è¿é docs 忝 éè¿ translate.setDocuments(...) æè®¾ç½®çå ç´ ã å¦ææ²¡æä½¿ç¨ translate.setDocuments(...) 设置è¿ï¼é£å°±æ¯ç¿»è¯æ´ä¸ªhtml页é¢ã 2166 å¦ææ¯ translate.listener.start(); çæ§é¡µé¢åçååçå ç´ è¿è¡ç¿»è¯ï¼åè¿éçdocs 忝åçååçå ç´ 2167 executeTriggerNumber: æ´æ°åï¼å½å触å translate.execute() æ§è¡ï¼å±äºæå¼é¡µé¢åç¬¬å æ¬¡æ§è¡ translate.execute() ï¼ å®ä¸ä¼ç»è¿ä»»ä½åå§å夿ï¼åªè¦è§¦åäº translate.execute() å°±ä¼ç«å³+1ï¼å³ä½¿åå§å夿å½åä¸é
2167è¦ç¿»è¯ãæè å½åæ£å¨ç¿»è¯éè¦æéçå¾ ï¼å®ä¾æ§ä¹ä¼+1 2168 2169 } 2170 2171 注æï¼å®æè¿ååæ°ï¼boolean ç±»åï¼ 2172 true åæ¯ç»§ç»æ§è¡ translate.execute() 2173 false 忝ä¸ç»§ç»æ§è¡ï¼ç´æ¥ç»æ¢æ¬æ¬¡ç translate.execute() ä¹å°±æ¯åé¢ç translate.lifecycle.execute.start é½ä¸ä¼æ§è¡å°ï¼ä¸ä¼è§¦åã 2174 妿é©å没æä»»ä½è¿åå¼ï¼åé»è®¤æ¯ true 2175 2176 妿æ¬é©åæå¤ä¸ªå®ç°ï¼å ¶ä¸æä¸ªå®ç°è¿å falseï¼å®ä¸ä¼é»æ¢å ¶ä»é©åçæ§è¡ï¼å ¶ä»çé©åå®ç°ä¹é½ä¼è§¦åæ§è¡ã åªä¸è¿éé¢åªè¦å ¶ä¸æä¸ä¸ªæ¯è¿å falseï¼é£ä¹ translate.execute() é½ä¼ç»æ¢ã 2177 */ 2178 trigger: [], 2179 trigger_Trigger:function(data){ 2180 var isNextExecute = true; //æ¯å¦ç»§ç»å䏿§è¡ï¼trueåæ¯ç»§ç»æ§è¡ï¼false忝ä¸ç»§ç»æ§è¡ã 2181 for(var i = 0; i < translate.lifecycle.execute.trigger.length; i++){ 2182 try{ 2183 var isNext = translate.lifecycle.execute.trigger[i](data); 2184 if(typeof(isNext) === 'boolean' && isNext === false){ 2185 isNextExecute = false; 2186 } 2187 }catch(e){ 2188 translate.log(e); 2189 } 2190 } 2191 return isNextExecute; 2192 }, 2193 2194 /* 2195 æ¯å½è§¦åæ§è¡ translate.execute() æ¶ï¼ä¼å è¿è¡å½åæ¯å¦å¯ä»¥æ£å¸¸è¿è¡ç¿»è¯çå¤å®ï¼æ¯å¦ å½åè¯ç§æ¯å¦å°±å·²ç»æ¯ç¿»è¯ä¹åçè¯ç§äºæ¯å¦æ²¡å¿ è¦ç¿»è¯äºçãï¼è¿äºåå§å¤å®å¯ä»¥çè§£æå®çèæ¶å°äº1毫ç§ï¼å 乿²¡æèæ¶ï¼ 2196 ç»è¿åå§ç夿åï¼åç°å 许被翻è¯ï¼é£ä¹å¨ååæ§è¡ä¹åï¼å è§¦åæ¤ã 2197 ä¹å°±æ¯å¨è¿è¡ç¿»è¯ä¹åï¼è§¦åæ¤ã 2198 2199 { 2200 uuid: , //translate.nodeQueue[uuid] è¿éç 2201 to: , //ç¿»è¯ä¸ºçè¯ç§ 2202 } 2203 2204 */ 2205 start : [], 2206 //start_Trigger:function(uuid, to){ 2207 start_Trigger:function(data){ 2208 for(var i = 0; i < translate.lifecycle.execute.start.length; i++){ 2209 if(translate.lifecycle.execute.start[i].length === 2){ 2210 //忬çï¼æ§ç 20250925 ä¹åçï¼æ¯stringæ¹å¼ä¼ å ¥ uuid, to è¿2ä¸ªåæ° 2211 try{ 2212 translate.lifecycle.execute.start[i](data.uuid, data.to); 2213 }catch(e){ 2214 translate.log(e); 2215 } 2216 }else{ 2217 try{ 2218 translate.lifecycle.execute.start[i](data); 2219 }catch(e){ 2220 translate.log(e); 2221 } 2222 } 2223 2224 } 2225 }, 2226 2227 2228 //å¾ æ´ç 2229 start_old : [], 2230 startRun:function(uuid, from, to){ 2231 //console.log(translate.nodeQueue[uuid]); 2232 for(var i = 0; i < translate.listener.execute.renderStartByApi.length; i++){ 2233 try{ 2234 translate.listener.execute.renderStartByApi[i](uuid, from, to); 2235 }catch(e){ 2236 translate.log(e); 2237 } 2238 } 2239 }, 2240 2241 /* 2242 彿«ææ´ä¸ªèç¹å®æï¼è¿è¡ç¿»è¯ï¼1. å½ä¸æ¬å°ç¼åã 2.è¿è¡ç½ç»ç¿»è¯è¯·æ±ï¼ä¹åï¼è§¦å 2243 å¾ æ´ç 2244 */ 2245 scanNodesFinsh: [], 2246 2247 2248 /* 2249 æ¯å½è§¦åæ§è¡ translate.execute() æ¶ï¼å½ç¼å䏿ªåç°ï¼éè¦è¯·æ±ç¿»è¯APIè¿è¡ç¿»è¯æ¶ï¼å¨åéAPI请æ±åï¼è§¦åæ¤ 2250 2251 { 2252 uuid: , //translate.nodeQueue[uuid] è¿éç 2253 lang: //æ¥æºè¯ç§ï¼ç¿»è¯åçè¯ç§ 2254 to: , //ç¿»è¯ä¸ºçè¯ç§ 2255 texts: , //è¦ç¿»è¯çææ¬ï¼å®æ¯ä¸ä¸ªæ°ç»å½¢æï¼æ¯è¦è¿è¡éè¿APIç¿»è¯æ¥å£è¿è¡ç¿»è¯çææ¬ï¼æ ¼å¼å¦ ['ä½ å¥½','ä¸ç'] 2256 nodes: //è¦ç¿»è¯çææ¬çnodeéåï¼ä¹å°±æ¯æåªäºnodeä¸çææ¬åä¸äº éè¿APIæ¥å£è¿è¡ç¿»è¯ææ¬ï¼è¿éæ¯è¿äºnodeã æ ¼å¼å¦ [
2256node1, node2, ...] 2257 } 2258 2259 */ 2260 translateNetworkBefore:[], 2261 //translateNetworkBefore_Trigger:function(uuid, from, to, texts){ 2262 translateNetworkBefore_Trigger:function(data){ 2263 /* 2264 if(typeof(data) == 'string'){ 2265 data = { 2266 uuid: data, 2267 }; 2268 } 2269 if(typeof(from) == 'string'){ 2270 data.from = from; 2271 } 2272 if(typeof(to) == 'string'){ 2273 data.to = to; 2274 } 2275 if(typeof(texts) == 'string'){ 2276 data.texts = texts; 2277 } 2278 */ 2279 2280 for(var i = 0; i < translate.lifecycle.execute.translateNetworkBefore.length; i++){ 2281 //console.log('translate.lifecycle.execute.translateNetworkBefore[i] ä¼ å ¥åæ°çæ°éï¼'+translate.lifecycle.execute.translateNetworkBefore[i].length); 2282 if(translate.lifecycle.execute.translateNetworkBefore[i].length === 4){ 2283 //忬çï¼æ§ç 20250915 ä¹åçï¼æ¯stringæ¹å¼ä¼ å ¥ uuid, from, to, texts è¿åä¸ªåæ° 2284 try{ 2285 translate.lifecycle.execute.translateNetworkBefore[i](data.uuid, data.from, data.to, data.texts); 2286 }catch(e){ 2287 translate.log(e); 2288 } 2289 }else{ 2290 //2025.9.15 ä¹åçæ°ç 2291 try{ 2292 translate.lifecycle.execute.translateNetworkBefore[i](data); 2293 }catch(e){ 2294 translate.log(e); 2295 } 2296 } 2297 2298 } 2299 }, 2300 2301 /* 2302 å½ translate.execute() 触åç½ç»ç¿»è¯è¯·æ±å®æ¯ï¼å¹¶å°ç¿»è¯ç»ææ¸²æå°é¡µé¢å®æ¯åï¼ä¸ç®¡ç½ç»ç¿»è¯è¯·æ±æåè¿æ¯å¤±è´¥ãè¿æ¯ç¿»è¯è¯·æ±æ¬èº«è¿åç¿»è¯å¤±è´¥ï¼ï¼é½è§¦åæ¤ã 2303 2304 { 2305 uuid: , //translate.nodeQueue[uuid] è¿éç 2306 lang: //æ¥æºè¯ç§ï¼ç¿»è¯åçè¯ç§ 2307 to: , //ç¿»è¯ä¸ºçè¯ç§ 2308 texts: , //è¦ç¿»è¯çææ¬ï¼å®æ¯ä¸ä¸ªæ°ç»å½¢æï¼æ¯è¦è¿è¡éè¿APIç¿»è¯æ¥å£è¿è¡ç¿»è¯çææ¬ï¼æ ¼å¼å¦ ['ä½ å¥½','ä¸ç'] 2309 nodes: , //è¦ç¿»è¯çææ¬çnodeéåï¼ä¹å°±æ¯æåªäºnodeä¸çææ¬åä¸äº éè¿APIæ¥å£è¿è¡ç¿»è¯ææ¬ï¼è¿éæ¯è¿äºnodeã æ ¼å¼å¦ [node1, node2, ...] 2310 result: //æ§è¡ç»æ 1æåï¼ 0失败 2311 } 2312 */ 2313 translateNetworkAfter:[], 2314 translateNetworkAfter_Trigger:function(data){ 2315 for(var i = 0; i < translate.lifecycle.execute.translateNetworkAfter.length; i++){ 2316 try{ 2317 translate.lifecycle.execute.translateNetworkAfter[i](data); 2318 }catch(e){ 2319 translate.log(e); 2320 } 2321 } 2322 }, 2323 2324 2325 2326 /* 2327 translate.execute() çç¿»è¯æ¸²æå®æ¯è§¦å 2328 è¿ä¸ªå®æ¯æ¯æå®å½è§¦å translate.execute() è¿è¡ç¿»è¯åï¼æ 论æ¯å ¨é¨å½ä¸äºæ¬å°ç¼åï¼è¿æ¯æé¨åè¦éè¿ç¿»è¯æ¥å£åèµ·å¤ä¸ªç½ç»è¯·æ±ï¼å½æ¿å°ç»æï¼ç¼åä¸çç¿»è¯ç»ææå¤ä¸ªä¸åçæxxè¯ç§ç¿»è¯çç½ç»è¯·æ±å ¨é¨å®æï¼è¿ä¸ªå®ææ¯å 嫿ææåè·å¤±è´¥çååºï¼ï¼å¹¶å®æå°ç¿»è¯ç»ææ¸²æå°é¡µé¢ä¸è¿è¡æ¾ç¤ºåï¼è§¦åæ¤ 2329 å®è· translateNetworkFinish çåºå«æ¯ï¼ translateNetworkFinish ä» ä» é对æç½ç»è¯·æ±çæä¼è§¦åï¼è renderFinish æ¯å¦æå ¨é¨å½ä¸äºæµè§å¨æ¬å°ç¼åï¼æ éåèµ·ä»»ä½ç½ç»ç¿»è¯è¯·æ±è¿ç§æ 嵿¶ï¼ä¹ä¼è§¦åã 2330 @param uuid translate.nodeQueue çuuid 2331 @param to å½åæ¯æ§è¡çç¿»è¯ä¸ºä»ä¹è¯ç§ 2332 */ 2333 renderFinish:[function(uuid, to){ //è¿éé»è®¤å¸¦çä¸ä¸ªè§¦åç¿»è¯ä¸ºè±æåï¼èªå¨å¯¹è±æè¿è¡å ç´ è§è§å¤çï¼è¿½å ç©ºæ ¼ç 2334 if(typeof(translate.visual) != 'undefined'){ 2335 translate.visual.adjustTranslationSpacesByNodequeueUuid(uuid); 2336 } 2337 }],
2338 renderFinish_Trigger:function(uuid, to){ 2339 for(var i = 0; i < translate.lifecycle.execute.renderFinish.length; i++){ 2340 try{ 2341 translate.lifecycle.execute.renderFinish[i](uuid, to); 2342 }catch(e){ 2343 translate.log(e); 2344 } 2345 } 2346 }, 2347 2348 /* 2349 æ¯å½ translate.execute() æ§è¡ç»æã䏿¢ãèªæ£ä¸éè¿è·³åº ... çï¼é½ä¼è§¦åè¿ä¸ªã 2350 注æï¼ä¸ç®¡å¨ translate.execute() æ¯å¦èªæ£éè¿ãä¸ç®¡æ¯å¦è¿è¡äºç¿»è¯ãä¸ç®¡ææ¬ç¿»è¯APIæ¥å£æ¯å¦æ¿å°ç¿»è¯ç»æï¼åªè¦ translate.execute æ§è¡å®æ¯æè§¦åäºä»ä¹èªæ£ä¸éè¿ä¸åå¾ä¸æ§è¡ï¼é½ä¼è§¦åè¿ä¸ªã 2351 è¿ä¸ªä» ä» åªæ¯ç¨äº translate.execute() ä»ä¸è䏿§è¡å®è·³åºæ¶ï¼è¿è¡è§¦åçã 2352 2353 { 2354 uuid: translate.nodeQueue[uuid] è¿éçã 妿å½å没æè¿è¡æ£å¸¸ç¿»è¯ï¼æ¯å¦èªæ£å¤±è´¥ä¸å¨æ§è¡è·³åºäºï¼é£è¿ä¸ªå°ä¼è¿å空å符串 '' 2355 to: ç¿»è¯ä¸ºä»ä¹è¯ç§ï¼å¦æå½å没æè¿è¡æ£å¸¸ç¿»è¯ï¼æ¯å¦èªæ£å¤±è´¥ä¸å¨æ§è¡è·³åºäºï¼é£è¿ä¸ªå°ä¼è¿å空å符串 '' 2356 state : ç¶æï¼ç¨äºå¤ææ¯ä»ä¹æ 嵿§è¡å®çï¼æ´æ°åï¼åå¼æï¼ 2357 1 å½åç¿»è¯æªå®ç»ï¼æ°ç¿»è¯ä»»å¡å·²å å ¥çå¾ ç¿»è¯éåï¼å¾ ä¸ä¸ªç¿»è¯ä»»å¡ç»æåä¾¿ä¼æ§è¡å½åç¿»è¯ä»»å¡ 2358 3 没ææå®ç¿»è¯ç®æ è¯è¨ï¼ä¸ç¿»è¯ 2359 5 æ¬å°è¯ç§è·è¦ç¿»è¯çç®æ è¯ç§ä¸æ ·ï¼ä¸æ²¡æå¯ç¨æ¬å°è¯ç§ä¹å¼ºå¶ç¿»è¯ï¼é£ä¹å½åä¸éè¦æ§è¡ç¿»è¯ï¼éåº 2360 16 å·²ç»å¹é å®èªå®ä¹æ¯è¯è·ç¦»çº¿ç¿»è¯ï¼ä½æ¯ç¨æ·è®¾ç½®äºä¸æç¿»è¯æ¥å£è¿è¡ç¿»è¯ï¼ä¸å¨ååæ§è¡éè¿ææ¬ç¿»è¯æ¥å£è¿è¡ç¿»è¯ 2361 18 å·²ç»å¹é å®èªå®ä¹æ¯è¯è·ç¦»çº¿ç¿»è¯ï¼æ¤æ¶ææè¦ç¿»è¯çææ¬é½å·²ç»å¹é å®äºï¼æ²¡æå¨éè¦éè¿ææ¬ç¿»è¯æ¥å£è¿è¡ç¿»è¯çäº 2362 21 è¿è¡éè¿ææ¬ç¿»è¯APIè¿è¡è°ç¨æ¥å£ç¿»è¯æ¶ï¼æä¸ªè¯ç§çæ°æ®æ ¡éªå¤±è´¥å¯¼è´éåºã è¿ä¸ªæ åµç论ä¸åºè¯¥ä¸ä¼åºç°ï¼é¢çè¿ä¸ªæ åµï¼åç»å°ä¼åé¤è¿ä¸ªç¶æ 2363 25 å·²éè¿ææ¬ç¿»è¯æ¥å£åèµ·ææç¿»è¯è¯·æ±ï¼translate.execute æ§è¡å®æ¯ã ï¼åªæ¯åèµ·ç½ç»è¯·æ±ï¼ä¸ä»£è¡¨ç¿»è¯å®æï¼å 为è¿éè¿æ²¡æççæ¿å°ç½ç»è¯·æ±çååºç»æï¼è¿å¤äºç½ç»è¯·æ±çè¿ç¨ä¸ï¼ 2364 triggerNumber: translate.execute() æ¹æ³å·²ç»è¢«è§¦åè¿å¤å°æ¬¡äºï¼ åªè¦ translate.execute() 被触åï¼å®å°±ä¼å¨è§¦åæ¶ç«å³ +1 (translate.execute() é»è®¤æ¯å䏿¶å»åªè½æ§è¡ä¸æ¬¡ï¼è¿ä¸ªè§¦åæ¯å¨è¿ä¸ªå䏿¶å»æ§è¡ä¸æ¬¡çå¤å®ä¹åè¿è¡++ çï¼å¦æè¿ä¸ªå䏿¶å»æ§è¡ä¸æ¬¡ä¸éè¿ï¼è¿æå ¶ä»å¨æ§è¡ï¼è¿å ¥æéæ§è¡æ¶ï¼è¿éä¹ä¼++ ï¼å½ä»æéçä¸é¡ºåºæå°è¿è¡æ§è¡æ¶ï¼å伿§è¡++ ) ã å½é¡µé¢æå¼ç¬¬ä¸æ¬¡è§¦åæ§è¡translate.execute()ï¼è¿éä¾¿æ¯ 1 2365 } 2366 */ 2367 finally : [], 2368 finally_Trigger:function(data){ 2369 //console.log(data) 2370 for(var i = 0; i < translate.lifecycle.execute.finally.length; i++){ 2371 try{ 2372 translate.lifecycle.execute.finally[i](data); 2373 }catch(e){ 2374 translate.log(e); 2375 } 2376 } 2377 }, 2378 } 2379 }, 2380 2381 /*translate.execute() start */ 2382 /* 2383 æ§è¡ç¿»è¯æä½ãç¿»è¯çæ¯ nodeQueue ä¸ç 2384 docs å¦æä¼ å ¥ï¼é£ä¹ç¿»è¯çåªæ¯ä¼ å ¥çè¿ä¸ªdocsçãä¼ å ¥å¦ [document.getElementById('xxx'),document.getElementById('xxx'),...] 2385 妿ä¸ä¼ å ¥æè ä¼ å ¥nullï¼åæ¯ç¿»è¯æ´ä¸ªç½é¡µææè½ç¿»è¯çå ç´ 2386 */ 2387 execute:function(docs){ 2388 translate.executeTriggerNumber = translate.executeTriggerNumber + 1; 2389 var triggerNumber = translate.executeTriggerNumber; //ä¸ºäºæ´ä¸ª translate.execute çæ°æ®ä¸è´æ§ï¼ä¸é¢é½æ¯ä½¿ç¨è¿ä¸ªåé 2390 2391 //æ¯æ¬¡æ§è¡executeï¼é½ä¼çæä¸ä¸ªå¯ä¸uuidï¼ä¹å¯ä»¥å«åéåçå¯ä¸æ è¯ï¼æ¯ä¸æ¬¡æ§è¡executeé½ä¼å建ä¸ä¸ªç¬ç«çç¿»è¯æ§è¡éå 2392 var uuid = translate.util.uuid(); 2393 translate.time.log('å建uuid:'+uuid); 2394 2395 //妿页颿å¼ç¬¬ä¸æ¬¡ä½¿ç¨ï¼å 夿ç¼åä¸ææ²¡æä¸æ¬¡ä½¿ç¨çè¯ç§ï¼ä»ç¼åä¸ååº 2396 if(translate.to == null || translate.to == ''){ 2397 var to_storage = translate.storage.get('to'); 2398 if(to_storage != null && typeof(to_storage) != 'undefined' && to_storage.length > 0){ 2399 translate.to = to_storage; 2400 } 2401 } 2402 2403 /* 2404 è¿è¡ç¿»è¯æå®çnodeæä½ãä¼å çº§ä¸ºï¼ 2405 1. è¿ä¸ªæ¹æ³å·²ç»æå®çç¿»è¯ nodes 2406 2. setDocuments æå®ç 2407 3. æ´ä¸ªç½é¡µ 2408 å ¶å®2ã3齿¯éè¿ getDocuments() åï¼å¨getDocuments() 就对2ã3è¿è¡äºå¤æ 2409 */ 2410 var all; 2411 if(typeof(docs) != 'undefined' && docs != null){ 2412 if(typeof(docs.length) == 'undefined'){ 2413 //䏿¯æ°ç»ï¼æ¯å个å ç´ 2414 all = new Array(); 2415 all[0] = docs; 2416 }else{ 2417 //æ¯æ°ç»ï¼ç´æ¥èµäº 2418 all = docs; 2419 } 2420 }else{ 2421 //2ã3 2422 all = translate.getDocuments(); 2423 } 2424 2425 2426 //é©å 2427 var triggerIsNextExecute = translate.lifecycle.execute.trigger_Trigger({ 2428 to:translate.to, 2429 docs: all, 2430 executeTriggerNumber: triggerNumber, 2431 uuid: uuid 2432 }); 2433 if(!triggerIsNextExecute){ 2434 //ç»æ¢æ§è¡ 2435 2436 //é©å 2437 translate.lifecycle.execute.finally_Trigger({ 2438 uuid:uuid, 2439 to:translate.to, 2440 state: 2, 2441 triggerNumber: triggerNumber 2442 }); 2443 2444 return; 2445 } 2446 2447 2448 2449 if(translate.waitingExecute.use){ 2450 if(translate.state != 0){ 2451 var sliceDocString = ''; 2452 2453 if(typeof(docs) != 'undefined' && docs != null){ 2454 var sliceDoc = docs.slice(0, 2); 2455 2456 for(var di = 0; di < sliceDoc.length; di++){ 2457 if(sliceDocString.length > 0){ 2458 sliceDocString = sliceDocString + ', '; 2459 } 2460 if(sliceDoc[di].nodeType === 1){ 2461 //å ç´
2462 sliceDocString = sliceDocString + ""+sliceDoc[di].tagName; 2463 if(typeof(sliceDoc[di].id) == 'string' && sliceDoc[di].id.length > 0){ 2464 sliceDocString = sliceDocString + " id="+sliceDoc[di].id; 2465 } 2466 if(sliceDoc[di].getAttribute('class') != null && typeof(sliceDoc[di].getAttribute('class')) == 'string' && sliceDoc[di].getAttribute('class').length > 0){ 2467 sliceDocString = sliceDocString + " class="+sliceDoc[di].getAttribute('class'); 2468 } 2469 }else if(sliceDoc[di].nodeType === 2 || sliceDoc[di].nodeType === 3){ 2470 //2屿§ æ 3ææ¬èç¹ 2471 sliceDocString = sliceDocString + sliceDoc[di].nodeValue.replaceAll(/\r?\n/g, '[æ¢è¡ç¬¦]'); 2472 } 2473 } 2474 sliceDocString = ' ('+docs.length+')['+sliceDocString+(docs.length > 2 ? ', ...':'')+']'; 2475 } 2476 2477 2478 translate.log('å½åç¿»è¯æªå®ç»ï¼æ°ç¿»è¯ä»»å¡å·²å å ¥çå¾ ç¿»è¯éåï¼å¾ ä¸ä¸ªç¿»è¯ä»»å¡ç»æåä¾¿ä¼æ§è¡å½åç¿»è¯ä»»å¡'+sliceDocString); 2479 translate.waitingExecute.add(docs); 2480 2481 //é©å 2482 translate.lifecycle.execute.finally_Trigger({ 2483 uuid:uuid, 2484 to:translate.to, 2485 state: 4, 2486 triggerNumber: triggerNumber 2487 }); 2488 2489 return; 2490 } 2491 } 2492 2493 2494 translate.state = 2; 2495 translate.time.log('触å'); 2496 2497 //init.json 2498 translate.request.initRequest(); 2499 2500 //console.log('translate.state = 1'); 2501 if(typeof(docs) != 'undefined'){ 2502 //executeä¼ å ¥åæ°ï¼åªæv2çæ¬ææ¯æ 2503 translate.useVersion = 'v2'; 2504 } 2505 2506 if(translate.useVersion == 'v1'){ 2507 //if(this.to == null || this.to == ''){ 2508 //éç¨1.xçæ¬çç¿»è¯ï¼ä½¿ç¨googleç¿»è¯ 2509 //translate.execute_v1(); 2510 //return; 2511 //v2.5.1å¢å 2512 translate.log('æç¤ºï¼https://github.com/xnx3/translate å¨ v2.5 çæ¬ä¹åï¼ç±äºè°·æç¿»è¯è°æ´ï¼å 费翻è¯ééä¸åæ¯æï¼æä»¥v1çæ¬çç¿»è¯æ¥å£ä¸åè¢«æ¯æï¼v1å ¨çº¿ä¸æ¶ãèèå°v1å·²ä¸è½ä½¿ç¨ï¼å½åå·²èªå¨åæ¢å°v2çæ¬ã妿æ¨ä½¿ç¨ä¸åç°ä»ä¹å¼å¸¸ï¼è¯·é对v2çæ¬è¿è¡éé ã'); 2513 translate.useVersion = 'v2'; 2514 } 2515 2516 2517 2518 /****** éç¨ 2.x çæ¬çç¿»è¯ï¼ä½¿ç¨èªæç¿»è¯ç®æ³ */ 2519 2520 2521 2522 //console.log('=====') 2523 //console.log(translate.nodeQueue); 2524 2525 /* v2.4.3 å°åå§åæ¾å°äº translate.element.whileNodes ä¸ï¼å¦æuuid对åºç没æï¼åèªå¨å建 2526 2527 translate.nodeQueue[uuid] = new Array(); //å建 2528 translate.nodeQueue[uuid]['expireTime'] = Date.now() + 120*1000; //å 餿¶é´ï¼10åéåå é¤ 2529 translate.nodeQueue[uuid]['list'] = new Array(); 2530 */ 2531 //console.log(translate.nodeQueue); 2532 //console.log('=====end') 2533 2534 2535 2536 translate.time.log('渲æåºéæ©è¯è¨çselectçªå£-å¼å§'); 2537 //渲æselectéæ©è¯è¨ 2538 try{ 2539 translate.selectLanguageTag.render(); 2540 }catch(e){ 2541 translate.log(e); 2542 } 2543 2544 translate.time.log('渲æåºéæ©è¯è¨çselectçªå£-已宿'); 2545 2546 //夿æ¯å¦è¿æªæå®ç¿»è¯çç®æ è¯è¨ 2547 if(translate.to == null || typeof(translate.to) == 'undefined' || translate.to.length == 0){ 2548 //æªæå®ï¼å¤æå¦ææå®äºèªå¨è·åç¨æ·æ¬å½è¯ç§äºï¼é£ä¹è¿è¡è·å 2549 if(translate.autoDiscriminateLocalLanguage){ 2550 translate.executeByLocalLanguage(); 2551 }else{ 2552 //没ææå®ç¿»è¯ç®æ è¯è¨ãåæ²¡èªå¨è·åç¨æ·æ¬å½è¯ç§ï¼åä¸ç¿»è¯ 2553 translate.state = 0; 2554 2555 //é©å 2556 translate.lifecycle.execute.finally_Trigger({ 2557 uuid:uuid, 2558 to:translate.to, 2559 state: 6, 2560 triggerNumber: triggerNumber 2561 }); 2562 2563 return; 2564 } 2565 } 2566 2567 //夿æ¬å°è¯ç§è·è¦ç¿»è¯çç®æ è¯ç§æ¯å¦ä¸æ ·ï¼å¦ææ¯ä¸æ ·ï¼é£å°±ä¸éè¦è¿è¡ä»»ä½ç¿»è¯ 2568 if(translate.to == translate.language.getLocal()){ 2569 if(translate.language.translateLocal){ 2570 //è¿æ¯èªå®ä¹è®¾ç½®çå è®¸ç¿»è¯æ¬å°è¯ç§ä¸ï¼è·æ¬å°è¯ç§ä¸ä¸è´çè¯è¨è¿è¡ç¿»è¯ 2571 2572 }else{ 2573 translate.state = 0; 2574 2575 //é©å 2576 translate.lifecycle.execute.finally_Trigger({ 2577 uuid:uuid, 2578 to:translate.to, 2579 state: 8, 2580 triggerNumber: triggerNumber 2581 }); 2582 2583 return; 2584 } 2585 } 2586 2587 //åå§å translate.element.tagAttribute ï¼ä¸»è¦é对 v3.17.10 çæ¬çéé è°æ´ï¼å¯¹ translate.element.tagAttribute ç设置åäºæ¹åï¼åæ§çæ¬çéé 2588 try{ 2589 for(var te_tag in translate.element.tagAttribute){ 2590 if (!translate.element.tagAttribute.hasOwnProperty(te_tag)) { 2591 continue; 2592 } 2593 if(translate.element.tagAttribute[te_tag] instanceof Array){ 2594 //æ¯ v3.17.10 ä¹åçæ¬ç设置æ¹å¼ï¼è¦è¿è¡å¯¹æ§çæ¬çéé 2595 var tArray = translate.element.tagAttribute[te_tag]; 2596 translate.element.tagAttribute[te_tag] = { 2597 attribute: tArray, 2598 condition: function(element){ 2599 return true; 2600 } 2601 } 2602 } 2603 } 2604 }catch(e){ 2605 translate.log(e); 2606 } 2607 2608 2609 /********** ç¿»è¯è¿è¡ */ 2610 2611 translate.time.log('çå½å¨æ-触åç¿»è¯è¿è¡ä¹åï¼ç¨æ·èªå®ä¹çé©å-å¼å§'); 2612 2613 //çå½å¨æ-触åç¿»è¯è¿è¡ä¹åï¼ç¨æ·èªå®ä¹çé©å 2614 translate.lifecycle.execute.start_Trigger({ 2615 uuid:uuid, 2616 to: translate.to 2617 }); 2618 translate.time.log('çå½å¨æ-触åç¿»è¯è¿è¡ä¹åï¼ç¨æ·èªå®ä¹çé©å-宿'); 2619 2620 translate.time.log('è¿è¡å¾çç¿»è¯-å¼å§'); 2621 //å è¿è¡å¾ççç¿»è¯æ¿æ¢ï¼æ¯ç«å¾çè¿æå è½½çè¿ç¨ 2622 translate.images.execute(); 2623 translate.time.log('è¿è¡å¾çç¿»è¯-宿'); 2624 2625 2626 //console.log('----è¦ç¿»è¯çç®æ å ç´ -----'); 2627 //console.log(all) 2628 2629 if(all.length > 1500){ 2630 translate.log('------tip------'); 2631 translate.log('è¦å translate.execute( docs ) ä¼ å ¥çdocs.length è¿å¤§ï¼è¶ è¿1500ï¼è¿ä¸æ£å¸¸ï¼å½å docs.length : '+all.length+' , å®ä¾æ§ä¼æ£å¸¸è¿è¡æ§è¡ï¼ä½ä¼ææ§è½æèã è¿ä¸ªæ åµå¾å¯è½æ¯ä½ ç¨çæäºæ¡æ¶ï¼æ²¡æçdom渲æå®å°±æ§è¡äºtranslate.execute() ï¼åæ¶å¯ç¨äºdomåå¨çå¬ï¼å¯¼è´çå¬å°é¡µé¢å 载大éçDOM渲æï¼ å¦å¤ä¹æå¯è½ä½ æ¬èº«é¡µé¢å°±æ¯å表页æè ä»ä¹åå å°±æ¯æå¤§éç卿å ç´ è·å忏²æï¼å¦ææ¯è¿ç§æ åµï¼è¿æ¯æ£å¸¸çã'); 2632 } 2633 2634 2635 translate.time.log('å¼å§æ«æè¦ç¿»è¯åºåçå ç´ '); 2636 //æ£ç´¢ç®æ å çnodeå ç´ 2637 for(var i = 0; i< all.length & i < 15000; i++){ 2638 var node = all[i]; 2639 translate.element.whileNodes(uuid, node); 2640 } 2641 translate.time.log('æ«æè¦ç¿»è¯åºåçå ç´ å®æ'); 2642 2643 /***** translate.language.translateLanguagesRange å¼å§ *****/ 2644 if(translate.language.translateLanguagesRange.length > 0){ 2645 //妿大äº0ï¼åæ¯æè®¾ç½®ï¼é£ä¹åªç¿»è¯æè®¾ç½®çè¯ç§ï¼ä¸å¨è®¾ç½®ä¸çè¯ç§ä¸ä¼åä¸ç¿»è¯ 2646 for(var lang in translate.nodeQueue[uuid].list){ 2647 if (!translate.nodeQueue[uuid].list.hasOwnProperty(lang)) { 2648 continue; 2649 }
2650 if(translate.language.translateLanguagesRange.indexOf(lang) < 0){ 2651 //å é¤è¿ä¸ªè¯ç§ 2652 delete translate.nodeQueue[uuid].list[lang]; 2653 } 2654 } 2655 } 2656 2657 /***** translate.language.translateLanguagesRange ç»æ *****/ 2658 2659 //ä¿®å¤å¦ætranslateæ¾å¨äºé¡µé¢æé¡¶é¨ï¼æ¤æ¶æ§è¡è¯å®æ«æä¸å°ä»»ä½ä¸è¥¿çï¼é¿å è¿ç§æ åµåºç°æ¥é 2660 if(typeof(translate.nodeQueue[uuid]) == 'undefined'){ 2661 translate.nodeQueue[uuid] = new Array(); 2662 translate.nodeQueue[uuid].list = []; 2663 translate.log('--- translate.js warn tip è¦åï¼ï¼ ---'); 2664 translate.log('æ¨ä½¿ç¨translate.jsæ¶å¯è½æ¾çä½ç½®ä¸å¯¹ï¼ä¸è¦å§ translate.js æ¾å¨ç½é¡µæé¡¶é¨ï¼è¿æ ·å½ translate.js è¿è¡æ§è¡ï¼ä¹å°±æ¯ translate.execute() æ§è¡æ¶ï¼å 为ç½é¡µæ¯ä»ä¸å¾ä¸å è½½ï¼å®æ¾å¨ç½é¡µæé¡¶é¨ï¼é£ä¹å®æ§è¡æ¶ç½é¡µåé¢çå 容é½è¿æ²¡å è½½åºæ¥ï¼è¿ä¸ªæ¯ä¸ä¼è·åå°ç½é¡µä»»ä½å 容çï¼ä¹å°±æ¯å®æ¯ä¸èµ·ä»»ä½ä½ç¨ç'); 2665 } 2666 for(var lang in translate.nodeQueue[uuid].list){ 2667 if (!translate.nodeQueue[uuid].list.hasOwnProperty(lang)) { 2668 continue; 2669 } 2670 //console.log('lang:'+lang) 2671 for(var hash in translate.nodeQueue[uuid].list[lang]){ 2672 if (!translate.nodeQueue[uuid].list[lang].hasOwnProperty(hash)) { 2673 continue; 2674 } 2675 //console.log(hash) 2676 if(typeof(translate.nodeQueue[uuid].list[lang][hash]) == 'function'){ 2677 //v2.10å¢å ï¼é¿å hashååºä¸ª Contains åºæ¥å¯¼è´forä¸ç.length åºé 2678 continue; 2679 } 2680 if(typeof(translate.nodeQueue[uuid].list[lang][hash].nodes) == 'undefined' || typeof(translate.nodeQueue[uuid].list[lang][hash].nodes.length) == 'undefined'){ 2681 //v3.16.2 å¢å ï¼é对深å³åçè«æ¯ç§å¦æ ¡é¾è叿åºçè¿é .length éå°äº undefined çæ åµ 2682 continue; 2683 } 2684 2685 2686 /* 20250912 å é¤ï¼å ä¸ºå¨æ«æé¶æ®µå°±å·²ç»å¤å®äº 2687 for(var nodeindex = translate.nodeQueue[uuid].list[lang][hash].nodes.length-1; nodeindex > -1; nodeindex--){ 2688 //console.log(translate.nodeQueue[uuid].list[lang][hash].nodes[nodeindex]); 2689 var analyse = translate.element.nodeAnalyse.get(translate.nodeQueue[uuid].list[lang][hash].nodes[nodeindex].node); 2690 //analyse.text analyse.node 2691 var nodeid = nodeuuid.uuid(analyse.node); 2692 //translate.nodeQueue[uuid].list[lang][hash].nodes.splice(nodeindex, 1); 2693 //console.log(nodeid+'\t'+analyse.text); 2694 //è¿ä¸ªæ¾å°äºnodeæ«æéå»è¿è¡å¤å®äº,åç»è¦èèå é¤ 2695 if(translate.node.get(analyse.node) != null){ 2696 //åå¨ï¼å¤æå ¶å 容æ¯å¦åçäºæ¹å 2697 //console.log('æ¯è¾---------'); 2698 //console.log(translate.node[nodeid].translateText); 2699 //console.log(analyse.text); 2700 var nodeAttribute = translate.node.getAttribute(translate.nodeQueue[uuid].list[lang][hash].nodes[nodeindex].attribute); 2701 //console.log(translate.node.get(analyse.node)[nodeAttribute.key]); 2702 if(translate.node.get(analyse.node)[nodeAttribute.key].resultText == analyse.text){ 2703 //å 容æªåçæ¹åï¼é£ä¹ä¸éè¦åç¿»è¯äºï¼ä»translate.nodeQueueä¸å é¤è¿ä¸ªnode 2704 translate.nodeQueue[uuid].list[lang][hash].nodes.splice(nodeindex, 1); 2705 //console.log('åç°ç¸ççnodeï¼å é¤ '+analyse.text+'\t'+hash); 2706 }else{ 2707 //console.log("åç°ååçnode =======nodeid:"+nodeid); 2708 //console.log(translate.node[nodeid].translateText == analyse.text); 2709 //console.log(translate.node[nodeid].node); 2710 //console.log(translate.node[nodeid].translateText); 2711 //console.log(analyse.text); 2712 2713 } 2714 }else{ 2715 //console.log('æªå¨ nodeHistory ä¸åç°ï¼æ°çnode nodeid:'+nodeid); 2716 //console.log(analyse.node) 2717 } 2718 2719 //以ä¸èèå é¤ 2720 2721 } 2722 */ 2723 2724 if(translate.nodeQueue[uuid].list[lang][hash].nodes.length == 0){ 2725 //妿nodeæ°ç»ä¸å·²ç»æ²¡æäºï¼é£ä¹ç´æ¥æè¿ä¸ªhash廿 2726 delete translate.nodeQueue[uuid].list[lang][hash]; 2727 } 2728 } 2729 if(Object.keys(translate.nodeQueue[uuid].list[lang]).length == 0){ 2730 //妿è¿ä¸ªè¯è¨ä¸æ²¡æè¦ç¿»è¯çnodeäºï¼é£ä¹å é¤è¿ä¸ªè¯è¨ 2731 delete translate.nodeQueue[uuid].list[lang]; 2732 } 2733 } 2734 2735 translate.time.log('å¯¹æ«æå°çå ç´ è¿è¡é¢å¤ç宿¯'); 2736 //console.log('new queuq'); 2737 //console.log(translate.nodeQueue[uuid]) 2738 //translate.node.data[nodeid] 2739 2740 2741 //console.log('-----å¾ ç¿»è¯ï¼----'); 2742 //console.log(translate.nodeQueue); 2743 2744 //translateTextArray[lang][0] 2745 var translateTextArray = {}; //è¦ç¿»è¯çææ¬çæ°ç»ï¼æ ¼å¼å¦ ["ä½ å¥½","欢è¿"] 2746 var translateHashArray = {}; //è¦ç¿»è¯çææ¬çhash,è·ä¸é¢çindexæ¯ä¸è´çï¼åªä¸è¿ä¸é¢æ¯åè¦ç¿»è¯çææ¬ï¼è¿ä¸ªåhashå¼ 2747 /* 2748 è¦ç¿»è¯çææ¬æå¨ç node ï¼è¿äºè¦ç¿»è¯çææ¬æ¯å¨åªäºnodeä¸ã 2749 宿¯äºç»´çã 2750 ä¸ç»´ï¼ 2751 key: language 2752 value: map 2753 key: node
2754 value: 1 //valueæ 任使ä¹ï¼åªæ¯åä¸å»ç ï¼ è¿æ ·keyä¼èªå¨æé 2755 2756 */ 2757 var translateTextNodeMap = new Map(); 2758 2759 2760 /* 2761 è¦è¿è¡ç¬¬äºæ¬¡æ«æçnode - 2023.8.22 è§£å³ç¼åä¼ææ£æ«æå°çç¿»è¯ææ¬ï¼å¯¼è´ç¿»è¯ç»æåæ¾å¯»ä¸å°è导è´ä¸ç¿»è¯çé®é¢ 2762 ä¸ç»´ key: lang 2763 äºç»´ key: hash 2764 ä¸ç»´ key: 2765 node: å½åçnodeå ç´ 2766 2767 åç»´ -delete ... array: å½åç¼åä¸è¿è¡ç¿»è¯çææ¬æ°ç»ï¼ 2768 cacheOriginal: å·²ç¼åè¢«æ¿æ¢åçææ¬ 2769 cacheTranslateText: å·²ç¼åè¢«æ¿æ¢åçç¿»è¯ææ¬ 2770 2771 */ 2772 var twoScanNodes = {}; 2773 var cacheScanNodes = []; //åä¸é¢ç twoScanNodesï¼åªä¸è¿ twoScanNodes æ¯æç §langåçï¼èè¿ä¸ªä¸åælangåºå 2774 for(var lang in translate.nodeQueue[uuid]['list']){ //äºç»´æ°ç»ä¸ï¼åè¯è¨ 2775 if (!translate.nodeQueue[uuid]['list'].hasOwnProperty(lang)) { 2776 continue; 2777 } 2778 //console.log('lang:'+lang); //lang为englishè¿ç§è¯è¨æ è¯ 2779 if(lang == null || typeof(lang) == 'undefined' || lang.length == 0 || lang == 'undefined'){ 2780 //console.log('lang is null : '+lang); 2781 continue; 2782 } 2783 2784 translateTextArray[lang] = []; 2785 translateTextNodeMap.set(lang, new Map()); 2786 translateHashArray[lang] = []; 2787 2788 let task = new translate.renderTask(); 2789 //console.log(translate.nodeQueue); 2790 2791 twoScanNodes[lang] = []; 2792 //äºç»´æ°ç»ï¼åhashãvalue 2793 for(var hash in translate.nodeQueue[uuid]['list'][lang]){ 2794 if (!translate.nodeQueue[uuid]['list'][lang].hasOwnProperty(hash)) { 2795 continue; 2796 } 2797 if(typeof(translate.nodeQueue[uuid]['list'][lang][hash]) == 'function'){ 2798 //è·³åºï¼å¢å 容éã æ£å¸¸æ åµä¸åºè¯¥ä¸ä¼è¿æ · 2799 continue; 2800 } 2801 2802 //åå§çnodeä¸çè¯ 2803 var originalWord = translate.nodeQueue[uuid]['list'][lang][hash]['original']; 2804 //è¦ç¿»è¯çè¯ 2805 var translateText = translate.nodeQueue[uuid]['list'][lang][hash]['translateText']; 2806 //console.log(originalWord); 2807 2808 //æ ¹æ®hashï¼å¤ææ¬å°æ¯å¦æç¼åäº 2809 var cacheHash = originalWord == translateText ? hash:translate.util.hash(translateText); //妿å¹é å°äºèªå®ä¹æ¯è¯åºï¼é£ç¿»è¯åçhashæ¯è¢«æ¹åäº 2810 translate.nodeQueue[uuid]['list'][lang][hash]['cacheHash'] = cacheHash; //ç¼åçhashã ç¼åæ¶ï¼å ¶hashè·ç¿»è¯çè¯è¨æ¯å®å ¨å¯¹åºçï¼ç¼åçhashå°±æ¯ç¿»è¯çè¯è¨è½¬æ¢æ¥ç 2811 var cache = translate.storage.get('hash_'+translate.to+'_'+cacheHash); 2812 2813 //ç¼åæ¯å¦ææ¿å°å ·ä½ç¼åå 容 2814 if(cache != null && cache.length > 0){ 2815 for(var node_index = 0; node_index < translate.nodeQueue[uuid]['list'][lang][hash]['nodes'].length; node_index++){ 2816 //console.log(translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][node_index]); 2817 2818 2819 2820 //ç¿»è¯ç»æçææ¬ï¼å å«äºbefore ã after äº 2821 var translateResultText = translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][node_index]['beforeText']+cache+translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][node_index]['afterText']; 2822 task.add(translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][node_index]['node'], originalWord, translateResultText, translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][node_index]['attribute']); 2823 //this.nodeQueue[lang][hash]['nodes'][node_index].nodeValue = this.nodeQueue[lang][hash]['nodes'][node_index].nodeValue.replace(new RegExp(originalWord,'g'), cache); 2824 //console.log(translateResultText); 2825 2826 //éæ°æ«æè¿ä¸ªnode,é¿å è¿ç§æ åµï¼ 2827 /* 2828 localstorageç¼å䏿å 个è¯çç¼åäºï¼ä½æ¯ä»ç¼åä¸ä½¿ç¨æ¶ï¼æåæ¬è¯å«çè¦ç¿»è¯çæ°æ®ç»ææ£äºï¼å¯¼è´ç¿»è¯ç»ææ²¡æ³èµäºï¼å¯¼è´ç¨æ·å±ç¤ºæ¶æäºå¥å没æåç¿»è¯çé®é¢ -- 2023.8.22 2829 æ¯å¦æè¿ä¸ª nodeï¼å ¶å å®¹ä¸ºï¼ 2830 ä½ æ¯è°ï¼ä½ 好ä¸ç 2831 æ«æå®åï¼è§¦åäºèªå®ä¹æ¯è¯å°ææ¬å岿å¤ä¸ªãæè æªå¯ç¨æ´ä½ç¿»è¯ï¼åºç°åå²åçææ¬æ°ç»ä¸º 2832 ['ä½ æ¯è°','ä½ ','ä¸ç'] 2833 è¿æ¶ï¼ 'ä½ ' è¿ä¸ªååç°ææ¬å°ç¼åï¼è¢«è§¦åç«å³æ¿æ¢ä¸º you ï¼æ¿æ¢å®æåï¼ä¼å¯¼è´å° 'ä½ æ¯è°' ä¹è¢«æ¿æ¢äºï¼node å½åçææ¬åæäº 2834 you æ¯è°ï¼you 好ä¸ç 2835 2836 */ 2837 //console.log('ç»§ç»æ«æ + 1 - '+twoScanNodes.length); 2838 var twoScanIndex = -1; //å½åå ç´ æ¯å¦å¨ twoScan ä¸å·²ç»å å ¥äºï¼å¦æå·²ç»å å ¥äºï¼é£ä¹è¿éèµäºå½åæå¨ç䏿 2839 for(var i = 0; i<twoScanNodes[lang].length; i++){ 2840 if(translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][node_index]['node'].isSameNode(twoScanNodes[lang][i]['node'])){ 2841 //if(translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][node_index]['node'].isSameNode(cacheScanNodes[i]['node'])){ 2842 //妿已ç»å å ¥è¿äºï¼é£ä¹è·³è¿ 2843 twoScanIndex = i; 2844 break; 2845 } 2846 } 2847 var twoScanIndex_cache = -1; //å½åå ç´ æ¯å¦å¨ twoScan ä¸å·²ç»å å ¥äºï¼å¦æå·²ç»å å ¥äºï¼é£ä¹è¿éèµäºå½åæå¨ç䏿 2848 for(var i = 0; i<cacheScanNodes.length; i++){ 2849 //if(translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][node_index]['node'].isSameNode(twoScanNodes[lang][i]['node'])){ 2850 if(translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][node_index]['node'].isSameNode(cacheScanNodes[i]['node'])){ 2851 //妿已ç»å å ¥è¿äºï¼é£ä¹è·³è¿ 2852 twoScanIndex_cache = i; 2853 break; 2854 } 2855 } 2856 2857 if(twoScanIndex == -1){ 2858 //console.log(translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][node_index]['node']); 2859 twoScanIndex = twoScanNodes[lang].length; 2860 twoScanNodes[lang][twoScanIndex] = {}; 2861 twoScanNodes[lang][twoScanIndex]['node'] = translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][node_index]['node']; 2862 twoScanNodes[lang][twoScanIndex]['array'] = []; 2863 } 2864 2865 if(twoScanIndex_cache == -1){ 2866 twoScanIndex_cache = cacheScanNodes.length; 2867 cacheScanNodes[twoScanIndex_cache] = {}; 2868 cacheScanNodes[twoScanIndex_cache]['node'] = translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][node_index]['node']; 2869 cacheScanNodes[twoScanIndex_cache]['array'] = []; 2870 } 2871 2872 //æªå å ¥è¿ï¼é£ä¹å å ¥ 2873 var arrayIndex = twoScanNodes[lang][twoScanIndex]['array'].length; 2874 twoScanNodes[lang][twoScanIndex]['array'][arrayIndex] = translateResultText; 2875 2876 var arrayIndex_cache = cacheScanNodes[twoScanIndex_cache]['array'].length; 2877 cacheScanNodes[twoScanIndex_cache]['array'][arrayIndex_cache] = translateResultText; 2878 2879 } 2880 2881 2882 2883 2884 continue; //è·³åºï¼ä¸ç¨å¨ä¼ å ¥ä¸é¢çç¿»è¯æ¥å£äº 2885 } 2886 2887 /* 2888 //ååºæ°ç» 2889 var queueNodes = this.nodeQueue[lang][hash]; 2890 if(queueNodes.length > 0){ 2891 //å 为å¨è¿ä¸ªæ°ç»ä¸çå¼é½æ¯ä¸æ ·çï¼é£ä¹åªéè¦ååºç¬¬ä¸ä¸ªå°±è¡äº 2892 var valueStr = queueNodes[0].nodeValue; 2893 valueStr = this.util.charReplace(valueStr); 2894 2895 translateTextArray[lang].push(valueStr); 2896 translateHashArray[lang].push(hash); 2897 } 2898 */ 2899 2900 //å å ¥å¾ ç¿»è¯æ°ç» 2901 translateTextArray[lang].push(translateText); 2902 for(var ni = 0; ni<translate.nodeQueue[uuid]['list'][lang][hash].nodes.length; ni++){ 2903 translateTextNodeMap.get(lang).set(translate.nodeQueue[uuid]['list'][lang][hash].nodes[ni].node, 1) 2904 } 2905 translateHashArray[lang].push(hash); //è¿éåå ¥ç便§è¿æ¯ç¨åå§hashï¼æªä½¿ç¨èªå®ä¹æ¯è¯åºåçhashï¼ç®çæ¯ä¸ç ´å
2905 nodeQueue ç key 2906 } 2907 2908 task.execute(); //æ§è¡æ¸²æä»»å¡ 2909 } 2910 2911 translate.time.log('å¯¹æ«æå°çå ç´ è¿è¡æµè§å¨æ¬å°ç¼åå½ä¸-宿¯'); 2912 //console.log(twoScanNodes); 2913 //console.log('cacheScanNodes:'); 2914 //console.log(cacheScanNodes); 2915 //console.log(translateTextArray); 2916 //return; 2917 2918 if(typeof(translate.request.api.translate) != 'string' || translate.request.api.translate == null || translate.request.api.translate.length < 1){ 2919 //ç¨æ·å·²ç»è®¾ç½®äºä¸æç¿»è¯æ¥å£è¿è¡ç¿»è¯ 2920 translate.state = 0; 2921 2922 //çå½å¨æè§¦åäºä»¶ 2923 translate.lifecycle.execute.renderFinish_Trigger(uuid, translate.to); 2924 translate.executeNumber++; 2925 2926 //é©å 2927 translate.lifecycle.execute.finally_Trigger({ 2928 uuid:uuid, 2929 to:translate.to, 2930 state: 16, 2931 triggerNumber: triggerNumber 2932 }); 2933 2934 return; 2935 } 2936 2937 2938 2939 /******* è¿è¡ç¬¬äºæ¬¡æ«æã追å å ¥ç¿»è¯éåãç®çæ¯é²æ¢ç¼åææ£æ«æçå¾ ç¿»è¯ææ¬ ********/ 2940 /* 2941 for(var lang in twoScanNodes){ 2942 if (!twoScanNodes.hasOwnProperty(lang)) { 2943 continue; 2944 } 2945
2946 //è®°å½ç¬¬ä¸æ¬¡æ«æçæ°æ®ï¼ä»¥ä¾¿è·ç¬¬äºæ¬¡æ«æåçè¿è¡å¯¹æ¯ 2947 var firstScan = Object.keys(translate.nodeQueue[uuid]['list'][lang]); 2948 var firstScan_lang_langth = firstScan.length; //ç¬¬ä¸æ¬¡æ«æåçæ°ç»é¿åº¦ 2949 2950 //console.log(twoScanNodes[lang]); 2951 for(var i = 0; i<twoScanNodes[lang].length; i++){ 2952 2953 //æ¾å°è¿ä¸ªnodeå ç´ å½ä¸ç¼ååçç¿»è¯è®°å½ 2954 for(var ci = 0; ci<cacheScanNodes.length; ci++){ 2955 if(twoScanNodes[lang][i].node.isSameNode(cacheScanNodes[ci]['node'])){ 2956 //妿åç°ï¼é£ä¹èµäº 2957 twoScanNodes[lang][i].array = cacheScanNodes[ci].array; 2958 break; 2959 } 2960 } 2961 2962 twoScanNodes[lang][i].array.sort(function(a, b) { return b.length - a.length; }); 2963 //console.log(twoScanNodes[lang][i].array); 2964 2965 var nodeAnaly = translate.element.nodeAnalyse.get(twoScanNodes[lang][i].node); 2966 //console.log(nodeAnaly); 2967 var text = nodeAnaly.text; 2968 //console.log(text.indexOf(twoScanNodes[lang][i].array[0])); 2969 2970 for(var ai = 0; ai < twoScanNodes[lang][i].array.length; ai++){ 2971 if(twoScanNodes[lang][i].array[ai] < 1){ 2972 continue; 2973 } 2974 text = text.replace(new RegExp(translate.util.regExp.pattern(twoScanNodes[lang][i].array[ai]),'g'), translate.util.regExp.resultText('\n')); 2975 } 2976 2977 //console.log(text); 2978 var textArray = text.split('\n'); 2979 //console.log(textArray); 2980 for(var tai = 0; tai < textArray.length; tai++){ 2981 if(textArray[tai] < 1){ 2982 continue; 2983 } 2984 //console.log(textArray[tai]); 2985 //å°æ°å¢ç追å å° translate.nodeQueue ä¸ 2986 translate.addNodeToQueue(uuid, nodeAnaly['node'], textArray[tai]); 2987 } 2988 } 2989 2990
2991 //åç¬¬äºæ¬¡æ«æè¿½å åçæ°æ® 2992 var twoScan = Object.keys(translate.nodeQueue[uuid]['list'][lang]); 2993 var twoScan_lang_langth = twoScan.length; //ç¬¬äºæ¬¡æ«æåçæ°ç»é¿åº¦ 2994 //console.log(firstScan_lang_langth+ '=='+twoScan_lang_langth); 2995 if(firstScan_lang_langth - twoScan_lang_langth == 0){ 2996 //ä¸è´ï¼æ²¡ææ°å¢ï¼é£ä¹ç´æ¥è·³åºï¼å¿½ç¥ 2997 continue; 2998 } 2999 3000 //console.log(translate.nodeQueue[uuid]['list'][lang]); 3001 //console.log(firstScan); 3002 for(var ti=0; ti<twoScan.length; ti++){ 3003 var twoHash = twoScan[ti]; 3004 //console.log(twoHash + '-- '+firstScan.indexOf(twoHash)); 3005 if(firstScan.indexOf(twoHash) == -1){ 3006 //éè¦è¿½å äº 3007 var item = translate.nodeQueue[uuid]['list'][lang][twoHash]; 3008 3009 var cacheHash = item.original == item.translateText ? twoHash:translate.util.hash(item.translateText); //妿å¹é å°äºèªå®ä¹æ¯è¯åºï¼é£ç¿»è¯åçhashæ¯è¢«æ¹åäº 3010 translate.nodeQueue[uuid]['list'][lang][twoHash]['cacheHash'] = cacheHash; //ç¼åçhashã ç¼åæ¶ï¼å ¶hashè·ç¿»è¯çè¯è¨æ¯å®å ¨å¯¹åºçï¼ç¼åçhashå°±æ¯ç¿»è¯çè¯è¨è½¬æ¢æ¥ç 3011 3012 translateTextArray[lang].push(item.translateText); 3013 translateHashArray[lang].push(twoHash); 3014 } 3015 } 3016 3017 } 3018 translate.time.log('对æªå½ä¸æ¬å°ç¼åçå ç´ è¿è¡ç¬¬äºè½®æ«æ-宿¯'); 3019 */
3020 /******* è¿è¡ç¬¬äºæ¬¡æ«æã追å å ¥ç¿»è¯éå -- ç»æ ********/ 3021 3022 3023 //window.translateHashArray = translateHashArray; 3024 3025 //ç»è®¡åºè¦ç¿»è¯åªäºè¯ç§ ï¼è¿éé¢çè¯ç§ä¼è°ç¨æ¥å£è¿è¡ç¿»è¯ãå ¶å æ ¼å¼å¦ english 3026 var fanyiLangs = []; 3027 //console.log(translateTextArray) 3028 for(var lang in translate.nodeQueue[uuid]['list']){ //äºç»´æ°ç»ä¸åè¯è¨ 3029 if (!translate.nodeQueue[uuid]['list'].hasOwnProperty(lang)) { 3030 continue; 3031 } 3032 3033 if(typeof(translateTextArray[lang]) == 'undefined'){ 3034 continue; 3035 } 3036 if(translateTextArray[lang].length < 1){ 3037 continue; 3038 } 3039 3040 //妿å½åè¯ç§å°±æ¯éè¦æ¾ç¤ºçè¯ç§ï¼ä¹å°±æ¯å¦æè¦åæ¢çè¯ç§ï¼ï¼é£ä¹ä¹ä¸ä¼è¿è¡ç¿»è¯ï¼ç´æ¥å¿½ç¥ 3041 if(lang == translate.to){ 3042 continue; 3043 } 3044 fanyiLangs.push(lang); 3045 } 3046 3047 3048 /******* ç¨ä»¥è®°å½å½åæ¯å¦è¿è¡å®ç¬¬ä¸æ¬¡ç¿»è¯äº *******/ 3049 /* 3050 if(!translate.listener.isExecuteFinish){ 3051 translate.temp_executeFinishNumber = 0; //ä¸é¢è¯·æ±æ¥å£æ¸²æï¼ç¿»è¯æ§è¡å®æçæ¬¡æ° 3052 //夿æ¯å¦æ¯æ§è¡å®ä¸æ¬¡äº 3053 translate.temp_executeFinishInterval = setInterval(function(){ 3054 if(translate.temp_executeFinishNumber == fanyiLangs.length){ 3055 translate.listener.isExecuteFinish = true; //è®°å½å½åå·²æ§è¡å®ç¬¬ä¸æ¬¡äº 3056 clearInterval(translate.temp_executeFinishInterval);//忢 3057 console.log('translate.execute() Finish!'); 3058 //console.log(uuid); 3059 3060 } 3061 }, 50); 3062 } 3063 */ 3064 3065 //console.log(translate.nodeQueue[uuid]['list']) 3066 if(fanyiLangs.length == 0){ 3067 //没æéè¦ç¿»è¯çï¼ç´æ¥éåº 3068 3069 //çå½å¨æè§¦åäºä»¶ 3070 translate.lifecycle.execute.renderFinish_Trigger(uuid, translate.to); 3071 3072 translate.state = 0; 3073 translate.executeNumber++; 3074 3075 //é©å 3076 translate.lifecycle.execute.finally_Trigger({ 3077 uuid:uuid, 3078 to:translate.to, 3079 state: 18, 3080 triggerNumber: triggerNumber 3081 }); 3082 3083 return; 3084 } 3085 3086 3087 //ç¶æ 3088 translate.state = 20; 3089 3090 translate.time.log('è°ç¨ç¿»è¯æ¥å£è¿è¡ç¿»è¯ - å¼å§'); 3091 3092 /* 3093 å°ç¿»è¯è¯·æ±çä¿¡æ¯è®°å½å° translate.js æ¬èº«ä¸ 3094 uuid æ¯æ¬¡ translate.execute() 触åçæçuuid 3095 time: 触ååå å ¥å° data ä¸çæ¶é´,13使¶é´æ³ 3096 list: è®°å½å½åuuidä¸åèµ·çç½ç»è¯·æ± 3097 from: ä»ä»ä¹è¯ç§è¿è¡çç¿»è¯ï¼å¦ï¼ chinese_simplified 3098 to: ç¿»è¯ä¸ºä»ä¹è¯ç§ï¼å¦ ï¼ english 3099 nodes: å½åç½ç»è¯·æ±æåªäºnodeèç¹ï¼å¼ä¸º [node1, node2, ...] 3100 texts: å½åç½ç»è¯·æ±æåªäºææ¬è¿è¡ç¿»è¯ï¼å¼ä¸º [text1, text2, ...] 3101 3102 */ 3103 translate.request.data[uuid] = { 3104 time:Date.now(), 3105 list:{} 3106 }; 3107 3108 3109 //è¿è¡ææ¥å£ç¿»è¯ 3110 for(var lang_index in fanyiLangs){ //ä¸ç»´æ°ç»ï¼åè¯è¨ 3111 if (!fanyiLangs.hasOwnProperty(lang_index)) { 3112 continue; 3113 } 3114 var lang = fanyiLangs[lang_index]; 3115 if(typeof(lang) != 'string'){ 3116 continue; 3117 } 3118 3119 if(typeof(translateTextArray[lang]) == 'undefined' || translateTextArray[lang].length < 1){ 3120 translate.log('å¼å¸¸,ç论ä¸ä¸åºè¯¥åå¨, lang:'+lang+', translateTextArray:'); 3121 translate.log(translateTextArray); 3122 translate.log('ä½ æ éæ å¿ï¼è¿ä¸ªåªæ¯ä¸ªæç¤ºï¼å®å¹¶ä¸å½±åä½ ç¿»è¯çæ£å¸¸è¿è¡ï¼åªæ¯ä¸ªå¼å¸¸æç¤ºèå·²ï¼å®ä¼èªå¨å®¹éå¤ççï¼ä¸ä¼å½±åç¿»è¯ç使ç¨ã'); 3123 3124 translate.state = 0; 3125 translate.executeNumber++; 3126 3127 //é©å 3128 translate.lifecycle.execute.finally_Trigger({ 3129 uuid:uuid, 3130 to:translate.to, 3131 state: 21, 3132 triggerNumber: triggerNumber 3133 }); 3134 3135 return; 3136 } 3137 3138 //èªå®ä¹æ¯è¯ 3139 /*var nomenclatureCache = translate.nomenclature.dispose(cache); 3140 for(var ttr_index = 0; ttr_index<translateTextArray[lang].length; ttr_index++){ 3141 console.log(translateTextArray[lang][ttr_index]) 3142 }*/ 3143 3144 //å°éè¦è¯·æ±ç¿»è¯æ¥å£çå å ¥å° translate.translateRequest ä¸ 3145 if(typeof(translate.translateRequest[uuid]) == 'undefined' || translate.translateRequest[uuid] == null){ 3146 translate.translateRequest[uuid] = {}; 3147 } 3148 translate.translateRequest[uuid][lang] = {}; 3149 translate.translateRequest[uuid][lang].executeFinish = 0;
3149 //æ¯å¦æ§è¡å®æ¯ï¼0æ¯æ§è¡ä¸ï¼ 1æ¯æ§è¡å®æ¯ï¼ä¸ç®¡æ¯å¤±è´¥è¿æ¯æåï¼ è䏿§è¡å®æ¯æ¯æajax请æ±è·å¾ååºï¼å¹¶ä¸dom渲æå®æä¹åæç®å®æ¯ãå½ç¶å¦æajaxæ¥å£å¤±è´¥é£ä¹æ¯ç´æ¥ç®å®æ¯ 3150 translate.translateRequest[uuid][lang].addtime = Math.floor(Date.now() / 1000); 3151 3152 3153 //listener 3154 translate.listener.execute.renderStartByApiRun(uuid, lang, translate.to); 3155 3156 //console.log(translateTextArray[lang]); 3157 var translateTextNodes = []; 3158 for (let key of translateTextNodeMap.get(lang).keys()) { 3159 translateTextNodes.push(key); 3160 } 3161 //console.log(translateTextNodes) 3162 translate.lifecycle.execute.translateNetworkBefore_Trigger({ 3163 uuid: uuid, 3164 lang: lang, 3165 to: translate.to, 3166 texts: translateTextArray[lang], 3167 nodes: translateTextNodes 3168 }); 3169 3170 //è®°å ¥è¯·æ±æ¥å¿ 3171 if(typeof(translate.request.data[uuid].list[lang]) === 'undefined'){ 3172 translate.request.data[uuid].list[lang] = {}; 3173 } 3174 translate.request.data[uuid].list[lang][translate.to] = { 3175 texts: translateTextArray[lang], 3176 nodes: translateTextNodes, 3177 }; 3178 3179 3180 /*** ç¿»è¯å¼å§ ***/ 3181 var url = translate.request.api.translate; 3182 var data = { 3183 from:lang, 3184 to:translate.to, 3185 //lowercase:translate.whole.isEnableAll? '0':'1', //é¦åæ¯å¤§å 3186 //text:JSON.stringify(translateTextArray[lang]) 3187 text:encodeURIComponent(JSON.stringify(translateTextArray[lang])) 3188 }; 3189 translate.request.post(url, data, function(responseData, requestData){ 3190 //console.log(data); 3191 //console.log(translateTextArray[data.from]); 3192 3193 //é对 giteeai å¢å äºè´¦æ·ä½é¢ãè´¦æ·æ¯å¦æ¿æ´»çæçå¤å®ï¼æä»¥å¢å äº 401 è¿ä¸ªåæ°ï¼å¡æ¯è´¦æ·å¼å¸¸çï¼åæ°å¼æ¯ 401~499 ä¹é´ãæä»¥åªè¦ä¸æ¯1齿¯å¤±è´¥ 3194 if(responseData.result != 1){ 3195 if(typeof(translate.translateRequest[uuid]) == 'object' && typeof(translate.translateRequest[uuid][requestData.from]) == 'object'){ 3196 translate.translateRequest[uuid][requestData.from]['result'] = 2; 3197 translate.translateRequest[uuid][requestData.from].executeFinish = 1; //1æ¯æ§è¡å®æ¯ 3198 translate.translateRequest[uuid][requestData.from].stoptime = Math.floor(Date.now() / 1000); 3199 }else{ 3200 translate.log('WARINNG!!! translate.translateRequest[uuid][requestData.from] is not object'); 3201 } 3202 3203 //为äºå ¼å®¹ v3.14以åçtranslate.service çæ¬ï¼åäºå¤æ 3204 var from = ''; 3205 if(typeof(requestData.from) != 'undefined' && requestData.from != null){ 3206 from = requestData.from; 3207 } 3208 var to = ''; 3209 if(typeof(requestData.to) != 'undefined' && requestData.to != null){ 3210 to = requestData.to; 3211 }else{ 3212 to = translate.to; 3213 } 3214 translate.waitingExecute.isAllExecuteFinish(uuid, from, to, 0, responseData.info); 3215 3216 3217 translate.log('=======ERROR START======='); 3218 translate.log(translateTextArray[requestData.from]); 3219 //console.log(encodeURIComponent(JSON.stringify(translateTextArray[data.from]))); 3220 translate.log('response : '+responseData.info); 3221 translate.log('=======ERROR END ======='); 3222 //translate.temp_executeFinishNumber++; //è®°å½æ§è¡å®çæ¬¡æ° 3223 return; 3224 } 3225 3226 if(typeof(translate.nodeQueue[uuid]) == 'undefined'){ 3227 translate.log('æç¤ºï¼ä½ å¾å¯è½å¤æ¬¡å¼å ¥äº translate.js æä»¥é æäºç¿»è¯æ¬èº«çæ°æ®éä¹±ï¼è¿åªæ¯ä¸ªæç¤ºï¼å®è¿æ¯ä¼ç»ä½ æ£å¸¸ç¿»è¯çï¼ä½æ¯ä½ æå¥½ä¸è¦éå¤å¼å ¥å¤ªå¤æ¬¡ translate.js ï¼æ£å¸¸æ åµä¸åªéè¦å¼å ¥ä¸æ¬¡ translate.js å°±å¯ä»¥äºã太å¤çè¯å¾å¯è½ä¼å¯¼è´ä½ 页é¢å¡é¡¿'); 3228 return; 3229 } 3230 3231 //console.log('-----å¾ ç¿»è¯3ï¼----'); 3232 //console.log(translate.nodeQueue); 3233 3234 //console.log('response:'+uuid); 3235 let task = new translate.renderTask(); 3236 //éå translateHashArray 3237 for(var i=0; i<translateHashArray[responseData.from].length; i++){ 3238 //ç¿»è¯åçè¯ç§ï¼å¦ english 3239 var lang = responseData.from; 3240 //ç¿»è¯åçå 容 3241 var text = responseData.text[i]; 3242 //妿text为nullï¼é£ä¹è¿ä¸ªå¯è½æ¯ä¸æ¬¡ç¿»è¯åæ°å¤ªå¤ï¼ä¸ºäºä¿ææ°ç»é¿åº¦ï¼æ¼ä¸çnull 3243 if(text == null){ 3244 continue; 3245 } 3246 3247 // v3.0.3 æ·»å ï¼é¿å 忝 JavaScript 被é误翻è¯ä¸º âJavaScriptçâ ï¼ç¶ååºç°äºå¤ä¸ªå¥åä¸é½åºç°äºJavascriptæ¶ï¼ä¼åºç°ç¿»è¯åææ¬éå¤çé®é¢ 3248 // è¿éå°±æ¯éªè¯ä¸ä¸ï¼ç¿»è¯åçææ¬ï¼æ¯å¦ä¼å®å ¨å å«ç¿»ä»¥åçææ¬ï¼å¦æå å«äºï¼é£ä¹å¼ºå¶å°ç¿»è¯åçææ¬èµäºç¿»è¯åçåå§ææ¬ï¼ä¹å°±æ¯ä¸è¢«ç¿»è¯ï¼ 3249 if(text.toLowerCase().indexOf(translateTextArray[responseData.from][i].toLowerCase()) > -1){ 3250 //åç°äºï¼é£ä¹å¼ºå¶èµäºç¿»ä»¥åå 容 3251 text = translateTextArray[responseData.from][i]; 3252 } 3253 3254 3255 //ç¿»è¯åçhash对åºä¸æ 3256 var hash = translateHashArray[responseData.from][i]; 3257 var cacheHash = translate.nodeQueue[uuid]['list'][lang][hash]['cacheHash']; 3258 3259 3260 3261 //ååå§çè¯ï¼è¿æªç»è¿ç¿»è¯çï¼éè¦è¿è¡ç¿»è¯çè¯ 3262 var originalWord = ''; 3263 try{ 3264 originalWord = translate.nodeQueue[uuid]['list'][lang][hash]['original']; 3265 //console.log('bef:'+translate.nodeQueue[uuid]['list'][lang][hash]['beforeText']); 3266 }catch(e){ 3267 translate.log('uuid:'+uuid+', originalWord:'+originalWord+', lang:'+lang+', hash:'+hash+', text:'+text+', queue:'+translate.nodeQueue[uuid]); 3268 translate.log(e); 3269 continue; 3270 } 3271 3272 //for(var index = 0; index < translate.nodeQueue[lang][hash].length; index++){ 3273 for(var node_index = 0; node_index < translate.nodeQueue[uuid]['list'][lang][hash]['nodes'].length; node_index++){ 3274 //translate.nodeQueue[lang][hash]['nodes'][node_index].nodeValue = translate.nodeQueue[lang][hash]['nodes'][node_index].nodeValue.replace(new RegExp(originalWord,'g'), text); 3275 //å å ¥ä»»å¡ 3276 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']); 3277 } 3278 //} 3279 /* 3280 for(var index = 0; index < translate.nodeQueue[data.from][hash].length; index++){ 3281 translate.nodeQueue[data.from][hash][index].nodeValue = text; 3282 } 3283 */ 3284 3285 //å°ç¿»è¯ç»æä»¥ keyï¼hash valueç¿»è¯ç»æçå½¢å¼ç¼å 3286 translate.storage.set('hash_'+responseData.to+'_'+cacheHash,text); 3287 //å¦æç¦»çº¿ç¿»è¯å¯ç¨äºå ¨é¨æåï¼é£ä¹è¿è¦åå ¥ç¦»ç
3287º¿ç¿»è¯æå®åå¨ 3288 if(translate.offline.fullExtract.isUse){ 3289 translate.offline.fullExtract.set(hash, originalWord, responseData.to, text); 3290 } 3291 } 3292 task.execute(); //æ§è¡æ¸²æä»»å¡ 3293 //translate.temp_executeFinishNumber++; //è®°å½æ§è¡å®çæ¬¡æ° 3294 3295 translate.translateRequest[uuid][lang].result = 1; 3296 translate.translateRequest[uuid][lang].executeFinish = 1; //1æ¯æ§è¡å®æ¯ 3297 translate.translateRequest[uuid][lang].stoptime = Math.floor(Date.now() / 1000); 3298 setTimeout(function(){ 3299 translate.waitingExecute.isAllExecuteFinish(uuid, responseData.from, responseData.to, 1, ''); 3300 },5); 3301 }, function(xhr){ 3302 translate.translateRequest[uuid][xhr.data.from].executeFinish = 1; //1æ¯æ§è¡å®æ¯ 3303 translate.translateRequest[uuid][xhr.data.from].stoptime = Math.floor(Date.now() / 1000); 3304 translate.translateRequest[uuid][xhr.data.from].result = 3; 3305 var info = ''; 3306 if(typeof(xhr.status) != 'undefined'){ 3307 if(xhr.status < 1){ 3308 info = 'Network connection failed. url: '+xhr.requestURL; 3309 }else{ 3310 info = 'HTTP response code : '+xhr.status+', url: '+xhr.requestURL; 3311 } 3312 }else{ 3313 info = 'Network connection failed. url: '+xhr.requestURL; 3314 } 3315 translate.waitingExecute.isAllExecuteFinish(uuid, xhr.data.from, translate.to, 0, info); 3316 }); 3317 /*** ç¿»è¯end ***/ 3318 } 3319 3320 //é©å 3321 translate.lifecycle.execute.finally_Trigger({ 3322 uuid:uuid, 3323 to:translate.to, 3324 state: 25, 3325 triggerNumber: triggerNumber 3326 }); 3327 }, 3328 /*translate.execute() end */ 3329 3330 /** 3331 * ç¿»è¯è¯·æ±è®°å½ 3332 * ä¸ç»´ï¼key:uuidï¼ä¹å°±æ¯executeæ¯æ¬¡æ§è¡é½ä¼å建ä¸ä¸ªç¿»è¯éåï¼è¿ä¸ªæ¯ç¿»è¯éåçå¯ä¸æ è¯ã è¿ä¸ªuuidè· nodeQueue çuuidæ¯ä¸æ ·ç 3333 * value:对象 3334 * äºç»´: 对象ï¼å å«ï¼ 3335 * from åæ¾çæ¯è¦ç¿»è¯çæºè¯ç§ï¼æ¯å¦è¦è®²ç®ä½ä¸æç¿»è¯ä¸ºè±æï¼è¿éåæ¾çå°±æ¯ chinese_simplified 3336 * state æ¯å¦æ§è¡å®æ¯ï¼0æ¯æ§è¡ä¸ï¼ 1æ¯æ§è¡å®æ¯ï¼ä¸ç®¡æ¯å¤±è´¥è¿æ¯æåï¼ è䏿§è¡å®æ¯æ¯æajax请æ±è·å¾ååºï¼å¹¶ä¸dom渲æå®æä¹åæç®å®æ¯ãå½ç¶å¦æajaxæ¥å£å¤±è´¥é£ä¹æ¯ç´æ¥ç®å®æ¯ 3337 * addtime è¿æ¡æ°æ®å å ¥å°æ¬æ°ç»çæ¶é´ï¼ä¹å°±æ¯è¿è¡ajax请æ±å¼å§é£ä¸å»çæ¶é´ï¼10使¶é´æ³ 3338 * stoptime æ§è¡å®æ¯çæ¶é´ï¼ä¹å°±æ¯state转为2é£ä¸å»çæ¶é´ 3339 * result æ§è¡ç»æï¼ 0 æ¯è¿æ²¡æ§è¡å®ï¼çå¾ æ§è¡å®ï¼ > 0 æ¯æ§è¡å®äºæç»æäºï¼ 3340 * 1 æ¯æ§è¡æå 3341 * 2 æ¯æ¥å£æååºï¼ä¹æ¯200ååºï¼ä½æ¯æ¥å£ååºçç»æè¿åäºé误ï¼ä¹å°±æ¯è¿åäº {result:0, info:'...'} 3342 * 3 æ¯æ¥å£ä¸æ¯200ååºç 3343 * 3344 */ 3345 translateRequest:{ 3346 /* 3347 uuid:[ 3348 'chinese_simplified':{ 3349 executeFinish:0, 3350 addtime:150001111, 3351 stoptime:150001111, 3352 result:0 3353 }, 3354 ... 3355 ] 3356 */ 3357 }, 3358 3359 //20250908 åºå¼ï¼è¦å é¤è¿ä¸ª 3360 nodeHistory:null, 3361 3362 //å½å页é¢ä¸ï¼ç¿»è¯åæä½ç ï¼dom 䏿æçnodeèç¹ 3363 node:{ 3364 /* 3365 å°å·²æ«æçèç¹è¿è¡è®°å½ï¼è¿éæ¯åªè¦è¿è¡æ«æå°äºï¼ä¹å°±æ¯å¨å å ¥ translate.nodeQueue æ¶å°±ä¹è¦å å ¥å°è¿éã 3366 è¿æ¯ä¸ä¸ªmapï¼ä¸ºäºå ¼å®¹es5ï¼è¿é设置为nullï¼å¨ translate.execute ä¸å¨è¿è¡åå§å 3367 3368 key: node ,è¿è¡ç¿»è¯çææ¬çnodeï¼ å¦ææ¯ div ç title屿§è¿è¡çç¿»è¯ï¼é£è¿ä¸ªnodeæ¯å®ä½å¨ title ä¸çnodeï¼è䏿¯ div è¿ä¸ªä¾éçå ç´ 3369 注æï¼å¦ææ¯å¯¹ inputãtextarea çvalueè¿è¡ç¿»è¯ï¼è valueæ¯éè¿jsèµäºçï¼é£ä¹è¿ä¸ªvalue屿§çå¼å¹¶ä¸æ¯ä¸ä¸ªåç¬çnodeï¼æä»¥æ¯ä¸ºç©ºçï¼æ¤æ¶è¦è®°å½çnodeä¾¿æ¯ inputãtextarea è¿ä¸ªnodeæ¬èº«ã 3370 value: è¿æ¯ä¸ä¸ªå¯¹å 3371 å ¶ä¸ï¼keyçå弿è¿å ç§ï¼ 3372 translate_default_value: 妿å½åç¿»è¯çæ¯å ç´ æ¬èº«ç弿nodeèç¹æ¬èº«çå¼(nodeValue)ï¼é£ä¹è¿éçkeyå°±æ¯åºå®ç translate_default_value 3373 attribute_屿§å: 妿å½åç¿»è¯çæ¯å ç´ çattribute çæä¸ªå±æ§ï¼é£ä¹è¿éå°±æ¯ attribute_屿§åï¼ æ¯å¦ a æ ç¾ç title ï¼é£è¿éä¾¿æ¯ attribute_title 3374 modified: 被æ¹å¨çå¨ä½ï¼æ¯å¦å建ãå¼åçæ¹å¨ï¼é½ä¼è®°å½å°è¿éï¼å®æ²¡æä»ä¹å®é ä½ç¨ï¼ä» ä» åªæ¯ä¸ºäºæ¹ä¾¿å¼åè°è¯ä½¿ç¨ã 3375 è¿æ¯ä¸ä¸ªæ°ç»æ ¼å¼ï¼å ¶å¼å¦ï¼ 3376 [ 3377 'create:translate.faultTolerance.documentCreateTextNode.enable', 3378 'update:translate.execute' 3379 ] 3380 åå»ºä¾¿æ¯ create å¼å¤´ï¼æ°æ®ä¿®æ¹ï¼è¿½å 屿§ã屿§å¼ä¿®æ¹ãå é¤å±æ§çï¼ä¾¿æ¯ update å¼å¤´ï¼åé¢è·ççæ¯æä½å®æ¯å¨åªä¸ªæ¹æ³é 3381 è¶æ©æä½ï¼ä¸æ è¶å°ï¼ä¹å°±æ¯ [0] æ¯æå¼å§å建çï¼ç¶åæ¯æ¬¡ä¿®æ¹é½ä¼pushè¿ä¸ä¸ªæ°æ®è¿å» 3382 3383 lastTranslateRenderTime: è®°å½å½åæ translate.js æè§¦åç¿»è¯ä¹å渲æå°domç颿¾ç¤ºçæ¶é´ï¼13使¶é´æ³ã 3384 æ¯å½è§¦åæ¸²ææ¶è¿éé½ä¼éæ°èµäºä¸æ¬¡ææ°çæ¶é´ï¼è¿éä¹å°±æ¯æå䏿¬¡æ¸²æçæ¶é´ã å¦æè¿æ²¡æ¸²æé£è¿éä¾¿æ¯ undefined æè nullï¼æ»ä¹ typeof 䏿¯ number 3385 å¦å¤è¿ä¸ªæ¶é´æ¯æ¸²æçåä¸å»èµäºçï¼èµäºåç«å³è¿è¡çDOM渲æ 3386 3387 translateResults: array string ææ¬æ°ç»ï¼è¿éæ¯è¢« translate.element.nodeAnalyse.set è¿è¡ç¿»è¯æ¸²æä¹åï¼æ¯æ¬¡é对nodeè¿è¡ä¸æ¬¡æ¸²æï¼å®é½ä¼è®²æ¸²æçææ¬ï¼æ³¨ææ¯ç¿»è¯ä¹åçææ¬ï¼è䏿¯åæï¼è®¾ç½®è¿æ¥ï¼ä¸ç®¡æ¯
3387nodeæ¬èº«è¿æ¯å±æ§è¿æ¯ä»ä¹ï¼é½ä¼ç´æ¥è®²å ¶å ·ä½ç»ææ¿è¿æ¥ã 3388 注æï¼ç¿»è¯å®æ¯è¿è¡æ¸²ææ¶ï¼æ¯å å°è¦æ¾ç¤ºçææ¬ï¼ç¿»è¯åçææ¬ï¼æ¿æ¥èµäºå°è¿éï¼ç¶å卿§è¡ dom渲æï¼è§¦ålistenerï¼ 3389 å½listener卿ç嬿¶ï¼ä¹æ¯æ ¹æ®è¿ä¸ªæ¥å¤å®å½åæ¯å¦æ¯æ translate.js æ¬èº«å¯¼è´çnodeåçäºæ¹å 3390 { 3391 ä½ å¥½ï¼ä¸ç:1 3392 ä½ æ¯è°:1 3393 } 3394 å®ä½¿ç¨æ¯ typeof(translate.node.get(node).translateResults['ä½ å¥½ä¸ç']) === 'number' è¿æ ·ä½¿ç¨ï¼è³äºåé¢çvalue为1é£çº¯å±æ¯åçï¼æ²¡ä»»ä½æä¹ 3395 3396 3397 attribute è¿ä¸ªç¿»è¯çnode对象æ¯å¦æ¯ç¿»è¯çå ¶ä¸çæä¸ªattribute屿§ï¼å¦ææ¯ï¼é£ä¹è¿é便æ¯é¿åº¦å¤§äº0ï¼ å¦ææ¯å ç´ æèç¹æ¬èº«(nodeValue)ï¼é£ä¹è¿éå°±æ¯ç©ºåç¬¦ä¸²ï¼æ³¨æï¼æ¯ç©ºå符串 '' 3398 å¦å¤è¿ä¸ªå段ï¼å½ååºè¯¥ä» ä» åªæ¯é对 inputãtextarea ç value 屿§æç¨ï¼ä¹å°±æ¯å®çå¼è¦ä¹æ¯ç©ºå符串ï¼è¦ä¹æ¯ 'value'ï¼ å ä¸ºåæ¯ input value ç屿§æ¯ä¸å±äºdomçï¼å¿ é¡» input.value è¿æ ·æè½ç¹åºæ¥ 3399 3400 resultText: string ç¿»è¯å®æåï¼å½ånodeèç¹çå å®¹ææ¬ï¼æ³¨æï¼æ¯nodeèç¹æ´ä½ææçå å®¹ææ¬ï¼æ¯å·²ç»ç¿»è¯æ¸²æè¿çï¼ 3401 注æï¼ç¿»è¯å¤±è´¥æè æ¬èº«æ¯ç¹æ®å符æ¯å¦æ°åï¼ä¸éè¦è¢«ç¿»è¯ï¼æ¯æ²¡æè¿ä¸ªå±æ§ç 3402 originalText: string ç¿»è¯åæ¾ç¤ºçææ¬ï¼æ¯nodeèç¹ææçå å®¹ææ¬ï¼åå§çææ¬ï¼ï¼å½åè¿éä» ä» åªå¯¹å ç´ æ´ä½ç¿»è¯æ¶æä¼è®°å½è¿ä¸ª - v3.18.14.20250903 å¢å ï¼ 3403 3404 translateTexts: array string ææ¬æ°ç»ï¼è¿éæ¯è¢«ææ¬ç¿»è¯æ¥å£æç¿»è¯çææ¬ã 3405 æ¯å¦å ¶ä¸æé¡¹ä¸º 'ä½ å¥½':'hello' ï¼å ¶ä¸keyæ¯ç¿»è¯åçï¼ valueæ¯ç¿»è¯åçç»æï¼ å¦æ value 为 nullï¼åä»£è¡¨è¿æªè¿è¡ç¿»è¯æ¿å°ç¿»è¯ç»æ 3406 3407 whole: boolean å½åæ¯å¦æ¯æ´ä½è¿è¡ç¿»è¯çï¼æ¯å¦å½åå³ä½¿æ¯è®¾ç½®çæ´ä½ç¿»è¯ï¼ä½æ¯è¿ä¸ªnodeå½ä¸äºèªå®ä¹æ¯è¯ï¼è¢«æ¯è¯åå²äºï¼é£å½åç¿»è¯ä¹ä¸æ¯æ´ä½ç¿»è¯çã 3408 è¿ä¸ªå±æ§å¨æ«æå®èç¹ï¼è¿è¡è¯·æ±ç¿»è¯æ¥å£æå½ä¸æ¬å°ç¼åä¹åï¼å°±è¦è¢«è®¾ç½®ã 3409 true:æ¯èç¹å 容æ´ä½ç¿»è¯ 3410 3411 */ 3412 data: null, 3413 /* 3414 ä» translate.node.data ä¸ï¼æ ¹æ®keyï¼è¿è¡è·å translate.node.data.get(node) 3415 */ 3416 get:function(node){ 3417 return translate.node.data.get(node); 3418 }, 3419 //夿æä¸ªnode (key) æ¯å¦å¨ translate.node.data 䏿¯å¦åå¨ï¼å¦æåå¨è¿åtrue 3420 find:function(node){ 3421 return translate.node.get(node) != null; 3422 }, 3423 set:function(node, value){ 3424 translate.node.data.set(node,value); 3425 }, 3426 /* 3427 å translate.node çå ç´ ä¸ï¼è¿½å 屿§ modified çæ°ç»å 容 3428 */ 3429 setModified:function(node, text){ 3430 if(typeof(translate.node.data.get(node)) === 'undefined' || translate.node.data.get(node) === null){ 3431 translate.log('translate.node.setModified exception: node not find in translate.node, node:'); 3432 translate.log(node); 3433 return; 3434 } 3435 3436 if(typeof(translate.node.data.get(node).modified) === 'undefined'){ 3437 translate.node.data.get(node).modified = []; 3438 } 3439 translate.node.data.get(node).modified.push(text); 3440 }, 3441 //ä» translate.node.data ä¸ å é¤ key æ¯ node ç 3442 delete: function(node){ 3443 //console.log('delete node -- > '+node.nodeValue); 3444 translate.node.data.delete(node); 3445 }, 3446 /* 3447 è·å translate.node.get(node)[attribute] è¿éç attribute 3448 3449 attribute ä¼ å ¥çå¯ä»¥æ¯ undefinedãnullã'' ã 以åå ·ä½çå符串 3450 3451 è¿åçæ¯ä¸ä¸ªå¯¹è±¡ï¼ 3452 { 3453 key: translate.node ä¸ translate.node.get(node)[attribute] æä½¿ç¨ç attribute çå符串ï¼å¦ attribute_title ãtranslate_default_value 3454 attribute: è¿éæ¯attributeå ·ä½çå å®¹ï¼æ¯å¦ key æ¯ attribute_title é£ä¹è¿éå°±æ¯ title , key æ¯ translate_default_value è¿éå°±æ¯ '' 空å符串 3455 } 3456 3457 getAttribute:function(attribute){ 3458 var history_attribute; 3459 if(typeof(attribute) != 'undefined' && attribute.length > 0){ 3460 //æ¯å¯¹ attribute è¿è¡çæä½ 3461 history_attribute = 'attribute_'+attribute 3462 }else{ 3463 //æ¯å¯¹èç¹æ¬èº«è¿è¡çæä½ï¼æä½çæ¯ nodeValue 3464 attribute = ''; 3465 history_attribute = 'translate_default_value'; 3466 } 3467 return { 3468 key:history_attribute, 3469 attribute:attribute 3470 } 3471 }, 3472 */ 3473 /* 3474 å·æ° translate.node.data ä¸çæ°æ®ï¼åé¤è¿æ¶çï¼nodeå·²ç»ä¸åå¨äºdomçï¼ 3475 */ 3476 refresh: function(){ 3477 3478 // æ¶éè¦å é¤çæ æèç¹ 3479 const deleteKeys = new Array(); 3480 3481 for (let key of translate.node.data.keys()) { 3482 // æ£æ¥èç¹æ¯å¦è¿å¨DOMä¸ 3483 let isValidNode = false; 3484 3485 if (key.nodeType === Node.ELEMENT_NODE) { 3486 // å ç´ èç¹ 3487 isValidNode = key.isConnected; 3488 } else if (key.nodeType === Node.ATTRIBUTE_NODE) { 3489 // 屿§èç¹ï¼å¦placeholderï¼
3490 isValidNode = key.ownerElement && key.ownerElement.isConnected; 3491 } else if (key.nodeType === Node.TEXT_NODE) { 3492 // ææ¬èç¹ 3493 isValidNode = key.isConnected; 3494 } 3495 3496 if (!isValidNode) { 3497 //console.log('èç¹å·²ç»ä¸åå¨ï¼åé¤èç¹'); 3498 deleteKeys.push(key); 3499 } 3500 3501 // å¤çææèç¹... 3502 //if(!key.isConnected){ text node 没æ isConnected 3503 // console.log(key.nodeValue+' è¿ä¸ªtranslate.node ä¸ç nodeä¸åå¨,忽ç¥'); 3504 // continue; 3505 //} 3506 } 3507 3508 // ç»ä¸å 餿 æèç¹ 3509 for (var i = 0; i < deleteKeys.length; i++) { 3510 translate.node.delete(deleteKeys[i]); 3511 } 3512 3513 } 3514 }, 3515 3516 element:{ 3517 3518 /* 3519 注æï¼éé¢å ¨é¨çå¿ é¡»å°åã 3520 第ä¸ä¸ªæ¯tagï¼ç¬¬äºä¸ªæ¯tagç屿§ãæ¯å¦è¦ç¿»è¯ input ç value 屿§ï¼é£ä¹å¦ä¸ï¼ 3521 translate.element.tagAttribute['input']=['value']; 3522 æ¯å¦è¦ç¿»è¯ input ç value ã data-value è¿ä¸¤ä¸ªå±æ§ï¼é£ä¹å¦ä¸ï¼ 3523 translate.element.tagAttribute['input']=['value','data-value']; 3524 æå 个è¦ç¿»è¯ç屿§ï¼å°±åä¸å 个ã 3525 åæ ·ï¼æå 个è¦é¢å¤ç¿»è¯çtagï¼å°±å ä¸å è¡ã 3526 è¯¦ç»ææ¡£åèï¼ http://translate.zvo.cn/231504.html 3527 3528 3529 //é对å®å¾·æ¶ä»£æåºçéæ±ï¼éè¦å¯¹ æ ç¾æ¬èº«è¿è¡ä¸ä¸ªå¤å®ï¼æ¯å¦ç¬¦åæ¡ä»¶ç¬¦åæ¡ä»¶æä¼ç¿»è¯ï¼ä¸ç¬¦åæ¡ä»¶åä¸è¦è¿è¡ç¿»è¯ 3530 //æ¯å¦æ ç¾å¸¦æ disabled çæä¼è¢«ç¿»è¯ï¼æä»¥è¦å¢å ä¸ä¸ªèªå®ä¹å ¥åç function ï¼è¿å trueãfalse 3531 translate.element.tagAttribute['input']={ 3532 //è¦è¢«ç¿»è¯çtagç屿§ï¼è¿éæ¯è¦ç¿»è¯ input ç value ã data-value è¿ä¸¤ä¸ªå±æ§ã 3533 //æ°ç»æ ¼å¼ï¼å¯ä»¥ä¸ä¸ªæå¤ä¸ªå±æ§ 3534 attribute:['value','data-value'], 3535 //æ¡ä»¶ï¼ä¼ å ¥ä¸ä¸ªfunctionï¼è¿åä¸ä¸ªå¸å°å¼ã 3536 //åªæå½è¿åçå¸å°å¼æ¯trueæ¶ï¼æä¼å¯¹ä¸é¢è®¾ç½®ç attribute è¿è¡ç¿»è¯ï¼å¦åå¹¶ä¸ä¼å¯¹å½åè®¾å®æ ç¾ç attribute è¿è¡ä»»ä½ç¿»è¯æä½ã 3537 condition:function(element){ 3538 // element 便æ¯å½åçå ç´ ï¼ 3539 // æ¯å¦è¿éæ¯ translate.element.tagAttribute['input'] é£è¿ä¸ª element åæ°ä¾¿æ¯æ«æå°çå ·ä½ç input å ç´ 3540 // å¯ä»¥é对 element è¿ä¸ªå½åå ç´ æ¬èº«æ¥è¿è¡å¤å®ï¼æ¥å³å®æ¯å¦è¿è¡ç¿»è¯ã 3541 // è¿å弿¯å¸å°å¼ trueãfalse 3542 // return true; //è¦å¯¹ attributeä¸è®¾ç½®ç ['value','data-value'] è¿ä¸¤ä¸ªinput ç屿§çå¼è¿è¡ç¿»è¯ã 3543 // 妿ä¸è®¾ç½®æä¼ å ¥ condition ï¼æ¯å¦åçº¯è¿æ ·è®¾ç½®ï¼ 3544 // translate.element.tagAttribute['input']={ 3545 // attribute:['value','data-value'] 3546 // } 3547 // é£ä¹è¿éé»è®¤å°±æ¯ return true; 3548 // return false; //ä¸å¯¹ attributeä¸è®¾ç½®ç ['value','data-value'] è¿ä¸¤ä¸ªinput ç屿§çå¼è¿è¡ä»»ä½æä½ 3549 return true; 3550 } 3551 }; 3552 3553 */ 3554 tagAttribute : {}, 3555 3556 //对翻è¯ååçnodeå ç´ çåæï¼ç¿»ä»¥åï¼å渲æï¼ç¿»è¯åï¼ 3557 nodeAnalyse:{ 3558 /* 3559 è·ånodeä¸çè¦è¿è¡ç¿»è¯çææ¬å 容ã以åè¦æä½çå®é node对象ï¼è¿ä¸ªnode对象å¾å¯è½æ¯ä¼ å ¥çnodeä¸çæä¸ªånodeï¼ 3560 node 3561 attribute è¦è·åçæ¯æä¸ªå±æ§çå¼ï¼è¿æ¯nodeæ¬èº«çå¼ãæ¯å¦ aæ ç¾çtitle屿§çå¼ï¼åä¼ å ¥ titleã 妿æ¯ç´æ¥è·ånode.nodeValue ï¼é£è¿ä¸ªæ²¡æ 3562 3563 è¿åç»ææ¯ä¸ä¸ªæ°ç»ãå ¶ä¸ï¼ 3564 ['text']:è¦è¿è¡ç¿»è¯çtextå å®¹ææ¬ 3565 ['node']:è¦è¿è¡ç¿»è¯çç®æ node 3566 3567 */ 3568 get:function(node, attribute){ 3569 return translate.element.nodeAnalyse.analyse(node,'','', attribute); 3570 }, 3571 /* 3572 åä¸ï¼åªä¸è¿è¿ä¸ªæ¯æ«æ element/node ä¸çææå¯ç¿»è¯çåèç¹ï¼ä¸å±èç¹ï¼ï¼è¿åæ°ç»å½¢æã 3573 è¿éé¢çæ°ç»ï¼å·²ç»ç»è¿å¤æï¼ text å¿ ç¶æ¯æä¸ä¸ºç©ºçå¼çã 3574 æä»¥å®çè¿åå¼ï¼æå¯è½æ¯ä¸ä¸ªç©ºçæ°ç» 3575 3576 [ 3577 { 3578 node: å½åæ«æåºçnode ï¼ä¼ å ¥çnodeãæä¸å±nodeï¼ 3579 attribute: æ¯å¦æ¯ä¸å±å±æ§ï¼æ¯å¦ altãplaceholder , 妿æ¯ä¼ å ¥çnodeæ¬èº«ï¼ä¸æ¯ä»»ä½ä¸å±å±æ§ï¼åè¿éæ¯ç©ºç½å符串 '' 3580 text: å¯è¿è¡ç¿»è¯çææ¬ï¼ä¹å°±æ¯å½åæ°ç»ä¸ node çå¼çææ¬ 3581 }, 3582 ... 3583 ] 3584 */ 3585 gets:function(node){ 3586 var resultArray = []; 3587 3588 var nodename = translate.element.getNodeName(node).toUpperCase(); 3589 switch (nodename) {
3590 case 'META': //metaæ ç¾ï¼å¦æ¯å ³é®è¯ãæè¿°ç 3591 var nodeAttributeName = node.name.toLowerCase(); //åmeta æ ç¾çname 屿§ 3592 var nodeAttributePropertyOri = node.getAttribute('property'); //å propertyçå¼ 3593 var nodeAttributeProperty = ''; 3594 if(typeof(nodeAttributePropertyOri) === 'string' && nodeAttributePropertyOri.length > 0){ 3595 nodeAttributeProperty = nodeAttributePropertyOri.toLowerCase(); 3596 } 3597 3598 if(nodeAttributeName == 'keywords' || nodeAttributeName == 'description' || nodeAttributeName == 'sharetitle' || nodeAttributeProperty == 'og:title' || nodeAttributeProperty == 'og:description' || nodeAttributeProperty == 'og:site_name' || nodeAttributeProperty == 'og:novel:latest_chapter_name'){ 3599 if(typeof(node.content) === 'string' && node.content.trim().length > 0){ 3600 resultArray.push({ 3601 text: node.content, 3602 attribute: 'content', 3603 node: node.getAttributeNode('content') 3604 }); 3605 } 3606 } 3607 break; 3608 case 'IMG': 3609 if(typeof(node.alt) === 'string' && node.alt.trim().length > 0){ 3610 resultArray.push({ 3611 text: node.alt, 3612 attribute: 'alt', 3613 node: node.getAttributeNode('alt') 3614 }); 3615 } 3616 break; 3617 case 'INPUT': 3618 /* 3619 inputï¼è¦å¯¹ä»¥ä¸æ åµè¿è¡ç¿»è¯ 3620 placeholder 3621 type=buttonãsubmit çæ åµä¸ç value 3622 */ 3623 3624 //é对 type=buttonãsubmit çæ åµä¸ç value 3625 if(typeof(node.attributes.type) !== 'undefined' && node.attributes.type !== null && typeof(node.attributes.type.nodeValue) === 'string' && (node.attributes.type.nodeValue.toLowerCase() == 'button' || node.attributes.type.nodeValue.toLowerCase() == 'submit')){ 3626 //åå®çvalue 3627 var input_value_node = node.attributes.value; 3628 if(typeof(input_value_node) !== 'undefined' && input_value_node !== null && typeof(input_value_node.nodeValue) === 'string' && input_value_node.nodeValue.trim().length > 0){ 3629 resultArray.push({ 3630 text: input_value_node.nodeValue, 3631 attribute: 'value', 3632 node: input_value_node 3633 }); 3634 } 3635 } 3636 3637 //é对 placeholder 3638 if(typeof(node.attributes['placeholder']) !== 'undefined' && typeof(node.attributes['placeholder'].nodeValue) === 'string' && node.attributes['placeholder'].nodeValue.trim().length > 0){ 3639 resultArray.push({ 3640 text: node.attributes['placeholder'].nodeValue, 3641 attribute: 'placeholder', 3642 node: node.attributes['placeholder'] 3643 }); 3644 } 3645 break; 3646 case 'TEXTAREA': 3647 //é对 placeholder 3648 if(typeof(node.attributes['placeholder']) !== 'undefined' && typeof(node.attributes['placeholder'].nodeValue) === 'string' && node.attributes['placeholder'].nodeValue.trim().length > 0){ 3649 resultArray.push({ 3650 text: node.attributes['placeholder'].nodeValue, 3651 attribute: 'placeholder', 3652 node: node.attributes['placeholder'] 3653 }); 3654 } 3655 break; 3656 } 3657 3658 //夿æ¯å¦æ¯ translate.element.tagAttribute èªå®ä¹ç¿»è¯å±æ§ç 3659 var divTagAttribute = translate.element.tagAttribute[nodename.toLowerCase()]; 3660 if(typeof(divTagAttribute) !== 'undefined'){ 3661 //æè¿ä¸ªæ ç¾çèªå®ä¹ç¿»è¯æä¸ªå±æ§ 3662 for(var ai = 0; ai<node.attributes.length; ai++){ 3663 var arrtibuteNodeName = translate.element.getNodeName(node.attributes[ai]).toLowerCase(); 3664 if(divTagAttribute.attribute.indexOf(arrtibuteNodeName) > -1 && divTagAttribute.condition(node)){ 3665 //å å«è¿ä¸ªå±æ§ï¼ä¸èªå®ä¹å¤ææ¡ä»¶æ»¡è¶³ï¼å è®¸ç¿»è¯ 3666 //å¤å®ä¸ä¸æ¯å¦å·²ç»å å ¥è¿äºï¼å¦ææ²¡æå å ¥è¿ï¼æä¼å å ¥ãè¿éä¸»è¦æ¯é对input æ ç¾è¿è¡å¤æï¼æ¯å¦ input type="submit" çï¼valueå¼å¦æä¹è¢«ç¨æ·èªå®ä¹ç¿»è¯ï¼é£ä¸é¢çvalue就已ç»å ä¸äºï¼ä¸éè¦å¨å äº 3667 var isAlreadyAdd = false; //trueå·²ç»å å ¥è¿äº 3668 for(var ri = 0; ri < resultArray.length; ri++){ 3669 if(resultArray[ri].node === node.attributes[ai]){ 3670 //ç¸åï¼åä¸å¨å å ¥äº 3671 isAlreadyAdd = true; 3672 } 3673 } 3674 if(!isAlreadyAdd){ 3675 resultArray.push({ 3676 text: node.attributes[ai].nodeValue, 3677 attribute: arrtibuteNodeName, 3678 node: node.attributes[ai] 3679 });
3680 } 3681 } 3682 } 3683 }else{ 3684 //æ¡ä»¶ä¸æ»¡è¶³ï¼ä¸å¨ç¿»è¯ç屿§èå´ 3685 } 3686 3687 3688 //ææå ç´ é½è¦å¤å®ç屿§ - title 屿§ 3689 if(typeof(node['title']) === 'string' && node['title'].trim().length > 0){ 3690 var titleNode = node.getAttributeNode('title'); 3691 resultArray.push({ 3692 text: titleNode.nodeValue, 3693 attribute: 'title', 3694 node: titleNode 3695 }); 3696 } 3697 3698 3699 //æåå¤å® node æ¬èº« 3700 if(typeof(node.nodeValue) === 'string' && node.nodeValue.trim().length > 0){ 3701 //è¿åä¼ å ¥çnodeæ¬èº« 3702 resultArray.push({ 3703 text: node.nodeValue, 3704 attribute: '', 3705 node: node 3706 }); 3707 } 3708 3709 3710 return resultArray; 3711 }, 3712 /* 3713 è¿è¡ç¿»è¯ä¹åçæ¸²ææ¾ç¤º 3714 注æï¼å®ä¼å¯¹nodeæ¬èº«è¿è¡æ«æçï¼éè¦è¿è¡éè¿ææ¬ç¿»è¯æ¥å£è¿è¡ç¿»è¯çææ¬è¿è¡è¯å«ï¼æ¯å¦ è¿ä¸ª node å ¶å å®¹ä¸ºï¼ 3715 ä½ æ¯è°ï¼ä½ 好ä¸ç 3716 æ«æå®åï¼è§¦åäºèªå®ä¹æ¯è¯å°ææ¬å岿å¤ä¸ªãæè æªå¯ç¨æ´ä½ç¿»è¯ï¼åºç°åå²åçææ¬æ°ç»ä¸º 3717 ['ä½ æ¯è°','ä½ ','ä¸ç'] 3718 é£å¦æå½ä¸ç¼å 'ä½ ' åï¼è¿è¡æ¿æ¢æ¶ï¼å°±ä¸è½å° 'ä½ æ¯è°' ç»æ¿æ¢äºï¼ä¸ç¶ä¼é æå符串æ éæåï¼ç´æ¥çº¯åè¯ç¿»è¯ï¼æ²¡æä»ä¹è¯ä¹äºãå¦å¤è¿æ ·ä¹ä¼å¯¼è´æ¼ç¿»è¯çæ åµã ç»è¿è¿æ¬¡è°æ´ï¼å° translate.execute() äºæ¬¡æ«æ
3718ç´æ¥ç»ä¼åæäºï¼æé«äºè¯ä¹é顺ãèªå®ä¹æ¯è¯çç²¾å 3719 è¿ä¸ªåå¼ï¼æ¯ä» translate.node.get(node).translateTexts ä¸åè¿ä¸ªè¦è¿è¡ææ¬ç¿»è¯çæ°ç»çã 3720 å½ç¶ï¼å¦æ translate.node.get(node).whole 为 trueï¼æ¬èº«å°±æ¯æ´ä½ç¿»è¯ï¼é£å°±æ²¡è¿äºç ´äºï¼ç´æ¥æ¿æ¢å°±å¥½äº 3721 3722 3723 åæ°ï¼ 3724 node å½åç¿»è¯çnodeå ç´ 3725 注æï¼å¦ææ¯å¯¹ inputãtextarea çvalueè¿è¡ç¿»è¯ï¼è valueæ¯éè¿jsèµäºçï¼é£ä¹è¿ä¸ªvalue屿§çå¼å¹¶ä¸æ¯ä¸ä¸ªåç¬çnodeï¼æä»¥æ¯ä¸ºç©ºçï¼æ¤æ¶è¦è®°å½çnodeä¾¿æ¯ inputãtextarea è¿ä¸ªnodeæ¬èº«ã 3726 originalText ç¿»è¯ä¹åçå å®¹ææ¬ 3727 resultText ç¿»è¯ä¹åçå å®¹ææ¬ 3728 attribute åæ¾è¦æ¿æ¢ç屿§ï¼æ¯å¦ aæ ç¾çtitle屿§ã 妿æ¯ç´æ¥æ¿æ¢node.nodeValue ï¼é£è¿ä¸ªæ²¡æ 3729 è¿åç»ææ¯ä¸ä¸ªæ°ç»ï¼å ¶ä¸ï¼ 3730 resultText: ç¿»è¯å®æä¹åçtextå å®¹ææ¬ï¼æ³¨æï¼å¦æè¿åçæ¯ç©ºå符串ï¼é£ä¹åæ¯ç¿»è¯ç»æè¿è¡æ¿æ¢æ¶ï¼å¹¶æ²¡ææåæ¿æ¢ï¼åºè¯¥æ¯ç¿»è¯çè¿ç¨ä¸ï¼è¿ä¸ªnodeçå¼è¢«å ¶ä»jsåèµäºå ¶ä»å 容äºã 3731 node: è¿è¡ç¿»è¯çç®æ node 3732 3733 注æï¼ä½¿ç¨æ¬setæ¹æ³ï¼ä¸è¦ç¨ è¿åç textåæ°ï¼è¦ç¨ resultText è¿ä¸ªåæ°ï¼è¿ä¸ªææ¯ç¿»è¯ä¹åçææ¬ 3734 */ 3735 set:function(node, originalText, resultText, attribute){ 3736 return translate.element.nodeAnalyse.analyse(node,originalText,resultText, attribute); 3737 }, 3738 /* 3739 3740 注æï¼è¿ä¸ªä¸ä½¿ç¨ï¼åªæ¯æå¡äºä¸é¢çgetãset使ç¨ãå ·ä½ä½¿ç¨ç¨ä¸é¢çgetãset 3741 3742 1. åªä¼ å ¥ nodeï¼ 3743 è·ånodeä¸çè¦è¿è¡ç¿»è¯çææ¬å 容ã以åè¦æä½çå®é node对象ï¼è¿ä¸ªnode对象å¾å¯è½æ¯ä¼ å ¥çnodeä¸çæä¸ªånodeï¼ 3744 è¿åç»ææ¯ä¸ä¸ªæ°ç»ãå ¶ä¸ï¼ 3745 ['text']:è¦è¿è¡ç¿»è¯çtextå å®¹ææ¬ 3746 ['node']:è¦è¿è¡ç¿»è¯çç®æ node 3747 注æï¼å¦ææ¯å¯¹ inputãtextarea çvalueè¿è¡ç¿»è¯ï¼è valueæ¯éè¿jsèµäºçï¼é£ä¹è¿ä¸ªvalue屿§çå¼å¹¶ä¸æ¯ä¸ä¸ªåç¬çnodeï¼æä»¥æ¯ä¸ºç©ºçï¼æ¤æ¶è¦è®°å½çnodeä¾¿æ¯ inputãtextarea è¿ä¸ªnodeæ¬èº«ã 3748 2. ä¼ å ¥ nodeãoriginalTextã resultText 3749 忝è¿è¡ç¿»è¯ä¹åçæ¸²ææ¾ç¤º 3750 3751 attribute : è¿è¡æ¿æ¢æ¸²ææ¶ä½¿ç¨ï¼åæ¾è¦æ¿æ¢ç屿§ï¼æ¯å¦ aæ ç¾çtitle屿§ã 妿æ¯ç´æ¥æ¿æ¢node.nodeValue ï¼é£è¿ä¸ªæ²¡æ 3752 3753 è¿åç»ææ¯ä¸ä¸ªæ°ç»ï¼å ¶ä¸ï¼ 3754 resultText: ç¿»è¯å®æä¹åçtextå å®¹ææ¬ã å½ä½¿ç¨ translate.element.nodeAnalyse.set æ¶æä¼æè¿ä¸ªåæ°è¿åã æ³¨æï¼å¦æè¿åçæ¯ç©ºå符串ï¼é£ä¹åæ¯ç¿»è¯ç»æè¿è¡æ¿æ¢æ¶ï¼å¹¶æ²¡ææåæ¿æ¢ï¼åºè¯¥æ¯ç¿»è¯çè¿ç¨ä¸ï¼è¿ä¸ªnodeçå¼è¢«å ¶ä»jsåèµäºå ¶ä»å 容äºã 3755 text : è¦è¿è¡ç¿»è¯çtextå å®¹ææ¬ï¼å½ä½¿ç¨ translate.element.nodeAnalyse.get æ¶æä¼æè¿ä¸ªåæ°çè¿å 3756 node: è¦è¿è¡ç¿»è¯çç®æ node 3757 注æï¼å¦ææ¯å¯¹ inputãtextarea çvalueè¿è¡ç¿»è¯ï¼è valueæ¯éè¿jsèµäºçï¼é£ä¹è¿ä¸ªvalue屿§çå¼å¹¶ä¸æ¯ä¸ä¸ªåç¬çnodeï¼æä»¥æ¯ä¸ºç©ºçï¼æ¤æ¶è¦è®°å½çnodeä¾¿æ¯ inputãtextarea è¿ä¸ªnodeæ¬èº«ã 3758 */ 3759 analyse:function(node, originalText, resultText, attribute){ 3760 var result = new Array(); //è¿åçç»æ 3761 result['node'] = node; 3762 result['text'] = ''; 3763 3764 var nodename = translate.element.getNodeName(node); 3765 //console.log('nodeAnalyse.analyse: NodeName:'+nodename+', originalText:'+originalText+', resultText:'+resultText+', attribute:'+attribute+', node:'); 3766 //console.log(node) 3767 3768 if(attribute != null && typeof(attribute) == 'string' && attribute.length > 0){ 3769 //è¿ä¸ªnodeæå±æ§ï¼æ¿æ¢çæ¯nodeç屿§ï¼è䏿¯nodeValue 3770 3771 var nodeAttributeValue; //è¿ä¸ª attribute 屿§çå¼ 3772 if((nodename === 'INPUT' || nodename === 'TEXTAREA') && attribute.toLowerCase() == 'value'){ 3773 //妿æ¯input\textarea çvalue屿§ï¼é£ä¹è¦ç´æ¥è·åï¼èééè¿ attribute ï¼ä¸ç¶ç¨æ·èªå·±è¾å ¥çéè¿ attribute æ¯è·åä¸å°ç -- catl èµµé³ æåº 3774 3775 nodeAttributeValue = node.value; 3776 }else{ 3777 nodeAttributeValue = node[attribute]; 3778 } 3779 result['text'] = nodeAttributeValue; 3780 3781 3782 //æ¿æ¢æ¸²æ 3783 if(typeof(originalText) != 'undefined' && originalText.length > 0){ 3784 if(typeof(nodeAttributeValue) != 'undefined'){ 3785 //è¿ç§æ¯ä¸»æµæ¡æ¶ï¼åæ¯vueãelementãreact 齿¯ç¨è¿ç§ DOM Property çæ¹å¼ï¼æ´å¿« 3786 var resultShowText = translate.util.textReplace(nodeAttributeValue, originalText, resultText, translate.to); 3787 translate.element.nodeAnalyse.analyseReplaceBefore_DateToTranslateNode(node, attribute, resultShowText); 3788
3789 if((nodename === 'INPUT' || nodename === 'TEXTAREA') && attribute.toLowerCase() == 'value'){ 3790 //input çvalue 对äºç¨æ·è¾å ¥çå¿ é¡»ç¨ .value æä½ 3791 node.value = resultShowText; 3792 }else{ 3793 node[attribute] = resultShowText; //2025.4.26 åæ´ä¸ºæ¤æ¹å¼ 3794 } 3795 if(resultShowText.indexOf(resultText) > -1){ 3796 result['resultText'] = resultShowText; 3797 }else{ 3798 result['resultText'] = ''; 3799 } 3800 } 3801 3802 /* 20250911 å é¤ 3803 //è¿ç§ Html Attribute æ¹å¼ æ¯ v3.12 çæ¬ä¹åä¸ç´ä½¿ç¨çæ¹å¼ï¼é度ä¸è¦æ ¢äº ä¸é¢çï¼ä¸ºäºååå ¼å®¹ä¸è³äºå级åºé®é¢ï¼åé¢å¯è½ä¼ä¼åæ 3804 if(node.nodeType === 1){ //æ¯ element èç¹ 3805 var htmlAttributeValue = node.getAttribute(attribute); 3806 if(htmlAttributeValue != null && typeof(htmlAttributeValue) != 'undefined'){ 3807 var resultShowText = translate.util.textReplace(htmlAttributeValue, originalText, resultText, translate.to); 3808 //è¿ä¸ªææ¯å¨v3.9.2 åè¦ç¨çï¼ä¸é¢çççåªæ¯ä¸ºäºéé 以åç 3809 node.setAttribute(attribute, resultShowText); 3810 if(resultShowText.indexOf(resultText) > -1){ 3811 result['resultText'] = resultShowText; 3812 }else{ 3813 result['resultText'] = ''; 3814 } 3815 } 3816 } 3817 */ 3818 } 3819 return result; 3820 } 3821 3822 3823 3824 //æ£å¸¸çnode ï¼typeof 齿¯ object 3825 3826 /* è¿éæ¯éç¨æ¹æ³ï¼ä¸åºè¯¥æéå¶ 3827 //console.log(typeof(node)+node); 3828 if(nodename == '#text'){ 3829 //å¦ææ¯æ®éææ¬ï¼å¤æä¸ä¸ä¸å±æ¯å¦æ¯å å«å¨textareaæ ç¾ä¸ 3830 if(typeof(node.parentNode) != 'undefined'){ 3831 var parentNodename = translate.element.getNodeName(node.parentNode); 3832 //console.log(parentNodename) 3833 if(parentNodename == 'TEXTAREA'){ 3834 //æ¯textareaæ ç¾ï¼é£å°nodename çº³å ¥ textareaç夿ä¸ï¼åæ¶å°å¤æå¯¹è±¡äº¤äºä¸çº§ï¼ä¹å°±æ¯textareaæ ç¾ 3835 nodename = 'TEXTAREA'; 3836 node = node.parentNode; 3837 } 3838 } 3839 } 3840 */ 3841 3842 3843 //console.log(nodename) 3844 //console.log(translate.element.getNodeName(node.parentNode)) 3845 //console.log(node) 3846 if(nodename == 'INPUT' || nodename == 'TEXTAREA'){ 3847 //console.log(node.attributes) 3848 /* 3849 1. inputãtextarea è¾å ¥æ¡ï¼è¦å¯¹ placeholder åç¿»è¯ 3850 2. input è¦å¯¹ type=button çæ åµè¿è¡ç¿»è¯ 3851 */ 3852 if(node.attributes == null || typeof(node.attributes) == 'undefined'){ 3853 result['text'] = ''; 3854 return result; 3855 } 3856 3857 //inputï¼è¦å¯¹ type=buttonãsubmit çæ åµè¿è¡ç¿»è¯ 3858 if(nodename == 'INPUT'){ 3859 if(typeof(node.attributes.type) != 'undefined' && typeof(node.attributes.type.nodeValue) != null && (node.attributes.type.nodeValue.toLowerCase() == 'button' || node.attributes.type.nodeValue.toLowerCase() == 'submit')){ 3860 //console.log('----æ¯ <input type="button"'); 3861 //åå®çvalue 3862 var input_value_node = node.attributes.value; 3863 if(input_value_node != null && typeof(input_value_node) != 'undefined' && typeof(input_value_node.nodeValue) != 'undefined' && input_value_node.nodeValue.length > 0){ 3864 //æ¿æ¢æ¸²æ 3865 if(typeof(originalText) != 'undefined' && originalText.length > 0){ 3866 var resultShowText = translate.util.textReplace(input_value_node.nodeValue, originalText, resultText, translate.to); 3867 translate.element.nodeAnalyse.analyseReplaceBefore_DateToTranslateNode(node, attribute, resultShowText); 3868 3869 input_value_node.nodeValue = resultShowText; //2025.4.26 åæ´ä¸ºæ¤æ¹å¼ 3870 if(resultShowText.indexOf(resultText) > -1){ 3871 result['resultText'] = resultShowText; 3872 }else{ 3873 result['resultText'] = ''; 3874 } 3875 } 3876 3877 result['text'] = input_value_node.nodeValue; 3878 result['node'] = input_value_node; 3879 return result; 3880 } 3881 } 3882 } 3883 //console.log(node) 3884 3885 //input textarea ç placeholder æ åµ 3886 if(typeof(node.attributes['placeholder']) != 'undefined'){ 3887 //console.log(node); 3888 //æ¿æ¢æ¸²æ 3889 if(typeof(originalText) != 'undefined' && originalText.length > 0){ 3890 var resultShowText = translate.util.textReplace(node.attributes['placeholder'].nodeValue, originalText, resultText, translate.to); 3891 translate.element.nodeAnalyse.analyseReplaceBefore_DateToTranslateNode(node, attribute, resultShowText); 3892 3893 node.attributes['placeholder'].nodeValue = resultShowText; //2025.4.26 åæ´ä¸ºæ¤æ¹å¼ 3894 if(resultShowText.indexOf(resultText) > -1){ 3895 result['resultText'] = resultShowText; 3896 }else{ 3897 result['resultText'] = ''; 3898 } 3899 } 3900 3901 result['text'] = node.attributes['placeholder'].nodeValue; 3902 result['node'] = node.attributes['placeholder']; 3903 return result; 3904 //return node.attributes['placeholder'].nodeValue; 3905 } 3906 //console.log(node) 3907 result['text'] = ''; 3908 return result; 3909 } 3910 if(nodename == 'META'){
3911 //metaæ ç¾ï¼å¦æ¯å ³é®è¯ãæè¿°ç 3912 if(typeof(node.name) != 'undefined' && node.name != null){ 3913 var nodeAttributeName = node.name.toLowerCase(); //åmeta æ ç¾çname 屿§ 3914 var nodeAttributePropertyOri = node.getAttribute('property'); //å propertyçå¼ 3915 var nodeAttributeProperty = ''; 3916 if(typeof(nodeAttributePropertyOri) != 'undefined' && nodeAttributePropertyOri != null && nodeAttributePropertyOri.length > 0){ 3917 nodeAttributeProperty = nodeAttributePropertyOri.toLowerCase(); 3918 } 3919 if(nodeAttributeName == 'keywords' || nodeAttributeName == 'description' || nodeAttributeName == 'sharetitle' || nodeAttributeProperty == 'og:title' || nodeAttributeProperty == 'og:description' || nodeAttributeProperty == 'og:site_name' || nodeAttributeProperty == 'og:novel:latest_chapter_name'){ 3920 //æ¿æ¢æ¸²æ 3921 if(typeof(originalText) != 'undefined' && originalText != null && originalText.length > 0){ 3922 var resultShowText = translate.util.textReplace(node.content, originalText, resultText, translate.to); 3923 translate.element.nodeAnalyse.analyseReplaceBefore_DateToTranslateNode(node, attribute, resultShowText); 3924 3925 node.content = resultShowText; //2025.4.26 åæ´ä¸ºæ¤æ¹å¼ 3926 if(resultShowText.indexOf(resultText) > -1){ 3927 result['resultText'] = resultShowText; 3928 }else{ 3929 result['resultText'] = ''; 3930 } 3931 } 3932 3933 result['text'] = node.content; 3934 return result; 3935 } 3936 } 3937 3938 result['text'] = ''; 3939 return result; 3940 } 3941 3942 if(nodename == 'IMG'){ 3943 3944 if(typeof(node.alt) == 'undefined' || node.alt == null){ 3945 result['text'] = ''; 3946 return result; 3947 } 3948 3949 //æ¿æ¢æ¸²æ 3950 if(typeof(originalText) != 'undefined' && originalText.length > 0){ 3951 var resultShowText = translate.util.textReplace(node.alt, originalText, resultText, translate.to); 3952 translate.element.nodeAnalyse.analyseReplaceBefore_DateToTranslateNode(node, attribute, resultShowText); 3953 3954 node.alt = resultShowText; //2025.4.26 åæ´ä¸ºæ¤æ¹å¼ 3955 if(resultShowText.indexOf(resultText) > -1){ 3956 result['resultText'] = resultShowText; 3957 }else{ 3958 result['resultText'] = ''; 3959 } 3960 } 3961 result['text'] = node.alt; 3962 return result; 3963 } 3964 3965 3966 //å ¶ä»ç 3967 if(node.nodeValue == null || typeof(node.nodeValue) == 'undefined'){ 3968 result['text'] = ''; 3969 }else if(node.nodeValue.trim().length == 0){ 3970 //é¿å å°±æ¯å纯çç©ºæ ¼æè æ¢è¡ 3971 result['text'] = ''; 3972 }else{ 3973 //æ¿æ¢æ¸²æ 3974 if(typeof(originalText) != 'undefined' && originalText != null && originalText.length > 0){ 3975 //console.log(originalText+'|'); 3976 var resultShowText = translate.util.textReplace(node.nodeValue, originalText, resultText, translate.to); 3977 translate.element.nodeAnalyse.analyseReplaceBefore_DateToTranslateNode(node, attribute, resultShowText); 3978 3979 //console.log(resultShowText+'|'); 3980 node.nodeValue = resultShowText; //2025.4.26 åæ´ä¸ºæ¤æ¹å¼ 3981 if(resultShowText.indexOf(resultText) > -1){ 3982 result['resultText'] = resultShowText; 3983 }else{ 3984 result['resultText'] = ''; 3985 } 3986 } 3987 result['text'] = node.nodeValue; 3988 } 3989 return result; 3990 }, 3991 /* 3992 å¨ analyse set 设置å°domä¹åï¼å å°æ°æ®åæ¥å° translate.node ä¸è¿è¡è®°å½ 3993 3994 node: translate.element.nodeAnalyse.analyseä¸ä¼ å ¥çnode 3995 attribute: translate.element.nodeAnalyse.analyseä¸ä¼ å ¥çattribute 3996 resultShowText: translate.element.nodeAnalyse.analyse è¿è¡è®¾ç½®ç¿»è¯åçææ¬æ¸²ææ¶ï¼æå计ç®å¥½è¿ä¸ªnodeæ¾ç¤ºçææææ¬ï¼ç¶åå¨èµäº domï¼è¿éæ¯è®¡ç®å¥½çnodeè¦æ´ä½æ¾ç¤ºçææ¬ 3997 */ 3998 analyseReplaceBefore_DateToTranslateNode:function(node, attribute, resultShowText){ 3999 //console.log('analyseReplaceBefore_DateToTranslateNode: attribute:'+attribute+', resultShowText:'+resultShowText+', node:'); 4000 //console.log(node); 4001 4002 var translateNode = null; //å½åæä½çï¼è¦è®°å½å ¥ translate.node ä¸çï¼è¿è¡ç¿»è¯çnode 4003 var translateNode_attribute = ''; //å½åæä½çæ¯nodeä¸çåªä¸ªattributeï¼å¦ææ²¡ææ¯nodeæ¬èº«åæ¯ç©ºå符串 4004 4005 if(typeof(attribute) === 'string' && attribute.length > 0){ 4006 //æ¯æä½çå ç´ çæä¸ªå±æ§,è¿æ¶è¦å¤æ æ¯å¦æ¯ inputãtextarea çvalue屿§ 4007 if(attribute !== null && attribute === 'value'){ 4008 var nodeNameLowerCase = translate.element.getNodeName(node).toLowerCase(); 4009 if((nodeNameLowerCase === 'input' || nodeNameLowerCase === 'textarea')){ 4010 translateNode = node; 4011 translateNode_attribute = 'value'; 4012 } 4013 } 4014 if(translateNode === null){ 4015 translateNode = node.getAttributeNode(attribute); 4016 translateNode_attribute = attribute; 4017 } 4018 }else{ 4019 //æä½çå°±æ¯nodeæ¬èº« 4020 translateNode = node; 4021 } 4022 4023 if(translate.node.find(translateNode)){ 4024 if(typeof(translate.node.get(translateNode).translateResults) === 'undefined'){ 4025 translate.node.get(translateNode).translateResults = {}; 4026 } 4027 translate.node.get(translateNode).translateResults[resultShowText] = 1; 4028 translate.node.get(translateNode).resultText = resultShowText; 4029 }else{ 4030 //ç¿»è¯è¿ç¨ä¸ï¼ä¼ææ¶é´å·®ï¼æ¯å¦éè¿ææ¬ç¿»è¯api请æ±ï¼è¿æ¶nodeå ç´ æ¬èº«è¢«å ¶ä»jsæ¹åäºï¼å¯¼è´ç¿»è¯å®æåï¼åæ¬çnodeä¸åå¨äº 4031 //console.log('[debug] æ°æ®å¼å¸¸ï¼analyse - set ä¸åç° translate.node ä¸ç node ä¸åå¨ï¼ç论ä¸åºè¯¥åªè¦è¢«æ«æäºï¼è¢«ç¿»è¯äºï¼å°è¿éå°±ä¸å®ä¼åå¨çï¼ä¸å卿ä¹ä¼æ«æå°äº¤ç»å»ç¿»è¯å¢'); 4032 } 4033 }, 4034 }, 4035 //è·åè¿ä¸ªnodeå ç´ çnode name ,妿æªåç°ï¼åè¿å''空å符串 4036 getNodeName:function(node){ 4037 if(node == null || typeof(node) == 'undefined'){ 4038 return ''; 4039 } 4040 4041 if(node.nodeName == null || typeof(node.nodeName) == 'undefined'){ 4042 return ''; 4043 } 4044 4045 var nodename = node.nodeName; 4046 if(typeof(node.nodeName) == 'string'){ 4047 return node.nodeName; 4048 }else{ 4049 if(typeof(node.tagName) == 'string' && node.tagName.length > 0){ 4050 return node.tagName; 4051 }else{ 4052 translate.log('warn : get nodeName is null, this node ignore translate. node : '); 4053 translate.log(node); 4054 return ''; 4055 } 4056 } 4057 }, 4058 /* 4059 åä¸éånode 4060 å ¶ä¸å¦æä½¿ç¨äºèªå®ä¹ textarea ãinput ç value 屿§ï¼åè®¤ä¸ºæ¯ node æ¬èº«è¿è¡æé©ï¼èéå ¶ value å¼ï¼valueå¼å¹¶ä¸æ¯ä¸ªnodeï¼ 4061 */ 4062 whileNodes:function(uuid, node){ 4063 if(node == null || typeof(node) == 'undefined'){ 4064 return; 4065 } 4066 4067 //妿è¿ä¸ªuuid没æï¼åå建 4068 if(typeof(translate.nodeQueue[uuid]) == 'undefined' || translate.nodeQueue[uuid] == null){ 4069 translate.nodeQueue[uuid] = new Array(); //å建 4070 translate.nodeQueue[uuid]['expireTime'] = Date.now() + 120*1000; //å 餿¶é´ï¼10åéåå é¤ 4071 translate.nodeQueue[uuid]['list'] = new Array(); 4072 //console.log('å建 --- '); 4073 //console.log(uuid) 4074 } 4075 4076 //console.log('---'+typeof(node)+', '); 4077 //夿æ¯å¦æ¯ætitle屿§ï¼title屿§ä¹è¦ç¿»è¯ 4078 if(typeof(node) == 'object' && typeof(node['title']) == 'string' && node['title'].trim().length > 0){ 4079 //å°titleå å ¥ç¿»è¯éå 4080 //console.log('---'+node.title+'\t'+node.tagName); 4081 //console.log(node) 4082 //console.log('------------'); 4083 4084 //夿å½åå ç´ æ¯å¦å¨ignore忽ç¥çtagãidãclass nameä¸ 4085 if(!translate.ignore.isIgnore(node)){ 4086 //ä¸å¨å¿½ç¥çéé¢ï¼æä¼å å ¥ç¿»è¯ 4087 //translate.addNodeToQueue(uuid, node, node['title'], 'title'); 4088 translate.addNodeToQueue(uuid, node.getAttributeNode('title'), node['title'], ''); 4089 } 4090 } 4091 4092 //v3.9.2 å¢å , ç¨æ·å¯èªå®ä¹æ ç¾å attribute çç¿»è¯ 4093 var nodeNameLowerCase = translate.element.getNodeName(node).toLowerCase(); 4094 if(typeof(translate.element.tagAttribute[nodeNameLowerCase]) != 'undefined'){ 4095 //console.log('find:'+nodeNameLowerCase); 4096 //console.log(translate.element.tagAttribute[nodeNameLowerCase]); 4097 //console.log(translate.element.tagAttribute[nodeNameLowerCase].attribute); 4098 4099 for(var attributeName_index in translate.element.tagAttribute[nodeNameLowerCase].attribute){ 4100 if (!translate.element.tagAttribute[nodeNameLowerCase].attribute.hasOwnProperty(attributeName_index)) { 4101 continue; 4102 } 4103 if(typeof(translate.element.tagAttribute[nodeNameLowerCase].condition) !='undefined' && !translate.element.tagAttribute[nodeNameLowerCase].condition(node)){ 4104 continue; 4105 } 4106 4107 var attributeName = translate.element.tagAttribute[nodeNameLowerCase].attribute[attributeName_index]; 4108 //console.log(attributeName); 4109 //console.log(node.getAttribute(attributeName)); 4110 4111 //æ¯å¦æ¯ inputã textarea ç value ï¼å¦ææ¯ 忝 true 4112 var isInputValue = false; 4113 if((nodeNameLowerCase === 'input' || nodeNameLowerCase === 'textarea') && attributeName.toLowerCase() == 'value'){ 4114 //妿æ¯input çvalue屿§ï¼é£ä¹è¦ç´æ¥è·åï¼èééè¿ attribute ï¼ä¸ç¶ç¨æ·èªå·±è¾å ¥çéè¿ attribute æ¯è·åä¸å°ç - catl èµµé³ æåº 4115 attributeValue = node.value; 4116 DOMPropOrHTMLAttr = 'DOMProperty'; 4117 isInputValue = true; 4118 }else{ 4119 /* 4120 * é»è®¤æ¯ HtmlAtrribute ä¹å°±æ¯ HTMLç¹æ§ãåå¼æä¸¤ä¸ª: 4121 * HTMLAtrribute : HTMLç¹æ§ 4122 * DOMProperty : DOM屿§ 4123 */ 4124 var DOMPropOrHTMLAttr = 'HTMLAtrribute'; 4125 var attributeValue = node.getAttribute(attributeName); 4126 if(typeof(attributeValue) == 'undefined' || attributeValue == null){ 4127 //vueãelementãreact ä¸çä¸äºå¨æèµå¼ï¼æ¯å¦ element ä¸ç el-select éä¸åèµäºæ¾ç¤ºåºæ¥çææ¬ï¼getAttribute å°±åä¸å°ï¼å ä¸ºæ¯æ¹å¨ç DOM屿§ï¼æä»¥è¦ç¨è¿ç§æ¹å¼æè½ååºæ¥ 4128 attributeValue = node[attributeName]; 4129 DOMPropOrHTMLAttr = 'DOMProperty'; 4130 } 4131 if(typeof(attributeValue) == 'undefined' || attributeValue == null){ 4132 //è¿ä¸ªtagæ ç¾æ²¡æè¿ä¸ªå±æ§ï¼å¿½ç¥ 4133 continue; 4134 } 4135 } 4136 4137 4138 //if(typeof(node.getAttribute(attributeName)) == 'undefined' && typeof(node[attributeName]) == 'undefined'){ 4139 // //è¿ä¸ªtagæ ç¾æ²¡æè¿ä¸ª attributeï¼å¿½ç¥ 4140 // continue 4141 //} 4142 //夿å½åå ç´ æ¯å¦å¨ignore忽ç¥çtagãidãclass nameä¸ v3.15.7 å¢å 4143 if(!translate.ignore.isIgnore(node)){ 4144 //å å ¥ç¿»è¯ 4145 translate.addNodeToQueue(uuid, isInputValue? node:node.getAttributeNode(attributeName), attributeValue, isInputValue? 'value':''); 4146 } 4147 } 4148 } 4149 4150 4151 var childNodes = node.childNodes; 4152 if(childNodes == null || typeof(childNodes) == 'undefined'){ 4153 return; 4154 } 4155 if(childNodes.length > 0){ 4156 for(var i = 0; i<childNodes.length; i++){ 4157 translate.element.whileNodes(uuid, childNodes[i]); 4158 } 4159 }else{ 4160 //åä¸ªäº 4161 translate.element.findNode(uuid, node); 4162 } 4163 }, 4164 findNode:function(uuid, node){ 4165 if(node == null || typeof(node) == 'undefined'){ 4166 return; 4167 } 4168 if(node.nodeType === 2){ //æ¯å±æ§nodeï¼æ¯å¦ div ç title 屿§ç node 4169 if(node.ownerElement == null){ 4170 return; 4171 } 4172 }else{ //æ¯å ç´ äº 4173 if(node.parentNode == null){ 4174 return; 4175 } 4176 } 4177 4178 /****** å¤æå¿½ç¥çclass ******/ 4179 /* 4180 è¿æ®µç论ä¸ä¸éè¦äºï¼å ä¸ºå¨ translate.ignore.isIgnore å¤æäº 4181 var ignoreClass = false; //æ¯å¦æ¯è¢«å¿½ç¥çclassï¼trueæ¯ 4182 var parentNode = node.parentNode; 4183 while(node != parentNode && parentNode != null){ 4184 //console.log('node:'+node+', parentNode:'+parentNode); 4185 if(parentNode.className != null){ 4186 if(translate.ignore.class.indexOf(parentNode.className) > -1){ 4187 //åç°ignore.class å½åæ¯å¤äºè¢«å¿½ç¥ç class 4188 ignoreClass = true; 4189 } 4190 } 4191 4192 parentNode = parentNode.parentNode; 4193 } 4194 if(ignoreClass){ 4195 //console.log('ignore class : node:'+node.nodeValue); 4196 return; 4197 } 4198 */ 4199 /**** å¤æå¿½ç¥çclassç»æ ******/ 4200 4201 4202 4203 /**** é¿å ä¸éå±é¨ç¿»è¯ï¼å¨å¤æä¸ä¸ ****/ 4204 //夿å½åå ç´ æ¯å¦å¨ignore忽ç¥çtagãidãclass nameä¸ 4205 if(translate.ignore.isIgnore(node)){ 4206 //console.log('nodeå å«å¨è¦å¿½ç¥çå ç´ ä¸ï¼'); 4207 //console.log(node); 4208 return; 4209 } 4210
4211 //nodeåæï¼åæè¿ä¸ªnodeçææå¯ç¿»è¯å±æ§ï¼å å«èªå®ä¹ç¿»è¯å±æ§ translate.element.tagAttribute ï¼ 4212 var nodeAnalyChild = translate.element.nodeAnalyse.gets(node); 4213 //console.log(nodeAnalyChild); 4214 for(var nci = 0; nci < nodeAnalyChild.length; nci++){ 4215 translate.addNodeToQueue(uuid, nodeAnalyChild[nci].node, nodeAnalyChild[nci].text, ''); 4216 } 4217 /* 4218 var nodeAnaly = translate.element.nodeAnalyse.get(node); 4219 if(nodeAnaly['text'].length > 0){ 4220 //æè¦ç¿»è¯çç®æ å 容ï¼å å ¥ç¿»è¯éå 4221 console.log(nodeAnaly) 4222 console.log('addNodeToQueue -- '+nodeAnaly['node']+', text:' + nodeAnaly['text']); 4223 translate.addNodeToQueue(uuid, nodeAnaly['node'], nodeAnaly['text'], ''); 4224 } 4225 */ 4226 4227 //console.log(nodeAnaly); 4228 /* 4229 //console.log(node.nodeName+', type:'+node.nodeType+', '+node.nodeValue); 4230 var nodename = translate.element.getNodeName(node); 4231 if(nodename == 'INPUT' || nodename == 'TEXTAREA'){ 4232 //input è¾å ¥æ¡ï¼è¦å¯¹ placeholder åç¿»è¯ 4233 console.log('input---'+node.attributes); 4234 if(node.attributes == null || typeof(node.attributes) == 'undefined'){ 4235 return; 4236 } 4237 4238 if(typeof(node.attributes['placeholder']) != 'undefined'){ 4239 //console.log(node.attributes['placeholder'].nodeValue); 4240 //å å ¥è¦ç¿»è¯çnodeéå 4241 //translate.nodeQueue[translate.hash(node.nodeValue)] = node.attributes['placeholder']; 4242 //å å ¥è¦ç¿»è¯çnodeéå 4243 //translate.addNodeToQueue(translate.hash(node.attributes['placeholder'].nodeValue), node.attributes['placeholder']); 4244 translate.addNodeToQueue(uuid, node.attributes['placeholder'], node.attributes['placeholder'].nodeValue); 4245 } 4246 4247 //console.log(node.getAttribute("placeholder")); 4248 }else if(nodename == 'META'){
4249 //metaæ ç¾ï¼å¦æ¯å ³é®è¯ãæè¿°ç 4250 if(typeof(node.name) != 'undefined' && node.name != null){ 4251 var nodeAttributeName = node.name.toLowerCase(); //åmeta æ ç¾çname 屿§ 4252 //console.log(nodeName); 4253 if(nodeAttributeName == 'keywords' || nodeAttributeName == 'description'){ 4254 //å ³é®è¯ãæè¿° 4255 translate.addNodeToQueue(uuid, node, node.content); 4256 } 4257 } 4258 //console.log(node.name) 4259 }else if(nodename == 'IMG'){ 4260 //console.log('-------'+node.alt); 4261 translate.addNodeToQueue(uuid, node, node.alt); 4262 }else if(node.nodeValue != null && node.nodeValue.trim().length > 0){ 4263 4264 //è¿æ»¤ææ æçå¼ 4265 if(node.nodeValue != null && typeof(node.nodeValue) == 'string' && node.nodeValue.length > 0){ 4266 }else{ 4267 return; 4268 } 4269 4270 //console.log(node.nodeValue+' --- ' + translate.language.get(node.nodeValue)); 4271 4272 //console.log(node.nodeName); 4273 //console.log(node.parentNode.nodeName); 4274 //console.log(node.nodeValue); 4275 //å å ¥è¦ç¿»è¯çnodeéå 4276 translate.addNodeToQueue(uuid, node, node.nodeValue); 4277 //translate.addNodeToQueue(translate.hash(node.nodeValue), node); 4278 //translate.nodeQueue[translate.hash(node.nodeValue)] = node; 4279 //translate.nodeQueue[translate.hash(node.nodeValue)] = node.nodeValue; 4280 //node.nodeValue = node.nodeValue+'|'; 4281 4282 } 4283 */ 4284 4285 }, 4286 /* 4287 å°node转为elementè¾åºã 4288 妿nodeæ¯ææ¬å ç´ ï¼å转å为è¿ä¸ªææ¬å ç´ æå¨çelementå ç´ 4289 妿nodeæ¯å±æ§ï¼å转å为è¿ä¸ªå±æ§æå¨çelementå ç´ 4290 妿nodeæ¬èº«å°±æ¯å ç´ æ ç¾ï¼é£å°±è¿æ¯è¿æ ·è¿åã 4291 4292 4293 nodes: nodeæ°ç»ï¼ä¼ å ¥å¦ [node1,node2, ...] å®éé¢å¯è½å å« node.nodeType 1\2\3 çå¼ 4294 4295 è¿åè¿äºnode转å为æå¨å ç´ åçæ°ç»ï¼è¿åå¦ [element1, element2, ...] 4296 注æçæ¯ 4297 1. è¾åºçä¸å®æ¯ element å ç´ ï¼ä¹å°±æ¯ node.nodeType ä¸å®çäº1 4298 2. è¾åºçå ç´ æ°ç»ä¸ä¸å®çäºä¼ å ¥çnodesæ°ç»ï¼ä¹å°±æ¯ä»ä»¬çæ°éè·ä¸æ 并䏿¯å¯¹åºç¸çç 4299 4300 */ 4301 nodeToElement: function(nodes){ 4302 var elements = new Array(); //è¦æ¹å¨çå ç´ 4303 4304 //éåæænodeç»åå° nodes. è¿ä¸ªä¸åçº¯åªæ¯éåç»åï¼å®ä¼å¤æå¦ææ¯ææ¬èç¹ï¼ååå®çç¶çº§å ç´ ãå®ç»åçç»ææ¯å ç´ çéå 4305 for(var r = 0; r<nodes.length; r++){ 4306 var node = nodes[r]; 4307 if(typeof(node) == 'undefined' || typeof(node.parentNode) == 'undefined'){ 4308 continue; 4309 } 4310 if(node.nodeType === 2){ 4311 //æ¯å±æ§èç¹ï¼å¯è½æ¯inputãtextarea ç placeholder ï¼è·åå®çç¶å ç´ 4312 var nodeParentElement = node.ownerElement; 4313 if(nodeParentElement == null){ 4314 continue; 4315 } 4316 elements.push(nodeParentElement); 4317 }else if(node.nodeType === 3){ 4318 //æ¯ææ¬èç¹ 4319 var nodeParentElement = node.parentNode; 4320 if(nodeParentElement == null){ 4321 continue; 4322 } 4323 elements.push(nodeParentElement); 4324 }else if(node.nodeType === 1){ 4325 //å ç´ èç¹äºï¼ç´æ¥å å ¥ 4326 elements.push(node); 4327 }else{ 4328 //1\2\3 é½ä¸æ¯ï¼è¿ä¸åºè¯¥æ¯ translate.js ä¸åºè¯¥åºç°ç 4329 translate.log('translate.element.nodeToElement ä¸ï¼åç°ä¼ å ¥çnode.nodeType ç±»åæå¼å¸¸ï¼ç论ä¸ä¸åºè¯¥åå¨ï¼ node.nodeType:'+node.nodeType); 4330 translate.log(node); 4331 } 4332 } 4333 4334 return elements; 4335 } 4336 }, 4337 4338 4339 4340 4341 4342 /* 4343 * å°åç°çå ç´ èç¹å å ¥å¾ ç¿»è¯éå 4344 * uuid executeæ¹æ³æ§è¡çå¯ä¸id 4345 * node å½åtextæå¨çnode 4346 * text å½åè¦ç¿»è¯çç®æ ææ¬ 4347 * attribute æ¯å¦æ¯å ç´ çæä¸ªå±æ§ãæ¯å¦ aæ ç¾ä¸çtitle屿§ï¼ a.title å以nodeåæ°ä¼ å ¥æ¶æ¯stringç±»åçï¼æ¬èº«å¹¶ä¸æ¯nodeç±»åï¼æä»¥å°±è¦ä¼ å ¥è¿ä¸ª attribute=title æ¥ä»£è¡¨è¿æ¯aæ ç¾çtitle屿§ãåæ ·ç¬¬äºä¸ªåæ°nodeä¼ å ¥çä¹ä¸è½æ¯a.titleï¼èæ¯ä¼ å ¥aè¿ä¸ªnodeå ç´ 4348 妿ä¸ç©¿æè ä¼ å ¥ '' 空å符串ï¼åä»£è¡¨ä¸æ¯ attribute 屿§ï¼èæ¯nodeValue æ¬èº« 4349 注æï¼ textareaãinput æ ç¾ç value 屿§çç¹æ®æ§ï¼å¦æ node æ¯textareaãinput ï¼é£ä¹valueæ¶è¿ä¸ª attribute è¦ä¼ é 'value' è¿æ¥ç 4350 */ 4351 addNodeToQueue:function(uuid, node, text, attribute){ 4352 //console.log('addNodeToQueue - params: uuid:'+uuid+', text:'+text+', attribute:'+attribute+', node:'); 4353 //console.log(node); 4354 4355 if(node == null || text == null || text.length == 0){ 4356 return; 4357 } 4358 4359 4360 //console.log('find tag ignore : '+node.nodeValue+', '+node.nodeName+", "+node.nodeType+", "+node.tagName); 4361 //console.log('addNodeToQueue into -- node:'+node+', text:'+text+', attribute:'+attribute); 4362 var nodename = translate.element.getNodeName(node).toLowerCase(); 4363
4364 //夿妿æ¯è¢« <!-- --> 注éçåºåï¼ä¸è¿è¡ç¿»è¯ 4365 if(nodename == '#comment'){ 4366 return; 4367 } 4368 //console.log('\t\t'+text); 4369 //åè¦ç¿»è¯å符çhash 4370 var key = translate.util.hash(text); 4371 /* 4372 妿æ¯input ç placeholder ,å°±ä¼åºç°è¿ä¸ªæ åµ 4373 if(node.parentNode == null){ 4374 console.log('node.parentNode == null'); 4375 return; 4376 } 4377 */ 4378 4379 //console.log(node.parentNode); 4380 //console.log(node.parentNode.nodeName); 4381 4382 //å¤æå ¶å 容æ¯å¦æ¯ scriptãstyle çç¼ç¨çææ¬ï¼å¦ææ¯ï¼åä¸è¿è¡ç¿»è¯ï¼ä¸ç¶ç¿»è¯åè¿ä¼å½±å页颿£å¸¸ä½¿ç¨ 4383 if(translate.util.findTag(text)){ 4384 //console.log('find tag ignore : '+node.nodeValue+', '+node.nodeName+", "+node.nodeType+", "+node.tagName); 4385 //console.log(node.parentNode.nodeName); 4386 4387 //è·åå°å½åææ¬æ¯å±äºé£ä¸ªtagæ ç¾ä¸çï¼å¦ææ¯scriptãstyle è¿æ ·çæ ç¾ä¸ï¼é£ä¹ä¼å¿½ç¥æå®ï¼ä¸è¿è¡ç¿»è¯ 4388 if(node.parentNode == null){ 4389 //没æä¸çº§äºï¼ææ¯æ²¡è·åå°ä¸çº§ï¼å¿½ç¥ 4390 return; 4391 } 4392 //å»ä¸çº§çtag name 4393 var parentNodeName = translate.element.getNodeName(node.parentNode); 4394 //node.parentNode.nodeName; 4395 if(parentNodeName == 'SCRIPT' || parentNodeName == 'STYLE'){ 4396 //妿æ¯scriptãstyleä¸åç°çï¼é£ä¹å¿½ç¥ 4397 return; 4398 } 4399 } 4400 //console.log(node.nodeValue); 4401 4402 4403 /***** è®°å½è¿ä¸ªnode å° translate.node.dataï¼è¿ä¹æ¯nodeè¿å ¥ translate.node.data è®°å½ç第ä¸å ¥å£ *****/ 4404 var translateNode; //å½åæä½çï¼è¦è®°å½å ¥ translate.node ä¸çï¼è¿è¡ç¿»è¯çnode 4405 var translateNode_attribute = ''; //å½åæä½çæ¯nodeä¸çåªä¸ªattributeï¼å¦ææ²¡ææ¯nodeæ¬èº«åæ¯ç©ºå符串 4406 if(typeof(attribute) === 'string' && attribute.length > 0){ 4407 //æ¯æä½çå ç´ çæä¸ªå±æ§,è¿æ¶è¦å¤æ æ¯å¦æ¯ inputãtextarea çvalue屿§ 4408 if((nodename === 'input' || nodename === 'textarea') && attribute !== null && attribute === 'value'){ 4409 translateNode = node; 4410 translateNode_attribute = 'value'; 4411 }else{ 4412 translateNode = node.getAttributeNode(attribute); 4413 translateNode_attribute = attribute; 4414 } 4415 }else{ 4416 //æä½çå°±æ¯nodeæ¬èº« 4417 translateNode = node; 4418 } 4419 if(translate.node.get(translateNode) == null){ 4420 translate.node.set(translateNode, {}); 4421 } 4422 4423 //var nodeAttribute = translate.node.getAttribute(attribute); 4424 //console.log(text+'-----:'); 4425 //console.log(translate.node.get(translateNode)); 4426 //if(typeof(translate.node.get(translateNode)[nodeAttribute.key]) == 'undefined'){ 4427 // translate.node.get(node)[nodeAttribute.key] = {}; 4428 //} 4429 translate.node.get(translateNode).attribute = translateNode_attribute; 4430 if(typeof(translate.node.get(translateNode).originalText) === 'string'){ 4431 //è¿ä¸ªèç¹æè¿è®°å½åå§æ¾ç¤ºçææ¬äºï¼é£ä¹ä¸åå¯¹å ¶è¿è¡åç»çæ«æï¼é¤éå®æè¢«è§¦åè¿å¨æçå¬å ç´ æ¹åï¼ --- è³äºå®æè¢«è§¦åè¿å¨æçå¬å ç´ æ¹å--åç»æ³æä¹å¤å® 4432 //console.log(translate.node.get(node)[nodeAttribute.key].originalText+'\tåè¿äºï¼ä¸å¨ç¿»è¯'); 4433 return; 4434 }else{ 4435 //没æè¿ï¼æ¯ç¬¬ä¸æ¬¡ï¼é£ä¹èµäºå¼ 4436 translate.node.get(translateNode).originalText = text; 4437 } 4438 //console.log(translateNode); 4439 //console.log(translate.node.get(translateNode)); 4440 /* 4441 if(typeof(translate.node.get(node).translateTexts) != 'undefined'){ 4442 //è¿ä¸ªnodeä¹åå·²ç»è¢«æ«æè¿äºï¼é£ä¹å¤æä¸ä¸ä¸æ¬¡æ«æçææ¬è·å½åè·åå°çææ¬æ¯å¦ä¸è´ï¼å¦æä¸è´ï¼é£å°±æ²¡å¿ è¦è¿è¡ç¿»è¯äº 4443 //è¿ä¸ªä¸è´ï¼æ¯è·éè¿ææ¬ç¿»è¯æ¥å£çï¼ç¿»è¯åæè ç¿»è¯åçææ¬ï¼ä»»ä½ä¸ä¸ªç¸çï¼å°±é½ä¸éè¦è¢«ç¿»è¯ 4444 for(var originalText in translate.node.get(node).translateTexts){ 4445 if (!translate.node.get(node).translateTexts.hasOwnProperty(originalText)) { 4446 continue; 4447 } 4448 if(originalText === text || (translate.node.get(node).translateTexts[originalText] != null && translate.node.get(node).translateTexts[originalText] === text)){ 4449 console.log('è¿ä¸ªnodeä¹åå·²ç»è¢«ç¿»è¯è¿äºï¼æç¿»è¯ç»æï¼é£ä¹å¤æä¸ä¸ç¿»è¯ç»æè·å½åè·åå°çææ¬æ¯å¦ä¸è´ï¼å¦æä¸è´ï¼é£å°±æ²¡å¿ è¦è¿è¡ç¿»è¯äº, textï¼'+text); 4450 return; 4451 } 4452 } 4453 } 4454 */ 4455 /* 4456 // å°ä¼ å ¥ç hitNomenclatureArray çææé®å¼å¯¹æ·»å å° translate.node.get(node).hitNomenclatureArray ä¸ 4457 hitNomenclatureArray.forEach((value, key) => { 4458 translate.node.get(node).hitNomenclatureArray.set(key, value); 4459 }); 4460 */ 4461 /* 4462 if(typeof(translate.node.get(node).originalText) == 'string' && translate.node.get(node).originalText === text){ 4463 console.log('è¿ä¸ªnodeä¹åå·²ç»è¢«æç´¢èç¹å¹¶åæè¿äº, textï¼'+text); 4464 return; 4465 } 4466 */ 4467 if(typeof(translate.node.get(translateNode).translateTexts) === 'undefined'){ 4468 translate.node.get(translateNode).translateTexts = {}; 4469 } 4470 /***** èªæ£å®æ¯ï¼åå¤è¿è¡ç¿»è¯äº *****/ 4471 4472 4473 //åæ¬ä¼ å ¥çtextä¼è¢«åå²ä¸ºå¤ä¸ªå°å 4474 var textArray = new Array(); 4475 textArray.push(text); //å å°ä¸» text èµäº ï¼åé¢å¦æå¯¹ä¸»textè¿è¡å å·¥åå²ï¼åå²åä¼å°ä¸»textç»å 餿 4476 //console.log(textArray); 4477 4478 // å¤ç ignore.regex 4479 var temporaryIgnoreTexts = []; //ä» ä» é对å½åtextææ¬ï¼éè¿ translate.ignore.textRegex æäº§çç临æ¶ä¸ç¿»è¯çææ¬ï¼å®å¹¶ä¸è½ä½ç¨äºå ¶ä»èç¹çææ¬ 4480 for (var ri = 0; ri < translate.ignore.textRegex.length; ri++) { 4481 var regex = translate.ignore.textRegex[ri]; 4482 for (var tai = 0; tai < textArray.length; tai++) { 4483 var text = textArray[tai]; 4484 //temporaryIgnoreTexts = text.match(regex) || [] 4485 var matches = text.match(regex) || []; 4486 temporaryIgnoreTexts = temporaryIgnoreTexts.concat(matches); 4487 //translate.ignore.text = translate.ignore.text.concat(ignoreTexts) 4488 } 4489 } 4490 4491 //å°å½åèç¹ææ¬ç ä¸ç¿»è¯ææ¬è§åï¼éæ°ç»åå° temporaryIgnoreTextsByRegex 4492 if(temporaryIgnoreTexts.length == 0){ 4493 temporaryIgnoreTexts = translate.ignore.text; 4494 }else{ 4495 //å°å ¶å å ¥ translate.history.translateTexts ä¸ 4496 temporaryIgnoreTexts.concat(translate.ignore.text); 4497 for(var ti = 0; ti<temporaryIgnoreTexts.length; ti ++){ 4498 translate.history.translateText.add(temporaryIgnoreTexts[ti], temporaryIgnoreTexts[ti]); 4499 } 4500 } 4501 4502 /**** v3.10.2.20241206 - å¢å èªå®ä¹å¿½ç¥ç¿»è¯çææ¬ï¼å¿½ç¥ç¿»è¯çææ¬ä¸ä¼è¢«ç¿»è¯ - å½ç¶è¿æ ·ä¼æä¹±ç¿»è¯ä¹åé 读çè¿è´¯æ§ ****/ 4503 for(var ti = 0; ti<temporaryIgnoreTexts.length; ti++){ 4504 if(temporaryIgnoreTexts[ti].trim().length == 0){ 4505 continue; 4506 } 4507 4508 //textArray = translate.addNodeToQueueTextAnalysis(uuid, node, textArray, attribute, temporaryIgnoreTexts[ti], temporaryIgnoreTexts[ti]); 4509 4510 //console.log(textArray); 4511 textArray = translate.nomenclature.dispose(textArray, temporaryIgnoreTexts[ti], temporaryIgnoreTexts[ti], { 4512 node:translateNode, 4513 attribute:translateNode_attribute 4514 }).texts; 4515 //console.log(textArray); 4516 } 4517 4518 4519 /**** v3.10.2.20241206 - èªå®ä¹æ¯è¯è½åå ¨é¢ä¼å - å½ç¶è¿æ ·ä¼æä¹±ç¿»è¯ä¹åé 读çè¿è´¯æ§ ****/ 4520 //夿æ¯å¦è¿è¡äºç¿»è¯ï¼ä¹å°±æ¯æè®¾ç½®ç®æ è¯ç§ï¼å¹¶ä¸è·å½åè¯ç§ä¸ä¸è´ 4521 if(typeof(translate.temp_nomenclature) == 'undefined'){ 4522 translate.temp_nomenclature = new Array(); 4523 } 4524 if(typeof(translate.temp_nomenclature[translate.language.getLocal()]) == 'undefined'){
4525 nomenclatureKeyArray = new Array(); 4526 } 4527 if(typeof(translate.nomenclature.data[translate.language.getLocal()]) != 'undefined' && typeof(translate.nomenclature.data[translate.language.getLocal()][translate.to]) != 'undefined'){ 4528 var nomenclatureKeyArray; 4529 for(var nomenclatureKey in translate.nomenclature.data[translate.language.getLocal()][translate.to]){ 4530 if (!translate.nomenclature.data[translate.language.getLocal()][translate.to].hasOwnProperty(nomenclatureKey)) { 4531 continue; 4532 } 4533 //nomenclatureKey 便æ¯èªå®ä¹æ¯è¯çåå§ææ¬ï¼å¼æ¯è¦æ¿æ¢ä¸ºçææ¬ 4534 //console.log(nomenclatureKey); 4535 //èªå®ä¹å±äºçæå®çç»æå符串 4536 var nomenclatureValue = translate.nomenclature.data[translate.language.getLocal()][translate.to][nomenclatureKey]; 4537 4538 //console.log('----translate.nomenclature.dispose---'); 4539 //console.log(textArray); 4540 var nomenclatureDispose = translate.nomenclature.dispose(textArray, nomenclatureKey, nomenclatureValue, { 4541 node:translateNode, 4542 attribute:translateNode_attribute 4543 }); 4544 4545 textArray = nomenclatureDispose.texts; 4546 if(nomenclatureDispose.find){ 4547 //console.log('åç°èªå®ä¹æ¯è¯ï¼å¹¶å·²è¿è¡æ¿æ¢å¤çï¼'); 4548 //console.log(nomenclatureDispose); 4549 } 4550 4551 if(typeof(nomenclatureKeyArray) != 'undefined'){ 4552 nomenclatureKeyArray.push(nomenclatureKey); 4553 } 4554 } 4555 4556 if(typeof(translate.temp_nomenclature[translate.language.getLocal()]) == 'undefined'){ 4557 translate.temp_nomenclature[translate.language.getLocal()] = nomenclatureKeyArray; 4558 } 4559 } 4560 /**** v3.10.2.20241206 - èªå®ä¹æ¯è¯è½åå ¨é¢ä¼å - end ****/ 4561 4562 4563 4564 //è®°å½ nodeHistory - 夿textæ¯å¦å·²ç»è¢«æåäº 4565 if(textArray.length > 0 && textArray[0] != text){ //ä¸»è¦æ¯åé¢çæ¯å¦ç¸çï¼åé¢ç>0åªæ¯é¿å ä»£ç æ¥é 4566 translate.node.get(translateNode).whole = false; //å·²ç»è¢«æåäºï¼ä¸æ¯æ´ä½ç¿»è¯äº 4567 //è¿æ¶ï¼ä¹é»è®¤ç»å ¶èµå¼æä½ï¼å°èªå®ä¹æ¯è¯å¹é åçç»æè¿è¡èµäº 4568 }else{ 4569 translate.node.get(translateNode).whole = true; //æªæåï¼æ¯æ´ä½ç¿»è¯ 4570 } 4571 //æåå å ¥å° nodeQueue ç对象ã 妿é¿åº¦ä¸º0ï¼é£å°±æ¯è¿æ²¡æå å ¥å° translate.nodeQueue ä¸ï¼å¯è½å ¨è¢«èªå®ä¹æ¯è¯å½ä¸äº 4572 var addQueueObjectArray = []; 4573 4574 //console.log(textArray); 4575 for(var tai = 0; tai<textArray.length; tai++){ 4576 if(textArray[tai].trim().length == 0){ 4577 continue; 4578 } 4579 4580 /* èªå®ä¹æ¯è¯ - 忽ç¥ç¿»è¯ææ¬ ï¼ å¨æ¬æ¹æ³çä¸é¢å·²ç»å®æäºè¯å«ï¼è¿éå°±ä¸åéè¦äº 4581 //夿æ¯å¦åºç°å¨èªå®ä¹å¿½ç¥å符串 4582 if(translate.ignore.text.indexOf(textArray[tai].trim()) > -1){ 4583 //console.log(textArray[tai]+' æ¯å¿½ç¥ç¿»è¯çææ¬ï¼ä¸ç¿»è¯'); 4584 continue; 4585 } 4586 */ 4587 4588 /* èªå®ä¹æ¯è¯ï¼å¨æ¬æ¹æ³çä¸é¢å·²ç»å®æäºè¯å«ï¼è¿éå°±ä¸åéè¦äº 4589 //夿æ¯å¦åºç°å¨èªå®ä¹æ¯è¯ç 4590 if(typeof(translate.temp_nomenclature[translate.language.getLocal()]) != 'undefined'){ 4591 if(translate.temp_nomenclature[translate.language.getLocal()].indexOf(textArray[tai].trim()) > -1){ 4592 //console.log(textArray[tai]+' æ¯èªå®ä¹æ¯è¯ï¼ä¸ç¿»è¯'); 4593 continue; 4594 } 4595 } 4596 */ 4597 4598 var newAddQueueArray = translate.addNodeToQueueAnalysis(uuid, node, textArray[tai], attribute); 4599 //console.log(newAddQueueArray) 4600 Array.prototype.push.apply(addQueueObjectArray, newAddQueueArray); 4601 } 4602 4603 //console.log('æåå å ¥è¿nodequeueçæ°éï¼'+addQueueObjectArray.length); 4604 //console.log(addQueueObjectArray); 4605 4606 if(addQueueObjectArray.length == 0){ 4607 //没æå å ¥å° nodeQueue ä¸ï¼é£ä¹ä¹å°±æ¯å¨èªå®ä¹æ¯è¯è¿ä¸å±ï¼å°±å·²ç»å®æäºæ¸²æï¼æ¤æ¶è¦è§¦åç¸å ³é©å 4608 // translate.node è®°å½ 4609 4610 // è®°å½å½åæ translate.js æè§¦åç¿»è¯ä¹å渲æå°domç颿¾ç¤ºçæ¶é´ï¼13使¶é´æ³ 4611 translate.node.get(translateNode).lastTranslateRenderTime = Date.now(); 4612 //å°å ·ä½éè¿ææ¬ç¿»è¯æ¥å£è¿è¡ç¿»è¯çææ¬è®°å½å° translate.node.data 4613 translate.node.get(translateNode).translateTexts = {}; //è¿éå ¨é¨å½ä¸äºï¼æä»¥æ ¹æ¬æ²¡æèµ°ç¿»è¯æ¥å£çææ¬ 4614 //å°ç¿»è¯å®æåè¦æ¾ç¤ºåºçææ¬è¿è¡è®°å½ 4615 translate.node.get(translateNode).resultText = translate.element.nodeAnalyse.get(node, attribute).text; //ç´æ¥è·åå½ånodeæ¾ç¤ºåºæ¥çææ¬ä½ä¸ºæåçç»æçææ¬ 4616 4617 //å°å ¶å å ¥ translate.history.translateTexts ä¸ 4618 translate.history.translateText.add(translate.node.get(translateNode).originalText, translate.node.get(translateNode).resultText); 4619 } 4620 4621 }, 4622 4623 4624 4625 /* 4626
4627 æå¡äºä¸é¢ç addNodeToQueue ï¼ç¨äºåºåä¸åtypeæ åµï¼è¿è¡è°ç¨æ¤å å ¥ translate.nodeQueue 4628 uuid, node, attribute è¿äºä¸ªåæ°è¯´æè§ addNodeToQueue çåæ°è¯´æï¼ç¸å 4629 4630 word è¦å®é è¿è¡ç¿»è¯çææ¬ï¼ä¹å°±æ¯è¦æå®æ¿æ¥è¿è¡éè¿åç«¯ç¿»è¯æ¥å£è¿è¡ç¿»è¯çææ¬ 4631 lang å½åè¦ç¿»è¯çææ¬çè¯ç§ï¼å¦ english 4632 beforeText åè§ translate.nodeQueue 注éä¸ç¬¬ä¸ç»´çè§£é 4633 afterText åè§ translate.nodeQueue 注éä¸ç¬¬ä¸ç»´çè§£é 4634 4635 4636 è¿å: 4637 å å ¥ nodeQueue åç对象ã 4638 è¿éè·addNodeQueueItemæ¹æ³è¿å䏿 ·ï¼åªä¸è¿ addNodeQueueItem æ¹æ³è¿åçæ¯ä¸ä¸ªï¼èè¿éæ¯å¤ä¸ªï¼æ°ç»çå½¢å¼ã 4639 妿ä¸ä¸ªä¹æ²¡æå å ¥å° nodeQueue,é£ä¹è¿éè¿åçæ°ç»é¿åº¦ä¾¿æ¯0 4640 */ 4641 addNodeToQueueAnalysis:function(uuid, node, text, attribute){ 4642 //è·åå½åæ¯ä»ä¹è¯ç§ 4643 //console.log('uuid:'+uuid+', text:'+text+', attribute:'+attribute+'node:'); 4644 //console.log(node); 4645 //var langs = translate.language.get(text); 4646 var textRecognition = translate.language.recognition(text); 4647 var langs = textRecognition.languageArray; 4648 //console.log('langs'); 4649 //console.log(langs); 4650 4651 4652 //è¿æ»¤æè¦è½¬æ¢ä¸ºçç®æ è¯ç§ï¼æ¯å¦è¦è½¬ä¸ºè±è¯ï¼é£å°±å°æ¬æ¥æ¯è±è¯çé¨åè¿æ»¤æï¼ä¸ç¨åç¿»è¯äº 4653 if(typeof(langs[translate.to]) != 'undefined'){ 4654 delete langs[translate.to]; 4655 } 4656 4657 var isWhole = translate.whole.isWhole(node); 4658 //console.log('isWhole:'+isWhole+', '+text); 4659 4660 //è®°å½æåå å ¥ nodeQueue çï¼å¦æå å ¥äºå¤ä¸ªï¼é£å°±æ¯å¤ä¸ªæ°ç»ï¼å¦æé¿åº¦ä¸º0ï¼é£å°±æ¯å¥ä¹æ²¡å å ¥äº 4661 var addNodeQueueArray = []; 4662 4663 if(!isWhole){ 4664 //å¸¸è§æ¹å¼ï¼è¿è¡è¯ç§åç±» 4665 4666 4667 /* if(this.nodeQueue[lang] == null || typeof(this.nodeQueue[lang]) == 'undefined'){ 4668 this.nodeQueue[lang] = new Array(); 4669 } 4670 //å建äºç»´æ°ç» 4671 if(this.nodeQueue[lang][key] == null || typeof(this.nodeQueue[lang][key]) == 'undefined'){ 4672 this.nodeQueue[lang][key] = new Array(); 4673 } 4674 */ 4675 //console.log(langs); 4676 4677 for(var lang in langs) { 4678 if (!langs.hasOwnProperty(lang)) { 4679 continue; 4680 } 4681 //å建äºç»´æ°ç»ï¼ key为è¯ç§ï¼å¦ english 4682 /* 4683 æ¾å°äº translate.addNodeQueueItem è¿è¡å¤æ 4684 if(translate.nodeQueue[uuid]['list'][lang] == null || typeof(translate.nodeQueue[uuid]['list'][lang]) == 'undefined'){ 4685 translate.nodeQueue[uuid]['list'][lang] = new Array(); 4686 } 4687 */ 4688 //console.log('|'+langs[lang].length); 4689 //éååºè¯¥è¯ç§ä¸æåªäºè¯éè¦ç¿»è¯ 4690 for(var word_index = 0; word_index < langs[lang].list.length; word_index++){ 4691 //console.log('start:'+word_index) 4692 //console.log(langs[lang].list[word_index]); 4693 if(typeof(langs[lang].list[word_index]) == 'undefined' || typeof(langs[lang].list[word_index]['text']) == 'undefined'){ 4694 //ç论ä¸åºè¯¥ä¸ä¼ï¼ä½å¤å ä¸ªå¤æ 4695 continue; 4696 } 4697 var word = langs[lang].list[word_index]['text']; //è¦ç¿»è¯çè¯ 4698 var beforeText = langs[lang].list[word_index]['beforeText']; 4699 var afterText = langs[lang].list[word_index]['afterText']; 4700 4701 //console.log(lang+' - '+word+', attribute:'+attribute); 4702 var addQueue = translate.addNodeQueueItem(uuid, node, word, attribute, lang, beforeText, afterText); 4703 if(addQueue != null){ 4704 addNodeQueueArray.push(addQueue); 4705 } 4706 4707 /* 4708 var hash = translate.util.hash(word); //è¦ç¿»è¯çè¯çhash 4709 //å建ä¸ç»´æ°ç»ï¼ key为è¦éè¿æ¥å£ç¿»è¯çææ¬è¯æå¥åç hash ï¼æ³¨æå¹¶ä¸æ¯nodeçææ¬ï¼èæ¯nodeæååçææ¬ï¼ 4710 if(translate.nodeQueue[uuid]['list'][lang][hash] == null || typeof(translate.nodeQueue[uuid]['list'][lang][hash]) == 'undefined'){ 4711 translate.nodeQueue[uuid]['list'][lang][hash] = new Array(); 4712 4713 translate.nodeQueue[uuid]['list'][lang][hash]['nodes'] = new Array(); 4714 translate.nodeQueue[uuid]['list'][lang][hash]['original'] = word; 4715 translate.nodeQueue[uuid]['list'][lang][hash]['translateText'] = translate.nomenclature.dispose(word); //èªå®ä¹æ¯è¯å¤ç 4716 //translate.nodeQueue[uuid]['list'][lang][hash]['beforeText'] = beforeText; 4717 //translate.nodeQueue[uuid]['list'][lang][hash]['afterText'] = afterText; 4718 //translate.nodeQueue[uuid]['list'][lang][hash]['attribute'] = attribute; //æ¾å ¥ nodes[index][attribute] å ç´ ä¸ 4719 4720 //å ¶ä¸keyï¼ nodes æ¯ç¬¬åç»´æ°ç»ï¼éé¢åæ¾å ·ä½çnodeå ç´ å¯¹è±¡ 4721 4722 4723 //console.log(translate.nodeQueue[uuid]['list'][lang][hash]); 4724 } 4725 4726 var isEquals = false; //queue䏿¯å¦å·²ç»å å ¥è¿è¿ä¸ªnodeäºï¼å½ç¶æ¯åä¸hashåä¸nodeæ åµï¼
4727 if(typeof(node.isSameNode) != 'undefined'){ //æ¯æ isSameNode æ¹æ³å¤æå¯¹è±¡æ¯å¦ç¸ç 4728 for(var node_index = 0; node_index < translate.nodeQueue[uuid]['list'][lang][hash]['nodes'].length; node_index++){ 4729 if(node.isSameNode(translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][node_index]['node'])){ 4730 //ç¸åï¼é£å°±ä¸ç¨å¨åå ¥äº 4731 //console.log('ç¸åï¼é£å°±ä¸ç¨å¨åå ¥äº') 4732 isEquals = true; 4733 //console.log(node) 4734 continue; 4735 } 4736 } 4737 } 4738 if(isEquals){ 4739 //ç¸åï¼é£å°±ä¸ç¨å¨åå ¥äº 4740 continue; 4741 } 4742 4743 //å¾äºç»´æ°ç»nodesä¸è¿½å nodeå ç´ 4744 var nodesIndex = translate.nodeQueue[uuid]['list'][lang][hash]['nodes'].length; 4745 translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][nodesIndex] = new Array(); 4746 translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][nodesIndex]['node']=node; 4747 translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][nodesIndex]['attribute']=attribute; 4748 translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][nodesIndex]['beforeText'] = beforeText; 4749 translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][nodesIndex]['afterText'] = afterText; 4750 4751 */ 4752 4753 //console.log('end:'+word_index) 4754 } 4755 4756 } 4757 4758 4759 4760 4761 }else{ 4762 //ç´æ¥ç¿»è¯æ´ä¸ªå ç´ å çå 容ï¼ä¸ååè¯ç§åç±» 4763 var lang = translate.language.recognition_languageName_force(textRecognition); 4764 //console.log(lang+' - '+text); 4765 var addQueue = translate.addNodeQueueItem(uuid, node, text, attribute, lang, '', ''); 4766 if(addQueue != null){ 4767 addNodeQueueArray.push(addQueue); 4768 } 4769 } 4770 4771 //console.log('-----'+addNodeQueueArray.length); 4772 return addNodeQueueArray; 4773 }, 4774 4775 /* 4776 4777 æå¡äºä¸é¢ç addNodeToQueue ï¼ç¨äºåºåä¸åtypeæ åµï¼è¿è¡è°ç¨æ¤å å ¥ translate.nodeQueue 4778 uuid, node, attribute è¿äºä¸ªåæ°è¯´æè§ addNodeToQueue çåæ°è¯´æï¼ç¸å 4779 4780 word è¦å®é è¿è¡ç¿»è¯çææ¬ï¼ä¹å°±æ¯è¦æå®æ¿æ¥è¿è¡éè¿åç«¯ç¿»è¯æ¥å£è¿è¡ç¿»è¯çææ¬ 4781 lang å½åè¦ç¿»è¯çææ¬çè¯ç§ï¼å¦ english 4782 beforeText åè§ translate.nodeQueue 注éä¸ç¬¬ä¸ç»´çè§£é 4783 afterText åè§ translate.nodeQueue 注éä¸ç¬¬ä¸ç»´çè§£é 4784 4785 è¿åå¼å¤æ ä¸ä¸º nullï¼åæ¯æåå å ¥äº nodeQueue ï¼è¿åå å ¥åç translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][nodesIndex] ,å å«è¿äºï¼ 4786 afterText: 4787 attribute: 4788 beforeText: 4789 node: 4790 4791 */ 4792 addNodeQueueItem:function(uuid, node, word, attribute, lang, beforeText, afterText){ 4793 //console.log('uuid:'+uuid+', word:'+word+', attribute:'+attribute+', lang:'+lang+', beforeText:'+beforeText+', afterText:'+afterText+', node:'); 4794 //console.log(node); 4795 4796 //å建äºç»´æ°ç»ï¼ key为è¯ç§ï¼å¦ english 4797 if(translate.nodeQueue[uuid]['list'][lang] == null || typeof(translate.nodeQueue[uuid]['list'][lang]) == 'undefined'){ 4798 translate.nodeQueue[uuid]['list'][lang] = new Array(); 4799 } 4800 //console.log(word) 4801 //var word = text; //è¦ç¿»è¯çææ¬ 4802 var hash = translate.util.hash(word); //è¦ç¿»è¯çææ¬çhash 4803 4804 //å建ä¸ç»´æ°ç»ï¼ key为è¦éè¿æ¥å£ç¿»è¯çææ¬è¯æå¥åç hash ãè¿éç¿»è¯çææ¬ä¹å°±æ¯æ´ä¸ªnodeå ç´ çå 容äºï¼ä¸ç¨å¨åæåäº 4805 if(translate.nodeQueue[uuid]['list'][lang][hash] == null || typeof(translate.nodeQueue[uuid]['list'][lang][hash]) == 'undefined'){ 4806 translate.nodeQueue[uuid]['list'][lang][hash] = new Array(); 4807 4808 /* 4809 * å建åç»´æ°ç»ï¼åæ¾å ·ä½æ°æ® 4810 * key: nodes å å«äºè¿ä¸ªhashçnodeå ç´ çæ°ç»éåï¼array å¤ä¸ªãå ¶ä¸ 4811 nodes[index]['node'] åæ¾å½åçnodeå ç´ 4812 nodes[index]['attribute'] åæ¾å½åhashï¼ä¹å°±æ¯ç¿»è¯ææ¬éå¯¹çæ¯ä»ä¹ï¼æ¯nodeæ¬èº«ï¼nodeValueï¼ï¼è¿æ¯ node çæä¸ªå±æ§ï¼æ¯å¦title屿§ã妿è¿éä¸ä¸ºç©ºï¼é£å°±æ¯é对ç屿§æä½ç 4813 * key: original åå§çè¦ç¿»è¯çè¯æå¥åï¼htmlå è½½å®æä½è¿æ²¡ç¿»è¯åçææ¬ï¼ç¨äºæ¯æå½å页é¢å¤æ¬¡è¯ç§ç¿»è¯åæ¢èæ é跳转 4814 * beforeTextãafterText:è§ translate.nodeQueue ç说æ 4815 */ 4816 translate.nodeQueue[uuid]['list'][lang][hash]['nodes'] = new Array(); 4817 translate.nodeQueue[uuid]['list'][lang][hash]['original'] = word; 4818 //èªå®ä¹æ¯è¯å¤ç卿¤åé¢å·²ç»æ§è¡è¿äºï¼æä»¥è¿ä¸ªåºå¼ï¼ä¸éè¦å¤çèªå®ä¹æ¯è¯é¨åäº 4819 //translate.nodeQueue[uuid]['list'][lang][hash]['translateText'] = translate.nomenclature.dispose(word); 4820 translate.nodeQueue[uuid]['list'][lang][hash]['translateText'] = word; 4821 //console.log(word) 4822 4823 4824 4825 //å ¶ä¸keyï¼ nodes æ¯ç¬¬åç»´æ°ç»ï¼éé¢åæ¾å ·ä½çnodeå ç´ å¯¹è±¡ 4826 } 4827 4828 4829 var isEquals = false; //queue䏿¯å¦å·²ç»å å ¥è¿è¿ä¸ªnodeäºï¼å½ç¶æ¯åä¸hashåä¸nodeä¸åä¸ attributeç æ åµï¼
4830 if(typeof(node.isSameNode) != 'undefined'){ //æ¯æ isSameNode æ¹æ³å¤æå¯¹è±¡æ¯å¦ç¸ç 4831 for(var node_index = 0; node_index < translate.nodeQueue[uuid]['list'][lang][hash]['nodes'].length; node_index++){ 4832 if(node.isSameNode(translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][node_index]['node'])){ 4833 //å¨å¤æ attribute æ¯å¦ç¸å 4834 //console.log('attribute:'+attribute+", 对æ¯ç :"+translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][node_index].attribute) 4835 if(attribute === translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][node_index].attribute){ 4836 //ç¸åï¼é£å°±ä¸ç¨å¨åå ¥äº 4837 isEquals = true; 4838 } 4839 //console.log(node) 4840 continue; 4841 } 4842 } 4843 } 4844 if(isEquals){ 4845 //ç¸åï¼é£å°±ä¸ç¨å¨åå ¥äº 4846 return null; 4847 } 4848 4849 //å¾äºç»´æ°ç»nodesä¸è¿½å nodeå ç´ 4850 var nodesIndex = translate.nodeQueue[uuid]['list'][lang][hash]['nodes'].length; 4851 translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][nodesIndex] = new Array(); 4852 translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][nodesIndex]['node']=node; 4853 translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][nodesIndex]['attribute']=attribute; 4854 translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][nodesIndex]['beforeText'] = beforeText; 4855 translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][nodesIndex]['afterText'] = afterText; 4856 4857 return translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][nodesIndex]; 4858 /* 4859 //è®°å½è¿ä¸ªnode 4860 if(translate.node.get(node) == null){ 4861 translate.node.set(node, {}); 4862 } 4863 4864 if(typeof(translate.node.get(node).hitNomenclatureArray) == 'undefined'){ 4865 translate.node.get(node).hitNomenclatureArray = new Map(); 4866 } 4867 translate.node.get(node).translateTexts[word] = null; //设置è¦è¿è¡éè¿ææ¬ç¿»è¯æ¥å£ç¿»è¯çæå 4868 */ 4869 4870 }, 4871 4872 //å ¨é¨ç¿»è¯ï¼nodeå å®¹å ¨é¨ç¿»è¯ï¼è䏿¯è¿è¡è¯ç§æåï¼ç´æ¥å¯¹nodeæ¬èº«çå ¨é¨å 容æ¿åºæ¥è¿è¡ç´æ¥å ¨é¨ç¿»è¯ 4873 whole:{ 4874 isEnableAll:false, //æ¯å¦å¼å¯å¯¹æ´ä¸ªhtml页é¢çæ´ä½ç¿»è¯ï¼ä¹å°±æ¯æ´ä¸ªé¡µé¢ä¸ææåå¨çè½è¢«ç¿»è¯çå ¨é¨ä¼éç¨æ´ä½ç¿»è¯çæ¹å¼ãé»è®¤æ¯ falseä¸å¼å¯ 4875 4876 enableAll:function(){ 4877 translate.whole.isEnableAll = true; 4878 }, 4879 4880 /* 4881 ä¸ä¸ä¸ä¸ªï¼ä¹å°±æ¯ class tag id åå«åå¨å å ¥çå¼ã使ç¨åèï¼http://translate.zvo.cn/42563.html 4882 */ 4883 class:[], 4884 tag:[], 4885 id:[], 4886 4887 //è¿è¡æ¶åºç°èªæ£å¹¶å¨æµè§å¨æ§å¶å°æç¤ºæ§ææ¬ã 4888 //卿§è¡ç¿»è¯ï¼ä¹å°±æ¯ execute() æ¶ï¼ä¼è°ç¨æ¤æ¹æ³ã 4889 executeTip:function(){ 4890 if(translate.whole.class.length == 0 && translate.whole.tag.length == 0 && translate.whole.id.length == 0){ 4891 4892 }else{ 4893 translate.log('æ¨å¼å¯äº translate.whole æ¤æ¬¡è¡ä¸ºé¿å¼äºæµè§å¨ç«¯çææ¬è¯ç§èªå¨è¯å«ï¼èæ¯æ´åçç´æ¥å¯¹æä¸ªå ç´ çæ´ä¸ªææ¬è¿è¡ç¿»è¯ï¼å¾å¯è½ä¼äº§çé常大çç¿»è¯éï¼è¯·è°¨æ ï¼æå ³æ¯æ¥ç¿»è¯å符ç说æï¼å¯åèï¼ http://translate.zvo.cn/42557.html '); 4894 } 4895 4896 if(translate.whole.tag.indexOf('html') > -1){ 4897 translate.log('èªæ£åç°æ¨è®¾ç½®äº translate.whole.tag å ¶ä¸æ html ï¼è¿ä¸ªæ¯ä¸çæçï¼æå¤§åªå è®¸è®¾ç½®å° body '); 4898 } 4899 }, 4900 4901 //å½åå ç´ æ¯å±äºå ¨é¨ç¿»è¯å®ä¹çå ç´ 4902 /* 4903 ä¼ å ¥ä¸ä¸ªå ç´ ï¼å¤æè¿ä¸ªå ç´ æ¯å¦æ¯è¢«å å«çã è¿ä¸ªä¼æ¾ç¶ç±»ï¼ççç¶ç±»ä¸æ¯å¦å å«å¨å ¶ä¹ä¸ã 4904 return trueæ¯å¨å ¶ä¸ï¼falseä¸åå ¶ä¸ 4905 */ 4906 isWhole:function(ele){ 4907 4908 if(translate.whole.isEnableAll){ 4909 return true; 4910 } 4911 4912 //å¦æè®¾ç½®äº class|tag|id å ¶ä¸æä¸ªï¼æè all=true ï¼é£ä¹å°±æ¯å¯ç¨ï¼å乿ªå¯ç¨ 4913 if((translate.whole.class.length == 0 && translate.whole.tag.length == 0 && translate.whole.id.length == 0) && translate.whole.isEnableAll == false){ 4914 //æªè®¾ç½®ï¼é£ä¹ç´æ¥è¿åfalse 4915 return false; 4916 } 4917 if(ele == null || typeof(ele) == 'undefined'){ 4918 return false; 4919 } 4920 4921 4922 var parentNode = ele; 4923 var maxnumber = 100; //æå¤§å¾ªç¯æ¬¡æ°ï¼é¿å æ»å¾ªç¯ 4924 while(maxnumber-- > 0){ 4925 if(parentNode == null || typeof(parentNode) == 'undefined'){ 4926 //没æç¶å ç´ äº 4927 return false; 4928 } 4929 4930 //夿Tag 4931 //var tagName = parentNode.nodeName.toLowerCase(); //tagååï¼å°å 4932 var nodename = translate.element.getNodeName(parentNode).toLowerCase(); //tagååï¼å°å 4933 if(nodename.length > 0){ 4934 //ænodename 4935 if(nodename == 'html' || nodename == '#document'){ 4936 //ä¸å±å ç´ å·²ç»æ¯é¡¶çº§å ç´ äºï¼é£è¯å®å°±ä¸æ¯äº 4937 return false; 4938 } 4939 if(translate.whole.tag.indexOf(nodename) > -1){ 4940 //åç°ignore.tag å½åæ¯å¤äºè¢«å¿½ç¥ç tag 4941 return true; 4942 } 4943 } 4944 4945 4946 //夿class name 4947 if(parentNode.className !== null && typeof(parentNode.className) === 'string'){ 4948 var classNames = parentNode.className; 4949 if(classNames == null || typeof(classNames) != 'string'){ 4950 continue; 4951 } 4952 //console.log('className:'+typeof(classNames)); 4953 //console.log(classNames); 4954 classNames = classNames.trim().split(' '); 4955 for(var c_index = 0; c_index < classNames.length; c_index++){ 4956 if(classNames[c_index] != null && classNames[c_index].trim().length > 0){ 4957 //ææçclass nameï¼è¿è¡å¤æ 4958 if(translate.whole.class.indexOf(classNames[c_index]) > -1){ 4959 //åç°ignore.class å½åæ¯å¤äºè¢«å¿½ç¥ç class 4960 return true; 4961 } 4962 } 4963 } 4964 } 4965 4966 //夿id 4967 if(parentNode.id != null && typeof(parentNode.id) != 'undefined'){ 4968 //ææçclass nameï¼è¿è¡å¤æ 4969 if(translate.whole.id.indexOf(parentNode.id) > -1){ 4970 //åç°ignore.id å½åæ¯å¤äºè¢«å¿½ç¥ç id 4971 return true; 4972 } 4973 } 4974 4975 //èµäºå¤æçå ç´ åä¸ä¸çº§ 4976 parentNode = parentNode.parentElement; 4977 } 4978 4979 return false; 4980 } 4981 }, 4982 4983 language:{ 4984 4985 4986 4987 /* 4988 è±è¯çåç§è¯ç§ï¼ä¹å°±æ¯å¨è±è¯26ä¸ªåæ¯çåºç¡ä¸å äºç¹å«çç¹æ®åæ¯å¦æçä¸ç§è¯è¨ï¼èè¿äºè¯è¨æ¯æ²¡æ³ç´æ¥éè¿è¯å«å符æ¥å¤æåºæ¯åªç§è¯ç§ç 4989 4990 æ³è¯ãæå¤§å©è¯ãå¾·è¯ãè¡èçè¯ 4991 4992 è¦åºå¼ï¼ç¨ä¸é¢ç systems ã name 4993 */ 4994 englishVarietys : ['french','italian','deutsch', 'portuguese'], 4995 4996 /* 4997 è¯è¨ç书åä½ç³»ï¼åæåªå 个è¯è¨ä½ç³»ã 4998 è¿éåºåï¼ä¸»è¦æ¯åçº¯ä»æåç»æé¿è¿è¡åºåçã 4999 5000 å ¶ä¸ 5001 key : è¯è¨ä½ç³»çåå 5002 value: è¯è¨ä½ç³»ç详ç»ä¿¡æ¯ 5003 direction: 书忹å ï¼å½ååªæ¯è®°å½ï¼æ å ¶ä»æä¹ï¼ 5004 remark: 说æå¤æ³¨ ï¼å½ååªæ¯è®°å½ï¼æ å ¶ä»æä¹ï¼ 5005 languages: è¿ä¸ªè¯è¨ä½ç³»ä¸ï¼æåªäºå ·ä½è¯ç§ï¼ translate.js çè¯è¨æ è¯ 5006 5007 */ 5008 systems : { 5009 5010 // æä¸åæ¯ä½ç³» 5011 latin:{ 5012 direction: "left-to-right", // 书忹å 5013 coreFeatures: "åºç¡åæ¯26个ï¼A-Zï¼ï¼é¨åè¯è¨æ·»å åé³ç¬¦å·ï¼å¦Ã©ãñãüï¼ï¼ä»å·¦å°å³ä¹¦å", 5014 languages: [ //å å«çè¯ç§ 5015 "english", "latin", "french", "spanish", "deutsch", "portuguese", 5016 "italian", "è¶åè¯", "马æ¥è¯", "å°å°¼è¯",
5017 "åè³å ¶è¯", "æ³¢å °è¯", "è·å °è¯", "çå ¸è¯", "éæ´²è¯¸è¯ï¼å¤æ°ï¼", 5018 "ç¾æ´²è¯¸è¯ï¼å¤æ°ï¼", "è²å¾å®¾è¯", "åè¨å è¯ï¼ç°ä»£æä¸åï¼" 5019 ] 5020 }, 5021 5022 // æ±åä½ç³»ï¼è¡¨ææåï¼ 5023 chinese:{ 5024 direction: "left-to-right", 5025 coreFeatures: "表ææåï¼ååç¬ç«ï¼å¯ç»åæè¯ï¼ç¬ç»å¤æï¼ç°ä»£å¤æ¨ªå书å", 5026 languages: [ 5027 "chinese_simplified", "chinese_traditional", "japanese", "korean" 5028 ] 5029 }, 5030 5031 //é¿æä¼¯åæ¯ä½ç³» 5032 arabic:{ 5033 direction: "right-to-left", 5034 coreFeatures: "表ææåï¼ååç¬ç«ï¼å¯ç»åæè¯ï¼ç¬ç»å¤æï¼ç°ä»£å¤æ¨ªå书å", 5035 languages: [ 5036 "é¿æä¼¯è¯", "æ³¢æ¯è¯", "ä¹å°é½è¯", "æé®æ®è¯ï¼å·´åºæ¯å¦ï¼","豪è¨è¯ï¼è¥¿éï¼", "æ®ä»å¾è¯", 5037 ] 5038 }, 5039 5040 //西éå°åæ¯ä½ç³» 5041 cyrillic:{ 5042 direction: "left-to-right", 5043 coreFeatures: "æºäºå¸è 忝ï¼åæ¯å½¢æç¬ç¹ï¼å¦Ð¿ãвãмï¼ï¼é¨å忝䏿ä¸åæ¯å½¢ä¼¼ä½åé³ä¸å", 5044 languages: [ 5045 "ä¿è¯", "ä¹å å °è¯", "ç½ä¿ç½æ¯è¯", "ä¿å å©äºè¯", "å¡å°ç»´äºè¯ï¼å®æ¹ï¼" 5046 ] 5047 }, 5048 5049 //æ³°è¯ä½ç³» 5050 thai:{ 5051 direction: "left-to-right", 5052 coreFeatures: "å é³éæ æåï¼åæ¯å¼¯æ²ä¼ç¾ï¼å«é³è°ç¬¦å·ï¼å½±åè¯ä¹ï¼", 5053 languages: [ 5054 "thai" 5055 ] 5056 }, 5057 5058 //å ¶ä»åç»è¡¥å å§ 5059 5060 }, 5061 5062 /* 5063 çæ translate.language.english è¿ç§è¯ç§å¯¹è±¡ï¼éè¿ translate.language.systems 5064 */ 5065 generateLanguageNameObject:function(){ 5066 var languages = new Map(); 5067 for(var key in translate.language.systems){ 5068 if (!translate.language.systems.hasOwnProperty(key)) { 5069 continue; 5070 } 5071 for(var li = 0; li < translate.language.systems[key].languages.length; li++){ 5072 //console.log(translate.language.systems[key].languages[li]) 5073 languages.set(translate.language.systems[key].languages[li], { 5074 system: key 5075 }); 5076 } 5077 } 5078 return languages; 5079 }, 5080 5081 /* 5082 è¯è¨è¡¨ç¤ºï¼å±æ§ç¸å ³ï¼ä»ä¼å¨translate.js å è½½å®åèªå¨åå§åï¼ä» translate.language.systems ä¸éååºæ¥ï¼èµäº translate.language.name 5083 å®éé¢çå¼ä¸ºï¼ 5084 translate.language.map.get('english') = { 5085 system:'latin' //æå±ç³»ç»è¯æ , ä¹å°±æ¯ translate.language.systems[key] ç key 5086 } 5087 5088 å®ä¼å¨ translate.execute() æ¯è¿è¡åå§åï¼éè¿è§¦å translate.language.generateLanguageNameObject èµäºå¼ 5089 */ 5090 map_data: null, //è¿æ¯ä¸ä¸ªmap 5091 map: function(){ 5092 if(translate.language.map_data == null){ 5093 translate.language.map_data = translate.language.generateLanguageNameObject(); 5094 } 5095 return translate.language.map_data; 5096 }, 5097 5098 5099 //å½åæ¬å°è¯ç§ï¼æ¬å°è¯è¨ï¼é»è®¤æ¯ç®ä½ä¸æãè®¾ç½®è¯·ä½¿ç¨ translate.language.setLocal(...)ãä¸å¯ç´æ¥ä½¿ç¨ï¼ä½¿ç¨éç¨ getLocal() 5100 local:'', 5101 5102 /* 5103 * v3.12å¢å , æ¯å¦ä¼ç¿»è¯æ¬å°è¯ç§ï¼é»è®¤æ¯falseï¼ä¸ä¼ç¿»è¯ã 5104 * æ¯å¦å½åè®¾ç½®çæ¬å°è¯ç§æ¯ç®ä½ä¸æï¼ 使¯ç½é¡µä¸ä¹æä¸æ®µè±æï¼ å¦æè®¾ç½®äºtranslate.to ä¸ºä¸æï¼ä¹å°±æ¯è¦ä»¥ä¸ææ¾ç¤º é»è®¤æ¯falseçæ åµä¸ï¼æ´ä¸ªé¡µé¢æ¯ä¸ä¼è¢«ä»»ä½ç¿»è¯çï¼ä¹å°±æ¯æç飿®µè±æä¹ä¸ä¼è¿è¡ä»»ä½ç¿»è¯ï¼ä¾æ§æ¯æ¾ç¤ºè±æã 5105 * 妿è¿é设置为 trueï¼ åè±æä¹ä¼è¢«ç¿»è¯ï¼åªè¦ä¸æ¯ä¸æçï¼é½ä¼è¢«ç¿»è¯ä¸ºè¦æ¾ç¤ºçè¯ç§ï¼ä¹å°±æ¯é½ä¼è¢«ç¿»è¯ä¸ºä¸æã 5106 */ 5107 translateLocal:false, 5108 5109 /* 5110 ç¿»è¯è¯ç§èå´ 5111 æ¯å¦ä¼ å ¥ ['chinese_simplified','chinese_traditional','english'] åè¡¨ç¤ºä» å¯¹ç½é¡µä¸çç®ä½ä¸æãç¹ä½ä¸æãè±æ è¿è¡ç¿»è¯ï¼èç½é¡µä¸åºç°çå ¶ä»ç忝æ³è¯ãé©è¯åä¸ä¼è¿è¡ç¿»è¯ 5112 å¦æä¸ºç©º []ï¼åæ¯ç¿»è¯æ¶ï¼ç¿»è¯ç½é¡µä¸çææè¯ç§ 5113 设置æ¹å¼ä¸ºï¼ translate.language.translateLanguagesRange = ['chinese_simplified','chinese_traditional'] 5114 */ 5115 translateLanguagesRange: [], 5116 //ä¼ å ¥è¯ç§ãå ·ä½å¯ä¼ å ¥åªäºåèï¼ http://api.translate.zvo.cn/doc/language.json.html 5117 setLocal:function(languageName){ 5118 //translate.setUseVersion2(); //Set to use v2.x version 5119 translate.useVersion = 'v2'; 5120 translate.language.local = languageName; 5121 }, 5122 //è·åå½åæ¬å°è¯ç§ï¼æ¬å°è¯è¨ï¼é»è®¤æ¯ç®ä½ä¸æãè®¾ç½®è¯·ä½¿ç¨ translate.language.setLocal(...) 5123 getLocal:function(){ 5124 //夿æ¯å¦è®¾ç½®äºæ¬å°è¯ç§ï¼å¦ææ²¡è®¾ç½®ï¼èªå¨ç»å ¶è®¾ç½® 5125 if(translate.language.local == null || translate.language.local.length < 1){ 5126 translate.language.autoRecognitionLocalLanguage(); 5127 } 5128 return translate.language.local; 5129 }, 5130 /* 5131 è·åå½åè¯ç§ã 5132 æ¯å¦å½åè®¾ç½®çæ¬å°è¯ç§æ¯ç®ä½ä¸æï¼ç¨æ·å¹¶æªåæ¢å ¶ä»è¯ç§ï¼é£ä¹è¿ä¸ªæ¹æ³å°è¿åæ¬å°å½åçè¯ç§ï¼ä¹å°±æ¯çåäº translate.language.getLocal() 5133 å¦æç¨æ·åæ¢ä¸ºè±è¯è¿è¡æµè§ï¼é£ä¹è¿ä¸ªæ¹æ³å°è¿åç¿»è¯çç®æ è¯ç§ï¼ä¹å°±æ¯ english 5134 */ 5135 getCurrent:function(){ 5136 var to_storage = translate.storage.get('to'); 5137 if(to_storage != null && typeof(to_storage) != 'undefined' && to_storage.length > 0){ 5138 //ä¹åæè¿ä½¿ç¨ï¼å¹¶ä¸ä¸»å¨è®¾ç½®è¿ç®æ è¯ç§ 5139 return to_storage; 5140 } 5141 return translate.language.getLocal(); 5142 }, 5143 //å¦æç¬¬ä¸æ¬¡ç¨ï¼é»è®¤ä»¥ä»ä¹è¯ç§æ¾ç¤ºã 5144 //æ¯å¦æ¬å°å½åè¯ç§æ¯ç®ä½ä¸æï¼è¿é设置为englishï¼é£ä¹ç¨æ·ç¬¬ä¸æ¬¡ä½¿ç¨æ¶ï¼ä¼èªå¨ç¿»è¯ä¸ºenglishè¿è¡æ¾ç¤ºãå¦æç¨æ·æå¨åæ¢ä¸ºå ¶ä»è¯ç§æ¯å¦é©è¯ï¼é£ä¹å°±éµå¾ªç¨æ·æå¨åæ¢çä¸ºä¸»ï¼æ¾ç¤ºé©è¯ã 5145 setDefaultTo:function(languageName){ 5146 var to_storage = translate.storage.get('to'); 5147 if(to_storage != null && typeof(to_storage) != 'undefined' && to_storage.length > 0){ 5148 //ä¹åæè¿ä½¿ç¨ï¼å¹¶ä¸ä¸»å¨è®¾ç½®è¿ç®æ è¯ç§ï¼é£ä¹ä¸è¿è¡å¤ç 5149 }else{ 5150 //没æè®¾ç½®è¿ï¼è¿è¡å¤ç 5151 translate.storage.set('to', languageName); 5152 translate.to = languageName; 5153 } 5154 }, 5155 /* 5156 æ¸ é¤åå²ç¿»è¯è¯ç§çç¼å 5157 */ 5158 clearCacheLanguage:function(){ 5159 if(typeof(translate.language.setUrlParamControl_use) != 'undefined'){ 5160 if(translate.language.setUrlParamControl_use){ 5161 translate.log('ä½¿ç¨æç¤ºï¼') 5162 translate.log('translate.language.setUrlParamControl(...) çä½ç¨æ¯ å¯ä»¥éè¿URLä¼ ä¸ä¸ªè¯ç§ï¼æ¥æå®å½å页é¢ä»¥ä»ä¹è¯ç§æ¾ç¤ºã åèææ¡£ï¼ http://translate.zvo.cn/4075.html'); 5163 translate.log('translate.language.clearCacheLanguage() æ¯æ¸ é¤åå²ç¿»è¯è¯ç§ç¼åï¼ä¹å°±æ¯æ¸ é¤ä¹åæå®ç¿»è¯ä¸ºä»ä¹è¯ç§ã åèææ¡£ï¼http://translate.zvo.cn/4080.html') 5164 translate.log('å¦æä½ æ§è¡äº translate.language.setUrlParamControl(...) é£ä¹æ¯è¦æ ¹æ®urlä¼ åæ¥åæ¢è¯ç§çï¼ä½æ¯åé¢ååºç°äº translate.language.clearCacheLanguage() å®ä¼é»æ¢ translate.language.setUrlParamControl(...) å®ç设置ï¼å³ä½¿æurlä¼ éç¿»è¯ä¸ºä»ä¹è¯è¨ï¼ä¹ä¼å 为 translate.language.clearCacheLanguage() ç»æ¸ 餿ï¼ä½¿URLä¼ åçè¯ç§ä¸èµ·ä»»ä½ä½ç¨ã') 5165 } 5166 } 5167 translate.to = ''; 5168 translate.storage.set('to',''); 5169 }, 5170 //æ ¹æ®URLä¼ åæ§å¶ä»¥ä½ç§è¯ç§æ¾ç¤º 5171 //设置å¯ä»¥æ ¹æ®å½å访é®urlçæä¸ªgetåæ°æ¥æ§å¶ä½¿ç¨åªç§è¯è¨æ¾ç¤ºã 5172 //æ¯å¦å½åè¯ç§æ¯ç®ä½ä¸æï¼ç½é¡µurlæ¯http://translate.zvo.cn/index.html ,é£ä¹å¯ä»¥éè¿å¨urlåé¢å¢å language åæ°æå®ç¿»è¯è¯ç§ï¼æ¥ä½¿ç½é¡µå å®¹ä»¥è±æå½¢ææ¾ç¤º http://translate.zvo.cn/index.html?language=english 5173 setUrlParamControl:function(paramName){ 5174 translate.language.setUrlParamControl_use = true; //æ è®°å·²æ§è¡äº translate.language.setUrlParamControl ,ä» ä» åªæ¯æ è®°ï¼æ å ¶ä»ä½ç¨ 5175 if(typeof(paramName) == 'undefined' || paramName.length < 1){ 5176 paramName = 'language'; 5177 } 5178 var paramValue = translate.util.getUrlParam(paramName); 5179 if(typeof(paramValue) == 'undefined'){ 5180 return; 5181 } 5182 if(paramValue == '' || paramValue == 'null' || paramValue == 'undefined'){ 5183 return; 5184 } 5185 5186 translate.storage.set('to', paramValue); 5187 translate.to = paramValue; 5188 }, 5189 /* 5190 è·åç¿»è¯åºåçåå§ææ¬ï¼ç¿»è¯åçææ¬ã è¿éä¼æç©ºç½ç¬¦çè¿æ»¤æï¼åªè¿å纯æ¾ç¤ºçææ¬ 5191 ä¹å°±æ¯è·å translate.setDocument(...) å®ä¹çç¿»è¯åºåä¸ï¼ç¿»è¯åï¼è¦åä¸ç¿»è¯çææ¬ã 5192 å ¶ä¸åæ¯ translate.ignore.tag è¿ç§å¿½ç¥ç¿»è¯çæ ç¾ï¼
5192è¿éä¹ä¸ä¼è·åçï¼è¿éåªæ¯è·åå®é è¦åä¸ç¿»è¯çææ¬ã 5193 */ 5194 getTranslateAreaText:function(){ 5195 //v3.16.1 ä¼åï¼è·åæ¬å°è¯ç§ï¼é坹弿ºä¸å½åªå¯¹ readme é¨åè¿è¡ç¿»è¯çåºæ¯ï¼å°é对设置ç translate.setDocument() åºåçå ç´ çæ¾ç¤ºææ¬è¿è¡å¤å®è¯ç§ 5196 var translateAreaText = ''; //ç¿»è¯åºåå å½åçææ¬ 5197 5198 /** æå»ºèæå®¹å¨ï¼å°è¦ç¿»è¯çåºåæ¾å ¥èæå®¹å¨ï¼ä»¥ä¾¿åç»å¤ç **/ 5199 var virtualContainer = document.createElement('div'); // å建èæå®¹å¨ï¼å¤çã夿ä¹é½æ¯é对è¿ä¸ªèæå®¹å¨ 5200 if(translate.documents != null && typeof(translate.documents) != 'undefined' && translate.documents.length > 0){ 5201 // setDocuments æå®ç 5202 for(var docs_index = 0; docs_index < translate.documents.length; docs_index++){ 5203 var doc = translate.documents[docs_index]; 5204 if(typeof(doc) != 'undefined' && doc != null && typeof(doc.innerText) != 'undefined' && doc.innerText != null && doc.innerText.length > 0){ 5205 virtualContainer.appendChild(doc.cloneNode(true)); 5206 } 5207 } 5208 }else{ 5209 //æªä½¿ç¨ setDocumentsæå®ï¼é£å°±æ¯æ´ä¸ªç½é¡µäº 5210 //return document.all; //ç¿»è¯ææç è¿æ¯ v3.5.0ä¹åç 5211 //v3.5.0 ä¹åéç¨ æ¿ htmlçæä¸å±çdemoï¼è䏿¯ document.all æ¿å°å¯è½å å个dom 5212 if(typeof(document.head) != 'undefined'){ 5213 virtualContainer.appendChild(document.head.cloneNode(true)); 5214 } 5215 if(typeof(document.body) != 'undefined'){ 5216 virtualContainer.appendChild(document.body.cloneNode(true)); 5217 } 5218 } 5219 //console.log(virtualContainer); 5220 5221 5222 /** 对èæå®¹å¨ä¸çå ç´ è¿è¡å¤çï¼ç§»é¤å¿½ç¥ç tag ï¼è¿éææ¶å°±åªæ¯ç§»é¤å¿½ç¥çtagï¼ å ¶ä»å¿½ç¥çåç»åå ï¼ **/ 5223 // éåæ ç¾å表 5224 //console.log('---- remove element'); 5225 for (var i = 0; i < translate.ignore.tag.length; i++) { 5226 var tagName = translate.ignore.tag[i]; 5227 var elements = virtualContainer.querySelectorAll(tagName); 5228 // å° NodeList 转æ¢ä¸ºæ°ç» 5229 var elementArray = Array.prototype.slice.call(elements); 5230 // éåå¹¶ç§»é¤æ¯ä¸ªå¹é çå ç´ 5231 for (var j = 0; j < elementArray.length; j++) { 5232 var element = elementArray[j]; 5233 if (element.parentNode) { 5234 //console.log(element); 5235 element.parentNode.removeChild(element); 5236 } 5237 } 5238 } 5239 //console.log('---- remove element end'); 5240 5241 5242 /*** åè¿æ»¤å®åçææ¬å符 ***/ 5243 translateAreaText = virtualContainer.innerText; 5244 if(translateAreaText == null || typeof(translateAreaText) == 'undefined' || translateAreaText.length < 1){ 5245 //æªåå°ï¼é»è®¤èµäºç®ä½ä¸æ 5246 translate.language.local = 'chinese_simplified'; 5247 return; 5248 } 5249 // ç§»é¤ææç©ºç½å符ï¼å æ¬ç©ºæ ¼ãå¶è¡¨ç¬¦ãæ¢è¡ç¬¦çï¼ 5250 translateAreaText = translateAreaText.replace(/\s/g, ''); 5251 5252 //console.log('translateAreaText:\n'+translateAreaText); 5253 return translateAreaText; 5254 }, 5255 //èªå¨è¯å«å½å页颿¯ä»ä¹è¯ç§ 5256 autoRecognitionLocalLanguage:function(){ 5257 if(translate.language.local != null && translate.language.local.length > 2){ 5258 //已设置è¿äºï¼ä¸éè¦å设置 5259 return translate.language.local; 5260 } 5261 5262 var translateAreaText = translate.language.getTranslateAreaText(); 5263 5264 //é»è®¤èµäºç®ä½ä¸æ 5265 translate.language.local = 'chinese_simplified'; 5266 var recognition = translate.language.recognition(translateAreaText); 5267 //console.log(recognition); 5268 translate.language.local = recognition.languageName; 5269 return translate.language.local; 5270 /* v3.1ä¼å 5271 var langs = new Array(); //ä¸ä¸ä¸ªå符çè¯ç§æ¯ä»ä¹ï¼å½åå符å䏿°ç¬¬ä¸ä¸ªåç¬¦ãæ ¼å¼å¦ ['language']='english', ['chatstr']='a', ['storage_language']='english' è¿é颿3ä¸ªåæ°ï¼åå«ä»£è¡¨è¿ä¸ªå符å±äºé£ä¸ªè¯ç§ï¼å ¶å符æ¯ä»ä¹ãåå ¥äºåªç§è¯ç§çéåãå ä¸ºåæ¯éå·ï¼å¥å·ï¼ä¸è¬æ¯åå ¥æ¬èº«è¯ç§ä¸ï¼è䏿¯åå ¥ç¹æ®ç¬¦å·ä¸ã 5272 for(var i=0; i<bodyText.length; i++){ 5273 var charstr = bodyText.charAt(i); 5274 var lang = translate.language.getCharLanguage(charstr); 5275 if(lang == ''){ 5276 //æªè·åå°ï¼æªåç°æ¯ä»ä¹è¯è¨ 5277 //continue; 5278 lang = 'unidentification'; 5279 } 5280 langs.push(lang); 5281 } 5282 5283 //仿°ç»ä¸ååºç°é¢çæé«ç 5284 var newLangs = translate.util.arrayFindMaxNumber(langs); 5285 5286 //ç§»é¤æ°ç»ä¸çç¹æ®å符
5287 var index = newLangs.indexOf('specialCharacter'); 5288 if(index > -1){ 5289 newLangs.splice(index,1); //ç§»é¤æ°ç»ä¸çç¹æ®å符 5290 } 5291 5292 if(newLangs.length > 0){ 5293 //æ¾å°æåºåºç°é¢çæå¤ç 5294 translate.language.local = newLangs[0]; 5295 }else{ 5296 //没æï¼é»è®¤èµäºç®ä½ä¸æ 5297 translate.language.local = 'chinese_simplified'; 5298 } 5299 */ 5300 }, 5301 5302 /* 5303 * è·åå½åå符æ¯ä»ä¹è¯ç§ãè¿å弿¯ä¸ä¸ªè¯è¨æ è¯ï¼æ chinese_simplifiedç®ä½ä¸æãjapaneseæ¥è¯ãkoreané©è¯ã 5304 * str : node.nodeValue æ å¾çç node.alt ç 5305 * 妿è¯å¥é¿ï¼ä¼å ¨å¥ç¿»è¯ï¼ä»¥ä¿è¯ç¿»è¯çåç¡®æ§ï¼æé«å¯è¯»æ§ã 5306 * 妿è¯å¥çï¼ä¼èªå¨å°ç¹æ®å符ãè¦ç¿»è¯çç®æ è¯ç§ç»è¿æ»¤æï¼åªååºå ·ä½çè¦ç¿»è¯çç®æ è¯ç§ææ¬ 5307 * 5308 * è¿å åæ¾ä¸åè¯è¨çæ°ç»ï¼æ ¼å¼å¦ 5309 * [ 5310 "english":[ 5311 {beforeText: '', afterText: '', text: 'emoambue hag'}, 5312 ...... 5313 ], 5314 "japanese":[ 5315 {beforeText: ' ', afterText: ' ', text: 'ẽ '}, 5316 ...... 5317 ] 5318 ] 5319 * 5320 */ 5321 get:function(str){ 5322 //å°stræå为å个charè¿è¡å¤æ 5323 5324 var langs = new Array(); //å½åå符串å å«åªäºè¯è¨çæ°ç»ï¼å ¶å å¦ english 5325 var langStrs = new Array(); //åæ¾ä¸åè¯è¨çææ¬ï¼æ ¼å¼å¦ ['english'][0] = 'hello' 5326 var upLangs = []; //ä¸ä¸ä¸ªå符çè¯ç§æ¯ä»ä¹ï¼å½åå符å䏿°ç¬¬ä¸ä¸ªåç¬¦ãæ ¼å¼å¦ ['language']='english', ['chatstr']='a', ['storage_language']='english' è¿é颿3ä¸ªåæ°ï¼åå«ä»£è¡¨è¿ä¸ªå符å±äºé£ä¸ªè¯ç§ï¼å ¶å符æ¯ä»ä¹ãåå ¥äºåªç§è¯ç§çéåãå ä¸ºåæ¯éå·ï¼å¥å·ï¼ä¸è¬æ¯åå ¥æ¬èº«è¯ç§ä¸ï¼è䏿¯åå ¥ç¹æ®ç¬¦å·ä¸ã 5327 var upLangsTwo = []; //ä¸äºä¸ªå符çè¯ç§æ¯ä»ä¹ ï¼å½åå符å䏿°ç¬¬äºä¸ªåç¬¦ã æ ¼å¼å¦ ['language']='english', ['chatstr']='a', ['storage_language']='english' è¿é颿3ä¸ªåæ°ï¼åå«ä»£è¡¨è¿ä¸ªå符å±äºé£ä¸ªè¯ç§ï¼å ¶å符æ¯ä»ä¹ãåå ¥äºåªç§è¯ç§çéåãå ä¸ºåæ¯éå·ï¼å¥å·ï¼ä¸è¬æ¯åå ¥æ¬èº«è¯ç§ä¸ï¼è䏿¯åå ¥ç¹æ®ç¬¦å·ä¸ã 5328 5329 //var upLangs = ''; //ä¸ä¸ä¸ªå符çè¯ç§æ¯ä»ä¹ï¼æ ¼å¼å¦ english 5330 for(var i=0; i<str.length; i++){ 5331 var charstr = str.charAt(i); 5332 //console.log('charstr:'+charstr) 5333 var lang = translate.language.getCharLanguage(charstr); 5334 if(lang == ''){ 5335 //æªè·åå°ï¼æªåç°æ¯ä»ä¹è¯è¨ 5336 //continue; 5337 lang = 'unidentification'; 5338 } 5339 var result = translate.language.analyse(lang, langStrs, upLangs, upLangsTwo, charstr); 5340 //console.log(result) 5341 langStrs = result['langStrs']; 5342 //è®°å½ä¸å 个å符 5343 if(typeof(upLangs['language']) != 'undefined'){ 5344 upLangsTwo['language'] = upLangs['language']; 5345 upLangsTwo['charstr'] = upLangs['charstr']; 5346 upLangsTwo['storage_language'] = upLangs['storage_language']; 5347 } 5348 //upLangs['language'] = lang; 5349 upLangs['language'] = result['storage_language']; 5350 upLangs['charstr'] = charstr; 5351 upLangs['storage_language'] = result['storage_language']; 5352 //console.log(result['storage_language']) 5353 //console.log(upLangs['language']); 5354 langs.push(lang); 5355 } 5356 5357 //console.log(langStrs); 5358 5359 //console.log(langs); 5360 //console.log(langStrs); 5361 5362/* 5363 //仿°ç»ä¸ååºç°é¢çæé«ç 5364 var newLangs = translate.util.arrayFindMaxNumber(langs); 5365 5366 //ç§»é¤å½åç¿»è¯ç®æ çè¯è¨ãå ä¸ºå·²ç»æ¯ç®æ é¢è¨äºï¼ä¸éè¦ç¿»è¯äº 5367 var index = newLangs.indexOf(translate.to); 5368 if(index > -1){ 5369 newLangs.splice(index,1); //ç§»é¤ 5370 } 5371 5372 //ç§»é¤ç¹æ®å符 5373 var index = newLangs.indexOf('specialCharacter'); 5374 if(index > -1){ 5375 newLangs.splice(index,1); //ç§»é¤æ°ç»ä¸çç¹æ®å符 5376 } 5377 5378 if(newLangs.length > 0){ 5379 //è¿å©ä¸ä¸ªæå¤ä¸ªï¼ï¼å¦ææ¯å¤ä¸ªï¼é£åºè¯¥æ¯è¿å 个åºç°çé¢ç䏿 ·ï¼æä»¥åé¢çæé«çæ¶è¿åäºå¤ä¸ªï¼ 5380 return newLangs[0]; 5381 }else{ 5382 //没æ¾å°ï¼ç´æ¥è¿å空å符串 5383 return ''; 5384 } 5385 */ 5386 5387 5388 //å»é¤ç¹æ®ç¬¦å· 5389 //for(var i = 0; i<langStrs.length; i++){ 5390 /* 5391 var i = 0; 5392 for(var item in langStrs) { 5393 if(item == 'unidentification' || item == 'specialCharacter'){ 5394 //langStrs.splice(i,1); //ç§»é¤ 5395 delete langStrs[item]; 5396 } 5397 console.log(item); 5398 i++; 5399 } 5400 */ 5401 5402 //console.log(langStrs); 5403 if(typeof(langStrs['unidentification']) != 'undefined'){ 5404 delete langStrs['unidentification']; 5405 } 5406 if(typeof(langStrs['specialCharacter']) != 'undefined'){ 5407 delete langStrs['specialCharacter']; 5408 } 5409 if(typeof(langStrs['number']) != 'undefined'){ 5410 delete langStrs['number']; 5411 } 5412 5413 5414 //console.log('get end'); 5415 return langStrs; 5416 }, 5417 /* 5418 è¯ç§è¯å«çç¥ 5419 5420 str è¦è¯å«çå符串 5421 data 对äºstrå符串è¯å«çç»æï¼æ ¼å¼å¦ï¼ 5422 { 5423 languageName: 'english', 5424 languageArray:[ 5425 english:[ 5426 list[ 5427 {beforeText: ' ', afterText: ' ', text: 'hello word'}, 5428 {beforeText: ' ', afterText: ' ', text: 'who?'}, 5429 ], 5430 number:12 5431 ], 5432 japanese:[ 5433 ...... 5434 ] 5435 ] 5436 } 5437 æå ³è¿éé¢å ·ä½åæ°ç说æï¼åè translate.language.recognition ç说æ 5438 languagesSize key:è¯è¨åï¼ value:è¯è¨åç¬¦æ° 5439 allSize å½åææåç°çè¯ç§ï¼å èµ·æ¥çæ»å符æ°ï¼ä¹å°±æ¯ languagesSize éåææçvalueç¸å çæ° 5440
5441 æåï¼è¦ return data; 5442 */ 5443 recognitionAlgorithm:function(str, data, languagesSize, allSize){ 5444 5445 /* 5446 妿è±è¯è·ç½æ¼è¯æ(æ³è¯æå¤§å©è¯çå¤ä¸ªè¯è¨)ä¸èµ·åºç°ï¼ä¸å½å data.languageName è®¤å®æ¯è±è¯ï¼ä¹å°±æ¯è±æåç¬¦å æ¯æå¤§ï¼ï¼é£ä¹è¦å¤å®ä¸ä¸ï¼ 5447 妿 ç½æ¼è¯æçå符æ°/è±æçåç¬¦æ° > 0.008 ï¼ é£ä¹è®¤ä¸ºå½åæ¯ç½æ¼è¯æçä¸çæä¸ªè¯ç§ï¼ å¨å¯¹å ¶å¤å®åºå ·ä½æ¯ç½æ¼è¯æä¸çåªä¸ªè¯ç§èµäºæç»ç»æã 5448 */ 5449 if(typeof(languagesSize['english']) != 'undefined' && typeof(languagesSize['romance']) != 'undefined' && data.languageName == 'english'){ 5450 if(languagesSize['romance']/languagesSize['english'] > 0.008){ 5451 //æå®æ¯ç½æ¼è¯æäºï¼é£ä¹å¤æä¸ä¸å°åºæ¯ æ³è¯ã西ççè¯ãè¡èçè¯ãæå¤§å©è¯ ä¸çåªä¸ç§å¢ 5452 5453 //å å¤å®æ¯å¦æè®¾ç½®æ¬å°è¯ç§æ¯ç½æ¼è¯æä¸å ¶ä¸çæä¸ä¸ª 5454 if(typeof(translate.language.local) != 'undefined' && translate.language.local.length > 1){ 5455 if(translate.language.englishVarietys.indexOf(translate.language.local) > -1){ 5456 //åç°å½åè®¾ç½®çæ¯å°è¯ç§ï¼é£ä¹å°å½åè¯å«çè¯ç§è¯å«ä¸º æ¬å°è®¾ç½®çè¿ä¸ªå°è¯ç§ã 5457 data.languageName = translate.language.local; 5458 } 5459 } 5460 5461 if(data.languageName == 'english'){ 5462 //è¿æ¯è±è¯ï¼é£å°±æ¯æ²¡æç»è¿ä¸é¢æ¬å°è¯ç§çå¤å®ï¼é£è¿è¡ç½æ¼è¯çå ·ä½è¯ç§è¯å« 5463 5464 var romanceSentenceLanguage = translate.language.romanceSentenceAnaly(str); 5465 if(romanceSentenceLanguage.length == 0){ 5466 translate.log('è¯ç§è¯å«å¼å¸¸ï¼åºè¯¥æ¯ æ³è¯ã西ççè¯ãè¡èçè¯ãæå¤§å©è¯ ä¸çä¸ç§ææ¯ï¼é¤éæ¯é¤äºè¿åç§è¯ç§ä¹å¤çå«ç ç½æ¼è¯æ ä¸çè¯ç§ï¼å½åå·²å° '+ str +'è¯å«ä¸ºè±è¯ã ä½ å¯ä»¥èç³»æä»¬æ±å© https://translate.zvo.cn/4030.html'); 5467 }else{ 5468 data.languageName = romanceSentenceLanguage; 5469 } 5470 } 5471 } 5472 } 5473 5474 5475 /* 5476 æ¥è¯å¤å® 5477 妿åç°æ¥è¯åå¨ï¼ä¸å½å data.languageName 认å®ä¸æ¯æ¥è¯ï¼é£ä¹è¦å¤å®ä¸ä¸ï¼ 5478 妿 æ¥è¯çå符æ°/ææåç¬¦æ° çåç¬¦æ° > 0.08 ï¼ é£ä¹è®¤ä¸ºå½åæ¯æ¥è¯ç 5479 */ 5480 if( typeof(languagesSize['japanese']) != 'undefined' && data.languageName != 'japanese'){ 5481 if(languagesSize['japanese']/allSize > 0.08){ 5482 data.languageName = 'japanese' 5483 } 5484 } 5485 5486 /* 5487 妿åç°è±è¯ãç®ä½ä¸ææç¹ä½ä¸æ ä¸èµ·åå¨ï¼ä¸å½å data.languageName è®¤å®æ¯è±è¯æ¶ï¼é£ä¹è¦å¤å®ä¸ä¸ï¼ 5488 妿 (ç®ä½ä¸æ+ç¹ä½ä¸æ)çå符æ°/è±è¯ > 0.05 ï¼ é£ä¹è®¤ä¸ºå½åæ¯ç®ä½ä¸æï¼ä¸è®¤ä¸ºæ¯ç¹ä½ä¸æï¼å 为ä¸é¢è¿æ ç®ä½ä¸æè·ç¹ä½ä¸æçå¤å®ï¼ 5489 */ 5490 if( (typeof(languagesSize['chinese_simplified']) != 'undefined' || typeof(languagesSize['chinese_traditional']) != 'undefined' ) && typeof(languagesSize['english']) != 'undefined' && data.languageName == 'english'){ 5491 var size = 0; 5492 if(typeof(languagesSize['chinese_simplified']) != 'undefined'){ 5493 size = size + languagesSize['chinese_simplified']; 5494 } 5495 if(typeof(languagesSize['chinese_traditional']) != 'undefined'){ 5496 size = size + languagesSize['chinese_traditional']; 5497 } 5498 if(size/languagesSize['english'] > 0.05){ 5499 data.languageName = 'chinese_simplified' 5500 } 5501 } 5502 5503 5504 /* 5505 妿ç®ä½ä¸æè·ç¹ä½ä¸æä¸èµ·åºç°ï¼ä¸å½å data.languageName è®¤å®æ¯ç®ä½ä¸æï¼ä¹å°±æ¯ç®ä½ä¸æåç¬¦å æ¯æå¤§ï¼ï¼é£ä¹è¦å¤å®ä¸ä¸ç¹ä½ä¸æï¼ 5506 妿 ç¹ä½ä¸æçå符æ°/ç®ä½ä¸æçåç¬¦æ° > 0.08 ï¼ é£ä¹è®¤ä¸ºå½åæ¯ç¹ä½ä¸æç 5507 */ 5508 if(typeof(languagesSize['chinese_simplified']) != 'undefined' && typeof(languagesSize['chinese_traditional']) != 'undefined' && data.languageName == 'chinese_simplified'){ 5509 if(languagesSize['chinese_traditional']/languagesSize['chinese_simplified'] > 0.03){ 5510 data.languageName = 'chinese_traditional' 5511 } 5512 } 5513 /* if(langkeys.indexOf('chinese_simplified') > -1 && langkeys.indexOf('chinese_traditional') > -1){ 5514 langsNumber['chinese_simplified'] = 0; 5515 } */ 5516 5517 5518 5519 return data; 5520 }, 5521 /* 5522 强å¶è¯å«ï¼è¿éç®å屿¯é å translate.language.translateLocal 使ç¨ï¼å½å®ä¸ºtrueæ¶æä¼è¿è¡å¼ºå¶è¯å«ï¼ä¸ç®¡æ¯ä¾ï¼åªè¦åºç°å符ï¼å°±å¼ºå¶è¯å«ã
5523 è¿ä¸ªä¹æ¯åªè½æå¤§æ¨¡åç¿»è¯ãèªå¨è¯å«è¯ç§çç¿»è¯æä½¿ç¨å®ã 5524 5525 æ¯å¦ï¼ translate.language.recognition('ä½ @¿Lo que introduzco ahora es contenido español, ¿ se puede traducir en chino? Este texto está en inglés. Si desea ') 5526 ä¼è¢«è¯å«ä¸ºè¥¿ççè¯ï¼å 为æç §ä¸é¢çé»è¾ï¼ç®ä½ä¸æå 徿¯é太å°äºï¼è西ççè¯å æ¯éå¤§ï¼æä»¥æ¯è¥¿ççè¯ã 5527 使¯å¦æå½åè¦ç¿»è¯ä¸ºçè¯ç§æ¯è¥¿ççè¯ï¼é£ä¹å®æ ¹æ®æ¯ä¾è¯å«åºä¹æ¯è¥¿ççè¯ï¼è¿å¥è¯æ¯ä¸ä¼è¢«ç¿»è¯çï¼ä½æ¯ç¨æ·å®é çä¸å»ï¼å´æ¯ææ¾ç¤º 'ä½ ' è¿ä¸ªä¸ææåï¼æ¯ä¸åéçï¼æä»¥ä¸ç®¡æ¯åºç°äºå¤å°çæ¯éï¼é½ä¸è½å¨å«æ ä¸æãæ¥è¯çå符ï¼ä¸ç¶ä¸ç¬¦åç¨æ·ä»¥è¥¿ççè¯é 读çä¹ æ¯ï¼å³ä½¿æ¾ç¤ºåä¸ªä¸æåè¯ï¼é£ä¹å±äºåºç¼ç 5528 5529 è¿åï¼ 5530 å½å recognition ç»æè¯å«çè¯ç§ï¼æ¯å¦ english ,translate.js çè¯è¨æ è¯ 5531 */ 5532 recognition_languageName_force:function(recognition_result){ 5533 5534 //æªå¯ç¨ï¼é£ç¨ recognition çç»æ 5535 if(!translate.language.translateLocal){ 5536 return recognition_result.languageName; 5537 } 5538 if(translate.language.getLocal() == translate.language.getCurrent() && translate.language.translateLocal === false){ 5539 //妿æ¬å°è¯ç§è·å½åè¯ç§ä¸è´,ä¸ä¸è¿è¡å¼ºå¶ç¿»è¯ï¼é£ä¹è¯å®å°±ä¸è¿è¡ç¿»è¯ç,ç´æ¥åæ ·è¿å 5540 return recognition_result.languageName; 5541 }else{ 5542 //å ¶ä»çæ åµå°±æ¯è¦ç¿»è¯äº 5543 5544 //å½åè¯ç§ 5545 var currentLanguage = translate.language.getCurrent(); 5546 5547 if(typeof(translate.language.map().get(currentLanguage)) != 'undefined' && typeof(translate.language.map().get(translate.language.getLocal())) != 'undefined'){ 5548 //æ¬å°è¯ç§è·å½åè¯ç§é½æ¯æè¯æç 5549 5550 /* 5551 è¯æ ï¼å½åææ¬ä¸çæåå å«å¤å°è¯ç§ 5552 key æ¯è¯æçååï¼å¦ latin ï¼å¦æ translate.language.map().get 䏿²¡æåå°è¯æï¼é£ä¹è¿éå°±ç´æ¥å»æï¼ 5553 value æ¯å ·ä½çè¯ç§ååï¼å¦ english ã è¿éæ¯å¦åç¬¦ä¸²ä¸æè±è¯ä¹æè¥¿ççè¯ï¼é£è¿éåªä¼è®°å½å ¶ä¸ä¸ä¸ªï¼å 为主è¦è®°å½çæ¯keyè¯æçåå 5554 */ 5555 var languageSystem = {}; 5556 //éåå½åæçè¯ç§ 5557 for (var language in recognition_result.languageArray) { 5558 // å¿ é¡»å hasOwnProperty æ£æ¥ï¼é¿å éåååé¾ä¸ç屿§ 5559 if (!recognition_result.languageArray.hasOwnProperty(language)) { 5560 continue; 5561 } 5562 5563 if(typeof(translate.language.map().get(language)) != 'undefined'){ 5564 languageSystem[translate.language.map().get(language).system] = language; 5565 } 5566 } 5567 5568 if(translate.language.map().get(currentLanguage).system == 'latin'){ 5569 //è¦ä»¥æä¸è¯ææ¾ç¤ºï¼é£å¦æå ¶ä¸å符æ chinese è¯æçï¼é£ä¹è¦æè¿ä¸ªè¯æçå ¨é¨ç¿»è¯ 5570 5571 delete languageSystem['latin']; 5572 var yuzuArray = Object.keys(languageSystem); 5573 if(yuzuArray.length > 0){ 5574 //åç°è¿æå ¶ä»è¯æçï¼é£ä¹ä»¥å ¶ä»è¯æä¸ºä¸»ï¼ç®çæ¯è½ä¸èµ·ç¿»è¯ï¼é£ä¹ç´æ¥è¿å第ä¸ä¸ªè¯æåå³å¯ 5575 return languageSystem[yuzuArray[0]]; 5576 } 5577 } 5578 } 5579 } 5580 5581 //å ¶ä»é£å°±é½æ¯ç¨ recognition çç»æ 5582 return recognition_result.languageName; 5583 }, 5584 5585 /* 5586 * è¯å«å符串æ¯ä»ä¹è¯ç§ã宿¯ get() çæ©å±ï¼ä»¥ä»£æ¿getè¿åæ´å¤ 5587 * str : è¦è¯å«çå符串 5588 * 5589 * è¿å åæ¾ä¸åè¯è¨çæ°ç»ï¼æ ¼å¼å¦ 5590 * 5591 { 5592 languageName: 'english', 5593 languageArray:[ 5594 english:[ 5595 list[ 5596 {beforeText: ' ', afterText: ' ', text: 'hello word'}, 5597 {beforeText: ' ', afterText: ' ', text: 'who?'}, 5598 ], 5599 number:12 5600 ], 5601 japanese:[ 5602 ...... 5603 ] 5604 ] 5605 } 5606 languageName æ¯å½åå符串æç»å¤å®ç»ææ¯ä»ä¹è¯ç§ãå®çè¯å«æä»¥ä¸ç¹ç¹ï¼ 5607 1. 妿åºç°è±è¯è·ä¸æãç½æ¼è¯æãå¾·è¯çæ··åçæ åµï¼ä¹å°±æ¯ä¸çº¯ç²¹è±è¯çæ åµï¼é£ä¹ä¼ä»¥å ¶ä»è¯ç§ä¸ºåï¼è䏿¯è¯å«ä¸ºè±è¯ãä¸è®ºè±è¯å符åºç°çæ¯ä¾å å¤å°ã 5608 2. 妿åºç°ç®ä½ä¸æè·ç¹ä½ä¸ææ··åçæ åµï¼é£ä¹è¯å«ä¸ºç¹ä½ä¸æãä¸è®ºç®ä½ä¸æå符åºç°çæ¯ä¾å å¤å°ã 5609 3. 妿åºç°ç®ä½ä¸æãç¹ä½ä¸æãæ¥è¯æ··åçæ åµï¼é£ä¹è¯å«ä¸ºæ¥è¯ãä¸è®ºç®ä½ä¸æãç¹ä½ä¸æåºç°çæ¯ä¾å å¤å°ã 2025.4.19 å¢å 5610 4. é¤äºä»¥ä¸ä¸¤ç§è§åå¤ï¼å¦æåºç°äºå¤ä¸ªè¯ç§ï¼é£ä¹ä¼è¯å«ä¸ºåºç°å符æ°éæå¤çè¯ç§å½åå½åå¥åçè¯ç§ãï¼æ³¨ææ¯å符æ°ï¼è䏿¯è¯ç§çæ°ç»æ°ï¼ 5611 languageArray å¯¹ä¼ å ¥å符串è¿è¡åæï¼è¯å«åºé½æåªäºè¯ç§ï¼æ¯ä¸ªè¯ç§çå符æ¯ä»ä¹ 5612 * 5613 */ 5614 recognition:function(str){ 5615 var langs = translate.language.get(str); 5616 //var langkeys = Object.keys(langs); 5617 //console.log(langkeys); 5618 var langsNumber = []; //key è¯è¨åï¼ value è¯è¨åç¬¦æ° 5619 var langsNumberOriginal = []; //åä¸ï¼åªä¸è¿è¿ä¸ªä¸ä¼è¿è¡æ¸ 空åç¬¦æ° 5620 var allNumber = 0;//æ»åæ° 5621 5622 /** è¿è¡åæ°ç»è®¡ç¸å ³ - start **/ 5623 for(var key in langs){ 5624 if (!langs.hasOwnProperty(key)) { 5625 continue; 5626 } 5627 if(typeof(langs[key]) != 'object'){ 5628 continue; 5629 } 5630 var langStrLength = 0; 5631 for(var ls = 0; ls < langs[key].length; ls++){ 5632 langStrLength = langStrLength + langs[key][ls].text.length; 5633 } 5634 allNumber = allNumber + langStrLength; 5635 langsNumber[key] = langStrLength; 5636 langsNumberOriginal[key] = langStrLength; 5637 } 5638 /** è¿è¡åæ°ç»è®¡ç¸å ³ - end **/ 5639 5640 5641 5642 //ä» langsNumber 䏿¾åºåæ°æå¤çæ¥ 5643 var maxLang = ''; //åæ°æå¤çè¯ç§ 5644 var maxNumber = 0; 5645 for(var lang in langsNumber){
5646 if (!langsNumber.hasOwnProperty(lang)) { 5647 continue; 5648 } 5649 if(langsNumber[lang] > maxNumber){ 5650 maxLang = lang; 5651 maxNumber = langsNumber[lang]; 5652 } 5653 } 5654 5655 //éæ°ç»åè¿åå¼ç languageArray 5656 var languageArray = {}; 5657 for(var lang in langs){ 5658 if (!langs.hasOwnProperty(lang)) { 5659 continue; 5660 } 5661 languageArray[lang] = {}; 5662 languageArray[lang].number = langsNumberOriginal[lang]; 5663 languageArray[lang].list = langs[lang]; 5664 } 5665 5666 var result = { 5667 languageName: maxLang, 5668 languageArray: languageArray 5669 }; 5670 5671 //æåè¿è¡ä¸å±ç®åçç®æ³å¤ç 5672 return translate.language.recognitionAlgorithm(str, result, langsNumber, allNumber); 5673 }, 5674 /* 5675 ä¼ å ¥ä¸ä¸ªcharï¼è¿åè¿ä¸ªcharå±äºä»ä¹è¯ç§ï¼è¿åå¦ å¦æè¿å空å符串ï¼é£ä¹è¡¨ç¤ºæªè·åå°æ¯ä»ä¹è¯ç§ 5676 chinese_simplified ç®ä½ä¸æ 5677 chinese_traditional ç¹ä½ä¸æ 5678 russian ä¿ç½æ¯è¯ 5679 english è±è¯ 5680 romance ç½æ¼è¯æï¼å®æ¯ æ³è¯ã西ççè¯ãæå¤§å©è¯ãè¡èçèª çéåï¼å¹¶ä¸æ¯å个è¯è¨ 5681 specialCharacter ç¹æ®å符ï¼ç¬¦å· 5682 number é¿æä¼¯æ°å 5683 japanese æ¥è¯ 5684 korean é©è¯ 5685 greek å¸è è¯ 5686 thai æ³°è¯ 5687 arabic é¿æä¼¯è¯ 5688 romanian ç½é©¬å°¼äºè¯ 5689 hebrew å¸ä¼¯æ¥è¯ 5690 5691 */ 5692 getCharLanguage:function(charstr){ 5693 if(charstr == null || typeof(charstr) == 'undefined'){ 5694 return ''; 5695 } 5696 5697 if(this.russian(charstr)){ 5698 return 'russian'; 5699 } 5700 if(this.english(charstr)){ 5701 return 'english'; 5702 } 5703 if(this.romance(charstr)){ 5704 return 'romance'; 5705 } 5706 if(this.specialCharacter(charstr)){ 5707 return 'specialCharacter'; 5708 } 5709 if(this.number(charstr)){ 5710 return 'number'; 5711 } 5712 5713 //䏿ç夿å å«ä¸¤ç§ï¼ç®ä½è·ç¹ä½ 5714 var chinesetype = this.chinese(charstr); 5715 if(chinesetype == 'simplified'){ 5716 return 'chinese_simplified'; 5717 }else if(chinesetype == 'traditional'){ 5718 return 'chinese_traditional'; 5719 } 5720 5721 if(this.japanese(charstr)){ 5722 return 'japanese'; 5723 } 5724 if(this.korean(charstr)){ 5725 return 'korean'; 5726 } 5727 if(this.greek(charstr)){ 5728 return 'greek'; 5729 } 5730 if(this.thai(charstr)){ 5731 return 'thai'; 5732 } 5733 if(this.arabic(charstr)){ 5734 return 'arabic'; 5735 } 5736 if(this.romanian(charstr)){ 5737 return 'romanian'; 5738 } 5739 if(this.hebrew(charstr)){ 5740 return 'hebrew'; 5741 } 5742 //æªè¯å«æ¯ä»ä¹è¯ç§ 5743 //console.log('not find is language , char : '+charstr+', unicode: '+charstr.charCodeAt(0).toString(16)); 5744 return ''; 5745 5746 }, 5747 /* 5748 * 对å符串è¿è¡åæï¼åæåç¬¦ä¸²æ¯æåªå ç§è¯è¨ç»æã 5749 * language : å½åå符çè¯ç§ï¼ä¼ å ¥å¦ english 5750 * langStrs : æä½çï¼å¦ langStrs['english'][0] = 'ä½ å¥½' 5751 * upLangs : å½åå符ä¹åçä¸ä¸ä¸ªå符çè¯ç§æ¯ä»ä¹ï¼å½åå符å䏿°ç¬¬ä¸ä¸ªåç¬¦ãæ ¼å¼å¦ ['language']='english', ['chatstr']='a', ['storage_language']='english' è¿é颿3ä¸ªåæ°ï¼åå«ä»£è¡¨è¿ä¸ªå符å±äºé£ä¸ªè¯ç§ï¼å ¶å符æ¯ä»ä¹ãåå ¥äºåªç§è¯ç§çéåãå ä¸ºåæ¯éå·ï¼å¥å·ï¼ä¸è¬æ¯åå ¥æ¬èº«è¯ç§ä¸ï¼è䏿¯åå ¥ç¹æ®ç¬¦å·ä¸ã 5752 * upLangsTwo : å½åå符ä¹åçä¸äºä¸ªå符çè¯ç§æ¯ä»ä¹ ï¼å½åå符å䏿°ç¬¬äºä¸ªåç¬¦ã æ ¼å¼å¦ ['language']='english', ['chatstr']='a', ['storage_language']='english' è¿é颿3ä¸ªåæ°ï¼åå«ä»£è¡¨è¿ä¸ªå符å±äºé£ä¸ªè¯ç§ï¼å ¶å符æ¯ä»ä¹ãåå ¥äºåªç§è¯ç§çéåãå ä¸ºåæ¯éå·ï¼å¥å·ï¼ä¸è¬æ¯åå ¥æ¬èº«è¯ç§ä¸ï¼è䏿¯åå ¥ç¹æ®ç¬¦å·ä¸ã 5753 * chatstr : å½åå符ï¼å¦ h 5754 */ 5755 analyse:function(language, langStrs, upLangs, upLangsTwo, charstr){ 5756 if(typeof(langStrs[language]) == 'undefined'){ 5757 langStrs[language] = new Array(); 5758 } 5759 var index = 0; //å½åè¦åå ¥çæ°ç»ä¸æ 5760 if(typeof(upLangs['storage_language']) == 'undefined'){ 5761 //ç¬¬ä¸æ¬¡ï¼é£ä¹è¿æ²¡åå ¥å¼ï¼indexè¯å®ä¸º0 5762 //console.log('ç¬¬ä¸æ¬¡ï¼é£ä¹è¿æ²¡åå ¥å¼ï¼indexè¯å®ä¸º0') 5763 //console.log(upLangs['language']) 5764 }else{ 5765 //console.log('analyse, charstr : '+charstr+', upLangs :'); 5766 //console.log(upLangs); 5767 //var isEqual = upLangs['storage_language'] == language; //䏿¬¡è·å½åå符æ¯å¦é½æ¯åä¸ä¸ªè¯ç§ï¼è¿ä¸ªå符è·è¿ä¸ªå符åä¸ä¸ªåç¬¦ï¼ 5768 5769 /* 5770 è±è¯æ¯ä¸ªåè¯ä¹é´é½ä¼æç©ºæ ¼åå². 妿æ¯è±æçè¯ï¼è±æè·ç¹æ®å符è¿è¦åç¬å¤æä¸ä¸ï¼é¿å æå¼ï¼é æç¿»è¯ä¸åï¼å个åè¯ç¿»è¯çæ åµ
5771 æä»¥å¦æä¸æ¬¡çå符æ¯è±ææç¹æ®ç¬¦å·ï¼å½åå符æ¯ç¹æ®ç¬¦å·(éå·ãå¥å·ãç©ºæ ¼ï¼ç¶åç´æ¥ç¬¼ç»å°±å§ç¹æ®ç¬¦å·é½ç®ä¸å§)ï¼é£ä¹ä¹å°å½æ¬¡çç¹æ®ç¬¦å·åä¸ºè±ææ¥è¿è¡éé 5772 ç¤ºä¾ 5773 hello word ç "o w" 5774 hello word ç " w" 5775 hello word ç "w " 5776 this is a dog ç " a " 5777 */ 5778 //console.log(language == 'specialCharacter'); 5779 //å¦æä¸¤ä¸ªå符类åä¸ä¸è´ï¼ä½å½åå符æ¯è±ææè¿æ¥ç¬¦æ¶ï¼è¿è¡å¤æ 5780 /* 5781 if(!isEqual){ 5782 if(language == 'english' || translate.language.connector(charstr)){ 5783 console.log('1.'+(language == 'english' || translate.language.connector(charstr))+', upLangs str:'+upLangs['charstr']); 5784 //ä¸ä¸ä¸ªå符æ¯è±ææè¿æ¥ç¬¦ 5785 //console.log('teshu:'+translate.language.connector(upLangs['charstr'])+', str:'+upLangs['charstr']); 5786 if(upLangs['language'] == 'english' || translate.language.connector(upLangs['charstr'])) { 5787 console.log('2'); 5788 //妿ä¸äºä¸ªå符ä¸åå¨ï¼é£ä¹åå¼å§ï¼ä¸åä¸é¢å ç§æ åµä¹ä¸ï¼ç´æ¥ä¸ç¨èè 5789 if(typeof(upLangsTwo['language']) != 'undefined'){ 5790 console.log('3') 5791 //ä¸äºä¸ªå符æ¯ç©ºï¼å符串åå¼å§ï¼ï¼æè æ¯è±æ 5792 if(upLangsTwo['language'] == 'english' || translate.language.connector(upLangsTwo['charstr'])){ 5793 //满足è¿ä¸ä¸ªæ¡ä»¶ï¼é£å°±å°è¿ä¸ä¸ªæ¼æ¥å°ä¸èµ· 5794 console.log('4/5: '+', two lang:'+upLangsTwo['language']+', str:'+upLangsTwo['charstr']) 5795 isEqual = true; 5796 if(language == 'specialCharacter' && upLangs['language'] == 'specialCharacter' && upLangsTwo['language'] == 'specialCharacter'){ 5797 //妿ä¸ä¸ªé½æ¯ç¹æ®åç¬¦ï¼æå两个æ¯ç¹æ®å符ï¼ç¬¬ä¸ä¸ªæ¯ç©ºï¼åå¼å§ï¼ï¼é£å°±å½å ¥ç¹æ®å符 5798 language = 'specialCharacter'; 5799 //console.log('4') 5800 }else{ 5801 //ä¸ç¶å°±é½å½äºè±æä¸ã 5802 //è¿éæ´æ¹æ¯ä¸ºäºè®©ä¸é¢è½å°ç¹æ®å符ï¼åæ¯ç©ºæ ¼éå·çï¼ä¹ä¸èµ·åå ¥æ°ç» 5803 language = 'english'; 5804 console.log(5) 5805 } 5806 } 5807 } 5808 } 5809 } 5810 } 5811 */ 5812 5813 /* 5814 ä¸å¤æå½åå符ï¼è夿ä¸ä¸ªåç¬¦ï¼æ¯å 为å½åå符没æ³è·åæªç¥çä¸ä¸ªå符ã 5815 */ 5816 //if(!isEqual){ 5817 5818 //妿å½åå符æ¯è¿æ¥ç¬¦ 5819 if(translate.language.connector(charstr)){ 5820 language = upLangs['storage_language']; 5821 /* 5822 //夿ä¸ä¸ªå符æ¯å¦åå ¥äºå¾ ç¿»è¯å符ï¼å¦è¦å°ä¸æç¿»è¯ä¸ºè±æï¼èä¸ä¸ªå符æ¯ä¸æï¼å¾ ç¿»è¯ï¼é£å°è¿æ¥ç¬¦ä¸å¹¶å å ¥å¾ ç¿»è¯å符ä¸å»ï¼ä¿æå¥å宿´æ§ 5823 //夿便®æ¯ä¸ä¸ªå符åå¨è³çç¿»è¯å符è¯ç§åºåï¼ä¸æ¯ç¹æ®å符ï¼èä¸ä¹ä¸æ¯è¦ç¿»è¯çç®æ è¯ç§ï¼é£è¯å®å°±æ¯å¾ ç¿»è¯çï¼å°è¿æ¥ç¬¦å å ¥å¾ ç¿»è¯ä¸ä¸èµ·è¿è¡ç¿»è¯ 5824 if(upLangs['storage_language'] != 'specialCharacter' && upLangs['storage_language'] != translate.to){ 5825 5826 language = upLangs['storage_language']; 5827 console.log('teshu:'+charstr+', å½ååç¬¦å¹¶å ¥ä¸ä¸ªå符åå¨ç¿»è¯è¯ç§:'+upLangs['storage_language']); 5828 } 5829 */ 5830 } 5831 //} 5832 5833 //console.log('isEqual:'+isEqual); 5834 /* 5835 if(isEqual){ 5836 //è·ä¸æ¬¡è¯è¨ä¸æ ·ï¼é£ä¹ç´æ¥æ¼æ¥ 5837 index = langStrs[language].length-1; 5838 //使¯è¿æå«çç¹æ®æ åµï¼v2.1éå¯¹è±æç¿»è¯å确度çéé ï¼ä¼æç¹æ®å符çé®é¢ 5839 if(typeof(upLangs['storage_language']) != 'undefined' && upLangs['storage_language'] != language){ 5840 //妿ä¸ä¸ªå符åå ¥çç¿»è¯éåè·å½åè¿ä¸ªè¦åå ¥çéåä¸ä¸ä¸ªçè¯ï¼é£åºè¯¥æ¯ç¹æ®åç¬¦åæ¯éå·å¥å·ç导è´çï¼é£æ ·è¿è¦é¢å¤ä¸ä¸ªæ°ç»ï¼ä¸è½å¨åå ¥ä¹åçæ°ç»äº 5841 index = langStrs[language].length; 5842 } 5843 }else{ 5844 //console.log('æ°å¼'); 5845 //å½åå符è·ä¸æ¬¡è¯è¨ä¸æ ·ï¼é£ä¹æ°å¼ä¸ä¸ªæ°ç» 5846 index = langStrs[language].length; 5847 //console.log('++, inde:'+index+',lang:'+language+', length:'+langStrs[language].length) 5848 } 5849 */ 5850 5851 //å½åè¦ç¿»è¯çè¯ç§è·ä¸ä¸ªå符è¦ç¿»è¯çè¯ç§ä¸æ ·ï¼é£ä¹ç´æ¥æ¼æ¥ 5852 if(upLangs['storage_language'] == language){ 5853 index = langStrs[language].length-1; 5854 }else{ 5855 //console.log('æ°å¼'); 5856 //å½åå符è·ä¸æ¬¡è¯è¨ä¸æ ·ï¼é£ä¹æ°å¼ä¸ä¸ªæ°ç» 5857 index = langStrs[language].length; 5858 } 5859 } 5860 if(typeof(langStrs[language][index]) == 'undefined'){ 5861 langStrs[language][index] = new Array(); 5862 langStrs[language][index]['beforeText'] = ''; 5863 langStrs[language][index]['afterText'] = ''; 5864 langStrs[language][index]['text'] = ''; 5865 } 5866 langStrs[language][index]['text'] = langStrs[language][index]['text'] + charstr; 5867 /* 5868 ä¸æè±ææ··åæ¶ï¼å½ä¸æ+è±æå¹¶æ²¡æç©ºæ ¼é´éï¼ç¿»è¯ä¸ºè±ææ¶ï¼ä¼ä½¿ä¸æç¿»è¯è±æçç»æè·åæ¬çè±æåè¯è¿å°ä¸åãè¿éå°±æ¯è§£å³è¿ç§æ åµ 5869 é对å½åéè±æ(ä¸éè¦ç©ºæ ¼åé符ï¼åæ¯ä¸æãé©è¯)ï¼ä½è¦ç¿»è¯ä¸ºè±æï¼éè¦ç©ºæ ¼ä½ä¸ºåå²ç¬¦å·ï¼åæ¯æ³è¯çï¼æ¶çæ åµè¿è¡å¤æ 5870 */ 5871 //if(translate.language.getLocal() != 'english' && translate.to == 'english'){ 5872 //å½åæ¬å°è¯ç§çè¯è¨æ¯è¿ç»çï¼ä½ç¿»è¯çç®æ è¯è¨ä¸æ¯è¿ç»çï¼ç©ºæ ¼é´éï¼ 5873 if( translate.language.wordBlankConnector(translate.language.getLocal()) == false && translate.language.wordBlankConnector(translate.to)){ 5874 if((upLangs['storage_language'] != null && typeof(upLangs['storage_language']) != 'undefined' && upLangs['storage_language'].length > 0)){ 5875 //ä¸ä¸ªå符åå¨ 5876 //console.log(upLangs['storage_language']); 5877 if(upLangs['storage_language'] != 'specialCharacter'){ 5878 //ä¸ä¸ªåç¬¦ä¸æ¯ç¹æ®å符 ï¼æ¯æ£å¸¸è¯ç§ãä¸ä¸ä¼æ¯è¿æ¥ç¬¦ï¼è¿æ¥ç¬¦é½å¹¶å ¥äºæ£å¸¸è¯ç§ï¼ 5879 5880 //if( upLangs['storage_language'] != 'english' && language == 'english'){ 5881 //ä¸ä¸ªå符çè¯è¨æ¯è¿ç»çï¼ä½å½åå符çè¯è¨ä¸æ¯è¿ç»çï¼ç©ºæ ¼é´éï¼ 5882 if( translate.language.wordBlankConnector(upLangs['storage_language']) == false && translate.language.wordBlankConnector(language) ){ 5883 //ä¸ä¸ªåç¬¦ä¸æ¯è±è¯ï¼å½åå符æ¯è±è¯ï¼è¿ç§æ åµè¦å¨ä¸ä¸ªå符åé¢è¿½å ç©ºæ ¼ï¼å 为å½åå符æ¯è±æï¼å°±ä¸ä¼å¨æ§è¡ç¿»è¯æä½äº 5884 //console.log(upLangs['language']); 5885 langStrs[upLangs['storage_language']][langStrs[upLangs['storage_language']].length-1]['afterText'] = ' '; 5886 }else if(upLangs['storage_language'] == 'english' && language != 'english'){ 5887 //ä¸ä¸ªå符æ¯è±è¯ï¼å½ååç¬¦ä¸æ¯è±è¯ï¼ç´æ¥å¨å½åå符åé¢è¿½å ç©ºæ ¼ 5888 langStrs[language][index]['beforeText'] = ' '; 5889 } 5890 } 5891 5892 5893 } 5894 } 5895 5896 var result = new Array(); 5897 result['langStrs'] = langStrs; 5898 result['storage_language'] = language; //å®é åå ¥äºåªç§è¯ç§éå 5899 //console.log(result); 5900 //console.log(langStrs) 5901 //console.log(charstr); 5902 return result; 5903 }, 5904 5905 /* 5906 * ä¸åäºè¯è¨ï¼è¿ä¸ªåªæ¯å纯çè¿æ¥ç¬¦ãæ¯å¦è±æåè¯ä¹é´æéå·ãå¥å·ãç©ºæ ¼ï¼ æ±åä¹é´æéå·å¥å·ä¹¦åå·çãé¿å ä¸è¡å®æ´çå¥å被åå²ï¼å¯¼è´ç¿»è¯ä¸åç¡® 5907 * åç¬æ¿ä»åºæ¥ï¼ç®çæ¯ä¸ºäºæ´å¥½çå¤æè®¡ç®ï¼æé«ç¿»è¯çåç¡®ç 5908 */ 5909 connector:function(str){ 5910 5911 /* 5912 éç¨çæ ç©ºæ ¼ãé¿æä¼¯æ°å 5913 1.ä¸é´æç©ºæ ¼\u00A0,主è¦ç¨å¨officeä¸,让ä¸ä¸ªåè¯å¨ç»å°¾å¤ä¸ä¼æ¢è¡æ¾ç¤º,å¿«æ·é®ctrl+shift+space ; 5914 2.åè§ç©ºæ ¼(è±æç¬¦å·)\u0020,代ç ä¸å¸¸ç¨ç; 5915 3.å ¨è§ç©ºæ ¼(ä¸æç¬¦å·)\u3000,䏿æç« ä¸ä½¿ç¨; 5916 */ 5917 if(/.*[\u0020\u00A0\u202F\u205F\u3000]+.*$/.test(str)){ 5918 return true; 5919 } 5920 /* 5921 U+0030 0 æ°å 0 5922 U+0031 1 æ°å 1 5923 U+0032 2 æ°å 2 5924 U+0033 3 æ°å 3 5925 U+0034 4 æ°å 4 5926 U+0035 5 æ°å 5 5927 U+0036 6 æ°å 6 5928 U+0037 7 æ°å 7 5929 U+0038 8 æ°å 8 5930 U+0039 9 æ°å 9 5931 */ 5932 if(/.*[\u0030-\u0039]+.*$/.test(str)){ 5933 return true 5934 } 5935 5936 5937 /* 5938 è±æåºæ¯ 5939 è±æéå·ãå¥å· 5940 è¿éä¸å æ¬() å 为è¿éé¢çåºæ¬å±äºè¡¥å ï¼å¯¹è¯å¥ååå¹¶æ 强ä¾è
5940µå ³ç³» 5941 5942 U+0021 ! å¹å· 5943 U+0022 " åå¼å· 5944 U+0023 # äºå· 5945 U+0024 $ ä»·é±/è´§å¸ç¬¦å· 5946 U+0025 % ç¾åæ¯ç¬¦å· 5947 U+0026 & è±æâandâçç®åç¬¦å· 5948 U+0027 ' å¼å· 5949 U+002C , éå· 5950 U+002D - è¿åå·/åå· 5951 U+002E . å¥å· 5952 U+003A : åå· 5953 U+003B ; åå· 5954 U+003F ? é®å· 5955 U+0040 @ è±æâatâçç®åç¬¦å· 5956 5957 5958 */ 5959 if(/.*[\u0021\u0022\u0023\u0024\u0025\u0026\u0027\u002C\u002D\u002E\u003A\u003B\u003F\u0040]+.*$/.test(str)){ 5960 return true; 5961 } 5962 5963 /* 5964 䏿æ ç¹ç¬¦å· 5965 åç§° Unicode ç¬¦å· 5966 å¥å· 3002 ã 5967 é®å· FF1F ï¼ 5968 å¹å· FF01 ï¼ 5969 éå· FF0C ï¼ 5970 é¡¿å· 3001 ã 5971 åå· FF1B ï¼ 5972 åå· FF1A ï¼ 5973 å¼å· 300C ã 5974 300D ã 5975 å¼å· 300E ã 5976 300F ã 5977 å¼å· 2018 â 5978 2019 â 5979 å¼å· 201C â 5980 201D â 5981 æ¬å· FF08 ï¼ 5982 FF09 ï¼ 5983 æ¬å· 3014 ã 5984 3015 ã 5985 æ¬å· 3010 ã 5986 3011 ã 5987 ç ´æå· 2014 â 5988 çç¥å· 2026 ⦠5989 è¿æ¥å· 2013 â 5990 é´éå· FF0E ï¼ 5991 书åå· 300A ã 5992 300B ã 5993 书åå· 3008 ã 5994 3009 ã 5995 é®ç123åé¢çé£ä¸ªç¬¦å· · 00b7 5996 */ 5997 if(/.*[\u3002\uFF1F\uFF01\uFF0C\u3001\uFF1B\uFF1A\u300C\u300D\u300E\u300F\u2018\u2019\u201C\u201D\uFF08\uFF09\u3014\u3015\u3010\u3011\u2014\u2026\u2013\uFF0E\u300A\u300B\u3008\u3009\u00b7]+.*$/.test(str)){ 5998 return true; 5999 } 6000 6001 6002 6003 6004 //䏿¯ï¼è¿åfalse 6005 return false; 6006 }, 6007 //è¯ç§çåè¯è¿æ¥ç¬¦æ¯å¦éè¦ç©ºæ ¼ï¼æ¯å¦ä¸æç®ä½ãç¹ä½ãé©æãæ¥è¯é½ä¸éè¦ç©ºæ ¼ï¼åè¿åfalse, 使¯åæ¯è±æçåè¯é´éè¦ç©ºæ ¼è¿è¡éå¼ï¼åè¿åtrue 6008 //å¦å¤è¿ä¹æ¯åºåæ¯å¦ä½¿ç¨æ ç¹ç¬¦å· ï¼ãè¿æ¯ ,. ç 6009 //妿æªå¹é å°ï¼é»è®¤è¿åtrue 6010 //languageï¼è¯ç§ï¼ä¼ å ¥å¦ english 6011 wordBlankConnector:function(language){ 6012 if(language == null || typeof(language) == 'undefined'){ 6013 return true; 6014 } 6015 switch (language.trim().toLowerCase()){ 6016 case 'chinese_simplified': 6017 return false; 6018 case 'chinese_traditional': 6019 return false; 6020 case 'korean': 6021 return false; 6022 case 'japanese': 6023 return false; 6024 } 6025 //å ¶ä»æ åµåè¿åtrue 6026 return true; 6027 }, 6028 //ç¹ä½ä¸æçåå ¸ï¼å¤æç¹ä½ä¸æå°±æ¯éè¿æ¤å¤æ 6029 chinese_traditional_dict: 'çè¹ç¤æç¿ºè¥å¥§å£©ç½·æºæé 辦çµå¹«ç¶éè¬åé£½å¯¶å ±é®è¼©è²éç½åæç¹çç¢æéé編貶è®è¾¯è¾®é¼ççæ¿±è³æ¯é¤ æ¥ç¼½éé§èè£åè ¶æ®æ æ ç¦è¼èåæ»å»å´åæ¸¬å±¤è©«ææ»è¬é¥è®çºéç£é¡é¡«å ´åé·åè ¸å» æ¢éè»å¾¹å¡µé³è¥¯æç¨±æ²èª é¨ç¡é²é¦³æ¥é½ç¾æ²è²å¯µçèºç±ç¶¢éæ«¥å»é¤éç¤å²è§¸èå³ç¡éåµéç´ç¶½è¾è©è³è°è¥åªå¾å¢æ¹ç«é¯é帶貸æå®é²æ£è½æèªå½ç¶æé»¨è©æªæå³¶ç¦±å°ççé§æµæ»éç· é»å¢é»æ¾±é£èª¿è«çéé é è¨æ±åæ£å鬥ç¢ç¨è®è³ééæ·ç·å éå°å¸é é奪éµé¡è¨æ¡é¤å ç¾é¤è²³ç¼ç½°é¥çºç¤¬é©ç ©ç¯è²©é£¯è¨ªç´¡é£å»¢è²»ç´å¢³å¥®æ¤ç³è±æ¥é風ç馮縫諷鳳èè¼»æ«è¼è³¦è¤è² è¨å©¦ç¸è©²é£èå¹¹è¶ç¨è´å²¡åé¼ç¶±å´è¯é¬æ±é´¿é£é»å給é¾å®®éè²¢éæºæ§è³¼å¤ è ±é¡§å®éè§é¤¨æ £è²«å»£è¦ç½æ¸é¾é¨è»è©æ«è²´å輥滾éåéé§éæ¼¢é¡é¶´è³æ©«è½é´»ç´ å¾å£ºè·æ»¬æ¶å©è¯ç«å話æ·å£æ¡ç°éç·©æåçç ¥æ¸é»è¬æ®è¼æ¯è³ç©¢æç´å½è«±èª¨ç¹ªè·æ¸¾å¤¥ç²è²¨ç¦ææ©ç©é¥èéç¸¾ç·æ¥µè¼¯ç´æ å¹¾èåæ¿è¨è¨éç¹¼ç´å¤¾è¢é °è³éå¹é§æ®²ç£å ç®éè±ç·ç¹æª¢å ¿é¹¼ææ¿ç°¡åæ¸è¦æª»éè¸è³¤è¦éµè¦å餿¼¸æ¿ºæ¾æ¼¿è£æ§³çè¬é¬è æ¾é©å¬æªé¸ç¯å¥è ³é¤ç¹³çµè½è¼ç¨éç¯èé©ç¶é ¸éé¡å¾ç競淨糾å»èé§èæé¸æ¼åéµçµ¹åæ½çµèª¡å±ç·é¦å è¬¹é²æç¼ç¡åè覺決訣çµéè»é§¿éå±é¡æ®¼èª²å¢¾ææ³åº«è¤²èªå¡åå¯¬ç¤¦æ æ³è§å·çªºé¥æ½°æ´éè èèä¾è³´èæ¬æç±éèç¾è®æ¬è¦½æ¶çºçæ¿«æåæ¾æ¨é³å£é¡æ·ç±¬é¢è£é¯ç¦®éºå²åµç¤«æçé¸åè¯è®é£é®ææ¼£ç°¾æèéæç ç·´ç³§æ¶¼å ©è¼è«çé¼éçµè¨é°é±åè³é½¡é´æ·©é嶺é 餾åé¾è¾å¨ç± 壿鴿¨å©æç°èç§é¡±å»¬çæé¹µèé¯è³ç¥¿éé¸é©¢åéä¾¶å±¢ç¸·æ ®æ¿¾ç¶ å·æ£å¿ç¤äºæè¼ªå«ä¾æ·ªç¶¸è«è¿ç¾ éé¼ç±®é¨¾é§±çµ¡åª½çªç¢¼è馬罵å買麥賣éèçé¥ è »æ»¿è¬¾è²é¨é貿麽黴æ²ééæ¶åé³å¤¢è¬å½è¦ç¶¿ç·¬å»æ» æ«é©é³´é謬è¬çéç´é£æè ¦æ±é¬§é¤è©ææéé³¥è¶é½§é·é³æª¸ç°ç¯æ°æ¿éç´è¿æ¿è¾²ç§è«¾æé·æ¯åæ¼ç¤é¾åæè³ å´éµ¬é¨é£é »è²§èæè©æ½é æ²éªæ¨¸èèé½é¨è±åæ°£æ£è¨ç½æ¡éºéé·ç°½è¬é¢éæ½æ·ºè´å¡¹æ§åçèå¼·æ¶é¬æ©å¬åç¿¹ç« ç«æ¬½è¦ªè¼æ°«å¾é è«æ ¶ç窮趨åè»é© 齲顴æ¬å¸å»éµ²è®é¥æ¾ç¹ç±éèªç´æ¦®çµ¨è»é³é潤çè©é°è³½ååªé¨·ææ¾æ®ºç´ç¯©æ¬ééè´ç¹å·è³çç´¹è³ææ¾è¨ç´³å¯©å¬¸è 滲è²ç¹©åèå¸«ç æ¿è©©å±æè實èé§å¢é飾è¦è©¦å£½ç¸æ¨è¼¸æ¸è´å±¬è¡æ¨¹è±æ¸å¸¥éèª°ç¨ é 說碩ççµ²é£¼è³æ «é è¨èª¦æ»è訴è éç¶æ²å«æç縮ç£éçºæ»æ¡æ¤è²ªç±çå£èè«ææ¹¯çæ¿¤ç¸§é¨°è¬é»é¡é«å±æ¢è²¼éµå»³è½ç´é çµ±é åå¡åé ¹è»è«é´é¦±é§æ©¢çªªè¥ªå½ç£é è¬ç¶²ééåç²æ¿°ç¶è¦ååç·¯è¬è¡æº«èç´ç©©åçæ¾è¸æ¸¦çª©åé¢ç誣ç¡èªå³å¡¢é§å誤é«ç§è¥²ç¿éæ²ç´°è¦è½å³½ä¿ ç¹å»éé®®çºé¹¹è³¢éé顯éªç¾ç»ç¸£é¤¡ç¾¨æ²ç·å»é²é詳é¿é èé·æå¯è åæ¾æè 諧寫çè¬é éèæ´¶é½ç¹¡èåé 許ç·çºè»æ¸é¸ç¬çµ¢å¸å³è©¢å°é¦´è¨è¨éå£é´é´¨åäºè¨é¹ç é¹½å´é¡é»è±å硯彥諺é©é´¦æ¥æçé½ç¢é¤æ¨£ç¤æå ¯éçª¯è¬ è¥çºé æ¥èé«é¥é ¤éºåå½è»èåæ¶ç¾©è©£è°èª¼è¯ç°ç¹¹èé°é飲櫻嬰鷹æçºç©è¢ççè ç©å²æåç°è¸´è© æ¹§åªæéµé¾ç¶éèªè¼¿éæ¼å¨èå¶¼èªç±²ç¦¦çè½é é¦é´æ·µè½ åå¡åç·£é é¡ç´èºé°å¶½ç²µæ é±é²éå»ééèéæé»éç½è¼æ¢æ«è´è´é«é¿æ£ç«è²¬æå澤è³è´ç´®åè»ééè©é½åµæ°çæ¬è¼¾å¶æ£§æ°ç¶»å¼µæ¼²å¸³è³¬è¹è¶èè½éºéè²éåµè¨ºé®é£æççå¹éèç¹è·å·ç´æ¯æ²å¹è³ªé¾çµç¨®è «è¡è¬ è»¸çºæé©è±¬è«¸èª ççå貯éç¯é§å°ç£è½è³ºæ¨èè£å¦å£¯çéè´ å¢ç¶´è«æ¿è²è³æ¼¬è¹¤ç¶ç¸½ç¸±éè©çµé½ç·»é麼çºé»å æºåé裡éé¤é', 6030 /* 6031 䏿夿 6032 è¿åï¼ 6033 simplifiedï¼ç®ä½ä¸æ 6034 traditionalï¼ç¹ä½ä¸æ 6035 空å符串ï¼ä¸æ¯ä¸æ 6036 */ 6037 chinese:function(str){ 6038 if(/.*[\u4e00-\u9fa5]+.*$/.test(str)){ 6039 if(this.chinese_traditional_dict.indexOf(str) > -1){ 6040 return 'traditional'; 6041 } else { 6042 return 'simplified'; 6043 } 6044 } else { 6045 return ''; 6046 } 6047 }, 6048 //æ¯å¦å 嫿¥è¯ï¼true:å å« 6049 japanese:function(str){ 6050 if(/.*[\u3040-\u309F\u30A0-\u30FF]+.*$/.test(str)){ 6051 return true 6052 } else { 6053 return false; 6054 } 6055 }, 6056 //æ¯å¦å å«é©è¯ï¼true:å å« 6057 korean:function(str){ 6058 if(/.*[\uAC00-\uD7AF]+.*$/.test(str)){ 6059 return true 6060 } else { 6061 return false; 6062 } 6063 }, 6064 //æ¯å¦å å«ä¿è¯ 6065 russian:function(str){ 6066 // æ£å表达å¼å¹é ä¿è¯å¤§å°å忝ï¼å å« Ð/Ñï¼æé¤å ¶ä»è¯è¨ç¹æç西éå°å符ï¼
6067 //ÐаÐбÐвÐгÐдÐеÐÑÐжÐзÐиÐйÐкÐлÐмÐнÐоÐпРÑСÑТÑУÑФÑÐ¥Ñ Ð¦ÑЧÑШÑЩÑЪÑЫÑЬÑЮÑÐ¯Ñ 6068 //if(/^[Ð-Яа-ÑÐÑ]$/.test(str)){ 6069 if(/^[\u0410-\u044F\u0401\u0451]$/.test(str)){ 6070 return true 6071 } else { 6072 return false; 6073 } 6074 }, 6075 //æ¯å¦å 嫿³°è¯ 6076 thai:function(str){ 6077 if(/^[\u0E01-\u0E59]$/.test(str)){ 6078 return true 6079 } else { 6080 return false; 6081 } 6082 }, 6083 //æ¯å¦å å«é¿æä¼¯è¯ 6084 arabic:function(str){ 6085 /* 6086 é¿æä¼¯è¯åºæ¬åºåï¼U+0600âU+06FFï¼ 6087 é¿æä¼¯è¯è¡¥å åºåï¼U+0750âU+077Fï¼ 6088 */ 6089 return /^[\u0600-\u06FF\u0750-\u077F]$/.test(str); 6090 }, 6091 //æ¯å¦å å« ç½é©¬å°¼äºè¯ 6092 romanian:function(str) { 6093 /* 6094 U+00C0âU+00FFï¼Latin-1 Supplement ï¼å å«å¸¦åé³ç¬¦å·ç忝ï¼å¦ Ä/Ä çé¨åå½¢å¼ï¼ 6095 U+0100âU+017Fï¼Latin Extended-A ï¼å å«ç½é©¬å°¼äºè¯ç¹æåæ¯ Ä/ÄãÃ/âãÃ/î çï¼ï¼ 6096 U+0218âU+021Bï¼Latin Extended-B ï¼å å« È/È å È/Èï¼è¿æ¯ç½é©¬å°¼äºè¯æ å¿æ§åæ¯ï¼ 6097 */ 6098 return /^[\u00C0-\u00FF\u0100-\u017F\u0218-\u021B]$/.test(str); 6099 }, 6100 //æ¯å¦å å«å¸è è¯ 6101 greek:function(str){ 6102 const greekRegex = /^[\u0391-\u03A9\u03B1-\u03C9]$/; 6103 //夿å符æ ÐÐÐÐÐÐÐÐÐÐÐÐСТУФХЦЧШЩЪЫЬЮЯÐÐ 6104 if(/^[\u0391-\u03A9\u03B1-\u03C9]$/.test(str)){ 6105 return true 6106 } else { 6107 return false; 6108 } 6109 }, 6110 //å¸ä¼¯æ¥è¯ 6111 hebrew:function(str){ 6112 return /^[\u0590-\u05FF]$/.test(str); 6113 }, 6114 //0-9 é¿æä¼¯æ°å 6115 number:function(str){ 6116 if(/.*[\u0030-\u0039]+.*$/.test(str)){ 6117 return true; 6118 } 6119 return false; 6120 }, 6121 //æ¯å¦å å«è±æï¼true:å å« 6122 english:function(str){ 6123 if(/.*[\u0041-\u005a]+.*$/.test(str)){ 6124 return true; 6125 } else if(/.*[\u0061-\u007a]+.*$/.test(str)){ 6126 return true; 6127 } else { 6128 return false; 6129 } 6130 }, 6131 //æ¯å¦å å« ç½æ¼è¯æ çç¹æ®å符ï¼å 为 æ³è¯ã西ççè¯ãæå¤§å©è¯ãè¡èçèª é½å±äºè¿ä¸ªè¯æï¼åçº¯å¤æç¹æ®å符已ç»ä¸è½å¤æåºå°åºå±äºåªä¸ªè¯ç§äº 6132 romance_dict:['é','è','ê','à ','ç','Å','ñ','á','ó','ò','ì','ã','õ'], 6133 romance:function(str){ 6134 if(this.romance_dict.indexOf(str) > -1){ 6135 return true; 6136 } else { 6137 return false; 6138 } 6139 }, 6140 //对 ç½æ¼è¯æ çå¥åè¿è¡åæï¼ç宿¯å±äº æ³è¯ã西ççè¯ãæå¤§å©è¯ãè¡èçèª çåªä¸ªã注æè¿ä¸ªæ¯ä¼ å ¥çæ´ä½çå¥åï¼ä¸æ¯ä¼ å ¥çå个å符 6141 //è¿åè¯å«çè¯ç§ï¼ frenchãspanishãitalianãportuguese 妿齿²¡æè¯å«åºæ¥ï¼åè¿å空å符串 6142 romanceSentenceAnaly:function(text) { 6143 // å®ä¹åè¯è¨çå ¸å忝/ç¬¦å·æé (å¯è°æ´) 6144 const langFeatures = { 6145 'french': { score:0 , chars: ['é','è','ê','à ','ç','Å'] }, 6146 'spanish': { score:0 , chars: ['ñ','á','ó'], pairs: ['ll'] }, 6147 'italian': { score:0 , chars: ['ò','ì'], pairs: ['cc', 'ss'] }, 6148 'portuguese': { score:0 , chars: ['ã', 'õ'] } 6149 }; 6150 6151 // éåæ«æ + ç¸é»é å¯¹æ£æµ 6152 for (let i=0; i<text.length; i++) { 6153 const char = text[i].toLowerCase(); 6154 6155 // ååå¹é 6156 Object.keys(langFeatures).forEach(lang => { 6157 if (langFeatures[lang].chars.includes(char)) { 6158 langFeatures[lang].score +=1; 6159 } 6160 }); 6161 6162 // ååé å¯¹æ£æµ (å¦ ll) 6163 if(i < text.length -1) { 6164 const pair = text.slice(i,i+2).toLowerCase(); 6165 Object.keys(langFeatures).forEach(lang => { 6166 const pairs = langFeatures[lang].pairs; 6167 if (pairs && pairs.includes(pair)) { 6168 langFeatures[lang].score += 2; // pairæé大äºåå 6169 } 6170 }); 6171 } 6172 } 6173 6174 // ç»æå¤å® ï¼åæé«åï¼ 6175 let maxLang = ''; 6176 let maxScore = -1; 6177 6178 Object.keys(langFeatures).forEach(lang =>{ 6179 if(langFeatures[lang].score > maxScore){ 6180 maxScore = langFeatures[lang].score; 6181 maxLang = lang; 6182 } 6183 }); 6184 6185 return maxLang || ''; 6186 }, 6187 /**romanceSentenceAnaly end**/ 6188 6189 //æ¯å¦å å«ç¹æ®å符ï¼å å«ï¼åæ¯true 6190 specialCharacter:function(str){ 6191 //å¦ï¼â â´ â 6192 if(/.*[\u2460-\u24E9]+.*$/.test(str)){ 6193 return true 6194 } 6195 6196 //å¦ï¼âââ â â â 6197 if(/.*[\u2500-\u25FF]+.*$/.test(str)){ 6198 return true 6199 } 6200 6201 //å¦ï¼ã ã ã ã¡ 6202 if(/.*[\u3200-\u33FF]+.*$/.test(str)){ 6203 return true 6204 } 6205 6206 //å¦ï¼ä¸ANSI对åºçå ¨è§å符 6207 if(/.*[\uFF00-\uFF5E]+.*$/.test(str)){ 6208 return true 6209 } 6210 6211 //å ¶å®ç¹æ®ç¬¦å· 6212 if(/.*[\u2000-\u22FF]+.*$/.test(str)){ 6213 return true 6214 } 6215 6216 // ã><çç¬¦å· 6217 if(/.*[\u3001-\u3036]+.*$/.test(str)){ 6218 return true; 6219 } 6220 6221 6222 6223 /* 6224 U+0020 ç©ºæ ¼ 6225 U+0021 ! å¹å· 6226 U+0022 " åå¼å· 6227 U+0023 # äºå· 6228 U+0024 $ ä»·é±/è´§å¸ç¬¦å· 6229 U+0025 % ç¾åæ¯ç¬¦å· 6230 U+0026 & è±æâandâçç®åç¬¦å· 6231 U+0027 ' å¼å· 6232 U+0028 ( å¼ å·¦åæ¬å· 6233 U+0029 ) å ³ å³åæ¬å· 6234 U+002A * æå· 6235 U+002B + å å· 6236 U+002C , éå· 6237 U+002D - è¿åå·/åå· 6238 U+002E . å¥å· 6239 U+002F / å·¦ææ 6240 */ 6241 if(/.*[\u0020-\u002F]+.*$/.test(str)){ 6242 return true; 6243 } 6244 6245 /* 6246 U+003A : åå· 6247 U+003B ; åå· 6248 U+003C < å°äºç¬¦å·
6249 U+003D = çäºå· 6250 U+003E > 大äºç¬¦å· 6251 U+003F ? é®å· 6252 U+005B [ å¼ æ¹æ¬å· 6253 U+005C \ 峿æ 6254 U+005D ] å ³ æ¹æ¬å· 6255 U+005E ^ ææ¬ï¼éé³ï¼ç¬¦å· 6256 U+005F _ åºçº¿ 6257 U+0060 ` éé³ç¬¦ 6258 U+007B { å¼ å·¦è±æ¬å· 6259 U+007C | ç´çº¿ 6260 U+007D } å ³ å³è±æ¬å· 6261 U+007E ~ 波浪纹 6262 */ 6263 if(/.*[\u003B\u003B\u003C\u003D\u003E\u003F\u005B\u005C\u005D\u005E\u005F\u0060\u007B\u007C\u007D\u007E]+.*$/.test(str)){ 6264 return true; 6265 } 6266 6267 //空ç½å符ï¼\u0009\u000a + https://cloud.tencent.com/developer/article/2128593 6268 if(/.*[\u0009\u000a\u0020\u00A0\u1680\u180E\u202F\u205F\u3000\uFEFF]+.*$/.test(str)){ 6269 return true; 6270 } 6271 if(/.*[\u2000-\u200B]+.*$/.test(str)){ 6272 return true; 6273 } 6274 6275 /* 6276 è¿äºåç¬¦ä¸»è¦æ¯ ç½è§çæä¸åæ¯åä½ ï¼é常ç¨äºï¼ 6277 æäºéæ´²è¯è¨ææ¹è¨ï¼ 6278 夿åãè¯é³å¦ç¬¦å·ï¼ 6279 ç¹æ®æçæè£ 饰æ§åä½ã 6280 */ 6281 if(/.*[\u2C60-\u2C77]+.*$/.test(str)){ 6282 return true; 6283 } 6284 6285 6286 return false; 6287 }, 6288 /* 6289 ææ¬ç¿»è¯çæ¿æ¢ã 6290 6291 @Deprecated 2025.4.26 ææ°çå¨ translate.util.textReplace 6292 6293 text: åå§ææ¬ï¼ç¿»è¯çæå¥æè æä¸ªè¯å°±å¨è¿ä¸ªææ¬ä¹ä¸ 6294 translateOriginal: ç¿»è¯çæä¸ªè¯æå¥ï¼å¨ç¿»è¯ä¹åçææ¬ 6295 translateResult: ç¿»è¯çæä¸ªè¯æå¥ï¼å¨ç¿»è¯ä¹åçææ¬ï¼ç¿»è¯ç»æ 6296 language: æ¾ç¤ºçè¯ç§ï¼è¿éæ¯å¯¹åºç translateResult è¿ä¸ªææ¬çè¯ç§ã ä¹å°±æ¯æç»æ¿æ¢ä¹åè¦æ¾ç¤ºç»ç¨æ·çè¯ç§ãæ¯å¦å°ä¸æç¿»è¯ä¸ºè±æï¼è¿éä¹å°±æ¯è±æã è¿é伿 ¹æ®æ¾ç¤ºçè¯ç§ä¸åï¼æ¥èªä¸»å³å®æ¯å¦ååå ç©ºæ ¼è¿è¡åå²ã å¦å¤è¿éä¼ å ¥çè¯ç§ä¹æ¯ translate.js çè¯ç§æ è¯ 6297 6298 (注æï¼å¦æ translateResult ä¸åç° translateOriginal çåå¨ï¼å°ä¸è¿è¡ä»»ä½å¤çï¼å ä¸ºæ²¡å¿ è¦äºï¼è¿ä¼é ææ»å¾ªç¯ãç´æ¥å° text è¿å) 6299 6300 ä½¿ç¨æ¤æ¹æ³ï¼ 6301 var text = 'ä½ ä¸å¥½wordä¸ç'; 6302 var translateOriginal = 'ä¸'; 6303 var translateResult = '䏿°'; //ç¿»è¯ç»æ 6304 translate.language.textTranslateReplace(text, translateOriginal, translateResult, 'english'); 6305 6306 */ 6307 textTranslateReplace:function(text, translateOriginal, translateResult, language){ 6308 return translate.util.textReplace(text, translateOriginal, translateResult, language); 6309 } 6310 }, 6311 //ç¨æ·ç¬¬ä¸æ¬¡æå¼ç½é¡µæ¶ï¼èªå¨å¤æå½åç¨æ·æå¨å½å®¶ä½¿ç¨çæ¯åªç§è¯è¨ï¼æ¥èªå¨è¿è¡åæ¢ä¸ºç¨æ·æå¨å½å®¶çè¯ç§ã 6312 //å¦æä½¿ç¨åï¼ç¬¬äºæ¬¡å¨ç¨ï¼é£å°±ä¼å ä»¥ç¨æ·æéæ©ç为主 6313 executeByLocalLanguage:function(){ 6314 //å è¯»ç¨æ·èªå·±æµè§å¨çé»è®¤è¯è¨ 6315 var browserDefaultLanguage = translate.util.browserDefaultLanguage(); 6316 if(typeof(browserDefaultLanguage) != 'undefined' && browserDefaultLanguage.length > 0){ 6317 translate.changeLanguage(browserDefaultLanguage); 6318 return; 6319 } 6320 6321 if(typeof(translate.request.api.ip) != 'string' || translate.request.api.ip == null || translate.request.api.ip.length < 1){ 6322 return; 6323 } 6324 6325 //å¦æç¨æ·æµè§å¨æ²¡è¯»å°é»è®¤è¯è¨ï¼æè é»è®¤è¯è¨æ²¡æå¯¹åºå°translate.jsæ¯æçè¯ç§ï¼é£ä¹å¨éç¨ipè¯å«çæ¹å¼ 6326 translate.request.post(translate.request.api.ip, {}, function(responseData, requestData){ 6327 //console.log(responseData); 6328 if(responseData.result != 1){ 6329 translate.log('==== ERROR è·åå½åç¨æ·æå¨åºåå¼å¸¸ ===='); 6330 translate.log(data.info); 6331 translate.log('==== ERROR END ===='); 6332 }else{ 6333 translate.storage.set('to',responseData.language); //è®¾ç½®ç®æ ç¿»è¯è¯è¨ 6334 translate.to = responseData.language; //è®¾ç½®ç®æ è¯è¨ 6335 //translate.selectLanguageTag 6336 translate.execute(); //æ§è¡ç¿»è¯ 6337 } 6338 }, null); 6339 }, 6340 6341 util:{ 6342 /* 6343 ææ¬æ¿æ¢ï¼å°æ¿æ¢å®æ¯çç»æè¿å 6344 èªå®ä¹æ¯è¯ç齿¯éè¿è¿ä¸ªæ¥è¿è¡æ¿æ¢ 6345 2025.4.26 ä» language ä¸ æ¿å°è¿é 6346 6347 text: åå§ææ¬ï¼ç¿»è¯çæå¥æè æä¸ªè¯å°±å¨è¿ä¸ªææ¬ä¹ä¸ 6348 translateOriginal: ç¿»è¯çæä¸ªè¯æå¥ï¼å¨ç¿»è¯ä¹åçææ¬ 6349 translateResult: ç¿»è¯çæä¸ªè¯æå¥ï¼å¨ç¿»è¯ä¹åçææ¬ï¼ç¿»è¯ç»æ 6350 language: æ¾ç¤ºçè¯ç§ï¼è¿éæ¯å¯¹åºç translateResult è¿ä¸ªææ¬çè¯ç§ã ä¹å°±æ¯æç»æ¿æ¢ä¹åè¦æ¾ç¤ºç»ç¨æ·çè¯ç§ãæ¯å¦å°ä¸æç¿»è¯ä¸ºè±æï¼è¿éä¹å°±æ¯è±æã
6350 è¿é伿 ¹æ®æ¾ç¤ºçè¯ç§ä¸åï¼æ¥èªä¸»å³å®æ¯å¦ååå ç©ºæ ¼è¿è¡åå²ã å¦å¤è¿éä¼ å ¥çè¯ç§ä¹æ¯ translate.js çè¯ç§æ è¯ 6351 participles: åè¯ï¼æ°ç»å½¢æãé»è®¤ä¸ä¼ åæ¯æ²¡æå ¶ä»åè¯éè¦ä¿ççã ä¼ å ¥æ¯å¦ ['ä½ å¥½','ä½ æ¯è°'] 6352 æ¯å¦ translateOriginal ä¼ å ¥ 'ä½ ' æ¶ï¼ text ä¸ç 'ä½ å¥½','ä½ æ¯è°' æ¯ä¸è½è¢«æåº'ä½ 'è¿ä¸ªåè¿è¡æ¿æ¢çï¼ä¸ç¶å°±ç ´åäºåè¯äº 6353 6354 (注æï¼å¦æ translateResult ä¸åç° translateOriginal çåå¨ï¼å°ä¸è¿è¡ä»»ä½å¤çï¼å ä¸ºæ²¡å¿ è¦äºï¼è¿ä¼é ææ»å¾ªç¯ãç´æ¥å° text è¿å) 6355 6356 ä½¿ç¨æ¤æ¹æ³ï¼ 6357 var text = 'ä½ ä¸å¥½wordä¸ç'; 6358 var translateOriginal = 'ä¸'; 6359 var translateResult = '䏿°'; //ç¿»è¯ç»æ 6360 translate.util.textReplace(text, translateOriginal, translateResult, 'english'); //没æåè¯ï¼æ£å¸¸æ¿æ¢ 6361 translate.util.textReplace(text, translateOriginal, translateResult, 'english',['ä¸ç','好word']); //æåè¯ï¼è¦ä¿çåè¯ç»æï¼ä¸è½è¢«æåæ¿æ¢ï¼ä¸è½æååè¯çè¯ä¹ 6362 6363 */ 6364 textReplace:function(text, translateOriginal, translateResult, language, participles){ 6365 //console.log('----text:'+text.replace(/\t/g, '\\t').replace(/\r/g, '\\r').replace(/\n/g, '\\n').replace(/ /g, '[空ç½ç¬¦]')+', translateOriginal:'+translateOriginal+', translateResult:'+translateResult); 6366 6367 //å¦æè¦æ¿æ¢çæºææ¬ç´æ¥å°±æ¯æ´ä¸ªææ¬ï¼é£ä¹å°±ä¸ç¨å¨åä»ä¹å¤æäºï¼ç´æ¥å° ç¿»è¯çç»æææ¬è¿åå°±å¥½äº 6368 if(text == translateOriginal){ 6369 return translateResult; 6370 } 6371 6372 //æåä¹é´éè¦ç©ºæ ¼ï¼ä¹å°±æ¯åè§æ ç¹ç¬¦å·ï¼åæ¯è±è¯ï¼æ³è¯ï¼ 忝true 6373 var requireSpace = translate.language.wordBlankConnector(language); 6374 6375 //å¦æè¦æ¿æ¢çææ¬åªæ¯åææ¬ä¸çä¸é¨åï¼é£ä¹å°±éè¦è¿è¡å¤çäº 6376 var findText = translateOriginal; 6377 6378 /**** 夿 findText çå¼å§å符è·ç»æå符æ¯å¦å å«ç ç¹æ®ç¬¦å· ï¼ï¼ã å ä¸ºå¨ translate.util.textReplace æ¿æ¢æ¶ï¼ä¼æ ¹æ®å½åè¯ç§ï¼èªå¨å°ååæå¥å·çç¬¦å·æ¶è¿è¡ä¸è±ç符å·è½¬æ¢ï¼æ¤æ¶å¦æ findText ä¼ å ¥ç带æå¥å·çï¼æ¯å¦ âä½ å¥½ï¼â èå®é ä¸textçå 容æ¯å·²ç»è¢«æ¿æ¢è¿ï¼å°±ä¼å¯¼è´ âä½ å¥½ï¼â æ¾ä¸å°ï¼è âä½ å¥½,â è½æ¾å° ****/ 6379 var punctuationMarks_fullWidth = ['ï¼','ï¼','ã']; //æ ç¹ç¬¦å·-å ¨è§ï¼ç¨äºä¸æçè¯ç§ 6380 var punctuationMarks_halfWidth = [',',':','.']; //æ ç¹ç¬¦å·-åè§ï¼ç¨äºè±æçè¯ç§ 6381 6382 //å第ä¸ä¸ªå符 6383 var findTextFirstChar = findText.charAt(0);
6384 //åæåä¸ä¸ªå符 6385 var findTextLastChar = findText.charAt(findText.length-1); 6386 6387 /* 6388 * translateOriginal çæçç¨äºæ¿æ¢çåç§ï¼å¯è½æ¯å¤ä¸ªï¼æ¯å¦ âä½ å¥½ï¼ä¸çãâ ä¸ç "ï¼ä¸ç" å¨ç¿»è¯ä¸ºè±ææ 嵿¶ï¼ä¼åºç°è¿å ç§åç§ï¼ 6389 * , ä¸çã 6390 * , ä¸ç. 6391 * ï¼ä¸çã 6392 * ï¼ä¸ç. 6393 * æ ¹æ®ä¸åçä¸è±æï¼æ ç¹ç¬¦å·å颿¯å¦è·ç©ºæ ¼ä¹ä¸å 6394 */ 6395 var originalArray = []; 6396 originalArray.push(translateOriginal); //é¦å æå½åçå å ¥è¿å» 6397 6398 //ç¿»è¯æ¿æ¢ä¸ºåè§æ ç¹ç¬¦å·ï¼å¦è±è¯ 6399 if(requireSpace){ 6400 6401 //第ä¸ä¸ªåç°å ¨è§åç¬¦ï¼ è½¬ä¸ºåè§å¤ç 6402 if(punctuationMarks_fullWidth.indexOf(findTextFirstChar) > -1){ 6403 var processFirstCharText = punctuationMarks_halfWidth[punctuationMarks_fullWidth.indexOf(findTextFirstChar)]+' '+findText.substring(1, findText.length); 6404 originalArray.push(processFirstCharText); 6405 6406 //第ä¸ä¸ªå¤çåï¼å¯»æ¾æåä¸ä¸ªå ¨è§å符转为åè§å¤ç 6407 if(punctuationMarks_fullWidth.indexOf(findTextLastChar) > -1){ 6408 originalArray.push(processFirstCharText.substring(0, processFirstCharText.length-1)+punctuationMarks_halfWidth[punctuationMarks_fullWidth.indexOf(findTextLastChar)]); 6409 } 6410 } 6411 6412 //å°æåä¸ä¸ªå ¨è§å符转为åè§å¤ç 6413 if(punctuationMarks_fullWidth.indexOf(findTextLastChar) > -1){ 6414 originalArray.push(findText.substring(0, findText.length-1)+punctuationMarks_halfWidth[punctuationMarks_fullWidth.indexOf(findTextLastChar)]); 6415 } 6416 }else{ 6417 //ç¿»è¯æ¿æ¢ä¸ºå ¨è§æ ç¹ç¬¦å·ï¼å¦ä¸æ 6418 6419 //第ä¸ä¸ªåç°ååç¬¦ï¼ è½¬ä¸ºå ¨è§å¤çãè¿éä¸ç¨è·ä¸é¢ä¼¼ç追å å»é¤ç©ºæ ¼çï¼å 为 textReplace_service åªä¸ºäºé 读æ¹ä¾¿è¿½å ç©ºæ ¼ï¼å¹¶æ²¡æåå»ç©ºæ ¼å¤çã 6420 if(punctuationMarks_halfWidth.indexOf(findTextFirstChar) > -1){ 6421 var processLastCharText = punctuationMarks_fullWidth[punctuationMarks_halfWidth.indexOf(findTextFirstChar)]+' '+findText.substring(1, findText.length); 6422 originalArray.push(processLastCharText); 6423 6424 //第ä¸ä¸ªå¤çåï¼å¯»æ¾æåä¸ä¸ªåè§åç¬¦è½¬ä¸ºå ¨è§å¤ç 6425 if(punctuationMarks_halfWidth.indexOf(findTextLastChar) > -1){ 6426 originalArray.push(processLastCharText.substring(0, processLastCharText.length-1)+punctuationMarks_fullWidth[punctuationMarks_halfWidth.indexOf(findTextLastChar)]); 6427 } 6428 } 6429 6430 //å°æåä¸ä¸ªå ¨è§å符转为åè§å¤ç 6431 if(punctuationMarks_halfWidth.indexOf(findTextLastChar) > -1){ 6432 originalArray.push(findText.substring(0, findText.length-1)+punctuationMarks_fullWidth[punctuationMarks_halfWidth.indexOf(findTextLastChar)]); 6433 } 6434 } 6435 //console.log(originalArray); 6436 6437 for(var i = 0; i < originalArray.length; i++){ 6438 if(text.indexOf(originalArray[i]) > -1){ 6439 text = translate.util.textReplace_service(text, originalArray[i], translateResult, language, participles); 6440 } 6441 } 6442 6443 return text; 6444 }, 6445 /* 6446 宿å¡äºä¸é¢ç textReplaceï¼ä¸éè¦ç´æ¥ä½¿ç¨è¿ä¸ª 6447 6448 */ 6449 textReplace_service:function(text, translateOriginal, translateResult, language, participles){ 6450 //console.log('----text:'+text+', translateOriginal:'+translateOriginal+', translateResult:'+translateResult); 6451 //å¦æè¦æ¿æ¢çæºææ¬ç´æ¥å°±æ¯æ´ä¸ªææ¬ï¼é£ä¹å°±ä¸ç¨å¨åä»ä¹å¤æäºï¼ç´æ¥å° ç¿»è¯çç»æææ¬è¿åå°±å¥½äº 6452 if(text == translateOriginal){ 6453 return translateResult; 6454 } 6455 6456 /* 6457 6458 //å½åæ¿æ¢åï¼æ¿æ¢ç»æç»æä½ç½®ç䏿 ã 6459 //ä¸å¼å§è¿æ²¡è¿è¡æ¿æ¢ï¼é£ä¹è¿ä¸ªä¸æ å°±æ¯ 0 6460 //æ¯å¦ ä½ å¥½å ä¸ç 好 æ¿æ¢ä¸º "好ç" 飿åç»æä¸º "ä½ å¥½çå" ï¼è¿éæ¯ âçâ ç䏿 2 6461 let currentReplaceEndIndex = 0; 6462 6463 //whileæå¤§å¾ªç¯æ¬¡æ°30次ï¼å å¾åºç°æªç¥å¼å¸¸å¯¼è´æ»å¾ªç¯ 6464 let maxWhileNumber = 30; 6465 */ 6466 6467 var indexArray = translate.util.findParticiple(text, translateOriginal, participles); 6468 for(var i = indexArray.length-1; i > -1 ; i--){ 6469 //console.log('text:'+text+'\tcurrentReplaceEndIndex:'+currentReplaceEndIndex); 6470 6471 //éè¿ translate.util.replaceFromIndex è¿è¡æ¿æ¢æ¶ç index å¼å§ä½ç½® ã æ¯å¦å¦æä¸é¢è¯å«åé¢çä¸ä¸ªå符ï¼è¦å为, é£ä¹å°±æ¯è¦ç»§ç»ååä¸ä½ï¼è¿éå°±è¦ -1 6472 let replaceIndex = indexArray[i]; 6473 //è¦æ¿æ¢çç»æææ¬ï¼è¿ä¸ªææ¬å¯è½å颿å ç©ºæ ¼æè å颿å ç©ºæ ¼çï¼ 6474 let replaceResultText = ''+translateResult; 6475 //æ¿æ¢çææ¬ ï¼è¿éæå¯è½ä¼è¿½å ä¸æäºæ ç¹ç¬¦å·ï¼æä»¥åç¬ä¹ååºæ¥ï¼è䏿¯ä½¿ç¨æ¹æ³ä¸ä¼ å ¥ç translateOriginal 6476 let replaceOriginalText = '' + translateOriginal; 6477 6478 //æ ¹æ®ä¸åçè¯ç§ï¼å¦ææçè¯ç§éè¦å ç©ºæ ¼æ¥è¿è¡åºååè¯ï¼é£ä¹ä¹è¦è¿è¡ç©ºæ ¼çå¤å® 6479 if(translate.language.wordBlankConnector(language)){ 6480 //let originalIndex = text.indexOf(translateOriginal, currentReplaceEndIndex); //ç¿»è¯ä¹åï¼ç¿»è¯çåè¯å¨å符串ä¸çèµ·å§åæ ï¼0å¼å§ï¼ 6481 let originalIndex = indexArray[i]; 6482 //console.log("originalIndex: "+originalIndex); 6483 6484 //è¦å 夿åé¢ï¼ä¸ç¶å 夿åé¢ï¼å äºåå®çé¿åº¦å°±ååäº 6485 6486 //夿å®å颿¯å¦è¿æææ¬ 6487 var afterCharIndex = indexArray[i]+translateOriginal.length; //translateOriginalä¹åç第ä¸ä¸ªææ¬çindex䏿 6488 if(afterCharIndex < text.length){
6489 let char = text.charAt(afterCharIndex); 6490 //console.log(translateOriginal+' after char : '+char+", index:"+afterCharIndex); 6491 if(/ã/.test(char)){ 6492 replaceResultText = replaceResultText + '. '; 6493 replaceOriginalText = translateOriginal + 'ã'; 6494 }else if(/ï¼/.test(char)){ 6495 replaceResultText = replaceResultText + ', '; 6496 replaceOriginalText = translateOriginal + 'ï¼'; 6497 }else if(/ï¼/.test(char)){ 6498 replaceResultText = replaceResultText + ': '; 6499 replaceOriginalText = translateOriginal + 'ï¼'; 6500 }else if([' ', '\n','\t',']','|', '_','-','/'].indexOf(char) !== -1){ 6501 // 妿åé¢çåç¬¦æ¯ è¿äºå符ï¼é£ä¹ä¸ç¨æ·»å ç©ºæ ¼éå¼ 6502 }else{ 6503 //è¡¥å ä¸ä¸ä¸ªç©ºæ ¼ï¼ç¨äºå°ä¸¤ä¸ªåè¯éå¼ã ä¸è¿ ï¼å¦æå½å replaceResultText çæåä¸ä¸ªåç¬¦ä¹æ¯ç©ºæ ¼ï¼é£å°±ä¸éè¦åå ç©ºæ ¼äºã è¿éå°±åªå¤æç©ºæ ¼å°±å¥½äºï¼è³äºå ¶ä»çæ¢è¡çåºæ¬ä¸ä¼åºç°è¿ä¸ªæ åµï¼æä»¥ä¸èè 6504 if(replaceResultText.length > 0 && replaceResultText.charAt(replaceResultText.length-1) == ' '){ 6505 //replaceResultText æ¬èº«æå¼ï¼ä¸æåä¸ä¸ªå符就æ¯ç©ºæ ¼ï¼å°±ä¸éè¦å追å ç©ºæ ¼è¿è¡éå¼äº 6506 }else{ 6507 replaceResultText = replaceResultText + ' '; 6508 } 6509 } 6510 } 6511 6512 //夿å®å颿¯å¦è¿æææ¬ 6513 if(originalIndex > 0){ 6514 let char = text.charAt(originalIndex-1); 6515 //console.log(char); 6516 6517 if(/ã/.test(char)){ 6518 replaceIndex--; 6519 replaceResultText = '. '+replaceResultText; 6520 replaceOriginalText = 'ã'+replaceOriginalText; 6521 }else if(/ï¼/.test(char)){ 6522 replaceIndex--; 6523 replaceResultText = ', '+replaceResultText; 6524 replaceOriginalText = 'ï¼'+replaceOriginalText; 6525 }else if(/ï¼/.test(char)){ 6526 replaceIndex--; 6527 replaceResultText = ': '+replaceResultText; 6528 replaceOriginalText = 'ï¼'+replaceOriginalText; 6529 }else if([' ', '\n','\t','[', '|', '_','-','/'].indexOf(char) !== -1){ 6530 // 妿åé¢çåç¬¦æ¯ è¿äºå符ï¼é£ä¹ä¸ç¨æ·»å ç©ºæ ¼éå¼ 6531 //console.log('ä¸éè¦ç©ºæ ¼éå¼ç'); 6532 }else{ 6533 //è¡¥å ä¸ä¸ä¸ªç©ºæ ¼ï¼ç¨äºå°ä¸¤ä¸ªåè¯éå¼ã ä¸è¿ ï¼å¦æå½å replaceResultText ç第ä¸ä¸ªåç¬¦ä¹æ¯ç©ºæ ¼ï¼é£å°±ä¸éè¦åå ç©ºæ ¼äºã è¿éå°±åªå¤æç©ºæ ¼å°±å¥½äºï¼è³äºå ¶ä»çæ¢è¡çåºæ¬ä¸ä¼åºç°è¿ä¸ªæ åµï¼æä»¥ä¸èè 6534 if(replaceResultText.length > 0 && replaceResultText.charAt(0) == ' '){ 6535 //replaceResultText æ¬èº«æå¼ï¼ä¸æåä¸ä¸ªå符就æ¯ç©ºæ ¼ï¼å°±ä¸éè¦å追å ç©ºæ ¼è¿è¡éå¼äº 6536 }else{ 6537 replaceResultText = ' '+replaceResultText; 6538 } 6539 //console.log('before add space : '+replaceResultText); 6540 } 6541 } 6542 }else{ 6543 //妿æ¯å ¶ä»è¯ç§æ¯å¦è±è¯æ³è¯ç¿»è¯ä¸ºä¸æãæ¥æï¼é£ä¹æ ç¹ç¬¦å·ä¹è¦å¤æçï¼è¿ä¸ªå 为ç®åè¿ä¸ªåºæ¯è¿æ²¡åéå°ï¼å°±ä¸å¤æäºï¼éå°äºå¨å ã 6544 6545 } 6546 //console.log('replaceOriginalText: '+ replaceOriginalText+" --> replaceResultText: "+replaceResultText); 6547 6548 let replaceResult = translate.util.replaceFromIndex(text, replaceIndex, replaceOriginalText, replaceResultText); 6549 6550 if(replaceResult.replaceEndIndex < 1){ 6551 translate.log('translate.util.findParticiple ä¸å·²ç»åç°äºï¼ä½æ¯å®é æ²¡ææ¿æ¢ï¼åºç°å¼å¸¸äºï¼ç论ä¸è¿æ¯ä¸åºè¯¥åºç°çã text:'+text+' , index:'+indexArray[i]+', translateOriginal:'+translateOriginal); 6552 }else{ 6553 text = replaceResult.text; 6554 } 6555 } 6556 6557 return text; 6558 }, 6559 /* 6560 ä»ä¸ä¸ªå符串ä¸, å¯»æ¾æä¸ªåè¯ãè¿ä¸ªåè¯ä¸è½ç ´åå ¶ä»åè¯ã 6561 text: åå§ææ¬ï¼ç¿»è¯çæå¥æè æä¸ªè¯å°±å¨è¿ä¸ªææ¬ä¹ä¸ 6562 findParticiple: 寻æ¾çåè¯ææ¬ 6563 participles: åè¯ï¼æ°ç»å½¢æãé»è®¤ä¸ä¼ åæ¯æ²¡æå ¶ä»åè¯éè¦ä¿ççã ä¼ å ¥æ¯å¦ ['ä½ å¥½','ä½ æ¯è°'] 6564 æ¯å¦ translateOriginal ä¼ å ¥ 'ä½ ' æ¶ï¼ text ä¸ç 'ä½ å¥½','ä½ æ¯è°' æ¯ä¸è½è¢«æåº'ä½ 'è¿ä¸ªåè¿è¡æ¿æ¢çï¼ä¸ç¶å°±ç ´åäºåè¯äº 6565 6566 6567 return è¿å寻æ¾å°çåè¯ææ¬å¨ text ä¸ç䏿 æ°ç»ï¼ä¸æ æ¯ä»0å¼å§ï¼
6568 æ¯å¦ï¼ [0, 3, 6] 便æ¯å¨ text ä¸ç0䏿 åºç°äºè¿ä¸ª findParticiple 寻æ¾çåè¯ææ¬ 6569 å¦ææ²¡æåç°ï¼åè¿å [] 空æ°ç» 6570 注æï¼å®éé¢çå ç´ é½æ¯æç §é¡ºåºç±å°å¾å¤§ï¼é¡ºåºæç 6571 6572 */ 6573 findParticiple:function(text, findText, translateTexts){ 6574 var resultArray = []; 6575 6576 //å ¼å®¹ translateTexts ä¸ä¼ å ¥çæ åµ 6577 if(typeof(translateTexts) == 'undefined' || translateTexts == null){ 6578 translateTexts = []; 6579 } 6580 6581 /*****1. å è¿æ»¤ï¼è¿æ»¤æ translateTexts ä¸ ä¸å å« translateOriginalã 以忿¬é¿åº¦å°äºçäº translateOriginal è¿ä¸ªåè¯çæ åµ*****/ 6582 var newTranslateTexts = []; 6583 for(var i = 0; i < translateTexts.length; i++){ 6584 if(translateTexts[i].indexOf(findText) != -1 && translateTexts[i].length > findText.length){ 6585 newTranslateTexts.push(translateTexts[i]); 6586 } 6587 } 6588 //console.log('å å«'+findText+'çåè¯ï¼'); 6589 //console.log(newTranslateTexts) 6590 6591 //å½åæ¿æ¢åï¼æ¿æ¢ç»æç»æä½ç½®ç䏿 ã 6592 //ä¸å¼å§è¿æ²¡è¿è¡æ¿æ¢ï¼é£ä¹è¿ä¸ªä¸æ å°±æ¯ 0 6593 //æ¯å¦ ä½ å¥½å ä¸ç 好 æ¿æ¢ä¸º "好ç" 飿åç»æä¸º "ä½ å¥½çå" ï¼è¿éæ¯ âçâ ç䏿 2 6594 var currentReplaceEndIndex = 0; 6595 6596 //whileæå¤§å¾ªç¯æ¬¡æ°30次ï¼å å¾åºç°æªç¥å¼å¸¸å¯¼è´æ»å¾ªç¯ 6597 var maxWhileNumber = 30; 6598 6599 // è¯å«ï¼indexOf é个è¯å« 'ä½ ' ï¼è¯å«å°ä¹åï¼åè· å ¶ä»æ¯å¦ 'ä½ æ¯è°' è¿è¡å¤æï¼æ¯å¦ 'ä½ æ¯è°' å°±è¦è®² indexOf ç䏿 +2 æ¥æªåè¿textä¸çä¸ä¸ªå符ï¼å»è· 'ä½ æ¯è°' å¤å®ï¼ä»¥å¤å®æ¯å¦æ¯ä¸ä¸ªæ£å¸¸çä¸è½æåçåè¯ 6600 while(text.indexOf(findText, currentReplaceEndIndex) > -1 && maxWhileNumber-- > 0){ 6601 var index = text.indexOf(findText, currentReplaceEndIndex); 6602 6603 var findParticiple = false; //åç°æ¯å ¶ä»åè¯äºæ¯trueï¼æ²¡åç°å¯ä»¥æ¿æ¢åæ¯false 6604 6605 //è¿è¡å ¶ä»åè¯åç°çç¥ 6606 if(newTranslateTexts.length > 0){ 6607 //åç°çè¿ä¸ªè¯å¯è½æ¯å ¶ä»åè¯ä¸çä¸é¨åï¼è¿ä¸ªè¦å¤æå½åindexæ¯å¦æ¯å ¶ä»åè¯çä¸é¨åã è¿éè¦è¿è¡éå newTranslateTexts é个ååºè¿è¡å¯¹æ¯ 6608 6609 for(var j = 0; j < newTranslateTexts.length; j++){ 6610 //夿 newTranslateTexts[j] è¿ä¸ªåè¯ä¸å å«ç findText è¿ä¸ªææ¬ï¼è¿ä¸ªææ¬æ¯å¨ newTranslateTexts[j] ç䏿 çå¤å° 6611 var indexInNewTranslateTexts = newTranslateTexts[j].indexOf(findText); 6612 // å 为 newTranslateTexts æ¯éè¿çéå å« findText èåºçï¼æä»¥å®è¯å®æ¯å å«çï¼æä¸æ ç 6613 // è¿éè¦ä» text ä¸ï¼æ ¹æ® indexInNewTranslateTexts å 忬 findText ç indexï¼å¨è¿ä¸ªindexçåæè åï¼è¿½å å ä¸ªææ¬ï¼è¿è¿½å çææ¬é¿åº¦ï¼ä¹å°±æ¯æ ¹æ® indexInNewTranslateTexts 以å newTranslateTexts[j] çé¿åº¦ 6614 6615 //è¿éåå¤è¦æ ¹æ® newTranslateTexts[j] ã indexInNewTranslateTexts ï¼æ¥å®ä¹ä» text ä¸å»å å¯¹åº newTranslateTexts[j] çé¿åº¦ï¼ä»¥å¤æå½åindexæ¯å¦æ¯åç newTranslateTexts[j] è¿ä¸ªåè¯ç 6616 var length = newTranslateTexts[j].length; 6617 var split_text = text.substring(index-indexInNewTranslateTexts, index-indexInNewTranslateTexts + length); 6618 if(split_text == newTranslateTexts[j]){ 6619 //说æå½åindexæ¯åç newTranslateTexts[j] è¿ä¸ªåè¯ç,é£è¿ä¸ªå°±ä¸è½æ¿æ¢ï¼è¦å¿½ç¥ 6620 //console.log('å½åæ¯å ¶ä»åè¯ï¼ä¸è½ç´æ¥æ¿æ¢ ï¼ '+newTranslateTexts[j]); 6621 findParticiple = true; 6622 break; 6623 } 6624 } 6625 } 6626 6627 if(!findParticiple){ 6628 resultArray.push(index); 6629 } 6630 currentReplaceEndIndex = index+findText.length; 6631 } 6632 6633 6634 6635 /* 6636 è¿ééè¦å°ä¸é¢ç 9ã7 è¿ä¸ªä¸æ æ¾åºæ¥ï¼ç¶åè¿è¡æ¿æ¢ã 注æè¦å ä»åè¿è¡æ¿æ¢ï¼é¿å ä»åæ¿æ¢ï¼ä¹åç䏿 é¿åº¦åºç°åå 6637 */ 6638 6639 //text = translate.util.replaceFromIndex(text, 9, translateOriginal, translateResult).text; 6640 //text = translate.util.replaceFromIndex(text, 7, translateOriginal, translateResult).text; 6641 6642 6643 //return text; 6644 6645 return resultArray; 6646 }, 6647 /* 6648 js ç replace è½åï¼è¿ä¸ªæ¯å¯ä»¥æå®ä»ç¬¬å 个å符å¼å§è¿è¡replace 6649 1. è¿éå¯ä»¥ replaceText æ¬èº«å å«ç originalText 6650 2. originalText å¯ä»¥åºç°å¤æ¬¡ 6651 6652 @param 6653 text è¦è¿è¡æ¿æ¢çåå§ææ¬ 6654 index è¦ä» text çåªä¸ªä¸æ å¼å§ã ï¼ç¬¬ä¸ä¸ªåç¬¦ä¸æ æ¯0ï¼ 6655 originalText è¦æ¿æ¢çææ¬ï¼è¢«æ¿æ¢çææ¬ 6656 replaceText æ¿æ¢ä¸ºçææ¬ï¼å° originalText æ¿æ¢ä¸ºä»ä¹
6657 replaceFromIndex('ä½ å¥½åï¼ä½ ä¹å¥½ï¼', 0, 'ä½ ', 'ä½ æ¯è°'); 6658 6659 @return 对象 6660 text æ¿æ¢çç»æ 6661 replaceEndIndex å½åæ¿æ¢åï¼æ¿æ¢ç»æç»æä½ç½®ç䏿 ã 6662 å¦ææ²¡è¿è¡æ¿æ¢ï¼é£ä¹è¿ä¸ªä¸æ å°±æ¯ 0 6663 æ¯å¦ ä½ å¥½å ä¸ç 好 æ¿æ¢ä¸º "好ç" 飿åç»æä¸º "ä½ å¥½çå" ï¼è¿éæ¯ âçâ ç䏿 2 6664 */ 6665 replaceFromIndex:function(text, index, originalText, replaceText){ 6666 const before = text.slice(0, index); 6667 const after = text.slice(index); 6668 const originalTextIndex = after.indexOf(originalText); 6669 if(originalTextIndex > -1){ 6670 const replacedAfter = after.replace(originalText, replaceText); 6671 return { 6672 text: before + replacedAfter, 6673 replaceEndIndex: index + originalTextIndex + replaceText.length 6674 } 6675 }else{ 6676 //没æåç°å¯æ¿æ¢çå符ï¼é£ä¹å°±åæ ·è¿å 6677 //console.log('after:'+after); 6678 //console.log(text+originalText); 6679 return { 6680 text: before, 6681 replaceEndIndex: 0 6682 }; 6683 } 6684 }, 6685 6686 /* çæä¸ä¸ªéæºUUIDï¼å¤å¶äº https://gitee.com/mail_osc/kefu.js */ 6687 uuid:function() { 6688 var d = new Date().getTime(); 6689 if (window.performance && typeof window.performance.now === "function") { 6690 d += performance.now(); //use high-precision timer if available 6691 } 6692 var uuid = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'.replace(/[xy]/g, function (c) { 6693 var r = (d + Math.random() * 16) % 16 | 0; 6694 d = Math.floor(d / 16); 6695 return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16); 6696 }); 6697 return uuid; 6698 }, 6699 6700 //夿åç¬¦ä¸²ä¸æ¯å¦åå¨tagæ ç¾ã trueåå¨ 6701 findTag:function(str) { 6702 var reg = /<[^>]+>/g; 6703 return reg.test(str); 6704 }, 6705 //ä¼ å ¥ä¸ä¸ªæ°ç»ï¼ä»æ°ç»ä¸æ¾åºç°é¢çæå¤çä¸ä¸ªè¿åã 妿å¤ä¸ªé¢çåºç°ç次æ°ä¸æ ·ï¼é£ä¼è¿åå¤ä¸ª 6706 arrayFindMaxNumber:function(arr){ 6707 6708 // å¨åæ¯ä¸ªå ç´ åºç°çæ¬¡æ° 6709 var numbers = {} 6710 6711 // å¨ååºç°æå¤æ¬¡çå ç´ 6712 var maxStr = [] 6713 6714 // å¨åæå¤åºç°çå ç´ æ¬¡æ° 6715 var maxNum = 0 6716 6717 for(var i =0,len=arr.length;i<len;i++){ 6718 if(!numbers[arr[i]]){ 6719 numbers[arr[i]] = 1 6720 }else{ 6721 numbers[arr[i]]++ 6722 } 6723 6724 if(numbers[arr[i]]>maxNum){ 6725 maxNum = numbers[arr[i]] 6726 } 6727 } 6728 6729 for(var item in numbers){ 6730 if (!numbers.hasOwnProperty(item)) { 6731 continue; 6732 } 6733 if(numbers[item]===maxNum){ 6734 maxStr.push(item) 6735 } 6736 } 6737 6738 return maxStr; 6739 }, 6740 //对å符串è¿è¡hashåï¼ç®çåå¯ä¸å¼è¿è¡æ è¯ 6741 hash:function(str){ 6742 if(str == null || typeof(str) == 'undefined'){ 6743 return str; 6744 } 6745 var hash = 0, i, chr; 6746 if (str.length === 0){ 6747 return hash; 6748 } 6749 6750 for (i = 0; i < str.length; i++) { 6751 chr = str.charCodeAt(i); 6752 hash = ((hash << 5) - hash) + chr; 6753 hash |= 0; // Convert to 32bit integer 6754 } 6755 return hash+''; 6756 }, 6757 //å»é¤ä¸äºæå®å符ï¼å¦æ¢è¡ç¬¦ã å¦æä¼ å ¥çæ¯nullï¼åè¿å空å符串 6758 charReplace:function(str){ 6759 6760 if(str == null){ 6761 return ''; 6762 } 6763 str = str.trim(); 6764 str = str.replace(/\t|\n|\v|\r|\f/g,''); //å»é¤æ¢è¡ç¬¦ç 6765 //str = str.replace(/&/g, "%26"); //å ä¸ºå¨æäº¤æ¶å·²ç»è¿è¡äºurlç¼ç äº 6766 return str; 6767 }, 6768 //RegExpç¸å ³ 6769 regExp:{ 6770 // new RegExp(pattern, resultText); ä¸ç pattern å符串çé¢å¤ç 6771 pattern:function(str){ 6772 str = str.replace(/\\/g,'\\\\'); //è¿ä¸ªä¸å®è¦æ¾å¨ç¬¬ä¸ä¸ªï¼ä¸ç¶ä¼è¢«ä¸é¢çå½±å 6773 //str = str.replace(/'/g,'\\\''); 6774 str = str.replace(/\"/g,'\\\"'); 6775 //str = str.replace(/./g,'\\\.'); 6776 str = str.replace(/\?/g,'\\\?'); 6777 str = str.replace(/\$/g,'\\\$'); 6778 str = str.replace(/\(/g,'\\\('); 6779 str = str.replace(/\)/g,'\\\)'); 6780 str = str.replace(/\|/g,'\\\|'); 6781 str = str.replace(/\+/g,'\\\+'); 6782 str = str.replace(/\*/g,'\\\*'); 6783 str = str.replace(/\[/g,'\\\['); 6784 str = str.replace(/\]/g,'\\\]'); 6785 str = str.replace(/\^/g,'\\\^'); 6786 str = str.replace(/\{/g,'\\\{'); 6787 str = str.replace(/\}/g,'\\\}'); 6788 return str; 6789 }, 6790 // new RegExp(pattern, resultText); ä¸ç resultText å符串çé¢å¤ç 6791 resultText:function(str){ 6792 //str = str.replace(/"/g,"\""); 6793 //str = str.replace(/'/g,"\\\'"); 6794 //str = str.replace(/"/g,"\\\""); 6795 return str; 6796 } 6797 }, 6798 //è·åURLçGETåæ°ãè¥æ²¡æï¼è¿å"" 6799 getUrlParam:function (name){ 6800 var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); 6801 var r = window.location.search.substr(1).match(reg); 6802 if(r!=null)return unescape(r[2]); return ""; 6803 }, 6804 /** 6805 * 忥å è½½JSï¼å è½½è¿ç¨ä¸ä¼é»å¡ï¼å è½½å®æ¯åç»§ç»æ§è¡åé¢çã 6806 * url: è¦å è½½çjsçurl 6807 */ 6808 synchronizesLoadJs:function(url){ 6809 var xmlHttp = null; 6810 if(window.ActiveXObject){//IE 6811 try { 6812 //IE6以å以åçæ¬ä¸å¯ä»¥ä½¿ç¨ 6813 xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); 6814 } catch (e) { 6815 //IE5.5以å以åçæ¬å¯ä»¥ä½¿ç¨ 6816 xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 6817 } 6818 }else if(window.XMLHttpRequest){ 6819 //Firefoxï¼Opera 8.0+ï¼Safariï¼Chrome 6820 xmlHttp = new XMLHttpRequest(); 6821 } 6822 //éç¨åæ¥å è½½ 6823 xmlHttp.open("GET",url,false); 6824 //åéåæ¥è¯·æ±ï¼å¦ææµè§å¨ä¸ºChromeæOperaï¼å¿ é¡»åå¸åæè½è¿è¡ï¼ä¸ç¶ä¼æ¥é 6825 xmlHttp.send(null); 6826 //4ä»£è¡¨æ°æ®åé宿¯ 6827 if( xmlHttp.readyState == 4 ){ 6828 //0为访é®çæ¬å°ï¼200å°300ä»£è¡¨è®¿é®æå¡å¨æåï¼304代表没åä¿®æ¹è®¿é®çæ¯ç¼å 6829 if((xmlHttp.status >= 200 && xmlHttp.status <300) || xmlHttp.status == 0 || xmlHttp.status == 304){ 6830 var myBody = document.getElementsByTagName("HTML")[0]; 6831 var myScript = document.createElement( "script" ); 6832 myScript.language = "javascript"; 6833 myScript.type = "text/javascript"; 6834 try{ 6835 //IE8以å以ä¸ä¸æ¯æè¿ç§æ¹å¼ï¼éè¦éè¿text屿§æ¥è®¾ç½® 6836 myScript.appendChild(document.createTextNode(xmlHttp.responseText)); 6837 }catch (ex){ 6838 myScript.text = xmlHttp.responseText; 6839 } 6840 myBody.appendChild(myScript); 6841 return true; 6842 }else{ 6843 return false; 6844 } 6845 }else{ 6846 return false; 6847 } 6848 }, 6849 6850 /*js translate.util.loadMsgJs start*/ 6851 //å è½½ msg.js 6852 loadMsgJs:function(){ 6853 if(typeof(msg) != 'undefined'){ 6854 return; 6855 } 6856 translate.util.synchronizesLoadJs('https://res.zvo.cn/msg/msg.js'); 6857 }, 6858 /*js translate.util.loadMsgJs end*/ 6859 /* 6860 对ä¸ä¸ªå¯¹è±¡ï¼æç §å¯¹è±¡çkeyçé¿åº¦è¿è¡æåºï¼è¶é¿è¶å¨åé¢ 6861 */ 6862 objSort:function(obj){ 6863 // è·å对象æ°ç»çææ keyï¼å¹¶è½¬æ¢ä¸ºæ®éæ°ç» 6864 var keys = Array.from(Object.keys(obj)); 6865 //var keys = [].slice.call(Object.keys(obj)); //éé es5 6866 6867 // 对 key æ°ç»è¿è¡æåº 6868 keys.sort(function(a, b){ 6869 return b.length - a.length; 6870 }); 6871 6872 // å®ä¹ä¸ä¸ªæ°ç对象æ°ç»ï¼ç¨æ¥å卿åºåçç»æ 6873 var sortedObj = new Array(); 6874 6875 // éåæåºåç key æ°ç»ï¼å°å¯¹åºçå¼å¤å¶å°æ°ç对象æ°ç»ä¸ï¼å¹¶å é¤åæ¥ç对象æ°ç»ä¸çé®å¼å¯¹ 6876 for (var key of keys) { 6877 sortedObj[key] = obj[key]; 6878 } 6879 return sortedObj; 6880 }, 6881 /* 6882 å° 2.11.3.20231232 转å为 2011003 6883 è½¬åæ¶ä¼å»ææåä¸ä¸ªæ¥æçå符 6884 */ 6885 versionStringToInt:function(versionString){ 6886 var vs = versionString.split('\.'); 6887 var result = 0; 6888 result = parseInt(vs[0])*1000*1000 + result; 6889 result = parseInt(vs[1])*1000 + result; 6890 result = parseInt(vs[2]) + result; 6891 6892 return result; 6893 }, 6894 /** 6895 * å°ä¸ä¸ª JSONArray æ°ç»ï¼æç §æåé¿åº¦è¿è¡æåã 6896 * æ¯å¦ä¼ å ¥ç array æ°ç»çæåé¿åº¦æ¯6200ï¼ä¼ å ¥ç stringLength æ¯2000ï¼é£ä¹å°±æ¯å° array æ°ç»æå为å¤ä¸ªé¿åº¦ä¸è¶ åº2000çæ°ç»è¿åã 6897 * å¦æä¼ å ¥äº maxSize = 5 é£ä¹ä¼å¯¹æååçæ°ç»çé¿åº¦è¿è¡å¤æï¼å¦ææ°ç»å å ç´ è¶ è¿5ï¼é£ä¹è¿è¦è¿è¡ç¼©çï¼æååçæ°ç»ä¸å è®¸è¶ è¿è¿ä¸ªæ° 6898 * ä¹å°±æ¯æååçæ°ç»æä¸¤ééå¶ï¼ä¸æ¯éå¶è½¬åä¸ºææ¬å½¢å¼çé¿åº¦ãåå°±æ¯æååæ¬èº«æ°ç»ç大å°ã 6899 * 6900 * 注æï¼è¿ä¸ªé¿åº¦æ¯æ array.toString() åçé¿åº¦ï¼ä¹å°±æ¯å å«äº [""] è¿ç§ç¬¦å·çé¿åº¦ 6901 * @param array è¦è¢«æåçæ°ç»ï¼å ¶å 齿¯Stringç±»åï¼ä¼ å ¥æ ¼å¼å¦ ["ä½ å¥½","ä¸ç"] 6902 * @param stringLength è¦è¢«æåçæ°ç»è½¬å为å符串ä¹åçé¿åº¦ 6903 * @param maxSize 被æåçæ°ç»æå¤§å å«å¤å°ä¸ªï¼æ°ç»å¤§å°æå¤§å 许å¤å¤§ï¼è¦å°äºçäºè¿ä¸ªæ°ã å¦æè®¾ç½®ä¸º0忝ä¸å¯ç¨è¿ä¸ªï¼ä¸å¯¹æååçæ°ç»è¿è¡å¤æã 6904 * @return 被æååçæ°ç»å表 6905 * @author åæè ¾ 6906 */ 6907 split:function(array, size, maxSize) { 6908 let orgsize = size; 6909 let list = []; 6910 // æ°ç»é¿åº¦å°äºsizeï¼ç´æ¥è¿è¡è¿å 6911 if(JSON.stringify(array).length <= size) { 6912 list.push(array); 6913 } else { 6914 // è½¬æ¢æString 6915 let arrayStr = JSON.stringify(array).trim().substring(1, JSON.stringify(array).length - 1); 6916 6917 // 夿sizeåå符串é¿åº¦çå·®å¼ï¼å¦æä¸º1æè 2ï¼å°±ç´æ¥ææä¸¤æ®µ 6918 if (JSON.stringify(array).length - size <= 2) { 6919 size = size - 4; 6920 // æä¸¤æ®µ 6921 let str1 = arrayStr.substring(0, arrayStr.lastIndexOf("\",\"")+1); 6922 let str2 = arrayStr.substring(arrayStr.lastIndexOf("\",\"")+2); 6923 list.push(JSON.parse("[" + str1 + "]")); 6924 list.push(JSON.parse("[" + str2 + "]")); 6925 } else { 6926 size = size - 2; 6927 // æå¤æ®µ 6928 let index = 0; 6929 while (index - arrayStr.length < 0) { 6930 // æç §æå®å¤§å°æä¸æ®µ 6931 let s = ""; 6932 if ((index+size) - arrayStr.length >= 0) { 6933 s = arrayStr.substring(index); 6934 } else { 6935 s = arrayStr.substring(index, (index+size)); 6936 }
6937 // ç»å°¾é¿åº¦é»è®¤ä¸ºå符串é¿åº¦ 6938 let endIndex = s.length; 6939 // å ä¸ºä¸æ¬¡å¼å§ç第ä¸ä¸ªå符å¯è½ä¼æ¯éå·ï¼æä»¥ä¸æ¬¡å¼å§éè¦+1 6940 let startNeedAdd = 1; 6941 // 夿æåä¸ä¸ªå符æ¯å¦ä¸ºåå¼å· 6942 if (s.endsWith("\"")) { 6943 // å¤æåæ°ç¬¬äºä¸ªæ¯å¦ä¸ºéå· 6944 if (s.endsWith("\",\"")) { 6945 // å é¤ä¸¤ä¸ªå符 6946 endIndex-=2; 6947 } else if (!s.startsWith("\"")) { 6948 // 妿å¼å¤´ä¸æ¯å¼å·ï¼éè¦è¡¥ä¸ä¸ªå¼å·ï¼è¿å°±å¯¼è´ä¼è¶ é¿ï¼æä»¥ç»å°¾å°±è¦æ¾æå®å符ç 6949 // æ¾åºæåä¸ä¸ªæå®å符çä½ç½® 6950 let la = s.lastIndexOf("\",\""); 6951 endIndex = la + 1; 6952 } 6953 } else if (s.endsWith("\",")) { 6954 // 夿æ¯å¦ä¸ºéå·ï¼æ¯çè¯å é¤ä¸ä¸ªå符 6955 endIndex-=1; 6956 } else { 6957 // é½ä¸æ¯ï¼é£å°±æ¯å 容ç»å°¾ 6958 // æ¾åºæåä¸ä¸ªæå®å符çä½ç½® 6959 let la = s.lastIndexOf("\",\""); 6960 endIndex = la + 1; 6961 // å å®¹è¶ é¿ï¼endIndexå°±ä¼åæ0ï¼è¿æ¶éè¦æå¨èµå¼ 6962 if (endIndex <= 0) { 6963 // ççæ¯å¦ä»¥å¼å·å¼å¤´ï¼å¦æä¸æ¯ï¼éè¦æ¼ä¸¤ä¸ªå¼å· 6964 if (s.startsWith("\"")) { 6965 // æ¼ä¸ä¸ªå¼å·ï¼-1 6966 endIndex = s.length - 1; 6967 } else { 6968 // æ¼ä¸¤ä¸ªå¼å·ï¼-2 6969 endIndex = s.length - 2; 6970 } 6971 if (!s.endsWith("\"")) { 6972 // å¼å§ä¸æ¯éå·äºï¼ä¸è½-1 6973 startNeedAdd = 0; 6974 } 6975 } 6976 } 6977 // æ ¹æ®å¤ççç»å°¾é¿åº¦è¿è¡ç¬¬äºæ¬¡æå 6978 let s2 = ""; 6979 if (endIndex - s.length > 0 || endIndex - 0 == 0) { 6980 s2 = s; 6981 endIndex = endIndex + s2.length; 6982 } else { 6983 s2 = s.substring(0, endIndex); 6984 } 6985 if (!s2.startsWith("\"") && !s2.startsWith(",\"")) { 6986 // æ¼ä¸ä¸ªå¼å· 6987 s2 = "\"" + s2; 6988 } 6989 if (!s2.endsWith("\"")) { 6990 // æ¼ä¸ä¸ªå¼å· 6991 s2 = s2 +"\""; 6992 } 6993 // 计ç®ä¸æ¬¡å¾ªç¯å¼å§çé¿åº¦ 6994 index += (endIndex + startNeedAdd); 6995 // å å°list 6996 s2 = "[" + s2 + "]"; 6997 try { 6998 list.push(JSON.parse(s2)); 6999 } catch (e) { 7000 // éå°é误ï¼ç¥è¿ä¸ä¸ªå符 7001 index = index - (endIndex + startNeedAdd) + 1; 7002 } 7003 } 7004 } 7005 } 7006 // 设置äºmaxSizeï¼è¿è¡å¤ç 7007 if (maxSize && maxSize > 0) { 7008 list = translate.util._splitMaxSize(list, orgsize, maxSize); 7009 } 7010 return list; 7011 }, 7012 /** 7013 * é对split彿°ä¸maxSizeçå¤ç 7014 * private 7015 * @param array å·²æåçäºç»´æ°ç» 7016 * @param size æåçé¿åº¦ 7017 * @param maxSize å ç´ æ°é 7018 * @author åæè ¾ 7019 */ 7020 _splitMaxSize:function(array, size, maxSize) { 7021 // console.log("------ splitMaxSize run ------") 7022 7023 // è¿åçæ°æ® 7024 let list = []; 7025 // æåçæ°ç»ï¼ç¨æ¥å卿¯æ¬¡éåæ¶è¶ åºçæ°æ® 7026 let tmp = []; 7027 7028 // éåäºç»´æ°ç» 7029 array.forEach(function(arr, index) { 7030 // ç´¯å æ°ç» 7031 arr = tmp.concat(arr); 7032 // 计ç®å ç´ æ°é 7033 let length = arr.length; 7034 // æ°ç»ä¸å ç´ æ°é大äºmaxSizeï¼å¯¹å¤ä½çå ç´ è¿è¡ç§»é¤ 7035 if (length > maxSize) { 7036 // 第ä¸ä¸ªæ°ç»ï¼å å«åN个å ç´ 7037 let firstArray = arr.slice(0, maxSize); 7038 // 第äºä¸ªæ°ç»ï¼å å«å©ä¸çå ç´ 7039 let secondArray = arr.slice(maxSize); 7040 7041 // å¤çé¿åº¦ 7042 let len = 1; 7043 while (JSON.stringify(firstArray).length > size) { 7044 // é¿åº¦è¶ è¿éå¶ï¼è¿è¡å¤ç 7045 firstArray = arr.slice(0, maxSize - len); 7046 secondArray = arr.slice(maxSize - len); 7047 len++; 7048 if (len >= arr.length+1) { 7049 break; 7050 } 7051 } 7052 7053 // 第ä¸ä¸ªæ°ç»è®°å½ 7054 list.push(firstArray); 7055 // 第äºä¸ªæ°ç»æå 7056 tmp.length = 0; 7057 tmp = secondArray; 7058 } else { 7059 // æ²¡è¶ ï¼åªå¤çé¿åº¦ 7060 // å¤çé¿åº¦ 7061 let firstArray = arr; 7062 let secondArray = []; 7063 let len = 1; 7064 while (JSON.stringify(firstArray).length > size) { 7065 // é¿åº¦è¶ è¿éå¶ï¼è¿è¡å¤ç 7066 firstArray = arr.slice(0, maxSize - len); 7067 secondArray = arr.slice(maxSize - len); 7068 len++; 7069 if (len >= arr.length+1) { 7070 break; 7071 } 7072 } 7073 7074 // 第ä¸ä¸ªæ°ç»è®°å½ 7075 list.push(firstArray); 7076 // 第äºä¸ªæ°ç»æå 7077 tmp.length = 0; 7078 tmp = secondArray; 7079 } 7080 7081 }); 7082 7083 // ä¸´æ¶æ°ç»ä¸è¿æå ç´ ï¼ä¹è¦è¿è¡å¤ç 7084 if (tmp.length > 0) { 7085 let tmpl = []; 7086 tmpl.push(tmp); 7087 // éå½å¤ç 7088 let l = translate.util._splitMaxSize(tmpl, size, maxSize); 7089 list = list.concat(l); 7090 } 7091 7092 return list; 7093 }, 7094 /* 7095 æµè§å¨çè¯ç§æ è¯è·translate.jsçè¯ç§æ è¯çå¯¹åº 7096 key: æµè§å¨çè¯ç§æ è¯ 7097 value: translate.js çè¯ç§æ è¯ 7098 */ 7099 browserLanguage:{ 7100 'zh':'chinese_simplified', 7101 'zh-CN':'chinese_simplified', 7102 'zh-TW':'chinese_traditional', 7103 'zh-HK':'chinese_traditional', 7104 'co':'corsican', 7105 'gn':'guarani', 7106 'rw':'kinyarwanda', 7107 'ha':'hausa', 7108 'no':'norwegian', 7109 'nl':'dutch', 7110 'yo':'yoruba', 7111 'en':'english', 7112 'en-US':'english', 7113 'kok':'gongen', 7114 'la':'latin', 7115 'ne':'nepali', 7116 'fr':'french', 7117 'cs':'czech', 7118 'haw':'hawaiian', 7119 'ka':'georgian', 7120 'ru':'russian', 7121 'fa':'persian', 7122 'bho':'bhojpuri', 7123 'hi':'hindi', 7124 'be':'belarusian', 7125 'sw':'swahili', 7126 'is':'icelandic', 7127 'yi':'yiddish', 7128 'tw':'twi', 7129 'ga':'irish', 7130 'gu':'gujarati', 7131 'km':'khmer', 7132 'sk':'slovak', 7133 'he':'hebrew', 7134 'kn':'kannada', 7135 'hu':'hungarian', 7136 'ta':'tamil', 7137 'ar':'arabic', 7138 'bn':'bengali', 7139 'az':'azerbaijani', 7140 'sm':'samoan', 7141 'af':'afrikaans', 7142 'id':'indonesian', 7143 'da':'danish', 7144 'sn':'shona', 7145 'bm':'bambara', 7146 'lt':'lithuanian', 7147 'vi':'vietnamese', 7148 'mt':'maltese', 7149 'tk':'turkmen', 7150 'as':'assamese', 7151 'ca':'catalan', 7152 'si':'singapore',
7153 'ceb':'cebuano', 7154 'gd':'scottish-gaelic', 7155 'sa':'sanskrit', 7156 'pl':'polish', 7157 'gl':'galician', 7158 'lv':'latvian', 7159 'uk':'ukrainian', 7160 'tt':'tatar', 7161 'cy':'welsh', 7162 'ja':'japanese', 7163 'fil':'filipino', 7164 'ay':'aymara', 7165 'lo':'lao', 7166 'te':'telugu', 7167 'ro':'romanian', 7168 'ht':'haitian_creole', 7169 'doi':'dogrid', 7170 'sv':'swedish', 7171 'mai':'maithili', 7172 'th':'thai', 7173 'hy':'armenian', 7174 'my':'burmese', 7175 'ps':'pashto', 7176 'hmn':'hmong', 7177 'dv':'dhivehi', 7178 'lb':'luxembourgish', 7179 'sd':'sindhi', 7180 'ku':'kurdish', 7181 'tr':'turkish', 7182 'mk':'macedonian', 7183 'bg':'bulgarian', 7184 'ms':'malay', 7185 'lg':'luganda', 7186 'mr':'marathi', 7187 'et':'estonian', 7188 'ml':'malayalam', 7189 'de':'deutsch', 7190 'sl':'slovene', 7191 'ur':'urdu', 7192 'pt':'portuguese', 7193 'ig':'igbo', 7194 'ckb':'kurdish_sorani', 7195 'om':'oromo', 7196 'el':'greek', 7197 'es':'spanish', 7198 'fy':'frisian', 7199 'so':'somali', 7200 'am':'amharic', 7201 'ny':'nyanja', 7202 'pa':'punjabi', 7203 'eu':'basque', 7204 'it':'italian', 7205 'sq':'albanian', 7206 'ko':'korean', 7207 'tg':'tajik', 7208 'fi':'finnish', 7209 'ky':'kyrgyz', 7210 'ee':'ewe', 7211 'hr':'croatian', 7212 'kri':'creole', 7213 'qu':'quechua', 7214 'bs':'bosnian', 7215 'mi':'maori' 7216 }, 7217 /* 7218 è·åæµè§å¨ä¸è®¾ç½®çé»è®¤ä½¿ç¨è¯è¨ 7219 è¿åçæ¯ translate.js çè¯è¨å¯ä¸æ è¯ 7220 妿è¿åçæ¯ç©ºå符串ï¼åæ¯æ²¡æå¹é å°ï¼å¯è½æ¯æ²¡æè·åå°æ¬å°è¯è¨ï¼ä¹å¯è½æ¯æ¬å°è¯è¨è·translate.js ç¿»è¯ééæ²¡æå¯¹åºä¸ï¼ 7221 */ 7222 browserDefaultLanguage:function(){ 7223 var language = navigator.language || navigator.userLanguage; 7224 if(typeof(language) == 'string' && language.length > 0){ 7225 var tLang = translate.util.browserLanguage[language]; 7226 if(typeof(tLang) == 'undefined'){ 7227 //没æå¨éé¢ 7228 translate.log('browser default language : '+language +', translate.js current translate channel not support this language '); 7229 }else{ 7230 return tLang; 7231 } 7232 } 7233 7234 //å°å ¶è½¬å为 translate.js çè¯è¨idï¼æ¯å¦ç®ä½ä¸ææ¯ chinese_simplified ã è±è¯æ¯ english 7235 return ''; 7236 }, 7237 /* 7238 对è¾å ¥çææ¬ text è¿è¡å¤æï¼å¤æå®é颿¯å¦æurlåå¨ã妿æurlåå¨ï¼å¯¹å ¶è¿è¡æªåï¼å°urlè·éurlè¿è¡æªåå¤çã 7239 æ¯å¦ä¼ å ¥ âè¿ä¸ªç¤ºä¾ï¼https://www.ungm.org/Public/Notice/261001ï¼å ¶ä»å¾ç¤ºä¾æ¯ http://api.translate.zvo.cn æå¢â 7240 é£ä¹è¿åçæªåç»æä¸ºï¼ 7241 { 7242 "https://www.ungm.org/Public/Notice/261001":"1", 7243 "http://api.translate.zvo.cn":"1", 7244 "ï¼å ¶ä»å¾ç¤ºä¾æ¯ ":"0", 7245 "è¿ä¸ªç¤ºä¾ï¼":"0" 7246 " æå¢":"0" 7247 } 7248 å ¶ä¸çkey 为æªåçææ¬ï¼value ç弿¯1æ0ï¼ 1代表å½åkeyçææ¬æ¯ç½åï¼0å䏿¯ç½å 7249 */ 7250 urlSplitByText:function(text){ 7251 // å¹é http/https ç URL æ£å表达å¼ï¼å å«å¸¸è§ URL 符å·ï¼æé¤ä¸æçé ASCII åç¬¦ï¼ 7252 const urlRegex = /(https?:\/\/[\w\-._~:\/?#[\]@!$&'()*+;=%]+(?=[\s\u4e00-\u9fa5ï¼ãï¼,!?]|$))/gi; 7253 7254 // ä½¿ç¨æ£å表达å¼å岿æ¬ï¼ä¿çURL 7255 const parts = text.split(urlRegex); 7256 7257 // ç»æå¯¹è±¡ 7258 let result = {}; 7259 7260 // æ·»å éURLé¨åï¼å¹¶æ 记为 0 7261 for (let i = 0; i < parts.length; i++) { 7262 if (i % 2 === 0) { 7263 // éURLé¨å 7264 if (parts[i] !== "") { 7265 result[parts[i]] = "0"; 7266 } 7267 } else { 7268 // URLé¨å 7269 result[parts[i]] = "1"; 7270 } 7271 } 7272 7273 return result; 7274 }, 7275 7276 /*js translate.util.getElementPosition start*/ 7277 /* 7278 计ç®ä¸ä¸ªå ç´ å¨æµè§å¨ä¸çåæ ç³»ï¼å ¶ç»å¯¹å®ä½ã以åå®é æ¾ç¤ºåºæ¥æå ç¨çåºåï¼å®½ãé« 7279 */ 7280 getElementPosition:function (node) { 7281 // è·åå ç´ çè¾¹çç©å½¢ä¿¡æ¯ï¼ç¸å¯¹äºè§å£ï¼ 7282 const rect = node.getBoundingClientRect(); 7283 7284 // è·åå½å页é¢çæ»å¨ä½ç½®ï¼å ¼å®¹ä¸åæµè§å¨ï¼ 7285 const scrollX = window.scrollX || document.documentElement.scrollLeft; 7286 const scrollY = window.scrollY || document.documentElement.scrollTop; 7287 7288 // 计ç®å ç´ å¨ææ¡£ä¸çèµ·å§åæ 7289 const startX = rect.left + scrollX; 7290 const startY = rect.top + scrollY; 7291 7292 // 计ç®å ç´ ç宽度åé«åº¦ 7293 const width = rect.right - rect.left; 7294 const height = rect.bottom - rect.top; 7295 7296 // 计ç®å ç´ å¨ææ¡£ä¸çç»æåæ 7297 const endX = startX + width;
7298 const endY = startY + height; 7299 7300 // è¿åå 嫿æä¿¡æ¯ç对象ï¼ä½¿ç¨ES5å ¼å®¹è¯æ³ï¼ 7301 return { 7302 startX: startX, 7303 startY: startY, 7304 endX: endX, 7305 endY: endY, 7306 width: width, 7307 height: height 7308 }; 7309 }, 7310 /*js translate.util.getElementPosition end*/ 7311 7312 /*js translate.util.compareStringsIgnoringNumbers start*/ 7313 /* 7314 æ¯è¾ä¸¤ä¸ªåç¬¦ä¸²ï¼æ¯å¦é¤äºæ°åä¹å¤ï¼å ¶ä»çå®å ¨ä¸è´ã 7315 宿µ i5 åæ ¸ 2.4G ï¼è®¡ç®1亿次 - 7s 7316 7317 ["abc123def", "abc456def", true], 7318 ["hello7world", "hello8world", true], 7319 ["test123", "test", true], 7320 ["123test", "test", true], 7321 ["abc", "def", false], 7322 ["a1b2c3", "a4b5c", false], 7323 ["", "", true], 7324 ["123", "456", true], 7325 ["ä½ å¥½123ä¸ç", "3ä½ å¥½1ä¸ç", true], 7326 ["ä½ å¥½123ä¸ç", "ä½ å¥½ä¸ç4", true], 7327 */ 7328 compareStringsIgnoringNumbers: function(a, b) { 7329 let i = 0, j = 0; 7330 const lenA = a.length, lenB = b.length; 7331 7332 while (i < lenA || j < lenB) { 7333 // è·³è¿aä¸çæ°å (0-9çASCIIç æ¯48-57) 7334 while (i < lenA && a.charCodeAt(i) >= 48 && a.charCodeAt(i) <= 57) { 7335 i++; 7336 } 7337 7338 // è·³è¿bä¸çæ°å 7339 while (j < lenB && b.charCodeAt(j) >= 48 && b.charCodeAt(j) <= 57) { 7340 j++; 7341 } 7342 7343 // æ£æ¥æ¯å¦æä¸ä¸ªåç¬¦ä¸²è¿æéæ°åå符èå¦ä¸ä¸ªå·²ç»ç»æ 7344 if ((i < lenA) !== (j < lenB)) { 7345 return false; 7346 } 7347 7348 // 妿é½ç»æäºï¼è¿åtrue 7349 if (i >= lenA && j >= lenB) { 7350 return true; 7351 } 7352 7353 // æ¯è¾å½åéæ°åå符 7354 if (a[i] !== b[j]) { 7355 return false; 7356 } 7357 7358 i++; 7359 j++; 7360 } 7361 7362 return true; 7363 } 7364 /*js translate.util.compareStringsIgnoringNumbers end*/ 7365 7366 }, 7367 //æºå¨ç¿»è¯éç¨åªç§ç¿»è¯æå¡ 7368 service:{ 7369 /* 7370 nameå¡«åçå¼,åè translate.service.use çæ³¨é 7371 */ 7372 name:'translate.service', 7373 7374 /*js translate.service.use start*/ 7375 /* 7376 å ¶å®å°±æ¯è®¾ç½® translate.service.name 7377 å¯ä»¥è®¾ç½®ä¸ºï¼ 7378 7379 translate.service èªè¡é¨ç½²çtranslate.service ç¿»è¯APIæå¡ï¼é¨ç½²åèï¼ https://translate.zvo.cn/391129.html 7380 client.edge ä½¿ç¨æ æå¡å¨çç¿»è¯,æedgeæµè§å¨æ¥å£æä¾ç¿»è¯æå¡ 7381 siliconflow ä½¿ç¨æç¹äºæä¾çæå¡å¨ãç¡ åºæµå¨æä¾çAIç®åè¿è¡å¤§æ¨¡åç¿»è¯ 7382 giteeAI ä½¿ç¨ giteeAI ï¼ äºæ´²ãç¾æ´²ã欧洲 ç½ç»èç¹è¦ç 7383 7384 */ 7385 use: function(serviceName){ 7386 if(typeof(translate.enterprise) != 'undefined' && translate.enterprise.isUse == true){ 7387 translate.log('æ¨å·²å¯ç¨äºä¼ä¸çº§ç¿»è¯éé translate.enterprise.use(); (ææ¡£ï¼https://translate.zvo.cn/4087.html) , æä»¥æ¨è®¾ç½®ç translate.service.use(\''+serviceName+'\'); (ææ¡£ï¼https://translate.zvo.cn/4081.html) å°å¤±æä¸èµ·ä½ç¨ï¼æä¼ä¸çº§ç¿»è¯ééå ¨é¨æ¥ç®¡ã'); 7388 return; 7389 } 7390 //console.log('--'+serviceName); 7391 if(typeof(serviceName) == 'string'){ 7392 translate.service.name = serviceName; 7393 if(serviceName != 'translate.service'){ 7394 //å¢å å ç´ æ´ä½ç¿»è¯è½å 7395 translate.whole.enableAll(); 7396 7397 if(serviceName.toLowerCase() == 'giteeai'){ 7398 //设å®ç¿»è¯æ¥å£ä¸ºGiteeAIç 7399 translate.request.api.host=['https://giteeai.zvo.cn/','https://deutsch.enterprise.api.translate.zvo.cn:1000/','https://api.translate.zvo.cn:1000/', 'https://america.api.translate.zvo.cn:1000/']; 7400 return; 7401 } 7402 if(serviceName.toLowerCase() == 'siliconflow'){ 7403 //设å®ç¿»è¯æ¥å£ä¸ºç¡ åºæµå¨ç 7404 translate.request.api.host=['https://siliconflow.zvo.cn/','https://america.api.translate.zvo.cn:1414/','https://deutsch.enterprise.api.translate.zvo.cn:1414/']; 7405 return; 7406 } 7407 } 7408 } 7409 }, 7410 /*js translate.service.use end*/ 7411 7412 /*js translate.service.edge start*/ 7413 //客æ·ç«¯æ¹å¼çedgeæä¾æºå¨ç¿»è¯æå¡ 7414 edge:{ 7415 api:{ //edgeæµè§å¨çç¿»è¯åè½ 7416 translate:'https://edge.microsoft.com/translate/translatetext?from={from}&to={to}&isEnterpriseClient=false' //ç¿»è¯æ¥å£ 7417 }, 7418 language:{ 7419 7420 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"}
7420,{"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"}], 7421 /* 7422 è·åmapå½¢å¼çè¯è¨å表 7423 key为 translate.service ç name 7424 value为serviceId 7425 7426 */ 7427 getMap:function(){ 7428 if(typeof(translate.service.edge.language.map) == 'undefined'){ 7429 translate.service.edge.language.map = new Array(); 7430 for(var i = 0; i < translate.service.edge.language.json.length; i++){ 7431 var item = translate.service.edge.language.json[i]; 7432 translate.service.edge.language.map[item.id] = item.serviceId; 7433 } 7434 } 7435 return translate.service.edge.language.map; 7436 } 7437 }, 7438 /** 7439 * edge è¿è¡ç¿»è¯ã è¿ä¸ªä¼ å ¥åæ°è· translate.request.post æ¯ä¸æ ·ç 7440 * @param path 请æ±çpathï¼pathï¼ä¼ å ¥çæ¯translate.request.api.translate è¿ç§çï¼éè¦ä½¿ç¨ getUrl æ¥ç»åçæ£è¯·æ±çurl ï¼ 7441 * @param data 请æ±çåæ°æ°æ® 7442 * @param func 请æ±å®æçåè°ï¼ä¼ å ¥å¦ function(data){ console.log(data); } 7443 */ 7444 translate:function(path, data, func, abnormalFunc){ 7445 var textArray = JSON.parse(decodeURIComponent(data.text)); 7446 let translateTextArray = translate.util.split(textArray, 40000, 900); 7447 7448 7449 var appendXhrData = { 7450 "from":data.from+'', 7451 "to":data.to, 7452 "text":data.text 7453 }; 7454 var from = data.from; 7455 if(from != 'auto'){ 7456 if(from == 'romance'){ 7457 //è¿éé¢å¤å äºä¸ä¸ªç½æ¼è¯æ(romance)ä¼èªå¨è®¤ä¸ºæ¯æ³è¯(fr) 7458 from = 'fr'; 7459 }else{ 7460 from = translate.service.edge.language.getMap()[data.from]; 7461 } 7462 } 7463 7464 var to = translate.service.edge.language.getMap()[data.to]; 7465 var transUrl = translate.service.edge.api.translate.replace('{from}',from).replace('{to}',to); 7466 7467 //å¦æç¿»è¯é大ï¼è¦æåæå¤æ¬¡ç¿»è¯è¯·æ± 7468 for(var tai = 0; tai<translateTextArray.length; tai++){ 7469 /* 7470 var json = []; 7471 for(var i = 0; i<translateTextArray[tai].length; i++){ 7472 json.push({"Text":translateTextArray[tai][i]}); 7473 } 7474 */ 7475 7476 translate.request.send(transUrl, JSON.stringify(translateTextArray[tai]), appendXhrData, function(result){ 7477 var d = {}; 7478 d.info = 'SUCCESS'; 7479 d.result = 1; 7480 d.from = data.from; 7481 d.to = data.to; 7482 d.text = []; 7483 for(var t = 0; t < result.length; t++){ 7484 d.text.push(result[t].translations[0].text); 7485 } 7486 7487 7488 //夿å½åç¿»è¯æ¯å¦å被æåè¿ï¼æ¯å¦ä¸æ¬¡è¶ è¿5ä¸å符çè¯å°±è¦æåæå¤æ¬¡è¯·æ±äº 7489 if(translateTextArray.length > 1){ 7490 //è¿ä¸æ¬¡ç¿»è¯åæåäºå¤æ¬¡è¯·æ±ï¼é£ä¹è¦è¿è¡è¡¥å ¨æ°ç»ï¼ä½¿æ°ç»ä¸ªæ°è½ä¸è´ 7491 7492 /* 7493 7494 注æè¿éæ ¹æ®æ°ç»çé¿åº¦æ¥å¤æå½åå±äºç¬¬å 个æ°ç»ï¼ 7495 æå ç伿¯æåçæ°ç»ï¼å ¶ä¸æä¸¤ç»çé¿åº¦æ¯ä¸æ ·çï¼ 7496 è¿æ ·çè¯æ¯æé®é¢çï¼åªä¸è¿å çå¾å°ï¼å°±å è¿æ ·äº 7497 ä½ç»å½è¿æ¯çäºä¸ªå -- è®°å½ 7498 7499 */ 7500 7501 var currentIndex = -1; //å½åç¿»è¯è¯·æ±å±äºè¢«æåç第å ä¸ªçæ°ç»ä¸æ ï¼ä»0å¼å§ç 7502 for(var cri = 0; cri < translateTextArray.length; cri++){ 7503 if(translateTextArray[cri].length - d.text.length == 0){ 7504 currentIndex = cri; 7505 break; 7506 } 7507 } 7508 7509 //è¿è¡å¯¹ååè¿è¡è¡¥é½æ°ç» 7510 if(currentIndex < 0){ 7511 translate.log('------ERROR--------'); 7512 translate.log('ç¿»è¯å 容è¿å¤ï¼è¿è¡æåï¼ä½æå夿åºç°å¼å¸¸ï¼currentIndexï¼-1 请èç³» http://translate.zvo.cn/43006.html 说æ'); 7513 } 7514 //åæå ¥ç©ºæ°ç»å¡«å 7515 for(var addbeforei = 0; addbeforei<currentIndex; addbeforei++){
7516 var beforeItemArrayLength = translateTextArray[addbeforei].length; 7517 //console.log('beforeItemArrayLength:'+beforeItemArrayLength); 7518 for(var bi = 0; bi < beforeItemArrayLength; bi++){ 7519 d.text.unshift(null); 7520 } 7521 } 7522 //åæå ¥ç©ºæ°ç»å¡«å 7523 for(var addafteri = translateTextArray.length-1; addafteri>currentIndex; addafteri--){ 7524 var afterItemArrayLength = translateTextArray[addafteri].length; 7525 for(var bi = 0; bi < afterItemArrayLength; bi++){ 7526 d.text.push(null); 7527 } 7528 } 7529 7530 } 7531 7532 func(d); 7533 }, 'post', true, { 7534 'Content-Type':'application/json' 7535 }, abnormalFunc, true); 7536 7537 7538 } 7539 7540 7541 7542 7543 7544 7545 } 7546 } 7547 /*js translate.service.edge end*/ 7548 }, 7549 //requestè¯·æ±æ¥æºäº https://github.com/xnx3/request 7550 request:{ 7551 /* 7552 å°éè¿ç¿»è¯æ¥å£è¿è¡ç¿»è¯è¯·æ±(/translate.json)çä¿¡æ¯è®°å½å° translate.js æ¬èº«ä¸ 7553 key uuid æ¯æ¬¡ translate.execute() 触åçæçuuid 7554 value 7555 time: 触ååå å ¥å° data ä¸çæ¶é´,13使¶é´æ³ 7556 list: 对象éåï¼translate.execute() ç触åä¼åèµ·å¤æ¬¡ç¿»è¯è¯·æ±ï¼æ ¹æ®è¯å«çè¯ç§ä¸åï¼åèµ·å¤æ¬¡ç½ç»è¯·æ±ï¼è¿éè®°å½çæ¯å¤æ¬¡ç½ç»è¯·æ± 7557 [ 7558 'english':{ //å½åè¯·æ±æ¯å°ä»ä¹è¯ç§è¿è¡ç¿»è¯ï¼ä¹å°±æ¯ translate.json 请æ±ä¸ç from åæ° 7559 to: chinese_simplified, //å½å请æ±è¦ç¿»è¯ä¸ºä»ä¹è¯ç§ï¼ä¹å°±æ¯ translate.json 请æ±ä¸ç to åæ° 7560 texts:['ä½ å¥½', 'ä¸ç', ...], //å½å请æ±è¦è¿è¡ç¿»è¯çå ·ä½ææ¬ 7561 nodes:[node1, node2, ...] //å½å请æ±è¦ç¿»è¯çææ¬æå¨çnodeéåï¼ä¹å°±æ¯æåªäºnodeä¸çææ¬åä¸äº éè¿APIæ¥å£è¿è¡ç¿»è¯ææ¬ 7562 }, 7563 'korean':{ 7564 ... 7565 }, 7566 ... 7567 ] 7568 7569 åé¢è¦å° translate.translateRequest åå¹¶å°è¿éé¢ 7570 */ 7571 data:{}, 7572 //ç¸å ³APIæ¥å£æ¹é¢ 7573 api:{ 7574 /** 7575 * ç¿»è¯æ¥å£è¯·æ±çååä¸»æº host 7576 * æ ¼å¼æ³¨æåé¢è¦å¸¦ä¸åè®®å¦ https:// åååè¦å / 7577 * v2.8.2 å¢å æ°ç»å½¢æï¼å¦ ['https://api.translate.zvo.cn/','xxxxx'] 7578 */ 7579 //host:'https://api.translate.zvo.cn/', 7580 host:['https://api.translate.zvo.cn/','https://america.api.translate.zvo.cn/'], 7581 //hostçå¤ç¨æ¥å£ï¼æ ¼å¼åhostï¼å¯ä»¥å¡«åå¤ä¸ªï¼åªä¸è¿è¿éæ¯æ°ç»æ ¼å¼ãåªæå½ä¸» host æ æ³è¿éæ¶ï¼æä¼éç¨å¤hostæ¥æä¾è®¿é®ãå¦æä¸ºç©ºä¹å°±æ¯ [] 忝ä¸éç¨å¤æ¹æ¡ã 7582 //backupHost:['',''], 7583 language:'language.json', //è·åæ¯æçè¯ç§å表æ¥å£ 7584 translate:'translate.json', //ç¿»è¯æ¥å£ 7585 ip:'ip.json', //æ ¹æ®ç¨æ·å½åipè·åå ¶æå¨å°çè¯ç§ 7586 connectTest:'connectTest.json', //ç¨äº translate.js å¤èç¹ç¿»è¯èªå¨æ£æµç½ç»è¿éæ åµ 7587 init:'init.json', //è·åææ°çæ¬å·ï¼è·å½åçæ¬è¿è¡æ¯å¯¹ï¼ç¨äºæéçæ¬å级çä½¿ç¨ 7588 7589 }, 7590 /* 7591 v3.18.35.20250920 å¢å 7592 7593 hosts: 主æºååæ°ç»ï¼æ°ç»å½¢å¼ï¼å¯ä¼ å ¥å¤ä¸ªä¸»æºï¼ä¼ å ¥æ ¼å¼å¦ ['https://api.translate.zvo.cn/','https://api2.translate.zvo.cn/'] ä¸å®æ³¨ææåè¿æä¸ª / 7594 å ¶ä¸æ°ç»ç第ä¸ä¸ªå°è¢«ä¼å 使ç¨ï¼ç¬¬ä¸ä¸ªæ¯ä¸»çï¼å¯é æ§è¦æ´é«ç 7595 */ 7596 setHost:function(hosts){ 7597 translate.service.use('translate.service'); 7598 7599 if (typeof translate.request.api.host == 'string') { 7600 //å个ï¼é£ä¹èµäºæ°ç»å½¢å¼ 7601 //translate.request.speedDetectionControl.hostQueue = [{"host":translate.request.api.host, time:0 }]; 7602 translate.request.api.host = [hosts]; 7603 }else{ 7604 translate.request.api.host = hosts; 7605 } 7606 7607 translate.request.speedDetectionControl.state = 0; //设置为æªè¿è¡æµé 7608 7609 translate.storage.set('speedDetectionControl_hostQueue', ''); 7610 translate.request.speedDetectionControl.hostQueue = []; 7611 translate.request.speedDetectionControl.checkHostQueue = new Array() 7612 //translate.request.speedDetectionControl.checkResponseSpeed_Storage(host, 0) 7613 7614 //è¿è¡å¯¹hostæµé 7615 translate.request.speedDetectionControl.checkResponseSpeed(); 7616 7617 // init.json çè¯·æ± 7618 translate.temp_request_init = undefined; 7619 setTimeout(function(){ 7620 translate.request.initRequest(); 7621 }, 3000); 7622 7623 }, 7624 7625 /* 7626 åèµ· init.json çè¯·æ± 7627 è¿ä¸ªåºè¯¥å¨translate.execute æªæ§è¡å®ä¹åå°±è¦è§¦åï¼æå¥½å¨ setHost() æ¶ãæè åå è½½åè¶æ©è§¦åè¶å¥½ 7628 å®è§¦å夿¬¡æ¶ï¼åªæç¬¬ä¸æ¬¡æä¼æ£å¸¸æ§è¡ã 7629 */ 7630 initRequest:function(){ 7631 //åå§åè¯·æ± 7632 if(typeof(translate.request.api.init) == 'string' && translate.request.api.init != null && translate.request.api.init.length > 0){ 7633 if(typeof(translate.temp_request_init) == 'undefined'){ 7634 translate.temp_request_init = 1; 7635 }else{ 7636 //ç¬¬äºæ¬¡ä»¥åä¹åæ§è¡ï¼é½ç´æ¥ç»è¿åä¸å è®¸å¨æ§è¡äº 7637 return; 7638 } 7639
7640 try{ 7641 translate.request.send( 7642 translate.request.api.init, 7643 {}, 7644 {}, 7645 function(data){ 7646 if (data.result == 0){ 7647 translate.log('translate.js init åå§åå¼å¸¸ï¼'+data.info); 7648 return; 7649 }else if(data.result == 1){ 7650 //æå¡ç«¯è¿åçææ°çæ¬ 7651 var newVersion = translate.util.versionStringToInt(data.version); 7652 //å½åtranslate.jsççæ¬ 7653 var currentVersion = translate.util.versionStringToInt(translate.version.replace('v','')); 7654 7655 if(newVersion > currentVersion){ 7656 translate.log('Tip : translate.js find new version : '+data.version); 7657 } 7658 } 7659 }, 7660 'post', 7661 true, 7662 null, 7663 function(data){ 7664 //console.log('eeerrr'); 7665 }, 7666 false 7667 ); 7668 }catch(e){ 7669 } 7670 } 7671 }, 7672 7673 /* 7674 追å åæ°ï¼ v3.15.9.20250527 å¢å 7675 ææéè¿ translate.request.send è¿è¡ç½ç»è¯·æ±çï¼é½ä¼è¿½å ä¸è¿ä¸ªåæ° 7676 é»è®¤æ¯ç©ºï¼æ²¡æä»»ä½è¿½å åæ°ã 7677 7678 设置æ¹å¼ï¼ https://translate.zvo.cn/471711.html 7679 translate.request.appendParams = { 7680 key1:'key1', 7681 key2:'key2' 7682 } 7683 */ 7684 appendParams:{ 7685 7686 }, 7687 /* 7688 追å header头çåæ°ï¼ v3.15.13 å¢å 7689 ææéè¿ translate.request.send è¿è¡ç½ç»è¯·æ±çï¼é½ä¼è¿½å ä¸è¿ä¸ªåæ° 7690 é»è®¤æ¯ç©ºï¼æ²¡æä»»ä½è¿½å åæ°ã 7691 7692 设置æ¹å¼ï¼ https://translate.zvo.cn/471711.html 7693 translate.request.appendHeaders = { 7694 key1:'key1', 7695 Aauthorization:'Bearer xxxxxxxxxx' 7696 } 7697 */ 7698 appendHeaders:{ 7699 7700 }, 7701 /* 7702 请æ±å端æ¥å£çååºãæ 论æ¯å¦æåï¼é½ä¼è§¦åæ¤å¤ã 7703 å¦å¤å½ xhr.readyState==4 çç¶ææ¶æä¼è§¦åã 7704 æ¤å¤ä¼å¨æ¥å£è¯·æ±ååºåãä¸å¨translate.jså¤çåå°±ä¼è§¦å 7705 @param xhr XMLHttpRequest æ¥å£è¯·æ± 7706 7707 */ 7708 response:function(xhr){ 7709 //console.log('response------'); 7710 //console.log(xhr); 7711 }, 7712 7713 7714 /* 7715 éåº¦æ£æµæ§å¶ä¸å¿ï¼ æ£æµä¸»å¤ç¿»è¯æ¥å£çååºé度è¿è¡æåï¼çæ£è¯·æ±æ¶ï¼æç §æåç顺åºè¿è¡è¯·æ± 7716 v2.8.2å¢å 7717 7718 storageå卿¹é¢ 7719 storageåå¨çkey åçä»ä¹ 7720 speedDetectionControl_hostQueue hostQueue 7721 speedDetectionControl_hostQueueIndex å½åè¦ä½¿ç¨çæ¯ hostQueue ä¸çæ°ç»ä¸æ ãå¦ææ²¡æï¼è¿éé»è®¤è§ä¸º0 7722 speedDetectionControl_lasttime æå䏿¬¡æ§è¡éåº¦æ£æµçæ¶é´æ³ï¼13使¶é´æ³ 7723 7724 7725 7726 */ 7727 speedDetectionControl:{ 7728 /* 7729 å½åæµéçç¶æï¼ 7730 0 å°æªè¿è¡ 7731 1 è¿è¡ä¸ 7732 2 å·²æµé宿¯ 7733 7734 è¿ä¸ªä¹æ¯ç¨äºå¤ææ¯å¦ä¸º0ï¼æ¥é¿å 夿¬¡åèµ·æµéæ åµ 7735 */ 7736 state: 0, 7737 7738 /* 7739 7740 è¿è¡ connect主èç¹ç¼©åçæ¶é´ï¼å使¯æ¯«ç§. 7741 è¿ä¸ªæ¯è¿è¡ translate.request.speedDetectionControl.checkResponseSpeed() èç¹æµéæ¶ï¼translate.request.api.host 第ä¸ä¸ªå ç´ æ¯é»è®¤ç主èç¹ã 7742 主èç¹å¨å®é æµéå®åï¼ä¼åå»ä¸å®çæ¶é´ï¼ä»¥ä¾¿è®©ç¨æ·å¤§é¨åæ¶é´å¯ä»¥ä½¿ç¨ä¸»èç¹ï¼èä¸å¿ èµ°åèç¹ã 7743 ä¾å¦ä¸»èç¹å®é ååºé度 3500 毫ç§ï¼é£ä¹ä¼åå»è¿é设置ç2000毫ç§ï¼è®°ä¸º 1500 æ¯«ç§ 7744 å½ç¶å¦ææ¯å°äºè¿é设置ç2000毫ç§ï¼é£ä¹ä¼è®°ä¸º0毫ç§ã 7745 è¿æ ·åè·å ¶ä»åèç¹çååºæ¶é´è¿è¡å¯¹æ¯ï¼ä¸»èç¹åªè¦ä¸æ¯ååºè¶ æ¶ï¼å°±ä¼ææ´å¤§çå ç被éä¸ä¸ºå®é 使ç¨çç¿»è¯çèç¹ 7746 7747 è¿éçå使¯æ¯«ç§ã 7748 v2.10.2.20231225 å¢å 7749 */ 7750 hostMasterNodeCutTime:2000, 7751 7752 /* 7753 ç¿»è¯çéåï¼è¿æ¯æ ¹æ®ç½ç»ç¸åºçé度æåçï¼0䏿 ä¸ºè¯·æ±æå¿«ï¼1次ä¹... 7754 å ¶æ ¼å¼ä¸ºï¼ 7755 [ 7756 { 7757 "host":"xxxxxxxx", 7758 "time":123 //è¿éçå使¯æ¯«ç§ 7759 }, 7760 { 7761 "host":"xxxxxxxx", 7762 "time":123 //è¿éçå使¯æ¯«ç§ 7763 } 7764 ] 7765 */ 7766 hostQueue:[], 7767 hostQueueIndex:-1, //å½å使ç¨ç hostQueueçæ°ç»ä¸æ ï¼ -1è¡¨ç¤ºè¿æªåå§åèµäºå¼ï¼ä¸å¯ç´æ¥ä½¿ç¨ï¼éè¿ getHostQueueIndex() ä½¿ç¨ 7768 disableTime:1000000, //ä¸å¯ç¨çæ¶é´ï¼storageä¸åå¨ç speedDetectionControl_hostQueue å ¶ä¸ time è¿éï¼å¦æå¼æ¯ è¿ä¸ªï¼ä¾¿æ¯ä»£è¡¨è¿ä¸ªhostå¤äºä¸å¯ç¨ç¶æ 7769 7770 /* 7771 设置å½å使ç¨çç¿»è¯éé host 7772 éç¨äº è¿è¡ä¸æ¶ï¼ä¸éåä¸´æ¶æ¢ç¿»è¯ééã 7773 */ 7774 setCurrentHost:function(host){ 7775 translate.storage.set('speedDetectionControl_hostQueue',''); 7776 translate.request.api.host=host; 7777 translate.request.speedDetectionControl.checkHostQueue = new Array(); 7778 translate.request.speedDetectionControl.checkResponseSpeed_Storage(host, 0); 7779 }, 7780 7781 //è·å host queue éå 7782 getHostQueue:function(){ 7783 if(translate.request.speedDetectionControl.hostQueue.length == 0){ 7784 //è¿æ²¡æï¼å 仿¬å°åå¨ä¸åï¼çä¹åæ¯å¦å·²ç»è®¾ç½®è¿äº 7785 // åªæç»è¿çæ£çç½ç»æµéåï¼æä¼å å ¥ storage ç hostQueue 7786 var storage_hostQueue = translate.storage.get('speedDetectionControl_hostQueue'); 7787 if(storage_hostQueue == null || typeof(storage_hostQueue) == 'undefined' || storage_hostQueue == ''){ 7788 //æ¬å°åå¨ä¸æ²¡æï¼ä¹å°±æ¯ä¹å没设置è¿ï¼æ¯ç¬¬ä¸æ¬¡ç¨ï¼é£ä¹ç´æ¥è®² translate.request.api.host èµäºä¹ 7789 //translate.request.api.host 7790 7791 if(typeof(translate.request.api.host) == 'string'){ 7792 //å个ï¼é£ä¹èµäºæ°ç»å½¢å¼ 7793 //translate.request.speedDetectionControl.hostQueue = [{"host":translate.request.api.host, time:0 }]; 7794 translate.request.api.host = [''+translate.request.api.host]; 7795 } 7796 7797 //æ°ç»å½¢æï¼å¤ä¸ªï¼v2.8.2 å¢å å¤ä¸ªï¼æ ¹æ®ä¼å 级è¿å 7798 translate.request.speedDetectionControl.hostQueue = []; 7799 for(var i = 0; i<translate.request.api.host.length; i++){ 7800 var h = translate.request.api.host[i]; 7801 //console.log(h); 7802 translate.request.speedDetectionControl.hostQueue[i] = {"host":h, time:0 }; 7803 } 7804 //console.log(translate.request.speedDetectionControl.hostQueue); 7805 7806 }else{ 7807 //storage䏿ï¼é£ä¹èµäº 7808 translate.request.speedDetectionControl.hostQueue = JSON.parse(storage_hostQueue); 7809 //console.log(storage_hostQueue); 7810 //console.log(translate.request.speedDetectionControl.hostQueue[0].time); 7811 } 7812 7813 //console.log(translate.request.speedDetectionControl.hostQueue) 7814 7815 /* 7816 å½é¡µé¢ç¬¬ä¸æ¬¡æå¼åå§åè¿ä¸ªæ¶æä¼è¿è¡æµéï¼å¦å¤æµé乿¯è¦å¤ææ¶é´çï¼äºåé䏿¬¡ 7817 è¿è¡æµé 7818 */ 7819 var lasttime = translate.storage.get('speedDetectionControl_lasttime'); 7820 if(lasttime == null || typeof(lasttime) == 'undefined'){ 7821 lasttime = 0; 7822 } 7823 var updateTime = 60000; //1å鿣æµä¸æ¬¡ 7824 if(new Date().getTime() - lasttime > updateTime){ 7825 translate.request.speedDetectionControl.checkResponseSpeed(); 7826 } 7827 7828 } 7829 7830 7831 return translate.request.speedDetectionControl.hostQueue; 7832 }, 7833 7834 /* 7835 æå¡äº checkResponseSpeed ç¨äºå°æµè¯ç»æåå ¥ storage 7836 time: å½åæ¥å£è¯·æ±çèæ¶ï¼å使¯æ¯«ç§ãå¦ææ¯ 1000000 é£ä¹è¡¨ç¤ºè¿ä¸ªæ¥å£ä¸å¯ç¨ 7837 */ 7838 checkResponseSpeed_Storage:function(host, time){ 7839 7840 translate.request.speedDetectionControl.checkHostQueue.push({"host":host, "time":time }); 7841 //æç §timeè¿è¡æåº 7842 translate.request.speedDetectionControl.checkHostQueue.sort((a, b) => a.time - b.time); 7843 7844 //åå¨å° storage æä¹ å 7845 translate.storage.set('speedDetectionControl_hostQueue',JSON.stringify(translate.request.speedDetectionControl.checkHostQueue)); 7846 translate.storage.set('speedDetectionControl_lasttime', new Date().getTime()); 7847 7848 translate.request.speedDetectionControl.hostQueue = translate.request.speedDetectionControl.checkHostQueue; 7849 }, 7850 7851 /* 7852 æ§è¡æµè¯ååºé度å¨ä½ 7853 */ 7854 checkResponseSpeed:function(){ 7855 translate.request.speedDetectionControl.state = 1; //设置为è¿è¡æµéä¸ 7856 7857 var headers = { 7858 'content-type':'application/x-www-form-urlencoded', 7859 }; 7860 7861 if(typeof(translate.request.api.connectTest) != 'string' || translate.request.api.connectTest == null || translate.request.api.connectTest.length < 1){ 7862 return; 7863 } 7864 7865 7866 translate.request.speedDetectionControl.checkHostQueue = []; //ç¨äºå®é åå¨ 7867 translate.request.speedDetectionControl.checkHostQueueMap = []; //åªæ¯mapï¼éè¿keyåå¼ï¼æ å ¶ä»ä½ç¨ 7868 7869 if(typeof(translate.request.api.host) == 'string'){ 7870 //å个ï¼é£ä¹èµäºæ°ç»å½¢å¼ 7871 translate.request.api.host = [''+translate.request.api.host]; 7872 } 7873 7874 for(var i = 0; i < translate.request.api.host.length; i++){ 7875 var host = translate.request.api.host[i]; 7876 // è·åå½åæ¶é´çæ¶é´æ³ 7877 translate.request.speedDetectionControl.checkHostQueueMap[host] = { 7878 start:new Date().getTime() 7879 }; 7880 7881 7882 try{ 7883 translate.request.send( 7884 host+translate.request.api.connectTest, 7885 {host:host}, 7886 {host:host}, 7887 function(data){
7888 //åªè¦å ¶ä¸æä¸ªåå¾ååºï¼é½ä»£è¡¨æµé宿 7889 translate.request.speedDetectionControl.state = 2; 7890 7891 var host = data.info; 7892 var map = translate.request.speedDetectionControl.checkHostQueueMap[host]; 7893 var time = new Date().getTime() - map.start; 7894 7895 if(translate.request.api.host[0] == host){ 7896 //console.log('妿æ¯ç¬¬ä¸ä¸ªï¼é£ä¹æ¯ä¸»çï¼é»è®¤å 许缩å2000毫ç§ï¼ä¹å°±æ¯ä¼å 使ç¨ä¸»ç'); 7897 time = time - translate.request.speedDetectionControl.hostMasterNodeCutTime; 7898 if(time < 0){ 7899 time = 0; 7900 } 7901 } 7902 7903 translate.request.speedDetectionControl.checkResponseSpeed_Storage(host, time); 7904 /* 7905 translate.request.speedDetectionControl.checkHostQueue.push({"host":host, "time":time }); 7906 //æç §timeè¿è¡æåº 7907 translate.request.speedDetectionControl.checkHostQueue.sort((a, b) => a.time - b.time); 7908 7909 //åå¨å° storage æä¹ å 7910 translate.storage.set('speedDetectionControl_hostQueue',JSON.stringify(translate.request.speedDetectionControl.checkHostQueue)); 7911 translate.storage.set('speedDetectionControl_lasttime', new Date().getTime()); 7912 7913 translate.request.speedDetectionControl.hostQueue = translate.request.speedDetectionControl.checkHostQueue; 7914 //console.log(translate.request.speedDetectionControl.hostQueue); 7915 */ 7916 }, 7917 'post', 7918 true, 7919 headers, 7920 function(data){ 7921 //åªè¦å ¶ä¸æä¸ªåå¾ååºï¼é½ä»£è¡¨æµé宿 7922 translate.request.speedDetectionControl.state = 2; 7923 7924 //translate.request.speedDetectionControl.checkResponseSpeed_Storage(host, time); 7925 var hostUrl = data.requestURL.replace(translate.request.api.connectTest,''); 7926 translate.request.speedDetectionControl.checkResponseSpeed_Storage(hostUrl, translate.request.speedDetectionControl.disableTime); 7927 }, 7928 false 7929 ); 7930 }catch(e){ 7931 //console.log('e0000'); 7932 translate.log(e); 7933 //time = 300000; //æ æ³è¿æ¥çï¼é£ä¹èµäº 300 ç§å§ 7934 } 7935 7936 } 7937 7938 }, 7939 7940 //è·åå½å使ç¨çhostçæ°ç»ä¸æ 7941 getHostQueueIndex:function(){ 7942 if(translate.request.speedDetectionControl.hostQueueIndex < 0){ 7943 //页é¢å½åç¬¬ä¸æ¬¡ä½¿ç¨ï¼èµäºå¼ 7944 //å ä» storage ä¸å 7945 var storage_index = translate.storage.get('speedDetectionControl_hostQueueIndex'); 7946 if(typeof(storage_index) == 'undefined' || storage_index == null){ 7947 //åå¨ä¸ä¸åå¨ï¼å½åç¨æ·ï¼æµè§å¨ï¼ç¬¬ä¸æ¬¡ä½¿ç¨ï¼é»è®¤èµäº0 7948 translate.request.speedDetectionControl.hostQueueIndex = 0; 7949 translate.storage.set('speedDetectionControl_hostQueueIndex',0); 7950 }else{ 7951 translate.request.speedDetectionControl.hostQueueIndex = storage_index; 7952 } 7953 } 7954 return translate.request.speedDetectionControl.hostQueueIndex; 7955 }, 7956 7957 //è·åå½åè¦ä½¿ç¨çhost 7958 getHost:function(){ 7959 var queue = translate.request.speedDetectionControl.getHostQueue(); 7960 //console.log(queue); 7961 var queueIndex = translate.request.speedDetectionControl.getHostQueueIndex(); 7962 if(queue.length > queueIndex){ 7963 //æ£å¸¸ï¼æ²¡æè¶ åºè¶ç 7964 7965 }else{ 7966 //å¼å¸¸ï¼ä¸æ è¶çäºï¼ï¼åºå®è¿åæåä¸ä¸ª 7967 translate.log('å¼å¸¸ï¼ä¸æ è¶çäºï¼indexï¼'+queueIndex); 7968 queueIndex = queue.length-1; 7969 } 7970 //console.log(queueIndex); 7971 return queue[queueIndex].host; 7972 }, 7973 7974 }, 7975 //çæpost请æ±çurl 7976 getUrl:function(path){ 7977 var currentHost = translate.request.speedDetectionControl.getHost(); 7978 var url = currentHost+path+'?v='+translate.version; 7979 //console.log('url: '+url); 7980 return url; 7981 }, 7982 /** 7983 * postè¯·æ± 7984 * @param path 请æ±çpathï¼pathï¼ä¼ å ¥çæ¯translate.request.api.translate è¿ç§çï¼éè¦ä½¿ç¨ getUrl æ¥ç»åçæ£è¯·æ±çurl ï¼ 7985 * @param data 请æ±çåæ°æ°æ®ï¼ä¼ å ¥å¦ 7986 * { 7987 * from: "chinese_simplified", 7988 * text: "%5B%22%E4%BD%A0%E5%A5%BD%EF%BC%8C%E6%88%91", 7989 * to: "chinese_traditional 7990 * } 7991 * 7992 * @param func 请æ±å®æçåè°ï¼ä¹å°±æ¯åªè¦ååºç æ¯ 200 ï¼åä¼è§¦åè¿ä¸ªæ¹æ³ã ä¼ å ¥å¦ function(responseData, requestData){ console.log(responseData); } 7993 * å ¶ä¸çåæ°ï¼ 7994 * responseData ååºçæ°æ® 7995 * requestData postè¯·æ±ææºå¸¦çæ°æ® 7996 * 注æï¼æ¯ååºæ°æ®æ¯ç¬¬ä¸ä¸ªåæ°ï¼è¯·æ±æ°æ®æ¯ç¬¬äºä¸ªåæ°ã 以ååå ¼å®¹ 7997 * @param abnormalFunc ååºå¼å¸¸ææ§è¡çæ¹æ³ï¼ååºç 䏿¯200就伿§è¡è¿ä¸ªæ¹æ³ ,ä¼ å ¥å¦ function(xhr){} å¦å¤è¿éç xhr ä¼é¢å¤æä¸ªåæ° xhr.requestURL è¿åå½å请æ±å¤±è´¥çurl 7998 */ 7999 post:function(path, data, func, abnormalFunc){ 8000 var headers = { 8001 'content-type':'application/x-www-form-urlencoded', 8002 }; 8003 if(typeof(data) == 'undefined'){ 8004 return; 8005 } 8006 8007 //ä¼ä¸çº§ç¿»è¯èªå¨æ£æµ 8008 if(typeof(translate.enterprise) != 'undefined'){ 8009 translate.enterprise.automaticAdaptationService(); 8010 } 8011 8012 // ------- edge start -------- 8013 var url = translate.request.getUrl(path); 8014 //if(url.indexOf('edge') > -1 && path == translate.request.api.translate){ 8015 if(translate.service.name == 'client.edge'){ 8016 if(path == translate.request.api.translate){ 8017 translate.service.edge.translate(path, data, func, abnormalFunc); 8018 return; 8019 } 8020 if(path == translate.request.api.language){ 8021 var d = {}; 8022 d.info = 'SUCCESS'; 8023 d.result = 1; 8024 d.list = translate.service.edge.language.json; 8025 func(d); 8026 return; 8027 } 8028 8029 //return; 8030 } 8031 // ------- edge end -------- 8032 8033 this.send(path, data, data, func, 'post', true, headers, abnormalFunc, true); 8034 }, 8035 /** 8036 * åéè¯·æ± 8037 * url 请æ±çurlæè pathï¼pathï¼ä¼ å ¥çæ¯translate.request.api.translate è¿ç§çï¼éè¦ä½¿ç¨ getUrl æ¥ç»åçæ£è¯·æ±çurl ï¼ 8038 * data 请æ±çæ°æ®ï¼å¦ {"author":"管é·é¸£",'site':'www.guanleiming.com'} 8039 * appendXhrData éå å° xhr.data ä¸çå¯¹è±¡æ°æ®ï¼ä¼ å ¥æ¯å¦ {"from":"english","to":"japanese"} ï¼ä»ä¼ç´æ¥èµäº xhr.data 8040 * func 请æ±å®æçåè°ï¼ä¹å°±æ¯åªè¦ååºç æ¯ 200 ï¼åä¼è§¦åè¿ä¸ªæ¹æ³ã ä¼ å ¥å¦ function(requestData, responseData){ console.log(responseData); } 8041 * å ¶ä¸çåæ°ï¼ 8042 * requestData postè¯·æ±ææºå¸¦çæ°æ® 8043 * responseData ååºçæ°æ® 8044 * method è¯·æ±æ¹å¼ï¼å¯ä¼ å ¥ postãget 8045 * isAsynchronize æ¯å¦æ¯å¼æ¥è¯·æ±ï¼ ä¼ å ¥ true æ¯å¼æ¥è¯·æ±ï¼ä¼ å ¥false æ¯åæ¥è¯·æ±ã å¦æä¼ å ¥falseï¼åæ¬æ¹æ³è¿åxhr 8046 * headers 设置请æ±çheaderï¼ä¼ å ¥å¦ {'content-type':'application/x-www-form-urlencoded'}; 8047 * abnormalFunc ååºå¼å¸¸ææ§è¡çæ¹æ³ï¼ååºç 䏿¯200就伿§è¡è¿ä¸ªæ¹æ³ ,ä¼ å ¥å¦ function(xhr){} å¦å¤è¿éç xhr ä¼é¢å¤æä¸ªåæ° xhr.requestURL è¿åå½å请æ±å¤±è´¥çurl 8048 * showErrorLog æ¯å¦æ§å¶å°æå°åºæ¥é误æ¥å¿ï¼trueæå°ï¼ false ä¸æå° 8049 */ 8050 send:function(url, data, appendXhrData, func, method, isAsynchronize, headers, abnormalFunc, showErrorLog){ 8051 //postæäº¤çåæ° 8052 var params = ''; 8053 8054 if(data == null || typeof(data) == 'undefined'){ 8055 data = {}; 8056 } 8057 8058 if(typeof(data) == 'string'){ 8059 params = data; //payload æ¹å¼ , edge çæ¹å¼ 8060 }else{ 8061 //表åæäº¤æ¹å¼ 8062 8063 //å å ¥æµè§å¨é»è®¤è¯ç§ v3.6.1 å¢å ï¼ä»¥ä¾¿æ´å¥½çè¿è¡èªå¨åæ¢è¯ç§ 8064 data.browserDefaultLanguage = translate.util.browserDefaultLanguage(); 8065 8066 //追å éå åæ° 8067 for(var apindex in translate.request.appendParams){ 8068 if (!translate.request.appendParams.hasOwnProperty(apindex)) { 8069 continue; 8070 } 8071 data[apindex] = translate.request.appendParams[apindex]; 8072 } 8073 8074 if(typeof(translate.enterprise) != 'undefined'){ 8075 //å å ¥key 8076 if(typeof(translate.enterprise.key) != 'undefined' && typeof(translate.enterprise.key) == 'string' && translate.enterprise.key.length > 0){ 8077 data.key = translate.enterprise.key; 8078 } 8079 } 8080 8081 //ç»ååæ° 8082 for(var index in data){ 8083 if (!data.hasOwnProperty(index)) { 8084 continue; 8085 } 8086 if(params.length > 0){ 8087 params = params + '&'; 8088 } 8089 params = params + index + '=' + data[index]; 8090 } 8091 } 8092 if(url.indexOf('https://') == 0 || url.indexOf('http://') == 0){ 8093 //éç¨çurlç»å¯¹è·¯å¾ 8094 }else{ 8095 //ç¸å¯¹è·¯å¾ï¼æ¼æ¥ä¸host 8096 url = translate.request.getUrl(url); 8097 } 8098 8099 var xhr=null; 8100 try{ 8101 xhr=new XMLHttpRequest(); 8102 }catch(e){ 8103 xhr=new ActiveXObject("Microsoft.XMLHTTP"); 8104 } 8105 xhr.data=appendXhrData; 8106 //2.è°ç¨openæ¹æ³ï¼true----弿¥ï¼ 8107 xhr.open(method,url,isAsynchronize); 8108 //设置headers 8109 if(headers != null){ 8110 for(var index in headers){ 8111 if (!headers.hasOwnProperty(index)) { 8112 continue; 8113 } 8114 xhr.setRequestHeader(index,headers[index]); 8115 } 8116 } 8117 8118 //追å éå åæ° 8119 for(var ahindex in translate.request.appendHeaders){ 8120 if (!translate.request.appendHeaders.hasOwnProperty(ahindex)) { 8121 continue; 8122 } 8123 xhr.setRequestHeader(ahindex,translate.request.appendHeaders[ahindex]); 8124 } 8125 8126 if(translate.service.name != 'client.edge'){ 8127 xhr.setRequestHeader('currentpage', window.location.href+''); 8128 } 8129 xhr.send(params); 8130 //4.请æ±ç¶ææ¹åäºä»¶ 8131 xhr.onreadystatechange=function(){ 8132 if(xhr.readyState==4){ 8133 translate.request.response(xhr); //èªå®ä¹ååºçæ¦æª 8134 8135 if(xhr.status==200){ 8136 //è¯·æ±æ£å¸¸ï¼ååºç 200 8137 var json = null; 8138 if(typeof(xhr.responseText) == 'undefined' || xhr.responseText == null){ 8139 //ç¸åºå 容为空 8140 }else{ 8141 //ååºå 容æå¼ 8142 if(xhr.responseText.indexOf('{') > -1 && xhr.responseText.indexOf('}') > -1){ 8143 //åºè¯¥æ¯jsonæ ¼å¼ 8144 try{ 8145 json = JSON.parse(xhr.responseText); 8146 }catch(e){ 8147 translate.log(e); 8148 } 8149 } 8150 } 8151 8152 if(json === null){ 8153 func(xhr.responseText); 8154 }else{ 8155 func(json, xhr.data); 8156 } 8157 }else{ 8158 if(showErrorLog){ 8159 if(url.indexOf(translate.request.api.connectTest) > -1){ 8160 //æµè¯é¾æ¥é度çä¸å¨æ¥ééé¢ 8161 }else{ 8162 8163 //夿æ¯å¦æ¯v2çæ¬çç¿»è¯ï¼å¦ææ¯ translate.service 模å¼å¹¶ä¸æ²¡æä½¿ç¨ä¼ä¸çº§ç¿»è¯ï¼åä¼æç¤º 8164 //2024.3æåºå¼å§ï¼ç¿»è¯ä½¿ç¨éå¢å ç太快ï¼å¼æºçç¿»è¯æå¡å¨æç¹æä¸ä½ç»å¸¸åºæ éï¼æä»¥ç´æ¥æè¿ä¸ªæç¤ºå å°è¿é 8165 if(translate.service.name == 'translate.service'){ 8166 translate.log('----- translate.js æç¤º -----\nç¿»è¯æå¡ååºå¼å¸¸ï¼è§£å³è¿ç§æ åµå¯ä»¥æä¸¤ç§æ¹æ¡ï¼\nãæ¹æ¡ä¸ãï¼ä½¿ç¨éç¨ææ°çæ¬ 3.16.0åæ´é«çæ¬ï¼jså¼ç¨æä»¶ä¸º https://cdn.staticfile.net/translate.js/3.16.0/translate.js å¹¶ä¸ä½¿ç¨ client.edge æ¨¡å¼ ï¼å¢å ä¸è¡è®¾ç½®ä»£ç 就好ï¼å¯åè https://translate.zvo.cn/4081.html ï¼ï¼è¿æ ·å°±ä¸ä¼ååºç°è¿ç§æ åµäºï¼èä¸è¿ä¸ªæ¹æ¡ä¹æ¯å®å ¨å è´¹çã \nãæ¹æ¡äºãï¼éç¨ä¼ä¸çº§ç¨³å®ç¿»è¯éé ,使¯è¿ä¸ªç¸æ¯äº æ¹æ¡ä¸ æ¥è¯´ï¼æ¯æä¸å®çæ¶è´¹çï¼å¤§æ¦ä¸å¹´600ï¼è¿ä¸ªå°±æ¯ä¸é¨ä¸ºäºé«éåé«
8166稳å®åå¤çï¼èç¸æ¯äºè¿ä¸ªæ¹æ¡äºï¼æ¹æ¡ä¸åæ¯å ¨å è´¹çã å ä¸ºæ¹æ¡äºæä»¬æ¯é¨ç½²äºä¸¤ä¸ªé群ï¼èæ¯ä¸ªé群åä¸åäºæ°ä¸ªç½ç»èç¹ï¼å å«ä¸å½å¤§éã馿¸¯ãç¾å½ã欧洲ã çå¤ä¸ªå·ï¼å åä¿é稳å®ã髿ï¼åæ ·ä¹äº§çäºä¸å°ææ¬ï¼æä»¥æéè¦ä»è´¹ãæ´å¤ä¿¡æ¯è¯´æå¯ä»¥åèï¼ http://translate.zvo.cn/4087.html \nãæ¹æ¡ä¸ãï¼ç§æé¨ç½²ä½ èªå·±çç¿»è¯ééï¼å¹¶ä¸å¯ç¨å å级翻è¯ç¼åï¼æ¯«ç§çº§ååºï¼ä½æ¯éè¦ä¾èµä¸å°1æ ¸2Gæå¡å¨ï¼æ¯ææ¨èçæ¹å¼ãå ·ä½åèï¼https://translate.zvo.cn/391129.html\n-------------'); 8167 } 8168 8169 //console.log(xhr); 8170 translate.log('------- translate.js service api response error --------'); 8171 translate.log(' http code : '+xhr.status); 8172 translate.log(' response : '+xhr.response); 8173 translate.log(' request url : '+url); 8174 translate.log(' request data : '+JSON.stringify(data)); 8175 translate.log(' request method : '+method); 8176 translate.log('---------------------- end ----------------------'); 8177 } 8178 8179 } 8180 xhr.requestURL = url; 8181 if(abnormalFunc != null){ 8182 abnormalFunc(xhr); 8183 } 8184 } 8185 } 8186 } 8187 return xhr; 8188 }, 8189 /* 8190 8191 æå¨è¿è¡ç¿»è¯æä½ãåæ°è¯´æï¼ 8192 texts: å¯ä¼ å ¥è¦ç¿»è¯çææ¬ã以忿¬æ°ç»ã æ¯å¦è¦ä¸æ¬¡ç¿»è¯å¤ä¸ªå¥åï¼é£å°±å¯ä»¥ä¼ å ¥æ°ç»çæ¹å¼ 8193 function: ç¿»è¯å®æ¯åçå¤ç彿°ãä¼ å ¥å¦ function(data){ console.log(data); } 8194 注æï¼è¿åçdata.result 为 1ï¼åæ¯ç¿»è¯æåã 为0忝åºéï¼å¯éè¿data.info å¾å°é误åå ã æ´è¯¦ç»è¯´æåèï¼ http://api.zvo.cn/translate/service/20230807/translate.json.html 8195 8196 abnormalFunc: ç¿»è¯å¤±è´¥åçå¤ç彿°ãä¼ å ¥å¦ function(xhr){ console.log(xhr); } 8197 注æï¼è¿éç xhr æ¯ XMLHttpRequest 对象ï¼å¯ä»¥éè¿ xhr.status è·åååºç¶æç ï¼éè¿ xhr.responseText è·åååºå 容ã 8198 8199 ä½¿ç¨æ¡ä¾ä¸ï¼ 8200 translate.request.translateText('ä½ å¥½ï¼ææ¯ç¿»è¯çå 容', function(data){ 8201 //æå°ç¿»è¯ç»æ 8202 console.log(data); 8203 }, function(xhr){ 8204 //æå°ç¿»è¯å¤±è´¥åçä¿¡æ¯ 8205 console.log(xhr); 8206 }); 8207 8208 ä½¿ç¨æ¡ä¾äºï¼ 8209 var texts = ['ææ¯ç¿»è¯ç第ä¸å¥','ææ¯ç¿»è¯ç第äºå¥','ææ¯ç¿»è¯ç第ä¸å¥']; 8210 translate.request.translateText(texts, function(data){ 8211 //æå°ç¿»è¯ç»æ 8212 console.log(data); 8213 }, function(xhr){ 8214 //æå°ç¿»è¯å¤±è´¥åçä¿¡æ¯ 8215 console.log(xhr); 8216 }); 8217 8218 ä½¿ç¨æ¡ä¾ä¸ï¼ 8219 var obj = { 8220 from:'chinese_simplified', 8221 to:'english', 8222 texts: ['ææ¯ç¿»è¯ç第ä¸å¥','ææ¯ç¿»è¯ç第äºå¥','ææ¯ç¿»è¯ç第ä¸å¥'] 8223 } 8224 translate.request.translateText(obj, function(data){ 8225 //æå°ç¿»è¯ç»æ 8226 console.log(data); 8227 }, function(xhr){ 8228 //æå°ç¿»è¯å¤±è´¥åçä¿¡æ¯ 8229 console.log(xhr); 8230 }); 8231 */ 8232 translateText:function(obj, func, abnormalFunc){ 8233 var texts = new Array(); 8234 var from = translate.language.getLocal(); 8235 var to = translate.language.getCurrent(); 8236 8237 if(typeof(obj) == 'string'){ 8238 //æ¡ä¾ä¸çåºæ¯ï¼ä¼ å ¥å个å符串 8239 texts[0] = obj; 8240 }else{ 8241 //䏿¯å符串äºï¼èæ¯å¯¹è±¡äºï¼å¤ææ¯æ¡ä¾äºè¿æ¯æ¡ä¾ä¸ 8242 8243 var type = Object.prototype.toString.call(obj); 8244 //console.log(type); 8245 if(type == '[object Array]'){ 8246 //æ¡ä¾äº 8247 texts = obj; 8248 }else if(type == '[object Object]'){ 8249 //æ¡ä¾ä¸ 8250 if(typeof(obj.texts) == 'undefined'){ 8251 translate.log('translate.request.translateText ä¼ å ¥çå¼ç±»åå¼å¸¸ï¼å ä¸ºä½ æ²¡æä¼ å ¥ obj.texts è¦ç¿»è¯çå ·ä½ææ¬ï¼ 请æ¥é ææ¡£ï¼ https://translate.zvo.cn/4077.html'); 8252 } 8253 if(typeof(obj.texts) == 'string'){ 8254 //å个å符串 8255 texts = [obj.texts]; 8256 }else{ 8257 //å¤ä¸ªåç¬¦ä¸²ï¼æ°ç»å½¢æ 8258 texts = obj.texts; 8259 } 8260 if(typeof(obj.from) == 'string' && obj.from.length > 0){ 8261 from = obj.from; 8262 } 8263 if(typeof(obj.to) == 'string' && obj.to.length > 0){ 8264 to = obj.to; 8265 } 8266 }else{ 8267 translate.log('translate.request.translateText ä¼ å ¥çå¼ç±»åé误ï¼è¯·æ¥é ææ¡£ï¼ https://translate.zvo.cn/4077.html'); 8268 return; 8269 } 8270 } 8271 //console.log(obj); 8272 //è¿åçç¿»è¯ç»æï¼ä¸æ è· obj.texts ä¸ä¸å¯¹åºç 8273 var translateResultArray = new Array(); 8274 8275 // çééè¦ç¿»è¯çææ¬åå ¶åå§ç´¢å¼ 8276 var apiTranslateText = []; 8277 var apiTranslateArray = {}; 8278 for(var i = 0; i < texts.length; i++){ 8279 //夿æ¯å¦å¨æµè§å¨ç¼åä¸åºç°äº 8280 var hash = translate.util.hash(texts[i]);
8281 var cache = translate.storage.get('hash_'+to+'_'+hash); 8282 //console.log(hash+'\t'+texts[i]+'\t'+cache); 8283 if(cache != null && cache.length > 0){ 8284 //ç¼åä¸åç°äºè¿ä¸ªå¾ç»æï¼é£è¿ä¸ªå°±ä¸éè¦åè¿è¡ç¿»è¯äº 8285 translateResultArray[i] = cache; 8286 }else{ 8287 translateResultArray[i] = ''; 8288 apiTranslateText.push(texts[i]); 8289 apiTranslateArray[hash] = i; 8290 } 8291 } 8292 if (apiTranslateText.length == 0) { 8293 //没æéè¦è¿è¡éè¿ç½ç»APIç¿»è¯çä»»å¡äºï¼å ¨é¨å½ä¸ç¼åï¼é£ä¹ç´æ¥è¿å 8294 var data = { 8295 from:from, 8296 to: to, 8297 text:translateResultArray, 8298 result:1 8299 }; 8300 //console.log(data); 8301 func(data); 8302 return; 8303 } 8304 8305 8306 8307 //è¿æéè¦è¿è¡éè¿APIæ¥å£è¿è¡ç¿»è¯çææ¬ï¼éè¦è°ç¨ç¿»è¯æ¥å£ 8308 if(typeof(translate.request.api.translate) != 'string' || translate.request.api.translate == null || translate.request.api.translate.length < 1){ 8309 //ç¨æ·å·²ç»è®¾ç½®äºä¸æç¿»è¯æ¥å£è¿è¡ç¿»è¯ 8310 return; 8311 } 8312 8313 var url = translate.request.api.translate; 8314 var data = { 8315 from:from, 8316 to: to, 8317 text:encodeURIComponent(JSON.stringify(apiTranslateText)) 8318 }; 8319 //console.log(apiTranslateText); 8320 translate.request.post(url, data, function(responseData, requestData){ 8321 //console.log(responseData); 8322 //console.log(data); 8323 if(responseData.result != 1){ 8324 translate.log('=======ERROR START======='); 8325 translate.log('from : '+requestData.from); 8326 translate.log('to : '+requestData.to); 8327 translate.log('translate text array : '+texts); 8328 translate.log('response error info: '+responseData.info); 8329 translate.log('=======ERROR END ======='); 8330 //return; 8331 } 8332 8333 for(var i = 0; i < responseData.text.length; i++){ 8334 //å°ç¿»è¯ç»æä»¥ keyï¼hash valueç¿»è¯ç»æçå½¢å¼ç¼å 8335 var hash = translate.util.hash(apiTranslateText[i]); 8336 translate.storage.set('hash_'+to+'_'+hash, responseData.text[i]); 8337 //å¦æç¦»çº¿ç¿»è¯å¯ç¨äºå ¨é¨æåï¼é£ä¹è¿è¦åå ¥ç¦»çº¿ç¿»è¯æå®åå¨ 8338 if(translate.offline.fullExtract.isUse){ 8339 translate.offline.fullExtract.set(hash, apiTranslateText[i], data.to, responseData.text[i]); 8340 } 8341 8342 //è¿è¡ç»åæ°æ®å° translateResultArray 8343 translateResultArray[apiTranslateArray[hash]] = responseData.text[i]; 8344 } 8345 responseData.text = translateResultArray; 8346 8347 func(responseData); 8348 }, (function(xhr){ 8349 if(abnormalFunc && typeof(abnormalFunc) == 'function'){ 8350 abnormalFunc(xhr); 8351 } 8352 })); 8353 }, 8354 listener:{ 8355 //æ¯å¦å·²ç»å¯å¨è¿ translate.request.listener.addListener() å¼å§çå¬äºï¼å¼å§äºåæ¯trueï¼é»è®¤æ²¡å¼å§åæ¯false 8356 isStart:false, 8357 //ç¨æ·ç代ç 鿝å¦å¯ç¨äº translate.request.listener.start() ï¼trueï¼å¯ç¨ 8358 use:false, 8359 minIntervalTime:800, // 两次触åçæå°é´éæ¶é´ï¼å使¯æ¯«ç§ï¼è¿éé»è®¤æ¯800毫ç§ãæå°å¡«åæ¶é´ä¸º 200æ¯«ç§ 8360 lasttime:0,// æå䏿¬¡è§¦åæ§è¡ translate.execute() çæ¶é´ï¼è¿è¡æ§è¡çé£ä¸å»ï¼è䏿¯æ§è¡å®ã13使¶é´æ³ 8361 /* 8362 设置è¦å¨æªæ¥çæä¸æ¶å»æ§è¡ï¼å使¯æ¯«ç§ï¼13使¶é´æ³ã 8363 æ§è¡æ¶å¦æå½åæ¶é´å¤§äºè¿ä¸ªæ°ï¼åæ§è¡ï¼å¹¶ä¸å°è¿ä¸ªæ°ç½®ä¸º0ã 8364 伿ä¸ä¸ªå¾ªç¯æ§è¡å½æ°æ¯é´é200毫ç§è§¦å䏿¬¡ 8365 */ 8366 executetime:0, 8367 /* 8368 è¿è¡ç¿»è¯æ¶ï¼å»¶è¿ç¿»è¯æ§è¡çæ¶é´ 8369 å½ajax请æ±ç»æåï¼å»¶è¿è¿éè®¾ç½®çæ¶é´ï¼ç¶åèªå¨è§¦å translate.execute() æ§è¡ 8370 */ 8371 delayExecuteTime:200, 8372 /* 8373 满足ajaxåºåæ¡ä»¶ï¼è®¾ç½®è¦æ§è¡ç¿»è¯ã 8374 注æï¼è®¾ç½®è¿ä¸ªå并䏿¯ç«é©¬å°±ä¼æ§è¡ï¼èæ¯å å ¥äºä¸ä¸ªæ§è¡éåï¼é¿å 1ç§è¯·æ±äº10次ä¼è§¦å10次æ§è¡çæ åµ 8375 */ 8376 addExecute:function(){ 8377 var currentTime = Date.now(); 8378 if(translate.request.listener.lasttime == 0){ 8379 //æ¯ç¬¬ä¸æ¬¡ï¼lasttimeè¿æ²¡è®¾ç½®è¿ï¼é£ä¹ç´æ¥è®¾ç½®æ§è¡æ¶é´ä¸ºå½åæ¶é´ 8380 translate.request.listener.executetime = currentTime; 8381 translate.request.listener.lasttime = 1; 8382 }else{ 8383 //䏿¯ç¬¬ä¸æ¬¡äº 8384 8385 if(translate.request.listener.executetime > 1){ 8386 //å½åææ§è¡éåçå¾ ï¼ä¸ç¨åå å ¥æ§è¡çå¾ äº 8387 //console.log('已卿§è¡éåï¼ä¸ç¨åå å ¥äº '+currentTime); 8388 }else{ 8389 //æ§è¡éåä¸è¿æ²¡æï¼å¯ä»¥å å ¥æ§è¡å½ä»¤ 8390 8391 if(currentTime < translate.request.listener.lasttime + translate.request.listener.minIntervalTime){ 8392 //妿å½åæ¶é´å°äºæå䏿¬¡æ§è¡æ¶é´+é´éæ¶é´ï¼é£ä¹å°±æ¯ä¸æ¬¡æååæ§è¡è¿ï¼è¿æ¬¡æ§è
8392¡ç太快äºï¼é£ä¹èµäºæªæ¥æ§è¡ç¿»è¯çæ¶é´ä¸ºæå䏿¬¡æ¶é´+é´éæ¶é´ 8393 translate.request.listener.executetime = translate.request.listener.lasttime + translate.request.listener.minIntervalTime; 8394 //console.log('addexecute - < 妿å½åæ¶é´å°äºæå䏿¬¡æ§è¡æ¶é´+é´éæ¶é´ï¼é£ä¹å°±æ¯ä¸æ¬¡æååæ§è¡è¿ï¼è¿æ¬¡æ§è¡ç太快äºï¼é£ä¹èµäºæªæ¥æ§è¡ç¿»è¯çæ¶é´ä¸ºæå䏿¬¡æ¶é´+é´éæ¶é´'); 8395 }else{ 8396 translate.request.listener.executetime = currentTime; 8397 //console.log('addexecute -- OK '); 8398 } 8399 } 8400 8401 8402 } 8403 8404 8405 }, 8406 /* 8407 èªå®ä¹æ¯å¦ä¼è¢«è§¦åçæ¹æ³å¤æ 8408 url å½åajax请æ±çurlï¼æ³¨ææ¯è¿ä¸ªurl请æ±å®æ¯è·åå°200ç¸åºçå å®¹æ¶æä¼è§¦åæ¤æ¹æ³ 8409 è¿åå¼ return true; é»è®¤æ¯ä¸ç®¡ä»ä¹urlï¼å ¨é¨è¿åtrueï¼è¡¨ç¤ºä¼è§¦åç¿»è¯èªå¨æ§è¡ translate.execute; ,å¦æä½ ä¸æ³è®©æä¸ªurl触åç¿»è¯ï¼é£ä¹ä½ å¯ä»¥èªè¡å¨è¿ä¸ªæ¹æ³ä¸ç¨ä»£ç è¿è¡å¤æï¼ç¶åè¿åfalseï¼é£ä¹è¿ä¸ªurlå°ä¸ä¼èªå¨è§¦åç¿»è¯æä½ã 8410 */ 8411 trigger:function(url){ 8412 return true; 8413 }, 8414 8415 /*js translate.request.listener.start start*/ 8416 /* 8417 å¯å¨æ ¹æ®ajaxè¯·æ±æ¥èªå¨è§¦åæ§è¡ç¿»è¯ï¼é¿å ææ¶åæçæ¡æ¶å卿¼ç¿»è¯çæ åµã 8418 è¿ä¸ªåªéè¦æ§è¡ä¸æ¬¡å³å¯ï¼å¦ææ§è¡å¤æ¬¡ï¼åªæç¬¬ä¸æ¬¡ä¼çæ 8419 */ 8420 start:function(){ 8421 translate.request.listener.use = true; 8422 }, 8423 /*js translate.request.listener.start end*/ 8424 8425 // å½ translate.execute() è§¦åæ¶ï¼ä¹å°±æ¯è§¦åäºçå½å¨æç start æ¶ï¼æä¼å¯å¨è¿éãè¿éè¦å¨ç¿»è¯è¿è¡åæè½è§¦åï¼ä¸ç¶æååºåä¼å¯¼è´è·ç¨æ·è®¾ç½®çå¯å¨æ¶é´ä¸ç¸ç¬¦é æå¼å¸¸ 8426 addListener:function(){ 8427 if(translate.request.listener.use == false){ 8428 //æ ¹æ¬å°±æ²¡è®¾ç½®å¯ç¨ï¼ç´æ¥æ¨åº 8429 return; 8430 } 8431 8432 //ç¡®ä¿è¿ä¸ªæ¹æ³åªä¼è§¦å䏿¬¡ï¼ä¸ä¼è¿å¤è§¦å 8433 if(typeof(translate.request.listener.isStart) != 'undefined' && translate.request.listener.isStart == true){ 8434 return; 8435 }else{ 8436 translate.request.listener.isStart = true; 8437 } 8438 8439 //å¢å ä¸ä¸ªæ²¡100æ¯«ç§æ£æ¥ä¸æ¬¡æ§è¡ä»»å¡ççº¿ç¨ 8440 setInterval(function(){ 8441 var currentTime = Date.now(); 8442 //console.log(translate.request.listener.executetime) 8443 if(translate.request.listener.executetime > 1 && currentTime > translate.request.listener.executetime+translate.request.listener.delayExecuteTime){ 8444 translate.request.listener.executetime = 0; 8445 translate.request.listener.lasttime = currentTime; 8446 if(translate.executeTriggerNumber > 0){ //å·²ç»æ§è¡è¿äº translate.execute() ï¼é£ä¹æä¼è§¦å 8447 try{ 8448 //console.log('translate.request.listener.start ... æ§è¡ç¿»è¯ --'+currentTime); 8449 translate.execute(); 8450 }catch(e){ 8451 translate.log(e); 8452 } 8453 } 8454 } 8455 }, 100); 8456 8457 if(typeof(PerformanceObserver) == 'undefined'){ 8458 translate.log('å æµè§å¨çæ¬è¾ä½ï¼ translate.request.listener.start() ä¸ PerformanceObserver 对象ä¸åå¨ï¼æµè§å¨ä¸æ¯æï¼æä»¥ translate.request.listener.start() æªçæã'); 8459 return; 8460 } 8461 8462 const observer = new PerformanceObserver((list) => { 8463 var translateExecute = false; //æ¯å¦éè¦æ§è¡ç¿»è¯ true è¦æ§è¡ 8464 for(var e = 0; e < list.getEntries().length; e++){ 8465 var entry = list.getEntries()[e]; 8466 //console.log(entry) 8467 8468 if (entry.initiatorType === 'fetch' || entry.initiatorType === 'xmlhttprequest') { 8469 var url = entry.name; 8470 //console.log(url); 8471 //夿urlæ¯å¦æ¯å½åtranslate.jsæ¬èº«ä½¿ç¨ç 8472 if(typeof(translate.request.api.host) == 'string'){ 8473 translate.request.api.host = [translate.request.api.host]; 8474 } 8475 var ignoreUrl = false; // æ¯å¦æ¯å¿½ç¥çurl trueæ¯ 8476 8477 //translate.service 模å¼å¤æ 8478 for(var i = 0; i < translate.request.api.host.length; i++){ 8479 if(url.indexOf(translate.request.api.host[i]) > -1){ 8480 //æ¯ï¼é£ä¹ç´æ¥å¿½ç¥ 8481 ignoreUrl = true; 8482 break; 8483 } 8484 } 8485 //client.edge 夿 translate.service.edgeå¯è½ä¼è¢«ç²¾ç®translate.jså®å¶æ¶ç»ç´æ¥å¹²æï¼æä»¥æåå ä¸ªå¤æ 8486 if(typeof(translate.service.edge) != 'undefined'){ 8487 if(url.indexOf('edge.microsoft.com/translate/translatetext') > -1){ 8488 ignoreUrl = true; 8489 } 8490 } 8491 8492 if(ignoreUrl){ 8493 //console.log('忽ç¥ï¼'+url); 8494 continue; 8495 } 8496 if(translate.request.listener.trigger()){ 8497 //æ£å¸¸ï¼ä¼è§¦åç¿»è¯ï¼ä¹æ¯é»è®¤ç 8498 }else{ 8499 //ä¸è§¦åç¿»è¯ï¼è·³è¿ 8500 continue; 8501 } 8502 8503 translateExecute = true; 8504 break; 8505 } 8506 } 8507 if(translateExecute){ 8508 //console.log('translate.request.listener.addExecute() -- '+Date.now()); 8509 translate.request.listener.addExecute(); 8510 } 8511 }); 8512 8513 //v3.15.14.20250617 å¢å 8514 // ä¼å ä½¿ç¨ entryTypes å ¼å®¹ ES5 çåæ³ 8515 8516 var supportedTypes = PerformanceObserver.supportedEntryTypes; 8517 if (supportedTypes) { 8518 var hasResource = false; 8519 for (var i = 0; i < supportedTypes.length; i++) { 8520 if (supportedTypes[i] === "resource") { 8521 hasResource = true; 8522 break; 8523 } 8524 } 8525 if (hasResource) { 8526 try { 8527 observer.observe({ entryTypes: ["resource"] }); 8528 return; 8529 } catch (e) { 8530 translate.log("PerformanceObserver entryTypes 失败ï¼å°è¯ type åæ°"); 8531 } 8532 } 8533 } 8534 8535 8536 // åéå° type åæ° 8537 try { 8538 observer.observe({ type: "resource", buffered: true });
8539 translate.log("ä½¿ç¨ PerformanceObserver type"); 8540 } catch (e) { 8541 translate.log("å½åæµè§å¨ä¸æ¯æ PerformanceObserver çä»»ä½åæ°, translate.request.listener.start() æªå¯å¨"); 8542 } 8543 8544 } 8545 8546 } 8547 }, 8548 //åå¨ï¼æ¬å°ç¼å 8549 storage:{ 8550 /*js translate.storage.IndexedDB start*/ 8551 //对æµè§å¨ç IndexedDB æä½ 8552 IndexedDB:{ 8553 db: null, 8554 // åå§åæ°æ®åº 8555 initDB: function () { 8556 const self = this; 8557 return new Promise((resolve, reject) => { 8558 const DB_NAME = 'translate.js'; 8559 const STORE_NAME = 'kvStore'; 8560 const DB_VERSION = 1; 8561 8562 const request = indexedDB.open(DB_NAME, DB_VERSION); 8563 8564 request.onupgradeneeded = function(event) { 8565 const upgradedDb = event.target.result; 8566 if (!upgradedDb.objectStoreNames.contains(STORE_NAME)) { 8567 upgradedDb.createObjectStore(STORE_NAME, { keyPath: 'key' }); 8568 } 8569 }; 8570 8571 request.onsuccess = function(event) { 8572 self.db = event.target.result; 8573 resolve(); 8574 }; 8575 8576 request.onerror = function(event) { 8577 reject('IndexedDB æå¼å¤±è´¥'); 8578 }; 8579 }); 8580 }, 8581 /* 8582 åå¨é®å¼å¯¹ 8583 ä½¿ç¨æ¹å¼ï¼ 8584 await translate.storage.indexedDB.set("user_001", { name: "Alice" }); 8585 */ 8586 set: async function (key, value) { 8587 if (!this.db) await this.initDB(); 8588 8589 return new Promise((resolve, reject) => { 8590 const tx = this.db.transaction('kvStore', 'readwrite'); 8591 const store = tx.objectStore('kvStore'); 8592 const item = { key, value }; 8593 const request = store.put(item); 8594 8595 request.onsuccess = () => resolve(); 8596 request.onerror = () => reject('åå ¥å¤±è´¥'); 8597 }); 8598 }, 8599 /* 8600 è·åé®å¯¹åºçå¼ 8601 ä½¿ç¨æ¹å¼ï¼ 8602 var user = await translate.storage.indexedDB.get("user_001"); 8603 */ 8604 get: async function (key) { 8605 if (!this.db) await this.initDB(); 8606 8607 return new Promise((resolve, reject) => { 8608 const tx = this.db.transaction('kvStore', 'readonly'); 8609 const store = tx.objectStore('kvStore'); 8610 const request = store.get(key); 8611 8612 request.onsuccess = () => { 8613 const result = request.result; 8614 resolve(result ? result.value : undefined); 8615 }; 8616 8617 request.onerror = () => reject('读å失败'); 8618 }); 8619 }, 8620 /* 8621 ååºé对keyè¿è¡æ¨¡ç³å¹é çææé®å¼å¯¹ 8622 ä½¿ç¨æ¹å¼ï¼ 8623 const users = await translate.storage.IndexedDB.list("*us*r*"); 8624 å ¶ä¸ä¼ å ¥çkeyå¯ä»¥æ¨¡ç³æç´¢ï¼å ¶ä¸ç * æ è¯å¦ä¸ªæå¤ä¸ª 8625 */ 8626 list: async function (key = '') { 8627 if (!this.db) await this.initDB(); 8628 8629 return new Promise((resolve, reject) => { 8630 const tx = this.db.transaction('kvStore', 'readonly'); 8631 const store = tx.objectStore('kvStore'); 8632 const request = store.openCursor(); 8633 const results = []; 8634 8635 // å°éé 符 pattern 转æ¢ä¸ºæ£åè¡¨è¾¾å¼ 8636 const regexStr = '^' + key.replace(/\*/g, '.*') + '$'; 8637 const regex = new RegExp(regexStr); 8638 8639 request.onsuccess = (event) => { 8640 const cursor = event.target.result; 8641 if (cursor) { 8642 if (regex.test(cursor.key)) { 8643 results.push({ key: cursor.key, value: cursor.value.value }); 8644 } 8645 cursor.continue(); 8646 } else { 8647 resolve(results); 8648 } 8649 }; 8650 8651 request.onerror = () => reject('游æ 读å失败'); 8652 }); 8653 } 8654 }, 8655 /*js translate.storage.IndexedDB end*/ 8656 8657 set:function(key,value){ 8658 localStorage.setItem(key,value); 8659 }, 8660 get:function(key){ 8661 return localStorage.getItem(key); 8662 } 8663 8664 }, 8665 //é对å¾çè¿è¡ç¸å ³çè¯ç§å¾çæ¿æ¢ 8666 images:{ 8667 /* è¦æ¿æ¢çå¾çéåï¼æ°ç»å½¢æï¼å ¶ä¸æä¸ªæ°ç»çï¼ 8668 keyï¼"/uploads/allimg/160721/2-160H11URA25-lp.jpg"; //æ§å¾çï¼ä¹å°±æ¯åç½ç«æ¬èº«çå¾çãä¹å¯ä»¥ç»å¯¹è·¯å¾ï¼ä¼èªå¨å¹é img src çå¼ï¼å¹é æ¶ä¼è¿è¡å®å ¨å¹é 8669 valueï¼"https://xxx.com/abc_{language}.jpg" //æ°å¾çï¼è¦è¢«æ¿æ¢ä¸ºçæ°å¾çãæ°å¾çè·¯å¾éè¦ä¸ºç»å¯¹è·¯å¾ï¼è½ç´æ¥è®¿é®å°çãå ¶ä¸ {language} ä¼èªå¨æ¿æ¢ä¸ºå½åè¦æ¾ç¤ºçè¯ç§ãæ¯å¦ä½ è¦å°ä½ 䏿ç½ç«ç¿»è¯ä¸ºç¹ä½ä¸æï¼é£è¿éä¼èªå¨æ¿æ¢ä¸ºï¼https://xxx.com/abc_chinese_traditional.jpg æå ³{language}çåå¼ï¼å¯æ¥é http://api.translate.zvo.cn/doc/language.json.html å ¶ä¸çè¯è¨æ è¯idä¾¿æ¯ 8670 */ 8671 queues:[], 8672 8673 /* 8674 åå¾çæ¿æ¢éåä¸è¿½å è¦æ¿æ¢çå¾ç 8675 ä¼ å ¥æ ¼å¼å¦ï¼ 8676 8677 translate.images.add({ 8678 "/uploads/a.jpg":"https://www.zvo.cn/a_{language}.jpg",
8679 "/uploads/b.jpg":"https://www.zvo.cn/b_{language}.jpg", 8680 }); 8681 8682 åæ°è¯´æï¼ 8683 key //æ§å¾çï¼ä¹å°±æ¯åç½ç«æ¬èº«çå¾çãä¹å¯ä»¥ç»å¯¹è·¯å¾ï¼ä¼èªå¨å¹é img src çå¼ï¼å¹é æ¶ä¼è¿è¡å®å ¨å¹é 8684 value //æ°å¾çï¼è¦è¢«æ¿æ¢ä¸ºçæ°å¾çãæ°å¾çè·¯å¾éè¦ä¸ºç»å¯¹è·¯å¾ï¼è½ç´æ¥è®¿é®å°çãå ¶ä¸ {language} ä¼èªå¨æ¿æ¢ä¸ºå½åè¦æ¾ç¤ºçè¯ç§ãæ¯å¦ä½ è¦å°ä½ 䏿ç½ç«ç¿»è¯ä¸ºç¹ä½ä¸æï¼é£è¿éä¼èªå¨æ¿æ¢ä¸ºï¼https://xxx.com/abc_chinese_traditional.jpg æå ³{language}çåå¼ï¼å¯æ¥é http://api.translate.zvo.cn/doc/language.json.html å ¶ä¸çè¯è¨æ è¯idä¾¿æ¯ 8685 */ 8686 add:function(queueArray){ 8687 /* 8688 translate.images.queues[translate.images.queues.length] = { 8689 old:oldImage, 8690 new:newImage 8691 } 8692 */ 8693 for(var key in queueArray){ 8694 if (!queueArray.hasOwnProperty(key)) { 8695 continue; 8696 } 8697 translate.images.queues[key] = queueArray[key]; 8698 } 8699 }, 8700 //æ§è¡å¾çæ¿æ¢æä½ï¼å°åæ¬çå¾çæ¿æ¢ä¸ºè·ç¿»è¯è¯ç§ä¸æ ·çå¾ç 8701 execute:function(){ 8702 //console.log(translate.images.queues); 8703 if(Object.keys(translate.images.queues).length < 1){ 8704 //å¦ææ²¡æï¼é£ä¹ç´æ¥åæ¶å¾ççæ¿æ¢æ«æ 8705 return; 8706 } 8707 8708 /*** 寻æ¾imgæ ç¾ä¸çå¾ç ***/ 8709 var imgs = document.getElementsByTagName('img'); 8710 for(var i = 0; i < imgs.length; i ++){ 8711 var img = imgs[i]; 8712 if(typeof(img.src) == 'undefined' || img.src == null || img.src.length == 0){ 8713 continue; 8714 } 8715 var imgSrc = img.getAttribute('src'); //è¿æ ·è·åå°çææ¯srcåå§çå¼ï¼ä¸ç¶ img.src æ¯æ¿å°ä¸ä¸ªç»å¯¹è·¯å¾ 8716 8717 for(var key in translate.images.queues){ 8718 var oldImage = key; //忬çå¾çsrc 8719 var newImage = translate.images.queues[key]; //æ°çå¾çsrcï¼è¦æ¿æ¢ä¸ºç 8720 //console.log('queue : '+oldImage + ' , img.src: '+imgSrc); 8721 if(oldImage == imgSrc){ 8722 //console.log('åç°å¹é å¾ç:'+imgSrc); 8723 /* 8724 //夿å½åå ç´ æ¯å¦å¨ignore忽ç¥çtagãidãclass nameä¸ 8725 if(translate.ignore.isIgnore(node)){ 8726 console.log('nodeå å«å¨è¦å¿½ç¥çå ç´ ä¸ï¼'); 8727 console.log(node); 8728 continue; 8729 } 8730 */ 8731 8732 //没å¨å¿½ç¥å ç´ éï¼å¯ä»¥æ¿æ¢ 8733 newImage = newImage.replace(new RegExp('{language}','g'), translate.to); 8734 img.src = newImage; 8735 } 8736 } 8737 8738 } 8739 8740 8741 /********** è¿è¦æ¿æ¢styleä¸çèæ¯å¾ */ 8742 // è·åå½åç½é¡µä¸ææçå ç´ 8743 var elems = document.getElementsByTagName("*"); 8744 // éåæ¯ä¸ªå ç´ ï¼æ£æ¥å®ä»¬æ¯å¦æèæ¯å¾ 8745 for (var i = 0; i < elems.length; i++) { 8746 var elem = elems[i]; 8747 // è·åå ç´ ç计ç®åæ ·å¼ 8748 var style = window.getComputedStyle(elem, null); 8749 // è·åå ç´ çèæ¯å¾URL 8750 var bg = style.backgroundImage; 8751 // å¦æèæ¯å¾ä¸ä¸ºç©ºï¼æå°åºæ¥ 8752 if (bg != "none") { 8753 //console.log(bg); 8754 var old_img = translate.images.gainCssBackgroundUrl(bg); 8755 //console.log("old_img:"+old_img); 8756 if(typeof(translate.images.queues[old_img]) != 'undefined'){ 8757 //åå¨ 8758 var newImage = translate.images.queues[old_img]; 8759 newImage = newImage.replace(new RegExp('{language}','g'), translate.to); 8760 //æ´æ¢ç¿»è¯æå®å¾å 8761 elem.style.backgroundImage='url("'+newImage+'")'; 8762 }else{ 8763 //console.log('åç°å¾å'+old_img+', 使ªåè¯ç§éé '); 8764 } 8765 } 8766 } 8767 8768 8769 8770 8771 }, 8772 //åcssä¸çèæ¯å¾ï¼ä¼ å ¥ url("https://xxx.com/a.jpg") è¿åéé¢å纯çurl 8773 gainCssBackgroundUrl:function(str){ 8774 // 使ç¨indexOfæ¹æ³ï¼æ¾å°ç¬¬ä¸ä¸ªåå¼å·çä½ç½® 8775 var start = str.indexOf("\""); 8776 // 使ç¨lastIndexOfæ¹æ³ï¼æ¾å°æåä¸ä¸ªåå¼å·çä½ç½® 8777 var end = str.lastIndexOf("\""); 8778 // 妿æ¾å°äºåå¼å·ï¼ä½¿ç¨substringæ¹æ³ï¼æªåä¸é´çå 容 8779 if (start != -1 && end != -1) { 8780 var url = str.substring(start + 1, end); // +1æ¯ä¸ºäºå»æåå¼å·æ¬èº« 8781 //console.log(url); // https://e-assets.gitee.com/gitee-community-web/_next/static/media/mini_app.2e6b6d93.jpg!/quality/100 8782 return url; 8783 } 8784 return str; 8785 } 8786 }, 8787 /*js translate.reset start*/ 8788 /* 8789 对翻è¯ç»æè¿è¡å¤åãæ¯å¦å½åç½é¡µæ¯ç®ä½ä¸æçï¼è¢«ç¿»è¯ä¸ºäºè±æï¼æ§è¡æ¤æ¹æ³å³å¯å¤å为ç½é¡µæ¬èº«ç®ä½ä¸æçç¶æï¼èæ éå¨éè¿å·æ°é¡µé¢æ¥å®ç° 8790 config å¯ä¸ä¼ ï¼åæ¯ç´æ¥æ¢å¤å°é»è®¤æªç¿»è¯åçç¶æã 8791 { 8792 selectLanguageRefreshRender:true, //æ¯å¦éæ°æ¸²æselectéæ©è¯è¨å°åå§æªç¿»è¯åçç¶æï¼é»è®¤ä¸è®¾ç½®åæ¯trueï¼è¿è¡éæ°æ¸²æ 8793 notTranslateTip:true //妿å½åæªæ§è¡è¿ç¿»è¯ï¼ç¶å触åç translate.reset() ï¼æ¯å¦å¨æ§å¶å°æå°å好æç¤ºï¼æç¤ºæªæ§è¡ç¿»è¯ï¼è¿åæä»¤å¿½ç¥ï¼ true忝æ£å¸¸æå°è¿ä¸ªæç¤ºï¼ false忝䏿å°è¿ä¸ªæç¤º 8794 } 8795 */ 8796 reset:function(config){ 8797 if(typeof(config) == 'undefined'){ 8798 config = {}; 8799 } 8800 if(typeof(config.selectLanguageRefreshRender) == 'undefined'){ 8801 config.selectLanguageRefreshRender = true; 8802 } 8803 if(typeof(config.notTranslateTip) == 'undefined'){ 8804 config.notTranslateTip = true; 8805 } 8806 8807 8808 /* 8809 for(var lang in translate.nodeQueue[lastUuid].list){ 8810 if (!translate.nodeQueue[lastUuid].list.hasOwnProperty(lang)) { 8811 continue; 8812 } 8813 //console.log(lang); 8814 8815 for(var hash in translate.nodeQueue[lastUuid].list[lang]){ 8816 if (!translate.nodeQueue[lastUuid].list[lang].hasOwnProperty(hash)) { 8817 continue; 8818 } 8819 var item = translate.nodeQueue[lastUuid].list[lang][hash]; 8820 //console.log(item); 8821 for(var index in item.nodes){ 8822 if (!item.nodes.hasOwnProperty(index)) { 8823 continue; 8824 } 8825 //console.log(item.nodes[index]); 8826 //item.nodes[index].node.nodeValue = item.original; 8827 var currentShow = translate.storage.get('hash_'+currentLanguage+'_'+hash
8827); //å½åæ¾ç¤ºåºæ¥çæåï¼ä¹å°±æ¯å·²ç»ç¿»è¯åçæå 8828 //console.log('hash_'+lang+'_'+hash+' -- '+currentShow); 8829 if(typeof(currentShow) == 'undefined'){ 8830 continue; 8831 } 8832 if(currentShow == null){ 8833 continue; 8834 } 8835 if(currentShow.length == 0){ 8836 continue; 8837 } 8838 // v3.16.5 é对gitee ç readme æ¥å ¥ä¼å 8839 if(typeof(item.nodes[index].node) == 'undefined'){ 8840 continue; 8841 } 8842 8843 var attribute = typeof(item.nodes[index].node.attribute) == 'undefined' ? null:item.nodes[index].node.attribute; 8844 var analyse = translate.element.nodeAnalyse.analyse(item.nodes[index].node, '', '', attribute); 8845 translate.element.nodeAnalyse.analyse(item.nodes[index].node, analyse.text, item.original, attribute); 8846 } 8847 } 8848 } 8849 8850 */ 8851 8852 //æ¸ é¤ translate.listener 8853 translate.listener.reset(); 8854 8855 //translate.temp_listenerStartInterval = undefined; //è®¾ç½®ä¸ºå°æªå¯å¨ 8856 translate.init_first_trigger_execute = undefined; //translate.init ç executeé©åï¼è®¾ç½®ä¸ºæªåå§åç¶æ 8857 8858 8859 /** 使ç¨åºäº translate.node çè¿å **/ 8860 for (let key of translate.node.data.keys()) { 8861 if (!translate.node.get(key) == null) { 8862 continue; 8863 } 8864 //for(var attr in translate.node.get(key)){ 8865 //if (!translate.node.get(key).hasOwnProperty(attr)) { 8866 // continue; 8867 //} 8868 8869 //var analyse = translate.element.nodeAnalyse.get(key,translate.node.get(key).attribute); 8870 if(typeof(translate.node.get(key).originalText) !== 'string'){ 8871 continue; 8872 } 8873 //translate.element.nodeAnalyse.analyse(key, analyse.text, translate.node.get(key).originalText, translate.node.get(key).attribute); 8874 8875 //æ æ³¨æ¤æ¬¡æ¹å¨æ¯æ translate.js 导è´ç -- è¿éå°±ä¸ç¨æ è®°äºï¼å 为å å·²ç»ç§»é¤äº translate.listener.observer çå¬ï¼æä»¥ä¸ä¼åçå¬å°è¿åçæä½äº 8876 8877 //æ¯å¦æ¯ inputã textarea ç value ï¼å¦ææ¯ 忝 true 8878 var isInputValue = false; 8879 if(typeof(translate.node.get(key).attribute) === 'string' && translate.node.get(key).attribute === 'value'){ 8880 //å¯è½æ¯input\textarea çvalue 8881 var nodename = translate.element.getNodeName(key).toLowerCase(); 8882 if(nodename === 'input' || nodename === 'textarea'){ 8883 key.value = translate.node.get(key).originalText; 8884 isInputValue = true; 8885 } 8886 } 8887 if(!isInputValue){ 8888 key.nodeValue = translate.node.get(key).originalText; 8889 } 8890 //} 8891 } 8892 8893 8894 //æ¸ é¤ node ä¸çè®°å½ 8895 if(translate.node.data != null){ 8896 translate.node.data.clear(); 8897 } 8898 8899 //æ¸ é¤ translate.nodeQueue çè®°å½ 8900 translate.nodeQueue = {}; 8901 8902 //æ¸ é¤ time çè®°å½ 8903 if(typeof(translate.time.execute.data) != 'undefined'){ 8904 translate.time.execute.data = {}; 8905 } 8906 8907 //æ¸ é¤è®¾ç½®storageä¸çç¿»è¯è³çè¯ç§ 8908 translate.storage.set('to', ''); 8909 translate.to = null; 8910 8911 //æ¸ é¤ææ¬ç¿»è¯è®°å½ 8912 if(translate.history.translateText.originalMap !== null){ 8913 translate.history.translateText.originalMap.clear(); 8914 } 8915 if(translate.history.translateText.resultMap !== null){ 8916 translate.history.translateText.resultMap.clear(); 8917 } 8918 8919 8920 //éæ°ç»å¶ select éæ©è¯è¨ 8921 if(config.selectLanguageRefreshRender){ 8922 translate.selectLanguageTag.refreshRender(); 8923 } 8924 8925 8926 //æ¸ é¤æ£å¨è¿è¡ç translate.execute() çæ§è¡ç¶æè®°å½ 8927 translate.state = 0; 8928 8929 }, 8930 /*js translate.reset end*/ 8931 8932 /*js translate.selectionTranslate start*/ 8933 /* 8934 åè¯ç¿»è¯ï¼é¼ æ å¨ç½é¡µä¸éä¸ä¸æ®µæåï¼ä¼èªå¨åºç°å¯¹åºç¿»è¯åçææ¬ 8935 æç½å https://gitee.com/huangguishen æä¾ã 8936 详ç»ä½¿ç¨è¯´æåè§ï¼http://translate.zvo.cn/41557.html 8937 */ 8938 selectionTranslate:{ 8939 selectionX:0, 8940 selectionY:0, 8941 callTranslate:function (event){ 8942 let curSelection = window.getSelection(); 8943 //ç¸ç认为没æåè¯ 8944 if (curSelection.anchorOffset == curSelection.focusOffset) return; 8945 let translateText = window.getSelection().toString(); 8946 8947 //è¿æéè¦è¿è¡éè¿APIæ¥å£è¿è¡ç¿»è¯çææ¬ï¼éè¦è°ç¨ç¿»è¯æ¥å£ 8948 if(typeof(translate.request.api.translate) != 'string' || translate.request.api.translate == null || translate.request.api.translate.length < 1){ 8949 //ç¨æ·å·²ç»è®¾ç½®äºä¸æç¿»è¯æ¥å£è¿è¡ç¿»è¯ 8950 translate.log('已设置äºä¸ä½¿ç¨ translate ç¿»è¯æ¥å£ï¼ç¿»è¯è¯·æ±è¢«é»æ¢'); 8951 return; 8952 } 8953 8954 //ç®åCopyåæä»£ç äº 8955 var url = translate.request.api.translate 8956 var data = { 8957 from:translate.language.getLocal(), 8958 to:translate.to, 8959 text:encodeURIComponent(JSON.stringify([translateText])) 8960 }; 8961 translate.request.post(url, data, function(responseData, requestData) { 8962 if (responseData.result != 1){ 8963 translate.log('translate.selectionTranslate network response error : '+responseData.info); 8964 return; 8965 }; 8966 let curTooltipEle = document.querySelector('#translateTooltip') 8967 curTooltipEle.innerText = responseData.text[0]; 8968 curTooltipEle.style.top =selectionY+20+"px"; 8969 curTooltipEle.style.left = selectionX+50+"px" ; 8970 curTooltipEle.style.display = ""; 8971 }, null); 8972 }, 8973 start:function () { 8974 //æ°å»ºä¸ä¸ªtooltipå ç´ èç¹ç¨äºæ¾ç¤ºç¿»è¯ 8975 let tooltipEle = document.createElement('span'); 8976 tooltipEle.innerText = ''; 8977 tooltipEle.setAttribute('id', 'translateTooltip'); 8978 tooltipEle.setAttribute('style', 'background-color:black;color:#fff;text-align:center;border-radius:6px;padding:5px;position:absolute;z-index:999;top:150%;left:50%; '); 8979 //æå ç´ èç¹æ·»å å°bodyå ç´ èç¹ä¸æä¸ºå ¶åèç¹ï¼
8979æ¾å¨bodyçç°æåèç¹çæå 8980 document.body.appendChild(tooltipEle); 8981 //çå¬é¼ æ æä¸äºä»¶ï¼ç¹å»èµ·å§ç¹ä½ç½®ä½ä¸ºæ¾ç¤ºç¿»è¯çä½ç½®ç¹ 8982 document.addEventListener('mousedown', (event)=>{ selectionX= event.pageX;selectionY= event.pageY ;}, false); 8983 //çå¬é¼ æ 弹起äºä»¶ï¼ä¾¿äºå¤ææ¯å¦å¤äºåè¯ 8984 document.addEventListener('mouseup', translate.selectionTranslate.callTranslate, false); 8985 //çå¬é¼ æ ç¹å»äºä»¶ï¼éètooltipï¼æ¤å¤å¯ä¼å 8986 document.addEventListener('click', (event)=>{ document.querySelector('#translateTooltip').style.display = "none"}, false); 8987 } 8988 }, 8989 /*js translate.selectionTranslate end*/ 8990 8991 /*js translate.enterprise start*/ 8992 /* 8993 ä¼ä¸çº§ç¿»è¯æå¡ 8994 注æï¼è¿ä¸ªä¼ä¸çº§ç¿»è¯ä¸çä¸å¨å¼æºå è´¹ä¹ä¸ï¼ä¼ä¸çº§ç¿»è¯æå¡è¿½æ±çæ¯é«ç¨³å®ï¼è¿ä¸ªæ¯æ¶è´¹çï¼è¯¦æ å¯åèï¼http://translate.zvo.cn/43262.html 8995 8996 */ 8997 enterprise:{ 8998 //é»è®¤ä¸å¯ç¨ä¼ä¸çº§ï¼é¤éè®¾ç½®äº translate.enterprise.use() è¿éæä¼åætrue 8999 isUse:false, 9000 use:function(){ 9001 translate.enterprise.isUse = true; //设置为使ç¨ä¼ä¸çº§ç¿»è¯æå¡ 9002 9003 //主èç¹é¢å¤æééä½ï¼æ´è¿½æ±ååºé度 9004 translate.request.speedDetectionControl.hostMasterNodeCutTime = 300; 9005 translate.request.api.host=['https://america-enterprise-api-translate.zvo.cn/','https://beijing.enterprise.api.translate.zvo.cn/','https://deutsch.enterprise.api.translate.zvo.cn/', 'https://america.api.translate.zvo.cn:666/', 'https://api.translate.zvo.cn:666/', 'https://api.translate.zvo.cn:888/']; 9006 9007 if(translate.service.name == 'client.edge'){ 9008 translate.service.name = 'translate.service'; 9009 translate.log('æ¨å·²å¯ç¨äºä¼ä¸çº§ç¿»è¯éé translate.enterprise.use(); (ææ¡£ï¼https://translate.zvo.cn/4087.html) , æä»¥æ¨è®¾ç½®ç translate.service.use(\'client.edge\'); (ææ¡£ï¼https://translate.zvo.cn/4081.html) å°å¤±æä¸èµ·ä½ç¨ï¼æä¼ä¸çº§ç¿»è¯ééå ¨é¨æ¥ç®¡ã'); 9010 return; 9011 } 9012 }, 9013 /* 9014 èªå¨éé ç¿»è¯æå¡ééï¼å¦æå½åææç½ç»èç¹åä¸å¯ç¨ï¼ä¼èªå¨åæ¢å° edge.client è¿è¡ä½¿ç¨ 9015 è¿ä¸ªä¼å¨ postè¯·æ± æ§è¡åå¼å§æ¶è¿è¡è§¦å 9016 */ 9017 automaticAdaptationService:function(){ 9018 if(!translate.enterprise.isUse){ 9019 return; 9020 } 9021 var hosts = translate.request.speedDetectionControl.getHostQueue(); 9022 //console.log(hosts); 9023 if(hosts.length > 0){ 9024 if(hosts[0].time + 1 > translate.request.speedDetectionControl.disableTime){ 9025 //ææèç¹é½å¤äºä¸å¯ç¨ç¶æï¼èªå¨åæ¢å° client.edge æ¨¡å¼ 9026 translate.service.name = 'client.edge'; 9027 } 9028 } 9029 }, 9030 /* ä¼ä¸çº§ç¿»è¯ééçkeyï¼ v3.12.3.20250107 å¢å ï¼é对æå æAPPçåºæ¯ */ 9031 key:'', 9032 }, 9033 /*js translate.enterprise end*/ 9034 9035 /* 9036 å¦æä½¿ç¨çæ¯ translate.service ç¿»è¯ééï¼é£ä¹ç¿»è¯åçè¯ç§ä¼èªå¨ä»¥å°åçæ¹å¼è¿è¡æ¾ç¤ºã 9037 å¦æä½ ä¸æ³å°ç¿»è¯åçææ¬å ¨é¨ä»¥å°åæ¾ç¤ºï¼èæ¯é¦åæ¯å¤§åï¼é£ä¹å¯ä»¥éè¿æ¤æ¹æ³è®¾ç½®ä¸ä¸ 9038 v3.8.0.20240828 å¢å 9039 ç®åæè§åºè¯¥ç¨ä¸å°ï¼æä»¥å å¿½ç¥ 9040 */ 9041 /* 9042 notConvertLowerCase:function(){ 9043 9044 }, 9045 */ 9046 9047 9048 /*js translate.progress start*/ 9049 /* 9050 ç¿»è¯æ§è¡çè¿å±ç¸å ³ 9051 æ¯å¦ï¼æµè§å¨æ¬å°ç¼å没æï¼éè¦èµ°APIæ¥å£çææ¬æå¨çå ç´ åºåï¼åºç° è®°è½½ä¸çå¨ç»èçï¼ç»ç¨æ·ä»¥å好çä½¿ç¨æç¤º 9052 */ 9053 progress:{ 9054 style: ` 9055 /* CSSé¨å */ 9056 /* ç°è²æ°´å¹³å è½½å¨ç» */ 9057 .translate_api_in_progress { 9058 position: relative; 9059 overflow: hidden; /* éèè¶ åºé¨åçå¨ç» */ 9060 } 9061 9062 /* èçå± */ 9063 .translate_api_in_progress::after { 9064 content: ''; 9065 position: absolute; 9066 top: 0; 9067 left: 0%; 9068 width: 100%; 9069 height: 100%; 9070 background: rgba(255, 255, 255, 1); /* åéæç½è²é®ç½© */ 9071 z-index: 2; 9072 } 9073 9074 /* æ°´å¹³å è½½æ¡å¨ç» */ 9075 .translate_api_in_progress::before { 9076 content: ''; 9077 position: absolute; 9078 top: 50%; 9079 left: 0%; 9080 width: 100%; 9081 height:100%; /* ç»çº¿é«åº¦ */ 9082 background: linear-gradient( 9083 90deg, 9084 transparent 0%, 9085 #e8e8e8 25%, /* æµ ç°è² */ 9086 #d0d0d0 50%, /* ä¸ç°è² */ 9087 #e8e8e8 75%, /* æµ ç°è² */ 9088 transparent 100% 9089 ); 9090 background-size: 200% 100%; 9091 animation: translate_api_in_progress_horizontal-loader 3.5s linear infinite; 9092 z-index: 3; 9093 transform: translateY(-50%); 9094 } 9095 9096 @keyframes translate_api_in_progress_horizontal-loader { 9097 0% { 9098 background-position: 200% 0;
9099 } 9100 100% { 9101 background-position: -200% 0; 9102 } 9103 } 9104 `, 9105 9106 /* 9107 éè¿ææ¬ç¿»è¯APIè¿è¡ç 9108 */ 9109 api:{ 9110 isTip:true,//æ¯å¦æ¾ç¤ºuiçæç¤ºï¼trueæ¾ç¤ºï¼false䏿¾ç¤º 9111 setUITip:function(tip){ 9112 translate.progress.api.isTip = tip; 9113 }, 9114 //ç§»é¤åå ç´ ï¼æ é级å«ï¼ä¸çææ class name çloading é®ç½© 9115 //level å±çº§ï¼æ°åï¼æ¯å¦ç¬¬ä¸æ¬¡è°ç¨ï¼ä¼ å ¥1ï¼ ç¬¬ä¸æ¬¡éé¢äº§ççç¬¬äºæ¬¡è°ç¨ï¼è¿éå°±æ¯2 9116 removeChildClass:function(node, level){ 9117 9118 //夿æ¯å¦æåå ç´ ï¼å¤æå ¶ä¸¤çº§åå ç´ ï¼æ¯å¦æå äºloadingé®ç½©äº 9119 var childNodes = node.childNodes; 9120 if(childNodes == null || typeof(childNodes) == 'undefined'){ 9121 9122 }else if(childNodes.length > 0){ 9123 for(var i = 0; i<childNodes.length; i++){ 9124 translate.progress.api.removeChildClass(childNodes[i], level+1); 9125 } 9126 } 9127 9128 if(level == 1){ 9129 //ç¬¬ä¸æ¬¡è°ç¨ï¼æ¯ä¸å 餿¬èº«çclass name 9130 return; 9131 } 9132 if(typeof(node) == 'undefined'){ 9133 return; 9134 } 9135 if(typeof(node.className) != 'string'){ 9136 return; 9137 } 9138 if(node.className.indexOf('translate_api_in_progress') < -1){ 9139 return; 9140 } 9141 node.className = node.className.replace(/translate_api_in_progress/g, ''); 9142 }, 9143 9144 /* 9145 config: å¯è®¾ç½®çä¸äºåæ° 9146 { 9147 maskLayerMinWidth:10.0 //å½ç¿»è¯æ¶ï¼éè¦è¯·æ±ç½ç»ï¼æ¤æ¶ç¿»è¯çææ¬ä¸ä¼åºç°é®ç½©å±æ¾ç¤ºä¸ä¸ªè¿è¡ä¸çå¨ç»ï¼è¿ä¸ªå¨ç»åºç°å¨çå ç´ ï¼æå°å®½åº¦æ¯å¤å°ã妿ä¸è®¾ç½®ï¼é»è®¤æ¯10ï¼ä¹å°±æ¯10åç´ ï¼ä¹å°±æ¯å½å ç´ å¤§äºçäº10åç´ æ¶ï¼æä¼å¨ä¸é¢æ¾ç¤ºè¿ä¸ªè¿è¡ä¸çå¨ç»ãèå°äº10åç´ å®½åº¦çå ç´ ï¼åæ¯ç©ºç½ä¸çä»ä¹ä¹ä¸æ¾ç¤ºã 宿¯æè®¾ç½®floatç±»åçå¼ 9148 } 9149 9150 9151 */ 9152 startUITip:function(config){ 9153 if(typeof(config) === 'undefined'){ 9154 config = {}; 9155 } 9156 if(typeof(config.maskLayerMinWidth) !== 'number'){ 9157 config.maskLayerMinWidth = 10; 9158 } 9159 9160 //å建éèæåç style 9161 var translatejsTextElementHidden = document.getElementById('translatejs-text-element-hidden'); 9162 if(typeof(translatejsTextElementHidden) == 'undefined' || translatejsTextElementHidden == null){ 9163 const style = document.createElement('style'); 9164 // 设置 style å ç´ çææ¬å å®¹ä¸ºè¦æ·»å ç CSS è§å 9165 style.textContent = ' .translatejs-text-element-hidden, .translatejs-text-element-hidden[type="text"]::placeholder{color: transparent !important; -webkit-text-fill-color: transparent !important; text-shadow: none !important;} '; 9166 style.id = 'translatejs-text-element-hidden'; 9167 // å° style å ç´ æå ¥å° head å ç´ ä¸ 9168 document.head.appendChild(style); 9169 } 9170 9171 // å建ä¸ä¸ª é®ç½©å±å è½½ä¸å¨ç»ç style å ç´ 9172 var translatejsMaskLayerAnimation = document.getElementById('translatejs-mask-layer-animation'); 9173 if(typeof(translatejsMaskLayerAnimation) == 'undefined' || translatejsMaskLayerAnimation == null){ 9174 const style = document.createElement('style'); 9175 // 设置 style å ç´ çææ¬å å®¹ä¸ºè¦æ·»å ç CSS è§å 9176 style.textContent = translate.progress.style; 9177 style.id = 'translatejs-mask-layer-animation'; 9178 // å° style å ç´ æå ¥å° head å ç´ ä¸ 9179 document.head.appendChild(style); 9180 } 9181 9182 9183 if(translate.progress.api.isTip){ 9184 //translate.listener.execute.renderStartByApi.push(function(uuid, from, to){ 9185 translate.lifecycle.execute.translateNetworkBefore.push(function(data){ 9186 var startTime = new Date().getTime(); 9187 9188 //ååºå½ååå¨çnodeï¼å¯¹åºçå ç´ 9189 var elements = translate.element.nodeToElement(data.nodes); 9190 //console.log(elements) 9191 9192 //éèæænodeçææ¬ 9193 for(var r = 0; r<elements.length; r++){ 9194 elements[r].className = elements[r].className+' translatejs-text-element-hidden'; 9195 } 9196 9197 var rects = translate.visual.getRects(elements); 9198 //console.log(rects) 9199 var rectsOneArray = translate.visual.rectsToOneArray(rects); 9200 9201 //æåº 9202 var sortRects = translate.visual.coordinateSort(rectsOneArray); 9203 //console.log(sortRects); 9204 9205 //è¿æ»¤ï¼æ¯å¦è¿æ»¤æå®½åº¦é常å°çï¼ä¸ç¶æ¾ç¤ºåºæ¥ä¼å¾ä¸ 9206 // 1. æ¶ééè¦å é¤ç䏿 9207 const indicesToRemove = []; 9208 for (let i = 0; i < sortRects.length; i++) { 9209 if (sortRects[i].width < config.maskLayerMinWidth) { 9210 indicesToRemove.push(i); 9211 } 9212 } 9213 // 2. ç§»é¤å®½åº¦æå°çrectså ç´ 9214 for(var di = indicesToRemove.length-1; di > -1; di--){ 9215 //console.log(sortRects[indicesToRemove[di]]); 9216 sortRects.splice(indicesToRemove[di], 1); 9217 } 9218 9219 //å»é¤ç©ºé´éå 9220 var spaceEORects = translate.visual.rectsSpaceEliminateOverlap(sortRects); 9221 //console.log('计ç®èæ¶ï¼'+(new Date().getTime() - startTime)); 9222 9223 //var rectLineSplit = translate.visual.filterRectsByLineInterval(spaceEORects.rects, 1); 9224 var rectLineSplit = spaceEORects.rects; 9225 //var rectLineSplit = sortRects; 9226 for(var r = 0; r<rectLineSplit.length; r++){ 9227 //夿è¿ä¸ªå ç´ çç¶çº§æ¯å¦å·²ç»æ·»å äºï¼å¯è½å卿£æµå°å¤ä¸ªæ¬å°è¯ç§ï¼ç¶åä¸æè½¬è±è¯åï¼ååºç°äºæ¥è¯è½¬è±è¯ã è¿éé¿å ç¬¬äºæ¬¡æ¥è¯è½¬è±è¯æ¶ï¼è·ç¬¬ä¸æ¬¡ä¸æè½¬è±è¯éå¤ï¼å¯¼è´åºç°æ ·å¼è¿æ¸¡å¨ç»çéå 9228 var parentNode = rectLineSplit[r].node.parentNode; 9229 if(typeof(parentNode) !== 'undefined' && typeof(parentNode.className) === 'string' && parentNode.className.indexOf('translate_api_in_progress') > -1){ 9230 //ä¸çº§å·²ç»æäºï¼é£ä¹å°±ä¸éè¦åå å¨ç»äº 9231 }else{ 9232 //ä¸çº§æ²¡æå ï¼é£ä¹è¿ä¸ªæè½èèå 9233 if(typeof(rectLineSplit[r].node.className) === 'string' && rectLineSplit[r].node.className.indexOf('translate_api_in_progress') > -1){ 9234 //å·²ç»åå¨äºï¼å°±ä¸ç»§ç»å äº 9235 }else{ 9236 rectLineSplit[r].node.className = rectLineSplit[r].node.className+' translate_api_in_progress'; 9237 } 9238 } 9239 } 9240 //console.log('计ç®+渲æèæ¶ï¼'+(new Date().getTime() - startTime)); 9241 });
9242 9243 translate.lifecycle.execute.translateNetworkAfter.push(function(data){ 9244 //ååºå½ååå¨çnodeï¼å¯¹åºçå ç´ 9245 var elements = translate.element.nodeToElement(data.nodes); 9246 9247 for(var r = 0; r<elements.length; r++){ 9248 if(typeof(elements[r].className) === 'string'){ 9249 if(elements[r].className.indexOf('translatejs-text-element-hidden') > -1){ 9250 elements[r].className = elements[r].className.replace(/translatejs-text-element-hidden/g, ''); 9251 } 9252 if(elements[r].className.indexOf('translate_api_in_progress') > -1){ 9253 elements[r].className = elements[r].className.replace(/translate_api_in_progress/g, ''); 9254 } 9255 } 9256 } 9257 9258 9259 }); 9260 9261 } 9262 } 9263 } 9264 }, 9265 /*js translate.progress end*/ 9266 9267 /*js dispose start*/ 9268 /* 9269 对js对象å çå¼è¿è¡ç¿»è¯,å¯ä»¥æ¯JSå®ä¹ç å¯¹è±¡ãæ°ç»ãçè³æ¯åä¸ªå ·ä½çå¼ 9270 */ 9271 js:{ 9272 9273 /* 9274 jsString ä¼ å ¥çjs对象çåç¬¦ä¸²æ ¼å¼ 9275 targetLanguage ç¿»è¯ä¸ºçç®æ è¯è¨ 9276 successFunction æ§è¡æåå触å,ä¼ å ¥æ ¼å¼ function(obj){ console.log(obj); } å ¶ä¸ obj æ¯ç¿»è¯ä¹åçç»æ 9277 failureFunction æ§è¡å¤±è´¥å触å,ä¼ å ¥æ ¼å¼ function(failureInfo){ console.log(failureInfo); } å ¶ä¸ failureInfo æ¯å¤±è´¥åå 9278 9279 示ä¾ï¼ 9280 9281 var str = ` 9282 { 9283 "hello":"ä½ å¥½", 9284 "word":"åè¯", 9285 "ä½ æ¯è°": [ 9286 "ä¸ç", 9287 "大海" 9288 ] 9289 } 9290 ` 9291 translate.js.transString(str,'english',function(obj){ console.log(obj); }, function(failureInfo){ console.log(failureInfo); }); 9292 9293 */ 9294 transString: function (jsString, targetLanguage, successFunction, failureFunction) { 9295 let jsObject; 9296 try{ 9297 jsObject = JSON.parse(jsString); 9298 }catch(e){ 9299 try{ 9300 jsObject = eval('(' + jsString + ')'); 9301 }catch(e){ 9302 translate.log(e) 9303 failureFunction(e); 9304 return; 9305 } 9306 } 9307 translate.js.transObject(jsObject, targetLanguage, successFunction, failureFunction); 9308 }, 9309 9310 /* 9311 jsObject ä¼ å ¥çjså¯¹è±¡ï¼æ¯æå¯¹è±¡ãæ°ç»ç 9312 targetLanguage ç¿»è¯ä¸ºçç®æ è¯è¨ 9313 successFunction æ§è¡æåå触å,ä¼ å ¥æ ¼å¼ function(obj){ console.log(obj); } å ¶ä¸ obj æ¯ç¿»è¯ä¹åçç»æ 9314 failureFunction æ§è¡å¤±è´¥å触å,ä¼ å ¥æ ¼å¼ function(failureInfo){ console.log(failureInfo); } å ¶ä¸ failureInfo æ¯å¤±è´¥åå 9315 9316 示ä¾ï¼ 9317 9318 var obj = { 9319 "hello":"ä½ å¥½", 9320 "word":"åè¯", 9321 "ä¸ç":["ä¸ç","大海"] 9322 }; 9323 translate.js.transObject(obj,'english',function(obj){ console.log(obj); }, function(failureInfo){ console.log(failureInfo); }); 9324 9325 */ 9326 transObject: function (jsObject, targetLanguage, successFunction, failureFunction) { 9327 let tj_find = translate.js.find(jsObject); 9328 let kvs = tj_find.stringResult; 9329 9330 /**** ç¬¬äºæ¥ï¼å°ææ¬å¼è¿è¡ç¿»è¯ ***/ 9331 //å å°å ¶ kvs çkey ååºæ¥ 9332 var texts = new Array(); 9333 for (const key in kvs) { 9334 texts.push(key); 9335 } 9336 9337 /* 9338 å®ä¸»è¦ç¨äºæååºæ¯ï¼å¦æä¸éè¦æåï¼å®ç¨ä¸å° 9339 䏿 对åºï¼ä¸é¢ texts çåå§ä¸æ è·æååç䏿 å¯¹åº 9340 key æ°æ°ç»ç䏿 9341 value 对象ï¼å å«: 9342 index: æ§æ°ç»ç䏿 9343 original: ç¿»è¯çåå§ææ¬ 9344 isSplit: æ¯å¦æ¯è¢«æåçï¼ trueæ¯ï¼false䏿¯ 9345 9346 */ 9347 var originalArrayIndexMap = new Array(); 9348 9349 var obj = { 9350 from:'auto', 9351 to: targetLanguage, 9352 texts: texts 9353 } 9354 9355 if(translate.ignore.text.length > 0){ //æè®¾ç½®å¿½ç¥ç¿»è¯çææ¬ 9356 var newTexts = new Array(); //æ°ç»åç 9357 9358 //ç»å split åå² 9359 var splitStrng = ''; 9360 for(var ig = 0; ig < translate.ignore.text.length; ig++){ 9361 if(translate.ignore.text[ig].trim().length == 0){ 9362 continue; 9363 } 9364 var ignoretext = translate.ignore.text[ig]; 9365 if(ignoretext.indexOf('.') > -1){ 9366 ignoretext = ignoretext.replaceAll(/\./g, "\\."); 9367 } 9368 if(ignoretext.indexOf('$') > -1){ 9369 ignoretext = ignoretext.replaceAll(/\$/g, "\\$"); 9370 } 9371 9372 if(splitStrng != ''){ 9373 splitStrng = splitStrng + '|'; 9374 } 9375 splitStrng = splitStrng + ignoretext; 9376 } 9377 var regex = new RegExp(splitStrng, 'g'); // å建æ£å表达å¼å¯¹è±¡ï¼æ·»å 'g'ä¿®é¥°ç¬¦è¡¨ç¤ºå ¨å±å¹é 9378 //console.log(regex); 9379 9380 for(var tai = 0; tai<texts.length; tai++){ 9381 9382 var isFind = false; //æ¯å¦åç°å¹é è¿è¡æåäºï¼trueæ¯ 9383 9384 //åç°äºå¿½ç¥ç¿»è¯çææ¬ï¼å°å ¶åç¬æ½ååºæ¥ï¼ä¸è¿è¡ç¿»è¯ 9385 //è¿è¡æå 9386 var splits = texts[tai].split(regex); 9387 if(splits.length > 1){ 9388 isFind = true; //æåäº 9389 for(var s = 0; s < splits.length; s++){ 9390 if(splits[s].length > 0){ 9391 newTexts.push(splits[s]); 9392 originalArrayIndexMap[newTexts.length-1] = { 9393 index:tai, 9394 original:splits[s], 9395 isSplit:true 9396 }; 9397 } 9398 } 9399 }else{ 9400 //没ææåï¼é£å°±åæ ·å å ¥ 9401 newTexts.push(texts[tai]); 9402 originalArrayIndexMap[newTexts.length-1] = { 9403 index:tai, 9404 original:texts[tai], 9405 isSplit:false 9406 }; 9407 } 9408 9409 } 9410 obj.texts = newTexts; 9411 } 9412 //console.log(originalArrayIndexMap); 9413 9414 translate.request.translateText(obj, function (data) { 9415 //æå°ç¿»è¯ç»æ 9416 //console.log(data); 9417 if(typeof(data.result) == 'undefined' || data.result == 0){ 9418 failureFunction('network connect failure'); 9419 return; 9420 } 9421 if(data.result == 0){ 9422 failureFunction(data.info); 9423 return; 9424 } 9425 9426 /**** ç¬¬ä¸æ¥ï¼å°ç¿»è¯ç»æèµäº jsObject ***/ 9427 var translatedTexts; //è·æåæååç texts 䏿 ä¸ä¸å¯¹åº 9428 9429 //夿æ¯å¦æè¿åå² 9430 if(translate.ignore.text.length > 0){ //æè¿åå²ï¼è¿è¡åå¹¶ 9431 translatedTexts = new Array(); 9432 9433 for(var i = 0; i < data.text.length; i++){ 9434 var originalTextIndex = originalArrayIndexMap[i].index; //æååå²åçåæ°ç»ä¸æ 9435 if(translatedTexts.length < originalTextIndex+1){ 9436 translatedTexts.push(texts[originalTextIndex]); 9437 } 9438 translatedTexts[originalTextIndex] = translate.util.textReplace(translatedTexts[originalTextIndex], originalArrayIndexMap[i].original, data.text[i], data.to); 9439 } 9440 }else{ 9441 translatedTexts = data.text; // ç´æ¥è·åç¿»è¯ç»ææ°ç»èµäº 9442 } 9443 9444 if (translatedTexts && translatedTexts.length === texts.length) {
9445 texts.forEach((originalText, index) => { 9446 const translatedText = translatedTexts[index]; // æ ¹æ®ç´¢å¼è·åç¿»è¯ç»æ 9447 const paths = kvs[originalText]; // è·åè¯¥ææ¬çè·¯å¾æ°ç» 9448 if (paths && paths.length > 0) { 9449 paths.forEach(path => { 9450 translate.js.setValueByPath(jsObject, path, translatedText); // æ´æ° jsObject 9451 }); 9452 } 9453 }); 9454 } else { 9455 console.error("ç¿»è¯ç»æé¿åº¦ä¸å¹é æä¸ºç©º"); 9456 } 9457 9458 if(Object.keys(tj_find.functionResult).length > 0){ 9459 for(var sf in tj_find.functionResult){ 9460 if (!tj_find.functionResult.hasOwnProperty(sf)) { 9461 continue; 9462 } 9463 translate.js.setValueByPath(jsObject, sf, tj_find.functionResult[sf]); // æ´æ° jsObject 9464 } 9465 } 9466 successFunction(jsObject); 9467 //console.log("ç¿»è¯åç jsObject:", jsObject); 9468 }); 9469 }, 9470 setValueByPath: function(obj, path, value){ 9471 const parts = path.replace(/\[(\d+)\]/g, '.$1').split('.'); 9472 let current = obj; 9473 for (let i = 0; i < parts.length - 1; i++) { 9474 current = current[parts[i]]; 9475 } 9476 current[parts[parts.length - 1]] = value; 9477 }, 9478 /* 9479 对js对象è¿è¡ç¿»è¯ 9480 obj: å¯ä»¥æ¯JSå®ä¹ç å¯¹è±¡ãæ°ç»ãçè³æ¯åä¸ªå ·ä½çå¼ 9481 9482 var obj = { 9483 "hello":"ä½ å¥½", 9484 "word":"åè¯", 9485 "ä¸ç":["ä¸ç","大海"] 9486 }; 9487 translate.js.find(obj); 9488 9489 è¿åå¼ï¼ 9490 { 9491 stringResult: 9492 functionResult: 9493 } 9494 9495 */ 9496 find: function (obj, parentKey = '') { 9497 let kvs = {}; //stringResult 9498 let frs = {}; //functionResult 9499 9500 if (typeof obj === 'object' && obj !== null) { 9501 if (Array.isArray(obj)) { 9502 obj.forEach((item, index) => { 9503 const currentKey = parentKey ? `${parentKey}[${index}]` : `[${index}]`; 9504 const tj_find = translate.js.find(item, currentKey); 9505 const subKvs = tj_find.stringResult; 9506 for (const [text, paths] of Object.entries(subKvs)) { 9507 if (!kvs[text]) { 9508 kvs[text] = []; 9509 } 9510 kvs[text] = kvs[text].concat(paths); 9511 } 9512 9513 const subFrs = tj_find.functionResult; 9514 for(var sf in subFrs){ 9515 if (!subFrs.hasOwnProperty(sf)) { 9516 continue; 9517 } 9518 frs[sf] = subFrs[sf]; 9519 } 9520 }); 9521 } else { 9522 9523 for (const key in obj) { 9524 const currentKey = parentKey ? `${parentKey}.${key}` : key; 9525 if (typeof obj[key] === 'object' && obj[key] !== null) { 9526 const tj_find = translate.js.find(obj[key], currentKey); 9527 const subKvs = tj_find.stringResult; 9528 for (const [text, paths] of Object.entries(subKvs)) { 9529 if (!kvs[text]) { 9530 kvs[text] = []; 9531 } 9532 kvs[text] = kvs[text].concat(paths); 9533 } 9534 const subFrs = tj_find.functionResult; 9535 for(var sf in subFrs){ 9536 if (!subFrs.hasOwnProperty(sf)) { 9537 continue; 9538 } 9539 frs[sf] = subFrs[sf]; 9540 } 9541 9542 } else if (typeof obj[key] === 'string') { 9543 if (typeof kvs[obj[key]] === 'undefined') { 9544 kvs[obj[key]] = []; 9545 } 9546 kvs[obj[key]].push(currentKey); 9547 }else if(typeof(obj[key]) == 'function'){ 9548 //valueæ¯ä¸ä¸ªæ¹æ³ï¼é£ä¹ä¹å°ä»è¿å 9549 frs[currentKey]=obj[key]; 9550 } 9551 } 9552 } 9553 } else if (typeof obj === 'string') { 9554 if (typeof kvs[obj] === 'undefined') { 9555 kvs[obj] = []; 9556 } 9557 kvs[obj].push(parentKey); 9558 } 9559 return { 9560 stringResult:kvs, 9561 functionResult:frs 9562 }; 9563 }, 9564 /* 9565 å° translate.js.transString æ§è¡ç»æç obj 对象 转å为 å符串è¾åº 9566 è¿ä¸ªå¯ä»¥ç´æ¥è¾åºå° textarea 䏿¾ç¤º 9567 9568 obj: js对象 9569 formatSupplementaryCharLength: 对è¿ä¸ªjs对象è¿è¡æ ¼å¼åèªå¨è¡¥å å符çé¿åº¦ï¼æ¯å¦ 2ã 4 9570 9571 2025.10.10 ä¼åä¼ å ¥åæ° 9572 obj:{ 9573 jsObject: 忬çobjåæ°ï¼ ä¹å°±æ¯js对象 9574 formatSupplementaryCharLength: 对è¿ä¸ªjs对象è¿è¡æ ¼å¼åèªå¨è¡¥å å符çé¿åº¦ï¼æ¯å¦ 2ã 4 ,é»è®¤ä¸è®¾ç½®åæ¯4 9575 functionBodyHandle: é坹弿¯function彿°ç±»åæ¶ï¼å¯ä»¥èªå®ä¹å¯¹å½æ°ä½çæºç è¿è¡å¤çï¼å®æ¯ä¼ å ¥ function ç±»åçï¼æ¯å¦ï¼ 9576 functionBodyHandle: function(functionBody){ 9577 functionBody = functionBody+'123'; 9578 return functionBody; 9579 } 9580 ä¼ å ¥å¼æ¯å½æ°ä½çstringç±»åçæºç å 容 9581 è¿å弿¯ä¿®æ¹è¿åææ°ç彿°ä½çstringç±»åçæºç å 容 9582 è¿æ¯ 2025.10.10 æ°å¢åæ°ï¼åºå¯¹layuiç i18n å ¨èªå¨ç¿»è¯å½æ°ä½ä¸çåç¬¦ä¸²ææ¬ 9583 } 9584 */ 9585 objToString:function(obj, formatSupplementaryCharLength){ 9586 if(typeof(obj) === 'object'){ 9587 if(typeof(obj.jsObject) === 'object'){ 9588 //æ¯ 2025.10.10 以åçæ°çæ¬ 9589 }else{ 9590 //æ¯ 2025.10.10 以åçæ§çæ¬ 9591 var newObj = { 9592 jsObject: obj 9593 } 9594 obj = newObj; 9595 } 9596 }else{ 9597 obj = {}; 9598 } 9599 if(typeof(formatSupplementaryCharLength) === 'number'){ 9600 obj.formatSupplementaryCharLength = formatSupplementaryCharLength; 9601 } 9602 //æªè®¾ç½®ï¼å°±èµäºé»è®¤å¼4 9603 if(typeof(obj.formatSupplementaryCharLength) !== 'number'){ 9604 obj.formatSupplementaryCharLength = 4; 9605 } 9606 9607 // èªå®ä¹replacer彿°ï¼å°å½æ°è½¬æ¢ä¸ºå符串 9608 let jsonStr = JSON.stringify(obj.jsObject, (key, value) => { 9609 if (typeof value === 'function') { 9610 // å°å½æ°è½¬æ¢ä¸ºå ¶æºä»£ç å符串 9611 var funcString = value.toString(); 9612 if(typeof(funcString) === 'string' && funcString.length > 0){ 9613 funcString = funcString.replace(/\n/g, '___TRANSLATEJS_LINE_BREAK___'); 9614 } 9615 return funcString; 9616 }else{ 9617 return value; 9618 } 9619 9620 return result; 9621 }, obj.formatSupplementaryCharLength); 9622 9623 9624 //对 function ç彿°ä½è¿è¡å¤ç 9625 // å°è½¬ä¹ç\næ¿æ¢ä¸ºå®é çæ¢è¡ç¬¦ -- 20251009 ä¼åï¼å»ææ¢è¡ç¬¦æ¿æ¢ï¼layui å·¥å ·ä¸åç°è¿æ ·ä¼å°åæ¬ææ¬ä¸çæ¢è¡ç¬¦æ¿æ¢æï¼èæ¯è°æ´ä¸ºä» ä» é对functionæ¹æ³è¿è¡éå¯¹æ¿æ¢ 9626 // éè¡å¤æï¼å¤æå ¶ä¸åªä¸è¡çvalueæ¯functionï¼è¦å°functionçåç¬¦ä¸²æ ¼å¼å为function彿°æ ¼å¼ 9627 if(jsonStr.indexOf('___TRANSLATEJS_LINE_BREAK___') > -1){ 9628 const lines = jsonStr.split('\n'); 9629 for(var li = 0; li<lines.length; li++){ 9630 // æ£æ¥å½åè¡æ¯å¦å å«ç¹å®æ è®° 9631 if (lines[li].includes('___TRANSLATEJS_LINE_BREAK___')) { 9632 lines[li] = lines[li].replace(/___TRANSLATEJS_LINE_BREAK___/g, '\n'); //å°å ¶æ¿æ¢ä¸ºåæ¬çæ¢è¡ç¬¦ 9633 9634 // æ¥æ¾å¼é¨åï¼åè®¾æ ¼å¼æ¯ "key": "function..."ï¼ 9635 const valueMatch = lines[li].match(/"[^"]+":\s*"([^"]+)"/); 9636 if (valueMatch && valueMatch[1]) { 9637 // æ¿æ¢æ¢è¡æ 记为å®é æ¢è¡ 9638 let functionStr = valueMatch[1].replace(/___TRANSLATEJS_LINE_BREAK___/g, '\n'); 9639 9640 // å°å½æ°å符串转æ¢ä¸ºå®é 彿° 9641 try { 9642 // 使ç¨Functionæé 彿°åå»ºå½æ°æ´å®å ¨ä¸ä
9642º 9643 const functionParts = functionStr.match(/function\s*([^\(]*)\(([^)]*)\)\s*\{([\s\S]*)\}/); 9644 9645 if (functionParts) { 9646 var [, name, params, body] = functionParts; 9647 if(typeof(obj.functionBodyHandle) === 'function'){ 9648 body = obj.functionBodyHandle(body); 9649 } 9650 // æ¿æ¢åè¡ä¸çåç¬¦ä¸²ä¸ºå½æ°è¡¨è¾¾å¼ 9651 lines[li] = lines[li].replace(`"${valueMatch[1]}"`, `function${name}(${params}){${body}}`); 9652 } 9653 } catch (e) { 9654 console.error('转æ¢å½æ°æ¶åºé:', e); 9655 } 9656 } 9657 } 9658 } 9659 jsonStr = lines.join('\n'); 9660 } 9661 9662 return jsonStr; 9663 } 9664 }, 9665 /*js dispose end*/ 9666 9667 /*js translate.network start*/ 9668 /* 9669 ç½ç»è¯·æ±æ°æ®æ¦æªå¹¶ç¿»è¯ 9670 å½ç¨æ·è§¦åajaxè¯·æ±æ¶ï¼å®å¯ä»¥é对ajax请æ±ä¸çæä¸ªåæ°ï¼è¿è¡è·åï¼å¹¶è¿è¡ç¿»è¯ï¼å°ç¿»è¯åçææ¬èµäºè¿ä¸ªåæ°ï¼ç¶ååæ¾å¼è¯·æ±ã 9671 9672 使ç¨åºæ¯å¦ï¼ 9673 æç´¢åºæ¯ï¼åæ¬æ¯ä¸æç页é¢ï¼ç¿»è¯ä¸ºè±æåï¼ç»ç¾å½äººä½¿ç¨ï¼ç¾å½äººä½¿ç¨æ¶ï¼è¿è¡æç´¢ï¼è¾å ¥çæ¯è±æï¼ç¶åç¹å»æç´¢æé®ï¼åèµ·æç´¢ã 9674 ç¶åæ¤ä¼æ¦æªç½ç»è¯·æ±ï¼å°è¯·æ±ä¸ç¨æ·è¾å ¥çæç´¢ææ¬çå 容æååºæ¥ï¼è¯å«å®è¾å ¥çæ¯ä¸æè¿æ¯è±æï¼å¦æä¸æ¯æ¬å°çè¯ç§ä¸æï¼é£å°±å°å ¶ç¿»è¯ä¸ºä¸æï¼ç¶ååèµäºæ¤è¯·æ±çè¿ä¸ªåæ°ä¸ï¼ç¶ååæ¾å¼è¿æ¬¡è¯·æ±ã 9675 è¿æ ·è¯·æ±çæ£å°è¾¾æå¡ç«¯æ¥å£æ¶ï¼æå¡ç«¯æ¥åå°çæç´¢çææ¬å 容å®é å°±æ¯ç¿»è¯åçä¸æææ¬ï¼è䏿¯ç¨æ·è¾å ¥çè±æææ¬ã 9676 9677 使¶èªå¨è¿è¡ç¿»è¯ï¼ 9678 1. å½åç¨æ·æ²¡æè¿è¡åæ¢è¯è¨ 9679 2. 忢è¯è¨äº,使¯è¾å ¥çææ¬çè¯è¨æ¯ä¸éè¦è¿è¡ç¿»è¯ç, è¾å ¥çææ¬æ¬èº«å°±æ¯æ¬å°çè¯è¨ 9680 è¿ä¸¤ç§æ åµé£å°±ä¸éè¦æ¦æªç¿»è¯ 9681 9682 9683 */ 9684 network: { 9685 // åå§æ¹æ³ä¿å 9686 originalOpen: XMLHttpRequest.prototype.open, 9687 originalSend: XMLHttpRequest.prototype.send, 9688 setRequestHeaderOriginal: XMLHttpRequest.prototype.setRequestHeader, 9689 9690 // è§åé ç½® 9691 rules: [ 9692 { 9693 url: /https:\/\/www\.guanleiming\.com\/a\/b\/.html/, 9694 methods: ['GET', 'POST'], 9695 params: ['a','b1'] 9696 } 9697 ], 9698 //æ ¹æ® å½å请æ±çurl è· method æ¥å¤æå½åè¯·æ±æ¯å¦ç¬¦åè§åï¼ 9699 //å¦æç¬¦åï¼åè¿å符åç rule è§åï¼ä¹å°±æ¯ translate.network.rules ä¸é ç½®çæä¸ªã 9700 //å¦ææ²¡ææ¾å°ç¬¦åçï¼åè¿å null 9701 getRuleMatch:function(url, method){ 9702 for (let i = 0; i < translate.network.rules.length; i++) { 9703 const rule = translate.network.rules[i]; 9704 9705 // æ£æ¥ URL æ¯å¦å¹é 9706 if(typeof(rule.url) == 'undefined' && rule.url == ''){ 9707 translate.log('WARINNG : translate.network.rule find url is null:'); 9708 translate.log(rule); 9709 continue; 9710 } 9711 //console.log(rule); 9712 const isUrlMatch = rule.url.test(url); 9713 if(!isUrlMatch){ 9714 continue; 9715 } 9716 9717 // æ£æ¥æ¹æ³æ¯å¦å¹é ï¼å¿½ç¥å¤§å°åï¼ 9718 const isMethodMatch = rule.methods.includes(method.toUpperCase()); 9719 if(!isMethodMatch){ 9720 continue; 9721 } 9722 9723 return rule; 9724 } 9725 9726 return null; 9727 }, 9728 use:function(){ 9729 // åºç¨Hook 9730 XMLHttpRequest.prototype.open = function(...args) { 9731 return translate.network.hookOpen.apply(this, args); 9732 }; 9733 9734 XMLHttpRequest.prototype.send = function(...args) { 9735 return translate.network.hookSend.apply(this, args); 9736 }; 9737 9738 // 嫿 setRequestHeader æ¹æ³ 9739 XMLHttpRequest.prototype.setRequestHeader = function(...args) { 9740 return translate.network.setRequestHeader.apply(this, args); 9741 }; 9742 9743 translate.network.fetch.use(); 9744 }, 9745 // ç§æå·¥å ·æ¹æ³ 9746 _translateText(text) { 9747 if(translate.language.getLocal() == translate.language.getCurrent() || (typeof(text) == 'string' && text.length > 0 && translate.language.recognition(text).languageName == translate.language.getLocal())){ 9748 /* 9749 1. 没æè¿è¡åæ¢è¯è¨ 9750 2. 忢è¯è¨äº,使¯è¾å ¥çææ¬çè¯è¨æ¯ä¸éè¦è¿è¡ç¿»è¯ç, è¾å ¥çææ¬æ¬èº«å°±æ¯æ¬å°çè¯è¨ 9751 9752 è¿ä¸¤ç§æ åµé£å°±ä¸éè¦æ¦æªç¿»è¯ 9753 */ 9754 9755 return new Promise((resolve, reject) => { 9756 const obj = { 9757 from: 'auto', 9758 to: translate.language.getLocal(), 9759 text: [text] 9760 }; 9761 9762 resolve(obj); 9763 }); 9764 }else{ 9765 //æè¿è¡åæ¢äºï¼é£è¿è¡ç¿»è¯ï¼å°å ¶ä»è¯ç§ç¿»è¯ä¸ºå½åçæ¬å°è¯ç§ 9766 return new Promise((resolve, reject) => { 9767 const obj = { 9768 from: 'auto', 9769 to: translate.language.getLocal(), 9770 texts: [text] 9771 }; 9772 9773 //console.log('ç¿»è¯è¯·æ±:', obj); 9774 translate.request.translateText(obj, function(data) { 9775 if (data.result === 1) { 9776 resolve(data); 9777 } else { 9778 reject(data); 9779 } 9780 }); 9781 }); 9782 } 9783 9784 }, 9785 //嫿 setRequestHeader 9786 setRequestHeader: function(header, value) { 9787 if (this._requestContext) { 9788 this._requestContext.headers = this._requestContext.headers || {}; 9789 this._requestContext.headers[header] = value; 9790 } 9791 9792 return translate.network.setRequestHeaderOriginal.call(this, header, value); 9793 }, 9794 // 请æ±å¤çå·¥å · 9795 RequestHandler: { 9796 async handleGet(url, rule) { 9797 //console.log(url); 9798 //console.log(rule); 9799 if(typeof(rule.params) == 'undefined' && typeof(rule.params.length) == 'undefined' && rule.params.length < 1){ 9800 translate.log('WARINNG: rule not find params , rule : '); 9801 translate.log(rule); 9802 rule.params = []; 9803 } 9804 9805 9806 try { 9807 const urlObj = new URL(url, window.location.origin); 9808 const params = urlObj.searchParams; 9809 //console.log(rule.params); 9810 9811 //for (const paramName in rule.params) { 9812 for(var p = 0; p < rule.params.length; p++){ 9813 var paramName = rule.params[p]; 9814 //console.log(paramName); 9815 if (params.has(paramName)) { 9816 const original = params.get(paramName); 9817 const translateResultData = await translate.network._translateText(original); 9818 9819 if(typeof(translateResultData) == 'undefined'){ 9820 translate.log('WARINNG: translateResultData is undefined'); 9821 }else if(typeof(translateResultData.result) == 'undefined'){ 9822 translate.log('WARINNG: translateResultData.result is undefined'); 9823 }else if(translateResultData.result != 1){ 9824 translate.log('WARINNG: translateResultData.result failure : '+translateResultData.info); 9825 }else{ 9826 params.set(paramName, decodeURIComponent(translateResultData.text[0])); 9827 } 9828 9829 } 9830 } 9831 9832 return urlObj.toString(); 9833 } catch (e) { 9834 console.warn('GETå¤ç失败:', e); 9835 return url; 9836 } 9837 }, 9838 9839 async handleForm(body, rule) { 9840 try { 9841 const params = new URLSearchParams(body); 9842 const modified = {...params}; 9843 9844 for (const paramName of rule.params) { 9845 if (params.has(paramName)) { 9846 const original = params.get(paramName); 9847 const translated = await translate.network._translateText(original); 9848 modified[paramName] = translated; 9849 } 9850 } 9851 9852 return new URLSearchParams(modified).toString(); 9853 } catch (e) { 9854 console.warn('表åå¤ç失败:', e); 9855 return body; 9856 } 9857 }, 9858 9859 async handleJson(body, rule) { 9860 try { 9861 const json = JSON.parse(body); 9862 const modified = {...json}; 9863 9864 for (const paramName of rule.params) { 9865 if (modified.hasOwnProperty(paramName)) { 9866 const original = modified[paramName]; 9867 modified[paramName] = await translate.network._translateText(original); 9868 } 9869 } 9870 9871 return JSON.stringify(modified);
9872 } catch (e) { 9873 console.warn('JSONå¤ç失败:', e); 9874 return body; 9875 } 9876 } 9877 }, 9878 9879 // 请æ±ä¸ä¸æç®¡ç 9880 _requestContext: null, 9881 9882 9883 9884 // Hook open æ¹æ³ 9885 hookOpen(method, url, async, user, password) { 9886 let matchedRule = null; 9887 this._requestContext = { 9888 method: method.toUpperCase(), 9889 originalUrl: url, 9890 async: async, 9891 user: user, 9892 password: password, 9893 matchedRule: translate.network.getRuleMatch(url, method) 9894 }; 9895 9896 return translate.network.originalOpen.call(this, method, url, async, user, password); 9897 }, 9898 9899 // Hook send æ¹æ³ 9900 hookSend(body) { 9901 const ctx = this._requestContext; 9902 if (!ctx || !ctx.matchedRule) { 9903 return translate.network.originalSend.call(this, body); 9904 } 9905 9906 const processRequest = async () => { 9907 let modifiedBody = body; 9908 const method = ctx.method; 9909 9910 try { 9911 // å¤çGETè¯·æ± 9912 //if (method === 'GET') { 9913 const newUrl = await translate.network.RequestHandler.handleGet(ctx.originalUrl, ctx.matchedRule); 9914 translate.network.originalOpen.call(this, method, newUrl, ctx.async, ctx.user, ctx.password); 9915 //} 9916 9917 // æ¢å¤è¯·æ±å¤´ 9918 if (ctx.headers) { 9919 for (const header in ctx.headers) { 9920 translate.network.setRequestHeaderOriginal.call(this, header, ctx.headers[header]); 9921 } 9922 } 9923 9924 // å¤çPOSTè¯·æ± 9925 if (method === 'POST') { 9926 if(typeof(body) != 'undefined' && body != null && body.length < 2000){ 9927 var isJsonBody = false; //æ¯å¦æ¯jsonæ ¼å¼çæ°æ®ï¼æ¯å¦jsonå·²ç»å¤çäºï¼ true æ¯ 9928 if(body.trim().indexOf('[') == 0 || body.trim().indexOf('{') == 0){ 9929 //å¯è½æ¯json 9930 try{ 9931 modifiedBody = await translate.network.RequestHandler.handleJson(body, ctx.matchedRule); 9932 isJsonBody = true; 9933 }catch(je){ 9934 isJsonBody = false; 9935 } 9936 } 9937 if(!isJsonBody){ 9938 try{ 9939 modifiedBody = await translate.network.RequestHandler.handleForm(body, ctx.matchedRule); 9940 }catch(je){ 9941 } 9942 } 9943 } 9944 } 9945 } catch (e) { 9946 console.warn('请æ±å¤çå¼å¸¸:', e); 9947 } 9948 9949 translate.network.originalSend.call(this, modifiedBody); 9950 }; 9951 9952 // 弿¥å¤ç 9953 if (ctx.async !== false) { 9954 processRequest.call(this); 9955 } else { 9956 console.warn('åæ¥è¯·æ±ä¸æ¯æç¿»è¯æ¦æª'); 9957 translate.network.originalSend.call(this, body); 9958 } 9959 }, 9960 //fetchè¯·æ± 9961 fetch:{ 9962 originalFetch: window.fetch, 9963 9964 // ä¿ååå§ fetch æ¹æ³ 9965 use: function () { 9966 const self = this; 9967 window.fetch = function (...args) { 9968 return self.hookFetch.apply(self, args); 9969 }; 9970 }, 9971 9972 // æ¦æª fetch è¯·æ± 9973 hookFetch: async function (input, init) { 9974 const request = new Request(input, init); 9975 const url = request.url; 9976 const method = request.method; 9977 9978 // è·åå¹é è§å 9979 const rule = translate.network.getRuleMatch(url, method); 9980 if (!rule) { 9981 return this.originalFetch.call(window, request); 9982 } 9983 9984 // åå§å请æ±ä¸ä¸æ 9985 const ctx = { 9986 method, 9987 url, 9988 headers: {}, 9989 rule, 9990 isModified: false 9991 }; 9992 9993 // ä¿å请æ±å¤´ 9994 request.headers.forEach((value, key) => { 9995 ctx.headers[key] = value; 9996 }); 9997 9998 this._requestContext = ctx; 9999
10000 try { 10001 const newUrl = await translate.network.RequestHandler.handleGet(url, rule); 10002 // å¤ç GET è¯·æ± 10003 if (method === 'GET') { 10004 10005 const newRequest = new Request(newUrl, { 10006 method, 10007 headers: new Headers(ctx.headers), 10008 mode: request.mode, 10009 credentials: request.credentials, 10010 cache: request.cache, 10011 redirect: request.redirect, 10012 referrer: request.referrer, 10013 referrerPolicy: request.referrerPolicy 10014 }); 10015 return this.originalFetch.call(window, newRequest); 10016 } 10017 10018 // å¤ç POST è¯·æ± 10019 if (method === 'POST') { 10020 let body = null; 10021 if (request.body) { 10022 body = await request.clone().text(); 10023 } 10024 10025 const contentType = request.headers.get('Content-Type'); 10026 let modifiedBody = body; 10027 10028 if(typeof(body) != 'undefined' && body != null && body.length < 2000){ 10029 var isJsonBody = false; //æ¯å¦æ¯jsonæ ¼å¼çæ°æ®ï¼æ¯å¦jsonå·²ç»å¤çäºï¼ true æ¯ 10030 if(body.trim().indexOf('[') == 0 || body.trim().indexOf('{') == 0){ 10031 //å¯è½æ¯json 10032 try{ 10033 modifiedBody = await translate.network.RequestHandler.handleJson(body, rule); 10034 isJsonBody = true; 10035 }catch(je){ 10036 isJsonBody = false; 10037 } 10038 } 10039 if(!isJsonBody){ 10040 try{ 10041 modifiedBody = await translate.network.RequestHandler.handleForm(body, rule); 10042 }catch(je){ 10043 } 10044 } 10045 } 10046 10047 const newRequest = new Request(newUrl, { 10048 method, 10049 headers: new Headers(ctx.headers), 10050 body: modifiedBody, 10051 mode: request.mode, 10052 credentials: request.credentials, 10053 cache: request.cache, 10054 redirect: request.redirect, 10055 referrer: request.referrer, 10056 referrerPolicy: request.referrerPolicy 10057 }); 10058 10059 return this.originalFetch.call(window, newRequest); 10060 } 10061 10062 // å ¶ä»æ¹æ³ç´æ¥è¿ååå§è¯·æ± 10063 return this.originalFetch.call(window, request); 10064 } catch (e) { 10065 console.warn('fetch 请æ±å¤çå¼å¸¸:', e); 10066 return this.originalFetch.call(window, request); 10067 } 10068 }, 10069 // 请æ±ä¸ä¸æç®¡ç 10070 _requestContext: null 10071 10072 } 10073 }, 10074 10075 /*js translate.network end*/ 10076 10077 10078 /*js translate.visual start*/ 10079 /* 10080 äººç¼æçå°ç纯è§è§å±çå¤ç 10081 */ 10082 visual: { 10083 /** 10084 * è·åä¸ç»èç¹çè§è§ç©å½¢ä¿¡æ¯ 10085 * @param nodes - èç¹æ°ç»ï¼æ ¼å¼å¦ ï¼ 10086 * [node1,node2,node3] 10087 * @returns è¿åçæ¯äºç»´æ°ç»ï¼å ¶ä¸ç¬¬ä¸ç»´åº¦è·è¾å ¥ç nodes 䏿 ä¸ä¸å¯¹åºã 10088 * å ¶ä¸ç¬¬äºç»´åº¦ï¼æ¯åºå¯¹æ¢è¡çæ åµãæ¯å¦ node1 æ²¡ææ¢è¡ï¼é£ç¬¬äºç»´åº¦å°±åªæä¸ä¸ª 10089 * node2 ææ¢è¡ï¼æä¸è¡ï¼é£ä¹ç¬¬äºç»´åº¦å°±æä¸ä¸ªï¼æ¯è¡ä¸ä¸ªã è¿ä¸ªä¹æ¯æ¯è¡é½æä¸ä¸ª å¼å§åæ (x,y)ãç»æåæ (x,y) 10090 * 10091 */ 10092 getRects:function(nodes){ 10093 /* 10094 10095 return nodes.map(node => { 10096 if (!node) return null; 10097 10098 let rect; 10099 if (node.nodeType === Node.TEXT_NODE) { 10100 const range = document.createRange(); 10101 range.selectNodeContents(node); 10102 const rects = range.getClientRects(); 10103 //console.log(rect); 10104 rect = rects.length > 0 ? rects[0] : null; 10105 } else if (node.nodeType === Node.ELEMENT_NODE) { 10106 rect = node.getBoundingClientRect(); 10107 } 10108 10109 return rect ? { 10110 node, 10111 left: rect.left, 10112 top: rect.top, 10113 right: rect.right, 10114 bottom: rect.bottom, 10115 width: rect.width, 10116 height: rect.height 10117 } : null; 10118 }); 10119 */ 10120 10121 return nodes.map(node => { 10122 if (!node) return []; // èç¹ä¸å卿¶è¿å空æ°ç» 10123 10124 let rects = []; 10125 if (node.nodeType === Node.TEXT_NODE) { 10126 // å¤çææ¬èç¹ï¼è·åææè¡çç©å½¢ 10127 const range = document.createRange(); 10128 range.selectNodeContents(node); 10129 const clientRects = range.getClientRects(); 10130 // 转æ¢ä¸ºæ°ç»å¹¶å¤çæ¯ä¸ªè¡ç©å½¢ 10131 rects = Array.from(clientRects).map(rect => ({ 10132 node, 10133 left: rect.left, 10134 top: rect.top, 10135 right: rect.right, 10136 bottom: rect.bottom, 10137 width: rect.width, 10138 height: rect.height, 10139 lineIndex: Array.from(clientRects).indexOf(rect) // å¢å è¡ç´¢å¼ï¼æ¹ä¾¿åºå第å è¡ 10140 })); 10141 } else if (node.nodeType === Node.ELEMENT_NODE) { 10142 // å¤çå ç´ èç¹ï¼è·åå ç´ æ´ä½ç©å½¢ï¼ä¿æåæé»è¾ï¼
10143 const rect = node.getBoundingClientRect(); 10144 rects = rect ? [{ 10145 node, 10146 left: rect.left, 10147 top: rect.top, 10148 right: rect.right, 10149 bottom: rect.bottom, 10150 width: rect.width, 10151 height: rect.height 10152 }] : []; 10153 } 10154 10155 return rects; 10156 }); 10157 }, 10158 /** 10159 * å° translate.visual.getRects è·åå°çäºç»´åæ æ°æ®è½¬ä¸ºä¸ç»´åæ 10160 */ 10161 rectsToOneArray:function(rects){ 10162 // å° reacts äºç»´æ°ç»è½¬å为 ä¸ç»´æ°ç»ï¼ä»¥ä¾¿å¯¹ä¸ç»´æ°ç»è¿è¡æåº 10163 var oneArrayRects = new Array(); 10164 for(var r = 0; r < rects.length; r++){ 10165 for(var twoR = 0; twoR < rects[r].length; twoR++){ 10166 oneArrayRects.push(rects[r][twoR]); 10167 } 10168 } 10169 return oneArrayRects; 10170 }, 10171 /** 10172 * æè¡é´éçérectsæ°ç»ä¸çèç¹ 10173 * @param rects ä¸ç»´çç©å½¢ä¿¡æ¯æ°ç»ï¼å å«nodeååæ ä¿¡æ¯ï¼ï¼ä¹å°±æ¯ translate.visual.rectsToOneArray(translate.visual.getRects(nodes)); åå¾çä¿¡æ¯ãå®å¹¶ä¸éè¦æåæåº 10174 * @param line - é´éè¡æ°ï¼1表示æ¯è¡é½åï¼2表示éä¸è¡åä¸ä¸ªï¼3表示é2è¡åä¸ä¸ªï¼ä»¥æ¤ç±»æ¨ 10175 * @returns çéåçç©å½¢ä¿¡æ¯æ°ç»ï¼å¹¶æç § top ç弿å°å¾å¤§æåº 10176 */ 10177 filterRectsByLineInterval:function(rects, line) { 10178 // éªè¯è¾å ¥ 10179 if (!Array.isArray(rects) || typeof line !== 'number' || line < 1) { 10180 console.error('è¾å ¥åæ°æ æï¼è¯·ç¡®ä¿rectsæ¯æ°ç»ä¸lineæ¯å¤§äº0çæ°å'); 10181 return []; 10182 } 10183 10184 // 1. å å¤çææç©å½¢ï¼è®¡ç®æ¯è¡çåºå线ï¼ä½¿ç¨topä½ä¸ºä¸»è¦ä¾æ®ï¼ 10185 // 为æ¯ä¸ªç©å½¢æ·»å è¡æ è¯ä¸´æ¶å±æ§ 10186 const processedRects = rects.map(rect => { 10187 if (!rect || rect.top === undefined) { 10188 return null; // è¿æ»¤æ æç©å½¢ 10189 } 10190 return { 10191 ...rect, 10192 // 计ç®è¡åºåï¼ä½¿ç¨topçæ´æ°é¨åï¼å¤çå¯è½çæµ®ç¹ç²¾åº¦é®é¢ï¼ 10193 rowBase: Math.round(rect.top) 10194 }; 10195 }).filter(Boolean); // ç§»é¤nullå¼ 10196 10197 // 2. æè¡åºååç»ï¼å®å ¨ç¸åçrowBaseå±äºåä¸è¡ï¼ 10198 const rowMap = new Map(); 10199 processedRects.forEach(rect => { 10200 const key = rect.rowBase; 10201 if (!rowMap.has(key)) { 10202 rowMap.set(key, []); 10203 } 10204 rowMap.get(key).push(rect); 10205 }); 10206 10207 // 3. å°Map转æ¢ä¸ºæ°ç»å¹¶æè¡åºåæåºï¼ç¡®ä¿ä»ä¸å°ä¸ç顺åºï¼ 10208 const lineGroups = Array.from(rowMap.entries()) 10209 .sort((a, b) => a[0] - b[0]) // æè¡åºåååºæåº 10210 .map(entry => entry[1]); // æåæ¯ç»çç©å½¢æ°ç» 10211 10212 // 4. æé´éè¡æ°çéè¡ç»ï¼å¹¶åªä¿çæ¯è¡ç第ä¸ä¸ªå ç´ 10213 const filtered = []; 10214 lineGroups.forEach((group, index) => { 10215 if (index % line === 0 && group.length > 0) { 10216 // ä¿çæ¯è¡ç第ä¸ä¸ªå ç´ 10217 filtered.push(group[0]); 10218 } 10219 }); 10220 10221 // è°è¯ï¼æå°ææè¡ç»çåºåå¼åæ°éï¼æ¹ä¾¿éªè¯ 10222 /* 10223 console.log('è¡åç»åºå䏿°é:', lineGroups.map((g, i) => ({ 10224 rowBase: g[0].rowBase, 10225 top: g[0].top, 10226 count: g.length, 10227 isSelected: i % line === 0 // æ¯å¦è¢«éä¸ 10228 }))); 10229 */ 10230 10231 return filtered; 10232 }, 10233 /* 10234 å¯¹ä¼ å ¥ç rects è¿è¡éå è¯å«æé¤ï¼å°éå çãä¸é¢ç§¯å°çå æã 10235 说æï¼ 10236 * - 认为âéå âå¿ é¡»å¨æ°´å¹³ååç´ä¸¤ä¸ªæ¹ååä¸¥æ ¼äº¤åï¼äº¤åçä½ç½®æ¯å¦æ°´å¹³æåç´äº§çäº2个åç´ æè¶ è¿2个åç´ çéå ï¼ä¹å°±æ¯é¢ç§¯ä¸å®é ä¸å·²ç»éå äºã 10237 * æä»¥å¦æä¸¤ä¸ªç©å½¢ä» å¨è¾¹çä¸ç¸æ¥ï¼ä¾å¦ a.bottom === b.top æ a.right === b.leftï¼åä¸è§ä¸ºéå ï¼çè³ç¨å¾®éå ä¸è¶ è¿2åç´ ä¹ä¸è§ä¸ºéå ï¼ ä¸ä¼å é¤ä»»ä½ä¸æ¹ã 10238 * - å³å®ä¿çåªä¸ä¸ªï¼ä¿çé¢ç§¯æ´å¤§çç©å½¢ï¼è¥é¢ç§¯ç¸çï¼åä¿ç卿åºä¸å åºç°çé£ä¸ªï¼ç¡®å®æ§ï¼ã 10239 * - æ§è½ä¼åï¼å æ left ååºæåºï¼æ¯è¾æ¶åªä¸é£äº left < current.right çåç»ç©å½¢æ¯è¾ï¼åªæï¼ã 10240 * - ä¸ååå° spliceï¼é¿å O(n^2) çç§»å¨å¼éï¼ï¼èæ¯ç¨å¸å°æ è®° removed[]ï¼æåéå»ºç»ææ°ç»ã 10241 10242 @param rects ä¸ç»´çç©å½¢ä¿¡æ¯æ°ç»ï¼å å«nodeååæ ä¿¡æ¯ï¼ï¼æ¯å¦ translate.visual.coordinateSort(rects); æåºååå¾çä¿¡æ¯ã 10243 è¾å ¥: rects: [{left, top, right, bottom}, ...] 10244 @return è¿åæé¤éå çåæ æ°ç»ã 10245 { 10246 rects: ä¿ççä¸äºç¸è¦ççç©å½¢æ°ç», 10247 removes: rectsä¸è¢«ç§»é¤çç©å½¢æ°ç» 10248 } 10249 10250 */ 10251 rectsSpaceEliminateOverlap: function (inputRects) { 10252 if (!Array.isArray(inputRects) || inputRects.length === 0){ 10253 return { rects: [], removes: [] }; 10254 } 10255 10256 const pixelThreshold = 2; 10257 const EPS = 1e-6; 10258 10259 const areaOf = r => 10260 Math.max(0, r.right - r.left) * Math.max(0, r.bottom - r.top); 10261 10262 const intersectionWH = (a, b) => ({ 10263 w: Math.min(a.right, b.right) - Math.max(a.left, b.left), 10264 h: Math.min(a.bottom, b.bottom) - Math.max(a.top, b.top) 10265 }); 10266 10267 const rectsWithIndex = inputRects.map((r, idx) => { 10268 let { left, top, right, bottom } = r; 10269 if (right < left){ 10270 [left, right] = [right, left]; 10271 } 10272 if (bottom < top){ 10273 [top, bottom] = [bottom, top] 10274 }; 10275 return { r: { left, top, right, bottom }, idx }; 10276 }); 10277 10278 rectsWithIndex.sort((A, B) => { 10279 if (Math.abs(A.r.left - B.r.left) > EPS){ 10280 return A.r.left - B.r.left; 10281 } 10282 if (Math.abs(A.r.top - B.r.top) > EPS){ 10283 return A.r.top - B.r.top; 10284 } 10285 if (Math.abs(A.r.right - B.r.right) > EPS){ 10286 return A.r.right - B.r.right; 10287 } 10288 return A.r.bottom - B.r.bottom; 10289 }); 10290 10291 const n = rectsWithIndex.length;
10292 const removed = new Array(n).fill(false); 10293 const areas = rectsWithIndex.map(x => areaOf(x.r)); 10294 10295 for (let i = 0; i < n; i++) { 10296 if (removed[i]) { 10297 continue; 10298 } 10299 const Ai = rectsWithIndex[i].r; 10300 const Ai_area = areas[i]; 10301 10302 for (let j = i + 1; j < n; j++) { 10303 if (removed[j]) { 10304 continue; 10305 } 10306 const Bj = rectsWithIndex[j].r; 10307 10308 // ---- ä¼å æ£æµå å«ï¼å 使¹å¼ï¼å¸¦éå¼ï¼ 10309 const A_contains_B = 10310 Ai.left <= Bj.left + pixelThreshold && 10311 Ai.top <= Bj.top + pixelThreshold && 10312 Ai.right >= Bj.right - pixelThreshold && 10313 Ai.bottom >= Bj.bottom - pixelThreshold; 10314 10315 const B_contains_A = 10316 Bj.left <= Ai.left + pixelThreshold && 10317 Bj.top <= Ai.top + pixelThreshold && 10318 Bj.right >= Ai.right - pixelThreshold && 10319 Bj.bottom >= Ai.bottom - pixelThreshold; 10320 10321 if (A_contains_B || B_contains_A) { 10322 if (A_contains_B && !B_contains_A) { 10323 removed[j] = true; 10324 continue; 10325 } 10326 if (B_contains_A && !A_contains_B) { 10327 removed[i] = true; 10328 break; 10329 } 10330 // åå å«ï¼å ä¹éåï¼æé¢ç§¯æé¡ºåº 10331 const Bj_area = areas[j]; 10332 if (Ai_area >= Bj_area){ 10333 removed[j] = true; 10334 }else { 10335 removed[i] = true; 10336 break; 10337 } 10338 } 10339 10340 // ---- åªæ ---- 10341 if (Bj.left >= Ai.right - EPS){ 10342 break; 10343 } 10344 10345 // ---- æ£æ¥æ®ééå ---- 10346 const { w, h } = intersectionWH(Ai, Bj); 10347 if (w <= pixelThreshold || h <= pixelThreshold){ 10348 continue 10349 }; 10350 10351 const Bj_area = areas[j]; 10352 if (Ai_area > Bj_area){ 10353 removed[j] = true; 10354 }else if (Bj_area > Ai_area) { 10355 removed[i] = true; 10356 break; 10357 } else { 10358 removed[j] = true; 10359 } 10360 } 10361 } 10362 10363 const keeps = [], removes = []; 10364 const sortedToOrig = rectsWithIndex.map(x => x.idx); 10365 const origToSorted = new Map(); 10366 for (let p = 0; p < n; p++){ 10367 origToSorted.set(sortedToOrig[p], p); 10368 } 10369 for (let origIdx = 0; origIdx < inputRects.length; origIdx++) { 10370 const pos = origToSorted.get(origIdx); 10371 if (pos === undefined || !removed[pos]) { 10372 keeps.push(inputRects[origIdx]); 10373 }else{ 10374 removes.push(inputRects[origIdx]); 10375 } 10376 } 10377 10378 return { rects: keeps, removes }; 10379 }, 10380 10381 /* 10382 对ä¸ç»åæ è¿è¡æåº 10383 æå¼å§åæ ä»å·¦å°å³ãä»ä¸å°ä¸æåº 10384 @param rects translate.visual.getRectsè·åå°çåæ æ°æ® 10385 */ 10386 coordinateSort:function(rects){ 10387 // æä»å·¦å°å³ãä»ä¸å°ä¸æåº 10388 const sortedRects = rects 10389 .filter(rect => rect !== null) 10390 .sort((a, b) => { 10391 if (Math.abs(a.top - b.top) < 5) { // åä¸è¡ 10392 return a.left - b.left; 10393 } 10394 return a.top - b.top; 10395 }); 10396 return sortedRects; 10397 }, 10398 10399 /** 10400 * æ¥æ¾å·¦å³ç´§é»çç©å½¢å¯¹ 10401 * @param rects translate.visual.getRects è·åå°çåæ æ°æ®ï¼è½¬å为 ä¸ç»´æ°ç» åä¼ å ¥ 10402 * @returns {Array<{before: Object, after: Object}>} - å·¦å³ç´§é»çç©å½¢å¯¹æ°ç» 10403 */ 10404 afterAdjacent:function(rects){ 10405 //è¿è¡ä»å·¦å°å³-ä»ä¸å°ä¸è¿è¡æåº 10406 var sortedRects = translate.visual.coordinateSort(rects); 10407 10408 const adjacentPairs = []; 10409 //æè¡åç»çç©å½¢ 10410 const lineGroups = translate.visual.groupRectsByLine(sortedRects); 10411 10412 // æ£æ¥æ¯è¡ä¸çææç´§é»å ç´ å¯¹ 10413 lineGroups.forEach(line => { 10414 for (let i = 0; i < line.length; i++) { 10415 for (let j = i + 1; j < line.length; j++) { 10416 const prev = line[i]; 10417 const next = line[j]; 10418 10419 // 妿åç»å ç´ ä¸å½åå ç´ ä¸ç´§é»ï¼ååç»å ¶ä»å ç´ ä¹ä¸å¯è½ç´§é» 10420 if (!translate.visual.areHorizontallyAdjacent(prev, next)) { 10421 break; 10422 } 10423 10424 adjacentPairs.push({ before: prev, after: next }); 10425 } 10426 } 10427 }); 10428 10429 return adjacentPairs; 10430 }, 10431 /** 10432 * æè¡åç»ç©å½¢ 10433 * @param rects - æåºåçç©å½¢æ°ç» @param rects translate.visual.coordinateSort è·åå°çåæ æ°æ® 10434 * @returns {Object[][]} - æè¡åç»çç©å½¢ 10435 */ 10436 groupRectsByLine:function(rects){
10437 const lineGroups = []; 10438 let currentLine = []; 10439 10440 rects.forEach(rect => { 10441 if (currentLine.length === 0) { 10442 currentLine.push(rect); 10443 } else { 10444 const lastRect = currentLine[currentLine.length - 1]; 10445 // 妿å¨åä¸è¡ï¼åæ·»å å°å½åè¡ 10446 if (Math.abs(rect.top - lastRect.top) < 5) { 10447 currentLine.push(rect); 10448 } else { 10449 // å¦åå¼å§æ°çä¸è¡ 10450 lineGroups.push(currentLine); 10451 currentLine = [rect]; 10452 } 10453 } 10454 }); 10455 10456 // æ·»å æåä¸è¡ 10457 if (currentLine.length > 0) { 10458 lineGroups.push(currentLine); 10459 } 10460 10461 return lineGroups; 10462 }, 10463 /** 10464 * å¤æä¸¤ä¸ªç©å½¢æ¯å¦æ°´å¹³ç´§é» 10465 * @param {Object} rect1 - 第ä¸ä¸ªç©å½¢ 10466 * @param {Object} rect2 - 第äºä¸ªç©å½¢ 10467 * @returns {boolean} - æ¯å¦æ°´å¹³ç´§é» 10468 */ 10469 areHorizontallyAdjacent:function(rect1, rect2){ 10470 // æ£æ¥åç´æ¹åæ¯å¦æéå ï¼å¨åä¸è¡ï¼ 10471 const verticalOverlap = Math.min(rect1.bottom, rect2.bottom) - Math.max(rect1.top, rect2.top); 10472 10473 // æ£æ¥æ°´å¹³é´è·æ¯å¦å¨éå¼èå´å 10474 const horizontalGap = rect2.left - rect1.right; 10475 10476 return verticalOverlap > 0 && Math.abs(horizontalGap) < 1; // å 许1px误差 10477 }, 10478 /** 10479 * æ¾å°éè¦å¨èç¹ææ¬æ«å°¾æ·»å ç©ºæ ¼çèç¹ 10480 * @param {Array<{before: Object, after: Object}>} adjacentPairs - å·¦å³ç´§é»çç©å½¢å¯¹æ°ç» 10481 * @returns {Node[]} - éè¦æ·»å ç©ºæ ¼çèç¹æ°ç» 10482 */ 10483 afterAddSpace:function(adjacentPairs){ 10484 10485 const nodesToAddSpace = []; 10486 10487 adjacentPairs.forEach(pair => { 10488 const { before, after } = pair; 10489 const beforeNode = before.node; 10490 const afterNode = after.node; 10491 10492 // è·åè®¡ç®æ ·å¼ 10493 const beforeStyle = window.getComputedStyle( 10494 beforeNode.nodeType === Node.TEXT_NODE ? beforeNode.parentElement : beforeNode 10495 ); 10496 10497 const afterStyle = window.getComputedStyle( 10498 afterNode.nodeType === Node.TEXT_NODE ? afterNode.parentElement : afterNode 10499 ); 10500 10501 // æ£æ¥é´è·æ¯å¦ç±CSS屿§å¼èµ· 10502 const hasRightSpacing = parseFloat(beforeStyle.marginRight) > 0 || 10503 parseFloat(beforeStyle.paddingRight) > 0; 10504 10505 const hasLeftSpacing = parseFloat(afterStyle.marginLeft) > 0 || 10506 parseFloat(afterStyle.paddingLeft) > 0; 10507 10508 // å¦ææ²¡ææç¡®çé´è·ï¼ä¸åä¸ä¸ªèç¹çå¼å§é空ç½ç¬¦ï¼åéè¦æ·»å ç©ºæ ¼ 10509 if (!hasRightSpacing && !hasLeftSpacing) { 10510 //夿 before èç¹çæåä¸ä¸ªå符æ¯å¦æ¯ç©ºç½ç¬¦ 10511 if(typeof(beforeNode.textContent) == 'string' && typeof(afterNode.textContent) == 'string'){ 10512 if(/\s$/.test(beforeNode.textContent)){ 10513 //before æåä¸ä¸ªå符æ¯ç©ºæ ¼ï¼åä¸éè¦è¿½å ç©ºæ ¼ç¬¦äº 10514 }else if(/^\s/.test(afterNode.textContent)){ 10515 //after èç¹çå¼å§ç¬¬ä¸ä¸ªå符æ¯ç©ºç½ç¬¦ï¼é£ä¹ä¹ä¸éè¦è¿½å ç©ºæ ¼ç¬¦äº 10516 }else{ 10517 //è¿éå°±éè¦å¯¹ beforeNode 追å ç©ºæ ¼äº 10518 nodesToAddSpace.push(beforeNode); 10519 } 10520 } 10521 } 10522 }); 10523 10524 return nodesToAddSpace; 10525 }, 10526 /** 10527 * 䏻彿°ï¼å¤çç¿»è¯åçç©ºæ ¼è°æ´ 10528 * @param {Node[]} nodes - èç¹æ°ç» 10529 */ 10530 adjustTranslationSpaces:function(nodes){ 10531 10532 //å 夿å½åè¦æ¾ç¤ºçè¯ç§ï¼æ¯å¦éè¦ç¨ç©ºæ ¼è¿è¡é´éåè¯ï¼å¦ææ¬èº«ä¸éè¦ç©ºæ ¼é´éï¼åæ¯ä¸æï¼é£å°±æ ¹æ¬ä¸éè¦å»è®¡ç®è§è§è·ç¦» 10533 if(!translate.language.wordBlankConnector(translate.to)){ 10534 return; 10535 } 10536 10537 //var startTime = Date.now(); 10538 // 1. è·åèç¹è§è§ç©å½¢ 10539 const rects = translate.visual.getRects(nodes); 10540 10541 // å° reacts äºç»´æ°ç»è½¬å为 ä¸ç»´æ°ç»ï¼ä»¥ä¾¿å¯¹ä¸ç»´æ°ç»è¿è¡æåº 10542 var oneArrayRects = translate.visual.rectsToOneArray(rects); 10543 10544 //console.log('rects:'); 10545 //console.log(rects); 10546 //console.log('å° reacts äºç»´æ°ç»è½¬å为ä¸ç»´æ°ç» oneArrayRects:'); 10547 //console.log(oneArrayRects); 10548 10549 // 2. æ¥æ¾å·¦å³ç´§é»çç©å½¢å¯¹ 10550 const adjacentPairs = translate.visual.afterAdjacent(oneArrayRects); 10551 //console.log('adjacentPairs:'); 10552 //console.log(adjacentPairs); 10553 10554 // 3. ç¡®å®éè¦æ·»å ç©ºæ ¼çèç¹ 10555 const nodesToAddSpace = translate.visual.afterAddSpace(adjacentPairs); 10556 //console.log('nodesToAddSpace:'); 10557 //console.log(nodesToAddSpace); 10558 10559 // 4. æ·»å éæè¡ç©ºæ ¼ 10560 nodesToAddSpace.forEach(node => { 10561 // ç¡®ä¿åªä¿®æ¹ææ¬å 容ï¼ä¸å½±åHTMLç»æ 10562 if (node.nodeType === Node.TEXT_NODE) { 10563 10564 //夿å®çæåä¸ä¸ªå符æ¯å¦æ¯ç©ºæ ¼ï¼å¦æä¸æ¯ç©ºæ ¼ï¼ææå¿ è¦å ç©ºæ ¼ç¬¦ 10565 if(node.textContent.length === 0 || node.textContent.substring(node.textContent.length -1, node.textContent.length) !== '\u00A0'){ 10566 10567 //æ¾å°å®å¯¹åºç translate.node.data çæ°æ®ï¼å å°å ¶è¿è¡æ¹å¨ - ç®çæ¯ listener ç嬿¹å¨ç¥éè¿æ¯translate.jsèªå·±æ¹ç - 以å 让 translate.node çæ°æ®å¯¹åºèµ·æ¥ 10568 if(translate.node.get(node) !== null){ 10569 if(typeof(translate.node.get(node).resultText) !== 'string'){ 10570 //没æresultTextè¿ä¸ªå±æ§ï¼å¦æç¿»è¯å¤±è´¥æè æ¬èº«æ¯ç¹æ®å符æ¯å¦æ°åï¼ä¸éè¦è¢«ç¿»è¯ï¼æ¯æ²¡æè¿ä¸ªå±æ§çï¼é£è¿éé»è®¤èµäº originalText ç»ä»ï¼ä»¥åè®°å½ï¼å å¾è¢«listenerçå¬ 10571 translate.node.get(node).resultText = translate.node.get(node).originalText; 10572 } 10573 translate.node.get(node).resultText = translate.node.get(node).resultText + '\u00A0'; 10574 10575 if(typeof(translate.node.get(node).translateResults) === 'undefined'){ 10576 translate.node.get(node).translateResults = {}; 10577 } 10578 translate.node.get(node).translateResults[translate.node.get(node).resultText] = 1; 10579 10580 translate.node.get(node).lastTranslateRenderTime = Date.now(); 10581 } 10582 10583 //console.log(node.textContent+'-->'+node.textContent.substring(node.textContent.length -1, node.textContent.length)); 10584 node.textContent = node.textContent + '\u00A0'; 10585 } 10586 10587 //console.log(translate.node.get(node)) 10588 } else if (node.nodeType === Node.ELEMENT_NODE) { 10589 // 妿æ¯å ç´ èç¹ï¼ä¿®æ¹å ¶æåä¸ä¸ªåèç¹ï¼åè®¾æ¯ææ¬èç¹ï¼ 10590 const lastChild = node.lastChild; 10591 if (lastChild && lastChild.nodeType === Node.TEXT_NODE) { 10592 //夿å®çæåä¸ä¸ªå符æ¯å¦æ¯ç©ºæ ¼ï¼å¦æä¸æ¯ç©ºæ ¼ï¼ææå¿ è¦å ç©ºæ ¼ç¬¦ 10593 if(lastChild.textContent.length === 0 || lastChild.textContent.substring(lastChild.textContent.length -1, lastChild.textContent.length) !== '\u00A0'){ 10594 //æ¾å°å®å¯¹åºç translate.node.data çæ°æ®ï¼å å°å ¶è¿è¡æ¹å¨ - ç®çæ¯ listener ç嬿¹å¨ç¥éè¿æ¯translate.jsèªå·±æ¹ç - 以å 让 translate.node çæ°æ®å¯¹åºèµ·æ¥ 10595 if(translate.node.get(lastChild) !== null){ 10596 if(typeof(translate.node.get(lastChild).resultText) === 'string'){ 10597 translate.node.get(lastChild).resultText = translate.node.get(lastChild).resultText + '\u00A0'; 10598 translate.node.get(lastChild).translateResults[translate.node.get(node).resultText] = 1; 10599 translate.node.get(lastChild).lastTranslateRenderTime = Date.now(); 10600 } 10601 }
10602 lastChild.textContent = lastChild.textContent + '\u00A0'; 10603 } 10604 } 10605 } 10606 }); 10607 //var endTime = Date.now(); 10608 //console.log('visual recognition time: '+(endTime-startTime)+'ms'); 10609 }, 10610 /* 10611 éè¿ translate.nodeQueue[uuid] ä¸çuuidï¼æ¥ä¼ å ¥è¿ä¸ª translate.nodeQueue[uuid] 䏿å 嫿¶åå°çæænode (é¤ç¹æ®åç¬¦å¤ ï¼ä¹å°±æ¯ translate.nodeQueue[uuid].list ä¸ ç¹æ®å符é£ä¸ç±»æ¯ä¸ä¼ä½¿ç¨ç) 10612 */ 10613 adjustTranslationSpacesByNodequeueUuid:function(uuid){ 10614 var nodes = []; 10615 for(var from in translate.nodeQueue[uuid].list){ 10616 if (!translate.nodeQueue[uuid].list.hasOwnProperty(from)) { 10617 continue; 10618 } 10619 //空çï¼ä¹å°±æ¯ææ°åæ ç¹ç¬¦å·çè¿ä¸ç±»ï¼ä¹è¦å å ¥ï¼å 为ä¹è¦ç®å ¥è§è§é´éä¸å»ï¼æ¯å¦ ææ9个ï¼å ¶ä¸ç9妿ä¸ç®çè¯ï¼ç¿»è¯å my have9ge 就没æé´éäº 10620 //if(from.length < 1){ 10621 // continue; 10622 //} 10623 if(typeof(translate.nodeQueue[uuid].list[from]) === 'undefined'){ 10624 continue; 10625 } 10626 for(var hash in translate.nodeQueue[uuid].list[from]){ 10627 if (!translate.nodeQueue[uuid].list[from].hasOwnProperty(hash)) { 10628 continue; 10629 } 10630 for(var nodeindex in translate.nodeQueue[uuid].list[from][hash].nodes){ 10631 if (!translate.nodeQueue[uuid].list[from][hash].nodes.hasOwnProperty(nodeindex)) { 10632 continue; 10633 } 10634 var node = translate.nodeQueue[uuid].list[from][hash].nodes[nodeindex].node; 10635 nodes.push(node); 10636 } 10637 } 10638 }
10639 translate.visual.adjustTranslationSpaces(nodes); 10640 }, 10641 /* 10642 éè¿ translate.nodeQueue 䏿å䏿¬¡æ§è¡ç uuidï¼æ¥è·åè¿ä¸ª translate.nodeQueue[uuid] 䏿å 嫿¶åå°çæænode (é¤ç¹æ®åç¬¦å¤ ï¼ä¹å°±æ¯ translate.nodeQueue[uuid].list ä¸ ç¹æ®å符é£ä¸ç±»æ¯ä¸ä¼ä½¿ç¨ç) 10643 */ 10644 adjustTranslationSpacesByLastNodequeueUuid:function(uuid){ 10645 var uuid = ''; 10646 for(var uuid_index in translate.nodeQueue){ 10647 uuid = uuid_index; 10648 break; 10649 } 10650 if(typeof(uuid) == 'string' && uuid.length > 1){ 10651 translate.visual.adjustTranslationSpacesByNodequeueUuid(uuid); 10652 } 10653 }, 10654 10655 /** 10656 * éèå½åç½é¡µçææææ¬ 10657 * 10658 */ 10659 hideText:{ 10660 style:` 10661 /* ææ¬éèæ ¸å¿æ ·å¼ - ä» éèææ¬å 容 */ 10662 10663 html.translatejs-text-hidden p, html.translatejs-text-hidden div, html.translatejs-text-hidden small, 10664 html.translatejs-text-hidden h1, html.translatejs-text-hidden h2, html.translatejs-text-hidden h3, 10665 html.translatejs-text-hidden h4, html.translatejs-text-hidden h5, html.translatejs-text-hidden h6, 10666 html.translatejs-text-hidden span, html.translatejs-text-hidden a, html.translatejs-text-hidden b, 10667 html.translatejs-text-hidden strong, html.translatejs-text-hidden i, html.translatejs-text-hidden em, 10668 html.translatejs-text-hidden mark, 10669 html.translatejs-text-hidden blockquote, html.translatejs-text-hidden ul, html.translatejs-text-hidden ol, 10670 html.translatejs-text-hidden li, html.translatejs-text-hidden table, html.translatejs-text-hidden th, 10671 html.translatejs-text-hidden td, html.translatejs-text-hidden label, html.translatejs-text-hidden button, 10672 html.translatejs-text-hidden input, html.translatejs-text-hidden select, html.translatejs-text-hidden textarea { 10673 color: transparent !important; 10674 text-shadow: none !important; 10675 transition: none !important; 10676 } 10677 10678 /* éèå ä½ç¬¦æå */ 10679 html.translatejs-text-hidden ::placeholder { 10680 color: transparent !important; 10681 } 10682 10683 /* ç¡®ä¿åªä½å ç´ ä¸åå½±å */ 10684 img, video, iframe, canvas, svg, 10685 object, embed, picture, source { 10686 color: initial !important; 10687 } 10688 10689 /* 忽ç¥éèçå ç´ ä¿æå¯è§ */ 10690 .ignore-hidden { 10691 color: inherit !important; 10692 } 10693 `, 10694 10695 /** 10696 * å½ç¹å»åæ¢è¯è¨æé®åï¼ä¼å·æ°å½å页é¢ï¼ç¶ååè¿è¡ç¿»è¯ã 10697 * è¿æ¶ä¼åºç°å·æ°å½å页é¢åï¼ä¼å æ¾ç¤ºåæ¬çææ¬ï¼ç¶ååç¿»è¯ä¸ºåæ¢ä¸ºçè¯ç§ï¼ä½éªæææç¹æ¬ 缺ã 10698 * è¿ä¸ªå¾ä½ç¨å°±æ¯å¢å¼ºç¨æ·è§è§çä½éªææï¼å¨é¡µé¢åå§åå è½½æ¶ï¼å¦æå¤å®éè¦ç¿»è¯ï¼é£ä¹ä¼éèææç½é¡µä¸çææ¬ ã 10699 * è¿ä¸ªéè¦å¨bodyæ ç¾ä¹åæ§è¡ï¼éè¦å¨headæ ç¾ä¸æ§è¡æ¤ãä¹å°±æ¯å è½½ translate.js 以åè§¦åæ¤é½è¦æ¾å°headæ ç¾ä¸ 10700 * 10701 * id å¯ä¸æ è¯ï¼å¯è½ä¼éè夿¬¡ï¼æè å䏿¶é´åºå夿¬¡ä¸åçå ç´ éèï¼æ¯æ¬¡éèè·æ¾ç¤ºé½æ¯æ ¹æ®è¿ä¸ªidå¯ä¸æ è¯æ¥çï¼ å符串类åã å¦ææ²¡æï¼é»è®¤å°±æ¯ translatejs-text-hidden 10702 */ 10703 hide:function(id){ 10704 const style = document.createElement('style'); 10705 10706 if(typeof(id) == 'undefined' || id == null || id.length == 0){ 10707 id = 'translatejs-text-hidden'; 10708 style.textContent = translate.visual.hideText.style; 10709 }else{ 10710 //æå¼ 10711 id = 'translatejs-text-hidden-'+id; 10712 style.textContent = translate.visual.hideText.style.replace(/translatejs-text-hidden/g, id).replace(/\/\*(.*)\*\//g, ' ').replace(/\n/g, ' '); 10713 } 10714 style.id = id; 10715 document.head.appendChild(style); 10716 document.documentElement.classList.add(id); 10717 }, 10718 /** 10719 * æ¤ééèç¶æï¼å°åæ¬çææ¬æ£å¸¸æ¾ç¤ºåºæ¥ 10720 * 10721 * id å hide ç 10722 */ 10723 show:function(id){ 10724 if(typeof(id) == 'undefined' || id == null || id.length == 0){ 10725 id = 'translatejs-text-hidden'; 10726 }else{ 10727 //æå¼ 10728 id = 'translatejs-text-hidden-'+id; 10729 } 10730 10731 //å é¤html ç class name 10732 document.documentElement.classList.remove(id); 10733 //å é¤ style 10734 var style_translatejs_text_hidden = document.getElementById(id); 10735 if(typeof(style_translatejs_text_hidden) != null && style_translatejs_text_hidden != null){ 10736 style_translatejs_text_hidden.remove(); 10737 } 10738 } 10739 }, 10740 10741 /* 10742 è¿ä¸ªä¸»è¦æ¯é åä¸é¢çï¼å¦æä¸é¢ç webPageLoadTranslateBeforeHiddenText 触åï¼
10742åèªå¨è®¾ç½®æ¤å¤ä¸ºtrueï¼ä¸ºå¯ç¨åæ¢è¯ç§æå·æ°é¡µé¢åå éèåæ¬çææ¬ 10743 å®åªæ¯æä¾å¤æä½¿ç¨ï¼ä¸å¯ç´æ¥è®¾ç½®æä½ 10744 */ 10745 webPageLoadTranslateBeforeHiddenText_use: false, 10746 10747 /** 10748 ç½é¡µå è½½ï¼ä¸è¦è¿è¡ç¿»è¯æ¶ï¼ç¿»è¯ä¹åï¼éèå½åç½é¡µçææ¬ã 10749 å½ç¹å»åæ¢è¯è¨æé®åï¼ä¼å·æ°å½å页é¢ï¼ç¶ååè¿è¡ç¿»è¯ã 10750 è¿æ¶ä¼åºç°å·æ°å½å页é¢åï¼ä¼å æ¾ç¤ºåæ¬çææ¬ï¼ç¶ååç¿»è¯ä¸ºåæ¢ä¸ºçè¯ç§ï¼ä½éªæææç¹æ¬ 缺ã 10751 10752 è¿ä¸ªå¾ä½ç¨å°±æ¯å¢å¼ºç¨æ·è§è§çä½éªææï¼å¨é¡µé¢åå§åå è½½æ¶ï¼å¦æå¤å®éè¦ç¿»è¯ï¼é£ä¹ä¼éèææç½é¡µä¸çææ¬ ã 10753 ä»ä¼å éèç½é¡µææææ¬ï¼ç¶ååç¬¬ä¸æ¬¡ translate.execute æ§è¡æ¶ï¼å¨æ«æå®èç¹ï¼ 10754 1. å°æ«æå°çå ç§è¯ç§çææ¬å ¨é¨åéç½ç»è¯·æ±ä¹åï¼ï¼ä¹å°±æ¯å·²ç»è§¦åäºåéç½ç»è¯·æ±çææ¬nodeå·²ç»å¤äºéèç¶æï¼ï¼ æä¼å»ææ´ä¸ªç½é¡µææ¬çéèã 10755 2. å¨ç¬¬ä¸æ¬¡ translate.execute æ§è¡æ¸²æå®æ¯åï¼å»ææ´ä¸ªç½é¡µææ¬çéèã 10756 3. å¨ dom 10757 10758 è¿ä¸ªéè¦å¨bodyæ ç¾ä¹åæ§è¡ï¼éè¦å¨headæ ç¾ä¸æ§è¡æ¤ãä¹å°±æ¯å è½½ translate.js 以åè§¦åæ¤é½è¦æ¾å°headæ ç¾ä¸ 10759 10760 config åæ°ï¼é 置项ï¼é»è®¤ä¸ä¼ 10761 { 10762 inHeadTip:true, //è¦åè¦å¨headä¸è§¦åçæ§å¶å°æ¶æ¯æéï¼trueæ¯å¦æåç°å°±æå°è¿ä¸ªæéã é»è®¤ä¸è®¾ç½®ä¾¿æ¯true 10763 } 10764 */ 10765 webPageLoadTranslateBeforeHiddenText:function(config){ 10766 if(typeof(config) == 'undefined'){ 10767 config = {}; 10768 } 10769 if(typeof(config.inHeadTip) == 'undefined'){ 10770 config.inHeadTip = true; 10771 } 10772 10773 //æ è®°ï¼å½åå¯ç¨æ´ä½éèææ¬çè½å 10774 translate.visual.webPageLoadTranslateBeforeHiddenText_use = true; 10775 10776 if(typeof(document.body) == 'undefined' || document.body == null){ 10777 //æ£å¸¸ï¼bodyè¿æ²¡å è½½ 10778 }else{ 10779 if(config.inHeadTip){ 10780 translate.log('è¦åï¼ translate.visual.webPageLoadTranslateBeforeHiddenText() è¦å¨ head æ ç¾ä¸è§¦åæè½è¾¾å°æå¥½çææï¼'); 10781 } 10782 } 10783 if(translate.language.local == ''){ 10784 translate.log('æéï¼å¨ä½¿ç¨ translate.visual.webPageLoadTranslateBeforeHiddenText() ä¹åï¼è¯·å æå¨è®¾ç½®ä½ çæ¬å°è¯ç§ï¼åèï¼ http://translate.zvo.cn/4066.html å¦æä½ ä¸è®¾ç½®æ¬å°è¯ç§ï¼åä¸ç®¡ä½ æ¯å¦æåæ¢è¯è¨ï¼ç½é¡µæå¼åé½ä¼å çæç䏿¾ç¤ºæå'); 10785 } 10786 10787 if(translate.language.local == '' || translate.language.translateLocal == true || translate.language.local != translate.language.getCurrent()){ 10788 //妿å½å触åç¿»è¯ï¼æä¼åºç°è¿ä¸ªéèææ¬ï¼å ä¸ºåæ¶éèå¿ é¡»è¦ translate.execute() 触ååæä¼åæ¶éè 10789 10790 translate.visual.hideText.hide(); 10791 10792 /* 10793 // åå»ºå®æ¶å¨ï¼æ¯10msæ§è¡ä¸æ¬¡ï¼ä»¥ä¿ææé¡¶å± html æ ç¾ä¸çclass ä¸è¢«é¡¹ç®ææ¡æ¶æ¬èº«èªå¨ç»è¦çæ 10794 //é对 60HZå·æ°çï¼é¿å 人ç¼è§è§ä¸åºç°å±éªï¼æä»¥ä½¿ç¨ 10ms 10795 translate.visual.hideText.htmlAppendClassIntervalId = setInterval(function(){ 10796 document.documentElement.classList.add('translatejs-text-hidden'); 10797 }, 10); 10798 */ 10799 10800 //设置åèµ·ç½ç»è¯·æ±åï¼è®°å½åèµ·äºå 次翻è¯è¯·æ±ï¼é¿å åèµ·äºå¤æ¬¡ï¼ä½æ¯ç¬¬ä¸æ¬¡æ§è¡å®äºå°±æ¾ç¤ºææ¬äºï¼ä½æ¯åå æ¬¡è¿å¨ç¿»è¯ä¸ï¼è¿æ¯ä¼åºç°æ¾ç¤ºåæçæ åµ 10801 //translate.lifecycle.execute.translateNetworkBefore.push(function(uuid, from, to, texts){ 10802 translate.lifecycle.execute.translateNetworkBefore.push(function(data){ 10803 if(typeof(translate.visual.hideText.first_translate_request_uuid) == 'undefined'){ 10804 //æ¯ç¬¬ä¸æ¬¡ç¿»è¯è¯·æ±ï¼è®°å½å ¶uuid 10805 translate.visual.hideText.first_translate_request_uuid = data.uuid; 10806 } 10807 10808 //åªæç¬¬ä¸æ¬¡éè¿ç½ç»ç¿»è¯æ¥å£è¯·æ±æä¼è®°å½uuid 10809 if(translate.visual.hideText.first_translate_request_uuid == data.uuid){ 10810 if(typeof(translate.visual.hideText.first_translate_request_number) == 'undefined'){ 10811 translate.visual.hideText.first_translate_request_number = 0; 10812 } 10813 translate.visual.hideText.first_translate_request_number++; 10814 //console.log('translate.visual.hideText.first_translate_request_number++ from:'+from+', ++ after number: '+translate.visual.hideText.first_translate_request_number); 10815 } 10816 }); 10817 10818 //设置翻è¯å®æåï¼ç§»é¤éèææ¬çcss çclass name
10819 translate.lifecycle.execute.renderFinish.push(function(uuid, to){ 10820 //console.log('renderFinish : '+uuid); 10821 if(typeof(translate.visual.hideText.first_translate_request_uuid) == 'undefined'){ 10822 //为空ï¼é£ä¹å¯è½æ¯å·²ç»è§¦åè¿æµè§å¨ç¼åäºï¼ææç¿»è¯çææ¬å¨æµè§å¨ç¼åä¸é½æï¼å°±ä¸å¿ ååèµ·ç½ç»è¯·æ±äº 10823 10824 10825 }else{ 10826 //æ¯åèµ·è¿ç½ç»è¯·æ±çï¼è¦è®¡ç®è¯·æ±æ°ï¼ææçè¯ç§é½ç¿»è¯å®åæè½æ¾ç¤ºææ¬ 10827 if(translate.visual.hideText.first_translate_request_uuid != uuid){ 10828 //䏿¯åä¸ä¸ªuuidçï¼é£ä¹å°±æ¯å¹¶ä¸æ¯ç¬¬ä¸æ¬¡ç¿»è¯äºï¼èè¿ä¸ª webPageLoadTranslateBeforeHiddenText éå¯¹çæ¯é¡µé¢å è½½åç¬¬ä¸æ¬¡ç¿»è¯çé¿å åæä¸éªçæ åµ 10829 return; 10830 } 10831 } 10832 /* 10833 鿝宿¶å¨ - ä¸è¦å ï¼é¢ç 10834 if(typeof(translate.visual.hideText.htmlAppendClassIntervalId) != 'undefined'){ 10835 clearInterval(translate.visual.hideText.htmlAppendClassIntervalId); 10836 console.log("translate.visual.hideText.htmlAppendClassIntervalId 已鿝 : "+translate.visual.hideText.htmlAppendClassIntervalId); 10837 } 10838 */ 10839 10840 translate.visual.hideText.show(); 10841 }); 10842 } 10843 10844 //translate.execute è§¦åæ§è¡ç»æè§¦å 10845 translate.lifecycle.execute.finally.push(function(data){ 10846 if(data.triggerNumber < 3){ 10847 //åªæå¨ç¬¬ä¸æ¬¡ãç¬¬äºæ¬¡ 触ååæä¼éèææ¬ï¼è¿éé¿å åªç¬¬ä¸æ¬¡ï¼æ¯ä¸ä¸ç¬¬ä¸æ¬¡åºç°å¼å¸¸ï¼ç½é¡µå¨ç©ºç½ä¸æ¾ç¤ºå 容äºï¼å¤è§¦åå æ¬¡ä¹ä¸ä¼å½±åå¤å°æ§è½ãèä¸è¿ä¸ªæ¯å¯¹ç½é¡µæ´ä½è¿è¡æ¾ç¤ºçï¼åªæé¡µé¢åå§åæå¼çæ¶åæä¼ç¨å°è¿ä¸ªç¸å ³çéèè·æ¾ç¤ºï¼ æ£å¸¸ç½ç»è¯·æ±ä½¿ç¨ç就䏿¯è¿ä¸ªäº 10848 translate.visual.hideText.show(); 10849 //console.log('éè translate.visual.hideText.show();'); 10850 } 10851 }); 10852 10853 10854 } 10855 10856 10857 10858 10859 10860 }, 10861 /*js translate.visual end*/ 10862 10863 /* 10864 åå²ï¼ 20250924 å¢å 10865 10866 */ 10867 history:{ 10868 /* 10869 ç¿»è¯ææ¬ç¸å ³ï¼mapçåå§åå¨ translate.init() ä¸è¿è¡ 10870 åªæå½æ£å¸¸ç¿»è¯ä¸ç¿»è¯å®æï¼æåï¼çï¼æä¼è®°å½å°è¿é 10871 æ¯å¦ èªå®ä¹å¿½ç¥ç¿»è¯æå âä½ å¥½â ï¼å ç´ çå 容为 âä½ å¥½ä¸çâï¼å®ä¼å° ä½ å¥½ãä½ å¥½ä¸ç è¿ä¸¤ä¸ªé½å å ¥è¿å» 10872 */ 10873 translateText: { 10874 /* 10875 以翻è¯ç»æä¸º key ç map 10876 value: 10877 original ç¿»è¯çåæ 10878 */ 10879 resultMap:null, 10880 /* 10881 以翻è¯åæä¸º key ç map 10882 value: 10883 result ç¿»è¯çç»æ 10884 */ 10885 originalMap:null, 10886 10887 /* 10888 å å ¥ä¸æ¡ç¿»è¯è®°å½ 10889 */ 10890 add: function(original, result){ 10891 //console.log(original +' - '+result); 10892 translate.history.translateText.resultMap.set(result, original); 10893 translate.history.translateText.originalMap.set(original, result); 10894 } 10895 }, 10896 10897 }, 10898 10899 /* 10900 è®°å½æå°ç¿»è¯æ§è¡çèæ¶æ åµ 10901 */ 10902 time:{ 10903 // æ§è¡ translate.execute() çæ¶é´ç¸å ³ 10904 execute:{ 10905 //trueå¯ç¨ï¼ falseä¸å¯ç¨ï¼é»è®¤æ¯ä¸å¯ç¨ç¶æï¼ä¸è¦ç´æ¥è°ç¨ï¼èæ¯ä½¿ç¨ translate.time.execute.start(); 10906 isUse: false, 10907 10908 /* 10909 key: uuid ï¼ä¹å°±æ¯ æ¯æ¬¡ translate.execute() é½ä¼å建ä¸ä¸ªuuid 10910 value: æ§è¡ translate.execute() çèæ¶ï¼å为å é¨åï¼ 10911 all: æ»èæ¶ï¼å使¯æ¯«ç§ï¼ä»è§¦å translate.execute() å°ææçæ¥å£è¯·æ±æ¸²æå®æ¯çèæ¶ 10912 10913 10914 */ 10915 data: {}, 10916 10917 /* 10918 å¯å¨èæ¶æå° 10919 */ 10920 start:function(){ 10921 if(translate.time.execute.isUse){ 10922 //å·²ç»å¯å¨è¿äºï¼ä¸éè¦åå¯å¨äº 10923 translate.log('translate.time.execute.start() å·²ç»å¯å¨è¿äºï¼ä¸éè¦åå¯å¨äº'); 10924 } 10925 10926 translate.time.execute.data.isUse = true; 10927 10928 //ç¿»è¯å¼å§ 10929 translate.lifecycle.execute.start.push(function(uuid, to){ 10930 if(typeof(translate.time.execute.data[uuid]) == 'undefined'){ 10931 translate.time.execute.data[uuid] = {}; 10932 } 10933 translate.time.execute.data[uuid].startTime = new Date().getTime(); 10934 }); 10935 10936 //åèµ·ç½ç»è¯·æ±å 10937 translate.lifecycle.execute.translateNetworkBefore.push(function(data){ 10938 translate.time.execute.data[data.uuid].translateNetworkBeforeTime = new Date().getTime(); 10939 }); 10940 10941 /* 10942 //åèµ·ç½ç»è¯·æ±å 10943 translate.lifecycle.execute.translateNetworkAfter.push(function(data){ 10944 translate.time.execute.data[data.uuid].translateNetworkBeforeTime = new Date().getTime(); 10945 }); 10946 */ 10947 10948 //ç¿»è¯å®æï¼æ¸²æå ¨é¨è¯ç§é½å®æï¼
10949 translate.lifecycle.execute.renderFinish.push(function(uuid, to){ 10950 translate.time.execute.data[uuid].finishTime = new Date().getTime(); 10951 translate.time.execute.data[uuid].allTime = translate.time.execute.data[uuid].finishTime - translate.time.execute.data[uuid].startTime; 10952 10953 10954 /*** åå½å translate.execute() ç¿»è¯ï¼è¿è¡ç¿»è¯çææ¬è·ç¿»è¯çåè¯ç§ - start ***/ 10955 var translateTexts = new Array(); //ç¿»è¯çææ¬çæ°ç»ï¼ç¿»è¯çåææ¬ 10956 var translateLanguages = new Array(); //ç¿»è¯çè¯ç§æ°ç» 10957 10958 var queueValue = translate.nodeQueue[uuid]; 10959 //console.log(queueValue); 10960 for(var lang in translate.nodeQueue[uuid].list){ 10961 if (!translate.nodeQueue[uuid].list.hasOwnProperty(lang)) { 10962 continue; 10963 } 10964 if(typeof(lang) != 'string' || lang.length < 1){ 10965 continue; 10966 } 10967 10968 translateLanguages.push(lang); 10969 10970 for(var hash in translate.nodeQueue[uuid].list[lang]){ 10971 if (!translate.nodeQueue[uuid].list[lang].hasOwnProperty(hash)) { 10972 continue; 10973 } 10974 translateTexts.push(translate.nodeQueue[uuid].list[lang][hash].original); 10975 } 10976 10977 } 10978 10979 //console.log(translateTexts) 10980 //console.log(translateLanguages) 10981 /*** åå½å translate.execute() ç¿»è¯ï¼è¿è¡ç¿»è¯çææ¬è·ç¿»è¯çåè¯ç§ - end ***/ 10982 10983 translate.time.execute.data[uuid].translateLanguages = translateLanguages; 10984 translate.time.execute.data[uuid].translateTexts = translateTexts; 10985 10986 10987 translate.log('[time][translate.execute()] '+translate.time.execute.data[uuid].allTime+'ms '+(typeof(translate.time.execute.data[uuid].translateNetworkBeforeTime) != 'undefined'? '(search&cache '+(translate.time.execute.data[uuid].translateNetworkBeforeTime - translate.time.execute.data[uuid].startTime)+'ms)':'')+ (translateTexts.length > 0 ? (' , ['+translateLanguages+'] : ('+translateTexts.length+')['+translateTexts.slice(0, 3)+(translateTexts.length > 3 ? ', ...':'')+']'):'')); 10988 }); 10989 }, 10990 10991 }, 10992 10993 use:false, //trueå¯ç¨ï¼ falseä¸å¯ç¨ï¼é»è®¤æ¯ä¸å¯ç¨ç¶æ 10994 10995 10996 printTime: 0, //æå°èæ¶å¤§äºè¿ä¸ªçï¼é»è®¤æ¯0ï¼ä¹å°±æ¯å ¨é¨æå°ãå使¯æ¯«ç§ã æ¯å¦è®¾ç½®ä¸º 100 ï¼ååªæå°èæ¶å¤§äºçäº100毫ç§çå¨ä½ 10997 10998 /** 10999 * å¢å 䏿¡æ¥å¿è®°å½ 11000 * functionName 触åè°ç¨æ¤å¤logçæ¹æ³åï¼ä¼ å ¥å¦ translate.execute 11001 * remark 夿³¨æåï¼è¯´æ 11002 */ 11003 log:function(remark){ 11004 if(translate.time.use == false){ 11005 return; 11006 } 11007 11008 var timestamp = new Date().getTime(); // ä¾å¦ï¼1725053445123 11009 11010 var usetime = 0; //è·ä¸ä¸æ¬¡è®°å½çé´éèæ¶ï¼å使¯æ¯«ç§ 11011 if(typeof(translate.time.temp_lasttime) != 'undefined'){ 11012 usetime = timestamp-translate.time.temp_lasttime; 11013 } 11014 translate.time.temp_lasttime = timestamp; 11015 11016 if(usetime < translate.time.printTime){ 11017 //ä¸éè¦æå° 11018 return; 11019 } 11020 11021 var functionName = ''; 11022 try { 11023 // å建ä¸ä¸ªError对象æ¥è·åè°ç¨æ 11024 var error = new Error(); 11025 // è§£æè°ç¨æ ï¼è·åè°ç¨è ä¿¡æ¯ 11026 // ä¸åç¯å¢ä¸è°ç¨æ çç´¢å¼å¯è½ä¸åï¼è¿éåäºå ¼å®¹å¤ç 11027 var stackLines = error.stack.split('\n'); 11028 //console.log(stackLines); 11029 var callerLine = stackLines[2] || stackLines[3]; // å ¼å®¹ä¸åç¯å¢ 11030 11031 // ä»è°ç¨æ 䏿忹æ³å 11032 var functionMatch = callerLine.match(/at (\S+)/); 11033 11034 if (functionMatch && functionMatch[1]) { 11035 functionName = functionMatch[1]; 11036 } 11037 } catch (e) { 11038 // 妿è·åè°ç¨æ 失败ï¼ä½¿ç¨åå§logæ¹æ³ 11039 translate.log(e); 11040 } 11041 11042 functionName = functionName.replace('Object.','translate.'); 11043 translate.log(functionName+'() '+usetime+' -> '+remark); 11044 } 11045 11046 }, 11047 11048 /* 11049 容é 11050 */ 11051 faultTolerance: { 11052 11053 // ä¼åææ¬èç¹åå»ºçæ¦æªé»è¾ 11054 // å¨å¯¹ continew-admin-ui æ¡æ¶è¿è¡éé æ¶ï¼åç°ætipé¼ æ æç¤ºåºæ¯ï¼è䏿¯åºç°å¨tableä¸çï¼ä¸ä¸å°±ä¼åºæ¥å个ï¼å®ç渲æè· translate.listener.start(); ç嬿å çä¼åºç°ä¸ç´å¾ªç¯çæ åµï¼ä¹å°±æ¯ translate.listener.start(); å°ææ¬ç¿»è¯äºï¼ç¶åvueèªå¨ç»æ¸²æè¿åï¼ç¶å translate.listener.start(); ç»§ç»ç»ç¿»è¯ï¼é ææ§è½æèãè¿éå°±æ¯å¤çè¿ç§æ åµç 11055 documentCreateTextNode: { 11056 /* 11057 忬ç document.createTextNode 11058 妿ä¸ä¸ºnullï¼åæ¯å·²å¼å¯ï¼ä¹å°±æ¯å·²ç»è§¦åäº translate.faultTolerance.documentCreateTextNode.enable(); 11059 å¦æä¸ºnullï¼åæ¯æªå¼å¯ï¼æä¸¤ç§å¯è½ 11060 1. æªè§¦å translate.faultTolerance.documentCreateTextNode.enable(); 11061 2. 触åäº translate.faultTolerance.documentCreateTextNode.disable(); 11062 */ 11063 originalCreateTextNode: null, 11064 11065 /* 11066 åçæ¹å¨æä½çææ¬èç¹ 11067 keyï¼ node 11068 valueï¼ 11069 */ 11070 node:null, 11071 11072 /* 11073 å¯ç¨æ¤å®¹éçè½å 11074 å¦æè§¦åæ¤å¯ç¨ï¼é£ä¹ä¼æ ¹æ®ç¨æ·åæ¢è¯è¨å设置ï¼èªå¨è¿è¡å¤å®æ¯å¦ä»å ¥ 11075 */ 11076 use:function(){ 11077 if(translate.faultTolerance.documentCreateTextNode.node == null){ 11078 translate.faultTolerance.documentCreateTextNode.node = new Map(); 11079 } 11080 11081 //å½ç¨æ·ç¹å»åæ¢è¯è¨æ¶è§¦å 11082 translate.lifecycle.changeLanguage.push(function(to){ 11083 if(translate.isTranslate(to)){ 11084 //éè¦è§¦åç¿»è¯ 11085 translate.faultTolerance.documentCreateTextNode.enable(); 11086 //console.log('translate.faultTolerance.documentCreateTextNode enable'); 11087 }else{ 11088 //ä¸å¨ç¿»è¯ï¼ç¦ç¨ï¼éæ¾ 11089 translate.faultTolerance.documentCreateTextNode.disable(); 11090 //console.log('translate.faultTolerance.documentCreateTextNode disable'); 11091 } 11092 }); 11093 11094 //å½ç¬¬ä¸æ¬¡æå¼é¡µé¢æ§è¡ç¿»è¯æ¶ï¼è§¦å 11095 translate.lifecycle.execute.start.push(function(data){ 11096 if(translate.executeNumber === 0){ 11097 //console.log('è¿æ¯æå¼é¡µé¢åï¼ç¬¬ä¸æ¬¡è§¦å translate.execute() ï¼å 为translate.executeNumber è®°å½çæ¯translate.execute() æ§è¡å®ç次æ°ã'); 11098 if(translate.isTranslate(data.to)){ 11099 //console.log('data to -->'+data.to); 11100 //éè¦è§¦åç¿»è¯ 11101 translate.faultTolerance.documentCreateTextNode.enable(); 11102 } 11103 } 11104 }); 11105 }, 11106 11107 /* 11108 å¯ç¨ 11109 å¯å¤æ¬¡è°ç¨ï¼å¦æå¤æ¬¡è°ç¨ï¼ç¬¬ä¸æ¬¡å¯ç¨ï¼ä¹åçé½ä¼ä¸åä»»ä½å¤ç 11110 */ 11111 enable: function(){ 11112 11113 //妿已å¼å¯ï¼é£å°±ä¸éè¦åéå¤å¯ç¨äº 11114 if(translate.faultTolerance.documentCreateTextNode.originalCreateTextNode != null){ 11115 return; 11116 } 11117 11118 11119 translate.faultTolerance.documentCreateTextNode.originalCreateTextNode = document.createTextNode; 11120 document.createTextNode = function(text) { 11121 var isTrans = false; //æ¯å¦è¿è¡äºç¿»è¯å¤çï¼trueæ¯ 11122 var originalText = null; //忬è¦å建nodeçææ¬ï¼å¦æ isTrans为trueï¼è¿éæä¼èµäº 11123 11124 if(translate.executeTriggerNumber > 0){ 11125 //å·²ç»è§¦åè¿ç¿»è¯æ§è¡äºï¼é£ä¹æä¼å¯ç¨è¿ä¸ªè½å 11126 11127 if(typeof(text) === 'string' && text.length > 0){ 11128 var textTranslateResult = translate.history.translateText.originalMap.get(text); 11129 if(typeof(textTranslateResult) === 'string' && textTranslateResult.length > 0){ 11130 // ç´æ¥æ´æ°text 11131 originalText = text; 11132 text = textTranslateResult; 11133 //console.log('åå»ºææ¬èç¹: '+textTranslateResult); 11134 isTrans = true; 11135 } 11136 } 11137 } 11138 11139 // åå»ºææ¬èç¹ - 使ç¨[text]æ°ç»ä»£æ¿argumentsï¼ä½¿ä»£ç æ´æç¡®åç°ä»£ 11140 const textNode = translate.faultTolerance.documentCreateTextNode.originalCreateTextNode.call(this, text); 11141 if(isTrans){ 11142 //console.log(textNode); 11143 translate.faultTolerance.documentCreateTextNode.node.set(textNode, { 11144 originalText: originalText, 11145 resultText: text 11146 });
11147 //å°å ¶è®°å½å° translate.node.data 11148 translate.node.set(textNode,{ 11149 attribute:"", 11150 originalText: originalText, 11151 resultText: text, 11152 translateTexts: {}, //è¿éå ä¸ºç´æ¥ä»ç¼åä¸åçï¼æ²¡æèµ°ç½ç»æ¥å£ï¼æä»¥è¿éç´æ¥ç©º 11153 whole: true, 11154 translateResults: { 11155 [originalText]:1 11156 }, 11157 lastTranslateRenderTime: Date.now() 11158 }); 11159 11160 11161 } 11162 11163 return textNode; 11164 }; 11165 }, 11166 /* 11167 ç¦ç¨ãä¸ååä»»ä½å¤çï¼éæ¾æ§è½ 11168 */ 11169 disable: function(){ 11170 if(translate.faultTolerance.documentCreateTextNode.originalCreateTextNode != null){ 11171 document.createTextNode = translate.faultTolerance.documentCreateTextNode.originalCreateTextNode; 11172 translate.faultTolerance.documentCreateTextNode.originalCreateTextNode = null; 11173 } 11174 } 11175 } 11176 }, 11177 11178 /* 11179 å¿«éæ¥å ¥ï¼å¨headä¸å¼å ¥ä½¿ç¨ï¼å®éæäº translate.execute() è¿å» 11180 11181 éè¦æååçï¼ 11182 //éè¦æå设置æ¬å°è¯ç§ï¼å½åç½é¡µçè¯ç§ï¼ 11183 translate.language.setLocal('chinese_simplified'); 11184 11185 建议åçï¼ 11186 //设置æºå¨ç¿»è¯æå¡ééï¼ç¸å ³è¯´æåè http://translate.zvo.cn/545867.html 11187 translate.service.use('client.edge'); 11188 11189 */ 11190 quickUse:function(){ 11191 //ç½é¡µæå¼æ¶èªå¨éèæåï¼ç¿»è¯å®æåæ¾ç¤ºè¯æ http://translate.zvo.cn/549731.html 11192 translate.visual.webPageLoadTranslateBeforeHiddenText(); 11193 11194 //å¯ç¨ç¿»è¯ä¸çé®ç½©å± http://translate.zvo.cn/407105.html 11195 translate.progress.api.startUITip(); 11196 11197 //å¼å¯é¡µé¢å ç´ å¨æçæ§ï¼jsæ¹åçå 容ä¹ä¼è¢«ç¿»è¯ï¼åèææ¡£ï¼ http://translate.zvo.cn/4067.html 11198 translate.listener.start(); 11199 11200 //ç½é¡µajax请æ±è§¦åèªå¨ç¿»è¯ http://translate.zvo.cn/4086.html 11201 translate.request.listener.start(); 11202 11203 //urlåæ°åå¯ä»¥å getæ¹å¼ä¼ é language åæ°çæ¹å¼æ§å¶å½åç½é¡µä»¥ä»ä¹è¯ç§æ¾ç¤º http://translate.zvo.cn/4075.html 11204 translate.language.setUrlParamControl(); 11205 11206 //æ¬å°è¯ç§ä¹è¿è¡å¼ºå¶ç¿»è¯ http://translate.zvo.cn/289574.html 11207 translate.language.translateLocal = true; 11208 11209 //å ç´ çå 容æ´ä½ç¿»è¯è½åé ç½® ï¼æé«ç¿»è¯çè¯ä¹ https://translate.zvo.cn/4078.html 11210 translate.whole.enableAll(); 11211 11212 //domå è½½å®æ¯åç«å³è§¦åç¿»è¯ 11213 document.addEventListener('DOMContentLoaded', function() { 11214 translate.execute();//å®æç¿»è¯åå§åï¼è¿è¡ç¿»è¯ 11215 11216 setTimeout(function(){ 11217 translate.execute();//å®æç¿»è¯åå§åï¼è¿è¡ç¿»è¯ 11218 }, 500); 11219 setTimeout(function(){ 11220 translate.execute();//å®æç¿»è¯åå§åï¼è¿è¡ç¿»è¯ 11221 }, 2000); 11222 }); 11223 11224 }, 11225 11226 /*js translate.recycle start*/ 11227 /* 11228 èªå¨åæ¶ translate.js æ¬èº«è®°å½çç¸å ³ä¿¡æ¯ï¼é¿å æäºé¡µé¢æå¾ªç¯è§¦åï¼åç页é¢è¿é¿å¯¼è´æ°æ®æç»å 积 11229 11230 translate.nodeQueue 11231 translate.node.data 11232 11233 */ 11234 recycle: function(){ 11235 var currentTime = new Date().getTime(); //å½åæ¶é´ 11236 //var before_second = 120; //è¦å é¤å¾åå¤å°ç§çæ°æ® 11237 11238 11239 /*** translate.nodeQueue ****/ 11240 var nodeQueueDeleteArray = []; //è¦å é¤çnodeQueueï¼å ¶ä¸åå¨çæ¯ uuid 11241 for(var uuid in translate.nodeQueue){ 11242 if (!translate.nodeQueue.hasOwnProperty(uuid)) { 11243 continue; 11244 } 11245 var expireTime = translate.nodeQueue[uuid].expireTime; 11246 if(expireTime+120 < currentTime){ 11247 nodeQueueDeleteArray.push(uuid); 11248 } 11249 } 11250 for(var qi = 0; qi < nodeQueueDeleteArray.length; qi++){ 11251 delete translate.nodeQueue[nodeQueueDeleteArray[qi]]; 11252 //console.log('delete nodeQueue -> '+nodeQueueDeleteArray[qi]); 11253 } 11254 11255 11256 /*** translate.node.data ****/ 11257 translate.node.refresh(); 11258 11259 /*** translate.time.execute.data ****/ 11260 var timeExecuteDeleteArray = []; //è¦å é¤çï¼å ¶ä¸åå¨çæ¯ uuid 11261 for(var uuid in translate.time.execute.data){ 11262 if (!translate.time.execute.data.hasOwnProperty(uuid)) { 11263 continue; 11264 } 11265 if(typeof(translate.time.execute.data[uuid].finishTime) == 'undefined'){ 11266 //è¿æ²¡æ§è¡å® 11267 continue; 11268 } 11269 var finishTime = translate.time.execute.data[uuid].finishTime; 11270 if(finishTime+120 < currentTime){
11271 timeExecuteDeleteArray.push(uuid); 11272 } 11273 } 11274 for(var ti = 0; ti < timeExecuteDeleteArray.length; ti++){ 11275 delete translate.time.execute.data[timeExecuteDeleteArray[ti]]; 11276 //console.log('delete translate.time.execute.data -> '+timeExecuteDeleteArray[ti]); 11277 } 11278 11279 11280 11281 }, 11282 /*js translate.recycle end*/ 11283 11284 /*js translate.init start*/ 11285 /* 11286 åå§åï¼å¦çæ¬æ£æµãåå§æ°æ®å è½½ãmap声æãçå¬å¯å¨ ç 11287 ä¼èªå¨å¨ translate.js å è½½å®èªå¨è§¦åæ§è¡ 11288 */ 11289 init:function(){ 11290 11291 // ç¡®ä¿åå§ååªè¿è¡ä¸æ¬¡ 11292 if(typeof(translate.init_execute) != 'undefined'){ 11293 return; 11294 } 11295 translate.init_execute = 'å·²è¿è¡'; 11296 11297 //åå§å translate.node.data 11298 if(translate.node.data == null){ 11299 translate.node.data = new Map(); 11300 } 11301 //åå§å åå² 11302 if(translate.history.translateText.resultMap == null){ 11303 translate.history.translateText.resultMap = new Map(); 11304 } 11305 if(translate.history.translateText.originalMap == null){ 11306 translate.history.translateText.originalMap = new Map(); 11307 } 11308 //è¯ç³»ç¸å ³ 11309 if(translate.language.name == null){ 11310 translate.language.generateLanguageNameObject(); 11311 } 11312 11313 //çå¬ï¼å½ç¬¬ä¸æ¬¡è§¦å translate.execute() æ¶ï¼æ§è¡ 11314 translate.lifecycle.execute.start.push(function(uuid, to){ 11315 //åªå¨ç¬¬ä¸æ¬¡è§¦åæ¶ï¼æä¼åä¸äºåå§å 11316 if(typeof(translate.init_first_trigger_execute) != 'undefined'){ 11317 return; 11318 } 11319 translate.init_first_trigger_execute = 1; 11320 11321 //å°èªå®ä¹æ¯è¯å å ¥ translate.history.translateTexts ä¸ 11322 //console.log(translate.nomenclature.data); 11323 for(var currentLanguage in translate.nomenclature.data){ 11324 if (!translate.nomenclature.data.hasOwnProperty(currentLanguage)) { 11325 continue; 11326 } 11327 for(var targetLanguage in translate.nomenclature.data[currentLanguage]){ 11328 if (!translate.nomenclature.data[currentLanguage].hasOwnProperty(targetLanguage)) { 11329 continue; 11330 } 11331 for(var originalText in translate.nomenclature.data[currentLanguage][targetLanguage]){ 11332 if (!translate.nomenclature.data[currentLanguage][targetLanguage].hasOwnProperty(originalText)) { 11333 continue; 11334 } 11335 translate.history.translateText.add(originalText, translate.nomenclature.data[currentLanguage][targetLanguage][originalText]); 11336 } 11337 } 11338 } 11339 //å°å¿½ç¥ç¿»è¯çææ¬ï¼åºå®çï¼éæ£åï¼å å ¥ translate.history.translateTexts ä¸ 11340 for(var ignore_i = 0; ignore_i < translate.ignore.text.length; ignore_i++){ 11341 translate.history.translateText.add(translate.ignore.text[ignore_i], translate.ignore.text[ignore_i]); 11342 } 11343 11344 11345 11346 //è¿è¡å¤æï¼DOMæ¯å¦å è½½å®æäºï¼å¦ææªå è½½å®æå°±è§¦åäº translate.execute æ§è¡ï¼é£ä¹å¼¹åºè¦åæç¤º 11347 if(document.readyState == 'loading'){ 11348 translate.log('WARNING : The dom triggered translate.exece() before it was fully loaded, which does not comply with usage standards. The execution of translate.exece() should be done after the DOM is loaded'); 11349 translate.log('è¦åï¼DOM å¨å®å ¨å è½½ä¹å触åäº translate.execute() ï¼è¿ä¸ç¬¦å使ç¨è§èï¼å®¹æåºç°å¼å¸¸ãä½ åºè¯¥æ£æ¥ä¸ä¸ä½ ç代ç ï¼translate.execute() çæ§è¡åºè¯¥å¨DOMå è½½å®æå'); 11350 } 11351 11352 11353 //translate.listener.start() ç触åã 11354 if(translate.listener.use == true && translate.listener.isStart == false){ 11355 if(typeof(translate.listener.start) != 'undefined'){ 11356 translate.listener.addListener(); 11357 } 11358 } 11359 11360 //translate.request.lilstener.start() 触å 11361 if(translate.request.listener.use == true && translate.request.listener.isStart == false){ 11362 translate.request.listener.addListener(); 11363 } 11364 }); 11365 11366 //产ççæ°æ®åæ¶ï¼é¿å ä¸ç´æ©å¤§å ç¨å å 11367 if(typeof(translate.recycle) != 'undefined'){ 11368 // åå»ºå®æ¶å¨ï¼æ¯1åéæ§è¡ä¸æ¬¡ translate.recycle è¿è¡æ¸ çæ°æ®åå¨ 11369 setInterval(translate.recycle, 60 * 1000); 11370 } 11371 11372 }, 11373 /*js translate.init end*/ 11374 11375} 11376/* 11377 å°é¡µé¢ä¸çæænodeèç¹ï¼çæå ¶å¨å½å页é¢çå¯ä¸æ è¯å符串uuid 11378 弿ºä»åºï¼ https://github.com/xnx3/nodeuuid.js 11379 åçï¼ å½åèç¹çnodeName + å½åèç¹å¨ç¶èç¹ä¸ï¼å±äºç¬¬å 个 tagName ï¼ç¶å追个åç¶çº§è¿è¡åï¼å°nodeæ¬èº«+ç¶çº§+ç¶ç¶çº§+.... æ¼æ¥å¨ä¸èµ· 11380 注æï¼å¦æå¨ææ·»å ä¸ä¸ªèç¹å°ç¬¬ä¸ä¸ªï¼é£ä¹å ¶ä»èç¹å°±ä¼æ¤ä¸å»å¯¼è´èç¹æ è®°å¼å¸¸ 11381*/ 11382var nodeuuid = { 11383 index:function(node){ 11384 var parent = node.parentElement; 11385 if(parent == null){ 11386 return ''; 11387 } 11388 11389 var childs; 11390 if(typeof(node.tagName) == 'undefined'){ 11391 //console.log('undefi'); 11392 childs = parent.childNodes; 11393 //console.log(Array.prototype.indexOf.call(childs, node)); 11394 }else{ 11395 // 使ç¨querySelectorAll()æ¹æ³è·åææä¸nodeå ç´ ç¸åæ ç¾åçåèç¹ 11396 //childs = parent.querySelectorAll(node.tagName); 11397 11398 // ä¸ä½¿ç¨querySelectorAllï¼æå¨éååèç¹æ¥æ¾å°ç¸åæ ç¾åçåèç¹ 11399 childs = []; 11400 var allChilds = parent.childNodes; 11401 for (var i = 0; i < allChilds.length; i++) { 11402 if (allChilds[i].tagName === node.tagName) { 11403 childs.push(allChilds[i]); 11404 } 11405 } 11406 } 11407 var index = Array.prototype.indexOf.call(childs, node); 11408 //console.log('--------'+node.tagName); 11409 return node.nodeName + "" + (index+1); 11410 }, 11411 uuid:function(node){ 11412 var uuid = ''; 11413 var n = node; 11414 while(n != null){ 11415 var id = nodeuuid.index(n); 11416 //console.log(id); 11417 if(id != ''){ 11418 if(uuid != ''){ 11419 uuid = '_'+uuid; 11420 } 11421 uuid = id + uuid; 11422 } 11423 //console.log(uuid) 11424 n = n.parentElement; 11425 } 11426 return uuid; 11427 } 11428} 11429 11430 11431/*js copyright-notice start*/
11432//å»¶è¿è§¦åï¼æ¹ä¾¿æ¦æªèªå®ä¹ 11433setTimeout(function(){ 11434 translate.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'); 11435}, 3000); 11436/*js copyright-notice end*/ 11437 11438//åå§å 11439try{ 11440 translate.init(); 11441}catch(e){ } 11442 11443/*js amd-cmd-commonjs start*/ 11444/*å ¼å®¹ AMDãCMDãCommonJS è§è - start*/ 11445/** 11446 * å ¼å®¹ AMDãCMDãCommonJS è§è 11447 * node ç¯å¢ä½¿ç¨ï¼`npm i i18n-jsautotranslate` å®è£ å 11448 */ 11449;(function (root, factory) { 11450 if (typeof define === 'function' && define.amd) { 11451 define([], () => factory()); 11452 } else if (typeof module === 'object' && module.exports) { 11453 module.exports = factory(); 11454 } else { 11455 if(typeof(root) != 'undefined'){ 11456 root['translate'] = factory(); 11457 } 11458 } 11459})(this, function () { 11460 return translate; 11461}); 11462/*å ¼å®¹ AMDãCMDãCommonJS è§è - end*/ 11463/*js amd-cmd-commonjs end*/
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.