in src/main/java/org/apache/commons/lang3/LocaleUtils.java [227:252]
private static Locale parseLocale(final String str) {
if (isISO639LanguageCode(str)) {
return new Locale(str);
}
final String[] segments = str.indexOf(UNDERSCORE) != -1
? str.split(String.valueOf(UNDERSCORE), -1)
: str.split(String.valueOf(DASH), -1);
final String language = segments[0];
if (segments.length == 2) {
final String country = segments[1];
if (isISO639LanguageCode(language) && isISO3166CountryCode(country) ||
isNumericAreaCode(country)) {
return new Locale(language, country);
}
} else if (segments.length == 3) {
final String country = segments[1];
final String variant = segments[2];
if (isISO639LanguageCode(language) &&
(country.isEmpty() || isISO3166CountryCode(country) || isNumericAreaCode(country)) &&
!variant.isEmpty()) {
return new Locale(language, country, variant);
}
}
throw new IllegalArgumentException("Invalid locale format: " + str);
}