Представленный в 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
.
Может ли кто-нибудь объяснить обоснование этого поведения?