Package org.springframework.context.i18n

# Class LocaleContextHolder

java.lang.Object
org.springframework.context.i18n.LocaleContextHolder

public final class LocaleContextHolder extends Object
Simple holder class that associates a LocaleContext instance with the current thread. The LocaleContext will be inherited by any child threads spawned by the current thread if the `inheritable` flag is set to `true`.

Used as a central holder for the current Locale in Spring, wherever necessary: for example, in MessageSourceAccessor. DispatcherServlet automatically exposes its current Locale here. Other applications can expose theirs too, to make classes like MessageSourceAccessor automatically use that Locale.

Since:
  1.2
Author:
  Juergen Hoeller, Nicholas Williams
See Also:
  - `LocaleContext`
  - `MessageSourceAccessor`
  - `org.springframework.web.servlet.DispatcherServlet`

## Method Summary

Modifier and Type
Method
Description
`static Locale`
`getLocale()`
Return the Locale associated with the current thread, if any, or the system default Locale otherwise.
`static Locale`
`getLocale(LocaleContext localeContext)`
Return the Locale associated with the given user context, if any, or the system default Locale otherwise.
`static LocaleContext`
`getLocaleContext()`
Return the LocaleContext associated with the current thread, if any.
`static TimeZone`
`getTimeZone()`
Return the TimeZone associated with the current thread, if any, or the system default TimeZone otherwise.
`static TimeZone`
`getTimeZone(LocaleContext localeContext)`
Return the TimeZone associated with the given user context, if any, or the system default TimeZone otherwise.
`static void`
`resetLocaleContext()`
Reset the LocaleContext for the current thread.
`static void`
`setDefaultLocale(Locale locale)`
Set a shared default locale at the framework level, as an alternative to the JVM-wide default locale.
`static void`
`setDefaultTimeZone(TimeZone timeZone)`
Set a shared default time zone at the framework level, as an alternative to the JVM-wide default time zone.
`static void`
`setLocale(Locale locale)`
Associate the given Locale with the current thread, preserving any TimeZone that may have been set already.
`static void`
`setLocale(Locale locale, boolean inheritable)`
Associate the given Locale with the current thread, preserving any TimeZone that may have been set already.
`static void`
`setLocaleContext(LocaleContext localeContext)`
Associate the given LocaleContext with the current thread, not exposing it as inheritable for child threads.
`static void`
`setLocaleContext(LocaleContext localeContext, boolean inheritable)`
Associate the given LocaleContext with the current thread.
`static void`
`setTimeZone(TimeZone timeZone)`
Associate the given TimeZone with the current thread, preserving any Locale that may have been set already.
`static void`
`setTimeZone(TimeZone timeZone, boolean inheritable)`
Associate the given TimeZone with the current thread, preserving any Locale that may have been set already.

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

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

## Method Details

### resetLocaleContext

public static void resetLocaleContext()
Reset the LocaleContext for the current thread.

### setLocaleContext

public static void setLocaleContext(@Nullable LocaleContext localeContext)
Associate the given LocaleContext with the current thread, not exposing it as inheritable for child threads.

The given LocaleContext may be a `TimeZoneAwareLocaleContext`, containing a locale with associated time zone information.

Parameters:
  `localeContext` - the current LocaleContext, or `null` to reset the thread-bound context
See Also:
  - `SimpleLocaleContext`
  - `SimpleTimeZoneAwareLocaleContext`

### setLocaleContext

public static void setLocaleContext(@Nullable LocaleContext localeContext, boolean inheritable)
Associate the given LocaleContext with the current thread.

The given LocaleContext may be a `TimeZoneAwareLocaleContext`, containing a locale with associated time zone information.

Parameters:
  `localeContext` - the current LocaleContext, or `null` to reset the thread-bound context
  `inheritable` - whether to expose the LocaleContext as inheritable for child threads (using an `InheritableThreadLocal`)
See Also:
  - `SimpleLocaleContext`
  - `SimpleTimeZoneAwareLocaleContext`

### getLocaleContext

@Nullable public static LocaleContext getLocaleContext()
Return the LocaleContext associated with the current thread, if any.

Returns:
  the current LocaleContext, or `null` if none

### setLocale

public static void setLocale(@Nullable Locale locale)
Associate the given Locale with the current thread, preserving any TimeZone that may have been set already.

Will implicitly create a LocaleContext for the given Locale, not exposing it as inheritable for child threads.

Parameters:
  `locale` - the current Locale, or `null` to reset the locale part of thread-bound context
See Also:
  - `setTimeZone(TimeZone)`
  - `SimpleLocaleContext(Locale)`

### setLocale

public static void setLocale(@Nullable Locale locale, boolean inheritable)
Associate the given Locale with the current thread, preserving any TimeZone that may have been set already.

Will implicitly create a LocaleContext for the given Locale.

Parameters:
  `locale` - the current Locale, or `null` to reset the locale part of thread-bound context
  `inheritable` - whether to expose the LocaleContext as inheritable for child threads (using an `InheritableThreadLocal`)
See Also:
  - `setTimeZone(TimeZone, boolean)`
  - `SimpleLocaleContext(Locale)`

### setDefaultLocale

