よたらぼ
自分の興味の赴くままにIT技術系のネタを取りとめもなくメモっています。
Ruby言語やLinuxのネタが多いです。

February 08, 2006 [おもひで]

[Ruby] Ruby-GetText-Package見直し中

えいやーで実装してしまっていたところを徐々に修正中。ひとまず、Locale周りを見直し、Locale::Objectクラスを追加、なるべくシステム固有の部分を排除するようにした。しかしながらこの辺の機種依存ってホント困るなぁ。うまく正規化できないや。

そうそう、最近、RoR界でもRuby-GetText-Packageを使った実装をちらちら見かけることができるようになった。Hieraki2のブランチでも試験的に採用された模様だし。これは本採用されるといいなぁ。

InstikiのI18Nのページで、"But given the speed of developpement of Instiki, it would be hard to keep the translations in sync without something like gettext support" とDenisさんが言っているけど、メンテナンスツールが無い状態でL10nをサポートし続けるのってめちゃくちゃ大変ってことに気づいている人がまだまだ少ない気がする。自動生成されるだけじゃダメで、マージまでしてくれないと。じゃなきゃ抜けがないようにするのって大変なんすよ。

あと、よく言われるんだけど、Ruby-GetText-PackageがIconvやRaccに依存してると思っている人がまだ多いみたいね。

Iconvについては、もともとpoファイルを出力する文字コードに合わせて記述すれば特に不要だし(Iconvが見つからない場合は元の文字列を返すようになっている)、RaccはRubyに標準添付されているランタイム以外(Ruby-GetText-Package自身の開発時以外)は不要になったんだよね(1.0.0から)。

だから、依存するライブラリは今のところ意識するようなものは無いんだけどな。

それから、GlobalizeにあってRuby-GetText-Packageに無い機能としてデータベースのテーブルをローカライズできるようにっていう要望をたまにもらうんだよね。

でも、テーブルのローカライズっていまいち用途がわかんない。

Globalizeの場合はあるテーブルのあるカラムに英語とそれ以外の言語を追加で記述していくような仕組みを持ってるんだけど、それってGlobalize自身の翻訳(つまりメッセージカタログとしての使用)以外に用途があるのかなぁ(認識間違いがあればご指摘プリーズ!)。

むしろ、そのテーブルのレコード毎に言語を指定、というのなら何となくニーズがあるような気はする。というかそういう要望をもらったので、なるほどそういう使い方もあるのかぁ、と思ったぐらいなんだけど。

そっちの方は、

act_as_localize(:accept_language => ["en", "ja"], 
                 :default_language => "en")

みたいな感じのを作ると便利なのかな。ここで設定したテーブルは"lang"というカラムが(できれば自動で)追加されて、ユーザからのリクエストがLocale.getを使って"ja"に該当すれば"ja"を、それ以外の場合は"en"を指定するようにして、かつ、検索する場合のwhere句にはデフォルトで"lang = 'ja' "が追加されると言う感じ。
誰か実装しません?(また他力本願だよ(苦笑))


編集