如何从CultureInfo中获取国家代码?

37

我有以下内容:

System.Globalization.CultureInfo c = new System.Globalization.CultureInfo("en-GB");

var a = c.DisplayName;
var b = c.EnglishName;
var d = c.LCID;
var e = c.Name;
var f = c.NativeName;
var g = c.TextInfo;
var h = c.ThreeLetterISOLanguageName;
var i = c.ThreeLetterWindowsLanguageName;
var j = c.TwoLetterISOLanguageName;

这些都没有提供给我国家代码,例如GB

有没有一种方法可以不使用字符串拆分来获取它?


2
TwoLetterISOLanguageName 不是吗? - Alberto
3
也许你不是在查找「文化」(Culture),而是在查找「地区」(Region)? - O. R. Mapper
2
@Alberto 那就是 en - Daniel A. White
1
@huMptyduMpty:虽然相关,但不是完全重复的问题。另一个问题寻找人类可读的国家名称,而这个问题是关于区域代码的。特别地,另一个问题的选定解决方案在这里不适用。 - O. R. Mapper
@SriramSakthivel:使用DisplayName而不是Name是错误的吗? - huMpty duMpty
显示剩余4条评论
5个回答

93
var c = new CultureInfo("en-GB");
var r = new RegionInfo(c.LCID);
string name = r.Name;

很可能你需要使用r.TwoLetterISORegionName属性。

string regionName = r.TwoLetterISORegionName;

5
注意:在将LCID提供给RegionInfo之前,您应该检查CultureInfo.IsNeutralCulture。无法从中性文化(例如“en”)创建RegionInfos。 - Tor Haugen
1
不要使用 new RegionInfo(c.LCID) 而应该使用 new RegionInfo(c.ToString()),因为多个文化具有相同的 LCID,例如 "en-GG"(根西岛)和 "en-JE"(泽西岛)都具有 4096 的 LCID。 - Vdex

12
System.Globalization.CultureInfo c = new System.Globalization.CultureInfo("en-GB");
var ri = new RegionInfo(c.Name);
string countryName = ri.DisplayName;

这将给你:

"United Kingdom"

两个字母的用法:

string countryAbbrivation = ri.TwoLetterISORegionName;

那将给你“GB”


1
他需要“GB”,你却给了他“英国”。这可能会有所帮助,但并不是他要求的内容。 - Chris
2
@Chris,string countryAbbrivation = ri.TwoLetterISORegionName; 就可以了。已经在答案中添加了。 - Habib

6
你可以尝试使用 RegionInfo 类。其中一个属性是 RegionInfo.TwoLetterISORegionName 属性。这是来自 MSDN 的示例:
RegionInfo myRI1 = new RegionInfo("US");
Console.WriteLine( "   Name:                         {0}", myRI1.Name );
Console.WriteLine( "   ThreeLetterISORegionName:     {0}", myRI1.ThreeLetterISORegionName );
Console.WriteLine( "   TwoLetterISORegionName:       {0}", myRI1.TwoLetterISORegionName );

名称:美国

三字母ISO地区名称:USA

二字母ISO地区名称:US


6

如果你只想使用当前线程的RegionInfo,你可以使用以下一行代码获取国家代码:

RegionInfo.CurrentRegion.TwoLetterISORegionName

0

以下代码也可以接受 CultureInfo("en");

var c = new CultureInfo("en-GB");
string countryAbbrivation;
if (!c.IsNeutralCulture) 
{
                    var region = new RegionInfo(ContentLanguage.PreferredCulture.LCID);
                    countryAbbrivation = region.TwoLetterISORegionName.ToLower();
}else{
                    countryAbbrivation = c.Name;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接