过去写的那个调用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( " http://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( " http://translate.google.com/translate_t " )
Tk.mainloop
文章转自庄周梦蝶 ,原文发布时间 2007-09-04