0

目前正在做一个添加i18n语言翻译的项目。

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

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

经过一些简短的研究,我发现了一个 Boost C++示例,它在共享内存中创建了一个向量。
它也可以适用于提升语言环境对象吗?

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

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");
4

0 回答 0