过去写的那个调用google翻译的翻译脚本,一直在用。那个版本只能处理单个单词,如果要翻译一行或者一段语句,尽管稍微修改下就可以,但失去了我想要 的便利性。今天看了看TK,顺手写了个GUI版本的,采用一次请求一个线程,倒是便捷不少。在windows上,你需要到
这里下载安装ActiveTcl才可以运行。
代码如下:
代码如下:
ruby 代码
- require 'net/http'
- require 'tk'
- require 'logger'
- #设置代理
- $proxy_addr='x.xx.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
- #使用了代理,如果没有,将Proxy方法去掉 response=Net::HTTP.Proxy($proxy_addr,$proxy_port).post_form(URI.parse(@url),
- {'text'=>@text.value,'langpair'=>langpair})
- response.body =~ /
- @result.value=$1
- rescue Exception=>e
- @log.error(e)
- end
- end
- end
- end
- GoogleTranslate.new("http://translate.google.com/translate_t")
- Tk.mainloop