Ruby言語やLinuxのネタが多いです。
June 28, 2006 [おもひで]
■ [Ruby] Amrita2の国際化
RubyKaigi2006のレポートを読んでいて、ふと、Amrita2に興味を持った。Amrita2+Ruby-GetTextで国際化アプリ作るとどうなんだろう。
クイックスタートの例を参考にするとまずは以下のように書けるんだろう。
#試してません。
require 'gettext'
require "amrita2/template"
include Amrita2
class PO
include GetText
bindtextdomain("foo")
def title
_("hello world")
end
def body
_("Amrita2 is a html template libraly for Ruby")
end
end
tmpl = TemplateFile.new("template.html")
tmpl.expand(STDOUT, PO.new)
../sample/hello/template.html
<html>
<body>
<h1 id='title'>title will be inserted here</h1>
<p id='body'>body text will be inserted here</p>
</body>
</html>
これで、title, bodyタグ内のそれぞれ文字列が置き換えられてローカライズされるという感じかな。
■ こりゃー、簡単だ。すごくきれいにできてる。
・・・なんだけど、オレの感覚では、開発時、ローカライズのためだけにひたすらidを考えていくというのはちょっときびしい気がする。例えば100画面あったりするとこりゃもう大変だ。逆に言えば、2,3画面なら全然オーケーなんだろうけど。
100画面のケースを考えると、やっぱりこの場合のidはロジック向けということで閉じるべき(ローカライズ向けに使ってはいけないよう)な気がする。これをベースにrgettextみたく、idの自動抽出ツールを書いて上記サンプルのPOクラスを自動生成するのも簡単だろうだけど、ローカライズに特化するためにはロジック置き換え部分との差別化を図るために何らかの手段(idにプレフィクス付ける等)をつけなきゃいけなさそう。じゃないとロジック置き換え部分もローカライズ対象として抽出されちゃうからね。
■ いや、Amritaが国際化に向いていないとかという話をしたいのでなくて、ローカライズドメッセージ(言語リソース)の特異性っていうのかな。Amritaは表示(View)とロジック(Controll/Model)を、静的なテンプレート、動的なRubyスクリプトの2つにうまく切り離してるわけなんだけど、ローカライズドメッセージって限りなく静的な情報なんだけど実は要求毎に動的に切り替わるViewとして扱われる必要があるんだよね。ってことに気づいたと。
この辺をうまく扱ったテンプレートエンジンって誰か考えてくれないかなぁ。もちろん、バックエンドはRuby-GetTextで(苦笑)。
■ [Ruby] Amrita2のPOとは
Amrita2のPOってPresentatio Objectの略なのか・・・。GetTextのpoファイルと被るネーミングだなぁ。一緒に使うと混乱する人も出てくるんだろうな。相性悪いか・・・(苦笑)
