extract static method

String? extract(
  1. String s,
  2. String? language
)

Extracts substring of preferred language from multilingual string.
Example multilingual string: "Base\ren\bEnglish\rjp\bJapan\rzh_py\bPin-yin".

Use '\r' delimiter among names and '\b' delimiter between each language and name.

Implementation

static String? extract(String s, String? language) {
  if (s.trim().length == 0) {
    return null;
  }

  List<String> langNames = s.split("\r");
  if (language == null || language.trim().length == 0) {
    return langNames[0];
  }

  String? fallback;
  for (int i = 1; i < langNames.length; i++) {
    List<String> langName = langNames[i].split("\b");
    if (langName.length != 2) {
      continue;
    }

    // Perfect match
    if (langName[0].toLowerCase() == language.toLowerCase()) {
      return langName[1];
    }

    // Fall back to base, e.g. zh-min-lan -> zh
    if (fallback == null &&
        !langName[0].contains("-") &&
        (language.contains("-") || language.contains("_")) &&
        language.toLowerCase().startsWith(langName[0].toLowerCase())) {
      fallback = langName[1];
    }
  }
  return (fallback != null) ? fallback : langNames[0];
}