線上程式碼離線翻譯Chrome外掛"一馬"v0.0.8 2018-10-31
阿新 • • 發佈:2019-01-14
續前文: Chrome外掛實現GitHub程式碼離線翻譯v0.0.4
添加了對"碼雲"線上程式碼的翻譯支援, 因此改名暫為"一馬". 在此貼中調研了常用的線上程式碼網站: 各位都在什麼原始碼站上線上看程式碼? - V2EX, 暫未發現其他.
注: 此外掛呼叫瀏覽器外掛-離線英漢詞典 0.0.7進行查詞, 因此也不依賴任何線上翻譯服務, 不存在API呼叫限制.
改進功能:
- 支援"碼雲"程式碼翻譯
- 新增 C/PHP 關鍵詞的翻譯
- 刪除釋義中的括號內內容
"碼雲"的程式碼段與GitHub的HTML結構略有不同, 暫時分別處理如下:
function 獲取程式碼段 () {
var 當前域名 = window.location.host;
// 預設, 適用於GitHub
var 程式碼段節點 = document.body.getElementsByTagName('table')[0];
if (當前域名 == "gitee.com") {
程式碼段節點 = document.body.getElementsByClassName('code')[0]
}
// GitHub: 父節點的class包含程式語言資訊, 如class="blob-wrapper data type-python "
return [程式碼段節點. parentElement.outerHTML];
}
function 翻譯() {
// TODO: 避免與`獲取程式碼段()`重複
var 程式語言 = "";
var 原始碼拷貝 = document.body.getElementsByClassName('code');
var 頂節點 = null;
if (原始碼拷貝.length == 0) {
原始碼拷貝 = document.getElementsByTagName('table')[0];
頂節點 = 原始碼拷貝.parentElement;
程式語言 = 取程式語言(頂節點);
} else {
新增CSS("https://gitee.com/assets/application-e5df8140372297eda15f23497886ffdb.css");
原始碼拷貝 = 原始碼拷貝[0];
}
...
}
大幅增加了通用關鍵詞的手工翻譯, 以覆蓋儘可能多的程式語言:
// TODO: 並非所有程式語言都有. 會影響命名翻譯.
var 通用關鍵詞 = {
"abstract": "抽象",
"and": "且",
"as": "as",
"assert": "斷言",
"break": "跳出",
"boolean": "布林",
"byte": "位元組",
"char": "位元組",
"const": "const",
"case": "分支",
"class": "類別",
"catch": "接住",
"continue": "繼續",
"default": "預設",
"do": "執行",
"double": "雙浮點",
"else": "否則",
"enum": "列舉",
"extends": "擴充套件",
"extern": "外部",
"false": "假",
"final": "最終",
"finally": "善後",
"float": "單浮點",
"for": "對於",
"function": "函式",
"global": "全域性",
"goto": "goto",
"if": "如果",
"implements": "實現",
"import": "匯入",
"in": "在",
"include": "包括",
"instanceof": "為例項",
"int": "整數",
"interface": "介面",
"is": "為",
"long": "長整數",
"native": "native",
"new": "新",
"null": "空",
"or": "或",
"package": "包",
"private": "私有",
"protected": "保護",
"public": "公有",
"return": "返回",
"short": "短整數",
"signed": "有符號",
"sizeof": "大小",
"static": "靜態",
"struct": "結構",
"super": "父類",
"switch": "岔",
"synchronized": "同步",
"this": "本身",
"throw": "丟擲",
"throws": "會丟擲",
"transient": "transient",
"true": "真",
"try": "嘗試",
"typedef": "型別定義",
"union": "聯合",
"unsigned": "無符號",
"void": "無值",
"volatile": "volatile",
"while": "每當",
"with": "with",
"yield": "產出"
}
var 專用關鍵詞 = {
// https://msdn.microsoft.com/en-us/library/befeaky0.aspx
"c": {
"auto": "auto",
"register": "register"
},
// http://php.net/manual/en/reserved.keywords.php
"php": {
// array()
"callable": "可呼叫",
"clone": "克隆",
"const": "const",
"declare": "宣告",
// die()
"echo": "迴響",
"elseif": "否則如果",
// empty()
"enddeclare": "結束宣告",
"endfor": "結束for",
"endforeach": "結束foreach",
"endif": "結束if",
"endswitch": "結束switch",
"endwhile": "結束while",
// eval()
// exit()
"foreach": "對每個",
"implements": "實現",
"include_once": "包括_單次",
"instanceof": "為例項",
"insteadof": "insteadof",
"interface": "介面",
// isset()
// list()
"namespace": "名稱空間",
"print": "列印",
"require": "需要",
"require": "需要_單次",
"trait": "trait",
// unset()
"use": "use",
"var": "var",
"xor": "異或"
},
"javascript": {
"arguments": "引數",
"await": "等待",
"debugger": "偵錯程式",
"delete": "刪除",
"eval": "eval",
"export": "匯出",
"let": "讓",
"typeof": "為型別",
"var": "變數"
},
/*
參考 http://zetcode.com/lang/python/keywords/
import keyword
print("Python keywords: ", keyword.kwlist)
*/
"python": {
"False": "假",
"None": "空",
"True": "真",
"def": "定義",
"del": "刪除",
"elif": "否則如果",
"except": "except",
"from": "從",
"lambda": "lambda",
"nonlocal": "nonlocal",
"not": "不",
"pass": "輪空",
"raise": "丟擲",
},
// 參考 https://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html
"java": {
"strictfp": "strictfp"
}
}
下個版本打算改進的(11/02/2018: 在0.0.11版中已基本完成):