Skip to content
  • Benni Mack's avatar
    [FEATURE] Add unified Locale class (IETF RFC 5646) · 2412c79d
    Benni Mack authored and Georg Ringer's avatar Georg Ringer committed
    A new locale class is added in order to migrate the
    code base and the configuration towards real locales in
    form of RFC 5646 language tag (en-AT) and optional
    script code ("Hans") and optional country / region
    based on ISO 3166-1.
    This unifies handling of locales instead of dealing
    with "default" or other TYPO3-specific namings in
    user-land code and configuration.
    This locale functionality at first serves
    to handle "label files" (XLF), but will
    be further extended to also work with the locale
    to be used in the SiteLanguage object to simplify
    configuration and Date/Time Formatting based
    on php-intl.
    Thus, the first and foremost topic is
    to allow to create custom "LanguageService"
    objects out of a defined Locale instead of
    a string.
    The locale class contains the actual
    locale (such as "de-AT" or "en") but
    also allows to use the backwards-compatibility
    for the labels internally. It also contains the
    dependencies, so they do not need to be evaluated
    in various places and makes the public facing API
    much easier to understand.
    Next to the introduction of the Locale
    object, this patch also adapts various places which touch
    current LanguageService instantiations to use the Locale.
    Next Steps:
    * SiteLanguage.locale should use the object, as Locale uses a
       \Stringable interface.
    * Reduce optional settings in Site Language object and editing interface
    * A new languageService ($GLOBALS[LANG]) could and
       should be instantiated where it is needed, and not
       by re-using the same $GLOBALS[LANG] as this is needed
       This Reduce usages on $GLOBALS[LANG] by building
       a new LanguageService object based on the Context everywhere.
    * Ideally deprecate $GLOBALS[LANG] in TYPO3 v12 LTS.
    Resolves: #99694
    Releases: main
    Change-Id: I9e2464699a2e53f4e3b136e0b66351f9f3aaf71f
    Tested-by: default avatarcore-ci <>
    Tested-by: default avatarGeorg Ringer <>
    Tested-by: default avatarAndreas Fernandez <>
    Reviewed-by: default avatarGeorg Ringer <>
    Reviewed-by: default avatarAndreas Fernandez <>
    Reviewed-by: default avatarChristian Kuhn <>