我正在尝试使用本地化支持。我写过:
#include <locale>
auto my_loc = std::locale(""); // OK
auto mm_loc = std::locale("POSIX"); // OK
auto an_loc = std::locale("en");// terminate called after throwing an instance of
//'std::runtime_error' what():
//locale::facet::_S_create_c_locale name not valid
auto ann_loc = std::locale("jp");// terminate called after throwing an instance of
//'std::runtime_error' what():
//locale::facet::_S_create_c_locale name not valid
int main()
{
}
你能简单解释一下什么是locale类?为什么我们不能使用"en"
,"jp"
,"us"
或其他字符串构建它?
答案 0 :(得分:2)
为什么我们不能用“en”,“jp”,“us”或其他字符串来构造它?
因为这些在您的计算机上不是有效的区域设置名称。标准不以任何方式指定可接受的区域设置名称集。在Linux计算机上,使用
$ locale -a
打印所有有效的区域设置名称。这打印
C
POSIX
de_DE
de_DE.iso88591
de_DE.iso885915@euro
de_DE.utf8
de_DE@euro
deutsch
german
在我的情况下。列出的每个区域设置都可以与std::locale
一起使用。
您将std::locale
添加到cout
等流中。然后使用像std::money_put
这样的方面以特定于本地的方式插入数据 - 对于我们德国人来说,它会使用.
作为千位分隔符,,
作为小数点。