續前文
浏覽器插件實作GitHub代碼翻譯原型示範, 通過調用
浏覽器插件-離線英漢詞典的批量查詞接口, 實作了源碼的初步命名直譯.
源碼庫仍在:
program-in-chinese/webextension_github_code_translator還缺失的功能:
駝峰命名法拆分. 比如圖中所示, BasicCalculator未翻譯.
語言關鍵詞詞典.js. 內建詞典包括常用關鍵詞, 以及Java和Python的專用關鍵詞:
var 通用關鍵詞 = {
'assert': "斷言",
'import': "導入",
"if": "如果",
"else": "否則",
"while": "每當",
"for": "對于",
"in": "在",
"switch": "岔",
"case": "分支",
"break": "跳出",
"continue": "繼續",
"return": "傳回",
"throw": "抛出",
"finally": "善後",
'class': "類别",
'is': "為"
}
var 專用關鍵詞 = {
/*
參考 http://zetcode.com/lang/python/keywords/
import keyword
print("Python keywords: ", keyword.kwlist)
*/
"python": {
'False': "假",
'None': "空",
'True': "真",
'and': "且",
'as': "as",
'def': "定義",
"del": "删除",
'elif': "否則如果",
'except': "except",
'from': "從",
'global': "全局",
'lambda': "lambda",
'nonlocal': "nonlocal",
'not': "不",
'or': "或",
'pass': "輪空",
'raise': "抛出",
'with': "with",
'yield': "産出"
},
// 參考 https://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html
"java": {
...
}
}
釋義處理.js. 查詞後, 選取一個"合适"的詞義, 這裡還很粗糙:
function 首選(中文釋義, 所有詞性) {
if (!中文釋義) {
return;
}
var 首選詞義 = "";
var 詞性到釋義 = 分詞性(中文釋義, 所有詞性);
//console.log(詞性到釋義);
if (詞性到釋義[詞性_計算機]) {
首選詞義 = 詞性到釋義[詞性_計算機][0];
} else {
// 取第一個詞性的第一釋義
for (var 詞性 in 詞性到釋義) {
首選詞義 = 詞性到釋義[詞性][0];
break;
}
}
return 首選詞義;
}
主界面.js中進行翻譯的主體部分:
function 翻譯() {
var 原代碼拷貝 = document.getElementsByTagName('table')[0];
var 頂節點 = 原代碼拷貝.parentElement;
var 程式設計語言 = 取程式設計語言(頂節點);
var span字段清單 = 原代碼拷貝.getElementsByTagName('span');
var 文本字段清單 = 取子文本節點(document);
關鍵詞詞典 = 取所有關鍵詞(程式設計語言);
// 合并兩個部分
添加所有待查詞(span字段清單);
添加所有待查詞(文本字段清單);
chrome.runtime.sendMessage(
"ndifefelacmidghjaehmhicbchbidhpe",
命名詞典,
function(傳回值) {
命名詞典 = 傳回值.所有釋義;
for (var 詞 in 命名詞典) {
命名詞典[詞] = 常用命名[詞] ? 常用命名[詞] : 首選(命名詞典[詞], 詞性);
}
翻譯字段清單(span字段清單);
翻譯字段清單(文本字段清單);
頂節點.insertBefore(document.createTextNode("程式設計語言: " + 程式設計語言), 原代碼拷貝);
}
);
}