75 lines
2.5 KiB
ReStructuredText
75 lines
2.5 KiB
ReStructuredText
.. 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 <feature-93334-translation-domain-format>`
|
|
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
|