Add defaultLocale to AcceptHeaderLocaleResolver
Issue: SPR-14312
This commit is contained in:
parent
e2fa282e14
commit
8343ce9e44
|
|
@ -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…
Reference in New Issue