// ==UserScript==
// @name 载入dom到html
// @namespace http://tampermonkey.net/
// @version 0.4
// @description 提供一个function,loadJsCode!
// @license MIT
// @match *://*/*
// @author https://github.com/ronn97
// @match https://www.tampermonkey.net/index.php?locale=zh_CN
// @icon https://www.google.com/s2/favicons?sz=64&domain=tampermonkey.net
// @grant none
// ==/UserScript==
/*
国际化,网页自动翻译。
作者:管雷鸣
开原仓库:https://github.com/xnx3/translate
*/
var translate = {
version: "2.3.2.20230620",
useVersion: "v1",
setUseVersion2: function() {
translate.useVersion = "v2"
},
translate: null,
includedLanguages: "zh-CN,zh-TW,en",
resourcesUrl: "//res.zvo.cn/translate",
selectLanguageTag: {
show: !0,
languages: "",
alreadyRender: !1,
selectOnChange: function(e) {
var t = e.target.value;
translate.changeLanguage(t)
},
render: function() {
if (!translate.selectLanguageTag.alreadyRender && (translate.selectLanguageTag.alreadyRender = !0,
translate.selectLanguageTag.show)) {
if (null == document.getElementById("translate")) {
var e = document.getElementsByTagName("body")[0]
, t = document.createElement("div");
t.id = "translate",
e.appendChild(t)
} else if (null != document.getElementById("translateSelectLanguage"))
return;
translate.request.post(translate.request.api.host + translate.request.api.language + "?v=" + translate.version, {}, function(e) {
if (0 != e.result) {
var t = function(e) {
translate.selectLanguageTag.selectOnChange(e)
}
, a = document.createElement("select");
a.id = "translateSelectLanguage",
a.className = "translateSelectLanguage";
for (var n = 0; n < e.list.length; n++) {
var l = document.createElement("option");
if (l.setAttribute("value", e.list[n].id),
translate.selectLanguageTag.languages.length > 0) {
var r = ("," + translate.selectLanguageTag.languages + ",").toLowerCase();
if (console.log(r),
r.indexOf("," + e.list[n].id.toLowerCase() + ",") < 0)
continue
}
null != translate.to && void 0 !== translate.to && translate.to.length > 0 ? translate.to == e.list[n].id && l.setAttribute("selected", "selected") : e.list[n].id == translate.language.getLocal() && l.setAttribute("selected", "selected"),
l.appendChild(document.createTextNode(e.list[n].name)),
a.appendChild(l)
}
window.addEventListener ? a.addEventListener("change", t, !1) : a.attachEvent("onchange", t),
document.getElementById("translate").appendChild(a)
} else
console.log("load language list error : " + e.info)
})
}
}
},
localLanguage: "zh-CN",
googleTranslateElementInit: function() {
var e = "";
null != document.getElementById("translate") && (e = "translate"),
translate.translate = new google.translate.TranslateElement({
pageLanguage: "zh-CN",
includedLanguages: translate.selectLanguageTag.languages,
layout: 0
},e)
},
init: function() {
var e = window.location.protocol;
"file:" == window.location.protocol && (e = "http:"),
-1 == this.resourcesUrl.indexOf("://") && (this.resourcesUrl = e + this.resourcesUrl)
},
execute_v1: function() {
if (null == document.getElementById("translate") && translate.selectLanguageTag.show) {
var e = document.getElementsByTagName("body")[0]
, t = document.createElement("div");
t.id = "translate",
e.appendChild(t)
}
"" == translate.includedLanguages && (translate.selectLanguageTag.languages = translate.includedLanguages),
console.log("translate.js tip: translate.includedLanguages obsolete, please use the translate.selectLanguageTag.languages are set");
var a = document.getElementsByTagName("head")[0]
, n = document.createElement("script");
n.type = "text/javascript",
n.src = this.resourcesUrl + "/js/element.js",
a.appendChild(n)
},
setCookie: function(e, t) {
var a = e + "=" + escape(t);
document.cookie = a
},
getCookie: function(e) {
for (var t = document.cookie.split("; "), a = 0; a < t.length; a++) {
var n = t[a].split("=");
if (n[0] == e)
return unescape(n[1])
}
return ""
},
currentLanguage: function() {
translate.check();
var e = translate.getCookie("googtrans");
return e.length > 0 ? e.substr(e.lastIndexOf("/") + 1, e.length - 1) : translate.localLanguage
},
changeLanguage: function(e) {
if (",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,".indexOf("," + e + ",") > -1) {
translate.check();
var t = "/" + translate.localLanguage + "/" + e
, a = document.location.host.split(".");
if (a.length > 2) {
var n = a[a.length - 2] + "." + a[a.length - 1];
document.cookie = "googtrans=;expires=" + new Date(1) + ";domain=" + n + ";path=/",
document.cookie = "googtrans=" + t + ";domain=" + n + ";path=/"
}
return translate.setCookie("googtrans", "" + t),
void location.reload()
}
if (translate.setUseVersion2(),
null != translate.to && translate.to.length > 0 && translate.to != translate.language.getLocal())
var l = !0;
translate.to = e,
translate.storage.set("to", e),
l ? location.reload() : translate.execute()
},
check: function() {
"file:" == window.location.protocol && console.log("\r\n---WARNING----\r\ntranslate.js 主动翻译组件自检异常,当前协议是file协议,翻译组件要在正常的线上http、https协议下才能正常使用翻译功能\r\n------------")
},
to: "",
autoDiscriminateLocalLanguage: !1,
documents: [],
ignore: {
tag: ["style", "script", "link", "i", "pre", "code"],
class: ["ignore", "translateSelectLanguage"],
id: [],
isIgnore: function(e) {
if (null == e || void 0 === e)
return !1;
for (var t = e, a = 100; a-- > 0; ) {
if (null == t || void 0 === t)
return !1;
var n = translate.element.getNodeName(t).toLowerCase();
if (n.length > 0) {
if ("body" == n || "html" == n || "#document" == n)
return !1;
if (translate.ignore.tag.indexOf(n) > -1)
return !0
}
if (null != t.className) {
var l = t.className;
if (null == l || "string" != typeof l)
continue;
l = l.trim().split(" ");
for (var r = 0; r < l.length; r++)
if (null != l[r] && l[r].trim().length > 0 && translate.ignore.class.indexOf(l[r]) > -1)
return !0
}
if (null != t.id && void 0 !== t.id && translate.ignore.id.indexOf(t.id) > -1)
return !0;
t = t.parentNode
}
return !1
}
},
nomenclature: {
data: new Array,
old_Data: [],
set: function(e) {
alert("请将 translate.nomenclature.set 更换为 append,具体使用可参考: https://github.com/xnx3/translate ")
},
append: function(e, t, a) {
void 0 === translate.nomenclature.data[e] && (translate.nomenclature.data[e] = new Array),
void 0 === translate.nomenclature.data[e][t] && (translate.nomenclature.data[e][t] = new Array);
for (var n = a.split("\n"), l = 0; l < n.length; l++) {
var r = n[l].trim();
if (!(r.length < 1)) {
var s = r.split("=");
if (2 == s.length) {
var o = s[0].trim()
, u = s[1].trim();
0 != o.length && 0 != u.length && (translate.nomenclature.data[e][t][o] = u)
}
}
}
},
get: function() {
return translate.nomenclature.data
},
dispose: function(e) {
if (null == e || 0 == e.length)
return e;
if (void 0 === translate.nomenclature.data[translate.language.getLocal()] || void 0 === translate.nomenclature.data[translate.language.getLocal()][translate.to])
return e;
for (var t in translate.nomenclature.data[translate.language.getLocal()][translate.to]) {
var a = translate.nomenclature.data[translate.language.getLocal()][translate.to][t];
if ("function" != typeof a) {
var n = e.indexOf(t);
if (n > -1)
if ("english" == translate.language.getLocal()) {
var l = "";
if (0 == n)
;
else if (l = e.substr(n - 1, 1),
"english" == translate.language.getCharLanguage(l))
continue;
var r = "";
if (n + t.length == e.length)
;
else if (r = e.substr(n + t.length, 1),
"english" == translate.language.getCharLanguage(r))
continue;
e = e.replace(new RegExp(l + t + r,"g"), l + a + r)
} else
e = e.replace(new RegExp(t,"g"), a)
}
}
return e
}
},
setAutoDiscriminateLocalLanguage: function() {
translate.autoDiscriminateLocalLanguage = !0
},
nodeQueue: {},
setDocuments: function(e) {
null != e && void 0 !== e && (void 0 === e.length ? translate.documents[0] = e : translate.documents = e,
translate.nodeQueue = {},
console.log("set documents , clear translate.nodeQueue"))
},
getDocuments: function() {
return null != translate.documents && void 0 !== translate.documents && translate.documents.length > 0 ? translate.documents : document.all
},
listener: {
isExecuteFinish: !1,
isStart: !1,
start: function() {
translate.temp_linstenerStartInterval = setInterval(function() {
"complete" == document.readyState && (clearInterval(translate.temp_linstenerStartInterval),
translate.listener.addListener())
}, 50)
},
addListener: function() {
translate.listener.isStart = !0;
const e = {
attributes: !0,
childList: !0,
subtree: !0
}
, t = new MutationObserver(function(e, t) {
var a = [];
for (let t of e)
"childList" === t.type && t.addedNodes.length > 0 && a.push.apply(a, t.addedNodes);
a.length > 0 && translate.execute(a)
}
);
for (var a = translate.getDocuments(), n = 0; n < a.length; n++) {
var l = a[n];
null != l && t.observe(l, e)
}
},
renderTaskFinish: function(e) {}
},
renderTask: class {
constructor() {
this.taskQueue = [],
this.nodes = []
}
add(e, t, a, n) {
var l = translate.element.nodeAnalyse.get(e, n)
, r = translate.util.hash(l.text);
void 0 === this.nodes[r] && (this.nodes[r] = new Array),
this.nodes[r].push(e);
var s = this.taskQueue[r];
null != s && void 0 !== s || (s = new Array);
var o = new Array;
o.originalText = t,
o.resultText = a,
o.attribute = n,
s.push(o),
this.taskQueue[r] = s
}
execute() {
for (var e in this.taskQueue) {
"function" != typeof (t = this.taskQueue[e]) && (t.sort((e,t)=>t.originalText.length - e.originalText.length),
this.taskQueue[e] = t)
}
for (var e in this.nodes)
for (var t = this.taskQueue[e], a = 0; a < this.nodes[e].length; a++)
for (var n = 0; n < t.length; n++) {
var l = t[n];
"function" != typeof t && translate.element.nodeAnalyse.set(this.nodes[e][n], l.originalText, l.resultText, l.attribute)
}
void 0 !== this.taskQueue && this.taskQueue.length > 0 && translate.listener.renderTaskFinish(this)
}
}
,
execute: function(e) {
if ("undefined" != typeof doc && (translate.useVersion = "v2"),
"v1" != translate.useVersion) {
var t = translate.util.uuid();
if (translate.nodeQueue[t] = new Array,
translate.nodeQueue[t].expireTime = Date.now() + 12e4,
translate.nodeQueue[t].list = new Array,
null == translate.to || "" == translate.to) {
var a = translate.storage.get("to");
null != a && void 0 !== a && a.length > 0 && (translate.to = a)
}
try {
translate.selectLanguageTag.render()
} catch (e) {
console.log(e)
}
if (null != translate.to && void 0 !== translate.to && 0 != translate.to.length) {
if (translate.to != translate.language.getLocal()) {
var n;
if (void 0 !== e) {
if (null == e)
return void console.log("translate.execute(...) 中传入的要翻译的目标区域不存在。");
void 0 === e.length ? (n = new Array)[0] = e : n = e
} else
n = translate.getDocuments();
for (var l = 0; l < n.length & l < 20; l++) {
var r = n[l];
translate.element.whileNodes(t, r)
}
var s = {}
, o = {};
for (var u in translate.nodeQueue[t].list) {
if (null == u || void 0 === u || 0 == u.length || "undefined" == u)
continue;
s[u] = [],
o[u] = [];
let e = new translate.renderTask;
for (var i in translate.nodeQueue[t].list[u])
if ("function" != typeof translate.nodeQueue[t].list[u][i]) {
var g = translate.nodeQueue[t].list[u][i].original
, d = translate.nodeQueue[t].list[u][i].translateText
, c = g == d ? i : translate.util.hash(d);
translate.nodeQueue[t].list[u][i].cacheHash = c;
var h = translate.storage.get("hash_" + translate.to + "_" + c);
if (null != h && h.length > 0)
for (var f = 0; f < translate.nodeQueue[t].list[u][i].nodes.length; f++)
e.add(translate.nodeQueue[t].list[u][i].nodes[f].node, g, translate.nodeQueue[t].list[u][i].beforeText + h + translate.nodeQueue[t].list[u][i].afterText, translate.nodeQueue[t].list[u][i].nodes[f].attribute);
else
s[u].push(d),
o[u].push(i)
}
e.execute()
}
var p = [];
for (var u in translate.nodeQueue[t].list)
s[u].length < 1 || p.push(u);
if (translate.listener.isExecuteFinish || (translate.temp_executeFinishNumber = 0,
translate.temp_executeFinishInterval = setInterval(function() {
translate.temp_executeFinishNumber == p.length && (translate.listener.isExecuteFinish = !0,
clearInterval(translate.temp_executeFinishInterval))
}, 50)),
0 != p.length)
for (var v in p) {
u = p[v];
if (void 0 === s[u] || s[u].length < 1)
return;
var m = translate.request.api.host + translate.request.api.translate + "?v=" + translate.version
, x = {
from: u,
to: translate.to,
text: encodeURIComponent(JSON.stringify(s[u]))
};
translate.request.post(m, x, function(e) {
if (0 == e.result)
return console.log("=======ERROR START======="),
console.log(s[e.from]),
console.log("response : " + e.info),
console.log("=======ERROR END ======="),
void translate.temp_executeFinishNumber++;
let a = new translate.renderTask;
for (var n = 0; n < o[e.from].length; n++) {
var l = e.from
, r = e.text[n]
, u = o[e.from][n]
, i = translate.nodeQueue[t].list[l][u].cacheHash
, g = "";
try {
g = translate.nodeQueue[t].list[l][u].original
} catch (e) {
console.log("uuid:" + t + ", originalWord:" + g + ", lang:" + l + ", hash:" + u + ", text:" + r + ", queue:" + translate.nodeQueue[t]),
console.log(e);
continue
}
for (var d = 0; d < translate.nodeQueue[t].list[l][u].nodes.length; d++)
a.add(translate.nodeQueue[t].list[l][u].nodes[d].node, g, translate.nodeQueue[t].list[l][u].beforeText + r + translate.nodeQueue[t].list[l][u].afterText, translate.nodeQueue[t].list[l][u].nodes[d].attribute);
translate.storage.set("hash_" + e.to + "_" + i, r)
}
a.execute(),
translate.temp_executeFinishNumber++
})
}
}
} else
translate.autoDiscriminateLocalLanguage && translate.executeByLocalLanguage()
} else
translate.execute_v1()
},
element: {
nodeAnalyse: {
get: function(e, t) {
return translate.element.nodeAnalyse.analyse(e, "", "", t)
},
set: function(e, t, a, n) {
translate.element.nodeAnalyse.analyse(e, t, a, n)
},
analyse: function(e, t, a, n) {
var l = new Array;
l.node = e,
l.text = "";
var r = translate.element.getNodeName(e);
if (null != n && "string" == typeof n && n.length > 0)
return l.text = e[n],
void 0 !== t && t.length > 0 && (void 0 !== e[n] ? e[n] = e[n].replace(new RegExp(translate.util.regExp.pattern(t),"g"), translate.util.regExp.resultText(a)) : console.log(e)),
l;
"#text" == r && (void 0 !== e.parentNode && "TEXTAREA" == translate.element.getNodeName(e.parentNode) && (r = "TEXTAREA",
e = e.parentNode));
if ("INPUT" == r || "TEXTAREA" == r) {
if (null == e.attributes || void 0 === e.attributes)
return l.text = "",
l;
if ("INPUT" == r && void 0 !== e.attributes.type && null != typeof e.attributes.type.nodeValue && ("button" == e.attributes.type.nodeValue.toLowerCase() || "submit" == e.attributes.type.nodeValue.toLowerCase())) {
var s = e.attributes.value;
if (null != s && void 0 !== s && void 0 !== s.nodeValue && s.nodeValue.length > 0)
return void 0 !== t && t.length > 0 && (s.nodeValue = s.nodeValue.replace(new RegExp(translate.util.regExp.pattern(t),"g"), translate.util.regExp.resultText(a))),
l.text = s.nodeValue,
l.node = s,
l
}
return void 0 !== e.attributes.placeholder ? (void 0 !== t && t.length > 0 && (e.attributes.placeholder.nodeValue = e.attributes.placeholder.nodeValue.replace(new RegExp(translate.util.regExp.pattern(t),"g"), translate.util.regExp.resultText(a))),
l.text = e.attributes.placeholder.nodeValue,
l.node = e.attributes.placeholder,
l) : (l.text = "",
l)
}
if ("META" == r) {
if (void 0 !== e.name && null != e.name) {
var o = e.name.toLowerCase();
if ("keywords" == o || "description" == o)
return void 0 !== t && t.length > 0 && (e.content = e.content.replace(new RegExp(translate.util.regExp.pattern(t),"g"), translate.util.regExp.resultText(a))),
l.text = e.content,
l
}
return l.text = "",
l
}
return "IMG" == r ? void 0 === e.alt || null == e.alt ? (l.text = "",
l) : (void 0 !== t && t.length > 0 && (e.alt = e.alt.replace(new RegExp(translate.util.regExp.pattern(t),"g"), translate.util.regExp.resultText(a))),
l.text = e.alt,
l) : (null == e.nodeValue || void 0 === e.nodeValue ? l.text = "" : 0 == e.nodeValue.trim().length ? l.text = "" : (void 0 !== t && t.length > 0 && (e.nodeValue = e.nodeValue.replace(new RegExp(translate.util.regExp.pattern(t),"g"), translate.util.regExp.resultText(a))),
l.text = e.nodeValue),
l)
}
},
getNodeName: function(e) {
return null == e || void 0 === e ? "" : null == e.nodeName || void 0 === e.nodeName ? "" : e.nodeName
},
whileNodes: function(e, t) {
if (null != t && void 0 !== t) {
"object" == typeof t && "string" == typeof t.title && t.title.length > 0 && (translate.ignore.isIgnore(t) || translate.addNodeToQueue(e, t, t.title, "title"));
var a = t.childNodes;
if (a.length > 0)
for (var n = 0; n < a.length; n++)
translate.element.whileNodes(e, a[n]);
else
translate.element.findNode(e, t)
}
},
findNode: function(e, t) {
if (null != t && void 0 !== t && null != t.parentNode) {
var a = translate.element.getNodeName(t.parentNode);
if ("" != a && !(translate.ignore.tag.indexOf(a.toLowerCase()) > -1 || translate.ignore.isIgnore(t))) {
var n = translate.element.nodeAnalyse.get(t);
n.text.length > 0 && translate.addNodeToQueue(e, n.node, n.text)
}
}
}
},
addNodeToQueue: function(e, t, a, n) {
if (null != t && null != a && 0 != a.length && "#comment" != translate.element.getNodeName(t).toLowerCase()) {
translate.util.hash(a);
if (translate.util.findTag(a)) {
if (null == t.parentNode)
return;
var l = translate.element.getNodeName(t.parentNode);
if ("SCRIPT" == l || "STYLE" == l)
return
}
var r = translate.language.get(a);
for (var s in void 0 !== r[translate.to] && delete r[translate.to],
r) {
null != translate.nodeQueue[e].list[s] && void 0 !== translate.nodeQueue[e].list[s] || (translate.nodeQueue[e].list[s] = new Array);
for (var o = 0; o < r[s].length; o++)
if (void 0 !== r[s][o] && void 0 !== r[s][o].text) {
var u = r[s][o].text
, i = r[s][o].beforeText
, g = r[s][o].afterText
, d = translate.util.hash(u);
if (null != translate.nodeQueue[e].list[s][d] && void 0 !== translate.nodeQueue[e].list[s][d] || (translate.nodeQueue[e].list[s][d] = new Array,
translate.nodeQueue[e].list[s][d].nodes = new Array,
translate.nodeQueue[e].list[s][d].original = u,
translate.nodeQueue[e].list[s][d].translateText = translate.nomenclature.dispose(u),
translate.nodeQueue[e].list[s][d].beforeText = i,
translate.nodeQueue[e].list[s][d].afterText = g),
void 0 !== t.isSameNode)
for (var c = 0; c < translate.nodeQueue[e].list[s][d].nodes.length; c++)
t.isSameNode(translate.nodeQueue[e].list[s][d].nodes[c].node);
var h = translate.nodeQueue[e].list[s][d].nodes.length;
translate.nodeQueue[e].list[s][d].nodes[h] = new Array,
translate.nodeQueue[e].list[s][d].nodes[h].node = t,
translate.nodeQueue[e].list[s][d].nodes[h].attribute = n
}
}
}
},
language: {
local: "",
setLocal: function(e) {
translate.setUseVersion2(),
translate.language.local = e
},
getLocal: function() {
return (null == translate.language.local || translate.language.local.length < 1) && translate.language.autoRecognitionLocalLanguage(),
translate.language.local
},
autoRecognitionLocalLanguage: function() {
if (!(null != translate.language.local && translate.language.local.length > 2)) {
var e = document.body.outerText;
if (null == e || void 0 === e || e.length < 1)
translate.language.local = "chinese_simplified";
else {
e = e.replace(/\n|\t|\r/g, "");
for (var t = new Array, a = 0; a < e.length; a++) {
var n = e.charAt(a)
, l = translate.language.getCharLanguage(n);
"" == l && (l = "unidentification"),
t.push(l)
}
var r = translate.util.arrayFindMaxNumber(t)
, s = r.indexOf("specialCharacter");
s > -1 && r.splice(s, 1),
r.length > 0 ? translate.language.local = r[0] : translate.language.local = "chinese_simplified"
}
}
},
get: function(e) {
for (var t = new Array, a = new Array, n = [], l = [], r = 0; r < e.length; r++) {
var s = e.charAt(r)
, o = translate.language.getCharLanguage(s);
"" == o && (o = "unidentification");
var u = translate.language.analyse(o, a, n, l, s);
a = u.langStrs,
void 0 !== n.language && (l.language = n.language,
l.charstr = n.charstr,
l.storage_language = n.storage_language),
n.language = u.storage_language,
n.charstr = s,
n.storage_language = u.storage_language,
t.push(o)
}
return void 0 !== a.unidentification && delete a.unidentification,
void 0 !== a.specialCharacter && delete a.specialCharacter,
void 0 !== a.number && delete a.number,
a
},
getCharLanguage: function(e) {
return null == e || void 0 === e ? "" : this.english(e) ? "english" : this.specialCharacter(e) ? "specialCharacter" : this.number(e) ? "number" : this.chinese_simplified(e) ? "chinese_simplified" : this.japanese(e) ? "japanese" : this.korean(e) ? "korean" : (console.log("not find is language , char : " + e + ", unicode: " + e.charCodeAt(0).toString(16)),
"")
},
analyse: function(e, t, a, n, l) {
void 0 === t[e] && (t[e] = new Array);
var r = 0;
void 0 === a.storage_language || (translate.language.connector(l) && (e = a.storage_language),
r = a.storage_language == e ? t[e].length - 1 : t[e].length),
void 0 === t[e][r] && (t[e][r] = new Array,
t[e][r].beforeText = "",
t[e][r].afterText = "",
t[e][r].text = ""),
t[e][r].text = t[e][r].text + l,
0 == translate.language.wordBlankConnector(translate.language.getLocal()) && translate.language.wordBlankConnector(translate.to) && null != a.storage_language && void 0 !== a.storage_language && a.storage_language.length > 0 && "specialCharacter" != a.storage_language && (0 == translate.language.wordBlankConnector(a.storage_language) && translate.language.wordBlankConnector(e) ? t[a.storage_language][t[a.storage_language].length - 1].afterText = " " : "english" == a.storage_language && "english" != e && (t[e][r].beforeText = " "));
var s = new Array;
return s.langStrs = t,
s.storage_language = e,
s
},
connector: function(e) {
return !!/.*[\u0020\u00A0\u202F\u205F\u3000]+.*$/.test(e) || (!!/.*[\u0030-\u0039]+.*$/.test(e) || (!!/.*[\u0021\u0022\u0023\u0024\u0025\u0026\u0027\u002C\u002D\u002E\u003A\u003B\u003F\u0040]+.*$/.test(e) || !!/.*[\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(e)))
},
wordBlankConnector: function(e) {
if (null == e || void 0 === e)
return !0;
switch (e.trim().toLowerCase()) {
case "chinese_simplified":
case "chinese_traditional":
case "korean":
case "japanese":
return !1
}
return !0
},
chinese_simplified: function(e) {
return !!/.*[\u4e00-\u9fa5]+.*$/.test(e)
},
english: function(e) {
return !!/.*[\u0041-\u005a]+.*$/.test(e) || !!/.*[\u0061-\u007a]+.*$/.test(e)
},
japanese: function(e) {
return !!/.*[\u0800-\u4e00]+.*$/.test(e)
},
korean: function(e) {
return !!/.*[\uAC00-\uD7AF]+.*$/.test(e)
},
number: function(e) {
return !!/.*[\u0030-\u0039]+.*$/.test(e)
},
specialCharacter: function(e) {
return !!/.*[\u2460-\u24E9]+.*$/.test(e) || (!!/.*[\u2500-\u25FF]+.*$/.test(e) || (!!/.*[\u3200-\u33FF]+.*$/.test(e) || (!!/.*[\uFF00-\uFF5E]+.*$/.test(e) || (!!/.*[\u2000-\u22FF]+.*$/.test(e) || (!!/.*[\u3001-\u3036]+.*$/.test(e) || (!!/.*[\u0020-\u002F]+.*$/.test(e) || (!!/.*[\u003A-\u007E]+.*$/.test(e) || (!!/.*[\u0009\u000a\u0020\u00A0\u1680\u180E\u202F\u205F\u3000\uFEFF]+.*$/.test(e) || (!!/.*[\u2000-\u200B]+.*$/.test(e) || (!!/.*[\u00A1-\u0105]+.*$/.test(e) || !!/.*[\u2C60-\u2C77]+.*$/.test(e)))))))))))
}
},
executeByLocalLanguage: function() {
translate.request.post(translate.request.api.host + translate.request.api.ip + "?v=" + translate.version, {}, function(e) {
0 == e.result ? (console.log("==== ERROR 获取当前用户所在区域异常 ===="),
console.log(e.info),
console.log("==== ERROR END ====")) : (translate.setUseVersion2(),
translate.storage.set("to", e.language),
translate.to = e.language,
translate.selectLanguageTag,
translate.execute())
})
},
util: {
uuid: function() {
var e = (new Date).getTime();
return window.performance && "function" == typeof window.performance.now && (e += performance.now()),
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx".replace(/[xy]/g, function(t) {
var a = (e + 16 * Math.random()) % 16 | 0;
return e = Math.floor(e / 16),
("x" == t ? a : 3 & a | 8).toString(16)
})
},
findTag: function(e) {
return /<[^>]+>/g.test(e)
},
arrayFindMaxNumber: function(e) {
for (var t = {}, a = [], n = 0, l = 0, r = e.length; l < r; l++)
t[e[l]] ? t[e[l]]++ : t[e[l]] = 1,
t[e[l]] > n && (n = t[e[l]]);
for (var s in t)
t[s] === n && a.push(s);
return a
},
hash: function(e) {
if (null == e || void 0 === e)
return e;
var t, a = 0;
if (0 === e.length)
return a;
for (t = 0; t < e.length; t++)
a = (a << 5) - a + e.charCodeAt(t),
a |= 0;
return a + ""
},
charReplace: function(e) {
return null == e ? "" : e = (e = e.trim()).replace(/\t|\n|\v|\r|\f/g, "")
},
regExp: {
pattern: function(e) {
return e = (e = e.replace(/\"/g, '\\"')).replace(/\?/g, "\\?")
},
resultText: function(e) {
return e
}
}
},
request: {
api: {
host: "https://api.translate.zvo.cn/",
language: "language.json",
translate: "translate.json",
ip: "ip.json"
},
post: function(e, t, a) {
this.send(e, t, a, "post", !0, {
"content-type": "application/x-www-form-urlencoded"
}, null)
},
send: function(e, t, a, n, l, r, s) {
var o = "";
if (null != t)
for (var u in t)
o.length > 0 && (o += "&"),
o = o + u + "=" + t[u];
var i = null;
try {
i = new XMLHttpRequest
} catch (e) {
i = new ActiveXObject("Microsoft.XMLHTTP")
}
if (i.open(n, e, l),
null != r)
for (var u in r)
i.setRequestHeader(u, r[u]);
i.send(o),
i.onreadystatechange = function() {
if (4 == i.readyState)
if (200 == i.status) {
var e = null;
try {
e = JSON.parse(i.responseText)
} catch (e) {
console.log(e)
}
a(null == e ? i.responseText : e)
} else
null != s && s(i)
}
}
},
storage: {
set: function(e, t) {
localStorage.setItem(e, t)
},
get: function(e) {
return localStorage.getItem(e)
}
}
};
console.log("Two lines of js html automatic translation, page without change, no language configuration file, no API Key, SEO friendly! Open warehouse : https://github.com/xnx3/translate");
try {
translate.init()
} catch (e) {
console.log(e)
}
window.translate = translate;
function loadJsCode(code){
var script = document.createElement('script');
script.type = 'text/javascript';
//for Chrome Firefox Opera Safari
script.appendChild(document.createTextNode(code));
//for IE
//script.text = code;
document.body.appendChild(script);
}