pickAcceptLanguage function
Finds the best match from a list of supported languages and preferred languages.
Implementation
String? pickAcceptLanguage(
List<String> supportedLanguages, List<Language> acceptLanguage,
{bool? loose = false}) {
if (supportedLanguages.isEmpty || acceptLanguage.isEmpty) {
return null;
}
var supported = supportedLanguages.map((support) {
var bits = support.split('-');
var hasScript = bits.length == 3;
return Language(
code: bits[0],
script: hasScript ? bits.tryGet(1) : null,
region: hasScript ? bits.tryGet(2) : bits.tryGet(1));
}).toList();
for (var i = 0; i < acceptLanguage.length; i++) {
var lang = acceptLanguage[i];
var langCode = lang.code.toLowerCase();
var langRegion = lang.region?.toLowerCase();
var langScript = lang.script?.toLowerCase();
for (var j = 0; j < supported.length; j++) {
var supportedCode = supported[j].code.toLowerCase();
var supportedScript = supported[j].script?.toLowerCase();
var supportedRegion = supported[j].region?.toLowerCase();
if (langCode == supportedCode &&
(loose == true ||
(langScript?.isEmpty ?? true) ||
langScript == supportedScript) &&
(loose == true ||
(langRegion?.isEmpty ?? true) ||
langRegion == supportedRegion)) {
return supportedLanguages[j];
}
}
}
return null;
}