您可以在boost::locale中使用多个消息域吗
Can you use multiple message domains in boost::locale?
我有许多应用程序,它们共享许多通用库。我正在尝试使用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。
由于这个问题没有答案,我认为这在boost::locale中是不可能的。因此,我将很快概述我为实现所需功能所做的工作:
我创建了一个带有以下接口的单例类
class MY_GETTEXT
{
public:
void SetPath(const std::string& i_path);
void AddDomain(const std::string& i_domain);
void ChangeLocale(const std::string& i_locale);
std::string gettext(const std::string i_msg_id);
};
将为要使用的每个域调用AddDomain,并将其添加到成员集m_language_domains_a中。ChangeLocale进行一些区域设置操作,并在成员m_locale中存储一个区域设置,我将在这里忽略它的实现。
要进行翻译,只需调用MY_GETTEXT::GETTEXT即可。它的实现看起来是这样的:
std::string MY_GETTEXT::gettext(const std::string i_msg_id)
{
BOOST_FOREACH(const std::string& domain , m_language_domains_a)
{
if (boost::locale::translate(i_msg_id).str(m_locale, domain) != i_msg_id)
{
return boost::locale::translate(i_msg_id).str(m_locale, domain);
}
}
return i_msg_id;
}
相关文章:
- boost::进程间消息队列引发错误
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- 避免使用 boost::进程间::消息队列创建文件
- 如何在 boost::asio 中将打包的结构作为消息传递?(无序列化)
- 自定义预期失败的完整错误消息(boost::spirit::x3)
- 可以将Boost消息队列文件重定向到用户指定的位置
- 如何避免 boost 的野兽body_limit错误并正确处理大消息
- boost::p rogram_options - 验证失败时,显示用户在错误消息中输入的值
- 添加 cpp11 插件时出现错误消息"Undefined reference to boost (...)"
- boost::asio::async_read_until 不会读取所有消息
- 浏览器将随机HTTP消息正文发送到我的boost.asio服务器.我可以更改此设置吗?
- 在尝试使用boost时断言.跨很多过程中的互动消息队列
- BOOST.ASIO-如何向多个客户发送消息
- 带有 TLS v. 1.2 和 SSL v.3 电子邮件客户端的 Boost.Asio 上下文:ssl3 警报意外消息
- Boost::ASIO:针对最小流量、长连接、小消息、即时传递进行优化
- boost/asio:非常简单的聊天服务器无法访问收到的消息
- boost消息队列线程安全和进程安全吗?
- 使用Boost C 单元测试套件测试非致命错误消息
- boost::mpl::字符串大小错误消息
- boost::进程间消息队列创建时的竞争条件