using System.Collections.Generic;
using System.Net.Http.Headers;
public static void Main()
Test("fr,fr-FR;q=0.8,;q=0.9,en;q=0.7,en-US;q=0.6");
Test("pt-PT,pt;q=0.9,en;q=0.8,en-CA;q=0.7,fr-CA;q=0.6,fr;q=0.5,tr;q=0.4,fr-FR;q=0.3,uk;q=0.2,en-GB;q=0.1,en-US;q=0.1,pt-BR;q=0.1");
public static void Test(string acceptLanguageHeaderValue)
Console.WriteLine($"Header: {acceptLanguageHeaderValue}");
var acceptedLanguages = ParseAcceptLanguageHeader(acceptLanguageHeaderValue);
foreach (var lang in acceptedLanguages)
Console.WriteLine($" {lang.Value} => {lang.Quality}");
public static IEnumerable<StringWithQualityHeaderValue> ParseAcceptLanguageHeader(string acceptLanguageHeaderValue)
return acceptLanguageHeaderValue
.Select(rawValue => StringWithQualityHeaderValue.TryParse(rawValue, out var parsed) ? parsed : null)
.OfType<StringWithQualityHeaderValue>()
.OrderByDescending(lang => lang.Quality ?? 1.0);