了解语言环境类,locale :: facet :: _ S_create_c_locale名称无效

时间:2014-10-12 10:33:19

标签: c++ locale

我正在尝试使用本地化支持。我写过:

#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"或其他字符串构建它?

1 个答案:

答案 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这样的方面以特定于本地的方式插入数据 - 对于我们德国人来说,它会使用.作为千位分隔符,,作为小数点。