//2. langtag="de-DE", return "de"
//3. langtag="nb-NO", return "no-NO"
private Locale lookupTag(String langtag, String localesStr) {
//Convert the language tag to a LocaleBCP47 object
LocaleBCP47 tag = LocaleBCP47.parse(langtag);
if (tag == null) {
return null;
}
String language = tag.getLanguage();
//1. Both language and region(country) match
if (localesStr.indexOf(tag.toLangtag() + DELIMITER) != -1)
return new Locale(tag.getLanguage(), tag.getRegion());
//2. Check only language
if (localesStr.indexOf(language + DELIMITER) != -1)
return new Locale(language);
//3. Handle fallback for Norwegian
if (language.matches("n[nb]")) {
if (localesStr.indexOf(tag.toLangtag("no") + DELIMITER) != -1) {
return new Locale("no", tag.getRegion());
}
if (localesStr.indexOf("no" + DELIMITER) != -1) {
return new Locale("no");
}
}