目前正在做一个添加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");