不支持文化。参数名称:名称 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 是无效的文化标识符的主要内容,如果未能解决你的问题,请参考以下文章