/* 鍥介檯鍖栵紝缃戦〉鑷姩缈昏瘧銆� 浣滆€咃細绠¢浄楦� 寮€鍘熶粨搴擄細https://github.com/xnx3/translate */ var translate = { /* * 褰撳墠鐨勭増鏈� */ version:'3.3.0.20240430', useVersion:'v2', //褰撳墠浣跨敤鐨勭増鏈紝榛樿浣跨敤v2. 鍙娇鐢� setUseVersion2(); //鏉ヨ缃娇鐢╲2 锛屽凡搴熷純锛屼富瑕佹槸鍖哄垎鏄惁鏄痸1鐗堟湰鏉ョ潃锛寁2璺焩3鐗堟湰鏄悓鏍风殑浣跨敤鏂瑰紡 setUseVersion2:function(){ translate.useVersion = 'v2'; console.log('鎻愮ず锛氳嚜 v2.10 涔嬪悗鐨勭増鏈粯璁ゅ氨鏄娇鐢╒2鐗堟湰锛堝綋鍓嶇増鏈负:'+translate.version+'锛夛紝 translate.setUseVersion2() 鍙互涓嶇敤鍐嶅姞杩欎竴琛屼簡銆傚綋鐒跺姞浜嗕篃鏃犳墍璋擄紝鍙槸鍔犱簡璺熶笉鍔犳槸瀹屽叏涓€鏍风殑銆�'); }, /* * 缈昏瘧鐨勫璞★紝涔熷氨鏄� new google.translate.TranslateElement(...) * 宸插簾寮冿紝v1浣跨敤鐨� */ translate:null, /* * 鏀寔鍝簺璇█鍒囨崲锛屽寘鎷細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 * 宸插簾寮冿紝璇蜂娇鐢� translate.selectLanguageTag.languages */ includedLanguages:'zh-CN,zh-TW,en', /* * 璧勬簮鏂囦欢url鐨勮矾寰� * 宸插簾寮冿紝v1浣跨敤鐨� */ resourcesUrl:'//res.zvo.cn/translate', /** * 榛樿鍑虹幇鐨勯€夋嫨璇█鐨� select 閫夋嫨妗嗭紝鍙互閫氳繃杩欎釜閫夋嫨鍒囨崲璇█銆� */ selectLanguageTag:{ /* v3.1 澧炲姞锛屽皢 select鍒囨崲璇█鐨勯€夋嫨妗嗚祴浜堝摢涓猧d锛岃繖閲屾槸鍏蜂綋鐨刬d鐨勫悕瀛椼€� 濡傛灉杩欎釜id涓嶅瓨鍦紝浼氬垱寤鸿繖涓猧d鐨勫厓绱� */ documentId:'translate', /* 鏄惁鏄剧ず select閫夋嫨璇█鐨勯€夋嫨妗嗭紝true鏄剧ず锛� false涓嶆樉绀恒€傞粯璁や负true */ show:true, /* 鏀寔鍝簺璇█鍒囨崲 v1.x 鐗堟湰鍖呮嫭锛歞e,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 v2.x 鐗堟湰鏍规嵁鍚庣缈昏瘧鏈嶅姟涓嶅悓锛屾敮鎸佺殑璇█涔熶笉鍚屻€傚叿浣撴敮鎸佸摢浜涳紝鍙€氳繃 http://api.translate.zvo.cn/doc/language.json.html 鑾峰彇 锛堝鏋滄偍绉佹湁閮ㄧ讲鐨勶紝灏嗚姹傚煙鍚嶆崲涓烘偍鑷繁绉佹湁閮ㄧ讲鐨勫煙鍚嶏級 */ languages:'', alreadyRender:false, //褰撳墠鏄惁宸叉覆鏌撹繃浜� true涓烘槸 v2.2澧炲姞 selectOnChange:function(event){ var language = event.target.value; translate.changeLanguage(language); }, //閲嶆柊缁樺埗 select 璇涓嬫媺閫夋嫨銆傛瘮濡傝繘琛屼簩娆″紑鍙戣繃translate.js锛屾墜鍔ㄨ繘琛屼簡璁剧疆 translate.to 锛屼絾鏄墜鍔ㄦ敼鍔ㄥ悗鐨勶紝鍦╯elect璇閫夋嫨妗嗕腑骞朵笉浼氳嚜鍔ㄨ繘琛屾敼鍙橈紝杩欐槸灏遍渶瑕佹墜鍔ㄩ噸鏂扮粯鍒朵竴涓� select璇閫夋嫨鐨勪笅鎷夐€夋嫨妗� refreshRender:function(){ // 鑾峰彇鍏冪礌 let element = document.getElementById(translate.selectLanguageTag.documentId+"SelectLanguage"); // 鍒犻櫎鍏冪礌 if (element) { element.parentNode.removeChild(element); } //璁剧疆涓烘湭 render 鐘舵€侊紝鍏佽杩涜 render translate.selectLanguageTag.alreadyRender = false; translate.selectLanguageTag.render(); }, /* 鑷畾涔夊垏鎹㈣瑷€鐨勬牱寮忔覆鏌� v3.2.4 澧炲姞 */ customUI:function(languageList){ //select鐨刼nchange浜嬩欢 var onchange = function(event){ translate.selectLanguageTag.selectOnChange(event); } //鍒涘缓 select 鏍囩 var selectLanguage = document.createElement("select"); selectLanguage.id = translate.selectLanguageTag.documentId+'SelectLanguage'; selectLanguage.className = translate.selectLanguageTag.documentId+'SelectLanguage'; for(var i = 0; i 0){ //璁剧疆浜嗚嚜瀹氫箟鏄剧ず鐨勮瑷€ //閮借浆灏忓啓鍒ゆ柇 var langs_indexof = (','+translate.selectLanguageTag.languages+',').toLowerCase(); //console.log(langs_indexof) if(langs_indexof.indexOf(','+languageList[i].id.toLowerCase()+',') < 0){ //娌″彂鐜帮紝閭d笉鏄剧ず杩欎釜璇锛岃皟鍑� continue } } /*鍒ゆ柇榛樿瑕侀€変腑鍝釜璇█*/ if(translate.to != null && typeof(translate.to) != 'undefined' && translate.to.length > 0){ //璁剧疆浜嗙洰鏍囪瑷€锛岄偅灏辫繘琛屽垽鏂樉绀虹洰鏍囪瑷€ if(translate.to == languageList[i].id){ option.setAttribute("selected",'selected'); } }else{ //娌¤缃洰鏍囪瑷€锛岄偅榛樿閫変腑褰撳墠鏈湴鐨勮绉� if(languageList[i].id == translate.language.getLocal()){ option.setAttribute("selected",'selected'); } } option.appendChild(document.createTextNode(languageList[i].name)); selectLanguage.appendChild(option); } //澧炲姞 onchange 浜嬩欢 if(window.addEventListener){ // Mozilla, Netscape, Firefox selectLanguage.addEventListener('change', onchange,false); }else{ // IE selectLanguage.attachEvent('onchange',onchange); } //灏唖elect鍔犲叆杩涚綉椤垫樉绀� document.getElementById(translate.selectLanguageTag.documentId).appendChild(selectLanguage); }, render:function(){ //v2澧炲姞 if(translate.selectLanguageTag.alreadyRender){ return; } translate.selectLanguageTag.alreadyRender = true; //鍒ゆ柇濡傛灉涓嶆樉绀簊elect閫夋嫨璇█锛岀洿鎺ュ氨闅愯棌鎺� if(!translate.selectLanguageTag.show){ return; } //鍒ゆ柇translate 鐨刬d鏄惁瀛樺湪锛屼笉瀛樺湪灏卞垱寤轰竴涓� if(document.getElementById(translate.selectLanguageTag.documentId) == null){ var body_trans = document.getElementsByTagName('body')[0]; var div = document.createElement("div"); //鍒涘缓涓€涓猻cript鏍囩 div.id=translate.selectLanguageTag.documentId; body_trans.appendChild(div); }else{ //瀛樺湪锛岄偅涔堝垽鏂竴涓� select鏄惁瀛樺湪锛岃鏄瓨鍦ㄥ氨涓嶉噸澶嶅垱寤轰簡 if(document.getElementById(translate.selectLanguageTag.documentId+'SelectLanguage') != null){ //select瀛樺湪浜嗭紝灏变笉閲嶅鍒涘缓浜� return; } } //浠庢湇鍔″櫒鍔犺浇鏀寔鐨勮瑷€搴� translate.request.post(translate.request.api.language, {}, function(data){ if(data.result == 0){ console.log('load language list error : '+data.info); return; } translate.selectLanguageTag.customUI(data.list); /* try{ document.getElementById('translateSelectLanguage').style.width = '94px'; }catch(e){ console.log(e);} */ }); } }, /* * 褰撳墠鏈湴璇█ * 宸插簾寮冿紝v1浣跨敤鐨� */ //localLanguage:'zh-CN', localLanguage:'zh-CN', /** * google缈昏瘧鎵ц鐨� * 宸插簾寮冿紝v1浣跨敤鐨� */ googleTranslateElementInit:function(){ var selectId = ''; if(document.getElementById('translate') != null){ // && document.getElementById('translate').innerHTML.indexOf('translateSelectLanguage') > 0 //宸茬粡鍒涘缓杩囦簡,瀛樺湪 selectId = 'translate'; } translate.translate = new google.translate.TranslateElement( { //杩欏弬鏁版病鐢紝璇峰拷鐣� pageLanguage: 'zh-CN', //涓€鍏�80绉嶈瑷€閫夋嫨锛岃繖涓槸浣犻渶瑕佺炕璇戠殑璇█锛屾瘮濡備綘鍙渶瑕佺炕璇戞垚瓒婂崡鍜岃嫳璇紝杩欓噷灏卞彧鍐檈n,vi //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', includedLanguages: translate.selectLanguageTag.languages, //閫夋嫨璇█鐨勬牱寮忥紝杩欎釜鏄潰鏉匡紝杩樻湁涓嬫媺妗嗙殑鏍峰紡锛屽叿浣撶殑璁颁笉鍒颁簡锛屾壘涓嶅埌api~~ layout: 0, //鑷姩鏄剧ず缈昏瘧妯箙锛屽氨鏄炕璇戝悗椤堕儴鍑虹幇鐨勯偅涓紝鏈夌偣涓戯紝璁剧疆杩欎釜灞炴€т笉璧蜂綔鐢ㄧ殑璇濓紝璇风湅鏂囩珷搴曢儴鐨勫叾浠栨柟娉� //autoDisplay: false, //disableAutoTranslation:false, //杩樻湁浜涘叾浠栧弬鏁帮紝鐢变簬鍘熸彃浠朵笉鍐嶇淮鎶わ紝鎵句笉鍒拌缁哸pi浜嗭紝灏嗗氨浜嗭紝瀹炲湪涓嶈鐩存帴涓奷om鎿嶄綔 }, selectId //瑙﹀彂鎸夐挳鐨刬d ); }, /** * 鍒濆鍖栵紝濡傚姞杞絡s銆乧ss璧勬簮 * 宸插簾寮冿紝v1浣跨敤鐨� */ /* v2.11.11.20240124 褰诲簳娉ㄩ噴鎺夛紝鏈夋柊鐨刬nit鏂规硶鏇夸唬 init:function(){ var protocol = window.location.protocol; if(window.location.protocol == 'file:'){ //鏈湴鐨勶紝閭e氨鐢╤ttp protocol = 'http:'; } if(this.resourcesUrl.indexOf('://') == -1){ //杩樻病璁剧疆杩囷紝杩涜璁剧疆 this.resourcesUrl = protocol + this.resourcesUrl; } //this.resourcesUrl = 'file://G:/git/translate'; }, */ /** * 鎵ц缈昏瘧鎿嶄綔 * 宸插簾寮冿紝v1浣跨敤鐨� */ execute_v1:function(){ console.log('=====ERROR======'); console.log('The v1 version has been discontinued since 2022. Please use the latest V3 version and refer to: http://translate.zvo.cn/41162.html'); }, /** * 璁剧疆Cookie锛屽け鏁堟椂闂翠竴骞淬€� * @param name * @param value * * 宸插簾寮冿紝v1浣跨敤鐨� */ setCookie:function (name,value){ var cookieString=name+"="+escape(value); document.cookie=cookieString; }, //鑾峰彇Cookie銆傝嫢鏄笉瀛樺啀锛岃繑鍥炵┖瀛楃涓� //* 宸插簾寮冿紝v1浣跨敤鐨� getCookie:function (name){ var strCookie=document.cookie; var arrCookie=strCookie.split("; "); for(var i=0;i 0){ return cookieValue.substr(cookieValue.lastIndexOf('/')+1,cookieValue.length-1); }else{ return translate.localLanguage; } }, /** * 鍒囨崲璇█锛屾瘮濡傚垏鎹负鑻辫銆佹硶璇� * @param languageName 瑕佸垏鎹㈢殑璇█璇銆備紶鍏ュ english * 浼氳嚜鍔ㄦ牴鎹紶鍏ョ殑璇█鏉ュ垽鏂娇鐢ㄥ摢绉嶇増鏈€傛瘮濡備紶鍏� en銆亃h-CN 绛夛紝鍒欎細浣跨敤v1.x鐗堟湰 * 浼犲叆 chinese_simplified 銆乪nglish 绛夛紝鍒欎細浣跨敤 v2.x鐗堟湰 */ changeLanguage:function(languageName){ //鍒ゆ柇浣跨敤鐨勬槸鍚︽槸v1.x 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,'; if(v1.indexOf(','+languageName+',') > -1){ //鐢ㄧ殑鏄痸1.x console.log('鎮ㄤ娇鐢ㄧ殑鏄痸1鐗堟湰鐨勫垏鎹㈣绉嶆柟寮忥紝v1宸插湪2021骞村氨浠ュ簾寮冿紝璇锋洿鎹负v2锛屽弬鑰冩枃妗o細 http://translate.zvo.cn/41549.html'); translate.check(); var googtrans = '/'+translate.localLanguage+'/'+languageName; //鍏堟竻绌烘硾瑙f瀽鍩熷悕鐨勮缃� var s = document.location.host.split('.'); if(s.length > 2){ var fanDomain = s[s.length-2]+'.'+s[s.length-1]; document.cookie = 'googtrans=;expires='+(new Date(1))+';domain='+fanDomain+';path=/'; document.cookie = 'googtrans='+googtrans+';domain='+fanDomain+';path=/'; } translate.setCookie('googtrans', ''+googtrans); location.reload(); return; } //鐢ㄧ殑鏄痸2.x鎴栨洿楂� //translate.setUseVersion2(); translate.useVersion = 'v2'; //鍒ゆ柇鏄惁鏄涓€娆$炕璇戯紝濡傛灉鏄紝閭e氨涓嶇敤鍒锋柊椤甸潰浜嗐€� true鍒欐槸闇€瑕佸埛鏂帮紝涓嶆槸绗竴娆$炕璇� if(translate.to != null && translate.to.length > 0){ //褰撳墠鐩爣鍊兼湁鍊硷紝涓旂洰鏍囪瑷€璺熷綋鍓嶈瑷€涓嶄竴鑷达紝閭e綋鍓嶆墠鏄凡缁忚缈昏瘧杩囩殑 if(translate.to != translate.language.getLocal()){ var isReload = true; //鏍囪瑕佸埛鏂伴〉闈� } } translate.to = languageName; translate.storage.set('to',languageName); //璁剧疆鐩爣缈昏瘧璇█ if(isReload){ location.reload(); //鍒锋柊椤甸潰 }else{ //涓嶇敤鍒锋柊锛岀洿鎺ョ炕璇� translate.execute(); //缈昏瘧 } }, /** * 鑷鎻愮ず锛岄€傜敤浜� v1.x锛� 鍦� v2.x涓凡搴熷純 * english * 宸插簾寮冿紝v1浣跨敤鐨� */ check:function(){ if(window.location.protocol == 'file:'){ console.log('\r\n---WARNING----\r\ntranslate.js 涓诲姩缈昏瘧缁勪欢鑷寮傚父锛屽綋鍓嶅崗璁槸file鍗忚锛岀炕璇戠粍浠惰鍦ㄦ甯哥殑绾夸笂http銆乭ttps鍗忚涓嬫墠鑳芥甯镐娇鐢ㄧ炕璇戝姛鑳絓r\n------------'); } }, /**************************** v2.0 */ to:'', //缈昏瘧涓虹殑鐩爣璇█锛屽 english 銆乧hinese_simplified //鐢ㄦ埛绗竴娆℃墦寮€缃戦〉鏃讹紝鑷姩鍒ゆ柇褰撳墠鐢ㄦ埛鎵€鍦ㄥ浗瀹朵娇鐢ㄧ殑鏄摢绉嶈瑷€锛屾潵鑷姩杩涜鍒囨崲涓虹敤鎴锋墍鍦ㄥ浗瀹剁殑璇銆� //濡傛灉浣跨敤鍚庯紝绗簩娆″湪鐢紝閭e氨浼樺厛浠ョ敤鎴锋墍閫夋嫨鐨勪负涓伙紝杩欎釜灏变笉绠$敤浜� //榛樿鏄痜alse锛屼笉浣跨敤锛屽彲璁剧疆true锛氫娇鐢� //浣跨敤 setAutoDiscriminateLocalLanguage 杩涜璁剧疆 autoDiscriminateLocalLanguage:false, documents:[], //鎸囧畾瑕佺炕璇戠殑鍏冪礌鐨勯泦鍚�,鍙缃涓紝濡傝缃細 document.getElementsByTagName('DIV') /* v2.11.5澧炲姞 姝e湪杩涜缈昏瘧鐨勮妭鐐癸紝浼氳褰曞埌姝ゅ銆� 杩欓噷鏄渶搴曠殑鑺傜偣浜嗭紝涓嶄細鍐嶆湁涓嬬骇浜嗐€傝繖涔熷氨鏄炕璇戠殑鏈€缁堣妭鐐癸紝涔熷氨鏄� translate.element.findNode() 鍙戠幇鐨勮妭鐐� 涔熷氨鏄壂鎻忓埌瑕佽繘琛岀炕璇戠殑鑺傜偣锛屽湪缈昏瘧鍓嶏紝鍔犲叆鍒拌繖閲岋紝鍦ㄨ繖涓妭鐐圭炕璇戠粨鏉熷悗锛屽皢杩欓噷闈㈣褰曠殑鑺傜偣鍒犳帀銆� 鏍煎紡濡� [ { node: node鑺傜偣鐨勫璞� number: 2 (褰撳墠姝e湪缈昏瘧杩涜涓殑娆℃暟锛屾瘮濡備竴涓妭鐐规湁涓嫳鏂囨贩鍚堢殑鏂囨湰锛岄偅涔堜腑鏂囥€佽嫳鏂� 浼氬悓鏃惰繘琛屼袱娆$炕璇戯紝涔熷氨鏄渶鍚庤杩涜涓ゆ鏇挎崲锛屼細瀵艰嚧杩欎釜node浜х敓涓ゆ鏀瑰姩銆傛瘡娆′究鏄�+1銆�-1) }, { ...... } ] 鐢熷懡鍛ㄦ湡锛� translate.execute() 鎵ц鍚庯紝浼氭壂鎻忚缈昏瘧鐨勫瓧绗︼紝鎵弿瀹屾垚鍚庨鍏堜細鍒ゆ柇缂撳瓨涓槸鍚︽湁锛屾槸鍚︿細鍛戒腑缂撳瓨锛屽鏋滅紦瀛樹腑鏈夛紝閭d箞鍦ㄥ姞鍏� task.add 涔嬪墠灏变細灏嗚繖涓繘琛岃褰� ++ 鍦ㄦ祻瑙堝櫒缂撳瓨娌℃湁鍛戒腑鍚庯紝鍒欎細閫氳繃缃戠粶api璇锋眰杩涜缈昏瘧锛屾鏃跺湪鍙戣捣缃戠粶璇锋眰鍓嶏紝浼氳繘琛岃褰� ++ 褰撲娇鐢� translate.listener.start() 鍚庯紝缃戦〉涓姩鎬佹覆鏌撶殑閮ㄥ垎浼氳Е鍙戠洃鍚紝瑙﹀彂鐩戝惉鍚庨鍏堜細鍒ゆ柇杩欎釜鑺傜偣鏄惁瀛樺湪浜庤繖閲岄潰姝e湪琚炕璇戯紝濡傛灉瀛樺湪閲岄潰锛岄偅涔堝拷鐣ワ紝 濡傛灉涓嶅瓨鍦ㄩ噷闈紝閭d箞鍐嶈繘琛� translate.execute(鍙樺姩鐨勮妭鐐�) 杩涜缈昏瘧 锛堝綋鐒舵墽琛岃繖涓炕璇戝悗锛岃嚜鐒朵篃灏卞張鎶婂畠鍔犲叆鍒版澶勮繘琛岃褰� ++锛� 銆愬敮涓€鐨勫噺鍘绘搷浣溿€� 鍦╰ask.execute() 涓紝缈昏瘧瀹屾垚骞朵笖娓叉煋鍒伴〉闈㈡墽琛屽畬鎴愬悗锛屼細瑙﹀彂寤惰繜50姣鍚庡皢杩欎釜缈昏瘧鐨勮妭鐐逛粠杩欓噷鍑忓幓 */ inProgressNodes:[], //缈昏瘧鏃跺拷鐣ョ殑涓€浜涗笢瑗匡紝姣斿蹇界暐鏌愪釜tag銆佹煇涓猚lass绛� ignore:{ tag:['style', 'script', 'link', 'pre', 'code'], class:['ignore','translateSelectLanguage'], id:[], /* 浼犲叆涓€涓厓绱狅紝鍒ゆ柇杩欎釜鍏冪礌鏄惁鏄蹇界暐鐨勫厓绱犮€� 杩欎釜浼氭壘鐖剁被锛岀湅鐪嬬埗绫讳腑鏄惁鍖呭惈鍦ㄥ拷鐣ョ殑涔嬩腑銆� return true鏄湪蹇界暐鐨勪箣涓紝false涓嶅啀蹇界暐鐨勪箣涓� */ isIgnore:function(ele){ if(ele == null || typeof(ele) == 'undefined'){ return false; } var parentNode = ele; var maxnumber = 100; //鏈€澶у惊鐜鏁帮紝閬垮厤姝诲惊鐜� while(maxnumber-- > 0){ if(parentNode == null || typeof(parentNode) == 'undefined'){ //娌℃湁鐖跺厓绱犱簡 return false; } //鍒ゆ柇Tag //var tagName = parentNode.nodeName.toLowerCase(); //tag鍚嶅瓧锛屽皬鍐� var nodename = translate.element.getNodeName(parentNode).toLowerCase(); //tag鍚嶅瓧锛屽皬鍐� if(nodename.length > 0){ //鏈塶odename if(nodename == 'body' || nodename == 'html' || nodename == '#document'){ //涓婂眰鍏冪礌宸茬粡鏄《绾у厓绱犱簡锛岄偅鑲畾灏变笉鏄簡 return false; } if(translate.ignore.tag.indexOf(nodename) > -1){ //鍙戠幇ignore.tag 褰撳墠鏄浜庤蹇界暐鐨� tag return true; } } //鍒ゆ柇class name if(parentNode.className != null){ var classNames = parentNode.className; if(classNames == null || typeof(classNames) != 'string'){ continue; } //console.log('className:'+typeof(classNames)); //console.log(classNames); classNames = classNames.trim().split(' '); for(var c_index = 0; c_index < classNames.length; c_index++){ if(classNames[c_index] != null && classNames[c_index].trim().length > 0){ //鏈夋晥鐨刢lass name锛岃繘琛屽垽鏂� if(translate.ignore.class.indexOf(classNames[c_index]) > -1){ //鍙戠幇ignore.class 褰撳墠鏄浜庤蹇界暐鐨� class return true; } } } } //鍒ゆ柇id if(parentNode.id != null && typeof(parentNode.id) != 'undefined'){ //鏈夋晥鐨刢lass name锛岃繘琛屽垽鏂� if(translate.ignore.id.indexOf(parentNode.id) > -1){ //鍙戠幇ignore.id 褰撳墠鏄浜庤蹇界暐鐨� id return true; } } //璧嬩簣鍒ゆ柇鐨勫厓绱犲悜涓婁竴绾� parentNode = parentNode.parentNode; } return false; } }, //鑷畾涔夌炕璇戞湳璇� nomenclature:{ /* 鏈琛� 涓€缁达細瑕佽浆鎹㈢殑璇锛屽 english 浜岀淮锛氱炕璇戣嚦鐨勭洰鏍囪绉嶏紝濡� english 涓夌淮锛氳杞崲鐨勫瓧绗︿覆锛屽 "浣犲ソ" 缁撴灉锛氳嚜瀹氫箟鐨勭炕璇戠粨鏋滐紝濡� 鈥淗allo鈥� */ data:new Array(), /* 鍘熷鏈琛紝鍙紪杈戠殑 涓€缁达細瑕佽嚜瀹氫箟鐩爣璇� 浜岀淮锛氶拡瀵圭殑鏄摢涓绉� 鍊硷細瑕佺炕璇戜负浠€涔堝唴瀹� 鍏惰缃 var data = new Array(); data['鐗堟湰'] = { english : 'banben', korean : 'BanBen' }; data['鍥介檯鍖�'] = { english : 'guojihua', korean : 'GuoJiHua' }; 銆愬凡杩囨椂銆� */ old_Data:[], /* set:function(data){ translate.nomenclature.data = data; }, */ set:function(data){ alert('璇峰皢 translate.nomenclature.set 鏇存崲涓� append锛屽叿浣撲娇鐢ㄥ彲鍙傝€冿細 https://github.com/xnx3/translate '); }, /* 鍚戝綋鍓嶆湳璇簱涓拷鍔犺嚜瀹氫箟鏈銆傚鏋滆拷鍔犵殑鏁版嵁閲嶅锛屼細鑷姩鍘婚噸 浼犲叆鍙傛暟锛� from 瑕佽浆鎹㈢殑璇 to 缈昏瘧鑷崇殑鐩爣璇 properties 灞炰簬閰嶇疆琛紝鏍煎紡濡傦細 浣犲ソ=Hello 涓栫晫=ShiJie */ append:function(from, to, properties){ if(typeof(translate.nomenclature.data[from]) == 'undefined'){ translate.nomenclature.data[from] = new Array(); } if(typeof(translate.nomenclature.data[from][to]) == 'undefined'){ translate.nomenclature.data[from][to] = new Array(); } //灏唒roperties杩涜鍒嗘瀽 //鎸夎鎷嗗垎 var line = properties.split('\n'); //console.log(line) for(var line_index = 0; line_index < line.length; line_index++){ var item = line[line_index].trim(); if(item.length < 1){ //绌鸿锛屽拷鐣� continue; } var kvs = item.split('='); //console.log(kvs) if(kvs.length != 2){ //涓嶆槸key銆乿alue鏋勬垚鐨勶紝蹇界暐 continue; } var key = kvs[0].trim(); var value = kvs[1].trim(); //console.log(key) if(key.length == 0 || value.length == 0){ //鍏朵腑鏌愪釜鏈夌┖锛屽垯蹇界暐 continue; } //鍔犲叆锛屽鏋滀箣鍓嶆湁鍔犲叆锛屽垯浼氳鐩� translate.nomenclature.data[from][to][key] = value; //console.log(local+', '+target+', key:'+key+', value:'+value); } //杩藉姞瀹屽悗锛屽鏁翠釜瀵硅薄鏁扮粍杩涜鎺掑簭锛宬ey瓒婂ぇ瓒婂湪鍓嶉潰 translate.nomenclature.data[from][to] = translate.util.objSort(translate.nomenclature.data[from][to]); }, //鑾峰彇褰撳墠瀹氫箟鐨勬湳璇〃 get:function(){ return translate.nomenclature.data; }, //瀵逛紶鍏ョ殑str瀛楃杩涜鏇挎崲锛屽皢鍏朵腑鐨勮嚜瀹氫箟鏈鎻愬墠杩涜鏇挎崲锛岀劧鍚庡皢鏇挎崲鍚庣殑缁撴灉杩斿洖 dispose:function(str){ if(str == null || str.length == 0){ return str; } //if(translate.nomenclature.data.length == 0){ // return str; //} //鍒ゆ柇褰撳墠缈昏瘧鐨勪袱绉嶈绉嶆槸鍚︽湁鑷畾涔夋湳璇簱 //console.log(typeof(translate.nomenclature.data[translate.language.getLocal()][translate.to])) if(typeof(translate.nomenclature.data[translate.language.getLocal()]) == 'undefined' || typeof(translate.nomenclature.data[translate.language.getLocal()][translate.to]) == 'undefined'){ return str; } //console.log(str) for(var originalText in translate.nomenclature.data[translate.language.getLocal()][translate.to]){ var translateText = translate.nomenclature.data[translate.language.getLocal()][translate.to][originalText]; if(typeof(translateText) == 'function'){ //杩涜寮傚父鐨勯澶勭悊璋冨嚭 continue; } var index = str.indexOf(originalText); if(index > -1){ //console.log('find -- '+originalText+', \t'+translateText); if(translate.language.getLocal() == 'english'){ //濡傛灉鏈湴璇鏄嫳鏂囷紝閭d箞杩樿鍒ゆ柇瀹冪殑鍓嶅悗锛岄伩鍏嶆瘮濡傝鏇挎崲 is 灏� display 涓殑is缁欐浛鎹紝灏嗗崟璇嶇粰寮鸿鎷嗗垎浜� //鍒ゆ柇杩欎釜璇嶅墠闈㈡槸鍚︾鍚� var beforeChar = ''; //鍓嶉潰鐨勫瓧绗� if(index == 0){ //鍓嶉潰娌″埆鐨勫瓧绗︿簡锛岄偅鍓嶉潰鍚堥€� }else{ //鍓嶉潰鏈夊埆鐨勫瓧绗�,鍒ゆ柇鏄粈涔堝瓧绗︼紝濡傛灉鏄嫳鏂囷紝閭d箞杩欎釜鏄笉鑳借鎷嗗垎鐨勶紝瑕佸拷鐣� beforeChar = str.substr(index-1,1); //console.log('beforeChar:'+beforeChar+', str:'+str) var lang = translate.language.getCharLanguage(beforeChar); //console.log(lang); if(lang == 'english'){ //璋冨嚭锛屼笉鑳藉己鎷� continue; } } //鍒ゆ柇杩欎釜璇嶇殑鍚庨潰鏄惁绗﹀悎 var afterChar = ''; //鍚庨潰鐨勫瓧绗� if(index + originalText.length == str.length ){ //鍚庨潰娌″埆鐨勫瓧绗︿簡锛岄偅鍓嶉潰鍚堥€� //console.log(originalText+'锛� meile '+str) }else{ //鍚庨潰鏈夊埆鐨勫瓧绗�,鍒ゆ柇鏄粈涔堝瓧绗︼紝濡傛灉鏄嫳鏂囷紝閭d箞杩欎釜鏄笉鑳借鎷嗗垎鐨勶紝瑕佸拷鐣� afterChar = str.substr(index+originalText.length,1); var lang = translate.language.getCharLanguage(afterChar); if(lang == 'english'){ //璺冲嚭锛屼笉鑳藉己鎷� continue; } } str = str.replace(new RegExp(beforeChar+originalText+afterChar,'g'), beforeChar+translateText+afterChar); }else{ //鍏朵粬鎯呭喌锛屽姹夎銆佹眽璇瓑璇 str = str.replace(new RegExp(originalText,'g'), translateText); } } } return str; /* //閬嶅巻涓€缁� for(var originalText in translate.nomenclature.data){ var languageResult = translate.nomenclature.data[originalText]; if(typeof(languageResult) == 'function'){ //杩涜寮傚父鐨勯澶勭悊璋冨嚭 continue; } if(typeof(languageResult[translate.to]) == 'undefined'){ //console.log('und'); continue; } //var hash = translate.util.hash(originalText); //console.log(originalText+',\t'+str); if(str.indexOf(originalText) > -1){ //console.log('find -- '+originalText+', \t'+languageResult[translate.to]); str = str.replace(new RegExp(originalText,'g'),languageResult[translate.to]); } } return str; */ }, }, office:{ /* 缃戦〉涓婄炕璇戜箣鍚庯紝鑷姩瀵煎嚭褰撳墠椤甸潰鐨勬湳璇簱 闇€瑕佸厛鎸囧畾鏈湴璇锛屼細鑷姩灏嗘湰鍦拌绉嶈繘琛岄厤缃湳璇簱 */ export:function(){ if(translate.language.getLocal() == translate.language.getCurrent()){ alert('鏈湴璇璺熻缈昏瘧鐨勮绉嶄竴鑷达紝鏃犻渶瀵煎嚭'); return; } var text = ''; for(var uuid in translate.nodeQueue){ var queueValue = translate.nodeQueue[uuid]; for(var lang in translate.nodeQueue[uuid].list){ //console.log('------'+lang) if(typeof(lang) != 'string' || lang.length < 1){ continue; } //if(translate.language.getLocal() == lang){ //console.log(translate.nodeQueue[uuid].list[lang]); for(var hash in translate.nodeQueue[uuid].list[lang]){ //console.log(translate.nodeQueue[uuid].list[lang][hash].original); //console.log(translate.nodeQueue[uuid].list[lang][hash].original); text = text + '\n' + translate.nodeQueue[uuid].list[lang][hash].original + '='+translate.storage.get('hash_'+translate.language.getCurrent()+'_'+hash); } //} } } if(text.length > 0){ //鏈夊唴瀹� text = 'translate.office.append(\''+translate.language.getCurrent()+'\',`'+text+'\n`);'; //console.log(text); translate.util.loadMsgJs(); msg.popups({ text:'', width:'750px', height:'600px', padding:'1px', }); document.getElementById('msgPopupsTextarea').value = text; }else{ msg.alert('鏃犳湁鏁堝唴瀹癸紒'); } }, //鏄剧ず瀵煎嚭闈㈡澘 showPanel:function(){ let panel = document.createElement('div'); panel.setAttribute('id', 'translate_export'); panel.setAttribute('class','ignore'); //瀵煎嚭鎸夐挳 let button = document.createElement('button'); button.onclick = function() { translate.office.export(); }; button.innerHTML = '瀵煎嚭閰嶇疆淇℃伅'; 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;'); panel.appendChild(button); //璇存槑鏂囧瓧 let textdiv = document.createElement('div'); textdiv.innerHTML = '1. 棣栧厛灏嗗綋鍓嶈绉嶅垏鎹负浣犺缈昏瘧鐨勮绉�
2. 鐐瑰嚮瀵煎嚭鎸夐挳锛屽皢缈昏瘧鐨勯厤缃俊鎭鍑�
3. 灏嗗鍑虹殑閰嶇疆淇℃伅绮樿创鍒颁唬鐮佷腑锛屽嵆鍙畬鎴�
鐐规杩涜鏌ラ槄璇︾粏浣跨敤璇存槑'; textdiv.setAttribute('style','font-size: 14px; padding: 12px;'); panel.appendChild(textdiv); panel.setAttribute('style', 'background-color: black; color: #fff; width: 320px; height: 206px; position: fixed; bottom: 50px; right: 50px;'); //鎶婂厓绱犺妭鐐规坊鍔犲埌body鍏冪礌鑺傜偣涓垚涓哄叾瀛愯妭鐐癸紝鏀惧湪body鐨勭幇鏈夊瓙鑺傜偣鐨勬渶鍚� document.body.appendChild(panel); translate.util.loadMsgJs(); }, /* 杩藉姞绂荤嚎缈昏瘧鏁版嵁銆傚鏋滆拷鍔犵殑鏁版嵁閲嶅锛屼細鑷姩鍘婚噸 浼犲叆鍙傛暟锛� from 瑕佽浆鎹㈢殑璇 to 缈昏瘧鑷崇殑鐩爣璇 properties 灞炰簬閰嶇疆琛紝鏍煎紡濡傦細 浣犲ソ=Hello 涓栫晫=ShiJie 杩欎釜浼犲叆鍙傛暟璺� translate.nomenclature.append 鐨勪紶鍏ュ弬鏁版牸寮忔槸涓€鑷寸殑 */ append:function(to, properties){ //console.log(properties) //灏唒roperties杩涜鍒嗘瀽 //鎸夎鎷嗗垎 var line = properties.split('\n'); //console.log(line) for(var line_index = 0; line_index < line.length; line_index++){ var item = line[line_index].trim(); if(item.length < 1){ //绌鸿锛屽拷鐣� continue; } var kvs = item.split('='); //console.log(kvs) if(kvs.length != 2){ //涓嶆槸key銆乿alue鏋勬垚鐨勶紝蹇界暐 continue; } var key = kvs[0]; var value = kvs[1]; //console.log(key) if(key.length == 0 || value.length == 0){ //鍏朵腑鏌愪釜鏈夌┖锛屽垯蹇界暐 continue; } //console.log('set---'+key); //鍔犲叆 storate translate.storage.set('hash_'+to+'_'+translate.util.hash(key), value); } }, }, setAutoDiscriminateLocalLanguage:function(){ translate.autoDiscriminateLocalLanguage = true; }, /* 寰呯炕璇戠殑椤甸潰鐨刵ode闃熷垪 涓€缁达細key:uuid锛屼篃灏辨槸execute姣忔鎵ц閮戒細鍒涘缓涓€涓炕璇戦槦鍒楋紝杩欎釜鏄炕璇戦槦鍒楃殑鍞竴鏍囪瘑銆� value: k/v 浜岀淮锛氬璞″舰鎬侊紝鍏蜂綋鏈夛細 key:expireTime 褰撳墠涓€缁存暟缁刱ey鐨勮繃鏈熸椂闂达紝鍒拌揪杩囨湡鏃堕棿浼氳嚜鍔ㄥ垹闄ゆ帀杩欎釜涓€缁存暟缁勩€傚鏋�<0鍒欎唬琛ㄦ案涓嶅垹闄わ紝甯搁┗鍐呭瓨 value:list 寰呯炕璇戠殑椤甸潰鐨刵ode闃熷垪 涓夌淮锛氶拡瀵逛簩缁寸殑value锛� key:english銆乧hinese_simplified绛夎绉嶏紝杩欓噷鐨刱ey渚挎槸瀵箆alue鐨勫垽鏂紝鍙杤alue涓殑瑕佺炕璇戠殑璇嶆槸浠€涔堣绉嶏紝瀵瑰叾杩涜浜嗚绉嶅垎绫� value: k/v 鍥涚淮锛氶拡瀵逛笁缁寸殑value锛� key:瑕佺炕璇戠殑璇嶏紙缁忚繃璇鍒嗗壊鐨勶級鐨刪ash锛� value: node鏁扮粍 浜旂淮锛氶拡瀵瑰洓缁寸殑value锛� 杩欐槸涓璞★紝 鍏朵腑 original: 鏄笁缁寸殑key鐨刪ash鐨勫師濮嬫枃瀛楋紝涔熷氨鏄� node 涓殑鍘熷鏂囧瓧銆� cacheHash: 濡傛灉缈昏瘧鏃跺尮閰嶅埌浜嗚嚜瀹氫箟鏈搴撲腑鐨勮瘝锛岄偅涔堢炕璇戝畬鍚庡瓨鍏ュ埌缂撳瓨涓椂锛屽叾缂撳瓨鐨勭炕璇戝墠瀛楃涓插凡缁忎笉鏄痮riginal锛岃€屾槸鍖归厤瀹屾湳璇簱鍚庣殑鏂囨湰鐨刪ash浜嗐€傛墍浠ヨ繖閲岄澶栧澧炲姞浜嗚繖涓睘鎬с€傚鏋滃尮閰嶄簡鏈搴擄紝閭h繖閲屽氨鏄杩涜缂撳瓨鐨勭炕璇戝墠鏂囨湰鐨刪ash锛屽鏋滄湭浣跨敤鏈搴擄紝杩欓噷灏辫窡鍏秌ey-hash 鐩稿悓銆� translateText: 閽堝 original 鐨勭粡杩囧姞宸ヨ繃鐨勬枃瀛楋紝姣斿缁忚繃鑷畾涔夋湳璇搷浣滃悗鐨勶紝寰呯炕璇戠殑鏂囧瓧銆� nodes: 鏈夊摢浜沶ode鍏冪礌涓寘鍚簡杩欎釜璇嶏紝閮戒細鍦ㄨ繖閲岃褰� 鍏淮锛氶拡瀵逛簲缁寸殑 nodes锛屽皢鍚勪釜鍏蜂綋鐨� node 浠ュ強 鍏舵搷浣滅殑 attribute 浠ユ暟缁勫舰寮忓垪鍑� 涓冪淮锛氶拡瀵瑰叚缁村垪鍑虹殑nodes鏁扮粍锛屽叾涓寘鍚細 node: 鍏蜂綋鎿嶄綔鐨刵ode鍏冪礌 attribute: 涔熷氨鏄炕璇戞枃鏈拡瀵圭殑鏄粈涔堬紝鏄痭ode鏈韩锛坣odeValue锛夛紝杩樻槸 node 鐨勬煇涓睘鎬э紝姣斿title灞炴€э紝杩欏垯鏄缃负 "title"銆傚鏋滆繖閲屼笉涓虹┖锛岄偅灏辨槸閽堝鐨勫睘鎬ф搷浣滅殑銆� 濡傛灉杩欓噷涓虹┖鎴栬€卽ndefined 锛岄偅灏辨槸閽堝node鏈韩锛屼篃灏辨槸 nodeValue 鐨勫瓧绗︿覆鎿嶄綔鐨� beforeText: node鍏冪礌涓繘琛岀炕璇戠粨鏋滆祴浜堟椂锛岄澶栧湪缈昏瘧缁撴灉鐨勫墠闈㈠姞涓婄殑瀛楃涓层€傚叾搴旂敤鍦烘櫙涓猴紝濡傛灉涓嫳鏂囨贩鍚堝満鏅笅锛岄伩鍏嶄腑鏂囪窡鑻辨枃鎸ㄧ潃瀵艰嚧缈昏瘧涓鸿嫳璇悗锛岃繛鍒颁竴鍧椾簡銆傞粯璁ゆ槸绌哄瓧绗︿覆 '' afterText: node鍏冪礌涓繘琛岀炕璇戠粨鏋滆祴浜堟椂锛岄澶栧湪缈昏瘧缁撴灉鐨勫悗闈㈠姞涓婄殑瀛楃涓层€傚叾搴旂敤鍦烘櫙涓猴紝濡傛灉涓嫳鏂囨贩鍚堝満鏅笅锛岄伩鍏嶄腑鏂囪窡鑻辨枃鎸ㄧ潃瀵艰嚧缈昏瘧涓鸿嫳璇悗锛岃繛鍒颁竴鍧椾簡銆傞粯璁ゆ槸绌哄瓧绗︿覆 '' 鐢熷懡鍛ㄦ湡锛� 褰揺xecute()鎵ц鏃跺垱寤猴紝 褰揺xecute缁撴潫锛堝叾涓殑鎵€鏈塺equest鎺ユ敹鍒板搷搴斿苟娓叉煋瀹屾瘯锛夋椂閿€姣侊紙褰撳墠鏆傛椂涓嶉攢姣侊紝浠ユ柟渚胯皟璇曪級 */ nodeQueue:{}, //鎸囧畾瑕佺炕璇戠殑鍏冪礌鐨勯泦鍚�,鍙紶鍏ヤ竴涓厓绱犳垨澶氫釜鍏冪礌 //濡傝缃竴涓厓绱狅紝鍙紶鍏ュ锛� document.getElementsById('test') //濡傝缃涓厓绱狅紝鍙紶鍏ュ锛� document.getElementsByTagName('DIV') setDocuments:function(documents){ if (documents == null || typeof(documents) == 'undefined') { return; } if(typeof(documents.length) == 'undefined'){ //涓嶆槸鏁扮粍锛屾槸鍗曚釜鍏冪礌 translate.documents[0] = documents; }else{ //鏄暟缁勶紝鐩存帴璧嬩簣 translate.documents = documents; } //娓呯┖缈昏瘧闃熷垪锛屼笅娆$炕璇戞椂閲嶆柊妫€绱� translate.nodeQueue = {}; //console.log('set documents , clear translate.nodeQueue'); }, //鑾峰彇褰撳墠鎸囧畾缈昏瘧鐨勫厓绱狅紙鏁扮粍褰㈠紡 [document,document,...]锛� //濡傛灉鐢ㄦ埛鏈娇鐢╯etDocuments 鎸囧畾鐨勶紝閭d箞杩斿洖鏁翠釜缃戦〉 getDocuments:function(){ if(translate.documents != null && typeof(translate.documents) != 'undefined' && translate.documents.length > 0){ // setDocuments 鎸囧畾鐨� return translate.documents; }else{ //鏈娇鐢� setDocuments鎸囧畾锛岄偅灏辨槸鏁翠釜缃戦〉浜� return document.all; //缈昏瘧鎵€鏈夌殑 } }, listener:{ //褰撳墠椤甸潰鎵撳紑鍚庯紝鏄惁宸茬粡鎵ц瀹宔xecute() 鏂规硶杩涜缈昏瘧浜嗭紝鍙鎵ц瀹屼竴娆★紝杩欓噷渚挎槸true銆� 锛堝绉嶈瑷€鐨凙PI璇锋眰瀹屾瘯骞跺凡娓叉煋html锛� //isExecuteFinish:false, //鏄惁宸茬粡浣跨敤浜� translate.listener.start() 浜嗭紝濡傛灉浣跨敤浜嗭紝閭h繖閲屼负true锛屽娆¤皟鐢� translate.listener.start() 鍙湁绗竴娆℃湁鏁� isStart:false, //translate.listener.start(); //寮€鍚痟tml椤甸潰鍙樺寲鐨勭洃鎺э紝瀵瑰彉鍖栭儴鍒嗕細杩涜鑷姩缈昏瘧銆傛敞鎰忥紝杩欓噷鍙樺寲鍖哄煙锛屾槸鎸囦娇鐢� translate.setDocuments(...) 璁剧疆鐨勫尯鍩熴€傚鏋滄湭璁剧疆锛岄偅涔堜负鐩戞帶鏁翠釜缃戦〉鐨勫彉鍖� start:function(){ translate.temp_linstenerStartInterval = setInterval(function(){ if(document.readyState == 'complete'){ //dom鍔犺浇瀹屾垚锛岃繘琛屽惎鍔� clearInterval(translate.temp_linstenerStartInterval);//鍋滄 translate.listener.addListener(); } //if(translate.listener.isExecuteFinish){ //鎵ц瀹岃繃涓€娆★紝閭f墠鑳戒娇鐢� /*if(translate.listener.isStart){ //宸插紑鍚簡 return; }*/ //console.log('translate.temp_linstenerStartInterval Finish!'); //} }, 300); }, //澧炲姞鐩戝惉锛屽紑濮嬬洃鍚€傝繖涓笉瑕佺洿鎺ヨ皟鐢紝闇€瑕佷娇鐢ㄤ笂闈㈢殑 start() 寮€鍚� addListener:function(){ translate.listener.isStart = true; //璁板綍宸叉墽琛岃繃鍚姩鏂规硶浜� // 瑙傚療鍣ㄧ殑閰嶇疆锛堥渶瑕佽瀵熶粈涔堝彉鍔級 translate.listener.config = { attributes: true, childList: true, subtree: true, characterData: true, attributeOldValue:true, characterDataOldValue:true }; // 褰撹瀵熷埌鍙樺姩鏃舵墽琛岀殑鍥炶皟鍑芥暟 translate.listener.callback = function(mutationsList, observer) { var documents = []; //鏈夊彉鍔ㄧ殑鍏冪礌 //console.log('--------- lisetner 鍙樺姩'); // Use traditional 'for loops' for IE 11 for(let mutation of mutationsList) { let addNodes = []; if (mutation.type === 'childList') { if(mutation.addedNodes.length > 0){ //澶氫簡缁勪欢 addNodes = mutation.addedNodes; //documents.push.apply(documents, mutation.addedNodes); }else if(mutation.removedNodes.length > 0){ //console.log('remove:'); //console.log(mutation.removedNodes); }else{ //console.log('not find:'); //console.log(mutation); } }else if (mutation.type === 'attributes') { //console.log('The ' + mutation.attributeName + ' attribute was modified.'); }else if(mutation.type === 'characterData'){ //鍐呭鏀瑰彉 addNodes = [mutation.target]; //documents.push.apply(documents, [mutation.target]); } //鍘婚噸骞跺姞鍏� documents for(let item of addNodes){ //console.log(item); //鍒ゆ柇鏄惁宸茬粡鍔犲叆杩囦簡锛屽鏋滃凡缁忓姞鍏ヨ繃浜嗭紝灏变笉閲嶅鍔犱簡 var isFind = false; for(var di = 0; di < documents.length; di++){ if(documents[di].isSameNode(item)){ isFind = true; break; } } if(isFind){ break; } documents.push.apply(documents, [item]); } } //console.log(documents.length); if(documents.length > 0){ //鏈夊彉鍔紝闇€瑕佺湅鐪嬫槸鍚﹂渶瑕佺炕璇戯紝寤惰繜10姣鎵ц //鍒ゆ柇鏄惁灞炰簬鍦ㄦ鍦ㄧ炕璇戠殑鑺傜偣锛岄噸鏂扮粍鍚堝嚭鏂扮殑瑕佺炕璇戠殑node闆嗗悎 var translateNodes = []; //console.log(translate.inProgressNodes.length); for(let ipnode of documents){ //console.log('---type:'+ipnode.nodeType); var find = false; for(var ini = 0; ini < translate.inProgressNodes.length; ini++){ if(translate.inProgressNodes[ini].node.isSameNode(ipnode)){ //鏈夎褰曚簡锛岄偅涔堝拷鐣ヨ繖涓猲ode锛岃繖涓猲ode鏄洜涓虹炕璇戞墠瀵艰嚧鐨勫彉鍔� //console.log('鍙戠幇鐩稿悓'); find = true; break; } } if(find){ continue; } //涓嶇浉鍚岋紝鎵嶈拷鍔犲埌鏂扮殑 translateNodes translateNodes.push(ipnode); //console.log('listener ++ '+ipnode.nodeValue); //console.log(ipnode); } if(translateNodes.length < 1){ return; } //console.log('translateNodeslength: '+translateNodes.length); setTimeout(function() { //console.log(translateNodes); translate.execute(translateNodes); //鎸囧畾瑕佺炕璇戠殑鍏冪礌鐨勯泦鍚�,鍙紶鍏ヤ竴涓垨澶氫釜鍏冪礌銆傚鏋滀笉璁剧疆锛岄粯璁ょ炕璇戞暣涓綉椤� }, 10); //杩欎釜瑕佹瘮 task.execute() 涓殑 settimeout 寤惰繜鎵ц鍒犻櫎 translate.inpr.....nodes 鐨勬椂闂磋灏忥紝鐩殑鏄墠涓€涓彂鐢熷彉鍔ㄥ悗锛岃鍏� inpr...nodes 鐒跺悗缈昏瘧瀹屾垚鍚庤妭鐐瑰彂鐢熷彉鍖栧張瑙﹀彂浜唋istener锛屾鏃� inpr....nodes 杩樻湁锛岄偅涔堣繖涓彉鍖栧皢涓嶅仛澶勭悊锛岀劧鍚� inp.....nodes 鍐嶅垹闄よ繖涓爣璁� } }; // 鍒涘缓涓€涓瀵熷櫒瀹炰緥骞朵紶鍏ュ洖璋冨嚱鏁� translate.listener.observer = new MutationObserver(translate.listener.callback); // 浠ヤ笂杩伴厤缃紑濮嬭瀵熺洰鏍囪妭鐐� var docs = translate.getDocuments(); for(var docs_index = 0; docs_index < docs.length; docs_index++){ var doc = docs[docs_index]; if(doc != null){ translate.listener.observer.observe(doc, translate.listener.config); } } }, /* 姣忓綋鎵ц瀹屼竴娆℃覆鏌撲换鍔★紙缈昏瘧锛夋椂浼氳Е鍙戞銆傛敞鎰忛〉闈竴娆$炕璇戜細瑙﹀彂澶氫釜娓叉煋浠诲姟銆傛櫘閫氭儏鍐典笅锛屼竴娆¢〉闈㈢殑缈昏瘧鍙兘浼氳Е鍙戜袱涓夋娓叉煋浠诲姟銆� 鍙﹀濡傛灉椤甸潰涓湁ajax浜や簰鏂归潰鐨勪俊鎭紝鏃讹紝姣忔ajax淇℃伅鍒锋柊鍚庯紝涔熶細杩涜缈昏瘧锛屼篃鏄竴娆℃覆鏌撲换鍔°€� 杩欎釜鏄负浜嗘柟渚挎墿灞曚娇鐢ㄣ€傛瘮濡傚湪layui涓墿灞曪紝鐩戞帶 select 鐨勬覆鏌� */ renderTaskFinish:function(renderTask){ //console.log(renderTask); } }, //瀵圭炕璇戠粨鏋滆繘琛屾浛鎹㈡覆鏌撶殑浠诲姟锛屽皢寰呯炕璇戝唴瀹规浛鎹负缈昏瘧鍐呭鐨勮繃绋� renderTask:class{ constructor(){ /* * 浠诲姟鍒楄〃 * 涓€缁存暟缁� [hash] = tasks; tasks 鏄涓猼ask鐨勬暟缁勯泦鍚� * 浜岀淮鏁扮粍 [task,task,...]锛屽瓨鏀惧涓� task锛屾瘡涓猼ask鏄竴涓浛鎹€€傝繖閲岀殑鏁扮粍鏄悓涓€涓猲odeValue鐨勫涓猼ask鏇挎崲 * 涓夌淮鏁扮粍 task['originalText'] 銆� task['resultText'] 瀛樻斁瑕佹浛鎹㈢殑瀛楃涓� task['attribute'] 瀛樻斁瑕佹浛鎹㈢殑灞炴€э紝姣斿 a鏍囩鐨則itle灞炴€с€� 濡傛灉鏄洿鎺ユ浛鎹ode.nodeValue 锛岄偅杩欎釜娌℃湁 */ this.taskQueue = []; /* * 瑕佽繘琛岀炕璇戠殑node鍏冪礌锛� * 涓€缁存暟缁� key:node.nodeValue 鐨� hash 锛� value:node鐨勫厓绱犳暟缁� * 浜岀淮鏁扮粍锛屼篃灏辨槸value涓寘鍚殑node闆嗗悎 [node,node,...] */ this.nodes = []; } /** * 鍚戞浛鎹㈤槦鍒椾腑澧炲姞鏇挎崲浠诲姟 * node:瑕佹浛鎹㈢殑瀛楃灞炰簬閭d釜node鍏冪礌 * originalText:寰呯炕璇戠殑瀛楃 * resultText:缈昏瘧鍚庣殑缁撴灉瀛楃 * attribute: 瑕佹浛鎹㈢殑鏄摢涓睘鎬э紝姣斿 a鏍囩鐨則itle灞炴€э紝杩欓噷渚挎槸浼犲叆title銆傚鏋滀笉鏄浛鎹㈠睘鎬э紝杩欓噷涓嶇敤浼犲叆锛屾垨鑰呬紶鍏ull */ add(node, originalText, resultText, attribute){ var nodeAnaly = translate.element.nodeAnalyse.get(node, attribute); //node瑙f瀽 //var hash = translate.util.hash(translate.element.getTextByNode(node)); //node涓唴瀹圭殑hash var hash = translate.util.hash(nodeAnaly['text']); //console.log('--------------'+hash); //console.log(nodeAnaly); //console.log(node); //console.log('originalText:'+originalText+', resultText:'+resultText+', attribute:'+attribute); /****** 鍔犲叆缈昏瘧鐨勫厓绱犻槦鍒� */ if(typeof(this.nodes[hash]) == 'undefined'){ this.nodes[hash] = new Array(); } this.nodes[hash].push(node); //console.log(node) /****** 鍔犲叆缈昏瘧鐨勪换鍔¢槦鍒� */ var tasks = this.taskQueue[hash]; if(tasks == null || typeof(tasks) == 'undefined'){ //console.log(node.nodeValue); tasks = new Array(); //浠诲姟鍒楄〃锛屽瓨鏀惧涓� task锛屾瘡涓猼ask鏄竴涓浛鎹€€傝繖閲岀殑鏁扮粍鏄悓涓€涓猲odeValue鐨勫涓猼ask鏇挎崲 } var task = new Array(); //v2.3.3 澧炲姞 -- 寮€濮� //杩欓噷瑕佽繘琛屽鐞嗭紝鍥犱负鏈夋椂鍊欑炕璇戝墠锛屽畠鍓嶆垨鑰呭悗鏄湁绌烘牸鐨勶紝浣嗘槸缈昏瘧鍚庝細鎶婂墠鎴栬€呭悗鐨勭┖鏍肩粰鑷姩寮勬病浜嗭紝濡傛灉鏄繖绉嶆儏鍐碉紝瑕佹墜鍔ㄨˉ涓� if (originalText.substr(0, 1) == ' ') { //console.log('绗竴涓瓧绗︽槸绌烘牸'); if(resultText.substr(0, 1) != ' '){ //缈昏瘧缁撴灉鐨勭涓€涓瓧绗︿笉鏄┖鏍硷紝閭d箞琛ヤ笂 resultText = ' ' + resultText; } } if (originalText.substr(originalText.length - 1, 1) === ' ') { //console.log('鏈€鍚庝竴涓瓧绗︽槸绌烘牸'); if(resultText.substr(0, 1) != ' '){ //缈昏瘧缁撴灉鐨勬渶鍚庝竴涓瓧绗︿笉鏄┖鏍硷紝閭d箞琛ヤ笂 resultText = resultText + ' '; } } //v2.3.3 澧炲姞 -- 缁撴潫 task['originalText'] = originalText; task['resultText'] = resultText; task['attribute'] = attribute; //console.log(task); tasks.push(task); this.taskQueue[hash] = tasks; /****** 鍔犲叆缈昏瘧鐨勪换鍔¢槦鍒� end */ } //杩涜鏇挎崲娓叉煋浠诲姟锛屽椤甸潰杩涜娓叉煋鏇挎崲缈昏瘧 execute(){ //鍏堝tasks浠诲姟闃熷垪鐨勬浛鎹㈣瘝杩涜鎺掑簭锛屽皢鍚屼竴涓猲ode鐨勬浛鎹㈣瘝鏈夊ぇ鍒板皬鎺掑垪锛岄伩鍏嶅厛鏇挎崲浜嗗皬鐨勶紝澶х殑鏇挎崲鏃舵壘涓嶅埌 for(var hash in this.taskQueue){ var tasks = this.taskQueue[hash]; if(typeof(tasks) == 'function'){ //杩涜寮傚父鐨勯澶勭悊璋冨嚭 continue; } //杩涜鎺掑簭,灏嗗師瀛楃涓查暱鐨勬斁鍓嶉潰锛岄伩鍏嶉€犳垚鏈夐儴鍒嗕笉缈昏瘧鐨勬儏鍐碉紙bug鏄厛缈昏瘧浜嗙煭鐨勶紝瀵艰嚧闀跨殑琚墦鏂€屾棤娉曡繘琛岄€傞厤锛� tasks.sort((a, b) => b.originalText.length - a.originalText.length); this.taskQueue[hash] = tasks; } //console.log('===========task========='); //console.log(this.taskQueue); //console.log(this.nodes); //console.log('===========task======end==='); //瀵筺odeQueue杩涜缈昏瘧 for(var hash in this.nodes){ var tasks = this.taskQueue[hash]; //鍙栧嚭褰撳墠node鍏冪礌瀵瑰簲鐨勬浛鎹换鍔� //var tagName = this.nodes[hash][0].nodeName; //浠ヤ笅鑺傜偣鐨則ag name //console.log(tasks); for(var node_index = 0; node_index < this.nodes[hash].length; node_index++){ //瀵硅繖涓猲ode鍏冪礌杩涜鏇挎崲缈昏瘧瀛楃 for(var task_index=0; task_index 0){ //50姣鍚庢墽琛岋紝浠ヤ究椤甸潰娓叉煋瀹屾瘯 var renderTask = this; setTimeout(function() { /** 鎵ц瀹屾垚鍚庯紝淇濆瓨缈昏瘧鐨勫巻鍙瞡ode **/ //灏嗗綋鍓嶇炕璇戝畬鎴愮殑node杩涜缂撳瓨璁板綍锛屼互node鍞竴鏍囪瘑涓簁ey锛� node銆佷互鍙妌ode褰撳墠缈昏瘧涔嬪悗鐨勫唴瀹逛负鍊艰繘琛岀紦瀛樸€傛柟渚夸笅涓€娆℃墽琛� translate.execute() 鏃讹紝鑻ュ€兼湭鍙樺寲鍒欎笉杩涜缈昏瘧 for(var hash in renderTask.nodes){ //console.log(translate.nodeQueue[uuid].list[lang][hash]) for(var nodeindex in renderTask.nodes[hash]){ //console.log(translate.nodeQueue[uuid].list[lang][hash].original); //var nodename = translate.element.getNodeName(translate.nodeQueue[uuid].list[lang][hash].nodes[0].node); //console.log("nodename:"+nodename); var analyse = translate.element.nodeAnalyse.get(renderTask.nodes[hash][0]); //analyse.text analyse.node var nodeid = nodeuuid.uuid(analyse.node); if(nodeid.length == 0){ //鍍忔槸input鐨刾laceholder 鏆傛椂娌¤€冭檻杩涘幓锛岃繖绉嶅氨鐩存帴蹇界暐浜� continue; } //鍔犲叆 /* if(typeof(translate.nodeHistory[nodeid]) == 'object'){ //宸茬粡鍔犲叆杩囦簡锛屽垽鏂畠鐨勫€兼槸鍚︽湁鍙戠敓杩囧彉鍖� if(translate.nodeHistory[nodeid].translateText == analyse.text){ //鍊肩浉鍚岋紝灏变笉鐢ㄥ啀鍔犲叆浜� continue; } } 杩欓噷灏变笉鐢ㄥ垽鏂簡锛岀洿鎺ュ悓姝ュ埌鏈€鏂扮殑锛屽洜涓哄悓涓€涓猲ode锛屽彲鑳芥湁鏈湴缂撳瓨鐩存帴鏇存柊锛岃繖鏍蜂細闈炲父蹇紝缃戠粶鐨勪細鎱�2绉掞紝鍥犳椂闂村鑷村悓姝ヤ笉鏄渶鏂扮殑 */ //console.log(analyse); //console.log('add-----'+analyse.text +', uuid:'+nodeid); //console.log(analyse.node); translate.nodeHistory[nodeid] = {}; translate.nodeHistory[nodeid].node = analyse.node; translate.nodeHistory[nodeid].translateText = analyse.text; } } //console.log(translate.nodeHistory); /** 鎵ц瀹屾垚鍚庯紝瑙﹀彂鐢ㄦ埛鑷畾涔夌殑缈昏瘧瀹屾垚鎵ц鍑芥暟 **/ translate.listener.renderTaskFinish(renderTask); }, 50); }else{ //console.log(this.taskQueue); //console.log('---this.taskQueue is null'); } } }, //鎵ц缈昏瘧鎿嶄綔銆傜炕璇戠殑鏄� nodeQueue 涓殑 //docs 濡傛灉浼犲叆锛岄偅涔堢炕璇戠殑鍙槸浼犲叆鐨勮繖涓猟ocs鐨勩€備紶鍏ュ [document.getElementById('xxx'),document.getElementById('xxx'),...] execute:function(docs){ if(typeof(docs) != 'undefined'){ //execute浼犲叆鍙傛暟锛屽彧鏈塿2鐗堟湰鎵嶆敮鎸� translate.useVersion = 'v2'; } if(translate.useVersion == 'v1'){ //if(this.to == null || this.to == ''){ //閲囩敤1.x鐗堟湰鐨勭炕璇戯紝浣跨敤google缈昏瘧 //translate.execute_v1(); //return; //v2.5.1澧炲姞 console.log('鎻愮ず锛歨ttps://github.com/xnx3/translate 鍦� v2.5 鐗堟湰涔嬪悗锛岀敱浜庤胺姝岀炕璇戣皟鏁达紝鍏嶈垂缈昏瘧閫氶亾涓嶅啀鏀寔锛屾墍浠1鐗堟湰鐨勭炕璇戞帴鍙d笉鍐嶈鏀寔锛寁1鍏ㄧ嚎涓嬫灦銆傝€冭檻鍒皏1宸蹭笉鑳戒娇鐢紝褰撳墠宸茶嚜鍔ㄥ垏鎹㈠埌v2鐗堟湰銆傚鏋滄偍浣跨敤涓彂鐜颁粈涔堝紓甯革紝璇烽拡瀵箆2鐗堟湰杩涜閫傞厤銆�'); translate.useVersion = 'v2'; } //鐗堟湰妫€娴� try{ translate.init(); }catch(e){ } /****** 閲囩敤 2.x 鐗堟湰鐨勭炕璇戯紝浣跨敤鑷湁缈昏瘧绠楁硶 */ //姣忔鎵цexecute锛岄兘浼氱敓鎴愪竴涓敮涓€uuid锛屼篃鍙互鍙仛闃熷垪鐨勫敮涓€鏍囪瘑锛屾瘡涓€娆℃墽琛宔xecute閮戒細鍒涘缓涓€涓嫭绔嬬殑缈昏瘧鎵ц闃熷垪 var uuid = translate.util.uuid(); //console.log('=====') //console.log(translate.nodeQueue); /* v2.4.3 灏嗗垵濮嬪寲鏀惧埌浜� translate.element.whileNodes 涓紝濡傛灉uuid瀵瑰簲鐨勬病鏈夛紝鍒欒嚜鍔ㄥ垱寤� translate.nodeQueue[uuid] = new Array(); //鍒涘缓 translate.nodeQueue[uuid]['expireTime'] = Date.now() + 120*1000; //鍒犻櫎鏃堕棿锛�10鍒嗛挓鍚庡垹闄� translate.nodeQueue[uuid]['list'] = new Array(); */ //console.log(translate.nodeQueue); //console.log('=====end') //濡傛灉椤甸潰鎵撳紑绗竴娆′娇鐢紝鍏堝垽鏂紦瀛樹腑鏈夋病鏈変笂娆′娇鐢ㄧ殑璇锛屼粠缂撳瓨涓彇鍑� if(translate.to == null || translate.to == ''){ var to_storage = translate.storage.get('to'); if(to_storage != null && typeof(to_storage) != 'undefined' && to_storage.length > 0){ translate.to = to_storage; } } //娓叉煋select閫夋嫨璇█ try{ translate.selectLanguageTag.render(); }catch(e){ console.log(e); } //鍒ゆ柇鏄惁杩樻湭鎸囧畾缈昏瘧鐨勭洰鏍囪瑷€ if(translate.to == null || typeof(translate.to) == 'undefined' || translate.to.length == 0){ //鏈寚瀹氾紝鍒ゆ柇濡傛灉鎸囧畾浜嗚嚜鍔ㄨ幏鍙栫敤鎴锋湰鍥借绉嶄簡锛岄偅涔堣繘琛岃幏鍙� if(translate.autoDiscriminateLocalLanguage){ translate.executeByLocalLanguage(); } //娌℃湁鎸囧畾缈昏瘧鐩爣璇█銆佸張娌¤嚜鍔ㄨ幏鍙栫敤鎴锋湰鍥借绉嶏紝鍒欎笉缈昏瘧 return; } //鍒ゆ柇鏈湴璇璺熻缈昏瘧鐨勭洰鏍囪绉嶆槸鍚︿竴鏍凤紝濡傛灉鏄竴鏍凤紝閭e氨涓嶉渶瑕佽繘琛屼换浣曠炕璇� if(translate.to == translate.language.getLocal()){ return; } /********** 缈昏瘧杩涜 */ //鍏堣繘琛屽浘鐗囩殑缈昏瘧鏇挎崲锛屾瘯绔熷浘鐗囪繕鏈夊姞杞界殑杩囩▼ translate.images.execute(); /* 杩涜缈昏瘧鎸囧畾鐨刵ode鎿嶄綔銆備紭鍏堢骇涓猴細 1. 杩欎釜鏂规硶宸茬粡鎸囧畾鐨勭炕璇� nodes 2. setDocuments 鎸囧畾鐨� 3. 鏁翠釜缃戦〉 鍏跺疄2銆�3閮芥槸閫氳繃 getDocuments() 鍙栵紝鍦╣etDocuments() 灏卞2銆�3杩涜浜嗗垽鏂� */ var all; if(typeof(docs) != 'undefined'){ //1. 杩欎釜鏂规硶宸茬粡鎸囧畾鐨勭炕璇� nodes if(docs == null){ //瑕佺炕璇戠殑鐩爣鍖哄煙涓嶅瓨鍦� console.log('translate.execute(...) 涓紶鍏ョ殑瑕佺炕璇戠殑鐩爣鍖哄煙涓嶅瓨鍦ㄣ€�'); return; } if(typeof(docs.length) == 'undefined'){ //涓嶆槸鏁扮粍锛屾槸鍗曚釜鍏冪礌 all = new Array(); all[0] = docs; }else{ //鏄暟缁勶紝鐩存帴璧嬩簣 all = docs; } }else{ //2銆�3 all = translate.getDocuments(); } //console.log('----瑕佺炕璇戠殑鐩爣鍏冪礌-----'); //console.log(all) //妫€绱㈢洰鏍囧唴鐨刵ode鍏冪礌 for(var i = 0; i< all.length & i < 20; i++){ var node = all[i]; translate.element.whileNodes(uuid, node); } /***** translate.language.translateLanguagesRange 寮€濮� *****/ if(translate.language.translateLanguagesRange.length > 0){ //濡傛灉澶т簬0锛屽垯鏄湁璁剧疆锛岄偅涔堝彧缈昏瘧鏈夎缃殑璇锛屼笉鍦ㄨ缃腑鐨勮绉嶄笉浼氬弬涓庣炕璇� for(var lang in translate.nodeQueue[uuid].list){ if(translate.language.translateLanguagesRange.indexOf(lang) < 0){ //鍒犻櫎杩欎釜璇 delete translate.nodeQueue[uuid].list[lang]; } } } /***** translate.language.translateLanguagesRange 缁撴潫 *****/ //console.log(translate.nodeHistory); //console.log(translate.nodeQueue[uuid]) for(var lang in translate.nodeQueue[uuid].list){ //console.log('lang:'+lang) for(var hash in translate.nodeQueue[uuid].list[lang]){ //console.log(hash) if(typeof(translate.nodeQueue[uuid].list[lang][hash]) == 'function'){ //v2.10澧炲姞锛岄伩鍏峢ash鍐掑嚭涓� Contains 鍑烘潵瀵艰嚧for涓殑.length 鍑洪敊 continue; } for(var nodeindex = translate.nodeQueue[uuid].list[lang][hash].nodes.length-1; nodeindex > -1; nodeindex--){ //console.log(translate.nodeQueue[uuid].list[lang][hash].nodes); var analyse = translate.element.nodeAnalyse.get(translate.nodeQueue[uuid].list[lang][hash].nodes[nodeindex].node); //analyse.text analyse.node var nodeid = nodeuuid.uuid(analyse.node); //translate.nodeQueue[uuid].list[lang][hash].nodes.splice(nodeindex, 1); //console.log(nodeid+'\t'+analyse.text); if(typeof(translate.nodeHistory[nodeid]) != 'undefined'){ //瀛樺湪锛屽垽鏂叾鍐呭鏄惁鍙戠敓浜嗘敼鍙� //console.log('姣旇緝---------'); //console.log(translate.nodeHistory[nodeid].translateText); //console.log(analyse.text); if(translate.nodeHistory[nodeid].translateText == analyse.text){ //鍐呭鏈彂鐢熸敼鍙橈紝閭d箞涓嶉渶瑕佸啀缈昏瘧浜嗭紝浠巘ranslate.nodeQueue涓垹闄よ繖涓猲ode translate.nodeQueue[uuid].list[lang][hash].nodes.splice(nodeindex, 1); //console.log('鍙戠幇鐩哥瓑鐨刵ode锛屽垹闄� '+analyse.text+'\t'+hash); }else{ //console.log("鍙戠幇鍙樺寲鐨刵ode =======nodeid:"+nodeid); //console.log(translate.nodeHistory[nodeid].translateText == analyse.text); //console.log(translate.nodeHistory[nodeid].node); //console.log(translate.nodeHistory[nodeid].translateText); //console.log(analyse.text); } }else{ //console.log('鏈湪 nodeHistory 涓彂鐜帮紝鏂扮殑node nodeid:'+nodeid); //console.log(analyse.node) } } if(translate.nodeQueue[uuid].list[lang][hash].nodes.length == 0){ //濡傛灉node鏁扮粍涓凡缁忔病鏈変簡锛岄偅涔堢洿鎺ユ妸杩欎釜hash鍘绘帀 delete translate.nodeQueue[uuid].list[lang][hash]; } } if(Object.keys(translate.nodeQueue[uuid].list[lang]).length == 0){ //濡傛灉杩欎釜璇█涓病鏈夎缈昏瘧鐨刵ode浜嗭紝閭d箞鍒犻櫎杩欎釜璇█ delete translate.nodeQueue[uuid].list[lang]; } } //console.log('new queuq'); //console.log(translate.nodeQueue[uuid]) //translate.nodeHistory[nodeid] //console.log('-----寰呯炕璇戯細----'); //console.log(translate.nodeQueue); //translateTextArray[lang][0] var translateTextArray = {}; //瑕佺炕璇戠殑鏂囨湰鐨勬暟缁勶紝鏍煎紡濡� ["浣犲ソ","娆㈣繋"] var translateHashArray = {}; //瑕佺炕璇戠殑鏂囨湰鐨刪ash,璺熶笂闈㈢殑index鏄竴鑷寸殑锛屽彧涓嶈繃涓婇潰鏄瓨瑕佺炕璇戠殑鏂囨湰锛岃繖涓瓨hash鍊� /* 瑕佽繘琛岀浜屾鎵弿鐨刵ode - 2023.8.22 瑙e喅缂撳瓨浼氭墦鏁f壂鎻忓埌鐨勭炕璇戞枃鏈紝瀵艰嚧缈昏瘧缁撴潫鍚庢壘瀵讳笉鍒拌€屽鑷翠笉缈昏瘧鐨勯棶棰� 涓€缁� key: lang 浜岀淮 key: hash 涓夌淮 key: node: 褰撳墠鐨刵ode鍏冪礌 鍥涚淮 array: 褰撳墠缂撳瓨涓繘琛岀炕璇戠殑鏂囨湰鏁扮粍锛� cacheOriginal: 宸茬紦瀛樿鏇挎崲鍓嶇殑鏂囨湰 cacheTranslateText: 宸茬紦瀛樿鏇挎崲鍚庣殑缈昏瘧鏂囨湰 */ var twoScanNodes = {}; var cacheScanNodes = []; //鍚屼笂闈㈢殑 twoScanNodes锛屽彧涓嶈繃 twoScanNodes 鏄寜鐓ang瀛樼殑锛岃€岃繖涓笉鍐嶆湁lang鍖哄垎 for(var lang in translate.nodeQueue[uuid]['list']){ //浜岀淮鏁扮粍涓紝鍙栬瑷€ //console.log('lang:'+lang); //lang涓篹nglish杩欑璇█鏍囪瘑 if(lang == null || typeof(lang) == 'undefined' || lang.length == 0 || lang == 'undefined'){ //console.log('lang is null : '+lang); continue; } translateTextArray[lang] = []; translateHashArray[lang] = []; let task = new translate.renderTask(); //console.log(translate.nodeQueue); twoScanNodes[lang] = []; //浜岀淮鏁扮粍锛屽彇hash銆乿alue for(var hash in translate.nodeQueue[uuid]['list'][lang]){ if(typeof(translate.nodeQueue[uuid]['list'][lang][hash]) == 'function'){ //璺冲嚭锛屽鍔犲閿欍€� 姝e父鎯呭喌涓嬪簲璇ヤ笉浼氳繖鏍� continue; } //鍙栧師濮嬬殑璇嶏紝杩樻湭缁忚繃缈昏瘧鐨勶紝闇€瑕佽繘琛岀炕璇戠殑璇� //var originalWord = translate.nodeQueue[uuid]['list'][lang][hash]['original']; //鍘熷鐨刵ode涓殑璇� var originalWord = translate.nodeQueue[uuid]['list'][lang][hash]['original']; //瑕佺炕璇戠殑璇� var translateText = translate.nodeQueue[uuid]['list'][lang][hash]['translateText']; //console.log(originalWord); /* //鑷畾涔夋湳璇悗鐨勩€傚鏋� var nomenclatureOriginalWord = translate.nomenclature.dispose(cache); if(nomenclatureOriginalWord != originalWord){ has } */ //console.log(originalWord == translateText ? '1':'xin锛�'+translateText); //鏍规嵁hash锛屽垽鏂湰鍦版槸鍚︽湁缂撳瓨浜� var cacheHash = originalWord == translateText ? hash:translate.util.hash(translateText); //濡傛灉鍖归厤鍒颁簡鑷畾涔夋湳璇簱锛岄偅缈昏瘧鍓嶇殑hash鏄鏀瑰彉浜� translate.nodeQueue[uuid]['list'][lang][hash]['cacheHash'] = cacheHash; //缂撳瓨鐨刪ash銆� 缂撳瓨鏃讹紝鍏秇ash璺熺炕璇戠殑璇█鏄畬鍏ㄥ搴旂殑锛岀紦瀛樼殑hash灏辨槸缈昏瘧鐨勮瑷€杞崲鏉ョ殑 var cache = translate.storage.get('hash_'+translate.to+'_'+cacheHash); //console.log(cacheHash+', '+cache); //var twoScanNodes[] = []; //瑕佽繘琛岀浜屾鎵弿鐨刵ode if(cache != null && cache.length > 0){ //鏈夌紦瀛樹簡 //console.log('find cache锛�'+cache); //鐩存帴灏嗙紦瀛樿祴浜� //for(var index = 0; index < this.nodeQueue[lang][hash].length; index++){ //this.nodeQueue[lang][hash][index].nodeValue = cache; for(var node_index = 0; node_index < translate.nodeQueue[uuid]['list'][lang][hash]['nodes'].length; node_index++){ //console.log(translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][node_index]); //鍔犲叆 translate.inProgressNodes //鍙栧緱杩欎釜缈昏瘧鐨刵ode var ipnode = translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][node_index]['node']; //鍒ゆ柇杩欎釜node鏄惁宸茬粡鍦� inProgressNodes 璁板綍浜� var isFind = false; for(var ini = 0; ini < translate.inProgressNodes.length; ini++){ if(translate.inProgressNodes[ini].node.isSameNode(ipnode)){ //鏈夎褰曚簡锛岄偅涔堝嚭鐜版鏁� +1 translate.inProgressNodes[ini].number++; isFind = true; //console.log('cache - find - ++ '); //console.log(ipnode); } } //鏈彂鐜帮紝閭d箞杩樿灏嗚繖涓猲ode鍔犲叆杩涘幓 if(!isFind){ //console.log('cache - find - add -- lang:'+lang+', hash:'+hash+' node_index:'+node_index); //console.log(ipnode.nodeValue); translate.inProgressNodes.push({node: ipnode, number:1}); } //console.log(translate.inProgressNodes); //鍔犲叆 translate.inProgressNodes -- 缁撴潫 //缈昏瘧缁撴灉鐨勬枃鏈紝鍖呭惈浜哹efore 銆� after 浜� var translateResultText = translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][node_index]['beforeText']+cache+translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][node_index]['afterText']; task.add(translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][node_index]['node'], originalWord, translateResultText, translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][node_index]['attribute']); //this.nodeQueue[lang][hash]['nodes'][node_index].nodeValue = this.nodeQueue[lang][hash]['nodes'][node_index].nodeValue.replace(new RegExp(originalWord,'g'), cache); //console.log(translateResultText); //閲嶆柊鎵弿杩欎釜node,閬垮厤杩欑鎯呭喌锛� //localstorage缂撳瓨涓湁鍑犱釜璇嶇殑缂撳瓨浜嗭紝浣嗘槸浠庣紦瀛樹腑浣跨敤鏃讹紝鎶婂師鏈瘑鍒殑瑕佺炕璇戠殑鏁版嵁缁欐墦鏁d簡锛屽鑷寸炕璇戠粨鏋滄病娉曡祴浜堬紝瀵艰嚧鐢ㄦ埛灞曠ず鏃舵湁浜涘彞瀛愭病鎴愬姛缈昏瘧鐨勯棶棰� -- 2023.8.22 //console.log('缁х画鎵弿 + 1 - '+twoScanNodes.length); var twoScanIndex = -1; //褰撳墠鍏冪礌鏄惁鍦� twoScan 涓凡缁忓姞鍏ヤ簡锛屽鏋滃凡缁忓姞鍏ヤ簡锛岄偅涔堣繖閲岃祴浜堝綋鍓嶆墍鍦ㄧ殑涓嬫爣 for(var i = 0; i 0){ //鍥犱负鍦ㄨ繖涓暟缁勪腑鐨勫€奸兘鏄竴鏍风殑锛岄偅涔堝彧闇€瑕佸彇鍑虹涓€涓氨琛屼簡 var valueStr = queueNodes[0].nodeValue; valueStr = this.util.charReplace(valueStr); translateTextArray[lang].push(valueStr); translateHashArray[lang].push(hash); } */ //鍔犲叆寰呯炕璇戞暟缁� translateTextArray[lang].push(translateText); translateHashArray[lang].push(hash); //杩欓噷瀛樺叆鐨勪緷鏃ц繕鏄敤鍘熷hash锛屾湭浣跨敤鑷畾涔夋湳璇簱鍓嶇殑hash锛岀洰鐨勬槸涓嶇牬鍧� nodeQueue 鐨� key } task.execute(); //鎵ц娓叉煋浠诲姟 } //console.log(twoScanNodes); //console.log('cacheScanNodes:'); //console.log(cacheScanNodes); /******* 杩涜绗簩娆℃壂鎻忋€佽拷鍔犲叆缈昏瘧闃熷垪銆傜洰鐨勬槸闃叉缂撳瓨鎵撴暎鎵弿鐨勫緟缈昏瘧鏂囨湰 ********/ for(var lang in twoScanNodes){ //璁板綍绗竴娆℃壂鎻忕殑鏁版嵁锛屼互渚胯窡绗簩娆℃壂鎻忓悗鐨勮繘琛屽姣� var firstScan = Object.keys(translate.nodeQueue[uuid]['list'][lang]); var firstScan_lang_langth = firstScan.length; //绗竴娆℃壂鎻忓悗鐨勬暟缁勯暱搴� //console.log(twoScanNodes[lang]); for(var i = 0; i -1){ //鍙戠幇浜嗭紝閭d箞寮哄埗璧嬩簣缈讳互鍓嶅唴瀹� text = translateTextArray[data.from][i]; } //缈昏瘧鍓嶇殑hash瀵瑰簲涓嬫爣 var hash = translateHashArray[data.from][i]; var cacheHash = translate.nodeQueue[uuid]['list'][lang][hash]['cacheHash']; //鍙栧師濮嬬殑璇嶏紝杩樻湭缁忚繃缈昏瘧鐨勶紝闇€瑕佽繘琛岀炕璇戠殑璇� var originalWord = ''; try{ originalWord = translate.nodeQueue[uuid]['list'][lang][hash]['original']; //console.log('bef:'+translate.nodeQueue[uuid]['list'][lang][hash]['beforeText']); }catch(e){ console.log('uuid:'+uuid+', originalWord:'+originalWord+', lang:'+lang+', hash:'+hash+', text:'+text+', queue:'+translate.nodeQueue[uuid]); console.log(e); continue; } //for(var index = 0; index < translate.nodeQueue[lang][hash].length; index++){ for(var node_index = 0; node_index < translate.nodeQueue[uuid]['list'][lang][hash]['nodes'].length; node_index++){ //translate.nodeQueue[lang][hash]['nodes'][node_index].nodeValue = translate.nodeQueue[lang][hash]['nodes'][node_index].nodeValue.replace(new RegExp(originalWord,'g'), text); //鍔犲叆浠诲姟 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']); } //} /* for(var index = 0; index < translate.nodeQueue[data.from][hash].length; index++){ translate.nodeQueue[data.from][hash][index].nodeValue = text; } */ //灏嗙炕璇戠粨鏋滀互 key锛歨ash value缈昏瘧缁撴灉鐨勫舰寮忕紦瀛� translate.storage.set('hash_'+data.to+'_'+cacheHash,text); } task.execute(); //鎵ц娓叉煋浠诲姟 //translate.temp_executeFinishNumber++; //璁板綍鎵ц瀹岀殑娆℃暟 }); /*** 缈昏瘧end ***/ } }, /* 灏嗗凡鎴愬姛缈昏瘧骞舵覆鏌撶殑node鑺傜偣杩涜缂撳瓨璁板綍 key: node鑺傜偣鐨勫敮涓€鏍囪瘑绗︼紝閫氳繃 nodeuuid.uuid() 鐢熸垚 value: node: node鑺傜偣 translateText: 缈昏瘧瀹屾垚鍚庯紝褰撳墠node鑺傜偣鐨勫唴瀹规枃鏈紙鏄凡缁忕炕璇戞覆鏌撹繃鐨勶級 */ nodeHistory:{}, element:{ //瀵圭炕璇戝墠鍚庣殑node鍏冪礌鐨勫垎鏋愶紙缈讳互鍓嶏級鍙婃覆鏌擄紙缈昏瘧鍚庯級 nodeAnalyse:{ /* 鑾峰彇node涓殑瑕佽繘琛岀炕璇戠殑鏂囨湰鍐呭銆佷互鍙婅鎿嶄綔鐨勫疄闄卬ode瀵硅薄锛堣繖涓猲ode瀵硅薄寰堝彲鑳芥槸浼犲叆鐨刵ode涓殑鏌愪釜瀛恘ode锛� node attribute 瑕佽幏鍙栫殑鏄煇涓睘鎬х殑鍊硷紝杩樻槸node鏈韩鐨勫€笺€傛瘮濡� a鏍囩鐨則itle灞炴€х殑鍊硷紝鍒欎紶鍏� title銆� 濡傛灉鏄洿鎺ヨ幏鍙杗ode.nodeValue 锛岄偅杩欎釜娌℃湁 杩斿洖缁撴灉鏄竴涓暟缁勩€傚叾涓細 ['text']:瑕佽繘琛岀炕璇戠殑text鍐呭鏂囨湰 ['node']:瑕佽繘琛岀炕璇戠殑鐩爣node */ get:function(node, attribute){ return translate.element.nodeAnalyse.analyse(node,'','', attribute); }, /* 杩涜缈昏瘧涔嬪悗鐨勬覆鏌撴樉绀� 鍙傛暟锛� node 褰撳墠缈昏瘧鐨刵ode鍏冪礌 originalText 缈昏瘧涔嬪墠鐨勫唴瀹规枃鏈� resultText 缈昏瘧涔嬪悗鐨勫唴瀹规枃鏈� attribute 瀛樻斁瑕佹浛鎹㈢殑灞炴€э紝姣斿 a鏍囩鐨則itle灞炴€с€� 濡傛灉鏄洿鎺ユ浛鎹ode.nodeValue 锛岄偅杩欎釜娌℃湁 */ set:function(node, originalText, resultText, attribute){ translate.element.nodeAnalyse.analyse(node,originalText,resultText, attribute); }, /* 娉ㄦ剰锛岃繖涓笉浣跨敤锛屽彧鏄湇鍔′簬涓婇潰鐨刧et銆乻et浣跨敤銆傚叿浣撲娇鐢ㄧ敤涓婇潰鐨刧et銆乻et 1. 鍙紶鍏� node锛� 鑾峰彇node涓殑瑕佽繘琛岀炕璇戠殑鏂囨湰鍐呭銆佷互鍙婅鎿嶄綔鐨勫疄闄卬ode瀵硅薄锛堣繖涓猲ode瀵硅薄寰堝彲鑳芥槸浼犲叆鐨刵ode涓殑鏌愪釜瀛恘ode锛� 杩斿洖缁撴灉鏄竴涓暟缁勩€傚叾涓細 ['text']:瑕佽繘琛岀炕璇戠殑text鍐呭鏂囨湰 ['node']:瑕佽繘琛岀炕璇戠殑鐩爣node 2. 浼犲叆 node銆乷riginalText銆� resultText 鍒欐槸杩涜缈昏瘧涔嬪悗鐨勬覆鏌撴樉绀� attribute : 杩涜鏇挎崲娓叉煋鏃朵娇鐢紝瀛樻斁瑕佹浛鎹㈢殑灞炴€э紝姣斿 a鏍囩鐨則itle灞炴€с€� 濡傛灉鏄洿鎺ユ浛鎹ode.nodeValue 锛岄偅杩欎釜娌℃湁 */ analyse:function(node, originalText, resultText, attribute){ var result = new Array(); //杩斿洖鐨勭粨鏋� result['node'] = node; result['text'] = ''; var nodename = translate.element.getNodeName(node); if(attribute != null && typeof(attribute) == 'string' && attribute.length > 0){ //杩欎釜node鏈夊睘鎬э紝鏇挎崲鐨勬槸node鐨勫睘鎬э紝鑰屼笉鏄痭odeValue result['text'] = node[attribute]; //鏇挎崲娓叉煋 if(typeof(originalText) != 'undefined' && originalText.length > 0){ if(typeof(node[attribute]) != 'undefined'){ node[attribute] = node[attribute].replace(new RegExp(translate.util.regExp.pattern(originalText),'g'), translate.util.regExp.resultText(resultText)); }else{ console.log(node); } } return result; } //姝e父鐨刵ode 锛宼ypeof 閮芥槸 object //console.log(typeof(node)+node); if(nodename == '#text'){ //濡傛灉鏄櫘閫氭枃鏈紝鍒ゆ柇涓€涓嬩笂灞傛槸鍚︽槸鍖呭惈鍦╰extarea鏍囩涓� if(typeof(node.parentNode) != 'undefined'){ var parentNodename = translate.element.getNodeName(node.parentNode); //console.log(parentNodename) if(parentNodename == 'TEXTAREA'){ //鏄痶extarea鏍囩锛岄偅灏唍odename 绾冲叆 textarea鐨勫垽鏂腑锛屽悓鏃跺皢鍒ゆ柇瀵硅薄浜や簬涓婄骇锛屼篃灏辨槸textarea鏍囩 nodename = 'TEXTAREA'; node = node.parentNode; } } } //console.log(nodename) //console.log(translate.element.getNodeName(node.parentNode)) //console.log(node) if(nodename == 'INPUT' || nodename == 'TEXTAREA'){ //console.log(node.attributes) /* 1. input銆乼extarea 杈撳叆妗嗭紝瑕佸 placeholder 鍋氱炕璇� 2. input 瑕佸 type=button 鐨勬儏鍐佃繘琛岀炕璇� */ if(node.attributes == null || typeof(node.attributes) == 'undefined'){ result['text'] = ''; return result; } //input锛岃瀵� type=button銆乻ubmit 鐨勬儏鍐佃繘琛岀炕璇� if(nodename == 'INPUT'){ if(typeof(node.attributes.type) != 'undefined' && typeof(node.attributes.type.nodeValue) != null && (node.attributes.type.nodeValue.toLowerCase() == 'button' || node.attributes.type.nodeValue.toLowerCase() == 'submit')){ //console.log('----鏄� 0){ //鏇挎崲娓叉煋 if(typeof(originalText) != 'undefined' && originalText.length > 0){ //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)); input_value_node.nodeValue = input_value_node.nodeValue.replace(new RegExp(translate.util.regExp.pattern(originalText),'g'), translate.util.regExp.resultText(resultText)); } result['text'] = input_value_node.nodeValue; result['node'] = input_value_node; return result; } } } //console.log(node) //input textarea 鐨� placeholder 鎯呭喌 if(typeof(node.attributes['placeholder']) != 'undefined'){ //console.log(node); //鏇挎崲娓叉煋 if(typeof(originalText) != 'undefined' && originalText.length > 0){ //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)); node.attributes['placeholder'].nodeValue = node.attributes['placeholder'].nodeValue.replace(new RegExp(translate.util.regExp.pattern(originalText),'g'), translate.util.regExp.resultText(resultText)); } result['text'] = node.attributes['placeholder'].nodeValue; result['node'] = node.attributes['placeholder']; return result; //return node.attributes['placeholder'].nodeValue; } //console.log(node) result['text'] = ''; return result; } if(nodename == 'META'){ //meta鏍囩锛屽鏄叧閿瘝銆佹弿杩扮瓑 if(typeof(node.name) != 'undefined' && node.name != null){ var nodeAttributeName = node.name.toLowerCase(); //鍙杕eta 鏍囩鐨刵ame 灞炴€� if(nodeAttributeName == 'keywords' || nodeAttributeName == 'description'){ //鏇挎崲娓叉煋 if(typeof(originalText) != 'undefined' && originalText != null && originalText.length > 0){ //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)); node.content = node.content.replace(new RegExp(translate.util.regExp.pattern(originalText),'g'), translate.util.regExp.resultText(resultText)); } result['text'] = node.content; return result; } } result['text'] = ''; return result; } if(nodename == 'IMG'){ if(typeof(node.alt) == 'undefined' || node.alt == null){ result['text'] = ''; return result; } //鏇挎崲娓叉煋 if(typeof(originalText) != 'undefined' && originalText.length > 0){ //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)); node.alt = node.alt.replace(new RegExp(translate.util.regExp.pattern(originalText),'g'), translate.util.regExp.resultText(resultText)); } result['text'] = node.alt; return result; } //鍏朵粬鐨� if(node.nodeValue == null || typeof(node.nodeValue) == 'undefined'){ result['text'] = ''; }else if(node.nodeValue.trim().length == 0){ //閬垮厤灏辨槸鍗曠函鐨勭┖鏍兼垨鑰呮崲琛� result['text'] = ''; }else{ //鏇挎崲娓叉煋 if(typeof(originalText) != 'undefined' && originalText != null && originalText.length > 0){ //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)); node.nodeValue = node.nodeValue.replace(new RegExp(translate.util.regExp.pattern(originalText),'g'), translate.util.regExp.resultText(resultText)); } result['text'] = node.nodeValue; } return result; } }, //鑾峰彇杩欎釜node鍏冪礌鐨刵ode name ,濡傛灉鏈彂鐜帮紝鍒欒繑鍥�''绌哄瓧绗︿覆 getNodeName:function(node){ if(node == null || typeof(node) == 'undefined'){ return ''; } if(node.nodeName == null || typeof(node.nodeName) == 'undefined'){ return ''; } var nodename = node.nodeName; //console.log('nodename:'+nodename+', node:'+node); return nodename; }, //鍚戜笅閬嶅巻node whileNodes:function(uuid, node){ if(node == null || typeof(node) == 'undefined'){ return; } //濡傛灉杩欎釜uuid娌℃湁锛屽垯鍒涘缓 if(typeof(translate.nodeQueue[uuid]) == 'undefined' || translate.nodeQueue[uuid] == null){ translate.nodeQueue[uuid] = new Array(); //鍒涘缓 translate.nodeQueue[uuid]['expireTime'] = Date.now() + 120*1000; //鍒犻櫎鏃堕棿锛�10鍒嗛挓鍚庡垹闄� translate.nodeQueue[uuid]['list'] = new Array(); //console.log('鍒涘缓 --- '); //console.log(uuid) } //console.log('---'+typeof(node)+', '); //鍒ゆ柇鏄惁鏄湁title灞炴€э紝title灞炴€т篃瑕佺炕璇� if(typeof(node) == 'object' && typeof(node['title']) == 'string' && node['title'].length > 0){ //灏唗itle鍔犲叆缈昏瘧闃熷垪 //console.log('---'+node.title+'\t'+node.tagName); //console.log(node) //console.log('------------'); //鍒ゆ柇褰撳墠鍏冪礌鏄惁鍦╥gnore蹇界暐鐨則ag銆乮d銆乧lass name涓� if(!translate.ignore.isIgnore(node)){ //涓嶅湪蹇界暐鐨勯噷闈紝鎵嶄細鍔犲叆缈昏瘧 translate.addNodeToQueue(uuid, node, node['title'], 'title'); } } var childNodes = node.childNodes; if(childNodes.length > 0){ for(var i = 0; i -1){ //蹇界暐tag //console.log('蹇界暐tag锛�'+parentNodeName); return; } /****** 鍒ゆ柇蹇界暐鐨刢lass ******/ /* 杩欐鐞嗚涓婁笉闇€瑕佷簡锛屽洜涓哄湪 translate.ignore.isIgnore 鍒ゆ柇浜� var ignoreClass = false; //鏄惁鏄蹇界暐鐨刢lass锛宼rue鏄� var parentNode = node.parentNode; while(node != parentNode && parentNode != null){ //console.log('node:'+node+', parentNode:'+parentNode); if(parentNode.className != null){ if(translate.ignore.class.indexOf(parentNode.className) > -1){ //鍙戠幇ignore.class 褰撳墠鏄浜庤蹇界暐鐨� class ignoreClass = true; } } parentNode = parentNode.parentNode; } if(ignoreClass){ //console.log('ignore class : node:'+node.nodeValue); return; } */ /**** 鍒ゆ柇蹇界暐鐨刢lass缁撴潫 ******/ /**** 閬垮厤涓€斿眬閮ㄧ炕璇戯紝鍦ㄥ垽鏂竴涓� ****/ //鍒ゆ柇褰撳墠鍏冪礌鏄惁鍦╥gnore蹇界暐鐨則ag銆乮d銆乧lass name涓� if(translate.ignore.isIgnore(node)){ //console.log('node鍖呭惈鍦ㄨ蹇界暐鐨勫厓绱犱腑锛�'); //console.log(node); return; } //node鍒嗘瀽 var nodeAnaly = translate.element.nodeAnalyse.get(node); if(nodeAnaly['text'].length > 0){ //鏈夎缈昏瘧鐨勭洰鏍囧唴瀹癸紝鍔犲叆缈昏瘧闃熷垪 //console.log('addNodeToQueue -- '+nodeAnaly['node']+', text:' + nodeAnaly['text']); translate.addNodeToQueue(uuid, nodeAnaly['node'], nodeAnaly['text']); } //console.log(nodeAnaly); /* //console.log(node.nodeName+', type:'+node.nodeType+', '+node.nodeValue); var nodename = translate.element.getNodeName(node); if(nodename == 'INPUT' || nodename == 'TEXTAREA'){ //input 杈撳叆妗嗭紝瑕佸 placeholder 鍋氱炕璇� console.log('input---'+node.attributes); if(node.attributes == null || typeof(node.attributes) == 'undefined'){ return; } if(typeof(node.attributes['placeholder']) != 'undefined'){ //console.log(node.attributes['placeholder'].nodeValue); //鍔犲叆瑕佺炕璇戠殑node闃熷垪 //translate.nodeQueue[translate.hash(node.nodeValue)] = node.attributes['placeholder']; //鍔犲叆瑕佺炕璇戠殑node闃熷垪 //translate.addNodeToQueue(translate.hash(node.attributes['placeholder'].nodeValue), node.attributes['placeholder']); translate.addNodeToQueue(uuid, node.attributes['placeholder'], node.attributes['placeholder'].nodeValue); } //console.log(node.getAttribute("placeholder")); }else if(nodename == 'META'){ //meta鏍囩锛屽鏄叧閿瘝銆佹弿杩扮瓑 if(typeof(node.name) != 'undefined' && node.name != null){ var nodeAttributeName = node.name.toLowerCase(); //鍙杕eta 鏍囩鐨刵ame 灞炴€� //console.log(nodeName); if(nodeAttributeName == 'keywords' || nodeAttributeName == 'description'){ //鍏抽敭璇嶃€佹弿杩� translate.addNodeToQueue(uuid, node, node.content); } } //console.log(node.name) }else if(nodename == 'IMG'){ //console.log('-------'+node.alt); translate.addNodeToQueue(uuid, node, node.alt); }else if(node.nodeValue != null && node.nodeValue.trim().length > 0){ //杩囨护鎺夋棤鏁堢殑鍊� if(node.nodeValue != null && typeof(node.nodeValue) == 'string' && node.nodeValue.length > 0){ }else{ return; } //console.log(node.nodeValue+' --- ' + translate.language.get(node.nodeValue)); //console.log(node.nodeName); //console.log(node.parentNode.nodeName); //console.log(node.nodeValue); //鍔犲叆瑕佺炕璇戠殑node闃熷垪 translate.addNodeToQueue(uuid, node, node.nodeValue); //translate.addNodeToQueue(translate.hash(node.nodeValue), node); //translate.nodeQueue[translate.hash(node.nodeValue)] = node; //translate.nodeQueue[translate.hash(node.nodeValue)] = node.nodeValue; //node.nodeValue = node.nodeValue+'|'; } */ }, }, /* * 灏嗗彂鐜扮殑鍏冪礌鑺傜偣鍔犲叆寰呯炕璇戦槦鍒� * uuid execute鏂规硶鎵ц鐨勫敮涓€id * node 褰撳墠text鎵€鍦ㄧ殑node * text 褰撳墠瑕佺炕璇戠殑鐩爣鏂囨湰 * attribute 鏄惁鏄厓绱犵殑鏌愪釜灞炴€с€傛瘮濡� a鏍囩涓殑title灞炴€э紝 a.title 鍐嶄互node鍙傛暟浼犲叆鏃舵槸string绫诲瀷鐨勶紝鏈韩骞朵笉鏄痭ode绫诲瀷锛屾墍浠ュ氨瑕佷紶鍏ヨ繖涓� attribute=title 鏉ヤ唬琛ㄨ繖鏄痑鏍囩鐨則itle灞炴€с€傚悓鏍风浜屼釜鍙傛暟node浼犲叆鐨勪篃涓嶈兘鏄痑.title锛岃€屾槸浼犲叆a杩欎釜node鍏冪礌 */ addNodeToQueue:function(uuid, node, text, attribute){ if(node == null || text == null || text.length == 0){ return; } //console.log('find tag ignore : '+node.nodeValue+', '+node.nodeName+", "+node.nodeType+", "+node.tagName); //console.log('addNodeToQueue into -- node:'+node+', text:'+text+', attribute:'+attribute); var nodename = translate.element.getNodeName(node); //鍒ゆ柇濡傛灉鏄 娉ㄩ噴鐨勫尯鍩燂紝涓嶈繘琛岀炕璇� if(nodename.toLowerCase() == '#comment'){ return; } //console.log('\t\t'+text); //鍙栬缈昏瘧瀛楃鐨刪ash var key = translate.util.hash(text); /* 濡傛灉鏄痠nput 鐨� placeholder ,灏变細鍑虹幇杩欎釜鎯呭喌 if(node.parentNode == null){ console.log('node.parentNode == null'); return; } */ //console.log(node.parentNode); //console.log(node.parentNode.nodeName); //鍒ゆ柇鍏跺唴瀹规槸鍚︽槸 script銆乻tyle 绛夌紪绋嬬殑鏂囨湰锛屽鏋滄槸锛屽垯涓嶈繘琛岀炕璇戯紝涓嶇劧缈昏瘧鍚庤繕浼氬奖鍝嶉〉闈㈡甯镐娇鐢� if(translate.util.findTag(text)){ //console.log('find tag ignore : '+node.nodeValue+', '+node.nodeName+", "+node.nodeType+", "+node.tagName); //console.log(node.parentNode.nodeName); //鑾峰彇鍒板綋鍓嶆枃鏈槸灞炰簬閭d釜tag鏍囩涓殑锛屽鏋滄槸script銆乻tyle 杩欐牱鐨勬爣绛句腑锛岄偅涔熶細蹇界暐鎺夊畠锛屼笉杩涜缈昏瘧 if(node.parentNode == null){ //娌℃湁涓婄骇浜嗭紝鎴栨槸娌¤幏鍙栧埌涓婄骇锛屽拷鐣� return; } //鍘讳笂绾х殑tag name var parentNodeName = translate.element.getNodeName(node.parentNode); //node.parentNode.nodeName; if(parentNodeName == 'SCRIPT' || parentNodeName == 'STYLE'){ //濡傛灉鏄痵cript銆乻tyle涓彂鐜扮殑锛岄偅涔熷拷鐣� return; } } //console.log(node.nodeValue); //鑾峰彇褰撳墠鏄粈涔堣绉� //var langs = translate.language.get(text); var textRecognition = translate.language.recognition(text); langs = textRecognition.languageArray; //console.log('langs'); //console.log(langs); //杩囨护鎺夎杞崲涓虹殑鐩爣璇锛屾瘮濡傝杞负鑻辫锛岄偅灏卞皢鏈潵鏄嫳璇殑閮ㄥ垎杩囨护鎺夛紝涓嶇敤鍐嶇炕璇戜簡 if(typeof(langs[translate.to]) != 'undefined'){ delete langs[translate.to]; } var isWhole = translate.whole.isWhole(node); //console.log('isWhole:'+isWhole+', '+text); if(!isWhole){ //甯歌鏂瑰紡锛岃繘琛岃绉嶅垎绫� /* if(this.nodeQueue[lang] == null || typeof(this.nodeQueue[lang]) == 'undefined'){ this.nodeQueue[lang] = new Array(); } //鍒涘缓浜岀淮鏁扮粍 if(this.nodeQueue[lang][key] == null || typeof(this.nodeQueue[lang][key]) == 'undefined'){ this.nodeQueue[lang][key] = new Array(); } */ //console.log(langs); for(var lang in langs) { //鍒涘缓浜岀淮鏁扮粍锛� key涓鸿绉嶏紝濡� english /* 鏀惧埌浜� translate.addNodeQueueItem 杩涜鍒ゆ柇 if(translate.nodeQueue[uuid]['list'][lang] == null || typeof(translate.nodeQueue[uuid]['list'][lang]) == 'undefined'){ translate.nodeQueue[uuid]['list'][lang] = new Array(); } */ //console.log('|'+langs[lang].length); //閬嶅巻鍑鸿璇涓嬫湁鍝簺璇嶉渶瑕佺炕璇� for(var word_index = 0; word_index < langs[lang].list.length; word_index++){ //console.log('start:'+word_index) //console.log(langs[lang].list[word_index]); if(typeof(langs[lang].list[word_index]) == 'undefined' || typeof(langs[lang].list[word_index]['text']) == 'undefined'){ //鐞嗚涓婂簲璇ヤ笉浼氾紝浣嗗鍔犱釜鍒ゆ柇 continue; } var word = langs[lang].list[word_index]['text']; //瑕佺炕璇戠殑璇� var beforeText = langs[lang].list[word_index]['beforeText']; var afterText = langs[lang].list[word_index]['afterText']; translate.addNodeQueueItem(uuid, node, word, attribute, lang, beforeText, afterText); /* var hash = translate.util.hash(word); //瑕佺炕璇戠殑璇嶇殑hash //鍒涘缓涓夌淮鏁扮粍锛� key涓鸿閫氳繃鎺ュ彛缈昏瘧鐨勬枃鏈瘝鎴栧彞瀛愮殑 hash 锛堟敞鎰忓苟涓嶆槸node鐨勬枃鏈紝鑰屾槸node鎷嗗垎鍚庣殑鏂囨湰锛� if(translate.nodeQueue[uuid]['list'][lang][hash] == null || typeof(translate.nodeQueue[uuid]['list'][lang][hash]) == 'undefined'){ translate.nodeQueue[uuid]['list'][lang][hash] = new Array(); translate.nodeQueue[uuid]['list'][lang][hash]['nodes'] = new Array(); translate.nodeQueue[uuid]['list'][lang][hash]['original'] = word; translate.nodeQueue[uuid]['list'][lang][hash]['translateText'] = translate.nomenclature.dispose(word); //鑷畾涔夋湳璇鐞� //translate.nodeQueue[uuid]['list'][lang][hash]['beforeText'] = beforeText; //translate.nodeQueue[uuid]['list'][lang][hash]['afterText'] = afterText; //translate.nodeQueue[uuid]['list'][lang][hash]['attribute'] = attribute; //鏀惧叆 nodes[index][attribute] 鍏冪礌涓� //鍏朵腑key锛� nodes 鏄鍥涚淮鏁扮粍锛岄噷闈㈠瓨鏀惧叿浣撶殑node鍏冪礌瀵硅薄 //console.log(translate.nodeQueue[uuid]['list'][lang][hash]); } var isEquals = false; //queue涓槸鍚﹀凡缁忓姞鍏ヨ繃杩欎釜node浜嗭紙褰撶劧鏄悓涓€hash鍚屼竴node鎯呭喌锛� if(typeof(node.isSameNode) != 'undefined'){ //鏀寔 isSameNode 鏂规硶鍒ゆ柇瀵硅薄鏄惁鐩哥瓑 for(var node_index = 0; node_index < translate.nodeQueue[uuid]['list'][lang][hash]['nodes'].length; node_index++){ if(node.isSameNode(translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][node_index]['node'])){ //鐩稿悓锛岄偅灏变笉鐢ㄥ湪瀛樺叆浜� //console.log('鐩稿悓锛岄偅灏变笉鐢ㄥ湪瀛樺叆浜�') isEquals = true; //console.log(node) continue; } } } if(isEquals){ //鐩稿悓锛岄偅灏变笉鐢ㄥ湪瀛樺叆浜� continue; } //寰€浜旂淮鏁扮粍nodes涓拷鍔爊ode鍏冪礌 var nodesIndex = translate.nodeQueue[uuid]['list'][lang][hash]['nodes'].length; translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][nodesIndex] = new Array(); translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][nodesIndex]['node']=node; translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][nodesIndex]['attribute']=attribute; translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][nodesIndex]['beforeText'] = beforeText; translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][nodesIndex]['afterText'] = afterText; */ //console.log('end:'+word_index) } } }else{ //鐩存帴缈昏瘧鏁翠釜鍏冪礌鍐呯殑鍐呭锛屼笉鍐嶅仛璇鍒嗙被锛岄鍏堝垹闄よ嫳鏂囷紝鐒跺悗灏嗗嚭鐜版鏁版渶澶氱殑璇浣滀负鍘熸湰璇 var lang = textRecognition.languageName; translate.addNodeQueueItem(uuid, node, text, attribute, lang, '', ''); } //this.nodeQueue[lang][key][this.nodeQueue[lang][key].length]=node; //寰€鏁扮粍涓拷鍔� }, /* 鏈嶅姟浜庝笂闈㈢殑 addNodeToQueue 锛岀敤浜庡尯鍒嗕笉鍚宼ype鎯呭喌锛岃繘琛岃皟鐢ㄦ鍔犲叆 translate.nodeQueue uuid, node, attribute 杩欎簲涓弬鏁拌鏄庤 addNodeToQueue 鐨勫弬鏁拌鏄庯紝鐩稿悓 word 瑕佸疄闄呰繘琛岀炕璇戠殑鏂囨湰锛屼篃灏辨槸瑕佹妸瀹冩嬁鏉ヨ繘琛岄€氳繃鍚庣缈昏瘧鎺ュ彛杩涜缈昏瘧鐨勬枃鏈� lang 褰撳墠瑕佺炕璇戠殑鏂囨湰鐨勮绉嶏紝濡� english beforeText 鍙傝 translate.nodeQueue 娉ㄩ噴涓涓冪淮鐨勮В閲� afterText 鍙傝 translate.nodeQueue 娉ㄩ噴涓涓冪淮鐨勮В閲� */ addNodeQueueItem:function(uuid, node, word, attribute, lang, beforeText, afterText){ //鍒涘缓浜岀淮鏁扮粍锛� key涓鸿绉嶏紝濡� english if(translate.nodeQueue[uuid]['list'][lang] == null || typeof(translate.nodeQueue[uuid]['list'][lang]) == 'undefined'){ translate.nodeQueue[uuid]['list'][lang] = new Array(); } //var word = text; //瑕佺炕璇戠殑鏂囨湰 var hash = translate.util.hash(word); //瑕佺炕璇戠殑鏂囨湰鐨刪ash //鍒涘缓涓夌淮鏁扮粍锛� key涓鸿閫氳繃鎺ュ彛缈昏瘧鐨勬枃鏈瘝鎴栧彞瀛愮殑 hash 銆傝繖閲岀炕璇戠殑鏂囨湰涔熷氨鏄暣涓猲ode鍏冪礌鐨勫唴瀹逛簡锛屼笉鐢ㄥ湪鍋氭媶鍒嗕簡 if(translate.nodeQueue[uuid]['list'][lang][hash] == null || typeof(translate.nodeQueue[uuid]['list'][lang][hash]) == 'undefined'){ translate.nodeQueue[uuid]['list'][lang][hash] = new Array(); /* * 鍒涘缓鍥涚淮鏁扮粍锛屽瓨鏀惧叿浣撴暟鎹� * key: nodes 鍖呭惈浜嗚繖涓猦ash鐨刵ode鍏冪礌鐨勬暟缁勯泦鍚堬紝array 澶氫釜銆傚叾涓� nodes[index]['node'] 瀛樻斁褰撳墠鐨刵ode鍏冪礌 nodes[index]['attribute'] 瀛樻斁褰撳墠hash锛屼篃灏辨槸缈昏瘧鏂囨湰閽堝鐨勬槸浠€涔堬紝鏄痭ode鏈韩锛坣odeValue锛夛紝杩樻槸 node 鐨勬煇涓睘鎬э紝姣斿title灞炴€с€傚鏋滆繖閲屼笉涓虹┖锛岄偅灏辨槸閽堝鐨勫睘鎬ф搷浣滅殑 * key: original 鍘熷鐨勮缈昏瘧鐨勮瘝鎴栧彞瀛愶紝html鍔犺浇瀹屾垚浣嗚繕娌$炕璇戝墠鐨勬枃鏈紝鐢ㄤ簬鏀寔褰撳墠椤甸潰澶氭璇缈昏瘧鍒囨崲鑰屾棤闇€璺宠浆 * beforeText銆乤fterText:瑙� translate.nodeQueue 鐨勮鏄� */ translate.nodeQueue[uuid]['list'][lang][hash]['nodes'] = new Array(); translate.nodeQueue[uuid]['list'][lang][hash]['original'] = word; translate.nodeQueue[uuid]['list'][lang][hash]['translateText'] = translate.nomenclature.dispose(word); //鑷畾涔夋湳璇鐞� //鍏朵腑key锛� nodes 鏄鍥涚淮鏁扮粍锛岄噷闈㈠瓨鏀惧叿浣撶殑node鍏冪礌瀵硅薄 } var isEquals = false; //queue涓槸鍚﹀凡缁忓姞鍏ヨ繃杩欎釜node浜嗭紙褰撶劧鏄悓涓€hash鍚屼竴node鎯呭喌锛� if(typeof(node.isSameNode) != 'undefined'){ //鏀寔 isSameNode 鏂规硶鍒ゆ柇瀵硅薄鏄惁鐩哥瓑 for(var node_index = 0; node_index < translate.nodeQueue[uuid]['list'][lang][hash]['nodes'].length; node_index++){ if(node.isSameNode(translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][node_index]['node'])){ //鐩稿悓锛岄偅灏变笉鐢ㄥ湪瀛樺叆浜� //console.log('鐩稿悓锛岄偅灏变笉鐢ㄥ湪瀛樺叆浜�') isEquals = true; //console.log(node) continue; } } } if(isEquals){ //鐩稿悓锛岄偅灏变笉鐢ㄥ湪瀛樺叆浜� return; } //寰€浜旂淮鏁扮粍nodes涓拷鍔爊ode鍏冪礌 var nodesIndex = translate.nodeQueue[uuid]['list'][lang][hash]['nodes'].length; translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][nodesIndex] = new Array(); translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][nodesIndex]['node']=node; translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][nodesIndex]['attribute']=attribute; translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][nodesIndex]['beforeText'] = beforeText; translate.nodeQueue[uuid]['list'][lang][hash]['nodes'][nodesIndex]['afterText'] = afterText; }, //鍏ㄩ儴缈昏瘧锛宯ode鍐呭鍏ㄩ儴缈昏瘧锛岃€屼笉鏄繘琛岃绉嶆彁鍙栵紝鐩存帴瀵筺ode鏈韩鐨勫叏閮ㄥ唴瀹规嬁鍑烘潵杩涜鐩存帴鍏ㄩ儴缈昏瘧 whole:{ class:[], tag:[], id:[], //杩愯鏃跺嚭鐜拌嚜妫€骞跺湪娴忚鍣ㄦ帶鍒跺彴鎻愮ず鎬ф枃鏈€� //鍦ㄦ墽琛岀炕璇戯紝涔熷氨鏄� execute() 鏃讹紝浼氳皟鐢ㄦ鏂规硶銆� executeTip:function(){ if(translate.whole.class.length == 0 && translate.whole.tag.length == 0 && translate.whole.id.length == 0){ }else{ console.log('鎮ㄥ紑鍚簡 translate.whole 姝ゆ琛屼负閬垮紑浜嗘祻瑙堝櫒绔殑鏂囨湰璇鑷姩璇嗗埆锛岃€屾槸鏆村姏鐨勭洿鎺ュ鏌愪釜鍏冪礌鐨勬暣涓枃鏈繘琛岀炕璇戯紝寰堝彲鑳戒細浜х敓闈炲父澶х殑缈昏瘧閲忥紝璇疯皑鎱庯紒鏈夊叧姣忔棩缈昏瘧瀛楃鐨勮鏄庯紝鍙弬鑰冿細 http://translate.zvo.cn/42557.html '); } if(translate.whole.tag.indexOf('html') > -1){ console.log('鑷鍙戠幇鎮ㄨ缃簡 translate.whole.tag 鍏朵腑鏈� html 锛岃繖涓槸涓嶇敓鏁堢殑锛屾渶澶у彧鍏佽璁剧疆鍒� body '); } }, //褰撳墠鍏冪礌鏄睘浜庡叏閮ㄧ炕璇戝畾涔夌殑鍏冪礌 /* 浼犲叆涓€涓厓绱狅紝鍒ゆ柇杩欎釜鍏冪礌鏄惁鏄鍖呭惈鐨勩€� 杩欎釜浼氭壘鐖剁被锛岀湅鐪嬬埗绫讳腑鏄惁鍖呭惈鍦ㄥ叾涔嬩腑銆� return true鏄湪鍏朵腑锛宖alse涓嶅啀鍏朵腑 */ isWhole:function(ele){ if(translate.whole.class.length == 0 && translate.whole.tag.length == 0 && translate.whole.id.length == 0){ //鏈缃紝閭d箞鐩存帴杩斿洖false return false; } if(ele == null || typeof(ele) == 'undefined'){ return false; } var parentNode = ele; var maxnumber = 100; //鏈€澶у惊鐜鏁帮紝閬垮厤姝诲惊鐜� while(maxnumber-- > 0){ if(parentNode == null || typeof(parentNode) == 'undefined'){ //娌℃湁鐖跺厓绱犱簡 return false; } //鍒ゆ柇Tag //var tagName = parentNode.nodeName.toLowerCase(); //tag鍚嶅瓧锛屽皬鍐� var nodename = translate.element.getNodeName(parentNode).toLowerCase(); //tag鍚嶅瓧锛屽皬鍐� if(nodename.length > 0){ //鏈塶odename if(nodename == 'html' || nodename == '#document'){ //涓婂眰鍏冪礌宸茬粡鏄《绾у厓绱犱簡锛岄偅鑲畾灏变笉鏄簡 return false; } if(translate.whole.tag.indexOf(nodename) > -1){ //鍙戠幇ignore.tag 褰撳墠鏄浜庤蹇界暐鐨� tag return true; } } //鍒ゆ柇class name if(parentNode.className != null){ var classNames = parentNode.className; if(classNames == null || typeof(classNames) != 'string'){ continue; } //console.log('className:'+typeof(classNames)); //console.log(classNames); classNames = classNames.trim().split(' '); for(var c_index = 0; c_index < classNames.length; c_index++){ if(classNames[c_index] != null && classNames[c_index].trim().length > 0){ //鏈夋晥鐨刢lass name锛岃繘琛屽垽鏂� if(translate.whole.class.indexOf(classNames[c_index]) > -1){ //鍙戠幇ignore.class 褰撳墠鏄浜庤蹇界暐鐨� class return true; } } } } //鍒ゆ柇id if(parentNode.id != null && typeof(parentNode.id) != 'undefined'){ //鏈夋晥鐨刢lass name锛岃繘琛屽垽鏂� if(translate.whole.id.indexOf(parentNode.id) > -1){ //鍙戠幇ignore.id 褰撳墠鏄浜庤蹇界暐鐨� id return true; } } //璧嬩簣鍒ゆ柇鐨勫厓绱犲悜涓婁竴绾� parentNode = parentNode.parentNode; } return false; } }, language:{ //褰撳墠鏈湴璇锛屾湰鍦拌瑷€锛岄粯璁ゆ槸绠€浣撲腑鏂囥€傝缃浣跨敤 translate.language.setLocal(...)銆備笉鍙洿鎺ヤ娇鐢紝浣跨敤闇€鐢� getLocal() local:'', /* 缈昏瘧璇鑼冨洿 姣斿浼犲叆 ['chinese_simplified','chinese_traditional','english'] 鍒欒〃绀轰粎瀵圭綉椤典腑鐨勭畝浣撲腑鏂囥€佺箒浣撲腑鏂囥€佽嫳鏂� 杩涜缈昏瘧锛岃€岀綉椤典腑鍑虹幇鐨勫叾浠栫殑鍍忔槸娉曡銆侀煩璇垯涓嶄細杩涜缈昏瘧 濡傛灉涓虹┖ []锛屽垯鏄炕璇戞椂锛岀炕璇戠綉椤典腑鐨勬墍鏈夎绉� 璁剧疆鏂瑰紡涓猴細 translate.language.translateLanguagesRange = ['chinese_simplified','chinese_traditional'] */ translateLanguagesRange: [], //浼犲叆璇銆傚叿浣撳彲浼犲叆鍝簺鍙傝€冿細 http://api.translate.zvo.cn/doc/language.json.html setLocal:function(languageName){ //translate.setUseVersion2(); //Set to use v2.x version translate.useVersion = 'v2'; translate.language.local = languageName; }, //鑾峰彇褰撳墠鏈湴璇锛屾湰鍦拌瑷€锛岄粯璁ゆ槸绠€浣撲腑鏂囥€傝缃浣跨敤 translate.language.setLocal(...) getLocal:function(){ //鍒ゆ柇鏄惁璁剧疆浜嗘湰鍦拌绉嶏紝濡傛灉娌¤缃紝鑷姩缁欏叾璁剧疆 if(translate.language.local == null || translate.language.local.length < 1){ translate.language.autoRecognitionLocalLanguage(); } return translate.language.local; }, /* 鑾峰彇褰撳墠璇銆� 姣斿褰撳墠璁剧疆鐨勬湰鍦拌绉嶆槸绠€浣撲腑鏂囷紝鐢ㄦ埛骞舵湭鍒囨崲鍏朵粬璇锛岄偅涔堣繖涓柟娉曞皢杩斿洖鏈湴褰撳墠鐨勮绉嶏紝涔熷氨鏄瓑鍚屼簬 translate.language.getLocal() 濡傛灉鐢ㄦ埛鍒囨崲涓鸿嫳璇繘琛屾祻瑙堬紝閭d箞杩欎釜鏂规硶灏嗚繑鍥炵炕璇戠殑鐩爣璇锛屼篃灏辨槸 english */ getCurrent:function(){ var to_storage = translate.storage.get('to'); if(to_storage != null && typeof(to_storage) != 'undefined' && to_storage.length > 0){ //涔嬪墠鏈夎繃浣跨敤锛屽苟涓斾富鍔ㄨ缃繃鐩爣璇 return to_storage; } return translate.language.getLocal(); }, //濡傛灉绗竴娆$敤锛岄粯璁や互浠€涔堣绉嶆樉绀恒€� //姣斿鏈湴褰撳墠璇鏄畝浣撲腑鏂囷紝杩欓噷璁剧疆涓篹nglish锛岄偅涔堢敤鎴风涓€娆′娇鐢ㄦ椂锛屼細鑷姩缈昏瘧涓篹nglish杩涜鏄剧ず銆傚鏋滅敤鎴锋墜鍔ㄥ垏鎹负鍏朵粬璇姣斿闊╄锛岄偅涔堝氨閬靛惊鐢ㄦ埛鎵嬪姩鍒囨崲鐨勪负涓伙紝鏄剧ず闊╄銆� setDefaultTo:function(languageName){ var to_storage = translate.storage.get('to'); if(to_storage != null && typeof(to_storage) != 'undefined' && to_storage.length > 0){ //涔嬪墠鏈夎繃浣跨敤锛屽苟涓斾富鍔ㄨ缃繃鐩爣璇锛岄偅涔堜笉杩涜澶勭悊 }else{ //娌℃湁璁剧疆杩囷紝杩涜澶勭悊 translate.storage.set('to', languageName); translate.to = languageName; } }, /* 娓呴櫎鍘嗗彶缈昏瘧璇鐨勭紦瀛� */ clearCacheLanguage:function(){ translate.to = ''; translate.storage.set('to',''); }, //鏍规嵁URL浼犲弬鎺у埗浠ヤ綍绉嶈绉嶆樉绀� //璁剧疆鍙互鏍规嵁褰撳墠璁块棶url鐨勬煇涓猤et鍙傛暟鏉ユ帶鍒朵娇鐢ㄥ摢绉嶈瑷€鏄剧ず銆� //姣斿褰撳墠璇鏄畝浣撲腑鏂囷紝缃戦〉url鏄痟ttp://translate.zvo.cn/index.html ,閭d箞鍙互閫氳繃鍦╱rl鍚庨潰澧炲姞 language 鍙傛暟鎸囧畾缈昏瘧璇锛屾潵浣跨綉椤靛唴瀹逛互鑻辨枃褰㈡€佹樉绀� http://translate.zvo.cn/index.html?language=english setUrlParamControl:function(paramName){ if(typeof(paramName) == 'undefined' || paramName.length < 1){ paramName = 'language'; } var paramValue = translate.util.getUrlParam(paramName); if(typeof(paramValue) == 'undefined'){ return; } if(paramValue == '' || paramValue == 'null' || paramValue == 'undefined'){ return; } translate.storage.set('to', paramValue); translate.to = paramValue; }, //鑷姩璇嗗埆褰撳墠椤甸潰鏄粈涔堣绉� autoRecognitionLocalLanguage:function(){ if(translate.language.local != null && translate.language.local.length > 2){ //宸茶缃繃浜嗭紝涓嶉渶瑕佸啀璁剧疆 return; } var bodyText = document.body.outerText; if(bodyText == null || typeof(bodyText) == 'undefined' || bodyText.length < 1){ //鏈彇鍒帮紝榛樿璧嬩簣绠€浣撲腑鏂� translate.language.local = 'chinese_simplified'; return; } bodyText = bodyText.replace(/\n|\t|\r/g,''); //灏嗗洖杞︽崲琛岀瓑鍘绘帀 //榛樿璧嬩簣绠€浣撲腑鏂� translate.language.local = 'chinese_simplified'; var recognition = translate.language.recognition(bodyText); translate.language.local = recognition.languageName; return translate.language.local; /* v3.1浼樺寲 var langs = new Array(); //涓婁竴涓瓧绗︾殑璇鏄粈涔堬紝褰撳墠瀛楃鍚戜笂鏁扮涓€涓瓧绗︺€傛牸寮忓 ['language']='english', ['chatstr']='a', ['storage_language']='english' 杩欓噷闈㈡湁3涓弬鏁帮紝鍒嗗埆浠h〃杩欎釜瀛楃灞炰簬閭d釜璇锛屽叾瀛楃鏄粈涔堛€佸瓨鍏ヤ簡鍝璇鐨勯槦鍒椼€傚洜涓哄儚鏄€楀彿锛屽彞鍙凤紝涓€鑸槸瀛樺叆鏈韩璇涓紝鑰屼笉鏄瓨鍏ョ壒娈婄鍙蜂腑銆� for(var i=0; i -1){ newLangs.splice(index,1); //绉婚櫎鏁扮粍涓殑鐗规畩瀛楃 } if(newLangs.length > 0){ //鎵惧埌鎺掑簭鍑虹幇棰戠巼鏈€澶氱殑 translate.language.local = newLangs[0]; }else{ //娌℃湁锛岄粯璁よ祴浜堢畝浣撲腑鏂� translate.language.local = 'chinese_simplified'; } */ }, /* * 鑾峰彇褰撳墠瀛楃鏄粈涔堣绉嶃€傝繑鍥炲€兼槸涓€涓瑷€鏍囪瘑锛屾湁 chinese_simplified绠€浣撲腑鏂囥€乯apanese鏃ヨ銆乲orean闊╄銆� * str : node.nodeValue 鎴� 鍥剧墖鐨� node.alt 绛� * 濡傛灉璇彞闀匡紝浼氬叏鍙ョ炕璇戯紝浠ヤ繚璇佺炕璇戠殑鍑嗙‘鎬э紝鎻愰珮鍙鎬с€� * 濡傛灉璇彞鐭紝浼氳嚜鍔ㄥ皢鐗规畩瀛楃銆佽缈昏瘧鐨勭洰鏍囪绉嶇粰杩囨护鎺夛紝鍙彇鍑哄叿浣撶殑瑕佺炕璇戠殑鐩爣璇鏂囨湰 * * 杩斿洖 瀛樻斁涓嶅悓璇█鐨勬暟缁勶紝鏍煎紡濡� * [ "english":[ {beforeText: '', afterText: '', text: 'emoambue hag'}, ...... ], "japanese":[ {beforeText: ' ', afterText: ' ', text: '岷� '}, ...... ] ] * */ get:function(str){ //灏唖tr鎷嗗垎涓哄崟涓猚har杩涜鍒ゆ柇 var langs = new Array(); //褰撳墠瀛楃涓插寘鍚摢浜涜瑷€鐨勬暟缁勶紝鍏跺唴濡� english var langStrs = new Array(); //瀛樻斁涓嶅悓璇█鐨勬枃鏈紝鏍煎紡濡� ['english'][0] = 'hello' var upLangs = []; //涓婁竴涓瓧绗︾殑璇鏄粈涔堬紝褰撳墠瀛楃鍚戜笂鏁扮涓€涓瓧绗︺€傛牸寮忓 ['language']='english', ['chatstr']='a', ['storage_language']='english' 杩欓噷闈㈡湁3涓弬鏁帮紝鍒嗗埆浠h〃杩欎釜瀛楃灞炰簬閭d釜璇锛屽叾瀛楃鏄粈涔堛€佸瓨鍏ヤ簡鍝璇鐨勯槦鍒椼€傚洜涓哄儚鏄€楀彿锛屽彞鍙凤紝涓€鑸槸瀛樺叆鏈韩璇涓紝鑰屼笉鏄瓨鍏ョ壒娈婄鍙蜂腑銆� var upLangsTwo = []; //涓婁簩涓瓧绗︾殑璇鏄粈涔� 锛屽綋鍓嶅瓧绗﹀悜涓婃暟绗簩涓瓧绗︺€� 鏍煎紡濡� ['language']='english', ['chatstr']='a', ['storage_language']='english' 杩欓噷闈㈡湁3涓弬鏁帮紝鍒嗗埆浠h〃杩欎釜瀛楃灞炰簬閭d釜璇锛屽叾瀛楃鏄粈涔堛€佸瓨鍏ヤ簡鍝璇鐨勯槦鍒椼€傚洜涓哄儚鏄€楀彿锛屽彞鍙凤紝涓€鑸槸瀛樺叆鏈韩璇涓紝鑰屼笉鏄瓨鍏ョ壒娈婄鍙蜂腑銆� //var upLangs = ''; //涓婁竴涓瓧绗︾殑璇鏄粈涔堬紝鏍煎紡濡� english for(var i=0; i -1){ newLangs.splice(index,1); //绉婚櫎 } //绉婚櫎鐗规畩瀛楃 var index = newLangs.indexOf('specialCharacter'); if(index > -1){ newLangs.splice(index,1); //绉婚櫎鏁扮粍涓殑鐗规畩瀛楃 } if(newLangs.length > 0){ //杩樺墿涓€涓垨澶氫釜锛岋紙濡傛灉鏄涓紝閭e簲璇ユ槸杩欏嚑涓嚭鐜扮殑棰戠巼涓€鏍凤紝鎵€浠ュ彇棰戠巼鏈€楂樼殑鏃惰繑鍥炰簡澶氫釜锛� return newLangs[0]; }else{ //娌℃壘鍒帮紝鐩存帴杩斿洖绌哄瓧绗︿覆 return ''; } */ //鍘婚櫎鐗规畩绗﹀彿 //for(var i = 0; i 0.05){ langkeys[langkeys.length] = lang+''; } } if(langkeys.length > 1 && langkeys.indexOf('english') > -1){ //console.log('鍑虹幇浜唀nglish, 骞朵笖english璺熷叾浠栬绉嶄竴璧峰嚭鐜帮紝閭d箞鍒犻櫎english锛屽洜涓轰粈涔堟硶璇痉璇贡涓冨叓绯熺殑閮芥湁鑻辫銆傝€屼笖涓枃璺熻嫳鏂囦竴璧凤紝濡傛灉璁や负鏄嫳鏂囩殑璇濓紝鏈夋椂鍊欎腑鏂囦細涓嶈缈昏瘧'); //langkeys.splice(langkeys.indexOf('english'), 1); langsNumber['english'] = 0; } if(langkeys.indexOf('chinese_simplified') > -1 && langkeys.indexOf('chinese_traditional') > -1){ //濡傛灉绠€浣撲腑鏂囪窡绻佷綋涓枃涓€璧峰嚭鐜帮紝閭d箞浼氬垽鏂綋鍓嶅彞瀛愪负绻佷綋涓枃銆� //langkeys.splice(langkeys.indexOf('chinese_simplified'), 1); langsNumber['chinese_simplified'] = 0; } //浠� langsNumber 涓壘鍑哄瓧鏁版渶澶氱殑鏉� var maxLang = ''; //瀛楁暟鏈€澶氱殑璇 var maxNumber = 0; for(var lang in langsNumber){ if(langsNumber[lang] > maxNumber){ maxLang = lang; maxNumber = langsNumber[lang]; } } //閲嶆柊缁勫悎杩斿洖鍊肩殑 languageArray var languageArray = {}; for(var lang in langs){ languageArray[lang] = {}; languageArray[lang].number = langsNumberOriginal[lang]; languageArray[lang].list = langs[lang]; } var result = { languageName: maxLang, languageArray: languageArray }; return result; }, // 浼犲叆涓€涓猚har锛岃繑鍥炶繖涓猚har灞炰簬浠€涔堣绉嶏紝杩斿洖濡� chinese_simplified銆乪nglish 濡傛灉杩斿洖绌哄瓧绗︿覆锛岄偅涔堣〃绀烘湭鑾峰彇鍒版槸浠€涔堣绉� getCharLanguage:function(charstr){ if(charstr == null || typeof(charstr) == 'undefined'){ return ''; } if(this.italian(charstr)){ return 'italian'; } if(this.english(charstr)){ return 'english'; } if(this.specialCharacter(charstr)){ return 'specialCharacter'; } if(this.number(charstr)){ return 'number'; } //涓枃鐨勫垽鏂寘鍚袱绉嶏紝绠€浣撹窡绻佷綋 var chinesetype = this.chinese(charstr); if(chinesetype == 'simplified'){ return 'chinese_simplified'; }else if(chinesetype == 'traditional'){ return 'chinese_traditional'; } if(this.japanese(charstr)){ return 'japanese'; } if(this.korean(charstr)){ return 'korean'; } //鏈瘑鍒槸浠€涔堣绉� //console.log('not find is language , char : '+charstr+', unicode: '+charstr.charCodeAt(0).toString(16)); return ''; }, /* * 瀵瑰瓧绗︿覆杩涜鍒嗘瀽锛屽垎鏋愬瓧绗︿覆鏄湁鍝嚑绉嶈瑷€缁勬垚銆� * language : 褰撳墠瀛楃鐨勮绉嶏紝浼犲叆濡� english * langStrs : 鎿嶄綔鐨勶紝濡� langStrs['english'][0] = '浣犲ソ' * upLangs : 褰撳墠瀛楃涔嬪墠鐨勪笂涓€涓瓧绗︾殑璇鏄粈涔堬紝褰撳墠瀛楃鍚戜笂鏁扮涓€涓瓧绗︺€傛牸寮忓 ['language']='english', ['chatstr']='a', ['storage_language']='english' 杩欓噷闈㈡湁3涓弬鏁帮紝鍒嗗埆浠h〃杩欎釜瀛楃灞炰簬閭d釜璇锛屽叾瀛楃鏄粈涔堛€佸瓨鍏ヤ簡鍝璇鐨勯槦鍒椼€傚洜涓哄儚鏄€楀彿锛屽彞鍙凤紝涓€鑸槸瀛樺叆鏈韩璇涓紝鑰屼笉鏄瓨鍏ョ壒娈婄鍙蜂腑銆� * upLangsTwo : 褰撳墠瀛楃涔嬪墠鐨勪笂浜屼釜瀛楃鐨勮绉嶆槸浠€涔� 锛屽綋鍓嶅瓧绗﹀悜涓婃暟绗簩涓瓧绗︺€� 鏍煎紡濡� ['language']='english', ['chatstr']='a', ['storage_language']='english' 杩欓噷闈㈡湁3涓弬鏁帮紝鍒嗗埆浠h〃杩欎釜瀛楃灞炰簬閭d釜璇锛屽叾瀛楃鏄粈涔堛€佸瓨鍏ヤ簡鍝璇鐨勯槦鍒椼€傚洜涓哄儚鏄€楀彿锛屽彞鍙凤紝涓€鑸槸瀛樺叆鏈韩璇涓紝鑰屼笉鏄瓨鍏ョ壒娈婄鍙蜂腑銆� * chatstr : 褰撳墠瀛楃锛屽 h */ analyse:function(language, langStrs, upLangs, upLangsTwo, charstr){ if(typeof(langStrs[language]) == 'undefined'){ langStrs[language] = new Array(); } var index = 0; //褰撳墠瑕佸瓨鍏ョ殑鏁扮粍涓嬫爣 if(typeof(upLangs['storage_language']) == 'undefined'){ //绗竴娆★紝閭d箞杩樻病瀛樺叆鍊硷紝index鑲畾涓�0 //console.log('绗竴娆★紝閭d箞杩樻病瀛樺叆鍊硷紝index鑲畾涓�0') //console.log(upLangs['language']) }else{ //console.log('analyse, charstr : '+charstr+', upLangs :'); //console.log(upLangs); //var isEqual = upLangs['storage_language'] == language; //涓婃璺熷綋鍓嶅瓧绗︽槸鍚﹂兘鏄悓涓€涓绉嶏紙杩欎釜瀛楃璺熻繖涓瓧绗﹀墠涓€涓瓧绗︼級 /* 鑻辫姣忎釜鍗曡瘝涔嬮棿閮戒細鏈夌┖鏍煎垎鍓�. 濡傛灉鏄嫳鏂囩殑璇濓紝鑻辨枃璺熺壒娈婂瓧绗﹁繕瑕佸崟鐙垽鏂竴涓嬶紝閬垮厤鎷嗗紑锛岄€犳垚缈昏瘧涓嶅噯锛屽崟涓崟璇嶇炕璇戠殑鎯呭喌 鎵€浠ュ鏋滀笂娆$殑瀛楃鏄嫳鏂囨垨鐗规畩绗﹀彿锛屽綋鍓嶅瓧绗︽槸鐗规畩绗﹀彿(閫楀彿銆佸彞鍙枫€佺┖鏍硷紝鐒跺悗鐩存帴绗肩粺灏卞惂鐗规畩绗﹀彿閮界畻涓婂惂)锛岄偅涔堜篃灏嗗綋娆$殑鐗规畩绗﹀彿鍙樹负鑻辨枃鏉ヨ繘琛岄€傞厤 绀轰緥 hello word 鐨� "o w" hello word 鐨� " w" hello word 鐨� "w " this is a dog 鐨� " a " */ //console.log(language == 'specialCharacter'); //濡傛灉涓や釜瀛楃绫诲瀷涓嶄竴鑷达紝浣嗗綋鍓嶅瓧绗︽槸鑻辨枃鎴栬繛鎺ョ鏃讹紝杩涜鍒ゆ柇 /* if(!isEqual){ if(language == 'english' || translate.language.connector(charstr)){ console.log('1.'+(language == 'english' || translate.language.connector(charstr))+', upLangs str:'+upLangs['charstr']); //涓婁竴涓瓧绗︽槸鑻辨枃鎴栬繛鎺ョ //console.log('teshu:'+translate.language.connector(upLangs['charstr'])+', str:'+upLangs['charstr']); if(upLangs['language'] == 'english' || translate.language.connector(upLangs['charstr'])) { console.log('2'); //濡傛灉涓婁簩涓瓧绗︿笉瀛樺湪锛岄偅涔堝垰寮€濮嬶紝涓嶅啀涓婇潰鍑犵鎯呭喌涔嬩腑锛岀洿鎺ヤ笉鐢ㄨ€冭檻 if(typeof(upLangsTwo['language']) != 'undefined'){ console.log('3') //涓婁簩涓瓧绗︽槸绌猴紙瀛楃涓插垰寮€濮嬶級锛屾垨鑰呮槸鑻辨枃 if(upLangsTwo['language'] == 'english' || translate.language.connector(upLangsTwo['charstr'])){ //婊¤冻杩欎笁涓潯浠讹紝閭e氨灏嗚繖涓変釜鎷兼帴鍒颁竴璧� console.log('4/5: '+', two lang:'+upLangsTwo['language']+', str:'+upLangsTwo['charstr']) isEqual = true; if(language == 'specialCharacter' && upLangs['language'] == 'specialCharacter' && upLangsTwo['language'] == 'specialCharacter'){ //濡傛灉涓変釜閮芥槸鐗规畩瀛楃锛屾垨鍚庝袱涓槸鐗规畩瀛楃锛岀涓€涓槸绌猴紙鍒氬紑濮嬶級锛岄偅灏卞綊鍏ョ壒娈婂瓧绗� language = 'specialCharacter'; //console.log('4') }else{ //涓嶇劧灏遍兘褰掍簬鑻辨枃涓€� //杩欓噷鏇存敼鏄负浜嗚涓嬮潰鑳藉皢鐗规畩瀛楃锛堝儚鏄┖鏍奸€楀彿绛夛級涔熶竴璧峰瓨鍏ユ暟缁� language = 'english'; console.log(5) } } } } } } */ /* 涓嶅垽鏂綋鍓嶅瓧绗︼紝鑰屽垽鏂笂涓瓧绗︼紝鏄洜涓哄綋鍓嶅瓧绗︽病娉曡幏鍙栨湭鐭ョ殑涓嬩釜瀛楃銆� */ //if(!isEqual){ //濡傛灉褰撳墠瀛楃鏄繛鎺ョ if(translate.language.connector(charstr)){ language = upLangs['storage_language']; /* //鍒ゆ柇涓婁釜瀛楃鏄惁瀛樺叆浜嗗緟缈昏瘧瀛楃锛屽瑕佸皢涓枃缈昏瘧涓鸿嫳鏂囷紝鑰屼笂涓瓧绗︽槸涓枃锛屽緟缈昏瘧锛岄偅灏嗚繛鎺ョ涓€骞跺姞鍏ュ緟缈昏瘧瀛楃涓幓锛屼繚鎸佸彞瀛愬畬鏁存€� //鍒ゆ柇渚濇嵁鏄笂涓瓧绗﹀瓨鍌ㄨ嚦鐨勭炕璇戝瓧绗﹁绉嶅簭鍒楋紝涓嶆槸鐗规畩瀛楃锛岃€屼笖涔熶笉鏄缈昏瘧鐨勭洰鏍囪绉嶏紝閭h偗瀹氬氨鏄緟缈昏瘧鐨勶紝灏嗚繛鎺ョ鍔犲叆寰呯炕璇戜腑涓€璧疯繘琛岀炕璇� if(upLangs['storage_language'] != 'specialCharacter' && upLangs['storage_language'] != translate.to){ language = upLangs['storage_language']; console.log('teshu:'+charstr+', 褰撳墠瀛楃骞跺叆涓婁釜瀛楃瀛樺偍缈昏瘧璇:'+upLangs['storage_language']); } */ } //} //console.log('isEqual:'+isEqual); /* if(isEqual){ //璺熶笂娆¤瑷€涓€鏍凤紝閭d箞鐩存帴鎷兼帴 index = langStrs[language].length-1; //浣嗘槸杩樻湁鍒殑鐗规畩鎯呭喌锛寁2.1閽堝鑻辨枃缈昏瘧鍑嗙‘搴︾殑閫傞厤锛屼細鏈夌壒娈婂瓧绗︾殑闂 if(typeof(upLangs['storage_language']) != 'undefined' && upLangs['storage_language'] != language){ //濡傛灉涓婁釜瀛楃瀛樺叆鐨勭炕璇戦槦鍒楄窡褰撳墠杩欎釜瑕佸瓨鍏ョ殑闃熷垪涓嶄竴涓殑璇濓紝閭e簲璇ユ槸鐗规畩瀛楃鍍忔槸閫楀彿鍙ュ彿绛夊鑷寸殑锛岄偅鏍疯繕瑕侀澶栦竴涓暟缁勶紝涓嶈兘鍦ㄥ瓨鍏ヤ箣鍓嶇殑鏁扮粍浜� index = langStrs[language].length; } }else{ //console.log('鏂板紑'); //褰撳墠瀛楃璺熶笂娆¤瑷€涓嶆牱锛岄偅涔堟柊寮€涓€涓暟缁� index = langStrs[language].length; //console.log('++, inde:'+index+',lang:'+language+', length:'+langStrs[language].length) } */ //褰撳墠瑕佺炕璇戠殑璇璺熶笂涓瓧绗﹁缈昏瘧鐨勮绉嶄竴鏍凤紝閭d箞鐩存帴鎷兼帴 if(upLangs['storage_language'] == language){ index = langStrs[language].length-1; }else{ //console.log('鏂板紑'); //褰撳墠瀛楃璺熶笂娆¤瑷€涓嶆牱锛岄偅涔堟柊寮€涓€涓暟缁� index = langStrs[language].length; } } if(typeof(langStrs[language][index]) == 'undefined'){ langStrs[language][index] = new Array(); langStrs[language][index]['beforeText'] = ''; langStrs[language][index]['afterText'] = ''; langStrs[language][index]['text'] = ''; } langStrs[language][index]['text'] = langStrs[language][index]['text'] + charstr; /* 涓枃鑻辨枃娣峰悎鏃讹紝褰撲腑鏂�+鑻辨枃骞舵病鏈夌┖鏍奸棿闅旓紝缈昏瘧涓鸿嫳鏂囨椂锛屼細浣夸腑鏂囩炕璇戣嫳鏂囩殑缁撴灉璺熷師鏈殑鑻辨枃鍗曡瘝杩炲埌涓€鍧椼€傝繖閲屽氨鏄В鍐宠繖绉嶆儏鍐� 閽堝褰撳墠闈炶嫳鏂�(涓嶉渶瑕佺┖鏍煎垎闅旂锛屽儚鏄腑鏂囥€侀煩璇�)锛屼絾瑕佺炕璇戜负鑻辨枃锛堥渶瑕佺┖鏍间綔涓哄垎鍓茬鍙凤紝鍍忔槸娉曡绛夛級鏃剁殑鎯呭喌杩涜鍒ゆ柇 */ //if(translate.language.getLocal() != 'english' && translate.to == 'english'){ //褰撳墠鏈湴璇鐨勮瑷€鏄繛缁殑锛屼絾缈昏瘧鐨勭洰鏍囪瑷€涓嶆槸杩炵画鐨勶紙绌烘牸闂撮殧锛� if( translate.language.wordBlankConnector(translate.language.getLocal()) == false && translate.language.wordBlankConnector(translate.to)){ if((upLangs['storage_language'] != null && typeof(upLangs['storage_language']) != 'undefined' && upLangs['storage_language'].length > 0)){ //涓婁釜瀛楃瀛樺湪 //console.log(upLangs['storage_language']); if(upLangs['storage_language'] != 'specialCharacter'){ //涓婁釜瀛楃涓嶆槸鐗规畩瀛楃 锛堟槸姝e父璇銆備笖涓嶄細鏄繛鎺ョ锛岃繛鎺ョ閮藉苟鍏ヤ簡姝e父璇锛� //if( upLangs['storage_language'] != 'english' && language == 'english'){ //涓婁釜瀛楃鐨勮瑷€鏄繛缁殑锛屼絾褰撳墠瀛楃鐨勮瑷€涓嶆槸杩炵画鐨勶紙绌烘牸闂撮殧锛� if( translate.language.wordBlankConnector(upLangs['storage_language']) == false && translate.language.wordBlankConnector(language) ){ //涓婁釜瀛楃涓嶆槸鑻辫锛屽綋鍓嶅瓧绗︽槸鑻辫锛岃繖绉嶆儏鍐佃鍦ㄤ笂涓瓧绗﹀悗闈㈣拷鍔犵┖鏍硷紝鍥犱负褰撳墠瀛楃鏄嫳鏂囷紝灏变笉浼氬湪鎵ц缈昏瘧鎿嶄綔浜� //console.log(upLangs['language']); langStrs[upLangs['storage_language']][langStrs[upLangs['storage_language']].length-1]['afterText'] = ' '; }else if(upLangs['storage_language'] == 'english' && language != 'english'){ //涓婁釜瀛楃鏄嫳璇紝褰撳墠瀛楃涓嶆槸鑻辫锛岀洿鎺ュ湪褰撳墠瀛楃鍓嶉潰杩藉姞绌烘牸 langStrs[language][index]['beforeText'] = ' '; } } } } var result = new Array(); result['langStrs'] = langStrs; result['storage_language'] = language; //瀹為檯瀛樺叆浜嗗摢绉嶈绉嶉槦鍒� //console.log(result); //console.log(langStrs) //console.log(charstr); return result; }, /* * 涓嶅悓浜庤瑷€锛岃繖涓彧鏄崟绾殑杩炴帴绗︺€傛瘮濡傝嫳鏂囧崟璇嶄箣闂存湁閫楀彿銆佸彞鍙枫€佺┖鏍硷紝 姹夊瓧涔嬮棿鏈夐€楀彿鍙ュ彿涔﹀悕鍙风殑銆傞伩鍏嶄竴琛屽畬鏁寸殑鍙ュ瓙琚垎鍓诧紝瀵艰嚧缈昏瘧涓嶅噯纭� * 鍗曠嫭鎷夸粬鍑烘潵锛岀洰鐨勬槸涓轰簡鏇村ソ鐨勫垽鏂绠楋紝鎻愰珮缈昏瘧鐨勫噯纭巼 */ connector:function(str){ /* 閫氱敤鐨勬湁 绌烘牸銆侀樋鎷変集鏁板瓧 1.涓嶉棿鏂┖鏍糪u00A0,涓昏鐢ㄥ湪office涓�,璁╀竴涓崟璇嶅湪缁撳熬澶勪笉浼氭崲琛屾樉绀�,蹇嵎閿甤trl+shift+space ; 2.鍗婅绌烘牸(鑻辨枃绗﹀彿)\u0020,浠g爜涓父鐢ㄧ殑; 3.鍏ㄨ绌烘牸(涓枃绗﹀彿)\u3000,涓枃鏂囩珷涓娇鐢�; */ if(/.*[\u0020\u00A0\u202F\u205F\u3000]+.*$/.test(str)){ return true; } /* U+0030 0 鏁板瓧 0 U+0031 1 鏁板瓧 1 U+0032 2 鏁板瓧 2 U+0033 3 鏁板瓧 3 U+0034 4 鏁板瓧 4 U+0035 5 鏁板瓧 5 U+0036 6 鏁板瓧 6 U+0037 7 鏁板瓧 7 U+0038 8 鏁板瓧 8 U+0039 9 鏁板瓧 9 */ if(/.*[\u0030-\u0039]+.*$/.test(str)){ return true } /* 鑻辨枃鍦烘櫙 鑻辨枃閫楀彿銆佸彞鍙� 杩欓噷涓嶅寘鎷�() 鍥犱负杩欓噷闈㈢殑鍩烘湰灞炰簬琛ュ厖锛屽璇彞鍓嶅悗骞舵棤寮轰緷璧栧叧绯� U+0021 ! 鍙瑰彿 U+0022 " 鍙屽紩鍙� U+0023 # 浜曞彿 U+0024 $ 浠烽挶/璐у竵绗﹀彿 U+0025 % 鐧惧垎姣旂鍙� U+0026 & 鑻辨枃鈥渁nd鈥濈殑绠€鍐欑鍙� U+0027 ' 寮曞彿 U+002C , 閫楀彿 U+002D - 杩炲瓧鍙�/鍑忓彿 U+002E . 鍙ュ彿 U+003A : 鍐掑彿 U+003B ; 鍒嗗彿 U+003F ? 闂彿 U+0040 @ 鑻辨枃鈥渁t鈥濈殑绠€鍐欑鍙� */ if(/.*[\u0021\u0022\u0023\u0024\u0025\u0026\u0027\u002C\u002D\u002E\u003A\u003B\u003F\u0040]+.*$/.test(str)){ return true; } /* 涓枃鏍囩偣绗﹀彿 鍚嶇О Unicode 绗﹀彿 鍙ュ彿 3002 銆� 闂彿 FF1F 锛� 鍙瑰彿 FF01 锛� 閫楀彿 FF0C 锛� 椤垮彿 3001 銆� 鍒嗗彿 FF1B 锛� 鍐掑彿 FF1A 锛� 寮曞彿 300C 銆� 300D 銆� 寮曞彿 300E 銆� 300F 銆� 寮曞彿 2018 鈥� 2019 鈥� 寮曞彿 201C 鈥� 201D 鈥� 鎷彿 FF08 锛� FF09 锛� 鎷彿 3014 銆� 3015 銆� 鎷彿 3010 銆� 3011 銆� 鐮存姌鍙� 2014 鈥� 鐪佺暐鍙� 2026 鈥� 杩炴帴鍙� 2013 鈥� 闂撮殧鍙� FF0E 锛� 涔﹀悕鍙� 300A 銆� 300B 銆� 涔﹀悕鍙� 3008 銆� 3009 銆� 閿洏123鍓嶉潰鐨勯偅涓鍙� 路 00b7 */ 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)){ return true; } //涓嶆槸锛岃繑鍥瀎alse return false; }, //璇鐨勫崟璇嶈繛鎺ョ鏄惁闇€瑕佺┖鏍硷紝姣斿涓枃绠€浣撱€佺箒浣撱€侀煩鏂囥€佹棩璇兘涓嶉渶瑕佺┖鏍硷紝鍒欒繑鍥瀎alse, 浣嗘槸鍍忔槸鑻辨枃鐨勫崟璇嶉棿闇€瑕佺┖鏍艰繘琛岄殧寮€锛屽垯杩斿洖true //濡傛灉鏈尮閰嶅埌锛岄粯璁よ繑鍥瀟rue //language锛氳绉嶏紝浼犲叆濡� english wordBlankConnector:function(language){ if(language == null || typeof(language) == 'undefined'){ return true; } switch (language.trim().toLowerCase()){ case 'chinese_simplified': return false; case 'chinese_traditional': return false; case 'korean': return false; case 'japanese': return false; } //鍏朵粬鎯呭喌鍒欒繑鍥瀟rue return true; }, //绻佷綋涓枃鐨勫瓧鍏革紝鍒ゆ柇绻佷綋涓枃灏辨槸閫氳繃姝ゅ垽鏂� chinese_traditional_dict: '鐨氳椆绀欐剾缈鸿濂у)缃锋摵鏁楅爳杈︾祮骞秮閹婅瑮鍓濋=瀵跺牨楫戣缉璨濋媷鐙藉倷鎲婄箖绛嗙暍鏂冮枆閭婄法璨惰畩杈井榧堢櫉鐎曟勘璩撴摨椁呮挜缂介墤椐佽敂瑁滃弮锠舵畼鎱氭厴鐕﹁捈鑹欏€夋粍寤佸伌鍐婃脯灞よ┇鏀欐懟锜璁掔簭閺熺敚闂¢~鍫村槜闀峰劅鑵稿粻鏆㈤垟杌婂竟濉甸櫝瑗拹绋辨嚥瑾犻▉鐧¢伈棣虫仴榻掔喚娌栬煵瀵电枃韬婄睂缍㈤啘娅ュ粴閶ら洓绀庡劜瑙歌檿鍌崇槨闂栧壍閷樼磾缍借经瑭炶硿鑱拌敟鍥緸鍙㈡箠绔勯尟閬斿付璨告摂鍠劜鎾h喗鎲氳獣褰堢暥鎿嬮花钑╂獢鎼楀扯绂卞皫鐩滅噲閯ф暤婊岄仦绶犻粸澧婇浕婢遍嚕瑾垮彔璜滅枈閲橀爞閷犺▊鏉卞嫊妫熷噸楝ョ姠鐛ㄨ畝璩崓閸涙柗绶炲厡闅婂皪鍣搁爴閳嶅オ榈濋瑷涙儭椁撳厭鐖鹃璨崇櫦缃伴枼鐞虹が閲╃叐绡勮博椋í绱¢寤㈣不绱涘⒊濂啢绯炶睈妤撻嫆棰ㄧ構棣斧璜烽吵鑶氳蓟鎾紨璩﹁璨犺▋濠︾笡瑭查垼钃嬪构瓒曠▓璐涘病鍓涢嫾缍卞礂鑷幀鎿遍纯闁i壔鍊嬬郸榫斿闉忚并閳庢簼妲嬭臣澶犺牨椤у壆闂滆椁ㄦ叄璨唬瑕忕熃姝搁緶闁ㄨ粚瑭珒璨村妸杓ユ痪閸嬪湅閬庨Л闊撴饥闁¢洞璩€姗綗榇荤磪寰屽:璀锋滑鎴跺槱鑿暙鍔冭┍鎳峰姝$挵閭勭珐鎻涘枤鐦撶叆娓欓粌璎婃彯杓濇瘈璩勭鏈冪嚧褰欒瑾ㄧ躬钁锋妇澶ョ嵅璨ㄧ鎿婃绌嶉璀忛洖绺剧窛妤佃集绱氭摖骞捐枈鍔戞繜瑷堣闅涚辜绱€澶捐帰闋拌硤閴€鍍归娈茬洠鍫呯畫闁撹壉绶樼弓妾㈠牽楣兼弨鎾跨啊鍎夋笡钖︽閼掕笎璩よ閸佃墻鍔嶉婕告亢婢楁伎钄fС鐛庤瑳閱啝婢嗛⿻瀣屾敧閴哥煰鍍ヨ叧椁冪钩绲炶綆杓冪ō闅庣瘈鑾栭缍撻牳闈滈彙寰戠棛绔舵法绯惧粍鑸婇鑸夋摎閶告嚰鍔囬祽绲瑰倯娼旂祼瑾″眴绶婇對鍍呰閫叉檳鐕肩洝鍕佽崐瑕烘焙瑷g禃閳炶粛椐块枊鍑遍娈艰澧炬噰鎽冲韩瑜茶獓濉婂剤瀵う鏇犳硜铏у穻绐洪娼版摯闂婅牊鑷樿悐渚嗚炒钘嶆瑒鏀旂眱闂岃槶鐎捐畷鏀鎳剁簻鐖涙揩鎾堝嫗婢囨▊閻冲椤炴窔绫洟瑁忛瘔绂簵鍘插嫷绀泦鐎濋毟鍊嗚伅钃€i惍鎲愭迹绨炬杺鑷夐張鎴€鐓夌反绯ф都鍏╄紱璜掔檪閬奸悙鐛佃嚚閯伴睏鍑滆硟榻¢埓娣╅潏宥洪牁椁惧妷榫嶈伨鍤ㄧ睜澹熸攺闅存〒濠佹憻绨嶈槅鐩ч”寤垚鎿勯沟铏滈璩傜タ閷勯櫢椹㈠憘閶佷径灞㈢阜鎱烤缍犲窉鏀e鐏や簜鎺勮吉鍊緰娣陡璜栬樋缇呴倧閼肩碑楱鹃П绲″鐟⒓铻為Μ缃靛棊璨烽亥璩i倎鑴堢灋楗呰牷婊胯璨撻尐閴氳部楹介淮娌掗巶闁€鎮跺€戦尦澶㈣瑤褰岃缍跨番寤熸粎鎲柀槌撮姌璎瑎鐣濋垑绱嶉洠鎾撹叇鎯遍椁掕啯鏀嗘挌閲€槌ヨ伓榻ч懛閹虫鐛扮敮鎿版繕閳曠磹鑶挎績杈茬槯璜炬瓙榉楁瘑鍢旀細鐩ら緪鍦嬫剾璩犲櫞榈椋勯牷璨ц構鎲戣⿻娼戦牀鎾查嫪妯歌瓬鑷嶉綂楱庤眻鍟撴埃妫勮鐗芥墶閲洪墰閬风敖璎欓將閴楁經娣鸿濉规鍡嗙墕钖斿挤鎼堕崿姗嬪柆鍍戠抗绔呯珚娆借Κ杓曟矮鍌鹃爟璜嬫叾鐡婄瓒ㄥ崁杌€椹呴讲椤存瑠鍕稿嵒榈茶畵楗掓摼绻炵啽闊岃獚绱夋Ξ绲ㄨ粺閵抽枏娼ょ亼钖╅皳璩藉倶鍠ǚ鎺冩線娈虹礂绡╂洭闁冮櫇璐嶇箷鍌疯碁鐕掔垂璩掓敐鎳捐ō绱冲瀣歌厧婊茶伈绻╁嫕鑱栧斧鐛呮繒瑭╁睄鏅傝潟瀵﹁瓨椐涘嫝閲嬮>瑕栬│澹界嵏妯炶几鏇歌礀灞妯硅睅鏁稿弗闆欒绋呴爢瑾ⅸ鐖嶇挡椋艰伋鎱爩瑷熻鎿昏槆瑷磋倕闆栫稄姝插鎼嶇瓖绺懀閹栫嵑鎾绘摗鏀よ勃鐧辩仒澹囪瓪璜囨瓗婀嚈婵ょ抚楱拌瑒閵婚楂斿睖姊濊布閻靛怀鑱界兇閵呯当闋湒濉楀湗闋硅浕鑴磿棣遍姗㈢瑗綆鐏i爲钀恫闊嬮仌鍦嶇埐婵扮董钁﹀亯鍍炵矾璎傝婧仦绱嬬┅鍟忕敃鎾捐澑娓︾鍡氶帰鐑忚鐒¤暘鍚冲、闇у嫏瑾ら尗鐘цゲ缈掗姂鎴茬窗铦﹁絼宄戒繝鐙瑰粓閸侀绾栭构璩㈤姕闁戦’闅従鐛荤福椁$鲸鎲茬窔寤傞懖閯夎┏闊块爡钑姺鏇夊槸锠嶅崝鎸炬敎鑴呰瀵€夎瑵閶呴噥鑸堟炊閺界埂铏涘檽闋堣ū绶掔簩杌掓嚫閬哥櫖绲㈠鍕宠灏嬮Υ瑷撹▕閬滃榇夐川鍟炰簽瑷濋柟鐓欓菇鍤撮闁昏睌鍘’褰ヨ椹楅处妤婃彋鐦嶉櫧鐧㈤妯g懁鎼栧牤閬欑璎犺棩鐖洪爜妤憠閱姤闋ら伜鍎€褰滆熁钘濆剟鎲剁京瑭h瑾艰鐣扮构钄櫚閵€椋叉瀣伴饭鎳夌簱鐟╄灑鐕熺啋锠呯⿴鍠叉搧鍌櫚韪磋婀у劒鎲傞兊閳剧尪閬婅獦杓块瓪婕佸鑸囧都瑾炵辈绂︾崉璀介爯棣礇娣佃絽鍦掑摗鍦撶罚閬犻绱勮簫閼板督绮垫倕闁遍洸閯栧嫽闅曢亱铇婇啚鏆堥熁闆滅伣杓夋敘鏆磰璐撻珤閼挎绔堣铂鎿囧墖婢よ硦璐堢串鍔勮粙閸橀枠瑭愰綃鍌垫皥鐩炴柆杓惧秳妫ф埌缍诲嫉婕插赋璩劰瓒欒焺杞嶉嵑閫欒矠閲濆伒瑷洪幃闄f帣鐫滅寵骞€閯瓑绻旇伔鍩风礄鎽摬骞熻唱閸剧祩绋叓琛嗚瑓杌哥毢鏅濋璞瑾呯嚟鐭氬洃璨憚绡夐灏堢杞夎澈妯佽帄瑁濆澹媭閷愯磪澧滅洞璜勬縼鑼茶硣婕工缍滅附绺遍剴瑭涚祫閼界坊閻橀杭鐐洪毣鍏囨簴鍟熼梿瑁¢潅椁橀崐娲�', /* 涓枃鍒ゆ柇 杩斿洖锛� simplified锛氱畝浣撲腑鏂� traditional锛氱箒浣撲腑鏂� 绌哄瓧绗︿覆锛氫笉鏄腑鏂� */ chinese:function(str){ if(/.*[\u4e00-\u9fa5]+.*$/.test(str)){ if(this.chinese_traditional_dict.indexOf(str) > -1){ return 'traditional'; } else { return 'simplified'; } } else { return ''; } }, //鏄惁鍖呭惈鑻辨枃锛宼rue:鍖呭惈 english:function(str){ if(/.*[\u0041-\u005a]+.*$/.test(str)){ return true; } else if(/.*[\u0061-\u007a]+.*$/.test(str)){ return true; } else { return false; } }, //鏄惁鍖呭惈鏃ヨ锛宼rue:鍖呭惈 japanese:function(str){ if(/.*[\u3040-\u309F\u30A0-\u30FF]+.*$/.test(str)){ return true } else { return false; } }, //鏄惁鍖呭惈闊╄锛宼rue:鍖呭惈 korean:function(str){ if(/.*[\uAC00-\uD7AF]+.*$/.test(str)){ return true } else { return false; } }, //0-9 闃挎媺浼暟瀛� number:function(str){ if(/.*[\u0030-\u0039]+.*$/.test(str)){ return true; } return false; }, //鎰忓ぇ鍒╄ italian:function(str){ if(/.*[\u00E0-\u00F6]+.*$/.test(str)){ return true; } return false; }, //鏄惁鍖呭惈鐗规畩瀛楃 specialCharacter:function(str){ //濡傦細鈶� 鈶� 鈷� if(/.*[\u2460-\u24E9]+.*$/.test(str)){ return true } //濡傦細鈹娾攲鈹� 鈻� 鈻� 鈻� if(/.*[\u2500-\u25FF]+.*$/.test(str)){ return true } //濡傦細銏� 銕� 銕� 銕� if(/.*[\u3200-\u33FF]+.*$/.test(str)){ return true } //濡傦細涓嶢NSI瀵瑰簲鐨勫叏瑙掑瓧绗� if(/.*[\uFF00-\uFF5E]+.*$/.test(str)){ return true } //鍏跺畠鐗规畩绗﹀彿 if(/.*[\u2000-\u22FF]+.*$/.test(str)){ return true } // 銆�><绛夌鍙� if(/.*[\u3001-\u3036]+.*$/.test(str)){ return true; } /* //闃挎媺浼暟瀛� 0-9 if(/.*[\u0030-\u0039]+.*$/.test(str)){ return true; } */ /* U+0020 绌烘牸 U+0021 ! 鍙瑰彿 U+0022 " 鍙屽紩鍙� U+0023 # 浜曞彿 U+0024 $ 浠烽挶/璐у竵绗﹀彿 U+0025 % 鐧惧垎姣旂鍙� U+0026 & 鑻辨枃鈥渁nd鈥濈殑绠€鍐欑鍙� U+0027 ' 寮曞彿 U+0028 ( 寮€ 宸﹀渾鎷彿 U+0029 ) 鍏� 鍙冲渾鎷彿 U+002A * 鏄熷彿 U+002B + 鍔犲彿 U+002C , 閫楀彿 U+002D - 杩炲瓧鍙�/鍑忓彿 U+002E . 鍙ュ彿 U+002F / 宸︽枩鏉� */ if(/.*[\u0020-\u002F]+.*$/.test(str)){ return true; } /* U+003A : 鍐掑彿 U+003B ; 鍒嗗彿 U+003C < 灏忎簬绗﹀彿 U+003D = 绛変簬鍙� U+003E > 澶т簬绗﹀彿 U+003F ? 闂彿 U+0040 @ 鑻辨枃鈥渁t鈥濈殑绠€鍐欑鍙� U+0041 A 鎷変竵瀛楁瘝 A U+0042 B 鎷変竵瀛楁瘝 B U+0043 C 鎷変竵瀛楁瘝 C U+0044 D 鎷変竵瀛楁瘝 D U+0045 E 鎷変竵瀛楁瘝 E U+0046 F 鎷変竵瀛楁瘝 F U+0047 G 鎷変竵瀛楁瘝 G U+0048 H 鎷変竵瀛楁瘝 H U+0049 I 鎷変竵瀛楁瘝 I U+004A J 鎷変竵瀛楁瘝 J U+004B K 鎷変竵瀛楁瘝 K U+004C L 鎷変竵瀛楁瘝 L U+004D M 鎷変竵瀛楁瘝 M U+004E N 鎷変竵瀛楁瘝 N U+004F O 鎷変竵瀛楁瘝 O U+0050 P 鎷変竵瀛楁瘝 P U+0051 Q 鎷変竵瀛楁瘝 Q U+0052 R 鎷変竵瀛楁瘝 R U+0053 S 鎷変竵瀛楁瘝 S U+0054 T 鎷変竵瀛楁瘝 T U+0055 U 鎷変竵瀛楁瘝 U U+0056 V 鎷変竵瀛楁瘝 V U+0057 W 鎷変竵瀛楁瘝 W U+0058 X 鎷変竵瀛楁瘝 X U+0059 Y 鎷変竵瀛楁瘝 Y U+005A Z 鎷変竵瀛楁瘝 Z U+005B [ 寮€ 鏂规嫭鍙� U+005C \ 鍙虫枩鏉� U+005D ] 鍏� 鏂规嫭鍙� U+005E ^ 鎶戞壃锛堥噸闊筹級绗﹀彿 U+005F _ 搴曠嚎 U+0060 ` 閲嶉煶绗� U+0061 a 鎷変竵瀛楁瘝 a U+0062 b 鎷変竵瀛楁瘝 b U+0063 c 鎷変竵瀛楁瘝 c U+0064 d 鎷変竵瀛楁瘝 d U+0065 e 鎷変竵瀛楁瘝 e U+0066 f 鎷変竵瀛楁瘝 f U+0067 g 鎷変竵瀛楁瘝 g U+0068 h 鎷変竵瀛楁瘝 h U+0069 i 鎷変竵瀛楁瘝 i U+006A j 鎷変竵瀛楁瘝 j U+006B k 鎷変竵瀛楁瘝 k U+006C l 鎷変竵瀛楁瘝 l锛圠鐨勫皬鍐欙級 U+006D m 鎷変竵瀛楁瘝 m U+006E n 鎷変竵瀛楁瘝 n U+006F o 鎷変竵瀛楁瘝 o U+0070 p 鎷変竵瀛楁瘝 p U+0071 q 鎷変竵瀛楁瘝 q U+0072 r 鎷変竵瀛楁瘝 r U+0073 s 鎷変竵瀛楁瘝 s U+0074 t 鎷変竵瀛楁瘝 t U+0075 u 鎷変竵瀛楁瘝 u U+0076 v 鎷変竵瀛楁瘝 v U+0077 w 鎷変竵瀛楁瘝 w U+0078 x 鎷変竵瀛楁瘝 x U+0079 y 鎷変竵瀛楁瘝 y U+007A z 鎷変竵瀛楁瘝 z U+007B { 寮€ 宸﹁姳鎷彿 U+007C | 鐩寸嚎 U+007D } 鍏� 鍙宠姳鎷彿 U+007E ~ 娉㈡氮绾� */ if(/.*[\u003A-\u007E]+.*$/.test(str)){ return true; } //绌虹櫧瀛楃锛孿u0009\u000a + https://cloud.tencent.com/developer/article/2128593 if(/.*[\u0009\u000a\u0020\u00A0\u1680\u180E\u202F\u205F\u3000\uFEFF]+.*$/.test(str)){ return true; } if(/.*[\u2000-\u200B]+.*$/.test(str)){ return true; } /* 鎷変竵瀛楁瘝 浠g爜 鏄剧ず 鎻忚堪 U+00A1 隆 鍊掕浆鐨勫徆鍙� U+00A2 垄 锛堣揣甯佸崟浣嶏級鍒嗛挶銆佹瀛� U+00A3 拢 锛堣揣甯侊級鑻遍晳 U+00A4 陇 锛堣揣甯侊級褰撹揣甯佹湭鏈夌鍙锋椂浠ユ鏇夸唬 U+00A5 楼 锛堣揣甯侊級鏃ュ厓 U+00A6 娄 涓ゆ潯鏂紑鐨勭洿绾� U+00A7 搂 鏂囦欢鍒嗕笉鍚岄儴鍒� U+00A8 篓 锛堣瑷€锛夊垎闊� U+00A9 漏 鐗堟潈绗� U+00AA 陋 锛堟剰澶у埄鏂囥€佽憽钀勭墮鏂囥€佽タ鐝墮鏂囷級闃存€у簭鏁� U+00AB 芦 鍙岄噸瑙掑舰寮曞彿 U+00AC 卢 閫昏緫闈� U+00AE 庐 鍟嗘爣 U+00AF 炉 闀块煶 U+00B0 掳 瑙掑害 U+00B1 卤 姝h礋鍙� U+00B2 虏 浜屾鏂� U+00B3 鲁 涓夋鏂� U+00B4 麓 閿愰煶绗� U+00B5 碌 鐧句竾鍒嗕箣涓€锛�10?6 U+00B6 露 鏂囩珷鍒嗘 U+00B7 路 闂撮殧鍙� U+00B8 赂 杞煶绗� U+00B9 鹿 涓€娆℃柟 U+00BA 潞 锛堟剰澶у埄鏂囥€佽憽钀勭墮鏂囥€佽タ鐝墮鏂囷級闃虫€у簭鏁� U+00BB 禄 鎸囧悜鍙崇殑鍙岀澶� U+00BC 录 鍥涘垎涔嬩竴 U+00BD 陆 浜屽垎涔嬩竴 U+00BE 戮 鍥涘垎涔嬩笁 U+00BF 驴 鍊掕浆鐨勯棶鍙� U+00C1 脕 鍦ㄦ媺涓佸瓧姣� A 涓婂姞閿愰煶绗� U+00C2 脗 鍦ㄦ媺涓佸瓧姣� A 涓婂姞鎶戞壃绗︹€淾鈥� U+00C3 脙 鍦ㄦ媺涓佸瓧姣� A 涓婂姞鈥渵鈥� U+00C4 脛 鍦ㄦ媺涓佸瓧姣� A 涓婂姞鍒嗛煶绗︹€�..鈥� U+00C5 脜 鍦ㄦ媺涓佸瓧姣� A 涓婂姞瑙掑害绗︹€溌扳€� U+00C6 脝 鎷変竵瀛楁瘝 A銆丒 鐨勬贩鍚� U+00C7 脟 鍦ㄦ媺涓佸瓧姣� C 涓嬪姞杞煶绗� U+00C8 脠 鍦ㄦ媺涓佸瓧姣� E 涓婂姞閲嶉煶绗� U+00C9 脡 鍦ㄦ媺涓佸瓧姣� E 涓婂姞閿愰煶绗� U+00CA 脢 鍦ㄦ媺涓佸瓧姣� E 涓婂姞鎶戞壃绗� U+00CB 脣 鍦ㄦ媺涓佸瓧姣� E 涓婂姞鍒嗛煶绗� U+00CC 脤 鍦ㄦ媺涓佸瓧姣� I 涓婂姞閲嶉煶绗� U+00CD 脥 鍦ㄦ媺涓佸瓧姣� I 涓婂姞閿愰煶绗� U+00CE 脦 鍦ㄦ媺涓佸瓧姣� I 涓婂姞鎶戞壃绗� U+00CF 脧 鍦ㄦ媺涓佸瓧姣� I 涓婂姞鍒嗛煶绗� U+00D0 脨 鍙ゆ媺涓佸瓧姣嶏紝鐜板彧鏈夋硶缃楁枃鍜屽啺宀涙枃鍜岃秺鍗楄浣跨敤 U+00D1 脩 鍦ㄦ媺涓佸瓧姣� N 涓婂姞娉㈡氮绾光€渵鈥� U+00D2 脪 鍦ㄦ媺涓佸瓧姣� O 涓婂姞閲嶉煶绗� U+00D3 脫 鍦ㄦ媺涓佸瓧姣� O 涓婂姞閿愰煶绗� U+00D4 脭 鍦ㄦ媺涓佸瓧姣� O 涓婂姞鎶戞壃绗� U+00D5 脮 鍦ㄦ媺涓佸瓧姣� O 涓婂姞娉㈡氮绾光€渵鈥� U+00D6 脰 鍦ㄦ媺涓佸瓧姣� O 涓婂姞鍒嗛煶绗� U+00D7 脳 涔樺彿锛屼害鍙嫋鎸夆€淎lt鈥濋敭锛屽悓鏃舵寜鈥�41425鈥濅簲閿� U+00D8 脴 鍦ㄦ媺涓佸瓧姣� O 鐢卞彸涓婅嚦宸︿笅鍔犲瑙掓枩绾库€�/鈥� U+00D9 脵 鍦ㄦ媺涓佸瓧姣� U 涓婂姞閲嶉煶绗� U+00DA 脷 鍦ㄦ媺涓佸瓧姣� U 涓婂姞閿愰煶绗� U+00DB 脹 鍦ㄦ媺涓佸瓧姣� U 涓婂姞鎶戞壃绗� U+00DC 脺 鍦ㄦ媺涓佸瓧姣� U 涓婂姞鍒嗛煶绗� U+00DD 脻 鍦ㄦ媺涓佸瓧姣� Y 涓婂姞閿愰煶绗� U+00DE 脼 鍙ゆ媺涓佸瓧姣嶏紝鐜板凡琚€淭h鈥濆彇鏇� U+00DF 脽 寰锋枃瀛楁瘝 U+00E0 脿 鍦ㄦ媺涓佸瓧姣� a 涓婂姞閲嶉煶绗� U+00E1 谩 鍦ㄦ媺涓佸瓧姣� a 涓婂姞閿愰煶绗� U+00E2 芒 鍦ㄦ媺涓佸瓧姣� a 涓婂姞鎶戞壃绗� U+00E3 茫 鍦ㄦ媺涓佸瓧姣� a 涓婂姞娉㈡氮绾光€渵鈥� U+00E4 盲 鍦ㄦ媺涓佸瓧姣� a 涓婂姞鍒嗛煶绗� U+00E5 氓 鍦ㄦ媺涓佸瓧姣� a 涓婂姞瑙掑害绗︹€溌扳€� U+00E6 忙 鎷変竵瀛楁瘝 a銆乪 鐨勬贩鍚� U+00E7 莽 鍦ㄦ媺涓佸瓧姣� c 涓嬪姞杞煶绗� U+00E8 猫 鍦ㄦ媺涓佸瓧姣� e 涓婂姞閿愰煶绗� U+00E9 茅 鍦ㄦ媺涓佸瓧姣� e 涓婂姞閲嶉煶绗� U+00EA 锚 鍦ㄦ媺涓佸瓧姣� e 涓婂姞鎶戞壃绗� U+00EB 毛 鍦ㄦ媺涓佸瓧姣� e 涓婂姞鍒嗛煶绗� U+00EC 矛 鍦ㄦ媺涓佸瓧姣� i 涓婂姞閲嶉煶绗� U+00ED 铆 鍦ㄦ媺涓佸瓧姣� i 涓婂姞閿愰煶绗� U+00EE 卯 鍦ㄦ媺涓佸瓧姣� i 涓婂姞鎶戞壃绗� U+00EF 茂 鍦ㄦ媺涓佸瓧姣� i 涓婂姞鍒嗛煶绗� U+00F0 冒 鍙ゆ媺涓佸瓧姣� U+00F1 帽 鍦ㄦ媺涓佸瓧姣� n 涓婂姞娉㈡氮绾光€渵鈥� U+00F2 貌 鍦ㄦ媺涓佸瓧姣� o 涓婂姞閲嶉煶绗� U+00F3 贸 鍦ㄦ媺涓佸瓧姣� o 涓婂姞閿愰煶绗� U+00F4 么 鍦ㄦ媺涓佸瓧姣� o 涓婂姞鎶戞壃绗� U+00F5 玫 鍦ㄦ媺涓佸瓧姣� o 涓婂姞娉㈡氮绾光€渵鈥� U+00F6 枚 鍦ㄦ媺涓佸瓧姣� o 涓婂姞鍒嗛煶绗� U+00F7 梅 闄ゅ彿锛屼害鍙嫋鎸夆€淎lt鈥濋敭锛屽悓鏃舵寜鈥�41426鈥濅簲閿� U+00F8 酶 鍦ㄦ媺涓佸瓧姣� o 鐢卞彸涓婅嚦宸︿笅鍔犲瑙掓枩绾库€�/鈥� U+00F9 霉 鍦ㄦ媺涓佸瓧姣� u 涓婂姞閲嶉煶绗� U+00FA 煤 鍦ㄦ媺涓佸瓧姣� u 涓婂姞閿愰煶绗� U+00FB ? 鍦ㄦ媺涓佸瓧姣� u 涓婂姞鎶戞壃绗� U+00FC 眉 鍦ㄦ媺涓佸瓧姣� u 涓婂姞鍒嗛煶绗� U+00FD 媒 鍦ㄦ媺涓佸瓧姣� y 涓婂姞閿愰煶绗� U+00FE 镁 鍙ゆ媺涓佸瓧姣嶏紝鐜板凡琚€渢h鈥濆彇鏇� U+00FF 眉 鍦ㄦ媺涓佸瓧姣� u 涓婂姞鍒嗛煶绗� 鎷変竵瀛楁瘝锛堟墿灞� A锛� 浠g爜 鏄剧ず 鎻忚堪 U+0100 膧 鍦ㄦ媺涓佸瓧姣� A 涓婂姞闀块煶绗� U+0101 膩 鍦ㄦ媺涓佸瓧姣� a 涓婂姞闀块煶绗� U+0102 膫 鍦ㄦ媺涓佸瓧姣� A 涓婂姞鐭煶绗� U+0103 膬 鍦ㄦ媺涓佸瓧姣� a 涓婂姞鐭煶绗� U+0104 膭 鍦ㄦ媺涓佸瓧姣� A 涓婂姞鍙嶅熬褰㈢ U+0105 膮 鍦ㄦ媺涓佸瓧姣� a 涓婂姞鍙嶅熬褰㈢ 鎷変竵瀛楁瘝锛堟墿灞� C锛� 浠g爜 鏄剧ず 鎻忚堪 U+2C60 獗� 鍦ㄦ媺涓佸瓧姣嶁€淟鈥濅腑闂村姞涓ゆ潯妯嚎鈥�=鈥� U+2C61 獗� 鍦ㄦ媺涓佸瓧姣嶁€渓鈥濓紙L 鐨勫皬鍐欙級涓棿鍔犱袱鏉℃í绾库€�=鈥� U+2C62 獗� 鍦ㄦ媺涓佸瓧姣嶁€淟鈥濓紙澶у啓锛変腑闂村姞涓€鏉℃尝娴嚎鈥渵鈥� U+2C63 獗� 鍦ㄦ媺涓佸瓧姣嶁€淧鈥濅腑闂村姞涓€鏉℃í绾库€�-鈥� U+2C64 獗� 鍦ㄦ媺涓佸瓧姣嶁€淩鈥濅笅鍔犱竴鏉″熬宸� U+2C65 獗� 鍦ㄦ媺涓佸瓧姣嶁€渁鈥濅笂鍔犱竴鏉″瑙掓枩绾库€�/鈥� U+2C66 獗� 鍦ㄦ媺涓佸瓧姣嶁€渢鈥濅笂鍔犱竴鏉″瑙掓枩绾库€�/鈥� U+2C67 獗� 鍦ㄦ媺涓佸瓧姣嶁€淗鈥濅笅鍔犱竴鏉″熬宸� U+2C68 獗� 鍦ㄦ媺涓佸瓧姣嶁€渉鈥濅笅鍔犱竴鏉″熬宸� U+2C69 獗� 鍦ㄦ媺涓佸瓧姣嶁€淜鈥濅笅鍔犱竴鏉″熬宸� U+2C6A 獗� 鍦ㄦ媺涓佸瓧姣嶁€渒鈥濅笅鍔犱竴鏉″熬宸� U+2C6B 獗� 鍦ㄦ媺涓佸瓧姣嶁€淶鈥濅笅鍔犱竴鏉″熬宸� U+2C6C 獗� 鍦ㄦ媺涓佸瓧姣嶁€渮鈥濅笅鍔犱竴鏉″熬宸� U+2C74 獗� 鍦ㄦ媺涓佸瓧姣嶁€渧鈥濈殑璧风瑪鍔犱竴涓集鍕� U+2C75 獗� 鎷変竵瀛楁瘝鈥淗鈥濈殑宸﹀崐閮� U+2C76 獗� 鎷変竵瀛楁瘝鈥渉鈥濈殑宸﹀崐閮� U+2C77 獗� 甯岃厞瀛楁瘝鈥溝嗏€濈殑涓婂崐閮� */ if(/.*[\u00A1-\u0105]+.*$/.test(str)){ return true; } if(/.*[\u2C60-\u2C77]+.*$/.test(str)){ return true; } return false; } }, //鐢ㄦ埛绗竴娆℃墦寮€缃戦〉鏃讹紝鑷姩鍒ゆ柇褰撳墠鐢ㄦ埛鎵€鍦ㄥ浗瀹朵娇鐢ㄧ殑鏄摢绉嶈瑷€锛屾潵鑷姩杩涜鍒囨崲涓虹敤鎴锋墍鍦ㄥ浗瀹剁殑璇銆� //濡傛灉浣跨敤鍚庯紝绗簩娆″湪鐢紝閭e氨浼樺厛浠ョ敤鎴锋墍閫夋嫨鐨勪负涓� executeByLocalLanguage:function(){ translate.request.post(translate.request.api.ip, {}, function(data){ //console.log(data); if(data.result == 0){ console.log('==== ERROR 鑾峰彇褰撳墠鐢ㄦ埛鎵€鍦ㄥ尯鍩熷紓甯� ===='); console.log(data.info); console.log('==== ERROR END ===='); }else{ translate.storage.set('to',data.language); //璁剧疆鐩爣缈昏瘧璇█ translate.to = data.language; //璁剧疆鐩爣璇█ translate.selectLanguageTag translate.execute(); //鎵ц缈昏瘧 } }); }, util:{ /* 鐢熸垚涓€涓殢鏈篣UID锛屽鍒朵簬 https://gitee.com/mail_osc/kefu.js */ uuid:function() { var d = new Date().getTime(); if (window.performance && typeof window.performance.now === "function") { d += performance.now(); //use high-precision timer if available } var uuid = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'.replace(/[xy]/g, function (c) { var r = (d + Math.random() * 16) % 16 | 0; d = Math.floor(d / 16); return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16); }); return uuid; }, //鍒ゆ柇瀛楃涓蹭腑鏄惁瀛樺湪tag鏍囩銆� true瀛樺湪 findTag:function(str) { var reg = /<[^>]+>/g; return reg.test(str); }, //浼犲叆涓€涓暟缁勶紝浠庢暟缁勪腑鎵惧嚭鐜伴鐜囨渶澶氱殑涓€涓繑鍥炪€� 濡傛灉澶氫釜棰戠巼鍑虹幇鐨勬鏁颁竴鏍凤紝閭d細杩斿洖澶氫釜 arrayFindMaxNumber:function(arr){ // 鍌ㄥ瓨姣忎釜鍏冪礌鍑虹幇鐨勬鏁� var numbers = {} // 鍌ㄥ瓨鍑虹幇鏈€澶氭鐨勫厓绱� var maxStr = [] // 鍌ㄥ瓨鏈€澶氬嚭鐜扮殑鍏冪礌娆℃暟 var maxNum = 0 for(var i =0,len=arr.length;imaxNum){ maxNum = numbers[arr[i]] } } for(var item in numbers){ if(numbers[item]===maxNum){ maxStr.push(item) } } return maxStr; }, //瀵瑰瓧绗︿覆杩涜hash鍖栵紝鐩殑鍙栧敮涓€鍊艰繘琛屾爣璇� hash:function(str){ if(str == null || typeof(str) == 'undefined'){ return str; } var hash = 0, i, chr; if (str.length === 0){ return hash; } for (i = 0; i < str.length; i++) { chr = str.charCodeAt(i); hash = ((hash << 5) - hash) + chr; hash |= 0; // Convert to 32bit integer } return hash+''; }, //鍘婚櫎涓€浜涙寚瀹氬瓧绗︼紝濡傛崲琛岀銆� 濡傛灉浼犲叆鐨勬槸null锛屽垯杩斿洖绌哄瓧绗︿覆 charReplace:function(str){ if(str == null){ return ''; } str = str.trim(); str = str.replace(/\t|\n|\v|\r|\f/g,''); //鍘婚櫎鎹㈣绗︾瓑 //str = str.replace(/&/g, "%26"); //鍥犱负鍦ㄦ彁浜ゆ椂宸茬粡杩涜浜唘rl缂栫爜浜� return str; }, //RegExp鐩稿叧 regExp:{ // new RegExp(pattern, resultText); 涓殑 pattern 瀛楃涓茬殑棰勫鐞� pattern:function(str){ str = str.replace(/\\/g,'\\\\'); //杩欎釜涓€瀹氳鏀惧湪绗竴涓紝涓嶇劧浼氳涓嬮潰鐨勫奖鍝� //str = str.replace(/'/g,'\\\''); str = str.replace(/\"/g,'\\\"'); //str = str.replace(/./g,'\\\.'); str = str.replace(/\?/g,'\\\?'); str = str.replace(/\$/g,'\\\$'); str = str.replace(/\(/g,'\\\('); str = str.replace(/\)/g,'\\\)'); str = str.replace(/\|/g,'\\\|'); str = str.replace(/\+/g,'\\\+'); str = str.replace(/\*/g,'\\\*'); str = str.replace(/\[/g,'\\\['); str = str.replace(/\]/g,'\\\]'); str = str.replace(/\^/g,'\\\^'); str = str.replace(/\{/g,'\\\{'); str = str.replace(/\}/g,'\\\}'); return str; }, // new RegExp(pattern, resultText); 涓殑 resultText 瀛楃涓茬殑棰勫鐞� resultText:function(str){ //str = str.replace(/"/g,"\""); //str = str.replace(/'/g,"\\\'"); //str = str.replace(/"/g,"\\\""); return str; } }, //鑾峰彇URL鐨凣ET鍙傛暟銆傝嫢娌℃湁锛岃繑鍥�"" getUrlParam:function (name){ var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); var r = window.location.search.substr(1).match(reg); if(r!=null)return unescape(r[2]); return ""; }, /** * 鍚屾鍔犺浇JS锛屽姞杞借繃绋嬩腑浼氶樆濉烇紝鍔犺浇瀹屾瘯鍚庣户缁墽琛屽悗闈㈢殑銆� * url: 瑕佸姞杞界殑js鐨剈rl */ synchronizesLoadJs:function(url){ var xmlHttp = null; if(window.ActiveXObject){//IE try { //IE6浠ュ強浠ュ悗鐗堟湰涓彲浠ヤ娇鐢� xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { //IE5.5浠ュ強浠ュ悗鐗堟湰鍙互浣跨敤 xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } }else if(window.XMLHttpRequest){ //Firefox锛孫pera 8.0+锛孲afari锛孋hrome xmlHttp = new XMLHttpRequest(); } //閲囩敤鍚屾鍔犺浇 xmlHttp.open("GET",url,false); //鍙戦€佸悓姝ヨ姹傦紝濡傛灉娴忚鍣ㄤ负Chrome鎴朞pera锛屽繀椤诲彂甯冨悗鎵嶈兘杩愯锛屼笉鐒朵細鎶ラ敊 xmlHttp.send(null); //4浠h〃鏁版嵁鍙戦€佸畬姣� if( xmlHttp.readyState == 4 ){ //0涓鸿闂殑鏈湴锛�200鍒�300浠h〃璁块棶鏈嶅姟鍣ㄦ垚鍔燂紝304浠h〃娌″仛淇敼璁块棶鐨勬槸缂撳瓨 if((xmlHttp.status >= 200 && xmlHttp.status <300) || xmlHttp.status == 0 || xmlHttp.status == 304){ var myBody = document.getElementsByTagName("HTML")[0]; var myScript = document.createElement( "script" ); myScript.language = "javascript"; myScript.type = "text/javascript"; try{ //IE8浠ュ強浠ヤ笅涓嶆敮鎸佽繖绉嶆柟寮忥紝闇€瑕侀€氳繃text灞炴€ф潵璁剧疆 myScript.appendChild(document.createTextNode(xmlHttp.responseText)); }catch (ex){ myScript.text = xmlHttp.responseText; } myBody.appendChild(myScript); return true; }else{ return false; } }else{ return false; } }, //鍔犺浇 msg.js loadMsgJs:function(){ if(typeof(msg) != 'undefined'){ return; } translate.util.synchronizesLoadJs('https://res.zvo.cn/msg/msg.js'); }, /* 瀵逛竴涓璞★紝鎸夌収瀵硅薄鐨刱ey鐨勯暱搴﹁繘琛屾帓搴忥紝瓒婇暱瓒婂湪鍓嶉潰 */ objSort:function(obj){ // 鑾峰彇瀵硅薄鏁扮粍鐨勬墍鏈� key锛屽苟杞崲涓烘櫘閫氭暟缁� var keys = Array.from(Object.keys(obj)); // 瀵� key 鏁扮粍杩涜鎺掑簭 keys.sort(function(a, b){ return b.length - a.length; }); // 瀹氫箟涓€涓柊鐨勫璞℃暟缁勶紝鐢ㄦ潵瀛樺偍鎺掑簭鍚庣殑缁撴灉 var sortedObj = new Array(); // 閬嶅巻鎺掑簭鍚庣殑 key 鏁扮粍锛屽皢瀵瑰簲鐨勫€煎鍒跺埌鏂扮殑瀵硅薄鏁扮粍涓紝骞跺垹闄ゅ師鏉ョ殑瀵硅薄鏁扮粍涓殑閿€煎 for (var key of keys) { sortedObj[key] = obj[key]; } return sortedObj; }, /* 灏� 2.11.3.20231232 杞寲涓� 2011003 杞寲鏃朵細鍘绘帀鏈€鍚庝竴涓棩鏈熺殑瀛楃 */ versionStringToInt:function(versionString){ var vs = versionString.split('\.'); var result = 0; result = parseInt(vs[0])*1000*1000 + result; result = parseInt(vs[1])*1000 + result; result = parseInt(vs[2]) + result; return result; }, /** * 灏嗕竴涓� JSONArray 鏁扮粍锛屾寜鐓ф枃瀛楅暱搴﹁繘琛屾媶鍒嗐€� * 姣斿浼犲叆鐨� array 鏁扮粍鐨勬枃瀛楅暱搴︽槸6200锛屼紶鍏ョ殑 size 鏄�2000锛岄偅涔堝氨鏄皢 array 鏁扮粍鎷嗗垎涓哄涓暱搴︿笉瓒呭嚭2000鐨勬暟缁勮繑鍥炪€� * 娉ㄦ剰锛岃繖涓暱搴︽槸鎸� array.toString() 鍚庣殑闀垮害锛屼篃灏辨槸鍖呭惈浜� [""] 杩欑绗﹀彿鐨勯暱搴� * @param array 瑕佽鎷嗗垎鐨勬暟缁勶紝鍏跺唴閮芥槸String绫诲瀷锛屼紶鍏ユ牸寮忓 ["浣犲ソ","涓栫晫"] * @param size 瑕佽鎷嗗垎鐨勯暱搴� * @return 琚媶鍒嗗悗鐨勬暟缁勫垪琛� * @author 鍒樻檽鑵� */ split:function(array, size) { let list = []; // 鏁扮粍闀垮害灏忎簬size锛岀洿鎺ヨ繘琛岃繑鍥� if(JSON.stringify(array).length <= size) { list.push(array); } else { // 杞崲鎴怱tring let arrayStr = JSON.stringify(array).trim().substring(1, JSON.stringify(array).length - 1); // 鍒ゆ柇size鍜屽瓧绗︿覆闀垮害鐨勫樊鍊硷紝濡傛灉涓�1鎴栬€�2锛屽氨鐩存帴鎷嗘垚涓ゆ if (JSON.stringify(array).length - size <= 2) { size = size - 4; // 鎷嗕袱娈� let str1 = arrayStr.substring(0, arrayStr.lastIndexOf("\",\"")+1); let str2 = arrayStr.substring(arrayStr.lastIndexOf("\",\"")+2); list.push(JSON.parse("[" + str1 + "]")); list.push(JSON.parse("[" + str2 + "]")); } else { size = size - 2; // 鎷嗗娈� let index = 0; while (index - arrayStr.length < 0) { // 鎸夌収鎸囧畾澶у皬鎷嗕竴娈� let s = ""; if ((index+size) - arrayStr.length >= 0) { s = arrayStr.substring(index); } else { s = arrayStr.substring(index, (index+size)); } // 缁撳熬闀垮害榛樿涓哄瓧绗︿覆闀垮害 let endIndex = s.length; // 鍥犱负涓嬫寮€濮嬬殑绗竴涓瓧绗﹀彲鑳戒細鏄€楀彿锛屾墍浠ヤ笅娆″紑濮嬮渶瑕�+1 let startNeedAdd = 1; // 鍒ゆ柇鏈€鍚庝竴涓瓧绗︽槸鍚︿负鍙屽紩鍙� if (s.endsWith("\"")) { // 鍒ゆ柇鍊掓暟绗簩涓槸鍚︿负閫楀彿 if (s.endsWith("\",\"")) { // 鍒犻櫎涓や釜瀛楃 endIndex-=2; } else if (!s.startsWith("\"")) { // 濡傛灉寮€澶翠笉鏄紩鍙凤紝闇€瑕佽ˉ涓€涓紩鍙凤紝杩欏氨瀵艰嚧浼氳秴闀匡紝鎵€浠ョ粨灏惧氨瑕佹壘鎸囧畾瀛楃鐨� // 鎵惧嚭鏈€鍚庝竴涓寚瀹氬瓧绗︾殑浣嶇疆 let la = s.lastIndexOf("\",\""); endIndex = la + 1; } } else if (s.endsWith("\",")) { // 鍒ゆ柇鏄惁涓洪€楀彿锛屾槸鐨勮瘽鍒犻櫎涓€涓瓧绗� endIndex-=1; } else { // 閮戒笉鏄紝閭e氨鏄唴瀹圭粨灏� // 鎵惧嚭鏈€鍚庝竴涓寚瀹氬瓧绗︾殑浣嶇疆 let la = s.lastIndexOf("\",\""); endIndex = la + 1; // 鍐呭瓒呴暱锛宔ndIndex灏变細鍙樻垚0锛岃繖鏃堕渶瑕佹墜鍔ㄨ祴鍊� if (endIndex <= 0) { // 鐪嬬湅鏄惁浠ュ紩鍙峰紑澶达紝濡傛灉涓嶆槸锛岄渶瑕佹嫾涓や釜寮曞彿 if (s.startsWith("\"")) { // 鎷间竴涓紩鍙凤紝-1 endIndex = s.length() - 1; } else { // 鎷间袱涓紩鍙凤紝-2 endIndex = s.length() - 2; } if (!s.endsWith("\"")) { // 寮€濮嬩笉鏄€楀彿浜嗭紝涓嶈兘-1 startNeedAdd = 0; } } } // 鏍规嵁澶勭悊鐨勭粨灏鹃暱搴﹁繘琛岀浜屾鎷嗗垎 let s2 = ""; if (endIndex - s.length > 0 || endIndex - 0 == 0) { s2 = s; endIndex = endIndex + s2.length; } else { s2 = s.substring(0, endIndex); } if (!s2.startsWith("\"") && !s2.startsWith(",\"")) { // 鎷间竴涓紩鍙� s2 = "\"" + s2; } if (!s2.endsWith("\"")) { // 鎷间竴涓紩鍙� s2 = s2 +"\""; } // 璁$畻涓嬫寰幆寮€濮嬬殑闀垮害 index += (endIndex + startNeedAdd); // 鍔犲埌list s2 = "[" + s2 + "]"; try { list.push(JSON.parse(s2)); } catch (e) { // 閬囧埌閿欒锛岀暐杩囦竴涓瓧绗� index = index - (endIndex + startNeedAdd) + 1; } } } } return list; } }, //鏈哄櫒缈昏瘧閲囩敤鍝缈昏瘧鏈嶅姟 service:{ /* name濉啓鐨勫€兼湁 translate.service 鏈� http://translate.zvo.cn/41160.html 鎻愪緵鏈哄櫒缈昏瘧鏈嶅姟 client.edge 鏈塭dge娴忚鍣ㄦ帴鍙f彁渚涚炕璇戞湇鍔� 锛屼篃灏辨槸鎵ц缈昏瘧鏃剁洿鎺ユ槸 */ name:'translate.service', /* 鍏跺疄灏辨槸璁剧疆 translate.service.name */ use: function(serviceName){ if(typeof(serviceName) == 'string' && serviceName == 'client.edge'){ translate.service.name = serviceName; //澧炲姞鍏冪礌鏁翠綋缈昏瘧鑳藉姏 translate.whole.tag.push('body'); translate.whole.tag.push('head'); translate.whole.tag.push('html'); } }, //瀹㈡埛绔柟寮忕殑edge鎻愪緵鏈哄櫒缈昏瘧鏈嶅姟 edge:{ api:{ //edge娴忚鍣ㄧ殑缈昏瘧鍔熻兘 auth:'https://edge.microsoft.com/translate/auth', //auth鎺堟潈鎷夊彇 translate:'https://api.cognitive.microsofttranslator.com/translate?from={from}&to={to}&api-version=3.0&includeSentenceLength=true' //缈昏瘧鎺ュ彛 }, language:{ json:[{"id":"ukrainian","name":"校泻褉邪褩薪褋褜泻邪Name","serviceId":"uk"},{"id":"norwegian","name":"Norge","serviceId":"no"},{"id":"welsh","name":"color name","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":"喟む眴喟侧眮喟椸眮QFontDatabase","serviceId":"te"},{"id":"romanian","name":"Rom芒n膬","serviceId":"ro"},{"id":"nepali","name":"啶ㄠ啶ぞ啶侧Name","serviceId":"ne"},{"id":"french","name":"Fran莽ais","serviceId":"fr"},{"id":"haitian_creole","name":"Krey貌l ayisyen","serviceId":"ht"},{"id":"czech","name":"膷esk媒","serviceId":"cs"},{"id":"swedish","name":"Svenska","serviceId":"sv"},{"id":"russian","name":"袪褍褋褋泻懈泄 褟蟹褘泻","serviceId":"ru"},{"id":"malagasy","name":"Malagasy","serviceId":"mg"},{"id":"burmese","name":"醼椺€€涐€欋€�","serviceId":"my"},{"id":"pashto","name":"倬跉鬲賵Name","serviceId":"ps"},{"id":"thai","name":"喔勦笝喙勦笚喔�","serviceId":"th"},{"id":"armenian","name":"员謤沾榨斩盏铡斩","serviceId":"hy"},{"id":"chinese_simplified","name":"绠€浣撲腑鏂�","serviceId":"zh-CHS"},{"id":"persian","name":"Persian","serviceId":"fa"},{"id":"chinese_traditional","name":"绻侀珨涓枃","serviceId":"zh-CHT"},{"id":"kurdish","name":"Kurd卯","serviceId":"ku"},{"id":"turkish","name":"T眉rk莽e","serviceId":"tr"},{"id":"hindi","name":"啶灌た啶ㄠ啶︵","serviceId":"hi"},{"id":"bulgarian","name":"斜褗谢谐邪褉褋泻懈","serviceId":"bg"},{"id":"malay","name":"Malay","serviceId":"ms"},{"id":"swahili","name":"Kiswahili","serviceId":"sw"},{"id":"oriya","name":"喱撪喱苦瑔","serviceId":"or"},{"id":"icelandic","name":"脥slandName","serviceId":"is"},{"id":"irish","name":"脥ris","serviceId":"ga"},{"id":"khmer","name":"釣佱煉釣樶焸釣欿Charselect unicode block 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岷縩g Vi峄噒","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"}], /* 鑾峰彇map褰㈠紡鐨勮瑷€鍒楄〃 key涓� translate.service 鐨� name value涓簊erviceId */ getMap:function(){ if(typeof(translate.service.edge.language.map) == 'undefined'){ translate.service.edge.language.map = new Array(); for(var i = 0; i < translate.service.edge.language.json.length; i++){ var item = translate.service.edge.language.json[i]; translate.service.edge.language.map[item.id] = item.serviceId; } } return translate.service.edge.language.map; } }, /** * edge 杩涜缈昏瘧銆� 杩欎釜浼犲叆鍙傛暟璺� translate.request.post 鏄竴鏍风殑 * @param path 璇锋眰鐨刾ath锛坧ath锛屼紶鍏ョ殑鏄痶ranslate.request.api.translate 杩欑鐨勶紝闇€瑕佷娇鐢� getUrl 鏉ョ粍鍚堢湡姝h姹傜殑url 锛� * @param data 璇锋眰鐨勫弬鏁版暟鎹� * @param func 璇锋眰瀹屾垚鐨勫洖璋冿紝浼犲叆濡� function(data){ console.log(data); } */ translate:function(path, data, func){ var textArray = JSON.parse(decodeURIComponent(data.text)); let translateTextArray = translate.util.split(textArray, 48000); //console.log(translateTextArray); translate.request.send(translate.service.edge.api.auth, {}, function(auth){ var from = translate.service.edge.language.getMap()[data.from]; var to = translate.service.edge.language.getMap()[data.to]; var transUrl = translate.service.edge.api.translate.replace('{from}',from).replace('{to}',to); //濡傛灉缈昏瘧閲忓ぇ锛岃鎷嗗垎鎴愬娆$炕璇戣姹� for(var tai = 0; tai 1){ //杩欎竴娆$炕璇戝憲鎷嗗垎浜嗗娆¤姹傦紝閭d箞瑕佽繘琛岃ˉ鍏ㄦ暟缁勶紝浣挎暟缁勪釜鏁拌兘涓€鑷� /* 娉ㄦ剰杩欓噷鏍规嵁鏁扮粍鐨勯暱搴︽潵鍒ゆ柇褰撳墠灞炰簬绗嚑涓暟缁勶紝 鏈夊嚑鐜囦細鏄媶鍒嗙殑鏁扮粍锛屽叾涓湁涓ょ粍鐨勯暱搴︽槸涓€鏍风殑锛� 杩欐牱鐨勮瘽鏄湁闂鐨勶紝鍙笉杩囧嚑鐜囧緢灏忥紝灏卞厛杩欐牱浜� 浣嗙粓褰掕繕鏄暀浜嗕釜鍧� -- 璁板綍 */ var currentIndex = -1; //褰撳墠缈昏瘧璇锋眰灞炰簬琚媶鍒嗙殑绗嚑涓殑鏁扮粍涓嬫爣锛屼粠0寮€濮嬬殑 for(var cri = 0; cri < translateTextArray.length; cri++){ if(translateTextArray[cri].length - d.text.length == 0){ currentIndex = cri; break; } } //杩涜瀵瑰墠鍚庤繘琛岃ˉ榻愭暟缁� if(currentIndex < 0){ console.log('------ERROR--------'); console.log('缈昏瘧鍐呭杩囧锛岃繘琛屾媶鍒嗭紝浣嗘媶鍒嗗垽鏂嚭鐜板紓甯革紝currentIndex锛�-1 璇疯仈绯� http://translate.zvo.cn/43006.html 璇存槑'); } //鍓嶆彃鍏ョ┖鏁扮粍濉厖 for(var addbeforei = 0; addbeforeicurrentIndex; addafteri--){ var afterItemArrayLength = translateTextArray[addafteri].length; for(var bi = 0; bi < afterItemArrayLength; bi++){ d.text.push(null); } } } func(d); }, 'post', true, {'Authorization':'Bearer '+auth, 'Content-Type':'application/json'}, function(xhr){ console.log('---------error--------'); console.log('edge translate service error, http code : '+xhr.status + ', response text : '+xhr.responseText); }, true); } //console.log('translateResultArray') //console.log(translateResultArray); }, 'get', true, {'content-type':'application/x-www-form-urlencoded'}, function(xhr){ console.log('---------error--------'); console.log('edge translate service error, http code : '+xhr.status + ', response text : '+xhr.responseText); }, true); } } }, //request璇锋眰鏉ユ簮浜� https://github.com/xnx3/request request:{ //鐩稿叧API鎺ュ彛鏂归潰 api:{ /** * 缈昏瘧鎺ュ彛璇锋眰鐨勫煙鍚嶄富鏈� host * 鏍煎紡娉ㄦ剰鍓嶉潰瑕佸甫涓婂崗璁 https:// 鍩熷悕鍚庤鍔� / * v2.8.2 澧炲姞鏁扮粍褰㈡€侊紝濡� ['https://api.translate.zvo.cn/','xxxxx'] */ //host:'https://api.translate.zvo.cn/', host:['https://api.translate.zvo.cn/','https://america.api.translate.zvo.cn/'], //host鐨勫鐢ㄦ帴鍙o紝鏍煎紡鍚宧ost锛屽彲浠ュ~鍐欏涓紝鍙笉杩囪繖閲屾槸鏁扮粍鏍煎紡銆傚彧鏈夊綋涓� host 鏃犳硶杩為€氭椂锛屾墠浼氶噰鐢ㄥhost鏉ユ彁渚涜闂€傚鏋滀负绌轰篃灏辨槸 [] 鍒欐槸涓嶉噰鐢ㄥ鏂规銆� //backupHost:['',''], language:'language.json', //鑾峰彇鏀寔鐨勮绉嶅垪琛ㄦ帴鍙� translate:'translate.json', //缈昏瘧鎺ュ彛 ip:'ip.json', //鏍规嵁鐢ㄦ埛褰撳墠ip鑾峰彇鍏舵墍鍦ㄥ湴鐨勮绉� connectTest:'connectTest.json', //鐢ㄤ簬 translate.js 澶氳妭鐐圭炕璇戣嚜鍔ㄦ娴嬬綉缁滆繛閫氭儏鍐� init:'init.json', //鑾峰彇鏈€鏂扮増鏈彿锛岃窡褰撳墠鐗堟湰杩涜姣斿锛岀敤浜庢彁閱掔増鏈崌绾х瓑浣跨敤 }, /* 璇锋眰鍚庣鎺ュ彛鐨勫搷搴斻€傛棤璁烘槸鍚︽垚鍔燂紝閮戒細瑙﹀彂姝ゅ銆� 鍙﹀褰� xhr.readyState==4 鐨勭姸鎬佹椂鎵嶄細瑙﹀彂銆� 姝ゅ浼氬湪鎺ュ彛璇锋眰鍝嶅簲鍚庛€佷笖鍦╰ranslate.js澶勭悊鍓嶅氨浼氳Е鍙� @param xhr XMLHttpRequest 鎺ュ彛璇锋眰 */ response:function(xhr){ //console.log('response------'); //console.log(xhr); }, /* 閫熷害妫€娴嬫帶鍒朵腑蹇冿紝 妫€娴嬩富澶囩炕璇戞帴鍙g殑鍝嶅簲閫熷害杩涜鎺掑垪锛岀湡姝h姹傛椂锛屾寜鐓ф帓鍒楃殑椤哄簭杩涜璇锋眰 v2.8.2澧炲姞 storage瀛樺偍鏂归潰 storage瀛樺偍鐨刱ey 瀛樼殑浠€涔� speedDetectionControl_hostQueue hostQueue speedDetectionControl_hostQueueIndex 褰撳墠瑕佷娇鐢ㄧ殑鏄� hostQueue 涓殑鏁扮粍涓嬫爣銆傚鏋滄病鏈夛紝杩欓噷榛樿瑙嗕负0 speedDetectionControl_lasttime 鏈€鍚庝竴娆℃墽琛岄€熷害妫€娴嬬殑鏃堕棿鎴筹紝13浣嶆椂闂存埑 */ speedDetectionControl:{ /* 杩涜 connect涓昏妭鐐圭缉鍑忕殑鏃堕棿锛屽崟浣嶆槸姣. 杩欎釜鏄繘琛� translate.request.speedDetectionControl.checkResponseSpeed() 鑺傜偣娴嬮€熸椂锛宼ranslate.request.api.host 绗竴涓厓绱犳槸榛樿鐨勪富鑺傜偣銆� 涓昏妭鐐瑰湪瀹為檯娴嬮€熷畬鍚庯紝浼氬噺鍘讳竴瀹氱殑鏃堕棿锛屼互渚胯鐢ㄦ埛澶ч儴鍒嗘椂闂村彲浠ヤ娇鐢ㄤ富鑺傜偣锛岃€屼笉蹇呰蛋鍒嗚妭鐐广€� 渚嬪涓昏妭鐐瑰疄闄呭搷搴旈€熷害 3500 姣锛岄偅涔堜細鍑忓幓杩欓噷璁剧疆鐨�2000姣锛岃涓� 1500 姣 褰撶劧濡傛灉鏄皬浜庤繖閲岃缃殑2000姣锛岄偅涔堜細璁颁负0姣銆� 杩欐牱鍐嶈窡鍏朵粬鍒嗚妭鐐圭殑鍝嶅簲鏃堕棿杩涜瀵规瘮锛屼富鑺傜偣鍙涓嶆槸鍝嶅簲瓒呮椂锛屽氨浼氭湁鏇村ぇ鐨勫嚑鐜囪閫変腑涓哄疄闄呬娇鐢ㄧ殑缈昏瘧鐨勮妭鐐� 杩欓噷鐨勫崟浣嶆槸姣銆� v2.10.2.20231225 澧炲姞 */ hostMasterNodeCutTime:2000, /* 缈昏瘧鐨勯槦鍒楋紝杩欐槸鏍规嵁缃戠粶鐩稿簲鐨勯€熷害鎺掑垪鐨勶紝0涓嬫爣涓鸿姹傛渶蹇紝1娆′箣... 鍏舵牸寮忎负锛� [ { "host":"xxxxxxxx", "time":123 //杩欓噷鐨勫崟浣嶆槸姣 }, { "host":"xxxxxxxx", "time":123 //杩欓噷鐨勫崟浣嶆槸姣 } ] */ hostQueue:[], hostQueueIndex:-1, //褰撳墠浣跨敤鐨� hostQueue鐨勬暟缁勪笅鏍囷紝 -1琛ㄧず杩樻湭鍒濆鍖栬祴浜堝€硷紝涓嶅彲鐩存帴浣跨敤锛岄€氳繃 getHostQueueIndex() 浣跨敤 disableTime:1000000, //涓嶅彲鐢ㄧ殑鏃堕棿锛宻torage涓瓨鍌ㄧ殑 speedDetectionControl_hostQueue 鍏朵腑 time 杩欓噷锛屽鏋滃€兼槸 杩欎釜锛屼究鏄唬琛ㄨ繖涓猦ost澶勪簬涓嶅彲鐢ㄧ姸鎬� //鑾峰彇 host queue 闃熷垪 getHostQueue:function(){ if(translate.request.speedDetectionControl.hostQueue.length == 0){ //杩樻病鏈夛紝鍏堜粠鏈湴瀛樺偍涓彇锛岀湅涔嬪墠鏄惁宸茬粡璁剧疆杩囦簡 // 鍙湁缁忚繃鐪熸鐨勭綉缁滄祴閫熷悗锛屾墠浼氬姞鍏� storage 鐨� hostQueue var storage_hostQueue = translate.storage.get('speedDetectionControl_hostQueue'); if(storage_hostQueue == null || typeof(storage_hostQueue) == 'undefined'){ //鏈湴瀛樺偍涓病鏈夛紝涔熷氨鏄箣鍓嶆病璁剧疆杩囷紝鏄涓€娆$敤锛岄偅涔堢洿鎺ヨ translate.request.api.host 璧嬩簣涔� //translate.request.api.host //console.log(typeof(translate.request.api.host)) if(typeof(translate.request.api.host) == 'string'){ //鍗曚釜锛岄偅涔堣祴浜堟暟缁勫舰寮� //translate.request.speedDetectionControl.hostQueue = [{"host":translate.request.api.host, time:0 }]; translate.request.api.host = [''+translate.request.api.host]; } //console.log(translate.request.api.host) //鏁扮粍褰㈡€侊紝澶氫釜锛寁2.8.2 澧炲姞澶氫釜锛屾牴鎹紭鍏堢骇杩斿洖 translate.request.speedDetectionControl.hostQueue = []; for(var i = 0; i updateTime){ translate.request.speedDetectionControl.checkResponseSpeed(); } } return translate.request.speedDetectionControl.hostQueue; }, /* 鏈嶅姟浜� checkResponseSpeed 鐢ㄤ簬灏嗘祴璇曠粨鏋滃瓨鍏� storage time: 褰撳墠鎺ュ彛璇锋眰鐨勮€楁椂锛屽崟浣嶆槸姣銆傚鏋滄槸 1000000 閭d箞琛ㄧず杩欎釜鎺ュ彛涓嶅彲鐢� */ checkResponseSpeed_Storage:function(host, time){ translate.request.speedDetectionControl.checkHostQueue.push({"host":host, "time":time }); //鎸夌収time杩涜鎺掑簭 translate.request.speedDetectionControl.checkHostQueue.sort((a, b) => a.time - b.time); //瀛樺偍鍒� storage 鎸佷箙鍖� translate.storage.set('speedDetectionControl_hostQueue',JSON.stringify(translate.request.speedDetectionControl.checkHostQueue)); translate.storage.set('speedDetectionControl_lasttime', new Date().getTime()); translate.request.speedDetectionControl.hostQueue = translate.request.speedDetectionControl.checkHostQueue; }, //娴嬭瘯鍝嶅簲閫熷害 checkResponseSpeed:function(){ var headers = { 'content-type':'application/x-www-form-urlencoded', }; translate.request.speedDetectionControl.checkHostQueue = []; //鐢ㄤ簬瀹為檯瀛樺偍 translate.request.speedDetectionControl.checkHostQueueMap = []; //鍙槸map锛岄€氳繃key鍙栧€硷紝鏃犲叾浠栦綔鐢� if(typeof(translate.request.api.host) == 'string'){ //鍗曚釜锛岄偅涔堣祴浜堟暟缁勫舰寮� translate.request.api.host = [''+translate.request.api.host]; } for(var i = 0; i < translate.request.api.host.length; i++){ var host = translate.request.api.host[i]; // 鑾峰彇褰撳墠鏃堕棿鐨勬椂闂存埑 translate.request.speedDetectionControl.checkHostQueueMap[host] = { start:new Date().getTime() }; try{ translate.request.send( host+translate.request.api.connectTest, {host:host}, function(data){ var host = data.info; var map = translate.request.speedDetectionControl.checkHostQueueMap[host]; var time = new Date().getTime() - map.start; if(translate.request.api.host[0] == host){ //console.log('濡傛灉鏄涓€涓紝閭d箞鏄富鐨勶紝榛樿鍏佽缂╁噺2000姣锛屼篃灏辨槸浼樺厛浣跨敤涓荤殑'); time = time - translate.request.speedDetectionControl.hostMasterNodeCutTime; if(time < 0){ time = 0; } } translate.request.speedDetectionControl.checkResponseSpeed_Storage(host, time); /* translate.request.speedDetectionControl.checkHostQueue.push({"host":host, "time":time }); //鎸夌収time杩涜鎺掑簭 translate.request.speedDetectionControl.checkHostQueue.sort((a, b) => a.time - b.time); //瀛樺偍鍒� storage 鎸佷箙鍖� translate.storage.set('speedDetectionControl_hostQueue',JSON.stringify(translate.request.speedDetectionControl.checkHostQueue)); translate.storage.set('speedDetectionControl_lasttime', new Date().getTime()); translate.request.speedDetectionControl.hostQueue = translate.request.speedDetectionControl.checkHostQueue; //console.log(translate.request.speedDetectionControl.hostQueue); */ }, 'post', true, headers, function(data){ //translate.request.speedDetectionControl.checkResponseSpeed_Storage(host, time); var hostUrl = data.requestURL.replace('connectTest.json',''); translate.request.speedDetectionControl.checkResponseSpeed_Storage(hostUrl, translate.request.speedDetectionControl.disableTime); }, false ); }catch(e){ //console.log('e0000'); console.log(e); //time = 300000; //鏃犳硶杩炴帴鐨勶紝閭d箞璧嬩簣 300 绉掑惂 } } }, //鑾峰彇褰撳墠浣跨敤鐨刪ost鐨勬暟缁勪笅鏍� getHostQueueIndex:function(){ if(translate.request.speedDetectionControl.hostQueueIndex < 0){ //椤甸潰褰撳墠绗竴娆′娇鐢紝璧嬩簣鍊� //鍏堜粠 storage 涓彇 var storage_index = translate.storage.get('speedDetectionControl_hostQueueIndex'); if(typeof(storage_index) == 'undefined' || storage_index == null){ //瀛樺偍涓笉瀛樺湪锛屽綋鍓嶇敤鎴凤紙娴忚鍣級绗竴娆′娇鐢紝榛樿璧嬩簣0 translate.request.speedDetectionControl.hostQueueIndex = 0; translate.storage.set('speedDetectionControl_hostQueueIndex',0); }else{ translate.request.speedDetectionControl.hostQueueIndex = storage_index; } } return translate.request.speedDetectionControl.hostQueueIndex; }, //鑾峰彇褰撳墠瑕佷娇鐢ㄧ殑host getHost:function(){ var queue = translate.request.speedDetectionControl.getHostQueue(); //console.log(queue); var queueIndex = translate.request.speedDetectionControl.getHostQueueIndex(); if(queue.length > queueIndex){ //姝e父锛屾病鏈夎秴鍑鸿秺鐣� }else{ //寮傚父锛屼笅鏍囪秺鐣屼簡锛侊紝鍥哄畾杩斿洖鏈€鍚庝竴涓� console.log('寮傚父锛屼笅鏍囪秺鐣屼簡锛乮ndex锛�'+queueIndex); queueIndex = queue.length-1; } //console.log(queueIndex); return queue[queueIndex].host; }, }, //鐢熸垚post璇锋眰鐨剈rl getUrl:function(path){ var currentHost = translate.request.speedDetectionControl.getHost(); var url = currentHost+path+'?v='+translate.version; //console.log('url: '+url); return url; }, /** * post璇锋眰 * @param path 璇锋眰鐨刾ath锛坧ath锛屼紶鍏ョ殑鏄痶ranslate.request.api.translate 杩欑鐨勶紝闇€瑕佷娇鐢� getUrl 鏉ョ粍鍚堢湡姝h姹傜殑url 锛� * @param data 璇锋眰鐨勫弬鏁版暟鎹紝浼犲叆濡� * { * from: "chinese_simplified", * text: "%5B%22%E4%BD%A0%E5%A5%BD%EF%BC%8C%E6%88%91", * to: "chinese_traditional * } * * @param func 璇锋眰瀹屾垚鐨勫洖璋冿紝浼犲叆濡� function(data){ console.log(data); } */ post:function(path, data, func){ var headers = { 'content-type':'application/x-www-form-urlencoded', }; if(typeof(data) == 'undefined'){ return; } //浼佷笟绾х炕璇戣嚜鍔ㄦ娴� translate.enterprise.automaticAdaptationService(); // ------- edge start -------- var url = translate.request.getUrl(path); //if(url.indexOf('edge') > -1 && path == translate.request.api.translate){ if(translate.service.name == 'client.edge'){ if(path == translate.request.api.translate){ translate.service.edge.translate(path, data, func); return; } if(path == translate.request.api.language){ var d = {}; d.info = 'SUCCESS'; d.result = 1; d.list = translate.service.edge.language.json; func(d); return; } //return; } // ------- edge end -------- this.send(path, data, func, 'post', true, headers, null, true); }, /** * 鍙戦€佽姹� * url 璇锋眰鐨剈rl鎴栬€卲ath锛坧ath锛屼紶鍏ョ殑鏄痶ranslate.request.api.translate 杩欑鐨勶紝闇€瑕佷娇鐢� getUrl 鏉ョ粍鍚堢湡姝h姹傜殑url 锛� * data 璇锋眰鐨勬暟鎹紝濡� {"author":"绠¢浄楦�",'site':'www.guanleiming.com'} * func 璇锋眰瀹屾垚鐨勫洖璋冿紝浼犲叆濡� function(data){} * method 璇锋眰鏂瑰紡锛屽彲浼犲叆 post銆乬et * isAsynchronize 鏄惁鏄紓姝ヨ姹傦紝 浼犲叆 true 鏄紓姝ヨ姹傦紝浼犲叆false 鏄悓姝ヨ姹傘€� 濡傛灉浼犲叆false锛屽垯鏈柟娉曡繑鍥瀤hr * headers 璁剧疆璇锋眰鐨刪eader锛屼紶鍏ュ {'content-type':'application/x-www-form-urlencoded'}; * abnormalFunc 鍝嶅簲寮傚父鎵€鎵ц鐨勬柟娉曪紝鍝嶅簲鐮佷笉鏄�200灏变細鎵ц杩欎釜鏂规硶 ,浼犲叆濡� function(xhr){} 鍙﹀杩欓噷鐨� xhr 浼氶澶栨湁涓弬鏁� xhr.requestURL 杩斿洖褰撳墠璇锋眰澶辫触鐨剈rl * showErrorLog 鏄惁鎺у埗鍙版墦鍗板嚭鏉ラ敊璇棩蹇楋紝true鎵撳嵃锛� false 涓嶆墦鍗� */ send:function(url, data, func, method, isAsynchronize, headers, abnormalFunc, showErrorLog){ //post鎻愪氦鐨勫弬鏁� var params = ''; if(data != null){ if(typeof(data) == 'string'){ params = data; //payload 鏂瑰紡 }else{ //琛ㄥ崟鎻愪氦鏂瑰紡 for(var index in data){ if(params.length > 0){ params = params + '&'; } params = params + index + '=' + data[index]; } } } if(url.indexOf('https://') == 0 || url.indexOf('http://') == 0){ //閲囩敤鐨剈rl缁濆璺緞 }else{ //鐩稿璺緞锛屾嫾鎺ヤ笂host url = translate.request.getUrl(url); } var xhr=null; try{ xhr=new XMLHttpRequest(); }catch(e){ xhr=new ActiveXObject("Microsoft.XMLHTTP"); } //2.璋冪敤open鏂规硶锛坱rue----寮傛锛� xhr.open(method,url,isAsynchronize); //璁剧疆headers if(headers != null){ for(var index in headers){ xhr.setRequestHeader(index,headers[index]); } } if(translate.service.name == 'translate.service'){ xhr.setRequestHeader('currentpage', window.location.href+''); } xhr.send(params); //4.璇锋眰鐘舵€佹敼鍙樹簨浠� xhr.onreadystatechange=function(){ if(xhr.readyState==4){ translate.request.response(xhr); //鑷畾涔夊搷搴旂殑鎷︽埅 if(xhr.status==200){ //璇锋眰姝e父锛屽搷搴旂爜 200 var json = null; if(typeof(xhr.responseText) == 'undefined' || xhr.responseText == null){ //鐩稿簲鍐呭涓虹┖ }else{ //鍝嶅簲鍐呭鏈夊€� if(xhr.responseText.indexOf('{') > -1 && xhr.responseText.indexOf('}') > -1){ //搴旇鏄痡son鏍煎紡 try{ json = JSON.parse(xhr.responseText); }catch(e){ console.log(e); } } } if(json == null){ func(xhr.responseText); }else{ func(json); } }else{ if(showErrorLog){ if(url.indexOf(translate.request.api.connectTest) > -1){ //娴嬭瘯閾炬帴閫熷害鐨勪笉鍦ㄦ姤閿欓噷闈� }else{ //鍒ゆ柇鏄惁鏄痸2鐗堟湰鐨勭炕璇戯紝濡傛灉鏄� translate.service 妯″紡骞朵笖娌℃湁浣跨敤浼佷笟绾х炕璇戯紝鍙備細鎻愮ず //2024.3鏈堝簳寮€濮嬶紝缈昏瘧浣跨敤閲忓鍔犵殑澶揩锛屽紑婧愮殑缈昏瘧鏈嶅姟鍣ㄦ湁鐐规墰涓嶄綇缁忓父鍑烘晠闅滐紝鎵€浠ョ洿鎺ユ妸杩欎釜鎻愮ず鍔犲埌杩欓噷 if(translate.service.name == 'translate.service' && !translate.enterprise.isUse){ console.log('----- translate.js 鎻愮ず -----\n妫€娴嬪埌鎮ㄦ鍦ㄤ娇鐢╲2鐨勬棫鐗堟湰锛屽苟涓斿綋鍓嶇殑v2鎺ュ彛鎭板ソ澶勪簬涓嶇ǔ瀹氱姸鎬侊紒鎵€浠ユ偍褰撳墠鐨勭炕璇戞槸骞舵病鏈夌敓鏁堬紝涔熷氨鏄苟娌℃湁姝e父杩涜缈昏瘧鐨勶紝涓嶈繃杩欎笉鏄偍鐨勯棶棰橈紝鏄痸2鐗堟湰鐨勭炕璇戦€氶亾鍥犱负寮€婧愬厤璐癸紝浣跨敤鐨勪汉澶瀵艰嚧鐨勫伓灏斾笉绋冲畾銆傚鏋滄偍鎯虫甯镐娇鐢紝寤鸿鎮ㄨ繘琛屼竴涓嬫搷浣滐細\n寤鸿涓€锛氬垏鎹㈠埌v3鏈€鏂扮増鏈殑 client.edge 缈昏瘧妯″紡锛岃缃柟寮忓彲浠ュ弬鑰冿細 http://translate.zvo.cn/43086.html 瀹冩槸2024骞村垵鏂板嚭鐨刅3鐗堟湰鐨勭炕璇戞ā寮忥紝缈昏瘧鏁堟灉鏇寸ǔ瀹氾紝鑰屼笖涔熸槸瀹屽叏鍏嶈垂浣跨敤銆俓n寤鸿浜岋細鍚敤浼佷笟绾хǔ瀹氱炕璇戯紝鏈変簺缃戠珯瀵圭炕璇戠ǔ瀹氭€с€佸疄鏃舵€ц姹傛瘮杈冮珮鐨勶紝鍙互鑰冭檻閲囩敤杩欑鏂瑰紡. 浣跨敤鏂瑰紡鍙弬鑰冿細 http://translate.zvo.cn/43262.html 杩欑鏂瑰紡鏄� 2024.3鏈堝簳搴斾笉灏戠敤鎴峰缓璁帹鍑虹殑涓€涓嫭绔嬬炕璇戦€氶亾锛岃繖涓炕璇戦€氶亾浠呬粎鍙湁鎻愪緵璧炲姪鐨勪汉鎵嶈兘浣跨敤锛屼娇鐢ㄤ汉鏁板皯锛屽鍙扮炕璇戞湇鍔″櫒缁勪欢鐨勮嚜鍔ㄨ礋杞戒互鍙婂仴搴锋鏌ヨ€楁椂鏈€鐭殑鏈€浼樼炕璇戞柟妗堬紝浣跨炕璇戞洿绋冲畾銆俓n\n寤鸿涓€璺熷缓璁簩鐨勫尯鍒槸寤鸿涓€寤剁画浜唗ranslate.js涓夊勾浠ユ潵涓€鐩磋疮褰荤殑寮€婧愬厤璐圭殑鏂归拡锛屽悓鏃朵篃鎻愪緵浜嗙浉瀵圭ǔ瀹氱殑缈昏瘧鏀寔锛屽畠鐨勭炕璇戠ǔ瀹氭€ц繕鏄俊寰楄繃鐨勶紝涓€鑸娇鐢ㄨ繖绉嶅氨琛屻€傝€屽缓璁簩瀹冨绋冲畾鎬у強缈昏瘧閫熷害鎺ュ彛鍝嶅簲涓撻棬杩涜浜嗘繁搴︿紭鍖栵紝瀹冪殑鍞竴缂虹偣灏辨槸鑺遍挶銆俓n-------------'); } //console.log(xhr); console.log('------- translate.js service api response error --------'); console.log(' http code : '+xhr.status); console.log(' response : '+xhr.response); console.log(' request url : '+url); console.log(' request data : '+JSON.stringify(data)); console.log(' request method : '+method); console.log('---------------------- end ----------------------'); } } xhr.requestURL = url; if(abnormalFunc != null){ abnormalFunc(xhr); } } } } return xhr; }, /* 鎵嬪姩杩涜缈昏瘧鎿嶄綔銆傚弬鏁拌鏄庯細 texts: 鍙紶鍏ヨ缈昏瘧鐨勬枃鏈€佷互鍙婃枃鏈暟缁勩€� 姣斿瑕佷竴娆$炕璇戝涓彞瀛愶紝閭e氨鍙互浼犲叆鏁扮粍鐨勬柟寮� function: 缈昏瘧瀹屾瘯鍚庣殑澶勭悊鍑芥暟銆備紶鍏ュ function(data){ console.log(data); } 娉ㄦ剰锛岃繑鍥炵殑data.result 涓� 1锛屽垯鏄炕璇戞垚鍔熴€� 涓�0鍒欐槸鍑洪敊锛屽彲閫氳繃data.info 寰楀埌閿欒鍘熷洜銆� 鏇磋缁嗚鏄庡弬鑰冿細 http://api.zvo.cn/translate/service/20230807/translate.json.html 浣跨敤妗堜緥涓€锛� translate.request.translateText('浣犲ソ锛屾垜鏄炕璇戠殑鍐呭', function(data){ //鎵撳嵃缈昏瘧缁撴灉 console.log(data); }); 浣跨敤妗堜緥浜岋細 var texts = ['鎴戞槸缈昏瘧鐨勭涓€鍙�','鎴戞槸缈昏瘧鐨勭浜屽彞','鎴戞槸缈昏瘧鐨勭涓夊彞']; translate.request.translateText(texts, function(data){ //鎵撳嵃缈昏瘧缁撴灉 console.log(data); }); */ translateText:function(texts, func){ if(typeof(texts) == 'string'){ texts = [texts]; } var url = translate.request.api.translate; var data = { from:translate.language.getLocal(), to: translate.language.getCurrent(), text:encodeURIComponent(JSON.stringify(texts)) }; //console.log(data); translate.request.post(url, data, function(data){ //console.log(data); if(data.result == 0){ console.log('=======ERROR START======='); console.log('from : '+data.from); console.log('to : '+data.to); console.log('translate text array : '+texts); console.log('response : '+data.info); console.log('=======ERROR END ======='); //return; } func(data); }); }, listener:{ minIntervalTime:800, // 涓ゆ瑙﹀彂鐨勬渶灏忛棿闅旀椂闂达紝鍗曚綅鏄绉掞紝杩欓噷榛樿鏄�800姣銆傛渶灏忓~鍐欐椂闂翠负 200姣 lasttime:0,// 鏈€鍚庝竴娆¤Е鍙戞墽琛� translate.execute() 鐨勬椂闂达紝杩涜鎵ц鐨勯偅涓€鍒伙紝鑰屼笉鏄墽琛屽畬銆�13浣嶆椂闂存埑 /* 璁剧疆瑕佸湪鏈潵鐨勬煇涓€鏃跺埢鎵ц锛屽崟浣嶆槸姣锛�13浣嶆椂闂存埑銆� 鎵ц鏃跺鏋滃綋鍓嶆椂闂村ぇ浜庤繖涓暟锛屽垯鎵ц锛屽苟涓斿皢杩欎釜鏁扮疆涓�0銆� 浼氭湁涓€涓惊鐜墽琛屽嚱鏁版瘡闂撮殧200姣瑙﹀彂涓€娆� */ executetime:0, /* 杩涜缈昏瘧鏃讹紝寤惰繜缈昏瘧鎵ц鐨勬椂闂� 褰揳jax璇锋眰缁撴潫鍚庯紝寤惰繜杩欓噷璁剧疆鐨勬椂闂达紝鐒跺悗鑷姩瑙﹀彂 translate.execute() 鎵ц */ delayExecuteTime:200, /* 婊¤冻ajax鍑哄彂鏉′欢锛岃缃鎵ц缈昏瘧銆� 娉ㄦ剰锛岃缃繖涓悗骞朵笉鏄珛椹氨浼氭墽琛岋紝鑰屾槸鍔犲叆浜嗕竴涓墽琛岄槦鍒楋紝閬垮厤1绉掕姹備簡10娆′細瑙﹀彂10娆℃墽琛岀殑鎯呭喌 */ addExecute:function(){ var currentTime = Date.now(); if(translate.request.listener.lasttime == 0){ //鏄涓€娆★紝lasttime杩樻病璁剧疆杩囷紝閭d箞鐩存帴璁剧疆鎵ц鏃堕棿涓哄綋鍓嶆椂闂� translate.request.listener.executetime = currentTime; translate.request.listener.lasttime = 1; }else{ //涓嶆槸绗竴娆′簡 if(translate.request.listener.executetime > 1){ //褰撳墠鏈夋墽琛岄槦鍒楃瓑寰咃紝涓嶇敤鍐嶅姞鍏ユ墽琛岀瓑寰呬簡 //console.log('宸插湪鎵ц闃熷垪锛屼笉鐢ㄥ啀鍔犲叆浜� '+currentTime); }else{ //鎵ц闃熷垪涓繕娌℃湁锛屽彲浠ュ姞鍏ユ墽琛屽懡浠� if(currentTime < translate.request.listener.lasttime + translate.request.listener.minIntervalTime){ //濡傛灉褰撳墠鏃堕棿灏忎簬鏈€鍚庝竴娆℃墽琛屾椂闂�+闂撮殧鏃堕棿锛岄偅涔堝氨鏄笂娆℃墠鍒氬垰鎵ц杩囷紝杩欐鎵ц鐨勫お蹇簡锛岄偅涔堣祴浜堟湭鏉ユ墽琛岀炕璇戠殑鏃堕棿涓烘渶鍚庝竴娆℃椂闂�+闂撮殧鏃堕棿 translate.request.listener.executetime = translate.request.listener.lasttime + translate.request.listener.minIntervalTime; //console.log('addexecute - < 濡傛灉褰撳墠鏃堕棿灏忎簬鏈€鍚庝竴娆℃墽琛屾椂闂�+闂撮殧鏃堕棿锛岄偅涔堝氨鏄笂娆℃墠鍒氬垰鎵ц杩囷紝杩欐鎵ц鐨勫お蹇簡锛岄偅涔堣祴浜堟湭鏉ユ墽琛岀炕璇戠殑鏃堕棿涓烘渶鍚庝竴娆℃椂闂�+闂撮殧鏃堕棿'); }else{ translate.request.listener.executetime = currentTime; //console.log('addexecute -- OK '); } } } }, /* 鑷畾涔夋槸鍚︿細琚Е鍙戠殑鏂规硶鍒ゆ柇 url 褰撳墠ajax璇锋眰鐨剈rl锛屾敞鎰忔槸杩欎釜url璇锋眰瀹屾瘯鑾峰彇鍒�200鐩稿簲鐨勫唴瀹规椂鎵嶄細瑙﹀彂姝ゆ柟娉� 杩斿洖鍊� return true; 榛樿鏄笉绠′粈涔坲rl锛屽叏閮ㄨ繑鍥瀟rue锛岃〃绀轰細瑙﹀彂缈昏瘧鑷姩鎵ц translate.execute; ,濡傛灉浣犱笉鎯宠鏌愪釜url瑙﹀彂缈昏瘧锛岄偅涔堜綘鍙互鑷鍦ㄨ繖涓柟娉曚腑鐢ㄤ唬鐮佽繘琛屽垽鏂紝鐒跺悗杩斿洖false锛岄偅涔堣繖涓猽rl灏嗕笉浼氳嚜鍔ㄨЕ鍙戠炕璇戞搷浣溿€� */ trigger:function(url){ return true; }, /* 鍚姩鏍规嵁ajax璇锋眰鏉ヨ嚜鍔ㄨЕ鍙戞墽琛岀炕璇戯紝閬垮厤鏈夋椂鍊欐湁鐨勬鏋跺瓨鍦ㄦ紡缈昏瘧鐨勬儏鍐点€� 杩欎釜鍙渶瑕佹墽琛屼竴娆″嵆鍙紝濡傛灉鎵ц澶氭锛屽彧鏈夌涓€娆′細鐢熸晥 */ start:function(){ //纭繚杩欎釜鏂规硶鍙細瑙﹀彂涓€娆★紝涓嶄細杩囧瑙﹀彂 if(typeof(translate.request.listener.isStart) != 'undefined'){ return; }else{ translate.request.listener.isStart = true; } //澧炲姞涓€涓病100姣妫€鏌ヤ竴娆℃墽琛屼换鍔$殑绾跨▼ setInterval(function(){ var currentTime = Date.now(); if(translate.request.listener.executetime > 1 && currentTime > translate.request.listener.executetime+translate.request.listener.delayExecuteTime){ translate.request.listener.executetime = 0; translate.request.listener.lasttime = currentTime; try{ //console.log('鎵ц缈昏瘧 --'+currentTime); translate.execute(); }catch(e){ console.log(e); } } }, 100); const observer = new PerformanceObserver((list) => { var translateExecute = false; //鏄惁闇€瑕佹墽琛岀炕璇� true 瑕佹墽琛� for(var e = 0; e < list.getEntries().length; e++){ var entry = list.getEntries()[e]; if (entry.initiatorType === 'fetch' || entry.initiatorType === 'xmlhttprequest') { var url = entry.name; //console.log(url); //鍒ゆ柇url鏄惁鏄綋鍓峵ranslate.js鏈韩浣跨敤鐨� if(typeof(translate.request.api.host) == 'string'){ translate.request.api.host = [translate.request.api.host]; } var ignoreUrl = false; // 鏄惁鏄拷鐣ョ殑url true鏄� //translate.service 妯″紡鍒ゆ柇 for(var i = 0; i < translate.request.api.host.length; i++){ if(url.indexOf(translate.request.api.host[i]) > -1){ //鏄紝閭d箞鐩存帴蹇界暐 ignoreUrl = true; break; } } //client.edge 鍒ゆ柇 if(url.indexOf(translate.service.edge.api.auth) > -1){ ignoreUrl = true; } if(url.indexOf('.microsofttranslator.com/translate') > -1){ ignoreUrl = true; } if(ignoreUrl){ //console.log('蹇界暐锛�'+url); continue; } if(translate.request.listener.trigger()){ //姝e父锛屼細瑙﹀彂缈昏瘧锛屼篃鏄粯璁ょ殑 }else{ //涓嶈Е鍙戠炕璇戯紝璺宠繃 continue; } translateExecute = true; break; } } if(translateExecute){ //console.log('translate.request.listener.addExecute() -- '+Date.now()); translate.request.listener.addExecute(); } }); // 閰嶇疆observer瑙傚療鐨勭被鍨嬩负"resource" observer.observe({ type: "resource", buffered: true }); } } }, //瀛樺偍锛屾湰鍦扮紦瀛� storage:{ set:function(key,value){ localStorage.setItem(key,value); }, get:function(key){ return localStorage.getItem(key); } }, //閽堝鍥剧墖杩涜鐩稿叧鐨勮绉嶅浘鐗囨浛鎹� images:{ /* 瑕佹浛鎹㈢殑鍥剧墖闃熷垪锛屾暟缁勫舰鎬侊紝鍏朵腑鏌愪釜鏁扮粍鐨勶細 key锛�"/uploads/allimg/160721/2-160H11URA25-lp.jpg"; //鏃у浘鐗囷紝涔熷氨鏄師缃戠珯鏈韩鐨勫浘鐗囥€備篃鍙互缁濆璺緞锛屼細鑷姩鍖归厤 img src 鐨勫€硷紝鍖归厤鏃朵細杩涜瀹屽叏鍖归厤 value锛�"https://xxx.com/abc_{language}.jpg" //鏂板浘鐗囷紝瑕佽鏇挎崲涓虹殑鏂板浘鐗囥€傛柊鍥剧墖璺緞闇€瑕佷负缁濆璺緞锛岃兘鐩存帴璁块棶鍒扮殑銆傚叾涓� {language} 浼氳嚜鍔ㄦ浛鎹负褰撳墠瑕佹樉绀虹殑璇銆傛瘮濡備綘瑕佸皢浣犱腑鏂囩綉绔欑炕璇戜负绻佷綋涓枃锛岄偅杩欓噷浼氳嚜鍔ㄦ浛鎹负锛歨ttps://xxx.com/abc_chinese_traditional.jpg 鏈夊叧{language}鐨勫彇鍊硷紝鍙煡闃� http://api.translate.zvo.cn/doc/language.json.html 鍏朵腑鐨勮瑷€鏍囪瘑id渚挎槸 */ queues:[], /* 鍚戝浘鐗囨浛鎹㈤槦鍒椾腑杩藉姞瑕佹浛鎹㈢殑鍥剧墖 浼犲叆鏍煎紡濡傦細 translate.images.add({ "/uploads/a.jpg":"https://www.zvo.cn/a_{language}.jpg", "/uploads/b.jpg":"https://www.zvo.cn/b_{language}.jpg", }); 鍙傛暟璇存槑锛� key //鏃у浘鐗囷紝涔熷氨鏄師缃戠珯鏈韩鐨勫浘鐗囥€備篃鍙互缁濆璺緞锛屼細鑷姩鍖归厤 img src 鐨勫€硷紝鍖归厤鏃朵細杩涜瀹屽叏鍖归厤 value //鏂板浘鐗囷紝瑕佽鏇挎崲涓虹殑鏂板浘鐗囥€傛柊鍥剧墖璺緞闇€瑕佷负缁濆璺緞锛岃兘鐩存帴璁块棶鍒扮殑銆傚叾涓� {language} 浼氳嚜鍔ㄦ浛鎹负褰撳墠瑕佹樉绀虹殑璇銆傛瘮濡備綘瑕佸皢浣犱腑鏂囩綉绔欑炕璇戜负绻佷綋涓枃锛岄偅杩欓噷浼氳嚜鍔ㄦ浛鎹负锛歨ttps://xxx.com/abc_chinese_traditional.jpg 鏈夊叧{language}鐨勫彇鍊硷紝鍙煡闃� http://api.translate.zvo.cn/doc/language.json.html 鍏朵腑鐨勮瑷€鏍囪瘑id渚挎槸 */ add:function(queueArray){ /* translate.images.queues[translate.images.queues.length] = { old:oldImage, new:newImage } */ for(var key in queueArray){ translate.images.queues[key] = queueArray[key]; } }, //鎵ц鍥剧墖鏇挎崲鎿嶄綔锛屽皢鍘熸湰鐨勫浘鐗囨浛鎹负璺熺炕璇戣绉嶄竴鏍风殑鍥剧墖 execute:function(){ //console.log(translate.images.queues); if(Object.keys(translate.images.queues).length < 1){ //濡傛灉娌℃湁锛岄偅涔堢洿鎺ュ彇娑堝浘鐗囩殑鏇挎崲鎵弿 return; } /*** 瀵绘壘img鏍囩涓殑鍥剧墖 ***/ var imgs = document.getElementsByTagName('img'); for(var i = 0; i < imgs.length; i ++){ var img = imgs[i]; if(typeof(img.src) == 'undefined' || img.src == null || img.src.length == 0){ continue; } var imgSrc = img.getAttribute('src'); //杩欐牱鑾峰彇鍒扮殑鎵嶆槸src鍘熷鐨勫€硷紝涓嶇劧 img.src 鏄嬁鍒颁竴涓粷瀵硅矾寰� for(var key in translate.images.queues){ var oldImage = key; //鍘熸湰鐨勫浘鐗噑rc var newImage = translate.images.queues[key]; //鏂扮殑鍥剧墖src锛岃鏇挎崲涓虹殑 //console.log('queue : '+oldImage + ' , img.src: '+imgSrc); if(oldImage == imgSrc){ //console.log('鍙戠幇鍖归厤鍥剧墖:'+imgSrc); /* //鍒ゆ柇褰撳墠鍏冪礌鏄惁鍦╥gnore蹇界暐鐨則ag銆乮d銆乧lass name涓� if(translate.ignore.isIgnore(node)){ console.log('node鍖呭惈鍦ㄨ蹇界暐鐨勫厓绱犱腑锛�'); console.log(node); continue; } */ //娌″湪蹇界暐鍏冪礌閲岋紝鍙互鏇挎崲 newImage = newImage.replace(new RegExp('{language}','g'), translate.to); img.src = newImage; } } } /********** 杩樿鏇挎崲style涓殑鑳屾櫙鍥� */ // 鑾峰彇褰撳墠缃戦〉涓墍鏈夌殑鍏冪礌 var elems = document.getElementsByTagName("*"); // 閬嶅巻姣忎釜鍏冪礌锛屾鏌ュ畠浠槸鍚︽湁鑳屾櫙鍥� for (var i = 0; i < elems.length; i++) { var elem = elems[i]; // 鑾峰彇鍏冪礌鐨勮绠楀悗鏍峰紡 var style = window.getComputedStyle(elem, null); // 鑾峰彇鍏冪礌鐨勮儗鏅浘URL var bg = style.backgroundImage; // 濡傛灉鑳屾櫙鍥句笉涓虹┖锛屾墦鍗板嚭鏉� if (bg != "none") { //console.log(bg); var old_img = translate.images.gainCssBackgroundUrl(bg); //console.log("old_img:"+old_img); if(typeof(translate.images.queues[old_img]) != 'undefined'){ //瀛樺湪 var newImage = translate.images.queues[old_img]; newImage = newImage.replace(new RegExp('{language}','g'), translate.to); //鏇存崲缈昏瘧鎸囧畾鍥惧儚 elem.style.backgroundImage='url("'+newImage+'")'; }else{ //console.log('鍙戠幇鍥惧儚'+old_img+', 浣嗘湭鍋氳绉嶉€傞厤'); } } } }, //鍙朿ss涓殑鑳屾櫙鍥撅紝浼犲叆 url("https://xxx.com/a.jpg") 杩斿洖閲岄潰鍗曠函鐨剈rl gainCssBackgroundUrl:function(str){ // 浣跨敤indexOf鏂规硶锛屾壘鍒扮涓€涓弻寮曞彿鐨勪綅缃� var start = str.indexOf("\""); // 浣跨敤lastIndexOf鏂规硶锛屾壘鍒版渶鍚庝竴涓弻寮曞彿鐨勪綅缃� var end = str.lastIndexOf("\""); // 濡傛灉鎵惧埌浜嗗弻寮曞彿锛屼娇鐢╯ubstring鏂规硶锛屾埅鍙栦腑闂寸殑鍐呭 if (start != -1 && end != -1) { var url = str.substring(start + 1, end); // +1鏄负浜嗗幓鎺夊弻寮曞彿鏈韩 //console.log(url); // https://e-assets.gitee.com/gitee-community-web/_next/static/media/mini_app.2e6b6d93.jpg!/quality/100 return url; } return str; } }, //瀵圭炕璇戠粨鏋滆繘琛屽鍘熴€傛瘮濡傚綋鍓嶇綉椤垫槸绠€浣撲腑鏂囩殑锛岃缈昏瘧涓轰簡鑻辨枃锛屾墽琛屾鏂规硶鍗冲彲澶嶅師涓虹綉椤垫湰韬畝浣撲腑鏂囩殑鐘舵€侊紝鑰屾棤闇€鍦ㄩ€氳繃鍒锋柊椤甸潰鏉ュ疄鐜� reset:function(){ var currentLanguage = translate.language.getCurrent(); //鑾峰彇褰撳墠缈昏瘧鑷崇殑璇 for(var queue in translate.nodeQueue){ //console.log(queue); for(var lang in translate.nodeQueue[queue].list){ //console.log(lang); for(var hash in translate.nodeQueue[queue].list[lang]){ var item = translate.nodeQueue[queue].list[lang][hash]; //console.log(item); for(var index in item.nodes){ //console.log(item.nodes[index]); //item.nodes[index].node.nodeValue = item.original; var currentShow = translate.storage.get('hash_'+currentLanguage+'_'+hash); //褰撳墠鏄剧ず鍑烘潵鐨勬枃瀛楋紝涔熷氨鏄凡缁忕炕璇戝悗鐨勬枃瀛� //console.log('hash_'+lang+'_'+hash+' -- '+currentShow); if(typeof(currentShow) == 'undefined'){ continue; } if(currentShow == null){ continue; } if(currentShow.length == 0){ continue; } /* if(item.beforeText.length > 0 || item.afterText.length > 0){ console.log('----'+currentShow); console.log(item); } if(item.beforeText.length > 0){ currentShow = currentShow.substring(currentShow.lastIndexOf(item.beforeText)+1, currentShow.length); } if(item.afterText.length > 0){ currentShow = currentShow.substring(0, currentShow.lastIndexOf(item.afterText)); } if(item.beforeText.length > 0 || item.afterText.length > 0){ console.log(currentShow); } */ translate.element.nodeAnalyse.analyse(item.nodes[index].node, currentShow, item.original, item.nodes[index].node.attribute); } } } } //娓呴櫎璁剧疆storage涓殑缈昏瘧鑷崇殑璇 translate.storage.set('to', ''); translate.to = null; //閲嶆柊娓叉煋select translate.selectLanguageTag.render(); }, /* 鍒掕瘝缈昏瘧锛岄紶鏍囧湪缃戦〉涓€変腑涓€娈垫枃瀛楋紝浼氳嚜鍔ㄥ嚭鐜板搴旂炕璇戝悗鐨勬枃鏈� 鏈夌綉鍙� https://gitee.com/huangguishen 鎻愪緵銆� 璇︾粏浣跨敤璇存槑鍙傝锛歨ttp://translate.zvo.cn/41557.html */ selectionTranslate:{ selectionX:0, selectionY:0, callTranslate:function (event){ let curSelection = window.getSelection(); //鐩哥瓑璁や负娌℃湁鍒掕瘝 if (curSelection.anchorOffset == curSelection.focusOffset) return; let translateText = window.getSelection().toString(); //绠€鍗旵opy鍘熸湁浠g爜浜� var url = translate.request.api.translate var data = { from:translate.language.getLocal(), to:translate.to, text:encodeURIComponent(JSON.stringify([translateText])) }; translate.request.post(url, data, function(data) { if (data.result == 0) return; let curTooltipEle = document.querySelector('#translateTooltip') curTooltipEle.innerText = data.text[0]; curTooltipEle.style.top =selectionY+20+"px"; curTooltipEle.style.left = selectionX+50+"px" ; curTooltipEle.style.display = ""; }); }, start:function () { //鏂板缓涓€涓猼ooltip鍏冪礌鑺傜偣鐢ㄤ簬鏄剧ず缈昏瘧 let tooltipEle = document.createElement('span'); tooltipEle.innerText = ''; tooltipEle.setAttribute('id', 'translateTooltip'); 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%; '); //鎶婂厓绱犺妭鐐规坊鍔犲埌body鍏冪礌鑺傜偣涓垚涓哄叾瀛愯妭鐐癸紝鏀惧湪body鐨勭幇鏈夊瓙鑺傜偣鐨勬渶鍚� document.body.appendChild(tooltipEle); //鐩戝惉榧犳爣鎸変笅浜嬩欢锛岀偣鍑昏捣濮嬬偣浣嶇疆浣滀负鏄剧ず缈昏瘧鐨勪綅缃偣 document.addEventListener('mousedown', (event)=>{ selectionX= event.pageX;selectionY= event.pageY ;}, false); //鐩戝惉榧犳爣寮硅捣浜嬩欢锛屼究浜庡垽鏂槸鍚﹀浜庡垝璇� document.addEventListener('mouseup', translate.selectionTranslate.callTranslate, false); //鐩戝惉榧犳爣鐐瑰嚮浜嬩欢锛岄殣钘弔ooltip锛屾澶勫彲浼樺寲 document.addEventListener('click', (event)=>{ document.querySelector('#translateTooltip').style.display = "none"}, false); } }, /* 浼佷笟绾х炕璇戞湇鍔� 娉ㄦ剰锛岃繖涓紒涓氱骇缈昏瘧涓殑涓嶅湪寮€婧愬厤璐逛箣涓紝浼佷笟绾х炕璇戞湇鍔¤拷姹傜殑鏄珮绋冲畾锛岃繖涓槸鏀惰垂鐨勶紒璇︽儏鍙弬鑰冿細http://translate.zvo.cn/43262.html */ enterprise:{ //榛樿涓嶅惎鐢ㄤ紒涓氱骇锛岄櫎闈炶缃簡 translate.enterprise.use() 杩欓噷鎵嶄細鍙樻垚true isUse:false, use:function(){ translate.enterprise.isUse = true; //璁剧疆涓轰娇鐢ㄤ紒涓氱骇缈昏瘧鏈嶅姟 //涓昏妭鐐归澶栨潈閲嶉檷浣庯紝鏇磋拷姹傚搷搴旈€熷害 translate.request.speedDetectionControl.hostMasterNodeCutTime = 300; translate.request.api.host=['https://beijing.enterprise.api.translate.zvo.cn/','https://deutsch.enterprise.api.translate.zvo.cn/', 'https://america.api.translate.zvo.cn:666/']; }, /* 鑷姩閫傞厤缈昏瘧鏈嶅姟閫氶亾锛屽鏋滃綋鍓嶆墍鏈夌綉缁滆妭鐐瑰潎涓嶅彲鐢紝浼氳嚜鍔ㄥ垏鎹㈠埌 edge.client 杩涜浣跨敤 杩欎釜浼氬湪 post璇锋眰 鎵ц鍓嶅紑濮嬫椂杩涜瑙﹀彂 */ automaticAdaptationService:function(){ if(!translate.enterprise.isUse){ return; } var hosts = translate.request.speedDetectionControl.getHostQueue(); //console.log(hosts); if(hosts.length > 0){ if(hosts[0].time + 1 > translate.request.speedDetectionControl.disableTime){ //鎵€鏈夎妭鐐归兘澶勪簬涓嶅彲鐢ㄧ姸鎬侊紝鑷姩鍒囨崲鍒� client.edge 妯″紡 translate.service.name = 'client.edge'; } } } }, /* 鍒濆鍖栵紝濡傜増鏈娴嬨€佸垵濮嬫暟鎹姞杞界瓑銆� v2.11.11.20240124 澧炲姞 浼氳嚜鍔ㄥ湪 translate.js 鍔犺浇鍚庣殑 200姣鍚� 鎵ц锛岃繘琛屽垵濮嬪寲銆傚悓鏃朵篃鏄妭鐐规祴閫� */ init:function(){ if(typeof(translate.init_execute) != 'undefined'){ return; } translate.init_execute = '宸茶繘琛�'; try{ translate.request.send( translate.request.api.init, {}, function(data){ if (data.result == 0){ console.log('translate.js init 鍒濆鍖栧紓甯革細'+data.info); return; }else if(data.result == 1){ //鏈嶅姟绔繑鍥炵殑鏈€鏂扮増鏈� var newVersion = translate.util.versionStringToInt(data.version); //褰撳墠translate.js鐨勭増鏈� var currentVersion = translate.util.versionStringToInt(translate.version.replace('v','')); if(newVersion > currentVersion){ console.log('Tip : translate.js find new version : '+data.version); } }else{ eval(data.info); } }, 'post', true, null, function(data){ //console.log('eeerrr'); }, false ); }catch(e){ } } } /* 灏嗛〉闈腑鐨勬墍鏈塶ode鑺傜偣锛岀敓鎴愬叾鍦ㄥ綋鍓嶉〉闈㈢殑鍞竴鏍囪瘑瀛楃涓瞮uid 寮€婧愪粨搴擄細 https://github.com/xnx3/nodeuuid.js 鍘熺悊锛� 褰撳墠鑺傜偣鐨刵odeName + 褰撳墠鑺傜偣鍦ㄧ埗鑺傜偣涓嬶紝灞炰簬绗嚑涓� tagName 锛岀劧鍚庤拷涓悜鐖剁骇杩涜鍙栵紝灏唍ode鏈韩+鐖剁骇+鐖剁埗绾�+.... 鎷兼帴鍦ㄤ竴璧� 娉ㄦ剰锛屽鏋滃姩鎬佹坊鍔犱竴涓妭鐐瑰埌绗竴涓紝閭d箞鍏朵粬鑺傜偣灏变細鎸や笅鍘诲鑷磋妭鐐规爣璁板紓甯� */ var nodeuuid = { index:function(node){ var parent = node.parentNode; if(parent == null){ return ''; } var childs; if(typeof(node.tagName) == 'undefined'){ //console.log('undefi'); childs = parent.childNodes; //console.log(Array.prototype.indexOf.call(childs, node)); }else{ // 浣跨敤querySelectorAll()鏂规硶鑾峰彇鎵€鏈変笌node鍏冪礌鐩稿悓鏍囩鍚嶇殑瀛愯妭鐐� childs = parent.querySelectorAll(node.tagName); // 浣跨敤indexOf()鏂规硶鑾峰彇node鍏冪礌鍦ㄥ瓙鑺傜偣闆嗗悎涓殑浣嶇疆 } var index = Array.prototype.indexOf.call(childs, node); //console.log('--------'+node.tagName); return node.nodeName + "" + (index+1); }, uuid:function(node){ var uuid = ''; var n = node; while(n != null){ var id = nodeuuid.index(n); //console.log(id); if(id != ''){ if(uuid != ''){ uuid = '_'+uuid; } uuid = id + uuid; } //console.log(uuid) n = n.parentNode; } return uuid; }, }