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

December 29, 2005 [おもひで]

[Ruby] Ruby-GetText-Package-1.1.0

リリースしました。今回は2つの点を大きく強化しました。

1つは、メンテナンスのしやすさの強化、そしてもう一つはRuby on Railsサポートの強化です。

まず、メンテナンスのしやすさの強化、ですが、L10n化されたアプリケーションの開発を継続して行う場合に、とにかく重要になるのがメンテナンスのしやすさです。

Ruby-GetText-Packageを使わない場合(例えば、HikiやtDiaryもそうなのですが)、各ロケール毎にあるファイル(カタログファイル:ロケール毎になくても良いですが)を、ローカライズしたい文字列が増えるたびに自分で追加したり、変更していかなければならないでしょう。このことは小さなアプリケーションではあまり問題にならないとは思いますが、比較的大きなアプリケーションではとても煩雑でいらいらする作業です。

Ruby-GetText-Packageではrgettextというコマンドを用いてローカライズ対象の文字列を自動抽出できるようになっています。

でも、これだけだと実はまだ足りません。

アプリケーションがアップデートされる度に、以前のカタログファイルとの差分というものをマージしてくれるようなツールが必要になります。

Ruby-GetText-Packageでは、現状、GNU GetTextに入っているmsgmergeというツールを使うことを想定しています。

このツールはかなり強力に過去のバージョンと新しいバージョンの差分を抽出してくれます。

この機能までサポートできて初めて、L10nライブラリ(というより文字列のローカライズに限定されますが)としてはまともに機能するようになります。

上記の機能までは今までのRuby-GetText-Packageでもサポートできていたのですが、毎回手作業で、rgettext/msgmergeを使うのはかなり面倒くさい作業なため、実際には、アプリケーション開発者がさらにrgettext/msgmergeを使ったshellスクリプトやsetup.rb向けの設定ファイルなどを書いていました。

今回のリリースで用意した'gettext/utils'は、GetText.create_mofiles, .update_ppofilesという二つの関数を提供しますが、この2つを使うとこれらの手間がほとんどかからないようになります。詳しくは「HOWTO maintain po/mo filesを参照してください。

#今のところ英語版しか用意できてません。

もう一つの機能がRuby on Railsのサポート、とりわけ、ActiveRecordのサポートの強化です。

Ruby on Railsでは、データベースのカラム名(やモデルのクラス名)をそのまま表示文字列としてエラーメッセージなどに使っています。

しかし、それらはもちろん日本語であるはずもなく、エラーメッセージとして出力されたところで「わけわからん」メッセージになっています。

この問題に対し、Rubyist Magazine 12号でも紹介されているActiveHeartではset_field_nameという関数を追加することで、一つ一つ指定できるようにしてこの問題に対応しようとしています。

これに対し、Ruby-GetText-Packageでは、rgettextで全ての該当する文字列をmsgidと言う形で抽出するようになり、それらを使うことができるようになりました(それらはApplicationControllerと同じテキストドメインとして扱われ、各modelファイルにtextdomain等の記述をする必要はありません)。

つまり、開発者自身が「全く手を加えずに」、Ruby on Railsのapp/model/を翻訳対象にできます。

#もちろん、po以下に抽出されたカラム名などは、それぞれ翻訳する必要があります。

なお、デフォルトのエラーメッセージについてもローカライズされますので、実はRubyist Magazine 12号の内容のうち、TransSid、Iso2022jpMailer以外の多くはRuby-GetText-Packageが提供する機能と重複します。ActiveHeartの内容はあくまでも日本語化であって地域化ではないので、上記の重複する機能についてはぜひともRuby-GetText-Packageを使うことをオススメします。

それから、Ruby-GetText-Packageの翻訳状況ですが、いろいろな人が手をあげてくれたものの、結局は、Czech, Dutch, French, German, Japanese, Korean, Portuguese(Brazil), Spanishの8言語のみが最新としてアップデートされるにとどまりました。ItalianやSwedishのバージョンは以前のままです。しかしながら、上記8言語については先述したデフォルトのエラーメッセージなども全て翻訳済みですので、多くの人が恩恵にあずかれるのではないかと思っています。

[Ruby] Ruby-GetText-Packageの新規ドキュメント

まだ、英語版しか用意できていませんが、ここ最近、Ruby-GetText-Package周りでいくつかドキュメントを用意したので紹介します。誰か翻訳してくれませんか?(いや、まぢで)

  1. documents for Translators
    翻訳者向けドキュメント。あなたが開発者であれば、翻訳者にメールを出すときにこのURLを参考にしてね、と書いて出すといろいろとスムーズに翻訳作業が進むかもしれません。
  2. HOWTO maintain po/mo files
    先述したとおり、翻訳ファイルをメンテナンスするための便利なHOWTOです。
  3. HOWTO for Ruby on Rails
    Ruby on Rails向けのドキュメントです。本家にあるUsing Gettext To Translate Your Rails Application よりもシンプルにしてみました。Using...の方も私の方でアップデートかけて作者には送ってあるのでそのうちアップデートされるとは思いますが、今のところこのドキュメントが最新になります。Using... に書いてあるような1.0.0の状況と1.1.0の状況ではかなり違いがありますので、これから始める人はこちらを試してみてください。


編集