閱讀217 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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
文章轉自莊周夢蝶  ,原文發布時間2007-09-04

最後更新:2017-05-18 10:32:46

  上一篇:go  PIPE2——Petri網編輯工具
  下一篇:go  《Maven官方指南》指南第三方部署到遠程倉庫