C++ 了解区域设置类,区域设置::方面::_S_create_c_区域设置名称无效

C++ 了解区域设置类,区域设置::方面::_S_create_c_区域设置名称无效,c++,locale,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::runt

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

#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()
{
}
#包括
自动我的位置=标准::语言环境(“”;//好啊
自动mm_loc=std::locale(“POSIX”);//好啊
auto-an_loc=std::locale(“en”);//在抛出的实例后调用terminate
//'std::runtime_error'what():
//区域设置::方面::_S_创建_c_区域设置名称无效
auto ann_loc=std::locale(“jp”);//在抛出的实例后调用terminate
//'std::runtime_error'what():
//区域设置::方面::_S_创建_c_区域设置名称无效
int main()
{
}
您能简单地解释一下locale类的用途吗?为什么我们不能用
“en”
“jp”
“us”
或其他字符串来构造它

为什么我们不能用“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
s嵌入到流中,如
cout
。然后您可以使用方面,如
std::money\u put
以本地特定的方式插入数据-对于我们德国人,它将使用
作为千位分隔符,
作为小数点。

区域设置是方面的容器,用于将流的I/O功能国际化。