// ==UserScript==
// @name GitHub Internationalization
// @name:zh GitHub汉化插件
// @name:zh-CN GitHub汉化插件
// @namespace https://github.com/k1995/github-i18n-plugin/
// @version 0.2
// @description Translate GitHub.com
// @description:zh GitHub汉化插件,包含人机翻译
// @description:zh-CN GitHub汉化插件,包含人机翻译
// @author k1995
// @match https://github.com/*
// @grant GM_xmlhttpRequest
// @require https://greasyfork.org/scripts/407481-github-i18n-plugin-locales-zh-cn/code/github-i18n-plugin-locales-zh-CN.js?version=829189
// @require http://code.jquery.com/jquery-2.1.1.min.js
// @downloadURL none
// ==/UserScript==
(function() {
'use strict';
function translateElement(el) {
// Get the text field name
let k;
if(el.tagName === "INPUT") {
if (el.type === 'button' || el.type === 'submit') {
k = 'value';
} else {
k = 'placeholder';
}
} else {
k = 'data';
}
const txtSrc = el[k].trim();
const key = txtSrc.toLowerCase()
.replace(/\xa0/g, ' ') // replace ' '
.replace(/\s{2,}/g, ' ');
if(txtSrc.startsWith("Sign")) {
console.log(key);
console.log(locales[key]);
}
if(locales[key]) {
el[k] = el[k].replace(txtSrc, locales[key])
}
}
function shoudTranslateEl(el) {
const blockIds = ["readme"];
const blockTags = ["CODE", "SCRIPT", "LINK", "IMG", "svg"];
return !(el.id && blockIds.includes(el.id))
&& !(blockTags.includes(el.tagName));
}
function traverseElement(el) {
if(!shoudTranslateEl(el)) {
return
}
for(const child of el.childNodes) {
if(child.nodeType === Node.TEXT_NODE) {
translateElement(child);
}
else if(child.nodeType === Node.ELEMENT_NODE) {
if(child.tagName === "INPUT") {
translateElement(child);
} else {
traverseElement(child);
}
} else {
// pass
}
}
}
function watchUpdate() {
const m = window.MutationObserver || window.WebKitMutationObserver;
const observer = new m(function (mutations, observer) {
for(let mutationRecord of mutations) {
for(let node of mutationRecord.addedNodes) {
traverseElement(node);
}
}
});
observer.observe(document.body, {
subtree: true,
characterData: true,
childList: true,
});
}
// translate "about"
function translateDesc() {
$(".repository-content .f4").append("
");
$(".repository-content .f4").append("翻译");
$("#translate-me").click(function() {
// get description text
const desc = $(".repository-content .f4")
.clone()
.children()
.remove()
.end()
.text()
.trim();
if(!desc) {
return;
}
GM_xmlhttpRequest({
method: "GET",
url: `https://www.githubs.cn/translate?q=`+ encodeURIComponent(desc),
onload: function(res) {
if (res.status === 200) {
$("#translate-me").hide();
// render result
const text = res.responseText;
$(".repository-content .f4").append("由 GitHub中文社区 翻译👇");
$(".repository-content .f4").append("
");
$(".repository-content .f4").append(text);
} else {
alert("翻译失败");
}
}
});
});
}
traverseElement(document.body);
translateDesc();
watchUpdate();
})();