多くの一般的なライブラリを共有する多くのアプリケーションがあります。boost::locale を使用してアプリケーションを国際化しようとしています。一般的なライブラリごと、および特定のアプリケーションごとに個別の .mo ファイルを作成するのは簡単です。次のように複数のメッセージ ドメインを同時に使用できるかどうか、私は迷っていました。
boost::locale::generator gen;
gen.add_messages_path(".");
gen.add_messages_domain("lib1");
gen.add_messages_domain("lib2");
std::locale::global(gen("zh_CN.UTF-8"));
.
.
.
boost::locale::gettext("Show image");
boost::locale が lib1.mo と lib2.mo の両方を検索することを期待していましたが、うまくいかないようです。追加された最初のドメイン (この場合は lib1.mo) からのメッセージのみが検出されます。lib1 の前に lib2 を追加すると、lib2 からのメッセージのみが検出されます。
次のように、呼び出しで明示的にドメインを使用できることを知っています。
boost::locale::dgettext("lib2", "Show image");
これは機能しますが、呼び出しごとにドメインを指定することは避けたいと思います。また、これが xgettext を使用して文字列を抽出する場合にうまく機能するかどうかもわかりません。
私がやろうとしていることは可能ですか?何か不足していますか?
代替案をご存知でしたら教えてください。
msvc 9.0 (2008) とブースト 1.48 を使用しています。