C# CultureInfo.Name属性
阅读 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
获取区域性名称,格式为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"
}
}