Translation loaders
Changed in version 14.0
The TYPO3 localization system has been migrated to use Symfony Translation components.
Custom language parsers, registered via
$GLOBALS
are not
supported anymore.
In order to load translation files TYPO3 uses class
\TYPO3\
for XLIFF file processing.
TYPO3 overrides the default XLIFF loader provided by Symfony to implement special functionality like $GLOBALS['TYPO3_CONF_VARS']['LANG']['requireApprovedLocalizations'].
Example: A custom json translation file loader
New in version 14.0
Extension developers can now implement custom translation loaders by implementing Symfony's translation loader interfaces:
<?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:
$GLOBALS['TYPO3_CONF_VARS']['LANG']['loader']['json'] = \MyExtension\Translation\JsonFileLoader::class;