Files
cms-core/Documentation/Changelog/14.0/Feature-107436-SymfonyTranslationIntegration.rst

89 lines
2.8 KiB
ReStructuredText

.. include:: /Includes.rst.txt
.. _feature-107436-1736639846:
============================================================
Feature: #107436 - Symfony Translation Component integration
============================================================
See :issue:`107436`
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 :php:`$GLOBALS['TYPO3_CONF_VARS']['LANG']` namespace.
The following new configuration options have been introduced:
:php:`$GLOBALS['TYPO3_CONF_VARS']['LANG']['loader']`
Configure custom translation loaders.
:php:`$GLOBALS['TYPO3_CONF_VARS']['LANG']['requireApprovedLocalizations']`
Moved from `SYS.lang`.
:php:`$GLOBALS['TYPO3_CONF_VARS']['LANG']['format']`
Moved from `SYS.lang`.
:php:`$GLOBALS['TYPO3_CONF_VARS']['LANG']['availableLocales']`
Moved from `EXTCONF.lang`.
:php:`$GLOBALS['TYPO3_CONF_VARS']['LANG']['resourceOverrides']`
Moved from `SYS.locallangXMLOverride`.
Custom translation loaders
==========================
Extension developers can now implement custom translation loaders by
implementing Symfony's translation loader interfaces:
.. code-block:: php
:caption: Example custom loader
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:
.. code-block:: php
:caption: Register custom loader in configuration
$GLOBALS['TYPO3_CONF_VARS']['LANG']['loader']['fileEnding']
= \MyVendor\MyExtension\Translation\CustomLoader::class;
Impact
======
All previous configuration options have been moved to the new
:php:`$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.
.. index:: PHP-API, Backend, ext:core