Skip to main content

Find Cultureinfo and RegionInfo from browser in ASP.NET

Get language and country from a browser in ASP.NET

I recently had the challenge of retrieving a country based on the browser language. It was used to pre-select a country in a drop down list so the user didn’t have to. I knew it wasn’t going to be 100% accurate but probably more like 80-90%.
That’s because some people change the browser language instead of their native language and others use a non-ISO standard language. And last, some clients just don’t send language information.
It wasn’t an option to use a database that mapped IP addresses to countries, so the country had to be resolved from the browser alone.

Resolve the culture

I decided to split the functionality up into two methods. The first one resolves the CultureInfo based on the browsers language.
 
public static CultureInfo ResolveCulture()
{
  string[] languages = HttpContext.Current.Request.UserLanguages;
 
  if (languages == null || languages.Length == 0)
    return null;
 
  try
  {
    string language = languages[0].ToLowerInvariant().Trim();
    return CultureInfo.CreateSpecificCulture(language);
  }
  catch (ArgumentException)
  {
    return null;
  }
}

Resolve the country

The next method uses the ResolveCulture() method above to create a RegionInfo object. The RegionInfo contains all the country information needed such as ISO code, EnglishName, NativeName and DisplayName

public static RegionInfo ResolveCountry()
{
  CultureInfo culture = ResolveCulture();
  if (culture != null)
    return new RegionInfo(culture.LCID);
 
  return null;

Now I am able to get all the culture and country/region information I need based on the browser’s language, with a margin of inaccuracy I can live with.

Usage:

        RegionInfo ri = ResolveCountry();
        Response.Write("Display Name:" + ri.DisplayName );
        Response.Write("Native Name:" + ri.NativeName
);  

Comments

Popular posts from this blog

Android ref links

  Library reference resources: MVVM Architecture :  https://developer.android.com/jetpack/guide Hilt:  https://developer.android.com/training/dependency-injection/hilt-android Coroutines:  https://developer.android.com/kotlin/coroutines Retrofit:  https://square.github.io/retrofit/ Moshi:  https://github.com/square/moshi Coil:  https://coil-kt.github.io/coil/ Leak Canary:  https://square.github.io/leakcanary/ Concept reference resources: Repository Codelab:  https://developer.android.com/codelabs/kotlin-android-training-repository Room and Coroutines Codelab:  https://developer.android.com/codelabs/kotlin-android-training-room-database Room and Flow Codelab:  https://developer.android.com/codelabs/basic-android-kotlin-training-intro-room-flow Hilt Codelab:  https://developer.android.com/codelabs/android-hilt Navigation Codelab:  https://developer.android.com/codelabs/jetpack-compose-navigation Theming Codelab:  https:...