我正在测试一些新的locale
由C++ 11提供的东西,如std::put_money
以适应其使用。我在想,会是不错的显示印刷货币为标准库支持的所有国家大量:跨平台的语言环境表
const char *Locales[] =
{
"English_Australia.1252",
"en_EN",
"fr_FR.UTF-8"
/...
// lots of lots of worldwide locales
};
int main(int argc, char **argv)
{
for (const char **Locale = std::begin(Locales); Locale != std::end(Locales); ++Locale)
{
std::stringstream ss;
ss.imbue(std::locale(*Locale))
std::cout << *Locale << ' '
<< std::showbase << std::put_money(11223344556677889900) << '\n';
}
}
我感到非常震惊意识到时,该区域名称不标准可言,我Windows 7 Professional(SP1)(西班牙语区域设备)下的Visual Studio 10.0的语言环境名称格式为Language_Region.charsetID
,例如:English_Australia.1252
,在我的Linux机器上(Debian 4.2.2)使用gcc 4.2.3语言环境遵循相同的格式,但与两个字母xx_XX.UTF-8
(例如es_ES.UTF-8
),而在Ideone上尝试代码时,似乎接受的唯一语言环境是en_US.UTF-8
。
最令人沮丧的是,试图得到支持的语言环境的标准,跨平台的表,最好的一个,我发现谷歌搜索以防万一是this one列出的语言环境为Windows和其等同于无视窗,但缺乏很多国家(如美国,危地马拉,墨西哥......)。
我试过的另一件事是调试一步一步的std::locale
构造函数,希望找到一段代码,说什么区域设置名称是有效的,其中一个不是。我期待着大量的语言环境名称(例如示例代码中的一个),但我被构造函数的复杂性所吓倒并逃离了。
所以我的问题是:
- 至极的是,你知道和使用的跨平台语言环境的最好,最完整的表?
- 如何知道正在运行的系统支持的区域设置?如何访问受支持的语言环境列表?
额外的问题:
- 为什么语言环境名称不规范(授予跨平台的源代码)?
- Ideone使用了哪些语言环境系统?
谢谢。