Package org.springframework.web.servlet.i18n

# Class SessionLocaleResolver

java.lang.Object
org.springframework.web.servlet.i18n.AbstractLocaleResolver
org.springframework.web.servlet.i18n.AbstractLocaleContextResolver
org.springframework.web.servlet.i18n.SessionLocaleResolver

All Implemented Interfaces:
  `LocaleContextResolver`, `LocaleResolver`

public class SessionLocaleResolver extends AbstractLocaleContextResolver
`LocaleResolver` implementation that uses a locale attribute in the user's session 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 most appropriate if the application needs user sessions anyway, i.e. when the `HttpSession` does not have to be created just for storing the user's locale. The session may optionally contain an associated time zone attribute 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, for example, responding to a locale change request. As a more convenient alternative, consider using `RequestContext.changeLocale(java.util.Locale)`.

In contrast to `CookieLocaleResolver`, this strategy stores locally chosen locale settings in the Servlet container's `HttpSession`. As a consequence, those settings are just temporary for each session and therefore lost when each session terminates.

Note that there is no direct relationship with external session management mechanisms such as the "Spring Session" project. This `LocaleResolver` will simply evaluate and modify corresponding `HttpSession` attributes against the current `HttpServletRequest`.

Since:
  27.02.2003
Author:
  Juergen Hoeller, Vedran Pavic
See Also:
  - `AbstractLocaleResolver.setDefaultLocale(java.util.Locale)`
  - `AbstractLocaleContextResolver.setDefaultTimeZone(java.util.TimeZone)`

## Field Summary

Fields
Modifier and Type
Field
Description
`static final String`
`LOCALE_SESSION_ATTRIBUTE_NAME`
Default name of the session attribute that holds the Locale.
`static final String`
`TIME_ZONE_SESSION_ATTRIBUTE_NAME`
Default name of the session attribute that holds the TimeZone.

## Constructor Summary

Constructors
Constructor
Description
`SessionLocaleResolver()`

## Method Summary

Modifier and Type
Method
Description
`protected Locale`
`determineDefaultLocale(HttpServletRequest request)`
Deprecated.
as of 6.0, in favor of `setDefaultLocaleFunction(Function)`
`protected TimeZone`
`determineDefaultTimeZone(HttpServletRequest request)`
Deprecated.
as of 6.0, in favor of `setDefaultTimeZoneFunction(Function)`
`Locale`
`resolveLocale(HttpServletRequest request)`
Default implementation of `LocaleResolver.resolveLocale(HttpServletRequest)` that delegates to `LocaleContextResolver.resolveLocaleContext(HttpServletRequest)`, falling back to `ServletRequest.getLocale()` if necessary.
`org.springframework.context.i18n.LocaleContext`
`resolveLocaleContext(HttpServletRequest request)`
Resolve the current locale context via the given request.
`void`
`setDefaultLocaleFunction(Function<HttpServletRequest,Locale> defaultLocaleFunction)`
Set the function used to determine the default locale for the given request, called if no `Locale` session attribute has been found.
`void`
`setDefaultTimeZoneFunction(Function<HttpServletRequest,TimeZone> defaultTimeZoneFunction)`
Set the function used to determine the default time zone for the given request, called if no `TimeZone` session attribute has been found.
`void`
`setLocaleAttributeName(String localeAttributeName)`
Specify the name of the corresponding attribute in the `HttpSession`, holding the current `Locale` value.
`void`
`setLocaleContext(HttpServletRequest request, HttpServletResponse response, org.springframework.context.i18n.LocaleContext localeContext)`
Set the current locale context to the given one, potentially including a locale with associated time zone information.
`void`
`setTimeZoneAttributeName(String timeZoneAttributeName)`
Specify the name of the corresponding attribute in the `HttpSession`, holding the current `TimeZone` value.

### Methods inherited from class org.springframework.web.servlet.i18n.AbstractLocaleContextResolver

`getDefaultTimeZone, setDefaultTimeZone`

### Methods inherited from class org.springframework.web.servlet.i18n.AbstractLocaleResolver

`getDefaultLocale, setDefaultLocale`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface org.springframework.web.servlet.LocaleContextResolver

`setLocale`

## Field Details

### LOCALE_SESSION_ATTRIBUTE_NAME

public static final String LOCALE_SESSION_ATTRIBUTE_NAME
Default name of the session attribute that holds the Locale.

Only used internally by this implementation.

Use `RequestContext(Utils).getLocale()` to retrieve the current locale in controllers or views.

See Also:
  - `RequestContext.getLocale()`
  - `RequestContextUtils.getLocale(jakarta.servlet.http.HttpServletRequest)`

### TIME_ZONE_SESSION_ATTRIBUTE_NAME

public static final String TIME_ZONE_SESSION_ATTRIBUTE_NAME
Default name of the session attribute that holds the TimeZone.

Only used internally by this implementation.

Use `RequestContext(Utils).getTimeZone()` to retrieve the current time zone in controllers or views.

See Also:
  - `RequestContext.getTimeZone()`
  - `RequestContextUtils.getTimeZone(jakarta.servlet.http.HttpServletRequest)`

