parseAcceptLanguage function
Parses the given "Accept-Language" header into an array of Language.
Implementation
List<Language> parseAcceptLanguage(String? al) {
var strings = regex.allMatches(al ?? '');
var langs = strings
.map((m) {
var str = m.group(0);
if (str == null || str.isEmpty) {
return null;
}
var bits = str.split(';');
if (bits.isEmpty) {
return null;
}
var ietf = bits[0].split('-');
var hasScript = ietf.length == 3;
return Language(
code: ietf[0],
script: hasScript ? ietf.tryGet(1) : null,
region: hasScript ? ietf.tryGet(2) : ietf.tryGet(1),
quality: bits.tryGet(1) != null
? (double.tryParse(
bits.tryGet(1)?.split('=').tryGet(1) ?? '') ??
1.0)
: 1.0);
})
.whereType<Language>()
.toList();
langs.sort((a, b) => b.quality.compareTo(a.quality));
return langs;
}