extractLocalized method
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
String? extractLocalized(String s) {
if (s.trim().isEmpty) {
return null;
}
List<String> langNames = s.toLowerCase().split("\r");
if (preferredLanguage == null) {
return langNames[0];
}
String lang = preferredLanguage!;
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] == preferredLanguage) {
return langName[1];
}
// Fall back to base, e.g. zh-min-lan -> zh
if (fallback == null &&
!langName[0].contains("-") &&
(lang.contains("-") || lang.contains("_")) &&
lang.startsWith(langName[0])) {
fallback = langName[1];
}
}
return (fallback != null) ? fallback : langNames[0];
}