1. 程式人生 > >瀏覽器外掛-離線英漢詞典 2018-10-12

瀏覽器外掛-離線英漢詞典 2018-10-12

如前文在瀏覽器外掛中讀取JSON資原始檔末所述, 用瀏覽器外掛實現了不依賴任何線上翻譯服務的英漢詞典. 由於詞典包含77萬個詞條, 外掛大小也達到了13+MB.
2018-10-11-dictionary瀏覽器_詞
詞典資料也包含很多常見短語:
2018-10-11-dictionary瀏覽器_片語
原始碼庫: program-in-chinese/webextension_english_chinese_dictionary

在火狐外掛網站提交稽核時, 發現原始檔大小有限制, 超過4MB就不能被稽核服務自動分析. 於是按每個詞典檔案五萬詞條進行分隔(詳見轉換到JSON; 按五萬行分隔json · program-in-chinese/[email protected])

外掛原始碼主要是匯入詞典資料和查詢/顯示兩部分:

載入詞典.js

const 詞典路徑 = '詞典資料/詞典'
const 檔案擴充套件 = '.json'
var 詞典檔案 = {};
for (var 檔案序號 = 0; 檔案序號 < 16; 檔案序號++) {
  詞典檔案[檔案序號] = false;
}
var 詞典資料 = {};

function 載入部分詞典(檔案) {
  return function () {
    var 檔案路徑 = 詞典路徑 + 檔案 + 檔案擴充套件;
    fetch(chrome.runtime.getURL(檔案路徑))
      .then((響應) => 響應.
json()) .then((資料) => { for (var 英文 in 資料) { 詞典資料[英文] = 資料[英文]; } 詞典檔案[檔案] = true; }); } } for (var 檔案 in 詞典檔案) { 載入部分詞典(檔案)(); } function 已載入詞典() { for (var 檔案 in 詞典檔案) { if (!詞典檔案[檔案]) { return false; } } return true; } function
取釋義(選中文字) { var 釋義 = 詞典資料[選中文字]; if (!釋義) { 選中文字 = 選中文字.toLowerCase(); 釋義 = 詞典資料[選中文字]; } return 釋義; }

主介面.js

function 翻譯選中文字() {
  chrome.tabs.executeScript({
    code: "window.getSelection().toString();"
  }, function (選中內容) {
    // TODO: 如果沒有toString, 報錯: -,.toLowerCase is not function
    var 選中文字 = 選中內容.toString();
    if (!選中文字) {
      置彈窗內容("無選中文字");
      return;
    }
    var 詞典介面 = chrome.extension.getBackgroundPage();
    if (!詞典介面.已載入詞典()) {
      置彈窗內容("載入詞典資料中...");
      return;
    }
    var 釋義 = 詞典介面.取釋義(選中文字);
    置彈窗內容(選中文字, 釋義);
  });
}

function 置彈窗內容(英文, 釋義) {
  var 窗體 = document.body;
  var 英文部分 = document.getElementById("英文");
  var 釋義部分 = document.getElementById("釋義");
  英文部分.appendChild(document.createTextNode(英文));
  var 多行 = 釋義.split('\\n');
  for (var 行數 in 多行) {
    釋義部分.appendChild(document.createTextNode(多行[行數]));
    釋義部分.appendChild(document.createElement("br"));
  }
}

翻譯選中文字();

另, 已在Chrome外掛商店釋出. 連結如下: