---
title: "Translation loaders"
manual: "TYPO3 Explained"
version: "main"
permalink: "https://docs.typo3.org/permalink/t3coreapi:languageservice-loaders@main"
source: "ApiOverview/Localization/LocalizationApi/TranslationLoaders.rst"
rendered: "2026-09-24T12:36:55+00:00"
---

# Translation loaders {#languageservice-loaders}

<!-- TODO: no Markdown rendering for "versionchanged" -->

The TYPO3 localization system has been migrated to use Symfony Translation
components.Custom language parsers, registered via
$GLOBALS['TYPO3_CONF_VARS']['SYS']['lang']['parser']['xlf'] are not
supported anymore.

In order to load translation files TYPO3 uses class
`\TYPO3\CMS\Core\Localization\Loader\XliffLoader` for XLIFF file processing.

TYPO3 overrides the default XLIFF loader provided by Symfony to implement
special functionality like
[$GLOBALS\['TYPO3_CONF_VARS'\]\['LANG'\]\['requireApprovedLocalizations'\]](https://docs.typo3.org/permalink/t3coreapi:confval-globals-typo3-conf-vars-sys-lang-requireapprovedlocalizations@main).

## Example: a custom json translation file loader {#languageservice-loaders-custom}

<!-- TODO: no Markdown rendering for "versionadded" -->

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

**EXT:my_extension/Classes/JsonFileLoader.php**

```php
<?php

declare(strict_types=1);

namespace MyVendor\MyExtension\LanguageLoader;

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

class JsonFileLoader implements LoaderInterface
{
  public function load(mixed $resource, string $locale, string $domain = 'messages'): MessageCatalogue
  {
    $catalogue = new MessageCatalogue($locale);
    if (!is_string($resource) || !file_exists($resource)) {
      throw new \InvalidArgumentException(sprintf('Resource "%s" is not a valid file.', $resource), 1695225932);
    }
    $data = json_decode(file_get_contents($resource), true, 512, JSON_THROW_ON_ERROR);
    foreach ($data as $key => $translation) {
      $catalogue->set((string)$key, (string)$translation, $domain);
    }
    return $catalogue;
  }
}

```

Register custom loaders via configuration:

**EXT:my_extension/ext_localconf.php**

```php
$GLOBALS['TYPO3_CONF_VARS']['LANG']['loader']['json'] = \MyExtension\Translation\JsonFileLoader::class;
```
