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

June 08, 2006 [おもひで]

[Ruby] Ruby-GetText-Package-1.6.0

リリースしました。とうとう、と言いますか、1.0.0当初から直さねばならん、と思っていたリストの中でもっともやっかいなものの一つの仕様の変更を行いました。

#といっても、一般的に使ってる分には影響はないはずですのでご安心を。

で、それは何かというと、今まではRubyスクリプトファイル毎にテキストドメインを管理していたのですが、それをやめてクラス・モジュール単位に管理するようにしたということです。以前のままではファイル単位にbindtextdomain(かtextdomain)を呼ばなければいけなかったのですが、今後はクラス・モジュール単位に一回呼ぶだけで良くなりました。

ただ、それだけだと、Rubyのように他の人が作ったgettextize済みライブラリをインクルードして上書き、なんてことをしてしまったときに、追加のメッセージを管理することができなくなります。そこで、1つのクラス・モジュールが複数のテキストドメインを持つことができるようにしました。ささらに、_()等のメソッドを呼び出したときに、Module.ancestorsを上に辿って、該当するメッセージがあるかどうかを検索するようになりました。ちょっと遅くなる感じですが、実際には自分自身のクラスにバインドされたテキストドメインしか使わないでしょうし、他のクラス・ロケールを検索すると言っても多くても数個レベルだと思うので、その辺は許容範囲ということで。

えっと、言いたいことがうまくまとまらないですね。眠いからかな。

まぁ、一応続けます。んで、今回の変更の結果、GetText::Containerが不要となりました。これは、前述のファイルベースの管理ではなく、クラスに1つのテキストドメインという管理方法にするという実装案の一つではあったのですが、管理できるテキストドメインが1つだけなので、複数の箇所からbindtextdomainを呼ぶと最後に呼び出したテキストドメインで上書きされてしまうという欠点がありました。今回からは1クラスに複数のテキストドメインが管理できるためこのような問題が無くなります。

具体的には、これを使っていたRailsのプラグインが、今まではモジュール空間を分ける等の工夫が必要だったのが、今回からはそういった工夫を考えずにbindtextdomainを呼び出せるようになりました。RailsのプラグインをL10n化しようと思っている方は、パッケージに含まれるsamples/rails/vendor/plugins/gettext配下を参照してみてください。moファイルなどもsamples/rails/vendor/plugins/gettext配下に配置することができるようになったので、gettextizeされたプラグインを配布するのも簡単になったはずです(以前はmoファイルだけrails/locale/配下に置く必要があった)。

この辺についてはチュートリアル的なモノを書きたいなぁと思ってますが時間が・・・(-o-;)。

もう一つ、大きな修正として、引数の見直しを行いました。互換性を残していますが、今後は、Railsのようにfoo(domain, opts)みたいな感じでオプション扱いの引数は全部Hashで指定するようになりました。

なんだかまとまらなかったですが、とにかく今回のリリースは結構重要なリリースだったと思うので、ホッとしている次第です(何書いてんだ、オレ(苦笑))。まぁ、ともかく不具合レポートお待ちしております(^^;)。


編集