我有许多共享许多通用库的应用程序。我正在尝试使用 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) 和 boost 1.48。