## Constructor Details

### SessionLocaleResolver

public SessionLocaleResolver()

## Method Details

### setLocaleAttributeName

public void setLocaleAttributeName(String localeAttributeName)
Specify the name of the corresponding attribute in the `HttpSession`, holding the current `Locale` value.

The default is an internal `LOCALE_SESSION_ATTRIBUTE_NAME`.

Since:
  4.3.8

### setTimeZoneAttributeName

public void setTimeZoneAttributeName(String timeZoneAttributeName)
Specify the name of the corresponding attribute in the `HttpSession`, holding the current `TimeZone` value.

The default is an internal `TIME_ZONE_SESSION_ATTRIBUTE_NAME`.

Since:
  4.3.8

### setDefaultLocaleFunction

public void setDefaultLocaleFunction(Function<HttpServletRequest,Locale> defaultLocaleFunction)
Set the function used to determine the default locale for the given request, called if no `Locale` session attribute has been found.

The default implementation returns the configured default locale, if any, and otherwise falls back to the request's `Accept-Language` header locale or the default locale for the server.

Parameters:
  `defaultLocaleFunction` - the function used to determine the default locale
Since:
  6.0
See Also:
  - `AbstractLocaleResolver.setDefaultLocale(java.util.Locale)`
  - `ServletRequest.getLocale()`

### setDefaultTimeZoneFunction

public void setDefaultTimeZoneFunction(Function<HttpServletRequest,TimeZone> defaultTimeZoneFunction)
Set the function used to determine the default time zone for the given request, called if no `TimeZone` session attribute has been found.

The default implementation returns the configured default time zone, if any, or `null` otherwise.

Parameters:
  `defaultTimeZoneFunction` - the function used to determine the default time zone
Since:
  6.0
See Also:
  - `AbstractLocaleContextResolver.setDefaultTimeZone(java.util.TimeZone)`

### resolveLocale

public Locale resolveLocale(HttpServletRequest request)
Description copied from interface: `LocaleContextResolver`
Default implementation of `LocaleResolver.resolveLocale(HttpServletRequest)` that delegates to `LocaleContextResolver.resolveLocaleContext(HttpServletRequest)`, falling back to `ServletRequest.getLocale()` if necessary.

Parameters:
  `request` - the request to resolve the locale for
Returns:
  the current locale (never `null`)

### resolveLocaleContext

public org.springframework.context.i18n.LocaleContext resolveLocaleContext(HttpServletRequest request)
Description copied from interface: `LocaleContextResolver`
Resolve the current locale context via the given request.

This is primarily intended for framework-level processing; consider using `RequestContextUtils` or `RequestContext` for application-level access to the current locale and/or time zone.

The returned context may be a `TimeZoneAwareLocaleContext`, containing a locale with associated time zone information. Simply apply an `instanceof` check and downcast accordingly.

Custom resolver implementations may also return extra settings in the returned context, which again can be accessed through downcasting.

Parameters:
  `request` - the request to resolve the locale context for
Returns:
  the current locale context (never `null`
See Also:
  - `LocaleContextResolver.resolveLocale(HttpServletRequest)`
  - `RequestContextUtils.getLocale(jakarta.servlet.http.HttpServletRequest)`
  - `RequestContextUtils.getTimeZone(jakarta.servlet.http.HttpServletRequest)`

### setLocaleContext

public void setLocaleContext(HttpServletRequest request, @Nullable HttpServletResponse response, @Nullable org.springframework.context.i18n.LocaleContext localeContext)
Description copied from interface: `LocaleContextResolver`
Set the current locale context to the given one, potentially including a locale with associated time zone information.

Parameters:
  `request` - the request to be used for locale modification
  `response` - the response to be used for locale modification
  `localeContext` - the new locale context, or `null` to clear the locale
See Also:
  - `LocaleContextResolver.setLocale(HttpServletRequest, HttpServletResponse, Locale)`
  - `SimpleLocaleContext`
  - `SimpleTimeZoneAwareLocaleContext`

### determineDefaultLocale

@Deprecated(since="6.0") protected Locale determineDefaultLocale(HttpServletRequest request)
Deprecated.
as of 6.0, in favor of `setDefaultLocaleFunction(Function)`
Determine the default locale for the given request, called if no `Locale` session attribute has been found.

The default implementation returns the configured default locale, if any, and otherwise falls back to the request's `Accept-Language` header 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:
  - `AbstractLocaleResolver.setDefaultLocale(java.util.Locale)`
  - `ServletRequest.getLocale()`

### determineDefaultTimeZone

@Deprecated(since="6.0") @Nullable protected TimeZone determineDefaultTimeZone(HttpServletRequest request)
Deprecated.
as of 6.0, in favor of `setDefaultTimeZoneFunction(Function)`
Determine the default time zone for the given request, called if no `TimeZone` session attribute has been found.

The default implementation returns the configured default time zone, if any, or `null` otherwise.

Parameters:
  `request` - the request to resolve the time zone for
Returns:
  the default time zone (or `null` if none defined)
See Also:
  - `AbstractLocaleContextResolver.setDefaultTimeZone(java.util.TimeZone)`