2009-10-19 3 views
9

私は複数のドメインを持つプログラムを持っていますが、いくつかのソースファイルには異なるテキストドメインを持つdgettext()呼び出しが含まれています。gettext:domain.poファイルへのdgettext()文字列の抽出

複数の.poファイルにgettext-stringを抽出するにはどうすればよいですか?たとえば、dgettext('one', 'Hello')はone.poに、dgettext('two', 'Bye')はtwo.poにそれぞれコールします。 xgettextはテキストドメインを無視し、すべてを単一のファイルに入れます。

+0

各ドメインを別々に解析する方法については、[suggestion](http://stackoverflow.com/a/5354360/645186)が見つかりました。ただしこれは回避策です。 – Shef

答えて

0

linuxを使用している場合は、gtranslatorプログラムを使用して* .poを操作し、* .poファイルをテストしてください。

2

まず、ドメインを分離する方法が必要です。例えば

、のはdgettext()コールのショートカットを作成し、その後、あなたはlibにアプリに1つのドメインを持っているとしましょう。

_app(msg) -> dgettext("app", msg); 

とlibドメインの1:

_lib(msg) -> dgettext("lib", msg); 

はこのように、すべてのコードの上にこれらの呼び出しを追加します。

show_message(_app("Choose a directory to save your work.")); 
show_message(_lib("No space left on device.")); 

アプリケーションを初期化する場合、両方のドメインのbindtextdomain()を呼び出す必要があることを忘れないでください。そのバイナリ.moという変種に.poファイルの両方をコンパイルし、

xgettext --keyword=_app -d domain1 filenames... 
xgettext --keyword=_lib -d domain2 filenames... 

最後に:あなたは、これらのマーカーが含まれているあなたのソースツリー内のすべてのファイル名にxgettextに異なるキーワードを指定する必要があり、それらを抽出するために

適切な場所にコピーしてインストールしてください。

+0

質問のコメントに記載されているように、私はすでにこの解決策を知っていましたが、努力のおかげです。 – Shef

+0

あなたはそれが回避策だと思うなら、私は、回避策ではない問題に対する解決策はないと思います。別の方法は、dgettext()呼び出しを抽出する独自のプログラムを作成することですが、xgettextのすべてのロジックをかなり複製することになります。 –

+1

これは解決策ではありませんが、賞品を授与するつもりです。そうでなければ無駄になるからです。 – Shef

関連する問題