Java 8 - 区域设置查找行为
Java 8中引入的,基于RFC 4647,允许用户根据优先级列表找到最匹配的列表。现在我不明白这种方法的每个角落案例。下面揭示了一个我想解释的特殊情况:Locale.lookup()
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's 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
请注意:
- 如果您有一个范围(GB和美国反转),这将打印,
"en-GB;q=1.0,en-US;q=1.0"
en-GB
- 如果您有一个范围(GB的优先级高于美国),这将打印 .
"en-US;q=0.9,en-GB;q=1.0"
en-GB
有人能解释一下这种行为背后的原因吗?