Top Description Fields Constructors Methods
org.springframework.context.i18n

public final Class LocaleContextHolder

extends Object
Class Inheritance
Imports
java.util.Locale, .TimeZone, org.springframework.core.NamedInheritableThreadLocal, .NamedThreadLocal, org.springframework.lang.Nullable

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.

Authors
Juergen Hoeller, Nicholas Williams
Since
1.2
See Also
LocaleContext, org.springframework.context.support.MessageSourceAccessor, org.springframework.web.servlet.DispatcherServlet

Field Summary

Modifier and TypeField and Description
private static Locale
private static TimeZone
private static final ThreadLocal<LocaleContext>
private static final ThreadLocal<LocaleContext>

Constructor Summary

AccessConstructor and Description
private

Method Summary

Modifier and TypeMethod and Description
public static Locale

Returns:

the current Locale, or the system default Locale if no specific Locale has been associated with the current thread
getLocale
()

Return the Locale associated with the current thread, if any, or the system default Locale otherwise.

public static Locale

Returns:

the current Locale, or the system default Locale if no specific Locale has been associated with the current thread
getLocale
(LocaleContext
the user-level locale context to check
localeContext
)

Return the Locale associated with the given user context, if any, or the system default Locale otherwise.

public static LocaleContext

Returns:

the current LocaleContext, or null if none
getLocaleContext
()

Return the LocaleContext associated with the current thread, if any.

public static TimeZone

Returns:

the current TimeZone, or the system default TimeZone if no specific TimeZone has been associated with the current thread
getTimeZone
()

Return the TimeZone associated with the current thread, if any, or the system default TimeZone otherwise.

public static TimeZone

Returns:

the current TimeZone, or the system default TimeZone if no specific TimeZone has been associated with the current thread
getTimeZone
(LocaleContext
the user-level locale context to check
localeContext
)

Return the TimeZone associated with the given user context, if any, or the system default TimeZone otherwise.

public static void
resetLocaleContext()

Reset the LocaleContext for the current thread.

public static void
setDefaultLocale(Locale
the default locale (or null for none, letting lookups fall back to Locale#getDefault())
locale
)

Set a shared default locale at the framework level, as an alternative to the JVM-wide default locale.

public static void
setDefaultTimeZone(TimeZone
the default time zone (or null for none, letting lookups fall back to TimeZone#getDefault())
timeZone
)

Set a shared default time zone at the framework level, as an alternative to the JVM-wide default time zone.

public static void
setLocale(Locale
the current Locale, or null to reset the locale part of thread-bound context
locale
)

Associate the given Locale with the current thread, preserving any TimeZone that may have been set already.

public static void
setLocale(Locale
the current Locale, or null to reset the locale part of thread-bound context
locale
,
boolean
whether to expose the LocaleContext as inheritable for child threads (using an InheritableThreadLocal)
inheritable
)

Associate the given Locale with the current thread, preserving any TimeZone that may have been set already.

public static void
setLocaleContext(LocaleContext
the current LocaleContext, or null to reset the thread-bound context
localeContext
)

Associate the given LocaleContext with the current thread, not exposing it as inheritable for child threads.

public static void
setLocaleContext(LocaleContext
the current LocaleContext, or null to reset the thread-bound context
localeContext
,
boolean
whether to expose the LocaleContext as inheritable for child threads (using an InheritableThreadLocal)
inheritable
)

Associate the given LocaleContext with the current thread.

public static void
setTimeZone(TimeZone
the current TimeZone, or null to reset the time zone part of the thread-bound context
timeZone
)

Associate the given TimeZone with the current thread, preserving any Locale that may have been set already.

public static void
setTimeZone(TimeZone
the current TimeZone, or null to reset the time zone part of the thread-bound context
timeZone
,
boolean
whether to expose the LocaleContext as inheritable for child threads (using an InheritableThreadLocal)
inheritable
)

Associate the given TimeZone with the current thread, preserving any Locale that may have been set already.

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

defaultLocaleback to summary
private static Locale defaultLocale
Annotations
@Nullable
defaultTimeZoneback to summary
private static TimeZone defaultTimeZone
Annotations
@Nullable
inheritableLocaleContextHolderback to summary
private static final ThreadLocal<LocaleContext> inheritableLocaleContextHolder
localeContextHolderback to summary
private static final ThreadLocal<LocaleContext> localeContextHolder

Constructor Detail

LocaleContextHolderback to summary
private LocaleContextHolder()

Method Detail

getLocaleback to summary
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 java.util.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:Locale

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), java.util.Locale#getDefault()
getLocaleback to summary
public static Locale getLocale(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 java.util.Locale#getDefault(), able to optionally respect a user-level Locale setting.

Parameters
localeContext:LocaleContext

the user-level locale context to check

Returns:Locale

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), java.util.Locale#getDefault()
getLocaleContextback to summary
public static LocaleContext getLocaleContext()

Return the LocaleContext associated with the current thread, if any.

Returns:LocaleContext

the current LocaleContext, or null if none

Annotations
@Nullable
getTimeZoneback to summary
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 java.util.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:TimeZone

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), java.util.TimeZone#getDefault()
getTimeZoneback to summary
public static TimeZone getTimeZone(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 java.util.TimeZone#getDefault(), able to optionally respect a user-level TimeZone setting.

Parameters
localeContext:LocaleContext

the user-level locale context to check

Returns:TimeZone

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), java.util.TimeZone#getDefault()
resetLocaleContextback to summary
public static void resetLocaleContext()

Reset the LocaleContext for the current thread.

setDefaultLocaleback to summary
public static void setDefaultLocale(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:Locale

the default locale (or null for none, letting lookups fall back to Locale#getDefault())

Since
4.3.5
See Also
getLocale(), Locale#getDefault()
setDefaultTimeZoneback to summary
public 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.

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: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()
setLocaleback to summary
public static void setLocale(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:Locale

the current Locale, or null to reset the locale part of thread-bound context

See Also
setTimeZone(TimeZone), SimpleLocaleContext#SimpleLocaleContext(Locale)
setLocaleback to summary
public static void setLocale(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:Locale

the current Locale, or null to reset the locale part of thread-bound context

inheritable:boolean

whether to expose the LocaleContext as inheritable for child threads (using an InheritableThreadLocal)

See Also
setTimeZone(TimeZone, boolean), SimpleLocaleContext#SimpleLocaleContext(Locale)
setLocaleContextback to summary
public static void setLocaleContext(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:LocaleContext

the current LocaleContext, or null to reset the thread-bound context

See Also
SimpleLocaleContext, SimpleTimeZoneAwareLocaleContext
setLocaleContextback to summary
public static void setLocaleContext(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:LocaleContext

the current LocaleContext, or null to reset the thread-bound context

inheritable:boolean

whether to expose the LocaleContext as inheritable for child threads (using an InheritableThreadLocal)

See Also
SimpleLocaleContext, SimpleTimeZoneAwareLocaleContext
setTimeZoneback to summary
public static void setTimeZone(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:TimeZone

the current TimeZone, or null to reset the time zone part of the thread-bound context

See Also
setLocale(Locale), SimpleTimeZoneAwareLocaleContext#SimpleTimeZoneAwareLocaleContext(Locale, TimeZone)
setTimeZoneback to summary
public static void setTimeZone(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:TimeZone

the current TimeZone, or null to reset the time zone part of the thread-bound context

inheritable:boolean

whether to expose the LocaleContext as inheritable for child threads (using an InheritableThreadLocal)

See Also
setLocale(Locale, boolean), SimpleTimeZoneAwareLocaleContext#SimpleTimeZoneAwareLocaleContext(Locale, TimeZone)