找遍了Chrome 網上應用店,也沒有找到我想要的翻譯擴展程序(程序翻譯結果不滿意),於是打算自己寫一個,感覺還可以~
擴展程序效果圖:

整個擴展程序只有5個文件

icon.png是擴展程序的圖標, 就是擴展程序效果圖右上角的那個小圖標。
index.html是擴展程序的主頁面, 也可以直接打開在瀏覽器上運行的,不過會獨占一個標簽頁,弄成瀏覽器擴展程序后就可以在任何標簽頁上運行,方便多了!
index.js是index.html需要引入的JavaScript文件。
jquery.js就是jQuery的源碼, 主要用來發送ajax請求, 懶得用自己封裝的了。
manifest.json就是實現把頁面變成擴展程序的關鍵文件, 這是一個Chrome插件必不可少的文件,用來配置所有和插件相關的配置,必須放在根目錄。
翻譯功能用的是網易有道詞典的接口, 網易有道詞典的翻譯結果還是很滿意的。

HTML和JS文件內容比較簡單, 我就直接貼代碼了。
index.html文件內容:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>在線翻譯</title> <script src="./jquery.js"></script> <style> #all{ text-align: center; } .button-box{ width: 250px; margin: 50px auto; } .button-box button{ width: 200px; height: 40px; font-size: 18px; } #auto-pronunciation{ margin-top: 5px; background-color: rgb(50, 226, 203); } #translate{ background-color: #03A9F4; } #input, #output{ width: 90%; font-size: 18px; margin-top: 10px; } @media screen and (max-width: 500px){ #input, #output{ padding: 10px; font-size: 16px; } #translate{ left: calc(50% - 100px); } } </style> </head> <body> <div id="all"> <textarea id="input" autofocus cols="30" rows="6" placeholder="請輸入你要翻譯的內容:" ></textarea> <textarea id="output" cols="30" rows="6"></textarea> <div class="button-box"> <button id="translate">翻譯</button> <button id="auto-pronunciation" >自動發音: 開</button> </div> </div> <script src="./index.js"></script> </body> </html>
index.js的文件內容:
const translate = document.getElementById('translate');
const auto_pronunciation = document.getElementById('auto-pronunciation');
const input = document.getElementById('input');
const output = document.getElementById('output');
let timer;
// 初始化自動發音的狀態並儲存到localStorage
let is_auto_pronunciation = localStorage.getItem('is_auto_pronunciation');
if (!is_auto_pronunciation) {
is_auto_pronunciation = "true" //默認自動發音
localStorage.setItem('is_auto_pronunciation', is_auto_pronunciation)
}
input.oninput = function(ev) {
// 減少不必要的請求
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(() => {
translateFun(); // 正在輸入時的翻譯不需要發音
}, 1500);
};
translate.onclick = function () {
translateFun().then(result => {
pronunciation(result.speakUrl); // 需要發音
});
};
function changePronunciationBtnText(){
if (is_auto_pronunciation === 'true') {
auto_pronunciation.textContent = '自動發音: 開';
auto_pronunciation.style.backgroundColor = 'rgb(50, 226, 203)';
} else {
auto_pronunciation.textContent = '自動發音: 關';
auto_pronunciation.style.backgroundColor = 'rgb(169, 169, 169)';
}
}
changePronunciationBtnText();
// 自動翻譯的開關
auto_pronunciation.onclick = function () {
if (is_auto_pronunciation === 'true') {
is_auto_pronunciation = 'false'
} else {
is_auto_pronunciation = 'true'
}
localStorage.setItem('is_auto_pronunciation', is_auto_pronunciation)
changePronunciationBtnText()
};
async function translateFun() {
let result = await send(input.value);
if (!result) return {};
// console.log(result);
// console.log(result.speakUrl); // 翻譯前的語音
// console.log(result.tSpeakUrl); // 翻譯后的語音
if (result.basic && result.basic.explains) {
let value = "";
result.basic.explains.forEach(element => {
value += element + '\n'; //讓其換行
});
output.value = value;
} else if (result.translation) {
output.value = result.translation;
} else {
output.value = "錯誤: 沒有返回翻譯結果!";
}
return result;
};
function pronunciation(speakUrl) {
if (is_auto_pronunciation === 'true' && speakUrl) {
let audio = document.createElement('audio');
audio.src = speakUrl;
audio.hidden = true;
audio.play();
audio = null;
}
}
// from和to可以指定翻譯語言,設置Auto為自動檢測
async function send(q, from = 'Auto', to = 'Auto') {
if (!q) return;
let result = null;
await $.ajax({
url: 'https://aidemo.youdao.com/trans',
type: 'post',
dataType: 'json',
data: {
q,
from,
to,
},
success(data) {
result = data;
},
error() {alert('翻譯出錯了');}
});
return result;
}
jquery.js就直接下載jQuery的源碼, 然后重命名為jquery.js就可以了
manifest.json文件內容:
{ //插件名 "name": "zp translate", //版本號 "version": "1.0", //mainfest版本 "manifest_version": 2, //描述 "description": "翻譯工具", //插件圖標,128代表分辨率128*128,填最高的就行了,因為瀏覽器會自動調整的 "icons": { "128": "icon.png" }, //背景html,就是點擊插件圖標后出現的框框 "background": { "page": "index.html" }, //要加載的資源,如果html里需要引入js的話,請務必寫上,我這里寫的是相對路徑 "browser_action": { "default_title": "", "default_icon": "icon.png", "default_popup": "index.html" }, "web_accessible_resources": [ "index.js", "jquery.js" ], //這是權限,意思就是你在哪個網頁下可以訪問的這個插件 "permissions": [ "http://*/*", "https://*/*" ] }
接着把這5個文件放在一個文件夾下, 然后在Chrome里找到擴展程序:

在擴展程序里的右上角打開"開發者模式", 然后在左上角點擊"加載已解壓的擴展程序"

然后選擇含有那5個文件的文件夾, 最后點擊"選擇文件夾"就OK了:


頁面的右上角也多了個小圖標

點擊小圖標就可以看到擴展程序的界面了~

查看英文文檔時也可以立即在當前頁面翻譯單詞和句子, 很方便:

還可以給擴展程序設置快捷鍵, 步驟如下:
1.進入擴展程序, 點擊左上角的小圖標

2.點擊"鍵盤快捷鍵"

3.在輸入框按快捷鍵就可以了


接着就可以在任何頁面按快捷鍵打開翻譯工具
最好還是要把英語學好~
