// ==UserScript== // @name GitHub Internationalization // @name:zh GitHub汉化插件 // @name:zh-CN GitHub汉化插件 // @namespace https://github.com/k1995/github-i18n-plugin/ // @version 0.1 // @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=828943 // @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(); })();