雖然高考英語考了135分,大學英語四級也過了,可到如今,寫了兩年代碼,常常在寫一個變量的時候,想半天也想不出來對應的英文單詞是什麼,總不能很可 (sha) 愛(bi) 的去用拼音吧,最後仍是隻能去求助有道了。雖說打開有道網頁,而後輸入詞語翻譯不算太麻煩,擔保每次都這樣,總以爲不夠方便,也不夠逼格。html
先來看看我如今用的工具好了,首先安裝command-translator:前端
cnpm i -g command-translator
java
而後打開一個命令行直接翻譯:node
tl 翻譯
# 輸出以下
translate
interpret
translator
interpreter
複製代碼
夠簡單了吧,下面來看看怎麼實現的。jquery
在寫這個工具以前,我也用過一些插件,若是你用Alfred, 那麼你應該已經用過一些翻譯插件了。後來我以爲它顏值沒有自帶的spotlight高,因此就卸載了,而後裝了個flashlight, 然而那裏面的插件太少了,有一個有道翻譯插件,然而只能英文翻譯成中文,要它何用?最後打算本身寫一個,可折騰了兩天後,發現flashlight有問題,彷佛是識別不了輸入的中文,大概有道那個插件也是遇到這個問題,纔沒有作中文翻譯英文吧。後來想着如今咱們通常用vscode比較多,寫個vscode插件也不錯吧。然而vscode插件的命令中好像是帶不了參數,若是用一個命令來啓動插件,而後再輸入要翻譯的詞語,最後再顯示翻譯結果,那仍是太難用了。最後想着就寫個命令行裏面的翻譯工具吧,對於前端程序員而言,node確定是裝了的,就用node來寫。git
其實有了思路後,就很簡單了。首先是要拿到翻譯的結果。直接調用接口的不少,有道官方也有,不過都須要去申請一個key,我的比較反感,就簡單點,直接爬網頁,分析dom。整個程序用了兩個第三方模塊:cheerio處理dom,相似jquery的語法;commander用來簡化命令行交互,TJ大神的大做。程序員
首先爬取頁面,解析結果,這裏爬的是金山詞霸的頁面,以前寫論文時感受對於一些專業詞彙,金山翻譯的更準確。幾行代碼就能搞定,這裏直接上代碼好了:github
const http = require('http')
const cheerio = require('cheerio')
const baseUrl = "http://www.iciba.com/"
function spider(word){
return new Promise((resolve,reject)=>{
http.get(encodeURI(baseUrl+word),res=>{
let html=''
res.on('data',data=>html+=data)
res.on('end',()=>resolve(html))
})
})
}
function parse(html){
const ch = cheerio.load(html)
const res = []
ch(".js-base-info .in-base .base-list p span").each((i,el)=>{
res.push(ch(el).text().replace(new RegExp(';'),''))
})
return res
}
module.exports = function(word){
return new Promise((resolve,reject)=>{
spider(word).then(html=> resolve(parse(html)))
})
}
複製代碼
而後我麼調用導出的方法,傳參爲須要翻譯的詞語,中文英文均可以,最後返回的就是一個數組,爲翻譯結果。shell
最後要解決的是命令行直接輸入tl <word>
直接翻譯,這部分代碼寫在一個js文件中,我把它叫作bin.js, 而後在package,json配置一個key爲"tl"的bin,指向bin,js便可。bin,js就是獲取tl後面的參數,而後調用上面導出的那個方法來翻譯,最後把結果打印出來便可,代碼:npm
#!/usr/bin/env node
const program = require('commander')
const translate = require('./translator')
program.version(require('./package.json').version)
.action((arg,cmd)=>{
translate(arg).then((res=[])=>{
res.forEach(r=>console.log(r)
})
})
.parse(process.argv)
複製代碼
OK了,之後翻譯只需快捷鍵打開終端,輸入tl <word>
就能夠了。
什麼?你不用node,你是寫java的?都什麼年代了,還不學我,來搞一波前端,當年我但是寫過C艹,後來C艹艹,再後來Android、Java,而後轉前端的。開玩笑啦,看完這篇文章,隨便你用什麼語言都能很快寫一個這樣的詞典出來。
之後若是再看到你身邊的朋友還在打開網頁來翻譯,或者用拼音的,直接把這篇文章丟給他把,
npm i -g command-translator