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

May 07, 2002

[Tools] gettextの話

ちょっと補足。こちらの話ですが 、gettext-0.10.36からiconvを使うようになったみたいです。moファイルをUTF-8なpoファイルから作って、#{prefix}/share/locale/ja/LC_MESSAGE/配下に置けば、内部的にその環境の文字コードに変換してくれるみたいです。

これを使えば、Linuxであれば、UTF-8のmoファイルからEUC-JPを、Win32な環境だとSJISを返してくれる....はず(未確認)。

で、現在のRuby-GetText-Packageは?

この変換をやっていません。うーむ、中田さんのiconvを使って実装すべきか、gettextのラッパにすべきか...悩ましー。

まぁ、それはさておき、これにGTK+が絡むとどうなるか?

実は、GTK+のWin32版(及び、次期GTK+?)は内部ではUTF-8を使うんだそうです。

参考:http://www.geocities.co.jp/SiliconValley/3097/learning_gtk_win/learn_gtk_win-2.html#sect2.3

ということは、Win32の環境では、通常のgettextはSJISを返し、GTK+の時に限ってはUTF-8を返す必要があります...。

で、私はこの先、全く未確認なのですが、実際のところはこの辺うまくやってるのでしょうか?あるいは、どこかしらで、SJISかUTF-8のどちらを返すのかを判断させないといけないのでしょうか...。

例えば、アプリケーション側で、Win32な場合は、UTF-8なmoファイルからgettextを使ってSJISに変換された文字を受け取って、さらにそれをUTF-8に変換してGTK+に渡す必要がある....ってことは無いですよね...。

うーん、でも、これでさらにRuby/GTKが絡む場合はどうなるんだろう。微妙だ...。

そんなわけで、SJISなmoファイルを用意すればいけそうと書いたのは怪しいです。UTF-8なファイルかも。

この辺は、落ち着いたら調べてみます。連休中にやろうと思ってたんだけど、すっかりtDiaryにはまってました(^^;)。

つーか、知ってる人は教えてください。

#私のWin32な環境って会社のPCだけなんすよね...。

#しかもHDD容量が少なくてなかなか環境作れないんです(T_T)。

本日のツッコミ(全2件) [ツッコミを入れる]

さかい [localeのエンコーディングと違う文字列が必要な場合は、 明示的にbind_textdomain_codeset(..]

むとぽん [なるほどそのために使うんですね、bind_textdomain_codesetって。ちなみに、通常はGTK+のアプリ..]


May 07, 2006

[Ruby] Ruby-GetText-Package-1.5.0

リリースしました。ロシア語のリソースが追加されました。これで11(+2)言語サポートです!

また、アプリケーションを起動したままカタログファイル(moファイル)を更新した場合に、カタログファイルを再読込するオプションを追加しました。

この機能はruby -dでrubyを起動するか、GetText::TextDomain.check_mo=(true)を設定と使えるようになります。サーバ型アプリケーションを起動しっぱなしで開発したい場合に便利です。

なお、Ruby on Railsのではdevelopmentモードであれば自動的にこのモードになります。

この機能を使っていない場合(つまり通常の場合)、高速化のため、一度読み込まれたmoファイルはメモリ上にキャッシュされるようになっています。

エンジョイ!


更新 設定