C# CultureInfo.Name属性

C# CultureInfo.Name属性,c#,.net,cultureinfo,C#,.net,Cultureinfo,阅读 CultureInfo.Name属性 获取区域性名称,格式为languagecode2国家/地区代码2 然后举个例子: Console.Write("{0,-7}", ci.Name); [...] /* This code produces the following output. This output has been cropped for brevity. CULTURE ISO ISO WIN DISPLAYNAME

阅读

CultureInfo.Name属性
获取区域性名称,格式为languagecode2国家/地区代码2

然后举个例子:

 Console.Write("{0,-7}", ci.Name);
 [...]

/*
This code produces the following output.  This output has been cropped for brevity.

CULTURE ISO ISO WIN DISPLAYNAME                              ENGLISHNAME
ar      [...]
bg      [...]
ca      [...]
zh-Hans [...]                    
cs      [...]
da      da  [...]
de      de  [...]
el      el  [...]
en      en  eng ENU English                                  English                                 
es      es  spa ESP Spanish                                  Spanish                                 
fi      fi  [...]
zh      zh  [...]
zh-Hant zh  [...]                   
zh-CHS  zh  [...] 
zh-CHT  zh  [...] 

*/
有人能解释一下两个字母的
languagecode2国家/地区代码2
格式,以及如何从
CultureInfo
中获取“
en-US
”字符串吗

比如,我有以下代码:

var culture = Context.Features.Get<IRequestCultureFeature>().RequestCulture.UICulture;
string lang2 = culture.TwoLetterISOLanguageName.ToLower();
string lang4 = culture.Name.ToLower();

MSDN提供的示例只返回languagecode2,因为它迭代
CultureInfo.GetCultures(CultureTypes.NeutralCultures)
。顾名思义,被迭代的
CultureInfo
中性的代码,因此它们的名称只包含两个字母的小写语言代码

更一般地说,
CultureInfo
提供有关特定区域性的信息。当它不是中性的时候

如果您的代码返回
en
,那么它仅仅意味着向它传递了一个中立的区域性。如果/当您传递特定文化(例如:en US)时,名称将相应匹配


更多信息可以从
文化信息的备注部分收集:

中性区域性仅由两个字母的小写语言代码指定。例如,fr为法语指定中性文化,de为德语指定中性文化。

新的文化信息(“en-US”)。名字应该起作用。如果它返回“en”,则是一般的英语文化,而不是特定的美国文化。请参阅更新的OP我更好地解释了问题。我真的不明白你为什么建议我获得“en-US”如果你认为我已经有了这个字符串…@Serge我间接地说,如果区域性是特定于区域的,那么如果你访问
.Name
属性,它将包含该部分。显然,已经提出了一个不提供区域的请求(例如“en-US”),因此它会退回到中性(“en”)文化。既然可以是“en-GB”,为什么还要是“en-US”呢?谢谢。MS文档页面没有提到这些信息。我的意思是,“…culture is specified by”,这并不明确意味着要说明“Name”属性y,文档对此有点不清楚,特别是当您查看
Name
属性文档时。尽管如此,
CultureInfo
类的主要文档似乎更完整,也更值得信任。实际上,我刚刚在
名称
文档页面上发送了一个反馈,要求对中性文化更清晰。我用一些细节更新了OP。。。CultureInfo在创建类时似乎没有检查有效的区域性。。。例如,《新文化信息》(“xx YY”)
实际上比这更复杂。创建
CultureInfo
时,它会委托给底层操作系统。在Windows 10之前,尝试创建无效区域性时引发了
CultureNotFoundException
。从Windows10开始,似乎操作系统说任何文化都是正确的(如果它真的不存在,我相信它会有不变量文化的数据)。有关这方面的更多信息,请单击此处:。
using System;
using System.Globalization;

public class Program {
    public static void Main() {

        Console.Write(new CultureInfo("xx").Name);  // "xx" 
        Console.Write(new CultureInfo("xx-YY").Name);   // "xx-YY"  
    }
}