Boost.Locale
使用多个区域设置

Boost.Locale 允许您在同一进程中安全地使用多个区域设置。正如我们之前提到的,区域设置的生成过程并非廉价的操作。因此,当您使用多个区域设置并需要在它们之间切换时,我们建议您在程序启动时创建所有需要的区域设置。

为了简化此过程,boost::locale::generator 类提供了一个选项来缓存所有生成的区域设置。启用此选项后,当您创建之前生成的区域设置时,它将从现有的区域设置集合中获取。此操作是线程安全的。

必须通过调用 boost::locale::generator 的 locale_cache_enabled 成员函数,并将 true 作为参数显式启用此选项。

例如

generator gen;
gen.locale_cache_enabled(true);
gen("en_US.UTF-8");
gen("de_DE.UTF-8");
gen("ja_JP.UTF-8");
// 创建所有区域设置
std::locale en=gen("en_US.UTF-8");
// 从缓存中获取现有区域设置
std::locale ar=gen("ar_EG.UTF-8");
// 因为 ar_EG 不在缓存中,所以会生成一个新的区域设置(并缓存)

然后,这些区域设置可以被赋予给 iostreams 或者直接用作各种函数的参数。