TYPO3 v15 dev-main snapshot ()
This commit is contained in:
+74
@@ -0,0 +1,74 @@
|
||||
.. 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
|
||||
Reference in New Issue
Block a user