Polish contribution

See gh-27609
This commit is contained in:
Sam Brannen 2022-06-03 11:49:27 +02:00
parent 864dcf67d8
commit 0a7a53af6d
7 changed files with 55 additions and 35 deletions

View File

@ -29,10 +29,12 @@ import org.springframework.lang.Nullable;
* Extension of {@link LocaleResolver} that adds support for a rich locale context
* (potentially including locale and time zone information).
*
* <p>Also provides pre-implemented versions of {@link #resolveLocale} and {@link #setLocale},
* delegating to {@link #resolveLocaleContext} and {@link #setLocaleContext}.
* <p>Also provides {@code default} implementations of {@link #resolveLocale} and
* {@link #setLocale} which delegate to {@link #resolveLocaleContext} and
* {@link #setLocaleContext}, respectively.
*
* @author Juergen Hoeller
* @author Sam Brannen
* @since 4.0
* @see org.springframework.context.i18n.LocaleContext
* @see org.springframework.context.i18n.TimeZoneAwareLocaleContext
@ -77,12 +79,32 @@ public interface LocaleContextResolver extends LocaleResolver {
void setLocaleContext(HttpServletRequest request, @Nullable HttpServletResponse response,
@Nullable LocaleContext localeContext);
/**
* Default implementation of {@link LocaleResolver#resolveLocale(HttpServletRequest)}
* that delegates to {@link #resolveLocaleContext(HttpServletRequest)}, falling
* back to {@link HttpServletRequest#getLocale()} if necessary.
* @param request the request to resolve the locale for
* @return the current locale (never {@code null})
* @since 6.0
*/
@Override
default Locale resolveLocale(HttpServletRequest request) {
Locale locale = resolveLocaleContext(request).getLocale();
return (locale != null ? locale : request.getLocale());
}
/**
* Default implementation of {@link LocaleResolver#setLocale(HttpServletRequest,
* HttpServletResponse, Locale)} that delegates to
* {@link #setLocaleContext(HttpServletRequest, HttpServletResponse, LocaleContext)},
* using a {@link SimpleLocaleContext}.
* @param request the request to be used for locale modification
* @param response the response to be used for locale modification
* @param locale the new locale, or {@code null} to clear the locale
* @throws UnsupportedOperationException if the LocaleResolver implementation
* does not support dynamic changing of the locale
* @since 6.0
*/
@Override
default void setLocale(HttpServletRequest request, @Nullable HttpServletResponse response, @Nullable Locale locale) {
setLocaleContext(request, response, (locale != null ? new SimpleLocaleContext(locale) : null));

View File

@ -24,8 +24,8 @@ import org.springframework.web.servlet.LocaleContextResolver;
/**
* Abstract base class for {@link LocaleContextResolver} implementations.
*
* <p>Provides support for a {@linkplain #setDefaultLocale(Locale) default locale}
* and a {@linkplain #setDefaultTimeZone(TimeZone) default time zone}.
* <p>Provides support for a {@linkplain #setDefaultLocale(java.util.Locale) default
* locale} and a {@linkplain #setDefaultTimeZone(TimeZone) default time zone}.
*
* @author Juergen Hoeller
* @since 4.0

View File

@ -52,6 +52,7 @@ import org.springframework.web.util.WebUtils;
* @author Juergen Hoeller
* @author Jean-Pierre Pawlak
* @author Vedran Pavic
* @author Sam Brannen
* @since 27.02.2003
* @see #setDefaultLocale
* @see #setDefaultTimeZone
@ -98,10 +99,7 @@ public class CookieLocaleResolver extends CookieGenerator implements LocaleConte
private Function<HttpServletRequest, Locale> defaultLocaleFunction = request -> {
Locale defaultLocale = getDefaultLocale();
if (defaultLocale == null) {
defaultLocale = request.getLocale();
}
return defaultLocale;
return (defaultLocale != null ? defaultLocale : request.getLocale());
};
private Function<HttpServletRequest, TimeZone> defaultTimeZoneFunction = request -> getDefaultTimeZone();
@ -199,9 +197,11 @@ public class CookieLocaleResolver extends CookieGenerator implements LocaleConte
/**
* Set the function used to determine the default locale for the given request,
* called if no {@link Locale} session attribute has been found.
* <p>The default implementation returns the specified default locale,
* if any, else falls back to the request's accept-header locale.
* called if no locale cookie has been found.
* <p>The default implementation returns the configured
* {@linkplain #setDefaultLocale(Locale) default locale}, if any, and otherwise
* falls back to the request's {@code Accept-Language} header locale or the
* default locale for the server.
* @param defaultLocaleFunction the function used to determine the default locale
* @since 6.0
* @see #setDefaultLocale
@ -214,8 +214,8 @@ public class CookieLocaleResolver extends CookieGenerator implements LocaleConte
/**
* Set the function used to determine the default time zone for the given request,
* called if no {@link TimeZone} session attribute has been found.
* <p>The default implementation returns the specified default time zone,
* called if no locale cookie has been found.
* <p>The default implementation returns the configured default time zone,
* if any, or {@code null} otherwise.
* @param defaultTimeZoneFunction the function used to determine the default time zone
* @since 6.0
@ -321,8 +321,8 @@ public class CookieLocaleResolver extends CookieGenerator implements LocaleConte
TimeZone timeZone = null;
if (localeContext != null) {
locale = localeContext.getLocale();
if (localeContext instanceof TimeZoneAwareLocaleContext) {
timeZone = ((TimeZoneAwareLocaleContext) localeContext).getTimeZone();
if (localeContext instanceof TimeZoneAwareLocaleContext timeZoneAwareLocaleContext) {
timeZone = timeZoneAwareLocaleContext.getTimeZone();
}
addCookie(response,
(locale != null ? toLocaleValue(locale) : "-") + (timeZone != null ? '/' + timeZone.getID() : ""));

View File

@ -90,10 +90,7 @@ public class SessionLocaleResolver extends AbstractLocaleContextResolver {
private Function<HttpServletRequest, Locale> defaultLocaleFunction = request -> {
Locale defaultLocale = getDefaultLocale();
if (defaultLocale == null) {
defaultLocale = request.getLocale();
}
return defaultLocale;
return (defaultLocale != null ? defaultLocale : request.getLocale());
};
private Function<HttpServletRequest, TimeZone> defaultTimeZoneFunction = request -> getDefaultTimeZone();
@ -121,8 +118,10 @@ public class SessionLocaleResolver extends AbstractLocaleContextResolver {
/**
* Set the function used to determine the default locale for the given request,
* called if no {@link Locale} session attribute has been found.
* <p>The default implementation returns the specified default locale,
* if any, else falls back to the request's accept-header locale.
* <p>The default implementation returns the configured
* {@linkplain #setDefaultLocale(Locale) default locale}, if any, and otherwise
* falls back to the request's {@code Accept-Language} header locale or the
* default locale for the server.
* @param defaultLocaleFunction the function used to determine the default locale
* @since 6.0
* @see #setDefaultLocale
@ -136,7 +135,7 @@ public class SessionLocaleResolver extends AbstractLocaleContextResolver {
/**
* Set the function used to determine the default time zone for the given request,
* called if no {@link TimeZone} session attribute has been found.
* <p>The default implementation returns the specified default time zone,
* <p>The default implementation returns the configured default time zone,
* if any, or {@code null} otherwise.
* @param defaultTimeZoneFunction the function used to determine the default time zone
* @since 6.0
@ -163,7 +162,7 @@ public class SessionLocaleResolver extends AbstractLocaleContextResolver {
public Locale getLocale() {
Locale locale = (Locale) WebUtils.getSessionAttribute(request, localeAttributeName);
if (locale == null) {
locale = SessionLocaleResolver.this.defaultLocaleFunction.apply(request);
locale = defaultLocaleFunction.apply(request);
}
return locale;
}
@ -172,7 +171,7 @@ public class SessionLocaleResolver extends AbstractLocaleContextResolver {
public TimeZone getTimeZone() {
TimeZone timeZone = (TimeZone) WebUtils.getSessionAttribute(request, timeZoneAttributeName);
if (timeZone == null) {
timeZone = SessionLocaleResolver.this.defaultTimeZoneFunction.apply(request);
timeZone = defaultTimeZoneFunction.apply(request);
}
return timeZone;
}
@ -187,8 +186,8 @@ public class SessionLocaleResolver extends AbstractLocaleContextResolver {
TimeZone timeZone = null;
if (localeContext != null) {
locale = localeContext.getLocale();
if (localeContext instanceof TimeZoneAwareLocaleContext) {
timeZone = ((TimeZoneAwareLocaleContext) localeContext).getTimeZone();
if (localeContext instanceof TimeZoneAwareLocaleContext timeZoneAwareLocaleContext) {
timeZone = timeZoneAwareLocaleContext.getTimeZone();
}
}
WebUtils.setSessionAttribute(request, this.localeAttributeName, locale);

View File

@ -171,10 +171,10 @@ public abstract class RequestContextUtils {
@Nullable
public static TimeZone getTimeZone(HttpServletRequest request) {
LocaleResolver localeResolver = getLocaleResolver(request);
if (localeResolver instanceof LocaleContextResolver) {
LocaleContext localeContext = ((LocaleContextResolver) localeResolver).resolveLocaleContext(request);
if (localeContext instanceof TimeZoneAwareLocaleContext) {
return ((TimeZoneAwareLocaleContext) localeContext).getTimeZone();
if (localeResolver instanceof LocaleContextResolver localeContextResolver) {
LocaleContext localeContext = localeContextResolver.resolveLocaleContext(request);
if (localeContext instanceof TimeZoneAwareLocaleContext timeZoneAwareLocaleContext) {
return timeZoneAwareLocaleContext.getTimeZone();
}
}
return null;

View File

@ -412,7 +412,7 @@ class CookieLocaleResolverTests {
}
@Test
void testCustomDefaultLocaleFunction() {
void customDefaultLocaleFunction() {
request.addPreferredLocale(Locale.TAIWAN);
resolver.setDefaultLocaleFunction(request -> Locale.GERMAN);
@ -421,7 +421,7 @@ class CookieLocaleResolverTests {
}
@Test
void testCustomDefaultTimeZoneFunction() {
void customDefaultTimeZoneFunction() {
request.addPreferredLocale(Locale.TAIWAN);
resolver.setDefaultTimeZoneFunction(request -> TimeZone.getTimeZone("GMT+1"));

View File

@ -98,17 +98,16 @@ class SessionLocaleResolverTests {
}
@Test
void testCustomDefaultLocaleFunction() {
void customDefaultLocaleFunction() {
request.addPreferredLocale(Locale.TAIWAN);
SessionLocaleResolver resolver = new SessionLocaleResolver();
resolver.setDefaultLocaleFunction(request -> Locale.GERMAN);
assertThat(resolver.resolveLocale(request)).isEqualTo(Locale.GERMAN);
}
@Test
void testCustomDefaultTimeZoneFunction() {
void customDefaultTimeZoneFunction() {
request.addPreferredLocale(Locale.TAIWAN);
resolver.setDefaultTimeZoneFunction(request -> TimeZone.getTimeZone("GMT+1"));