最近在谷歌实行收费,在寻找一个方法,模拟人工调用,自动读取翻译的内容,下面为今天的劳动成果:
#encoding:utf-8
require 'uri'
require 'open-uri'
require 'win32ole'
translateFile='D:\RAWTest\translate\en.xlsx' #change to your file which needs to translate
outPutFile='D:\RAWTest\translate\zh.xlsx' #the output file
$start_line='1' #from line
$end_line='' #end line, if empty, it'll go to the end
class String
def en2zh
flg = 'auto%7czh-CN'
g_tr(self,flg)
end
def zh2en
flg = 'zh-CN%7cen'
g_tr(self,flg)
end
end
#google 全文翻译,参数可以是中文,也可以是英文.
def g_tr(word,flg)
word = URI.escape(word)
url = "http://translate.google.com/translate_a/t?client=firefox-a&text=#{word}&langpair=#{flg}&ie=UTF-8&oe=UTF-8"
uri = URI.parse(url)
uri.open(
'Accept'=>'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*',
'Accept'=>'text/html',
'Referer'=> URI.escape(url)
){ |f|
return f.read.match(/"trans":"(.*?)","/)[1]
}
end
#使用方法:
#puts 'show me the money'.en2zh
#puts '可以整句翻译。'.zh2en
beginTime=Time.now.to_s
begin
excel = WIN32OLE::new('excel.Application')
workbook = excel.Workbooks.Open(translateFile) #需要翻译的文件
worksheet = workbook.Worksheets(1) #定位到第一个sheet
worksheet.Select
#puts worksheet.Range('a1').value+":"+worksheet.Range('a1').value.en2zh
#worksheet.Range('b1').value=worksheet.Range('a1').value.en2zh
if($end_line=='')
n=worksheet.UsedRange.Rows.Count
puts $end_line=n
end
now_line=$start_line.to_i
worksheet.range("a#{$start_line}:a#{$end_line}").each{|cell| #需要翻译的起始行
puts "Now Line #{now_line}: "+worksheet.range("b#{now_line}").value=cell.value.en2zh
now_line+=1}
workbook.SaveAs outPutFile #另存为
workbook.close
rescue #Exception => e
#puts(" error message: #{e.message}")
puts "程序出现异常:"+$!.to_s
workbook.close
end
puts "Translate Begin Time "+beginTime
puts "Translate Completed Time "+Time.now.to_s

本文介绍了一种利用Ruby脚本模拟人工操作调用谷歌翻译API的方法,实现对Excel文件中指定范围内的英文内容进行自动翻译成中文,并将翻译结果保存至新的Excel文件。
4426

被折叠的 条评论
为什么被折叠?