public static void setDefaultLocale(@Nullable Locale locale)
Set a shared default locale at the framework level, as an alternative to the JVM-wide default locale.

NOTE: This can be useful to set an application-level default locale which differs from the JVM-wide default locale. However, this requires each such application to operate against locally deployed Spring Framework jars. Do not deploy Spring as a shared library at the server level in such a scenario!

Parameters:
  `locale` - the default locale (or `null` for none, letting lookups fall back to `Locale.getDefault()`)
Since:
  4.3.5
See Also:
  - `getLocale()`
  - `Locale.getDefault()`

### getLocale

public static Locale getLocale()
Return the Locale associated with the current thread, if any, or the system default Locale otherwise. This is effectively a replacement for `Locale.getDefault()`, able to optionally respect a user-level Locale setting.

Note: This method has a fallback to the shared default Locale, either at the framework level or at the JVM-wide system level. If you'd like to check for the raw LocaleContext content (which may indicate no specific locale through `null`, use `getLocaleContext()` and call `LocaleContext.getLocale()`

Returns:
  the current Locale, or the system default Locale if no specific Locale has been associated with the current thread
See Also:
  - `getLocaleContext()`
  - `LocaleContext.getLocale()`
  - `setDefaultLocale(Locale)`
  - `Locale.getDefault()`

### getLocale

public static Locale getLocale(@Nullable LocaleContext localeContext)
Return the Locale associated with the given user context, if any, or the system default Locale otherwise. This is effectively a replacement for `Locale.getDefault()`, able to optionally respect a user-level Locale setting.

Parameters:
  `localeContext` - the user-level locale context to check
Returns:
  the current Locale, or the system default Locale if no specific Locale has been associated with the current thread
Since:
  5.0
See Also:
  - `getLocale()`
  - `LocaleContext.getLocale()`
  - `setDefaultLocale(Locale)`
  - `Locale.getDefault()`

### setTimeZone

public static void setTimeZone(@Nullable TimeZone timeZone)
Associate the given TimeZone with the current thread, preserving any Locale that may have been set already.

Will implicitly create a LocaleContext for the given Locale, not exposing it as inheritable for child threads.

Parameters:
  `timeZone` - the current TimeZone, or `null` to reset the time zone part of the thread-bound context
See Also:
  - `setLocale(Locale)`
  - `SimpleTimeZoneAwareLocaleContext(Locale, TimeZone)`

### setTimeZone

public static void setTimeZone(@Nullable TimeZone timeZone, boolean inheritable)
Associate the given TimeZone with the current thread, preserving any Locale that may have been set already.

Will implicitly create a LocaleContext for the given Locale.

Parameters:
  `timeZone` - the current TimeZone, or `null` to reset the time zone part of the thread-bound context
  `inheritable` - whether to expose the LocaleContext as inheritable for child threads (using an `InheritableThreadLocal`)
See Also:
  - `setLocale(Locale, boolean)`
  - `SimpleTimeZoneAwareLocaleContext(Locale, TimeZone)`

### setDefaultTimeZone

public static void setDefaultTimeZone(@Nullable TimeZone timeZone)
Set a shared default time zone at the framework level, as an alternative to the JVM-wide default time zone.

NOTE: This can be useful to set an application-level default time zone which differs from the JVM-wide default time zone. However, this requires each such application to operate against locally deployed Spring Framework jars. Do not deploy Spring as a shared library at the server level in such a scenario!

Parameters:
  `timeZone` - the default time zone (or `null` for none, letting lookups fall back to `TimeZone.getDefault()`)
Since:
  4.3.5
See Also:
  - `getTimeZone()`
  - `TimeZone.getDefault()`

### getTimeZone

public static TimeZone getTimeZone()
Return the TimeZone associated with the current thread, if any, or the system default TimeZone otherwise. This is effectively a replacement for `TimeZone.getDefault()`, able to optionally respect a user-level TimeZone setting.

Note: This method has a fallback to the shared default TimeZone, either at the framework level or at the JVM-wide system level. If you'd like to check for the raw LocaleContext content (which may indicate no specific time zone through `null`), use `getLocaleContext()` and call `TimeZoneAwareLocaleContext.getTimeZone()` after downcasting to `TimeZoneAwareLocaleContext`.

Returns:
  the current TimeZone, or the system default TimeZone if no specific TimeZone has been associated with the current thread
See Also:
  - `getLocaleContext()`
  - `TimeZoneAwareLocaleContext.getTimeZone()`
  - `setDefaultTimeZone(TimeZone)`
  - `TimeZone.getDefault()`

### getTimeZone

public static TimeZone getTimeZone(@Nullable LocaleContext localeContext)
Return the TimeZone associated with the given user context, if any, or the system default TimeZone otherwise. This is effectively a replacement for `TimeZone.getDefault()`, able to optionally respect a user-level TimeZone setting.

Parameters:
  `localeContext` - the user-level locale context to check
Returns:
  the current TimeZone, or the system default TimeZone if no specific TimeZone has been associated with the current thread
Since:
  5.0
See Also:
  - `getTimeZone()`
  - `TimeZoneAwareLocaleContext.getTimeZone()`
  - `setDefaultTimeZone(TimeZone)`
  - `TimeZone.getDefault()`