У меня недавно была эта проблема.С помощью Common-lang я придумал этот
public static Locale getValidLocale(final Locale locale) {
Set<Locale> locales = LocaleUtils.availableLocaleSet();
List<Locale> givenLocales = LocaleUtils.localeLookupList(locale, Locale.ENGLISH);
for (Locale loc : givenLocales) {
if (locales.contains(loc)) {
return loc;
}
}
return Locale.ENGLISH;
}
LocaleUtils.availableLocaleSet () возвращает все доступные локали, но хранит список в статической переменной, поэтому он повторяется только один раз
LocaleUtils.localeLookupList () принимает языковой стандарт и создает список с различными гранулярностями.
Код в основном проверяет вашу локаль, используя более общую версию, пока английский не будет использован как запасной вариант.