天天看點

Chrome插件實作GitHub代碼翻譯v0.0.3

Chrome插件實作GitHub代碼翻譯v0.0.3

續前文

浏覽器插件實作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("程式設計語言: " + 程式設計語言), 原代碼拷貝);
    }
  );
}