using System.Globalization;
using System.Net.Http.Headers;
public static class AcceptLanguageHandler
public static readonly CultureInfo[] SupportedCultures = {
CultureInfo.CreateSpecificCulture("en-GB"),
CultureInfo.CreateSpecificCulture("nl-BE"),
CultureInfo.CreateSpecificCulture("fr-BE"),
CultureInfo.CreateSpecificCulture("fr-LU"),
CultureInfo.CreateSpecificCulture("nl-NL"),
CultureInfo.CreateSpecificCulture("de-DE"),
CultureInfo.CreateSpecificCulture("fi-FI"),
CultureInfo.CreateSpecificCulture("fr-FR"),
CultureInfo.CreateSpecificCulture("da-DK"),
CultureInfo.CreateSpecificCulture("nb-NO"),
CultureInfo.CreateSpecificCulture("sv-SE"),
CultureInfo.CreateSpecificCulture("es-ES"),
CultureInfo.CreateSpecificCulture("ga-IE"),
CultureInfo.CreateSpecificCulture("en-IE"),
CultureInfo.CreateSpecificCulture("en-INT"),
CultureInfo.CreateSpecificCulture("pl-PL"),
CultureInfo.CreateSpecificCulture("hr-HR")
public static CultureInfo Get(System.Net.Http.Headers.StringWithQualityHeaderValue[] AcceptLanguage)
var culture = AcceptLanguage
.Where(headerValue => SupportedCultures.Any(c => c.Name == headerValue.Value || c.TwoLetterISOLanguageName == headerValue.Value))
.OrderByDescending(headerValue => headerValue.Quality ?? 1)
.Select(headerValue => SupportedCultures.Single(c => c.Name == headerValue.Value || c.TwoLetterISOLanguageName == headerValue.Value))
.FirstOrDefault() ?? SupportedCultures.First();
public static void Main()
var nlBe = new StringWithQualityHeaderValue("nl-BE");
var enGB = new StringWithQualityHeaderValue("en-GB");
var en = new StringWithQualityHeaderValue("en");
var random = new StringWithQualityHeaderValue("random");
Console.WriteLine(AcceptLanguageHandler.Get([nlBe]));
Console.WriteLine(AcceptLanguageHandler.Get([nlBe, enGB]));
Console.WriteLine(AcceptLanguageHandler.Get([enGB]));
Console.WriteLine(AcceptLanguageHandler.Get([nlBe, enGB, en]));
Console.WriteLine(AcceptLanguageHandler.Get([random]));
Console.WriteLine(AcceptLanguageHandler.Get([en]));