微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在多个进程之间共享单个 boost C++ 语言环境对象

如何解决在多个进程之间共享单个 boost C++ 语言环境对象

目前正在进行一个项目,以添加 i18n 语言翻译。

问题在于,每次启动进程时,它都会加载一个名为 MOfiles\de_DE\LC_MESSAGES\msg.mo (.mo extension) 的 13 MB 翻译文件,大约需要 1 秒完成。每个新流程都会遭受同样的延迟,从而降低用户的整体体验。

问题:是否可以在共享内存中创建单个翻译对象,以便任何新进程都可以引用该现有对象并避免延迟?

经过一些简短的研究,我发现了一个 Boost C++ example,它在共享内存中创建了一个向量。
它是否也适用于 boost 语言环境对象?

单进程翻译文件当前加载如下

void STDCALL SetGlobalLocale(const char* domain,const char* locale,const char* path,const char* charset)
{
    std::string encoding(charset);
    encoding.insert(0,".");
    std::string language = locale ? (locale + encoding) : "";

    boost::locale::generator gen;

    gen.add_messages_path(path);
    gen.add_messages_domain(domain);

    // Sets a single global locale for the entire process.
    std::locale loc = gen(language);  // SLOW!!! Takes 1 second to load. ಠ_ಠ
    std::locale::global(loc);

    gen.clear_paths();
    gen.clear_domains();
}

调用使用

SetGlobalLocale("msg","de_DE","../../../../MOfiles","CP1252");

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。