Skip to content

Commit 8343ce9

Browse files
committed
Add defaultLocale to AcceptHeaderLocaleResolver
Issue: SPR-14312
1 parent e2fa282 commit 8343ce9

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/AcceptHeaderLocaleResolver.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ public class AcceptHeaderLocaleResolver implements LocaleResolver {
4242

4343
private final List<Locale> supportedLocales = new ArrayList<Locale>();
4444

45+
private Locale defaultLocale;
46+
4547

4648
/**
4749
* Configure supported locales to check against the requested locales
@@ -65,9 +67,32 @@ public List<Locale> getSupportedLocales() {
6567
return this.supportedLocales;
6668
}
6769

70+
/**
71+
* Configure a fixed default locale to fall back on if the request does not
72+
* have an "Accept-Language" header.
73+
* <p>By default this is not set in which case when there is "Accept-Lanaguage"
74+
* header, the default locale for the server is used as defined in
75+
* {@link HttpServletRequest#getLocale()}.
76+
* @param defaultLocale the default locale to use
77+
* @since 4.3
78+
*/
79+
public void setDefaultLocale(Locale defaultLocale) {
80+
this.defaultLocale = defaultLocale;
81+
}
82+
83+
/**
84+
* The configured default locale.
85+
*/
86+
public Locale getDefaultLocale() {
87+
return this.defaultLocale;
88+
}
89+
6890

6991
@Override
7092
public Locale resolveLocale(HttpServletRequest request) {
93+
if (getDefaultLocale() != null && request.getHeader("Accept-Language") == null) {
94+
return getDefaultLocale();
95+
}
7196
Locale locale = request.getLocale();
7297
if (!isSupportedLocale(locale)) {
7398
locale = findSupportedLocale(request, locale);

spring-webmvc/src/test/java/org/springframework/web/servlet/i18n/AcceptHeaderLocaleResolverTests.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.springframework.mock.web.test.MockHttpServletRequest;
2626

2727
import static java.util.Locale.CANADA;
28+
import static java.util.Locale.JAPANESE;
2829
import static java.util.Locale.UK;
2930
import static java.util.Locale.US;
3031
import static org.junit.Assert.assertEquals;
@@ -56,6 +57,17 @@ public void resolvePreferredNotSupported() throws Exception {
5657
assertEquals(US, this.resolver.resolveLocale(request(US, UK)));
5758
}
5859

60+
@Test
61+
public void defaultLocale() throws Exception {
62+
this.resolver.setDefaultLocale(JAPANESE);
63+
MockHttpServletRequest request = new MockHttpServletRequest();
64+
assertEquals(JAPANESE, this.resolver.resolveLocale(request));
65+
66+
request.addHeader("Accept-Language", US.toString());
67+
request.setPreferredLocales(Collections.singletonList(US));
68+
assertEquals(US, this.resolver.resolveLocale(request));
69+
}
70+
5971

6072
private HttpServletRequest request(Locale... locales) {
6173
MockHttpServletRequest request = new MockHttpServletRequest();

0 commit comments

Comments
 (0)