天天看点

ruby TK版本的google翻译机

代码如下:

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

googletranslate.new("http://translate.google.com/translate_t")

tk.mainloop

文章转自庄周梦蝶  ,原文发布时间2007-09-04