我尝试使用美国或英国语言环境字符串实例化std::locale
对象
std::locale loc("en_US")
和std::locale loc("en_GB")
都会引发错误的区域设置名称运行时异常。使用""
或"C"
创建区域设置可以正常工作;但是,我在设置单个国家/地区时遇到问题。
我想这样做的原因是为了进行单元测试,以确保字符串排序方法的集合正常工作。
我还应该指出,我使用Visual Studio 2008在Windows中进行编码,如果可能的话,我希望保持代码跨平台。
答案 0 :(得分:6)
std::locale
支持的字符串是特定于实现的;可能是该实现不支持您作为参数传递的字符串。
由于您使用的是Windows编程,因此您可能会对Language Strings感兴趣,Country/Region Strings列出setlocal
使用的语言标识符,std::locale::global(std::locale("zh-CN")) Gets "Bad locale name"??列出国家/地区标识符。据我所知,语言标识符使用连字符(例如 en-US , nl-BE 和 zh-HK )。
您可以在{{3}}
上找到更多信息答案 1 :(得分:6)
您最好使用使用ICU库的boost.locale。 ICU提供了许多语言环境,并且不依赖于您使用的操作系统。要生成std :: locale,您需要编写:
boost::locale::generator gen;
std::locale loc = gen("en_US");
了解更多信息: http://www.boost.org/doc/libs/1_57_0_b1/libs/locale/doc/html/index.html