34

I have the following:

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;

None of this gives me the country code, e.g. GB.

Is there a way to get it without string splitting?

user247702
  • 22,915
  • 14
  • 108
  • 152
Miguel Moura
  • 32,822
  • 74
  • 219
  • 400

5 Answers5

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

Most probably you need to use r.TwoLetterISORegionName property.

string regionName = r.TwoLetterISORegionName;
Sriram Sakthivel
  • 69,953
  • 7
  • 104
  • 182
  • 2
    Note: You should check CultureInfo.IsNeutralCulture before feeding its LCID to RegionInfo. RegionInfos cannot be created from Neutral cultures (eg "en"). – Tor Haugen May 04 '21 at 10:37
11
System.Globalization.CultureInfo c = new System.Globalization.CultureInfo("en-GB");
var ri = new RegionInfo(c.Name);
string countryName = ri.DisplayName;

That will give you:

"United Kingdom"

For Two Letter Use:

string countryAbbrivation = ri.TwoLetterISORegionName;

That will give you "GB"

Habib
  • 212,447
  • 27
  • 392
  • 421
  • 1
    He wanted "GB" - you gave him "United Kingdom". This might help him but isn't what was asked for... – Chris Dec 02 '13 at 14:18
  • 2
    @Chris, `string countryAbbrivation = ri.TwoLetterISORegionName;` would do it. added in the answer as well – Habib Dec 02 '13 at 14:19
5

You can try the RegionInfo Class. One of the properties is the RegionInfo.TwoLetterISORegionName Property. Example from MSDN:

RegionInfo myRI1 = new RegionInfo("US");
Console.WriteLine( "   Name:                         {0}", myRI1.Name );
Console.WriteLine( "   ThreeLetterISORegionName:     {0}", myRI1.ThreeLetterISORegionName );
Console.WriteLine( "   TwoLetterISORegionName:       {0}", myRI1.TwoLetterISORegionName );

Name: US

ThreeLetterISORegionName: USA

TwoLetterISORegionName: US

Abbas
  • 13,778
  • 6
  • 40
  • 69
4

If you just want to use the RegionInfo of the current thread, you can get the country code with this one-liner:

RegionInfo.CurrentRegion.TwoLetterISORegionName
William
  • 1,849
  • 2
  • 23
  • 38
-1

Following will also accept 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;
}
RaSor
  • 665
  • 7
  • 8