むとうです。

In message "[ruby-ext:02008] Re: gettext modules(Was Re: syslog module is becoming ready)"
        on Thu, 29 Nov 2001 01:42:16 +0900, matz / ruby-lang.org (Yukihiro Matsumoto) wrote:

> まつもと ゆきひろです
> 
> In message "[ruby-ext:02007] Re: gettext modules(Was Re: syslog module is becoming ready)"
>     on 01/11/28, MUTOH Masao <mutoh / highway.ne.jp> writes:
> 
> |ひとつのアプリケーションとは言え、libraryとそれを呼び出す本体の
> |作者が分かれるという場合を考えると、gettextは複数のtextdomain
> |を持つことになると思いますんで、私としては複数を許したいと思ってます。
> 
> なるほど。もっともlibraryはtextdomainを指定するべきではない
> ような気もしますが。

ここで言うtextdomainは結局のところ、そのlibraryが参照するmoファイル名を示します。
たとえば、gnomeのライブラリならgnome-libsで、gtk+であればgtk+です。
#そのファイルの実体はオプションで明示しない限り
#/usr/share/locale/ja/LC_MESSAGES/gnome-libs.mo, gtk+.mo とかになります。

で、該当するmoファイルの中からmsgidをキーにローカライズされた文字列を
取り出して返します。
msgidに該当する文字列が無い場合(あるいはmoファイルが無い場合)はmsgidを
そのまま返します。

---
アプリケーション側は、それ専用にtextdomainを定義します。
たとえば、gimpであればgimpというtextdomainを定義しています。
gimp側ではgtk+のgettext化・翻訳等はいっさい考慮せずにgimp自身が
定義している文字列のgettext化・翻訳だけを考慮すれば良いようになっています。
#で、/usr/share/locale/ja/LC_MESSAGES/gimp.moがある。

---
逆に、libraryがtextdomainを指定しないとなると、textdomainは
アプリケーション側が指定したmoファイルを指すようになります。
この場合は、当然、library側で想定したmsgidに該当する文字列がmoファイルの中に
はありませんので文字列は変換されません。ただ、偶然、同じmsgidを持っていると
その部分だけ変換されます。

この場合の回避策としては、アプリケーション側でlibrary側の文字列も全て
網羅してgettext化・翻訳をし直すということも考えられますがそれはちょっと
非効率な気がしますがいかがでしょうか。


---
と、偉そうに書いてますが、最近、ruby-gettextを見つつ勉強を始めたばかりのところ
だったりします。間違えてたらごめんなさい。


それでは。

-- 
.:% MUTOH Masao <mutoh / highway.ne.jp>