Class CookieLocaleResolver
- All Implemented Interfaces:
org.springframework.web.servlet.LocaleContextResolver,org.springframework.web.servlet.LocaleResolver
- Direct Known Subclasses:
ConfigAwareCookieLocaleResolver
LocaleResolver implementation that uses a cookie sent back to the user
in case of a custom setting, with a fallback to the configured default locale,
the request's Accept-Language header, or the default locale for the server.
This is particularly useful for stateless applications without user sessions. The cookie may optionally contain an associated time zone value as well; alternatively, you may specify a default time zone.
Custom controllers can override the user's locale and time zone by calling
#setLocale(Context) on the resolver, e.g. responding to a locale change
request. As a more convenient alternative, consider using
RequestContext.changeLocale(java.util.Locale).
- Since:
- 27.02.2003
- Author:
- Juergen Hoeller, Jean-Pierre Pawlak
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final StringThe default cookie name used if none is explicitly set.static final StringThe name of the request attribute that holds theLocale.static final StringThe name of the request attribute that holds theTimeZone.Fields inherited from class org.springframework.web.util.CookieGenerator
DEFAULT_COOKIE_PATH, logger -
Constructor Summary
ConstructorsConstructorDescriptionCreate a new instance ofCookieLocaleResolverusing the default cookie name. -
Method Summary
Modifier and TypeMethodDescriptionprotected LocaledetermineDefaultLocale(jakarta.servlet.http.HttpServletRequest request) Determine the default locale for the given request, called if no locale cookie has been found.protected TimeZonedetermineDefaultTimeZone(jakarta.servlet.http.HttpServletRequest request) Determine the default time zone for the given request, called if no locale cookie has been found.protected LocaleReturn the fixed locale that this resolver will return if no cookie is found, if any.protected TimeZoneReturn the fixed time zone that this resolver will return if no cookie is found, if any.booleanReturn whether this resolver's cookies should be compliant with BCP 47 language tags instead of Java's legacy locale specification format.booleanReturn whether to reject cookies with invalid content (e.g. invalid format).protected LocaleparseLocaleValue(String localeValue) Parse the given locale value coming from an incoming cookie.resolveLocale(jakarta.servlet.http.HttpServletRequest request) org.springframework.context.i18n.LocaleContextresolveLocaleContext(jakarta.servlet.http.HttpServletRequest request) voidsetDefaultLocale(Locale defaultLocale) Set a fixed locale that this resolver will return if no cookie is found.voidsetDefaultTimeZone(TimeZone defaultTimeZone) Set a fixed time zone that this resolver will return if no cookie is found.voidsetLanguageTagCompliant(boolean languageTagCompliant) Specify whether this resolver's cookies should be compliant with BCP 47 language tags instead of Java's legacy locale specification format.voidsetLocale(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response, Locale locale) voidsetLocaleContext(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response, org.springframework.context.i18n.LocaleContext localeContext) voidsetRejectInvalidCookies(boolean rejectInvalidCookies) Specify whether to reject cookies with invalid content (e.g. invalid format).protected StringtoLocaleValue(Locale locale) Render the given locale as a text value for inclusion in a cookie.Methods inherited from class org.springframework.web.util.CookieGenerator
addCookie, createCookie, getCookieDomain, getCookieMaxAge, getCookieName, getCookiePath, isCookieHttpOnly, isCookieSecure, removeCookie, setCookieDomain, setCookieHttpOnly, setCookieMaxAge, setCookieName, setCookiePath, setCookieSecure
-
Field Details
-
LOCALE_REQUEST_ATTRIBUTE_NAME
The name of the request attribute that holds theLocale.Only used for overriding a cookie value if the locale has been changed in the course of the current request!
Use
RequestContext(Utils).getLocale()to retrieve the current locale in controllers or views.- See Also:
-
TIME_ZONE_REQUEST_ATTRIBUTE_NAME
The name of the request attribute that holds theTimeZone.Only used for overriding a cookie value if the locale has been changed in the course of the current request!
Use
RequestContext(Utils).getTimeZone()to retrieve the current time zone in controllers or views.- See Also:
-
DEFAULT_COOKIE_NAME
The default cookie name used if none is explicitly set.
-
-
Constructor Details
-
CookieLocaleResolver
public CookieLocaleResolver()Create a new instance ofCookieLocaleResolverusing the default cookie name.
-
-
Method Details
-
setLanguageTagCompliant
public void setLanguageTagCompliant(boolean languageTagCompliant) Specify whether this resolver's cookies should be compliant with BCP 47 language tags instead of Java's legacy locale specification format.The default is
true, as of 5.1. Switch this tofalsefor rendering Java's legacy locale specification format. For parsing, this resolver leniently accepts the legacyLocale.toString()format as well as BCP 47 language tags in any case.- Since:
- 4.3
- See Also:
-
isLanguageTagCompliant
public boolean isLanguageTagCompliant()Return whether this resolver's cookies should be compliant with BCP 47 language tags instead of Java's legacy locale specification format.- Since:
- 4.3
-
setRejectInvalidCookies
public void setRejectInvalidCookies(boolean rejectInvalidCookies) Specify whether to reject cookies with invalid content (e.g. invalid format).The default is
true. Turn this off for lenient handling of parse failures, falling back to the default locale and time zone in such a case.- Since:
- 5.1.7
- See Also:
-
isRejectInvalidCookies
public boolean isRejectInvalidCookies()Return whether to reject cookies with invalid content (e.g. invalid format).- Since:
- 5.1.7
-
setDefaultLocale
Set a fixed locale that this resolver will return if no cookie is found. -
getDefaultLocale
Return the fixed locale that this resolver will return if no cookie is found, if any. -
setDefaultTimeZone
Set a fixed time zone that this resolver will return if no cookie is found.- Since:
- 4.0
-
getDefaultTimeZone
Return the fixed time zone that this resolver will return if no cookie is found, if any.- Since:
- 4.0
-
resolveLocale
- Specified by:
resolveLocalein interfaceorg.springframework.web.servlet.LocaleContextResolver- Specified by:
resolveLocalein interfaceorg.springframework.web.servlet.LocaleResolver
-
resolveLocaleContext
public org.springframework.context.i18n.LocaleContext resolveLocaleContext(jakarta.servlet.http.HttpServletRequest request) - Specified by:
resolveLocaleContextin interfaceorg.springframework.web.servlet.LocaleContextResolver
-
setLocale
public void setLocale(jakarta.servlet.http.HttpServletRequest request, @Nullable jakarta.servlet.http.HttpServletResponse response, @Nullable Locale locale) - Specified by:
setLocalein interfaceorg.springframework.web.servlet.LocaleContextResolver- Specified by:
setLocalein interfaceorg.springframework.web.servlet.LocaleResolver
-
setLocaleContext
public void setLocaleContext(jakarta.servlet.http.HttpServletRequest request, @Nullable jakarta.servlet.http.HttpServletResponse response, @Nullable org.springframework.context.i18n.LocaleContext localeContext) - Specified by:
setLocaleContextin interfaceorg.springframework.web.servlet.LocaleContextResolver
-
parseLocaleValue
Parse the given locale value coming from an incoming cookie.The default implementation calls
StringUtils.parseLocale(String), accepting theLocale.toString()format as well as BCP 47 language tags.- Parameters:
localeValue- the locale value to parse- Returns:
- the corresponding
Localeinstance - Since:
- 4.3
- See Also:
-
toLocaleValue
Render the given locale as a text value for inclusion in a cookie.The default implementation calls
Locale.toString()orLocale.toLanguageTag(), depending on the"languageTagCompliant"configuration property.- Parameters:
locale- the locale to convert to a string- Returns:
- a String representation for the given locale
- Since:
- 4.3
- See Also:
-
determineDefaultLocale
Determine the default locale for the given request, called if no locale cookie has been found.The default implementation returns the configured default locale, if any, and otherwise falls back to the request's
Accept-Languageheader locale or the default locale for the server.- Parameters:
request- the request to resolve the locale for- Returns:
- the default locale (never
null) - See Also:
-
determineDefaultTimeZone
@Nullable protected TimeZone determineDefaultTimeZone(jakarta.servlet.http.HttpServletRequest request) Determine the default time zone for the given request, called if no locale cookie has been found.The default implementation returns the configured default time zone, if any, or
nullotherwise.- Parameters:
request- the request to resolve the time zone for- Returns:
- the default time zone (or
nullif none defined) - See Also:
-