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;
}
Usage:
Response.Write("Display Name:" + ri.DisplayName );
Response.Write("Native Name:" + ri.NativeName );
Comments
Post a Comment