parseAcceptLanguage function

List<Language> parseAcceptLanguage(
  1. String? al
)

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;
}