1. 程式人生 > >線上程式碼離線翻譯Chrome外掛"一馬"v0.0.8 2018-10-31

線上程式碼離線翻譯Chrome外掛"一馬"v0.0.8 2018-10-31

續前文: Chrome外掛實現GitHub程式碼離線翻譯v0.0.4

添加了對"碼雲"線上程式碼的翻譯支援, 因此改名暫為"一馬". 在此貼中調研了常用的線上程式碼網站: 各位都在什麼原始碼站上線上看程式碼? - V2EX, 暫未發現其他.

注: 此外掛呼叫瀏覽器外掛-離線英漢詞典 0.0.7進行查詞, 因此也不依賴任何線上翻譯服務, 不存在API呼叫限制.

改進功能:

  • 支援"碼雲"程式碼翻譯
  • 新增 C/PHP 關鍵詞的翻譯
  • 刪除釋義中的括號內內容
    2018-10-30-gitee演示
    "碼雲"的程式碼段與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"
  }
}

Chrome外掛商店

下個版本打算改進的(11/02/2018: 在0.0.11版中已基本完成):