瀏覽器外掛-離線英漢詞典 2018-10-12
阿新 • • 發佈:2019-01-13
如前文在瀏覽器外掛中讀取JSON資原始檔末所述, 用瀏覽器外掛實現了不依賴任何線上翻譯服務的英漢詞典. 由於詞典包含77萬個詞條, 外掛大小也達到了13+MB.
詞典資料也包含很多常見短語:
原始碼庫: 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外掛商店釋出. 連結如下: