よたらぼ
自分の興味の赴くままに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件) [ツッコミを入れる]
さかい (September 24, 2002 00:05)

localeのエンコーディングと違う文字列が必要な場合は、
明示的にbind_textdomain_codeset()を呼んで、
エンコーディングを指定することになってます。

むとぽん (September 24, 2002 00:05)

なるほどそのために使うんですね、bind_textdomain_codesetって。ちなみに、通常はGTK+のアプリ側でその関数を呼ぶもんなんでしょうか。それも面倒くさそうな...。GNOMEのI18nあたりのコードを読んでみればよいのかな。


編集