わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

英語化について

英語版を作って,今後どうメンテナンスしていくか,迷いましたが,今回は,htmlファイルとjsファイルは日本語版とし,その中の日本語メッセージを英語にするためのRubyスクリプトを書くことで,実現しました.
英訳に関してですが,「発表」はTalkまたはTalking,「質疑」はQ&A,「時間超過」はOverrunを割り当てました.
JavaScriptのパート(src/z.js)では,長い日本語メッセージの埋め込みをなくし,HTMLファイルを参照したり切り替えたりして対処しました.(経過時間を記録するときの)「"秒"」など,いくつかの日本語文字列まで,HTMLファイルに入れて参照するのはさすがに不自然なので,そこは変換スクリプトを通すことにしました.
HTMLのパート(src/index0.html)の英語化には,Nokogiriを使用しました.英語化対象となる日本語メッセージは,id属性つきのタグで囲うか,id属性つきのタグの中の属性にしておきます.そして,

require "rubygems"
require "nokogiri"

n = Nokogiri.HTML(open("index0.html").read)

としたあと

e = n.at("#timestatus")

とすれば,id="timestatus"を含むノードがeに代入されます.あとは以下の方法から最適なものを選んで,ノードに手を加えます.

# JavaScriptのinnerHTMLのように,タグで挟まれた中を取り替える
e.inner_html = value

# 長いとき
e.inner_html = <<'EOS'
... ... ...
EOS

# value属性の値(典型的にはボタンのラベル)を変更する
e.set_attribute("value", value)

# id属性を取り除く
e.remove_attribute("id")

# JavaScriptのouterHTMLのように,タグを含めて取り替える
e.replace(value)

# タグ(と閉じタグ)だけを取り除く
e.replace(e.child)

最後2つは取扱い注意の式です.というのも,「e.replace(value)」とするときのvalueに日本語が入っていると,n.to_htmlまたはそれに類する呼び出しをしたとき,文字化けを起こしてしまうからです.また,e.replace(e.child)は,eのノード(に対応するタグ)の中に,子要素がちょうど一つだけという場合にのみ有効です.
Nokogiriを使ったファイル変換は,Cygwin + Ruby 1.9Ubuntu + Ruby 1.8で動作を確認しました.いずれも事前に,「gem install nokogiri」としておきます.また,UbuntuでNokogiriをインストールするには,「apt-get install libxml2-dev libxslt1-dev」も必要でした.
さてこのように,置換処理を楽にするためにid属性を増やしたのはいいのですが,タイマーとして動かす際には,htmlファイルの中に無用なid属性が多数残ることになります.そこで,id属性がDから始まるものについては,e.remove_attribute("id")で削除することにしました.日本語版を作る際にも,この処理を入れました.
英語化その他の加工をするためのRubyスクリプトとしてsrc/je.rb,またファイル生成のためにsrc/Makefileを追加しました*1.htmlファイルとjsファイルを結合する,src/build.rbは変更していません.

*1:英語化において,src/z.jsの日本語コメントを削除する処理は,この中で「-c 4」と書いています.