ruby TK版本的google翻譯機
過去寫的那個調用google翻譯的翻譯腳本,一直在用。那個版本隻能處理單個單詞,如果要翻譯一行或者一段語句,盡管稍微修改下就可以,但失去了我想要的便利性。今天看了看TK,順手寫了個GUI版本的,采用一次請求一個線程,倒是便捷不少。在windows上,你需要到這裏下載安裝ActiveTcl才可以運行。代碼如下:
require 'net/http'
require 'tk'
require 'logger'
#設置代理
$proxy_addr='x.x.x.x'
$proxy_port='80'
class GoogleTranslate
def initialize(url)
@log = Logger.new("translate.log")
@log.level = Logger::WARN
@url=url
ph={'padx'=>50,'pady'=>10}
root=TkRoot.new{ title 'google 翻譯程序'}
top=TkFrame.new(root) {background "white"}
#checkbutton,用於選擇翻譯類別
checked=TkVariable.new
TkCheckButton.new(top) do
text 'cn-en'
variable checked
pack({'padx'=>8,'pady'=>10})
end
TkLabel.new(top){ text 'Enter text:';pack(ph)}
@text=TkVariable.new
@result=TkVariable.new
TkEntry.new(top,'textvariable'=>@text,'width'=>40).pack(ph)
pig_b=TkButton.new(top){text '翻譯';pack ph}
#翻譯按鈕事件
pig_b.command{ translate(checked.value) }
TkLabel.new(top){ text 'Translate Result:';pack(ph)}
TkEntry.new(top,'textvariable'=>@result,'width'=>40).pack(ph)
pig_a=TkButton.new(top) do
text 'Exit'
pack ph
command {exit}
end
top.pack('fill'=>'both','side'=>'top')
end
def translate(checked)
langpair='en|zh-CN'
langpair='zh-CN|en' if checked=='1'
#開一個新線程處理
Thread.new do
begin
response=Net::HTTP.Proxy($proxy_addr,$proxy_port).post_form(URI.parse(@url),
{'text'=>@text.value,'langpair'=>langpair})
response.body =~ /<div id=result_box dir=ltr>(.*?)<\/div>/
@result.value=$1
rescue Exception=>e
@log.error(e)
end
end
end
end
GoogleTranslate.new("https://translate.google.com/translate_t")
Tk.mainloop
require 'tk'
require 'logger'
#設置代理
$proxy_addr='x.x.x.x'
$proxy_port='80'
class GoogleTranslate
def initialize(url)
@log = Logger.new("translate.log")
@log.level = Logger::WARN
@url=url
ph={'padx'=>50,'pady'=>10}
root=TkRoot.new{ title 'google 翻譯程序'}
top=TkFrame.new(root) {background "white"}
#checkbutton,用於選擇翻譯類別
checked=TkVariable.new
TkCheckButton.new(top) do
text 'cn-en'
variable checked
pack({'padx'=>8,'pady'=>10})
end
TkLabel.new(top){ text 'Enter text:';pack(ph)}
@text=TkVariable.new
@result=TkVariable.new
TkEntry.new(top,'textvariable'=>@text,'width'=>40).pack(ph)
pig_b=TkButton.new(top){text '翻譯';pack ph}
#翻譯按鈕事件
pig_b.command{ translate(checked.value) }
TkLabel.new(top){ text 'Translate Result:';pack(ph)}
TkEntry.new(top,'textvariable'=>@result,'width'=>40).pack(ph)
pig_a=TkButton.new(top) do
text 'Exit'
pack ph
command {exit}
end
top.pack('fill'=>'both','side'=>'top')
end
def translate(checked)
langpair='en|zh-CN'
langpair='zh-CN|en' if checked=='1'
#開一個新線程處理
Thread.new do
begin
response=Net::HTTP.Proxy($proxy_addr,$proxy_port).post_form(URI.parse(@url),
{'text'=>@text.value,'langpair'=>langpair})
response.body =~ /<div id=result_box dir=ltr>(.*?)<\/div>/
@result.value=$1
rescue Exception=>e
@log.error(e)
end
end
end
end
GoogleTranslate.new("https://translate.google.com/translate_t")
Tk.mainloop
文章轉自莊周夢蝶 ,原文發布時間2007-09-04
最後更新:2017-05-18 10:32:46