2016-01-13 113 views
2

我试图使用ISO-3166两字母国家代码创建我的C#文化信息对象,以根据语言环境对我的datetime对象进行格式设置。不支持文化。参数名称:名称US是无效的文化标识

如果我尝试:

var cultureInfo = new CultureInfo("FR"); 

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

var cultureInfo = new CultureInfo("US"); 

它抛出一个异常:不支持

文化。参数名称:name US是一个无效的 文化标识符。

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

+0

检查[文化的完整列表](http://www.csharp-examples.net/culture-names/) –

+0

你的实际问题是什么?如何解决它?如何从国家代码映射到文化? ...? –

+0

是的。我想知道如何将ISO-3166国家代码映射到C#文化 –

回答

3

CultureInfo(string) constructor文档;

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

而且从CultureInfo.TwoLetterISOLanguageName Property

例如,对于英语的两个字母的缩写是en

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

var cultureInfo = new CultureInfo("en"); 
+0

好。所以基本上CultureInfo构造函数不直接接受ISO-3166国家代码... –

+1

@GianlucaGhettini它可以接受其中的一些,但不是全部。这些是不同的标准。 –

+0

好的谢谢..所以我需要创建mu自己的映射,不是吗? –

-1

使用

var cultureInfo = new CultureInfo("en-US"); 
+0

语言或文化这个解决方案是*不*使用ISO-3166国家代码作为参数 –

1

论证CultureInfo构造是不是关于CultureInfo一个ISO-3166的代码,但预定义的文化名

MSDN文章:

对于预定义的文化列表名称,请参阅Go Global开发人员中心的国家语言 支持(NLS)API Reference

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

1

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

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

相关问题