Androidのアプリを日本語化したくなったのでXMLを和訳していたんですが、面倒になったのでスクリプトをサクっと書いて見ました。RubyでXMLを構文解析して読み取り、Microsoftの翻訳APIを利用し自動で機械翻訳して再びXMLで出力しちゃいます。XMLを翻訳して出力プログラムはあまり見かけないのでそれなりに需要があるかなと思い公開してみました。
結構最近は機械翻訳も精度が上がっているようですねw 驚かされました。数百数千行を一個一個手動で訳すよりはある程度自動化したほうが楽ですよね~
※ 機械翻訳は万能ではないのでそれなりに変な訳が出力されます。← 言い切ります
※ リビルドする時にエラーが発生するかもしれませんがその時は手動で直してください。
(多分エディタの自動置換機能とか使えば全然大したことはないと思います)
※ APPIDは下記の参考にさせて頂いたサイト(simultechnology.blog様)を参考にしてください。
#!/usr/bin/ruby -KU require 'net/http' require 'rexml/document' require 'json' #----------(Settings)----------# in_file = "strings.xml" ex_file = "strings_.xml" $debug = true $sleep = 3 $appid = "*************************" #------------------------------# $rank = 0 def sp " " * $rank end def run elem if $debug print "================================\n" print sp + "name : #{elem.name}\n" attrs = elem.attributes attrs.each{|a,e| print sp + "attr : #{a} = #{e}\n" } print sp + "text : \n--\n#{elem.text}\n--\n" end if elem.text =~ /\w/ then text = URI.escape(elem.text) h = Net::HTTP.new("api.microsofttranslator.com") response = h.get("/V2/Http.svc/Translate?appid=#{$appid}&from=en&to=ja&text=#{text}") if response.message == 'OK' doc = REXML::Document.new(response.body) elem.text = doc.root.text end end print "#{elem.text}\n" sleep $sleep if elem.has_elements? then elem.each_element{|e| $rank += 1 run e $rank -= 1 } end end doc = REXML::Document.new(File.new(in_file)) run doc.root doc.write(File.new(ex_file, "w"))
プログラムを書く上で参考にさせて頂いたサイト
REXML であそぶ http://www.namikilab.tuat.ac.jp/~sasada/prog/rexml.html
simultechnology.blog http://simultechnology.blendmix.jp/blog/archives/1101
0 Comments.