.. include:: /Includes.rst.txt .. _feature-108627-1736780000: ===================================================================== Feature: #108627 - Allow adding inline language domains to JavaScript ===================================================================== See :issue:`108627` Description =========== The new method :php:`PageRenderer->addInlineLanguageDomain()` allows loading all labels from a language domain and making them available in JavaScript via the :js:`TYPO3.lang` object. The domain name follows the format `extension.domain` (e.g. `core.common`, `core.modules.media`). The language file is resolved automatically by the LanguageService, resolving to files like :file:`EXT:core/Resources/Private/Language/locallang_common.xlf` and :file:`EXT:core/Resources/Private/Language/Modules/media.xlf`. See :ref:`translation domain syntax ` for more details. Labels are automatically prefixed with the domain name and accessible as :js:`TYPO3.lang['domain:key']`, e.g. :js:`TYPO3.lang['core.common:notAvailableAbbreviation']`. Example ======= .. code-block:: php :caption: EXT:my_extension/Classes/Controller/MyController.php use TYPO3\CMS\Core\Page\PageRenderer; final class MyController { public function __construct( private readonly PageRenderer $pageRenderer, ) {} public function myAction(): void { // Load all labels from the 'myextension.frontend' domain $this->pageRenderer->addInlineLanguageDomain('myextension.frontend'); } } The labels are then available in JavaScript: .. code-block:: javascript :caption: EXT:my_extension/Resources/Public/JavaScript/my-script.js // Access a label from the domain const label = TYPO3.lang['myextension.frontend:button.submit']; Impact ====== Previously, it was possible to load entire language files using :php:`addInlineLanguageLabelFile()` (which is still available), but labels were added without any prefix. This could lead to naming conflicts when multiple extensions used the same label keys, potentially overriding each other's translations. With the new domain-based approach, all labels are automatically prefixed with the domain name (e.g. `myextension.frontend:label.key`). This provides a unified, namespaced access pattern that eliminates the risk of collisions between labels from different extensions or language files. .. index:: JavaScript, PHP-API, ext:core