不支持文化。参数名称:名称 US 是无效的文化标识符

Posted

技术标签:

【中文标题】不支持文化。参数名称:名称 US 是无效的文化标识符【英文标题】:Culture is not supported. Parameter name: name US is an invalid culture identifier 【发布时间】:2016-01-13 11:40:49 【问题描述】:

我尝试使用 ISO-3166 两个字母的国家/地区代码来创建我的 C# 文化信息对象,以根据区域设置格式化我的 datetime 对象。

如果我尝试:

var cultureInfo = new CultureInfo("FR");

如果我尝试,它会正常工作:

var cultureInfo = new CultureInfo("US");

它抛出一个异常:

不支持文化。参数名称:名称 US 无效 文化标识符。

有趣的是,“US”是一个有效的 ISO-3166 国家代码。

【问题讨论】:

检查full list of cultures 您的实际问题是什么?如何解决?如何从国家代码映射到文化? ...? 是的。我想知道如何将 ISO-3166 国家代码映射到 C# 文化 @GianlucaGhettini 没有这样的内置映射。你需要自己创造。 Potential dupe? 【参考方案1】:

来自CultureInfo(string) constructor 文档;

有关预定义区域性名称的列表,请参阅National Language Support (NLS) API Reference

同样来自CultureInfo.TwoLetterISOLanguageName Property

例如,英文的两个字母缩写是en

没有定义US,但有en(如果你真的必须使用两个字母的名字)你可以使用它。它们都在ISO 639-1 standard中定义。

var cultureInfo = new CultureInfo("en");

【讨论】:

好的。所以基本上 CultureInfo 构造函数不直接接受 ISO-3166 国家代码... @GianlucaGhettini 它可以接受其中的一些,但不是全部。这些是不同的标准。 @GianlucaGhettini 是的。例如,您可以创建自己的KeyValuePair<string, string> 好的,谢谢。回答接受。关于在哪里可以找到这种映射的任何建议?我的意思是,不敢相信我是第一个面临这种问题的人......【参考方案2】:

因为US 不是有效的区域性名称,而 FR 是。 CultureInfo 的构造函数不接受国家代码作为参数。它需要“文化名称”。

请参阅此 msdn page 中的表格以获取有效的文化名称。

【讨论】:

【参考方案3】:

CultureInfo 构造函数的参数不是 ISO-3166 代码,而是预定义的文化名称

来自MSDN关于CultureInfo的文章:

有关预定义文化名称的列表,请参阅国家语言 在 Go Global 开发者中心支持 (NLS) API Reference。

在提到的参考文献中没有us文化,但有en-US,所以你必须使用ut。

【讨论】:

以上是关于不支持文化。参数名称:名称 US 是无效的文化标识符的主要内容,如果未能解决你的问题,请参考以下文章

在不了解文化的情况下将月份名称从一种语言转换为另一种语言?

ASP.Net 验证文化名称

xUnit文化意识测试

为啥英语(加勒比)的文化名称是“en-029”?

文化 缩写的月份名称有时以句点结尾

本地化:如何将文化信息映射到脚本名称或 Unicode 字符范围?