Name of the country according to ISO 3166-2

I know how to convert the ISO 3166-2 code to the full English name, for example. "USA" to "United States" using RegionInfo.

However, how can I do the opposite, i.e. accepts "United States" and returns "USA"?

+4
source share
4 answers
//Get the cultureinfo
RegionInfo rInfo = new RegionInfo("us");
string s = rInfo.EnglishName;

//Convert it back
CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.SpecificCultures);
 CultureInfo cInfo = cultures.FirstOrDefault(culture => new RegionInfo(culture.LCID).EnglishName == s);
+11
source

The main idea: to take all the objects of the region and choose from them the one that contains the given full name.

var regionFullNames = CultureInfo
                      .GetCultures( CultureTypes.SpecificCultures )
                      .Select( x => new RegionInfo(x.LCID) )
                      ;
var twoLetterName = regionFullNames.FirstOrDefault(
                       region => region.EnglishName.Contains("United States")
                    );
+1
source
        /// <summary>
        /// English Name for country
        /// </summary>
        /// <param name="countryEnglishName"></param>
        /// <returns>
        /// Returns: RegionInfo object for successful find.
        /// Returns: Null if object is not found.
        /// </returns>
        static RegionInfo getRegionInfo (string countryEnglishName)
        {
            //Note: This is computed every time. This may be optimized
            var regionInfos = CultureInfo.GetCultures(CultureTypes.SpecificCultures)
               .Select(c => new RegionInfo(c.LCID))
               .Distinct()
               .ToList();
             RegionInfo r = regionInfos.Find(
                    region => region.EnglishName.ToLower().Equals(countryEnglishName.ToLower()));                       
             return r;
        }
+1

- :

class CountryCodeMap
{
  private static Dictionary<string,string> map =
    CultureInfo
    .GetCultures(CultureTypes.AllCultures)
    .Where( ci => ci.ThreeLetterISOLanguageName != "ivl" )
    .Where( ci => !ci.IsNeutralCulture )
    .Select( ci => new RegionInfo(ci.LCID) )
    .Distinct()
    .ToDictionary( r => r.Name , r => r.EnglishName )
    ;

  public static string GetCountryName( string isoCountryCode )
  {
    string countryName ;
    bool found = map.TryGetValue( isoCountryCode, out countryName ) ;

    if ( !found ) throw new ArgumentOutOfRangeException("isoCountryCode") ;

    return countryName ;
  }

}
+1

Source: https://habr.com/ru/post/1568829/


All Articles