Add defaultLocale to AcceptHeaderLocaleResolver

Issue: SPR-14312
master
Rossen Stoyanchev 8 years ago
parent e2fa282e14
commit 8343ce9e44
  1. 25
      spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/AcceptHeaderLocaleResolver.java
  2. 12
      spring-webmvc/src/test/java/org/springframework/web/servlet/i18n/AcceptHeaderLocaleResolverTests.java

@ -42,6 +42,8 @@ public class AcceptHeaderLocaleResolver implements LocaleResolver {
private final List<Locale> supportedLocales = new ArrayList<Locale>();
private Locale defaultLocale;
/**
* Configure supported locales to check against the requested locales
@ -65,9 +67,32 @@ public class AcceptHeaderLocaleResolver implements LocaleResolver {
return this.supportedLocales;
}
/**
* Configure a fixed default locale to fall back on if the request does not
* have an "Accept-Language" header.
* <p>By default this is not set in which case when there is "Accept-Lanaguage"
* header, the default locale for the server is used as defined in
* {@link HttpServletRequest#getLocale()}.
* @param defaultLocale the default locale to use
* @since 4.3
*/
public void setDefaultLocale(Locale defaultLocale) {
this.defaultLocale = defaultLocale;
}
/**
* The configured default locale.
*/
public Locale getDefaultLocale() {
return this.defaultLocale;
}
@Override
public Locale resolveLocale(HttpServletRequest request) {
if (getDefaultLocale() != null && request.getHeader("Accept-Language") == null) {
return getDefaultLocale();
}
Locale locale = request.getLocale();
if (!isSupportedLocale(locale)) {
locale = findSupportedLocale(request, locale);

@ -25,6 +25,7 @@ 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;
@ -56,6 +57,17 @@ public class AcceptHeaderLocaleResolverTests {
assertEquals(US, this.resolver.resolveLocale(request(US, UK)));
}
@Test
public void defaultLocale() throws Exception {
this.resolver.setDefaultLocale(JAPANESE);
MockHttpServletRequest request = new MockHttpServletRequest();
assertEquals(JAPANESE, this.resolver.resolveLocale(request));
request.addHeader("Accept-Language", US.toString());
request.setPreferredLocales(Collections.singletonList(US));
assertEquals(US, this.resolver.resolveLocale(request));
}
private HttpServletRequest request(Locale... locales) {
MockHttpServletRequest request = new MockHttpServletRequest();

Loading…
Cancel
Save