Handle blank Accept-Language header in AcceptHeaderLocaleResolver

When the Accept-Language header is present but blank, defaultLocale
was ignored and fell back to Locale.getDefault() (JVM system locale).
A blank header represents the same intent as an absent header.

Closes gh-36513

Signed-off-by: elgun.shukurov <elgun.sukurov@kapitalbank.az>
This commit is contained in:
elgun.shukurov
2026-03-22 19:32:58 +04:00
committed by Brian Clozel
parent f92e810831
commit 4b211643bb
2 changed files with 9 additions and 1 deletions
@@ -85,7 +85,7 @@ public class AcceptHeaderLocaleResolver extends AbstractLocaleResolver {
@Override
public Locale resolveLocale(HttpServletRequest request) {
Locale defaultLocale = getDefaultLocale();
if (defaultLocale != null && request.getHeader("Accept-Language") == null) {
if (defaultLocale != null && !StringUtils.hasText(request.getHeader("Accept-Language"))) {
return defaultLocale;
}
Locale requestLocale = request.getLocale();
@@ -105,6 +105,14 @@ class AcceptHeaderLocaleResolverTests {
assertThat(this.resolver.resolveLocale(request)).isEqualTo(US);
}
@Test
void defaultLocaleWithBlankAcceptLanguageHeader() {
this.resolver.setDefaultLocale(JAPANESE);
MockHttpServletRequest request = new MockHttpServletRequest();
request.addHeader("Accept-Language", "");
assertThat(this.resolver.resolveLocale(request)).isEqualTo(JAPANESE);
}
private HttpServletRequest request(Locale... locales) {
MockHttpServletRequest request = new MockHttpServletRequest();