Skip to content

Commit

Permalink
Merge pull request #32318 from kilink:http-headers-getAcceptLanguageA…
Browse files Browse the repository at this point in the history
…sLocales-optimization

* gh-32318:
  Polishing external contribution
  Optimize HttpHeaders.getAcceptLanguageAsLocales
  • Loading branch information
poutsma committed Feb 29, 2024
2 parents d45c0e6 + 3370551 commit bf8f398
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -527,10 +527,14 @@ public List<Locale> getAcceptLanguageAsLocales() {
if (ranges.isEmpty()) {
return Collections.emptyList();
}
return ranges.stream()
.map(range -> Locale.forLanguageTag(range.getRange()))
.filter(locale -> StringUtils.hasText(locale.getDisplayName()))
.toList();

List<Locale> locales = new ArrayList<>(ranges.size());
for (Locale.LanguageRange range : ranges) {
if (!range.getRange().startsWith("*")) {
locales.add(Locale.forLanguageTag(range.getRange()));
}
}
return locales;
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -471,22 +471,27 @@ void accessControlRequestMethod() {

@Test
void acceptLanguage() {
String headerValue = "fr-ch, fr;q=0.9, en-*;q=0.8, de;q=0.7, *;q=0.5";
String headerValue = "fr-ch, fr;q=0.9, en-*;q=0.8, de;q=0.7, *-us;q=0.6, *;q=0.5";
headers.setAcceptLanguage(Locale.LanguageRange.parse(headerValue));
assertThat(headers.getFirst(HttpHeaders.ACCEPT_LANGUAGE)).isEqualTo(headerValue);

List<Locale.LanguageRange> expectedRanges = Arrays.asList(
List<Locale.LanguageRange> expectedRanges = List.of(
new Locale.LanguageRange("fr-ch"),
new Locale.LanguageRange("fr", 0.9),
new Locale.LanguageRange("en-*", 0.8),
new Locale.LanguageRange("de", 0.7),
new Locale.LanguageRange("*-us", 0.6),
new Locale.LanguageRange("*", 0.5)
);
assertThat(headers.getAcceptLanguage()).isEqualTo(expectedRanges);
assertThat(headers.getAcceptLanguageAsLocales()).element(0).isEqualTo(Locale.forLanguageTag("fr-ch"));
assertThat(headers.getAcceptLanguageAsLocales()).containsExactly(
Locale.forLanguageTag("fr-ch"),
Locale.forLanguageTag("fr"),
Locale.forLanguageTag("en"),
Locale.forLanguageTag("de"));

headers.setAcceptLanguageAsLocales(Collections.singletonList(Locale.FRANCE));
assertThat(headers.getAcceptLanguageAsLocales()).element(0).isEqualTo(Locale.FRANCE);
assertThat(headers.getAcceptLanguageAsLocales()).first().isEqualTo(Locale.FRANCE);
}

@Test // SPR-15603
Expand Down

0 comments on commit bf8f398

Please sign in to comment.