AcceptHeaderLocaleResolver returns default locale in case of no supported locale found
Issue: SPR-15426 (cherry picked from commit ea98ee8)
This commit is contained in:
parent
597fe0720f
commit
a3d199f4dd
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2016 the original author or authors.
|
||||
* Copyright 2002-2017 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -95,11 +95,15 @@ public class AcceptHeaderLocaleResolver implements LocaleResolver {
|
|||
if (defaultLocale != null && request.getHeader("Accept-Language") == null) {
|
||||
return defaultLocale;
|
||||
}
|
||||
Locale locale = request.getLocale();
|
||||
if (!isSupportedLocale(locale)) {
|
||||
locale = findSupportedLocale(request, locale);
|
||||
Locale requestLocale = request.getLocale();
|
||||
if (isSupportedLocale(requestLocale)) {
|
||||
return requestLocale;
|
||||
}
|
||||
return locale;
|
||||
Locale supportedLocale = findSupportedLocale(request);
|
||||
if (supportedLocale != null) {
|
||||
return supportedLocale;
|
||||
}
|
||||
return (defaultLocale != null ? defaultLocale : requestLocale);
|
||||
}
|
||||
|
||||
private boolean isSupportedLocale(Locale locale) {
|
||||
|
|
@ -107,7 +111,7 @@ public class AcceptHeaderLocaleResolver implements LocaleResolver {
|
|||
return (supportedLocales.isEmpty() || supportedLocales.contains(locale));
|
||||
}
|
||||
|
||||
private Locale findSupportedLocale(HttpServletRequest request, Locale fallback) {
|
||||
private Locale findSupportedLocale(HttpServletRequest request) {
|
||||
Enumeration<Locale> requestLocales = request.getLocales();
|
||||
while (requestLocales.hasMoreElements()) {
|
||||
Locale locale = requestLocales.nextElement();
|
||||
|
|
@ -115,7 +119,7 @@ public class AcceptHeaderLocaleResolver implements LocaleResolver {
|
|||
return locale;
|
||||
}
|
||||
}
|
||||
return fallback;
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2016 the original author or authors.
|
||||
* Copyright 2002-2017 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -13,6 +13,7 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.web.servlet.i18n;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
|
@ -24,15 +25,14 @@ import org.junit.Test;
|
|||
|
||||
import org.springframework.mock.web.test.MockHttpServletRequest;
|
||||
|
||||
import static java.util.Locale.CANADA;
|
||||
import static java.util.Locale.JAPANESE;
|
||||
import static java.util.Locale.UK;
|
||||
import static java.util.Locale.US;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static java.util.Locale.*;
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/**
|
||||
* Unit tests for {@link AcceptHeaderLocaleResolver}.
|
||||
*
|
||||
* @author Rossen Stoyanchev
|
||||
* @author Juergen Hoeller
|
||||
*/
|
||||
public class AcceptHeaderLocaleResolverTests {
|
||||
|
||||
|
|
@ -56,6 +56,17 @@ public class AcceptHeaderLocaleResolverTests {
|
|||
this.resolver.setSupportedLocales(Collections.singletonList(CANADA));
|
||||
assertEquals(US, this.resolver.resolveLocale(request(US, UK)));
|
||||
}
|
||||
@Test
|
||||
|
||||
public void resolvePreferredNotSupportedWithDefault() {
|
||||
this.resolver.setSupportedLocales(Arrays.asList(US, JAPAN));
|
||||
this.resolver.setDefaultLocale(Locale.JAPAN);
|
||||
|
||||
MockHttpServletRequest request = new MockHttpServletRequest();
|
||||
request.addHeader("Accept-Language", KOREA.toString());
|
||||
request.setPreferredLocales(Collections.singletonList(KOREA));
|
||||
assertEquals(Locale.JAPAN, this.resolver.resolveLocale(request));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void defaultLocale() throws Exception {
|
||||
|
|
|
|||
Loading…
Reference in New Issue