Simplify default locale/timezone resolution in cookie/session locale resolvers
At present, the customization of the default locale and timezone resolution in CookieLocaleResolver and SessionLocaleResolver requires subclassing them and overriding determineDefaultLocale and/or determineDefaultTimeZone methods. This commit simplifies resolution of the default locale and timezone resolution by introducing dedicated functions for these purposes, thus allowing customization without needing to resort to subclassing the locale resolvers. Closes gh-27609
This commit is contained in:
committed by
Sam Brannen
parent
94cc2da33b
commit
864dcf67d8
@@ -41,6 +41,7 @@ import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
|
||||
* @author Juergen Hoeller
|
||||
* @author Rick Evans
|
||||
* @author Sam Brannen
|
||||
* @author Vedran Pavic
|
||||
*/
|
||||
class CookieLocaleResolverTests {
|
||||
|
||||
@@ -410,4 +411,24 @@ class CookieLocaleResolverTests {
|
||||
assertThat(localeCookie.getValue()).isEqualTo("");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCustomDefaultLocaleFunction() {
|
||||
request.addPreferredLocale(Locale.TAIWAN);
|
||||
|
||||
resolver.setDefaultLocaleFunction(request -> Locale.GERMAN);
|
||||
|
||||
assertThat(resolver.resolveLocale(request)).isEqualTo(Locale.GERMAN);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCustomDefaultTimeZoneFunction() {
|
||||
request.addPreferredLocale(Locale.TAIWAN);
|
||||
|
||||
resolver.setDefaultTimeZoneFunction(request -> TimeZone.getTimeZone("GMT+1"));
|
||||
|
||||
TimeZoneAwareLocaleContext context = (TimeZoneAwareLocaleContext) resolver.resolveLocaleContext(request);
|
||||
assertThat(context.getLocale()).isEqualTo(Locale.TAIWAN);
|
||||
assertThat(context.getTimeZone()).isEqualTo(TimeZone.getTimeZone("GMT+1"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -17,10 +17,12 @@
|
||||
package org.springframework.web.servlet.i18n;
|
||||
|
||||
import java.util.Locale;
|
||||
import java.util.TimeZone;
|
||||
|
||||
import jakarta.servlet.http.HttpSession;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import org.springframework.context.i18n.TimeZoneAwareLocaleContext;
|
||||
import org.springframework.web.testfixture.servlet.MockHttpServletRequest;
|
||||
import org.springframework.web.testfixture.servlet.MockHttpServletResponse;
|
||||
|
||||
@@ -31,6 +33,7 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
*
|
||||
* @author Juergen Hoeller
|
||||
* @author Sam Brannen
|
||||
* @author Vedran Pavic
|
||||
*/
|
||||
class SessionLocaleResolverTests {
|
||||
|
||||
@@ -94,4 +97,25 @@ class SessionLocaleResolverTests {
|
||||
assertThat(resolver.resolveLocale(request)).isEqualTo(Locale.TAIWAN);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCustomDefaultLocaleFunction() {
|
||||
request.addPreferredLocale(Locale.TAIWAN);
|
||||
|
||||
SessionLocaleResolver resolver = new SessionLocaleResolver();
|
||||
resolver.setDefaultLocaleFunction(request -> Locale.GERMAN);
|
||||
|
||||
assertThat(resolver.resolveLocale(request)).isEqualTo(Locale.GERMAN);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCustomDefaultTimeZoneFunction() {
|
||||
request.addPreferredLocale(Locale.TAIWAN);
|
||||
|
||||
resolver.setDefaultTimeZoneFunction(request -> TimeZone.getTimeZone("GMT+1"));
|
||||
|
||||
TimeZoneAwareLocaleContext context = (TimeZoneAwareLocaleContext) resolver.resolveLocaleContext(request);
|
||||
assertThat(context.getLocale()).isEqualTo(Locale.TAIWAN);
|
||||
assertThat(context.getTimeZone()).isEqualTo(TimeZone.getTimeZone("GMT+1"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user