CultureInfo.Name 属性

CultureInfo.Name Property

正在阅读 MSDN

CultureInfo.Name Property
Gets the culture name in the format languagecode2-country/regioncode2.

然后例子:

 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  [...] 

*/

谁能解释一下 two 字母 languagecode2-country/regioncode2 格式,以及如何从 CultureInfo 中获取“en-US”字符串?

说,我有以下代码:

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

终于lang2 == lang4,有没有办法得到"correct"lang4

不仅如此,CultureInfo 不检查无效的文化名称,两个字母的任意组合都可以工作(fiddle here):

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"  
    }
}

MSDN returns 提供的示例仅 languagecode2 因为它迭代了 CultureInfo.GetCultures(CultureTypes.NeutralCultures)。顾名思义,被迭代的CultureInfo中性的,所以它们的名字只是由两个字母的小写语言代码组成。

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

如果你的代码returns en,那么它只是意味着一个中立的文化被传递给了它。 If/when 您将其传递给特定的文化(例如:en-US),然后名称将相应地匹配。


可以从 CultureInfo MSDN page 的备注部分收集更多信息:

A neutral culture is specified by only the two-letter lowercase language code. For example, fr specifies the neutral culture for French, and de specifies the neutral culture for German.