org.springframework.web.servlet.i18n

## Class CookieLocaleResolver

- java.lang.Object
- - org.springframework.web.util.CookieGenerator
  - - org.springframework.web.servlet.i18n.CookieLocaleResolver

- All Implemented Interfaces:
    LocaleContextResolver, LocaleResolver

      public class CookieLocaleResolver
      extends CookieGenerator
      implements LocaleContextResolver

  `LocaleResolver` implementation that uses a cookie sent back to the user in case of a custom setting, with a fallback to the specified default locale or the request's accept-header locale.

  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:
    `setDefaultLocale(java.util.Locale)`, `setDefaultTimeZone(java.util.TimeZone)`

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static String` | `DEFAULT_COOKIE_NAME` The default cookie name used if none is explicitly set.
    `static String` | `LOCALE_REQUEST_ATTRIBUTE_NAME` The name of the request attribute that holds the Locale.
    `static String` | `TIME_ZONE_REQUEST_ATTRIBUTE_NAME` The name of the request attribute that holds the TimeZone.

    - ### Fields inherited from class org.springframework.web.util.CookieGenerator

      `DEFAULT_COOKIE_MAX_AGE, DEFAULT_COOKIE_PATH, logger`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `CookieLocaleResolver()` Create a new instance of the `CookieLocaleResolver` class using the `default cookie name`.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected Locale` | `determineDefaultLocale(HttpServletRequest request)` Determine the default locale for the given request, Called if no locale cookie has been found.
    `protected TimeZone` | `determineDefaultTimeZone(HttpServletRequest request)` Determine the default time zone for the given request, Called if no TimeZone cookie has been found.
    `protected Locale` | `getDefaultLocale()` Return the fixed Locale that this resolver will return if no cookie found, if any.
    `protected TimeZone` | `getDefaultTimeZone()` Return the fixed TimeZone that this resolver will return if no cookie found, if any.
    `Locale` | `resolveLocale(HttpServletRequest request)` Resolve the current locale via the given request.
    `LocaleContext` | `resolveLocaleContext(HttpServletRequest request)` Resolve the current locale context via the given request.
    `void` | `setDefaultLocale(Locale defaultLocale)` Set a fixed Locale that this resolver will return if no cookie found.
    `void` | `setDefaultTimeZone(TimeZone defaultTimeZone)` Set a fixed TimeZone that this resolver will return if no cookie found.
    `void` | `setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale)` Set the current locale to the given one.
    `void` | `setLocaleContext(HttpServletRequest request, HttpServletResponse response, LocaleContext localeContext)` Set the current locale context to the given one, potentially including a locale with associated time zone information.

    - ### Methods inherited from class org.springframework.web.util.CookieGenerator

      `addCookie, createCookie, getCookieDomain, getCookieMaxAge, getCookieName, getCookiePath, isCookieHttpOnly, isCookieSecure, removeCookie, setCookieDomain, setCookieHttpOnly, setCookieMaxAge, setCookieName, setCookiePath, setCookieSecure`

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

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

- - ### Field Detail

    - #### LOCALE_REQUEST_ATTRIBUTE_NAME

          public static final String LOCALE_REQUEST_ATTRIBUTE_NAME

      The name of the request attribute that holds the Locale.

      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:
        `RequestContext.getLocale()`, `RequestContextUtils.getLocale(javax.servlet.http.HttpServletRequest)`

    - #### TIME_ZONE_REQUEST_ATTRIBUTE_NAME

          public static final String TIME_ZONE_REQUEST_ATTRIBUTE_NAME

      The name of the request attribute that holds the TimeZone.

      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:
        `RequestContext.getTimeZone()`, `RequestContextUtils.getTimeZone(javax.servlet.http.HttpServletRequest)`

    - #### DEFAULT_COOKIE_NAME

          public static final String DEFAULT_COOKIE_NAME

      The default cookie name used if none is explicitly set.

  - ### Constructor Detail

    - #### CookieLocaleResolver

          public CookieLocaleResolver()

      Create a new instance of the `CookieLocaleResolver` class using the `default cookie name`.

  - ### Method Detail

    - #### setDefaultLocale

          public void setDefaultLocale(Locale defaultLocale)

      Set a fixed Locale that this resolver will return if no cookie found.

    - #### getDefaultLocale

          protected Locale getDefaultLocale()

      Return the fixed Locale that this resolver will return if no cookie found, if any.

    - #### setDefaultTimeZone

          public void setDefaultTimeZone(TimeZone defaultTimeZone)

      Set a fixed TimeZone that this resolver will return if no cookie found.

    - #### getDefaultTimeZone

          protected TimeZone getDefaultTimeZone()

      Return the fixed TimeZone that this resolver will return if no cookie found, if any.

    - #### resolveLocale

          public Locale resolveLocale(HttpServletRequest request)

      Description copied from interface: `LocaleResolver`
      Resolve the current locale via the given request. Can return a default locale as fallback in any case.
      Specified by:
        `resolveLocale` in interface `LocaleResolver`
      Parameters:
        `request` - the request to resolve the locale for
      Returns:
        the current locale (never `null`)

    - #### resolveLocaleContext

          public 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.

      Specified by:
        `resolveLocaleContext` in interface `LocaleContextResolver`
      Parameters:
        `request` - the request to resolve the locale context for
      Returns:
        the current locale context (never `null`
      See Also:
        `LocaleResolver.resolveLocale(HttpServletRequest)`, `RequestContextUtils.getLocale(javax.servlet.http.HttpServletRequest)`, `RequestContextUtils.getTimeZone(javax.servlet.http.HttpServletRequest)`

    - #### setLocale

          public void setLocale(HttpServletRequest request,
                                HttpServletResponse response,
                                Locale locale)

      Description copied from interface: `LocaleResolver`
      Set the current locale to the given one.
      Specified by:
        `setLocale` in interface `LocaleResolver`
      Parameters:
        `request` - the request to be used for locale modification
        `response` - the response to be used for locale modification
        `locale` - the new locale, or `null` to clear the locale

    - #### setLocaleContext

          public void setLocaleContext(HttpServletRequest request,
                                       HttpServletResponse response,
                                       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.
      Specified by:
        `setLocaleContext` in interface `LocaleContextResolver`
      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:
        `LocaleResolver.setLocale(HttpServletRequest, HttpServletResponse, Locale)`, `SimpleLocaleContext`, `SimpleTimeZoneAwareLocaleContext`

    - #### determineDefaultLocale

          protected Locale determineDefaultLocale(HttpServletRequest request)

      Determine the default locale for the given request, Called if no locale cookie has been found.

      The default implementation returns the specified default locale, if any, else falls back to the request's accept-header locale.

      Parameters:
        `request` - the request to resolve the locale for
      Returns:
        the default locale (never `null`)
      See Also:
        `setDefaultLocale(java.util.Locale)`, `ServletRequest.getLocale()`

    - #### determineDefaultTimeZone

          protected TimeZone determineDefaultTimeZone(HttpServletRequest request)

      Determine the default time zone for the given request, Called if no TimeZone cookie has been found.

      The default implementation returns the specified 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:
        `setDefaultTimeZone(java.util.TimeZone)`