gpt4 book ai didi

c++ - 跨平台语言环境表

转载 作者:行者123 更新时间:2023-11-30 04:21:03 25 4
gpt4 key购买 nike

我正在测试 C++11 提供的一些新的 locale 东西,比如 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 的区域设置及其在 no-Windows 中的等效项,但缺少许多国家/地区(例如美国、危地马拉、墨西哥...)。

我尝试过的另一件事是逐步调试 std::locale 构造函数,希望找到一段代码,说明哪个语言环境名称有效,哪个语言环境名称无效't。我期待着一大堆语言环境名称(就像示例代码中的那个),但我被 std::locale 构造函数的复杂性吓坏了,逃走了。

所以我的问题是:

  • 哪个是您了解和使用的最好、最完整的跨平台区域设置表?
  • 如何知道正在运行的系统支持的语言环境?如何访问支持的语言环境列表?

额外问题:

  • 为什么语言环境名称不标准(授予跨平台源代码)?
  • Ideone 使用哪种语言环境系统?

最佳答案

在 UNIX-y 系统上,您可以通过运行 locale -a 获取语言环境列表,这也是 man setlocale 推荐的。我认为 C 库甚至没有语言环境列表,因为它会在运行时在 /usr/lib/locale 中查找它们。

本质上,这意味着您无法在编译时知道语言环境列表,因为它是目标系统的运行时特性。

关于c++ - 跨平台语言环境表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14835307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com