By Mads Kristensen
Expert Author
Article Date: 2008-08-08
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.
Comments