Представленный в Java 8, Locale.lookup(), основанный на RFC 4647, позволяет пользователю найти наилучшее соответствие для списка Locale согласно списку приоритетов LocaleRange. Теперь я не понимаю каждый угловой случай для этого метода. Ниже приводится один конкретный случай, который я хотел бы получить для объяснения:
// Create a collection of Locale objects to search
Collection<Locale> locales = new ArrayList<>();
locales.add(Locale.forLanguageTag("en-GB"));
locales.add(Locale.forLanguageTag("en"));
// Express the user preferences with a Language Priority List
String ranges = "en-US;q=1.0,en-GB;q=1.0";
List<Locale.LanguageRange> languageRanges = Locale.LanguageRange.parse(ranges);
// Find the BEST match, and return just one result
Locale result = Locale.lookup(languageRanges,locales);
System.out.println(result.toString());
Отпечатает en, где я бы предположительно ожидал en-GB.
Обратите внимание, что:
- если у вас есть диапазон
"en-GB;q=1.0,en-US;q=1.0"(с отменой GB и US), это напечатаетen-GB, - и если у вас есть диапазон
"en-US;q=0.9,en-GB;q=1.0"(у GB более высокий приоритет, чем у США), это напечатаетen-GB.
Может ли кто-нибудь объяснить обоснование этого поведения?