---
title: "Feature: #107436 - Symfony Translation Component integration"
manual: "TYPO3 Core Changelog"
version: "main"
permalink: "https://docs.typo3.org/permalink/changelog:feature-107436-1736639846"
source: "Changelog/14.0/Feature-107436-SymfonyTranslationIntegration.rst"
typo3-version: "14.0"
typo3-major: 14
type: "feature"
issue: 107436
forge: "https://forge.typo3.org/issues/107436"
tags: ["PHP-API", "Backend", "ext:core"]
rendered: "2026-09-23T15:24:25+00:00"
---

# Feature: #107436 - Symfony Translation Component integration {#feature-107436-1736639846}

See [forge#107436](https://forge.typo3.org/issues/107436)

## Description {#description}

TYPO3 now utilizes the Symfony Translation component for reading localization
label files such as XLIFF and PO, instead of its custom localization parsers.

The migration brings several improvements:

-   Standardized file parsing using Symfony's translation loaders
-   Enhanced API for accessing translation catalogues
-   Support for custom translation loaders following Symfony standards

The new system maintains backward compatibility while providing a modern
foundation for future improvements with translatable labels.

In addition, all label-related configuration options have been streamlined
under the `$GLOBALS['TYPO3_CONF_VARS']['LANG']` namespace.

The following new configuration options have been introduced:

-   **`$GLOBALS['TYPO3_CONF_VARS']['LANG']['loader']`**

    Configure custom translation loaders.

-   **`$GLOBALS['TYPO3_CONF_VARS']['LANG']['requireApprovedLocalizations']`**

    Moved from `SYS.lang`.

-   **`$GLOBALS['TYPO3_CONF_VARS']['LANG']['format']`**

    Moved from `SYS.lang`.

-   **`$GLOBALS['TYPO3_CONF_VARS']['LANG']['availableLocales']`**

    Moved from `EXTCONF.lang`.

-   **`$GLOBALS['TYPO3_CONF_VARS']['LANG']['resourceOverrides']`**

    Moved from `SYS.locallangXMLOverride`.

## Custom translation loaders {#custom-translation-loaders}

Extension developers can now implement custom translation loaders by
implementing Symfony's translation loader interfaces:

**Example custom loader**

```php
use Symfony\Component\Translation\Loader\LoaderInterface;
use Symfony\Component\Translation\MessageCatalogue;

class CustomLoader implements LoaderInterface
{
    public function load(mixed $resource, string $locale, string $domain = 'messages'): MessageCatalogue
    {
        // Custom loading logic
        $catalogue = new MessageCatalogue($locale);
        // ... populate catalogue
        return $catalogue;
    }
}
```

Register custom loaders via configuration:

**Register custom loader in configuration**

```php
$GLOBALS['TYPO3_CONF_VARS']['LANG']['loader']['fileEnding']
    = \MyVendor\MyExtension\Translation\CustomLoader::class;
```

## Impact {#impact}

All previous configuration options have been moved to the new
`$GLOBALS['TYPO3_CONF_VARS']['LANG']` namespace. These are automatically
migrated to the new location when accessing the install tool.

Please note: This functionality only affects the internal handling of
translation files ("locallang" files). The public API of the localization
system remains unchanged.
