org.springframework.context.i18n

Class LocaleContextHolder

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


  • public final class LocaleContextHolder
    extends java.lang.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, DispatcherServlet
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method and Description
      static java.util.Locale getLocale()
      Return the Locale associated with the current thread, if any, or the system default Locale otherwise.
      static java.util.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 java.util.TimeZone getTimeZone()
      Return the TimeZone associated with the current thread, if any, or the system default TimeZone otherwise.
      static java.util.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(java.util.Locale locale)
      Set a shared default locale at the framework level, as an alternative to the JVM-wide default locale.
      static void setDefaultTimeZone(java.util.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(java.util.Locale locale)
      Associate the given Locale with the current thread, preserving any TimeZone that may have been set already.
      static void setLocale(java.util.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(java.util.TimeZone timeZone)
      Associate the given TimeZone with the current thread, preserving any Locale that may have been set already.
      static void setTimeZone(java.util.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 Detail

      • resetLocaleContext

        public static void resetLocaleContext()
        Reset the LocaleContext for the current thread.
      • 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
                                     java.util.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.SimpleLocaleContext(Locale)
      • setLocale

        public static void setLocale(@Nullable
                                     java.util.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.SimpleLocaleContext(Locale)
      • setDefaultLocale

        public static void setDefaultLocale(@Nullable
                                            java.util.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 java.util.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 java.util.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
                                       java.util.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.SimpleTimeZoneAwareLocaleContext(Locale, TimeZone)
      • setDefaultTimeZone

        public static void setDefaultTimeZone(@Nullable
                                              java.util.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 java.util.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 java.util.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()