[!!!][TASK] Remove XML-based label parsing 31/64631/8
authorBenni Mack <benni@typo3.org>
Mon, 1 Jun 2020 19:02:06 +0000 (21:02 +0200)
committerAndreas Fernandez <a.fernandez@scripting-base.de>
Fri, 5 Jun 2020 12:25:13 +0000 (14:25 +0200)
This leaves TYPO3 to only handle "XLF" files for language labels
natively.

Resolves: #91482
Related: #91473
Releases: master
Change-Id: Ibf2d0f087e333ab4874c614880022186634e3dbc
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/64631
Tested-by: Benjamin Franzke <bfr@qbus.de>
Tested-by: TYPO3com <noreply@typo3.com>
Tested-by: Andreas Fernandez <a.fernandez@scripting-base.de>
Reviewed-by: Benjamin Franzke <bfr@qbus.de>
Reviewed-by: Andreas Fernandez <a.fernandez@scripting-base.de>
51 files changed:
typo3/sysext/core/Classes/Localization/LanguageStore.php
typo3/sysext/core/Classes/Localization/Parser/LocallangXmlParser.php [deleted file]
typo3/sysext/core/Classes/Utility/ExtensionManagementUtility.php
typo3/sysext/core/Configuration/DefaultConfiguration.php
typo3/sysext/core/Documentation/Changelog/master/Breaking-91473-DeprecatedFunctionalityRemoved.rst
typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Configuration/FlexForms/tt_content_flexform.xml
typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Configuration/TCA/Overrides/pages.php
typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Configuration/TCA/Overrides/tt_content.php
typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Configuration/TCA/tx_irretutorial_1ncsv_hotel.php
typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Configuration/TCA/tx_irretutorial_1ncsv_offer.php
typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Configuration/TCA/tx_irretutorial_1ncsv_price.php
typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Configuration/TCA/tx_irretutorial_1nff_hotel.php
typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Configuration/TCA/tx_irretutorial_1nff_offer.php
typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Configuration/TCA/tx_irretutorial_1nff_price.php
typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Configuration/TCA/tx_irretutorial_mnasym_hotel.php
typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Configuration/TCA/tx_irretutorial_mnasym_hotel_offer_rel.php
typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Configuration/TCA/tx_irretutorial_mnasym_offer.php
typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Configuration/TCA/tx_irretutorial_mnasym_price.php
typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Configuration/TCA/tx_irretutorial_mnattr_hotel.php
typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Configuration/TCA/tx_irretutorial_mnattr_hotel_offer_rel.php
typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Configuration/TCA/tx_irretutorial_mnattr_offer.php
typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Configuration/TCA/tx_irretutorial_mnmmasym_hotel.php
typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Configuration/TCA/tx_irretutorial_mnmmasym_offer.php
typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Configuration/TCA/tx_irretutorial_mnmmasym_price.php
typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Configuration/TCA/tx_irretutorial_mnsym_hotel.php
typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Configuration/TCA/tx_irretutorial_mnsym_hotel_rel.php
typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Resources/Private/Language/locallang_db.xlf [new file with mode: 0644]
typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Resources/Private/Language/locallang_db.xml [deleted file]
typo3/sysext/core/Tests/Functional/Fixtures/Extensions/test_datahandler/Configuration/TCA/tx_testdatahandler_element.php
typo3/sysext/core/Tests/UnitDeprecated/Localization/LocalizationFactoryTest.php [deleted file]
typo3/sysext/core/Tests/UnitDeprecated/Localization/Parser/Fixtures/locallang.xml [deleted file]
typo3/sysext/core/Tests/UnitDeprecated/Localization/Parser/Fixtures/locallangNumericKeys.xml [deleted file]
typo3/sysext/core/Tests/UnitDeprecated/Localization/Parser/Fixtures/locallangOnlyDefaultLanguage.xml [deleted file]
typo3/sysext/core/Tests/UnitDeprecated/Localization/Parser/Fixtures/locallang_override.xml [deleted file]
typo3/sysext/core/Tests/UnitDeprecated/Localization/Parser/LocallangXmlParserTest.php [deleted file]
typo3/sysext/extbase/Classes/Utility/LocalizationUtility.php
typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/blog_example/Configuration/TCA/Overrides/fe_users.php
typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/blog_example/Configuration/TCA/tx_blogexample_domain_model_blog.php
typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/blog_example/Configuration/TCA/tx_blogexample_domain_model_comment.php
typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/blog_example/Configuration/TCA/tx_blogexample_domain_model_dateexample.php
typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/blog_example/Configuration/TCA/tx_blogexample_domain_model_info.php
typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/blog_example/Configuration/TCA/tx_blogexample_domain_model_person.php
typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/blog_example/Configuration/TCA/tx_blogexample_domain_model_post.php
typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/blog_example/Configuration/TCA/tx_blogexample_domain_model_tag.php
typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/blog_example/Resources/Private/Language/locallang_csh.xlf [new file with mode: 0644]
typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/blog_example/Resources/Private/Language/locallang_csh.xml [deleted file]
typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/blog_example/Resources/Private/Language/locallang_db.xlf [new file with mode: 0644]
typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/blog_example/Resources/Private/Language/locallang_db.xml [deleted file]
typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/blog_example/ext_tables.php
typo3/sysext/frontend/Classes/Plugin/AbstractPlugin.php
typo3/sysext/install/Configuration/ExtensionScanner/Php/ClassNameMatcher.php

index e0f7ba4..bdb7493 100644 (file)
@@ -65,7 +65,7 @@ class LanguageStore implements SingletonInterface
         if (isset($GLOBALS['TYPO3_CONF_VARS']['SYS']['lang']['format']['priority']) && trim($GLOBALS['TYPO3_CONF_VARS']['SYS']['lang']['format']['priority']) !== '') {
             $this->supportedExtensions = GeneralUtility::trimExplode(',', $GLOBALS['TYPO3_CONF_VARS']['SYS']['lang']['format']['priority']);
         } else {
-            $this->supportedExtensions = ['xlf', 'xml'];
+            $this->supportedExtensions = ['xlf'];
         }
     }
 
diff --git a/typo3/sysext/core/Classes/Localization/Parser/LocallangXmlParser.php b/typo3/sysext/core/Classes/Localization/Parser/LocallangXmlParser.php
deleted file mode 100644 (file)
index eb64c4e..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-<?php
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-namespace TYPO3\CMS\Core\Localization\Parser;
-
-use TYPO3\CMS\Core\Localization\Exception\InvalidXmlFileException;
-use TYPO3\CMS\Core\Utility\ArrayUtility;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Core\Utility\PathUtility;
-
-/**
- * Parser for XML locallang file.
- * @internal This class is a concrete implementation and is not part of the TYPO3 Core API.
- * @deprecated since v10.1 and will be removed in TYPO3 v11
- */
-class LocallangXmlParser extends AbstractXmlParser
-{
-    public function __construct()
-    {
-        trigger_error(__CLASS__ . ' has been marked as deprecated and will be removed in TYPO3 v11. Consider using xlf files instead.', E_USER_DEPRECATED);
-    }
-
-    /**
-     * Associative array of "filename => parsed data" pairs.
-     *
-     * @var array
-     */
-    protected $parsedTargetFiles;
-
-    /**
-     * Returns parsed representation of XML file.
-     *
-     * @param string $sourcePath Source file path
-     * @param string $languageKey Language key
-     * @return array
-     */
-    public function getParsedData($sourcePath, $languageKey)
-    {
-        $this->sourcePath = $sourcePath;
-        $this->languageKey = $languageKey;
-        // Parse source
-        $parsedSource = $this->parseXmlFile();
-        // Parse target
-        $localizedTargetPath = $this->getLocalizedFileName($this->sourcePath, $this->languageKey);
-        $targetPath = $this->languageKey !== 'default' && @is_file($localizedTargetPath) ? $localizedTargetPath : $this->sourcePath;
-        try {
-            $parsedTarget = $this->getParsedTargetData($targetPath);
-        } catch (InvalidXmlFileException $e) {
-            $parsedTarget = $this->getParsedTargetData($this->sourcePath);
-        }
-        $LOCAL_LANG = [];
-        $LOCAL_LANG[$languageKey] = $parsedSource;
-        ArrayUtility::mergeRecursiveWithOverrule($LOCAL_LANG[$languageKey], $parsedTarget);
-        return $LOCAL_LANG;
-    }
-
-    /**
-     * Returns array representation of XLIFF data, starting from a root node.
-     *
-     * @param \SimpleXMLElement $root XML root element
-     * @param string $element Target or Source
-     * @return array
-     * @throws InvalidXmlFileException
-     */
-    protected function doParsingFromRootForElement(\SimpleXMLElement $root, $element)
-    {
-        $bodyOfFileTag = $root->data->languageKey;
-        if ($bodyOfFileTag === null) {
-            throw new InvalidXmlFileException('Invalid locallang.xml language file "' . PathUtility::stripPathSitePrefix($this->sourcePath) . '"', 1487944884);
-        }
-
-        if ($element === 'source' || $this->languageKey === 'default') {
-            $parsedData = $this->getParsedDataForElement($bodyOfFileTag, $element);
-        } else {
-            $parsedData = [];
-        }
-        if ($element === 'target') {
-            // Check if the source llxml file contains localized records
-            $localizedBodyOfFileTag = $root->data->xpath('languageKey[@index=\'' . $this->languageKey . '\']');
-            if (isset($localizedBodyOfFileTag[0]) && $localizedBodyOfFileTag[0] instanceof \SimpleXMLElement) {
-                $parsedDataTarget = $this->getParsedDataForElement($localizedBodyOfFileTag[0], $element);
-                $mergedData = $parsedDataTarget + $parsedData;
-                if ($this->languageKey === 'default') {
-                    $parsedData = array_intersect_key($mergedData, $parsedData, $parsedDataTarget);
-                } else {
-                    $parsedData = array_intersect_key($mergedData, $parsedDataTarget);
-                }
-            }
-        }
-        return $parsedData;
-    }
-
-    /**
-     * Parse the given language key tag
-     *
-     * @param \SimpleXMLElement $bodyOfFileTag
-     * @param string $element
-     * @return array
-     */
-    protected function getParsedDataForElement(\SimpleXMLElement $bodyOfFileTag, $element)
-    {
-        $parsedData = [];
-        $children = $bodyOfFileTag->children();
-        if ($children->count() === 0) {
-            // Check for externally-referenced resource:
-            // <languageKey index="fr">EXT:yourext/path/to/localized/locallang.xml</languageKey>
-            $reference = sprintf('%s', $bodyOfFileTag);
-            if (substr($reference, -4) === '.xml') {
-                return $this->getParsedTargetData(GeneralUtility::getFileAbsFileName($reference));
-            }
-        }
-        /** @var \SimpleXMLElement $translationElement */
-        foreach ($children as $translationElement) {
-            if ($translationElement->getName() === 'label') {
-                $parsedData[(string)$translationElement['index']][0] = [
-                    $element => (string)$translationElement
-                ];
-            }
-        }
-        return $parsedData;
-    }
-
-    /**
-     * Returns array representation of XLIFF data, starting from a root node.
-     *
-     * @param \SimpleXMLElement $root A root node
-     * @return array An array representing parsed XLIFF
-     */
-    protected function doParsingFromRoot(\SimpleXMLElement $root)
-    {
-        return $this->doParsingFromRootForElement($root, 'source');
-    }
-
-    /**
-     * Returns array representation of XLIFF data, starting from a root node.
-     *
-     * @param \SimpleXMLElement $root A root node
-     * @return array An array representing parsed XLIFF
-     */
-    protected function doParsingTargetFromRoot(\SimpleXMLElement $root)
-    {
-        return $this->doParsingFromRootForElement($root, 'target');
-    }
-
-    /**
-     * Returns parsed representation of XML file.
-     *
-     * Parses XML if it wasn't done before. Caches parsed data.
-     *
-     * @param string $path An absolute path to XML file
-     * @return array Parsed XML file
-     */
-    public function getParsedTargetData($path)
-    {
-        if (!isset($this->parsedTargetFiles[$path])) {
-            $this->parsedTargetFiles[$path] = $this->parseXmlTargetFile($path);
-        }
-        return $this->parsedTargetFiles[$path];
-    }
-
-    /**
-     * Reads and parses XML file and returns internal representation of data.
-     *
-     * @param string $targetPath Path of the target file
-     * @return array
-     * @throws \TYPO3\CMS\Core\Localization\Exception\InvalidXmlFileException
-     */
-    protected function parseXmlTargetFile($targetPath)
-    {
-        $rootXmlNode = false;
-        if (file_exists($targetPath)) {
-            $xmlContent = file_get_contents($targetPath);
-            // Disables the functionality to allow external entities to be loaded when parsing the XML, must be kept
-            $previousValueOfEntityLoader = libxml_disable_entity_loader(true);
-            $rootXmlNode = simplexml_load_string($xmlContent, \SimpleXMLElement::class, LIBXML_NOWARNING);
-            libxml_disable_entity_loader($previousValueOfEntityLoader);
-        }
-        if ($rootXmlNode === false) {
-            $xmlError = libxml_get_last_error();
-            throw new InvalidXmlFileException(
-                'The path provided does not point to existing and accessible well-formed XML file. Reason: ' . $xmlError->message . ' in ' . $targetPath . ', line ' . $xmlError->line,
-                1278155987
-            );
-        }
-        return $this->doParsingTargetFromRoot($rootXmlNode);
-    }
-}
index c3d558a..03417cc 100644 (file)
@@ -1004,7 +1004,7 @@ class ExtensionManagementUtility
      * eg. \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addLLrefForTCAdescr('pages', 'EXT:core/Resources/Private/Language/locallang_csh_pages.xlf'); for the pages table or \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addLLrefForTCAdescr('_MOD_web_layout', 'EXT:frontend/Resources/Private/Language/locallang_csh_weblayout.xlf'); for the Web > Page module.
      *
      * @param string $key Description key. Typically a database table (like "pages") but for applications can be other strings, but prefixed with "_MOD_")
-     * @param string $file File reference to locallang file, eg. "EXT:core/Resources/Private/Language/locallang_csh_pages.xlf" (or ".xml")
+     * @param string $file File reference to locallang file, eg. "EXT:core/Resources/Private/Language/locallang_csh_pages.xlf"
      */
     public static function addLLrefForTCAdescr($key, $file)
     {
index d20b5e8..6619efb 100644 (file)
@@ -47,10 +47,9 @@ return [
         // System related concerning both frontend and backend.
         'lang' => [
             'format' => [
-                'priority' => 'xlf,xml'
+                'priority' => 'xlf'
             ],
             'parser' => [
-                'xml' => \TYPO3\CMS\Core\Localization\Parser\LocallangXmlParser::class,
                 'xlf' => \TYPO3\CMS\Core\Localization\Parser\XliffParser::class
             ]
         ],
index d2a6d22..ed099ce 100644 (file)
@@ -19,6 +19,7 @@ The following PHP classes that have been previously deprecated for v10 have been
 - :php:`\TYPO3\CMS\Backend\Controller\File\ReplaceFileController`
 - :php:`\TYPO3\CMS\Backend\Template\DocumentTemplate`
 - :php:`\TYPO3\CMS\Core\Console\CommandRequestHandler`
+- :php:`\TYPO3\CMS\Core\Localization\Parser\LocallangXmlParser`
 - :php:`\TYPO3\CMS\Core\Routing\Aspect\PersistenceDelegate`
 - :php:`\TYPO3\CMS\Core\Routing\Legacy\PersistedAliasMapperLegacyTrait`
 - :php:`\TYPO3\CMS\Core\Routing\Legacy\PersistedPatternMapperLegacyTrait`
@@ -348,6 +349,7 @@ The following features have been removed:
 - All install tool upgrade wizards upgrading from v8 to v9
 - CLI Command Configuration definition via :file:`Commands.php`
 - Pi-based plugin for "felogin" (CType `login`)
+- XML-based (TYPO3-custom XML format) label parsing
 
 The following database tables have been removed:
 
index eec1e8e..04b7dc5 100644 (file)
@@ -7,7 +7,7 @@
                                        <hotels>
                                                <TCEforms>
                                                        <label>
-                                                               LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tt_content.tx_irretutorial_flexform.hotels
+                                                               LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tt_content.tx_irretutorial_flexform.hotels
                                                        </label>
                                                        <config>
                                                                <type>inline</type>
index d614a61..fabb3d9 100644 (file)
@@ -8,7 +8,7 @@ $GLOBALS['TCA']['pages']['ctrl']['hideAtCopy'] = false;
     [
         'tx_irretutorial_hotels' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:pages.tx_irretutorial_hotels',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:pages.tx_irretutorial_hotels',
             'config' => [
                 'type' => 'inline',
                 'foreign_table' => 'tx_irretutorial_1nff_hotel',
@@ -25,7 +25,7 @@ $GLOBALS['TCA']['pages']['ctrl']['hideAtCopy'] = false;
         ],
         'tx_irretutorial_1ncsv_hotels' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:pages.tx_irretutorial_hotels',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:pages.tx_irretutorial_hotels',
             'config' => [
                 'type' => 'inline',
                 'foreign_table' => 'tx_irretutorial_1ncsv_hotel',
@@ -43,5 +43,5 @@ $GLOBALS['TCA']['pages']['ctrl']['hideAtCopy'] = false;
 
 \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes(
     'pages',
-    '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:pages.doktype.div.irre, tx_irretutorial_hotels, tx_irretutorial_1ncsv_hotel'
+    '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:pages.doktype.div.irre, tx_irretutorial_hotels, tx_irretutorial_1ncsv_hotel'
 );
index 90d9043..4b5b249 100644 (file)
@@ -11,7 +11,7 @@ $GLOBALS['TCA']['tt_content']['ctrl']['shadowColumnsForMovePlaceholders'] .= ',t
     [
         'tx_irretutorial_1nff_hotels' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tt_content.tx_irretutorial_1nff_hotels',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tt_content.tx_irretutorial_1nff_hotels',
             'config' => [
                 'type' => 'inline',
                 'foreign_table' => 'tx_irretutorial_1nff_hotel',
@@ -28,7 +28,7 @@ $GLOBALS['TCA']['tt_content']['ctrl']['shadowColumnsForMovePlaceholders'] .= ',t
         ],
         'tx_irretutorial_1ncsv_hotels' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tt_content.tx_irretutorial_1ncsv_hotels',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tt_content.tx_irretutorial_1ncsv_hotels',
             'config' => [
                 'type' => 'inline',
                 'foreign_table' => 'tx_irretutorial_1ncsv_hotel',
@@ -44,7 +44,7 @@ $GLOBALS['TCA']['tt_content']['ctrl']['shadowColumnsForMovePlaceholders'] .= ',t
         ],
         'tx_irretutorial_flexform' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tt_content.tx_irretutorial_flexform',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tt_content.tx_irretutorial_flexform',
             'config' => [
                 'type' => 'flex',
                 'ds' => [
@@ -58,5 +58,5 @@ $GLOBALS['TCA']['tt_content']['ctrl']['shadowColumnsForMovePlaceholders'] .= ',t
 
 \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes(
     'tt_content',
-    '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tt_content.div.irre, tx_irretutorial_1nff_hotels, tx_irretutorial_1ncsv_hotels, tx_irretutorial_flexform'
+    '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tt_content.div.irre, tx_irretutorial_1nff_hotels, tx_irretutorial_1ncsv_hotels, tx_irretutorial_flexform'
 );
index 753f4d4..2b463e5 100644 (file)
@@ -2,7 +2,7 @@
 
 return [
     'ctrl' => [
-        'title' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_1ncsv_hotel',
+        'title' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_1ncsv_hotel',
         'label' => 'title',
         'tstamp' => 'tstamp',
         'crdate' => 'crdate',
@@ -67,7 +67,7 @@ return [
         'title' => [
             'exclude' => true,
             'l10n_mode' => 'prefixLangTitle',
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_hotel.title',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_hotel.title',
             'config' => [
                 'type' => 'input',
                 'size' => 30,
@@ -76,7 +76,7 @@ return [
         ],
         'offers' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_hotel.offers',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_hotel.offers',
             'config' => [
                 'type' => 'inline',
                 'foreign_table' => 'tx_irretutorial_1ncsv_offer',
@@ -93,8 +93,8 @@ return [
     ],
     'types' => [
         '0' => ['showitem' =>
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.general, title, offers, ' .
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden'
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.general, title, offers, ' .
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden'
         ]
     ],
     'palettes' => [
index c22d000..0b8368d 100644 (file)
@@ -2,7 +2,7 @@
 
 return [
     'ctrl' => [
-        'title' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_1ncsv_offer',
+        'title' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_1ncsv_offer',
         'label' => 'title',
         'tstamp' => 'tstamp',
         'crdate' => 'crdate',
@@ -67,7 +67,7 @@ return [
         'title' => [
             'exclude' => true,
             'l10n_mode' => 'prefixLangTitle',
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_offer.title',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_offer.title',
             'config' => [
                 'type' => 'input',
                 'size' => 30,
@@ -76,7 +76,7 @@ return [
         ],
         'prices' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_offer.prices',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_offer.prices',
             'config' => [
                 'type' => 'inline',
                 'foreign_table' => 'tx_irretutorial_1ncsv_price',
@@ -93,8 +93,8 @@ return [
     ],
     'types' => [
         '0' => ['showitem' =>
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.general, title, prices,' .
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden'
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.general, title, prices,' .
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden'
         ]
     ],
     'palettes' => [
index 8a977c5..646f021 100644 (file)
@@ -2,7 +2,7 @@
 
 return [
     'ctrl' => [
-        'title' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_1ncsv_price',
+        'title' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_1ncsv_price',
         'label' => 'title',
         'tstamp' => 'tstamp',
         'crdate' => 'crdate',
@@ -65,7 +65,7 @@ return [
         'title' => [
             'exclude' => true,
             'l10n_mode' => 'prefixLangTitle',
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_price.title',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_price.title',
             'config' => [
                 'type' => 'input',
                 'size' => 30,
@@ -74,7 +74,7 @@ return [
         ],
         'price' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_price.price',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_price.price',
             'config' => [
                 'type' => 'input',
                 'size' => 30,
@@ -84,8 +84,8 @@ return [
     ],
     'types' => [
         '0' => ['showitem' =>
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.general, title, price,' .
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden'
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.general, title, price,' .
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden'
         ]
     ],
     'palettes' => [
index c822681..de9e74a 100644 (file)
@@ -2,7 +2,7 @@
 
 return [
     'ctrl' => [
-        'title' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_1nff_hotel',
+        'title' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_1nff_hotel',
         'label' => 'title',
         'tstamp' => 'tstamp',
         'crdate' => 'crdate',
@@ -86,7 +86,7 @@ return [
         'title' => [
             'exclude' => true,
             'l10n_mode' => 'prefixLangTitle',
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_hotel.title',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_hotel.title',
             'config' => [
                 'type' => 'input',
                 'size' => 30,
@@ -95,7 +95,7 @@ return [
         ],
         'offers' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_hotel.offers',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_hotel.offers',
             'config' => [
                 'type' => 'inline',
                 'foreign_table' => 'tx_irretutorial_1nff_offer',
@@ -113,8 +113,8 @@ return [
     ],
     'types' => [
         '0' => ['showitem' =>
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.general, title, offers,' .
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden'
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.general, title, offers,' .
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden'
         ]
     ],
     'palettes' => [
index 92f3566..1ae3b4c 100644 (file)
@@ -2,7 +2,7 @@
 
 return [
     'ctrl' => [
-        'title' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_1nff_offer',
+        'title' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_1nff_offer',
         'label' => 'title',
         'tstamp' => 'tstamp',
         'crdate' => 'crdate',
@@ -86,7 +86,7 @@ return [
         'title' => [
             'exclude' => true,
             'l10n_mode' => 'prefixLangTitle',
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_offer.title',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_offer.title',
             'config' => [
                 'type' => 'input',
                 'size' => 30,
@@ -95,7 +95,7 @@ return [
         ],
         'prices' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_offer.prices',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_offer.prices',
             'config' => [
                 'type' => 'inline',
                 'foreign_table' => 'tx_irretutorial_1nff_price',
@@ -113,8 +113,8 @@ return [
     ],
     'types' => [
         '0' => ['showitem' =>
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.general, title, prices,' .
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden, parentid, parenttable'
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.general, title, prices,' .
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden, parentid, parenttable'
         ]
     ],
     'palettes' => [
index 4af434c..926342b 100644 (file)
@@ -2,7 +2,7 @@
 
 return [
     'ctrl' => [
-        'title' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_1nff_price',
+        'title' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_1nff_price',
         'label' => 'title',
         'tstamp' => 'tstamp',
         'crdate' => 'crdate',
@@ -86,7 +86,7 @@ return [
         'title' => [
             'exclude' => true,
             'l10n_mode' => 'prefixLangTitle',
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_price.title',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_price.title',
             'config' => [
                 'type' => 'input',
                 'size' => 30,
@@ -95,7 +95,7 @@ return [
         ],
         'price' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_price.price',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_price.price',
             'config' => [
                 'type' => 'input',
                 'size' => 30,
@@ -105,8 +105,8 @@ return [
     ],
     'types' => [
         '0' => ['showitem' =>
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.general, title, price,' .
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden, parentid'
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.general, title, price,' .
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden, parentid'
         ]
     ],
     'palettes' => [
index 615b9d8..4bc4831 100644 (file)
@@ -2,7 +2,7 @@
 
 return [
     'ctrl' => [
-        'title' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_mnasym_hotel',
+        'title' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_mnasym_hotel',
         'label' => 'title',
         'tstamp' => 'tstamp',
         'crdate' => 'crdate',
@@ -65,7 +65,7 @@ return [
         'title' => [
             'exclude' => true,
             'l10n_mode' => 'prefixLangTitle',
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_hotel.title',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_hotel.title',
             'config' => [
                 'type' => 'input',
                 'size' => 30,
@@ -74,7 +74,7 @@ return [
         ],
         'offers' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_hotel.offers',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_hotel.offers',
             'config' => [
                 'type' => 'inline',
                 'foreign_table' => 'tx_irretutorial_mnasym_hotel_offer_rel',
@@ -93,8 +93,8 @@ return [
     ],
     'types' => [
         '0' => ['showitem' =>
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.general, title, offers,' .
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden'
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.general, title, offers,' .
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden'
         ]
     ],
     'palettes' => [
index 5440c58..6134409 100644 (file)
@@ -2,7 +2,7 @@
 
 return [
     'ctrl' => [
-        'title' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_mnasym_hotel_offer_rel',
+        'title' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_mnasym_hotel_offer_rel',
         'label' => 'uid',
         'tstamp' => 'tstamp',
         'crdate' => 'crdate',
@@ -64,7 +64,7 @@ return [
             ]
         ],
         'hotelid' => [
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_hotel_offer_rel.hotelid',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_hotel_offer_rel.hotelid',
             'config' => [
                 'type' => 'select',
                 'renderType' => 'selectSingle',
@@ -75,7 +75,7 @@ return [
             ]
         ],
         'offerid' => [
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_hotel_offer_rel.offerid',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_hotel_offer_rel.offerid',
             'config' => [
                 'type' => 'select',
                 'renderType' => 'selectSingle',
@@ -86,7 +86,7 @@ return [
             ]
         ],
         'prices' => [
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_hotel_offer_rel.prices',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_hotel_offer_rel.prices',
             'config' => [
                 'type' => 'inline',
                 'foreign_table' => 'tx_irretutorial_mnasym_price',
@@ -113,8 +113,8 @@ return [
     ],
     'types' => [
         '0' => ['showitem' =>
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.general, title, hotelid, offerid, prices,' .
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden, hotelsort, offersort'
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.general, title, hotelid, offerid, prices,' .
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden, hotelsort, offersort'
         ]
     ],
     'palettes' => [
index 636c32b..881040e 100644 (file)
@@ -2,7 +2,7 @@
 
 return [
     'ctrl' => [
-        'title' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_mnasym_offer',
+        'title' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_mnasym_offer',
         'label' => 'title',
         'tstamp' => 'tstamp',
         'crdate' => 'crdate',
@@ -65,7 +65,7 @@ return [
         'title' => [
             'exclude' => true,
             'l10n_mode' => 'prefixLangTitle',
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_offer.title',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_offer.title',
             'config' => [
                 'type' => 'input',
                 'size' => 30,
@@ -74,7 +74,7 @@ return [
         ],
         'hotels' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_offer.hotels',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_offer.hotels',
             'config' => [
                 'type' => 'inline',
                 'foreign_table' => 'tx_irretutorial_mnasym_hotel_offer_rel',
@@ -93,8 +93,8 @@ return [
     ],
     'types' => [
         '0' => ['showitem' =>
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.general, title, hotels,' .
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden'
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.general, title, hotels,' .
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden'
         ]
     ],
     'palettes' => [
index a1eccd6..2a1c9b2 100644 (file)
@@ -2,7 +2,7 @@
 
 return [
     'ctrl' => [
-        'title' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_mnasym_price',
+        'title' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_mnasym_price',
         'label' => 'title',
         'tstamp' => 'tstamp',
         'crdate' => 'crdate',
@@ -72,7 +72,7 @@ return [
         'title' => [
             'exclude' => true,
             'l10n_mode' => 'prefixLangTitle',
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_price.title',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_price.title',
             'config' => [
                 'type' => 'input',
                 'size' => 30,
@@ -81,7 +81,7 @@ return [
         ],
         'price' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_price.price',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_price.price',
             'config' => [
                 'type' => 'input',
                 'size' => 30,
@@ -91,8 +91,8 @@ return [
     ],
     'types' => [
         '0' => ['showitem' =>
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.general, title, parentid, price,' .
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden, parentid'
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.general, title, parentid, price,' .
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden, parentid'
         ]
     ],
     'palettes' => [
index 10e3641..9fbc698 100644 (file)
@@ -2,7 +2,7 @@
 
 return [
     'ctrl' => [
-        'title' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_mnattr_hotel',
+        'title' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_mnattr_hotel',
         'label' => 'title',
         'tstamp' => 'tstamp',
         'crdate' => 'crdate',
@@ -65,7 +65,7 @@ return [
         'title' => [
             'exclude' => true,
             'l10n_mode' => 'prefixLangTitle',
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_hotel.title',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_hotel.title',
             'config' => [
                 'type' => 'input',
                 'size' => 30,
@@ -74,7 +74,7 @@ return [
         ],
         'offers' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_hotel.offers',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_hotel.offers',
             'config' => [
                 'type' => 'inline',
                 'foreign_table' => 'tx_irretutorial_mnattr_hotel_offer_rel',
@@ -93,8 +93,8 @@ return [
     ],
     'types' => [
         '0' => ['showitem' =>
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.general, title, offers,' .
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden'
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.general, title, offers,' .
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden'
         ]
     ],
     'palettes' => [
index 65ead77..1a29135 100644 (file)
@@ -2,7 +2,7 @@
 
 return [
     'ctrl' => [
-        'title' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_mnattr_hotel_offer_rel',
+        'title' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_mnattr_hotel_offer_rel',
         'label' => 'uid',
         'tstamp' => 'tstamp',
         'crdate' => 'crdate',
@@ -64,7 +64,7 @@ return [
             ]
         ],
         'hotelid' => [
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_hotel_offer_rel.hotelid',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_hotel_offer_rel.hotelid',
             'config' => [
                 'type' => 'select',
                 'renderType' => 'selectSingle',
@@ -74,7 +74,7 @@ return [
             ]
         ],
         'offerid' => [
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_hotel_offer_rel.offerid',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_hotel_offer_rel.offerid',
             'config' => [
                 'type' => 'select',
                 'renderType' => 'selectSingle',
@@ -95,22 +95,22 @@ return [
         ],
         'quality' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_hotel_offer_rel.quality',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_hotel_offer_rel.quality',
             'config' => [
                 'type' => 'select',
                 'renderType' => 'selectSingle',
                 'items' => [
-                    ['LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_hotel_offer_rel.quality.I.0', '1'],
-                    ['LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_hotel_offer_rel.quality.I.1', '2'],
-                    ['LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_hotel_offer_rel.quality.I.2', '3'],
-                    ['LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_hotel_offer_rel.quality.I.3', '4'],
-                    ['LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_hotel_offer_rel.quality.I.4', '5'],
+                    ['LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_hotel_offer_rel.quality.I.0', '1'],
+                    ['LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_hotel_offer_rel.quality.I.1', '2'],
+                    ['LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_hotel_offer_rel.quality.I.2', '3'],
+                    ['LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_hotel_offer_rel.quality.I.3', '4'],
+                    ['LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_hotel_offer_rel.quality.I.4', '5'],
                 ],
             ]
         ],
         'allincl' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_hotel_offer_rel.allincl',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_hotel_offer_rel.allincl',
             'config' => [
                 'type' => 'check',
             ]
@@ -118,8 +118,8 @@ return [
     ],
     'types' => [
         '0' => ['showitem' =>
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.general, title, hotelid, offerid, hotelsort, offersort, quality, allincl,' .
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden'
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.general, title, hotelid, offerid, hotelsort, offersort, quality, allincl,' .
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden'
         ]
     ],
     'palettes' => [
index 87eb2e5..330450b 100644 (file)
@@ -2,7 +2,7 @@
 
 return [
     'ctrl' => [
-        'title' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_mnattr_offer',
+        'title' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_mnattr_offer',
         'label' => 'title',
         'tstamp' => 'tstamp',
         'crdate' => 'crdate',
@@ -65,7 +65,7 @@ return [
         'title' => [
             'exclude' => true,
             'l10n_mode' => 'prefixLangTitle',
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_offer.title',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_offer.title',
             'config' => [
                 'type' => 'input',
                 'size' => 30,
@@ -74,7 +74,7 @@ return [
         ],
         'hotels' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_offer.hotels',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_offer.hotels',
             'config' => [
                 'type' => 'inline',
                 'foreign_table' => 'tx_irretutorial_mnattr_hotel_offer_rel',
@@ -93,8 +93,8 @@ return [
     ],
     'types' => [
         '0' => ['showitem' =>
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.general, title, hotels,' .
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden'
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.general, title, hotels,' .
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden'
         ]
     ],
     'palettes' => [
index e8a44aa..054a095 100644 (file)
@@ -2,7 +2,7 @@
 
 return [
     'ctrl' => [
-        'title' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_mnmmasym_hotel',
+        'title' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_mnmmasym_hotel',
         'label' => 'title',
         'tstamp' => 'tstamp',
         'crdate' => 'crdate',
@@ -65,7 +65,7 @@ return [
         'title' => [
             'exclude' => true,
             'l10n_mode' => 'prefixLangTitle',
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_hotel.title',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_hotel.title',
             'config' => [
                 'type' => 'input',
                 'size' => 30,
@@ -74,7 +74,7 @@ return [
         ],
         'offers' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_hotel.offers',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_hotel.offers',
             'config' => [
                 'type' => 'inline',
                 'foreign_table' => 'tx_irretutorial_mnmmasym_offer',
@@ -92,8 +92,8 @@ return [
     ],
     'types' => [
         '0' => ['showitem' =>
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.general, title, offers,' .
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden'
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.general, title, offers,' .
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden'
         ]
     ],
     'palettes' => [
index a3489f2..15f1052 100644 (file)
@@ -2,7 +2,7 @@
 
 return [
     'ctrl' => [
-        'title' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_mnmmasym_offer',
+        'title' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_mnmmasym_offer',
         'label' => 'title',
         'tstamp' => 'tstamp',
         'crdate' => 'crdate',
@@ -65,7 +65,7 @@ return [
         'title' => [
             'exclude' => true,
             'l10n_mode' => 'prefixLangTitle',
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_offer.title',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_offer.title',
             'config' => [
                 'type' => 'input',
                 'size' => 30,
@@ -74,7 +74,7 @@ return [
         ],
         'hotels' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_offer.hotels',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_offer.hotels',
             'config' => [
                 'type' => 'inline',
                 'foreign_table' => 'tx_irretutorial_mnmmasym_hotel',
@@ -92,7 +92,7 @@ return [
         ],
         'prices' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_offer.prices',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_offer.prices',
             'config' => [
                 'type' => 'inline',
                 'foreign_table' => 'tx_irretutorial_mnmmasym_price',
@@ -110,8 +110,8 @@ return [
     ],
     'types' => [
         '0' => ['showitem' =>
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.general, title, hotels, prices,' .
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden'
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.general, title, hotels, prices,' .
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden'
         ]
     ],
     'palettes' => [
index 9272cb8..a92e67e 100644 (file)
@@ -2,7 +2,7 @@
 
 return [
     'ctrl' => [
-        'title' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_mnmmasym_price',
+        'title' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_mnmmasym_price',
         'label' => 'title',
         'tstamp' => 'tstamp',
         'crdate' => 'crdate',
@@ -65,7 +65,7 @@ return [
         'title' => [
             'exclude' => true,
             'l10n_mode' => 'prefixLangTitle',
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_price.title',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_price.title',
             'config' => [
                 'type' => 'input',
                 'size' => 30,
@@ -74,7 +74,7 @@ return [
         ],
         'price' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_price.price',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_price.price',
             'config' => [
                 'type' => 'input',
                 'size' => 30,
@@ -83,7 +83,7 @@ return [
         ],
         'offers' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_price.offers',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_price.offers',
             'config' => [
                 'type' => 'inline',
                 'foreign_table' => 'tx_irretutorial_mnmmasym_offer',
@@ -102,8 +102,8 @@ return [
     ],
     'types' => [
         '0' => ['showitem' =>
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.general, title, price, offers,' .
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden'
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.general, title, price, offers,' .
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden'
         ]
     ],
     'palettes' => [
index fb1358b..9393e67 100644 (file)
@@ -2,7 +2,7 @@
 
 return [
     'ctrl' => [
-        'title' => 'LLL:EXT:irre_tutorial/locallang_db.xml:tx_irretutorial_mnsym_hotel',
+        'title' => 'LLL:EXT:irre_tutorial/locallang_db.xlf:tx_irretutorial_mnsym_hotel',
         'label' => 'title',
         'tstamp' => 'tstamp',
         'crdate' => 'crdate',
@@ -65,7 +65,7 @@ return [
         'title' => [
             'exclude' => true,
             'l10n_mode' => 'prefixLangTitle',
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_hotel.title',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_hotel.title',
             'config' => [
                 'type' => 'input',
                 'size' => 30,
@@ -74,7 +74,7 @@ return [
         ],
         'branches' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_hotel.branches',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_hotel.branches',
             'config' => [
                 'type' => 'inline',
                 'foreign_table' => 'tx_irretutorial_mnsym_hotel_rel',
@@ -96,8 +96,8 @@ return [
     ],
     'types' => [
         '0' => ['showitem' =>
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.general, title, branches,' .
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden'
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.general, title, branches,' .
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden'
         ]
     ],
     'palettes' => [
index 976d0bd..330fe1a 100644 (file)
@@ -2,7 +2,7 @@
 
 return [
     'ctrl' => [
-        'title' => 'LLL:EXT:irre_tutorial/locallang_db.xml:tx_irretutorial_mnsym_hotel_rel',
+        'title' => 'LLL:EXT:irre_tutorial/locallang_db.xlf:tx_irretutorial_mnsym_hotel_rel',
         'label' => 'uid',
         'tstamp' => 'tstamp',
         'crdate' => 'crdate',
@@ -64,7 +64,7 @@ return [
             ]
         ],
         'hotelid' => [
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_hotel_rel.hotelid',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_hotel_rel.hotelid',
             'config' => [
                 'type' => 'select',
                 'renderType' => 'selectSingle',
@@ -74,7 +74,7 @@ return [
             ]
         ],
         'branchid' => [
-            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tx_irretutorial_hotel_rel.branchid',
+            'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tx_irretutorial_hotel_rel.branchid',
             'config' => [
                 'type' => 'select',
                 'renderType' => 'selectSingle',
@@ -96,8 +96,8 @@ return [
     ],
     'types' => [
         '0' => ['showitem' =>
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.general, title, hotelid, branchid,' .
-            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden, hotelsort, branchsort'
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.general, title, hotelid, branchid,' .
+            '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.visibility, sys_language_uid, l18n_parent, l18n_diffsource, hidden, hotelsort, branchsort'
         ]
     ],
     'palettes' => [
diff --git a/typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Resources/Private/Language/locallang_db.xlf b/typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Resources/Private/Language/locallang_db.xlf
new file mode 100644 (file)
index 0000000..fe9ab99
--- /dev/null
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xliff version="1.0" xmlns:t3="http://typo3.org/schemas/xliff">
+       <file t3:id="1591192168" source-language="en" datatype="plaintext" original="EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf" date="2020-06-03T15:50:00Z" product-name="irre_tutorial">
+               <header/>
+               <body>
+                       <trans-unit id="tabs.general" resname="tabs.general">
+                               <source>General</source>
+                       </trans-unit>
+                       <trans-unit id="tabs.visibility" resname="tabs.visibility">
+                               <source>Visibility</source>
+                       </trans-unit>
+
+                       <trans-unit id="pages.doktype.div.irre" resname="pages.doktype.div.irre">
+                               <source>IRRE Tutorial</source>
+                       </trans-unit>
+                       <trans-unit id="pages.doktype.I.233" resname="pages.doktype.I.233">
+                               <source>IRRE Tutorial Test Page</source>
+                       </trans-unit>
+                       <trans-unit id="pages.tx_irretutorial_hotels" resname="pages.tx_irretutorial_hotels">
+                               <source>Hotels:</source>
+                       </trans-unit>
+                       <trans-unit id="tt_content.tx_irretutorial_1nff_hotels" resname="tt_content.tx_irretutorial_1nff_hotels">
+                               <source>Hotels (1nff):</source>
+                       </trans-unit>
+                       <trans-unit id="tt_content.tx_irretutorial_1ncsv_hotels" resname="tt_content.tx_irretutorial_1ncsv_hotels">
+                               <source>Hotels (1ncsv):</source>
+                       </trans-unit>
+                       <trans-unit id="tt_content.tx_irretutorial_flexform" resname="tt_content.tx_irretutorial_flexform">
+                               <source>IRRE:</source>
+                       </trans-unit>
+                       <trans-unit id="tt_content.tx_irretutorial_flexform.hotels" resname="tt_content.tx_irretutorial_flexform.hotels">
+                               <source>IRRE:</source>
+                       </trans-unit>
+                       <trans-unit id="tt_content.div.irre" resname="tt_content.div.irre">
+                               <source>IRRE Tutorial</source>
+                       </trans-unit>
+
+                       <trans-unit id="tx_irretutorial_1ncsv_hotel" resname="tx_irretutorial_1ncsv_hotel">
+                               <source>1:n CSV: Hotels</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_1ncsv_offer" resname="tx_irretutorial_1ncsv_offer">
+                               <source>1:n CSV: Offers</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_1ncsv_price" resname="tx_irretutorial_1ncsv_price">
+                               <source>1:n CSV: Prices</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_1nff_hotel" resname="tx_irretutorial_1nff_hotel">
+                               <source>1:n FF: Hotels</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_1nff_offer" resname="tx_irretutorial_1nff_offer">
+                               <source>1:n FF: Offers</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_1nff_price" resname="tx_irretutorial_1nff_price">
+                               <source>1:n FF: Prices</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_mnasym_hotel" resname="tx_irretutorial_mnasym_hotel">
+                               <source>m:n ASym: Hotels</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_mnasym_hotel_offer_rel" resname="tx_irretutorial_mnasym_hotel_offer_rel">
+                               <source>m:n ASym: Hotels&lt;-&gt;Offers</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_mnasym_offer" resname="tx_irretutorial_mnasym_offer">
+                               <source>m:n ASym: Offers</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_mnasym_price" resname="tx_irretutorial_mnasym_price">
+                               <source>m:n ASym: Prices</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_mnmmasym_hotel" resname="tx_irretutorial_mnmmasym_hotel">
+                               <source>m:n (MM) ASym: Hotels</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_mnmmasym_offer" resname="tx_irretutorial_mnmmasym_offer">
+                               <source>m:n (MM) ASym: Offers</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_mnmmasym_price" resname="tx_irretutorial_mnmmasym_price">
+                               <source>m:n (MM) ASym: Prices</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_mnsym_hotel" resname="tx_irretutorial_mnsym_hotel">
+                               <source>m:n Sym: Hotels</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_mnsym_hotel_rel" resname="tx_irretutorial_mnsym_hotel_rel">
+                               <source>m:n Sym: Hotels&lt;-&gt;Hotels</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_mnattr_hotel" resname="tx_irretutorial_mnattr_hotel">
+                               <source>m:n Attr: Hotels</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_mnattr_hotel_offer_rel" resname="tx_irretutorial_mnattr_hotel_offer_rel">
+                               <source>m:n Attr: Hotels&lt;-&gt;Offers</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_mnattr_offer" resname="tx_irretutorial_mnattr_offer">
+                               <source>m:n Attr: Offers</source>
+                       </trans-unit>
+
+                       <trans-unit id="tx_irretutorial_hotel.title" resname="tx_irretutorial_hotel.title">
+                               <source>Title:</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_hotel.offers" resname="tx_irretutorial_hotel.offers">
+                               <source>Offers:</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_hotel.branches" resname="tx_irretutorial_hotel.branches">
+                               <source>Branches:</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_hotel_rel" resname="tx_irretutorial_hotel_rel">
+                               <source>Hotels&lt;-&gt;Hotels</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_hotel_rel.hotelid" resname="tx_irretutorial_hotel_rel.hotelid">
+                               <source>Hotel:</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_hotel_rel.branchid" resname="tx_irretutorial_hotel_rel.branchid">
+                               <source>Branch:</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_hotel_offer_rel" resname="tx_irretutorial_hotel_offer_rel">
+                               <source>Hotels&lt;-&gt;Offers</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_hotel_offer_rel.hotelid" resname="tx_irretutorial_hotel_offer_rel.hotelid">
+                               <source>Hotel:</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_hotel_offer_rel.offerid" resname="tx_irretutorial_hotel_offer_rel.offerid">
+                               <source>Offer:</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_hotel_offer_rel.prices" resname="tx_irretutorial_hotel_offer_rel.prices">
+                               <source>Prices:</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_hotel_offer_rel.quality" resname="tx_irretutorial_hotel_offer_rel.quality">
+                               <source>Quality:</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_hotel_offer_rel.quality.I.0" resname="tx_irretutorial_hotel_offer_rel.quality.I.0">
+                               <source>(1 star) *</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_hotel_offer_rel.quality.I.1" resname="tx_irretutorial_hotel_offer_rel.quality.I.1">
+                               <source>(2 stars) **</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_hotel_offer_rel.quality.I.2" resname="tx_irretutorial_hotel_offer_rel.quality.I.2">
+                               <source>(3 stars) ***</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_hotel_offer_rel.quality.I.3" resname="tx_irretutorial_hotel_offer_rel.quality.I.3">
+                               <source>(4 stars) ****</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_hotel_offer_rel.quality.I.4" resname="tx_irretutorial_hotel_offer_rel.quality.I.4">
+                               <source>(5 stars) *****</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_hotel_offer_rel.allincl" resname="tx_irretutorial_hotel_offer_rel.allincl">
+                               <source>all inclusive:</source>
+                       </trans-unit>
+
+                       <trans-unit id="tx_irretutorial_offer.title" resname="tx_irretutorial_offer.title">
+                               <source>Title:</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_offer.hotels" resname="tx_irretutorial_offer.hotels">
+                               <source>Hotels:</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_offer.prices" resname="tx_irretutorial_offer.prices">
+                               <source>Prices:</source>
+                       </trans-unit>
+
+                       <trans-unit id="tx_irretutorial_price.title" resname="tx_irretutorial_price.title">
+                               <source>Title:</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_price.offers" resname="tx_irretutorial_price.offers">
+                               <source>Offers:</source>
+                       </trans-unit>
+                       <trans-unit id="tx_irretutorial_price.price" resname="tx_irretutorial_price.price">
+                               <source>Price (EUR):</source>
+                       </trans-unit>
+               </body>
+       </file>
+</xliff>
diff --git a/typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Resources/Private/Language/locallang_db.xml b/typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Resources/Private/Language/locallang_db.xml
deleted file mode 100644 (file)
index 279fd02..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<T3locallang>
-       <meta type="array">
-               <type>database</type>
-               <description>Language labels for database tables/fields belonging to extension 'irre_tutorial'</description>
-       </meta>
-       <data type="array">
-               <languageKey index="default" type="array">
-                       <label index="tabs.general">General</label>
-                       <label index="tabs.visibility">Visibility</label>
-
-                       <label index="pages.doktype.div.irre">IRRE Tutorial</label>
-                       <label index="pages.doktype.I.233">IRRE Tutorial Test Page</label>
-                       <label index="pages.tx_irretutorial_hotels">Hotels:</label>
-                       <label index="tt_content.tx_irretutorial_1nff_hotels">Hotels (1nff):</label>
-                       <label index="tt_content.tx_irretutorial_1ncsv_hotels">Hotels (1ncsv):</label>
-                       <label index="tt_content.tx_irretutorial_flexform">IRRE:</label>
-                       <label index="tt_content.tx_irretutorial_flexform.hotels">IRRE:</label>
-                       <label index="tt_content.div.irre">IRRE Tutorial</label>
-
-                       <label index="tx_irretutorial_1ncsv_hotel">1:n CSV: Hotels</label>
-                       <label index="tx_irretutorial_1ncsv_offer">1:n CSV: Offers</label>
-                       <label index="tx_irretutorial_1ncsv_price">1:n CSV: Prices</label>
-                       <label index="tx_irretutorial_1nff_hotel">1:n FF: Hotels</label>
-                       <label index="tx_irretutorial_1nff_offer">1:n FF: Offers</label>
-                       <label index="tx_irretutorial_1nff_price">1:n FF: Prices</label>
-                       <label index="tx_irretutorial_mnasym_hotel">m:n ASym: Hotels</label>
-                       <label index="tx_irretutorial_mnasym_hotel_offer_rel">m:n ASym: Hotels&lt;-&gt;Offers</label>
-                       <label index="tx_irretutorial_mnasym_offer">m:n ASym: Offers</label>
-                       <label index="tx_irretutorial_mnasym_price">m:n ASym: Prices</label>
-                       <label index="tx_irretutorial_mnmmasym_hotel">m:n (MM) ASym: Hotels</label>
-                       <label index="tx_irretutorial_mnmmasym_offer">m:n (MM) ASym: Offers</label>
-                       <label index="tx_irretutorial_mnmmasym_price">m:n (MM) ASym: Prices</label>
-                       <label index="tx_irretutorial_mnsym_hotel">m:n Sym: Hotels</label>
-                       <label index="tx_irretutorial_mnsym_hotel_rel">m:n Sym: Hotels&lt;-&gt;Hotels</label>
-                       <label index="tx_irretutorial_mnattr_hotel">m:n Attr: Hotels</label>
-                       <label index="tx_irretutorial_mnattr_hotel_offer_rel">m:n Attr: Hotels&lt;-&gt;Offers</label>
-                       <label index="tx_irretutorial_mnattr_offer">m:n Attr: Offers</label>
-
-                       <label index="tx_irretutorial_hotel.title">Title:</label>
-                       <label index="tx_irretutorial_hotel.offers">Offers:</label>
-                       <label index="tx_irretutorial_hotel.branches">Branches:</label>
-                       <label index="tx_irretutorial_hotel_rel">Hotels&lt;-&gt;Hotels</label>
-                       <label index="tx_irretutorial_hotel_rel.hotelid">Hotel:</label>
-                       <label index="tx_irretutorial_hotel_rel.branchid">Branch:</label>
-                       <label index="tx_irretutorial_hotel_offer_rel">Hotels&lt;-&gt;Offers</label>
-                       <label index="tx_irretutorial_hotel_offer_rel.hotelid">Hotel:</label>
-                       <label index="tx_irretutorial_hotel_offer_rel.offerid">Offer:</label>
-                       <label index="tx_irretutorial_hotel_offer_rel.prices">Prices:</label>
-                       <label index="tx_irretutorial_hotel_offer_rel.quality">Quality:</label>
-                       <label index="tx_irretutorial_hotel_offer_rel.quality.I.0">(1 star) *</label>
-                       <label index="tx_irretutorial_hotel_offer_rel.quality.I.1">(2 stars) **</label>
-                       <label index="tx_irretutorial_hotel_offer_rel.quality.I.2">(3 stars) ***</label>
-                       <label index="tx_irretutorial_hotel_offer_rel.quality.I.3">(4 stars) ****</label>
-                       <label index="tx_irretutorial_hotel_offer_rel.quality.I.4">(5 stars) *****</label>
-                       <label index="tx_irretutorial_hotel_offer_rel.allincl">all inclusive:</label>
-
-                       <label index="tx_irretutorial_offer.title">Title:</label>
-                       <label index="tx_irretutorial_offer.hotels">Hotels:</label>
-                       <label index="tx_irretutorial_offer.prices">Prices:</label>
-
-                       <label index="tx_irretutorial_price.title">Title:</label>
-                       <label index="tx_irretutorial_price.offers">Offers:</label>
-                       <label index="tx_irretutorial_price.price">Price (EUR):</label>
-               </languageKey>
-       </data>
-</T3locallang>
\ No newline at end of file
index cb7e75b..9f3250f 100644 (file)
@@ -77,8 +77,8 @@ return [
     'types' => [
         '0' => [
             'showitem' =>
-                '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.general, title,' .
-                '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tabs.visibility, sys_language_uid, l10n_parent, l10n_diffsource, hidden'
+                '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.general, title,' .
+                '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xlf:tabs.visibility, sys_language_uid, l10n_parent, l10n_diffsource, hidden'
         ]
     ],
     'palettes' => [
diff --git a/typo3/sysext/core/Tests/UnitDeprecated/Localization/LocalizationFactoryTest.php b/typo3/sysext/core/Tests/UnitDeprecated/Localization/LocalizationFactoryTest.php
deleted file mode 100644 (file)
index 3f857dd..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-namespace TYPO3\CMS\Core\Tests\UnitDeprecated\Localization;
-
-use Prophecy\Argument;
-use TYPO3\CMS\Core\Cache\CacheManager;
-use TYPO3\CMS\Core\Cache\Frontend\FrontendInterface;
-use TYPO3\CMS\Core\Core\Environment;
-use TYPO3\CMS\Core\Localization\LanguageStore;
-use TYPO3\CMS\Core\Localization\LocalizationFactory;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Core\Utility\StringUtility;
-use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
-
-/**
- * Test case
- */
-class LocalizationFactoryTest extends UnitTestCase
-{
-    public function tearDown(): void
-    {
-        // Drop created singletons again
-        GeneralUtility::purgeInstances();
-        parent::tearDown();
-    }
-
-    /**
-     * @test
-     */
-    public function getParsedDataHandlesLocallangXMLOverride()
-    {
-        $cacheManagerProphecy = $this->prophesize(CacheManager::class);
-        $cacheFrontendProphecy = $this->prophesize(FrontendInterface::class);
-        $cacheManagerProphecy->getCache('l10n')->willReturn($cacheFrontendProphecy->reveal());
-        $cacheFrontendProphecy->get(Argument::cetera())->willReturn(false);
-        $cacheFrontendProphecy->set(Argument::cetera())->willReturn(null);
-
-        $store = new LanguageStore();
-        $subject = new LocalizationFactory($store, $cacheManagerProphecy->reveal());
-
-        $unique = 'locallangXMLOverrideTest' . substr(StringUtility::getUniqueId(), 0, 10);
-        $xml = '<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-                       <T3locallang>
-                               <data type="array">
-                                       <languageKey index="default" type="array">
-                                               <label index="buttons.logout">EXIT</label>
-                                       </languageKey>
-                               </data>
-                       </T3locallang>';
-        $file = Environment::getVarPath() . '/tests/' . $unique . '.xml';
-        GeneralUtility::writeFileToTypo3tempDir($file, $xml);
-        $this->testFilesToDelete[] = $file;
-
-        // Get default value
-        $defaultLL = $subject->getParsedData('EXT:core/Resources/Private/Language/locallang_core.xlf', 'default');
-
-        // Set override file
-        $GLOBALS['TYPO3_CONF_VARS']['SYS']['locallangXMLOverride']['EXT:core/Resources/Private/Language/locallang_core.xlf'][$unique] = $file;
-
-        $store->flushData('EXT:core/Resources/Private/Language/locallang_core.xlf');
-
-        // Get override value
-        $overrideLL = $subject->getParsedData('EXT:core/Resources/Private/Language/locallang_core.xlf', 'default');
-
-        self::assertNotEquals($overrideLL['default']['buttons.logout'][0]['target'], '');
-        self::assertNotEquals($defaultLL['default']['buttons.logout'][0]['target'], $overrideLL['default']['buttons.logout'][0]['target']);
-        self::assertEquals($overrideLL['default']['buttons.logout'][0]['target'], 'EXIT');
-    }
-}
diff --git a/typo3/sysext/core/Tests/UnitDeprecated/Localization/Parser/Fixtures/locallang.xml b/typo3/sysext/core/Tests/UnitDeprecated/Localization/Parser/Fixtures/locallang.xml
deleted file mode 100644 (file)
index 770c4cd..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<T3locallang>
-       <meta type="array">
-               <description>Fixture labels for unit tests.</description>
-               <type>module</type>
-       </meta>
-       <data type="array">
-               <languageKey index="default" type="array">
-                       <label index="label1">This is label #1</label>
-                       <label index="label2">This is label #2</label>
-                       <label index="label3">This is label #3</label>
-               </languageKey>
-
-               <languageKey index="md5" type="array">
-                       <label index="label1">409a6edbc70dbeeccbfe5f1e569d6717</label>
-                       <label index="label2">b5dc71ae9f52ecb9e7704c50562e39b0</label>
-                       <label index="label3">51eac55fa5ca15789ce9bbb0cf927296</label>
-               </languageKey>
-       </data>
-</T3locallang>
\ No newline at end of file
diff --git a/typo3/sysext/core/Tests/UnitDeprecated/Localization/Parser/Fixtures/locallangNumericKeys.xml b/typo3/sysext/core/Tests/UnitDeprecated/Localization/Parser/Fixtures/locallangNumericKeys.xml
deleted file mode 100644 (file)
index 7facd53..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<T3locallang>
-       <meta type="array">
-               <description>Fixture labels for unit tests.</description>
-               <type>module</type>
-       </meta>
-       <data type="array">
-               <languageKey index="default" type="array">
-                       <label index="1">This is label #1</label>
-                       <label index="2">This is label #2</label>
-                       <label index="3">This is label #3</label>
-                       <label index="5">This is label #5</label>
-                       <label index="10">This is label #10</label>
-               </languageKey>
-               <languageKey index="fr" type="array">
-                       <label index="1">This is label #1 [FR]</label>
-                       <label index="2">This is label #2 [FR]</label>
-                       <label index="3">This is label #3 [FR]</label>
-                       <label index="5">This is label #5 [FR]</label>
-                       <label index="10">This is label #10 [FR]</label>
-               </languageKey>
-       </data>
-</T3locallang>
\ No newline at end of file
diff --git a/typo3/sysext/core/Tests/UnitDeprecated/Localization/Parser/Fixtures/locallangOnlyDefaultLanguage.xml b/typo3/sysext/core/Tests/UnitDeprecated/Localization/Parser/Fixtures/locallangOnlyDefaultLanguage.xml
deleted file mode 100644 (file)
index 8a78841..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<T3locallang>
-       <meta type="array">
-               <description>Fixture labels for unit tests.</description>
-               <type>module</type>
-       </meta>
-       <data type="array">
-               <languageKey index="default" type="array">
-                       <label index="label1">This is label #1</label>
-                       <label index="label2">This is label #2</label>
-                       <label index="label3">This is label #3</label>
-               </languageKey>
-       </data>
-</T3locallang>
\ No newline at end of file
diff --git a/typo3/sysext/core/Tests/UnitDeprecated/Localization/Parser/Fixtures/locallang_override.xml b/typo3/sysext/core/Tests/UnitDeprecated/Localization/Parser/Fixtures/locallang_override.xml
deleted file mode 100644 (file)
index d719f38..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<T3locallang>
-       <meta type="array">
-               <description>Fixture labels for unit tests.</description>
-               <type>module</type>
-       </meta>
-       <data type="array">
-               <languageKey index="default" type="array">
-                       <label index="label1">This is my 1st label</label>
-                       <label index="label2">This is my 2nd label</label>
-               </languageKey>
-
-               <languageKey index="fr" type="array">
-                       <label index="label1">Ceci est mon 1er libellĂ©</label>
-                       <label index="label3">Ceci est mon 3e libellĂ©</label>
-               </languageKey>
-       </data>
-</T3locallang>
\ No newline at end of file
diff --git a/typo3/sysext/core/Tests/UnitDeprecated/Localization/Parser/LocallangXmlParserTest.php b/typo3/sysext/core/Tests/UnitDeprecated/Localization/Parser/LocallangXmlParserTest.php
deleted file mode 100644 (file)
index 81e27bc..0000000
+++ /dev/null
@@ -1,196 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-namespace TYPO3\CMS\Core\Tests\Unit\Localization\Parser;
-
-use Prophecy\Argument;
-use TYPO3\CMS\Core\Cache\CacheManager;
-use TYPO3\CMS\Core\Cache\Frontend\FrontendInterface;
-use TYPO3\CMS\Core\Core\Environment;
-use TYPO3\CMS\Core\Localization\LanguageStore;
-use TYPO3\CMS\Core\Localization\LocalizationFactory;
-use TYPO3\CMS\Core\Localization\Parser\LocallangXmlParser;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
-
-/**
- * Test case
- */
-class LocallangXmlParserTest extends UnitTestCase
-{
-    /**
-     * @var ObjectProphecy|CacheManager
-     */
-    protected $cacheManagerProphecy;
-
-    /**
-     * Prepares the environment before running a test.
-     */
-    protected function setUp(): void
-    {
-        parent::setUp();
-        $GLOBALS['TYPO3_CONF_VARS']['SYS']['lang']['format']['priority'] = 'xml';
-        $GLOBALS['TYPO3_CONF_VARS']['SYS']['lang']['parser']['xml'] = \TYPO3\CMS\Core\Localization\Parser\LocallangXmlParser::class;
-
-        $this->cacheManagerProphecy = $this->prophesize(CacheManager::class);
-        $cacheFrontendProphecy = $this->prophesize(FrontendInterface::class);
-        $this->cacheManagerProphecy->getCache('l10n')->willReturn($cacheFrontendProphecy->reveal());
-        $cacheFrontendProphecy->get(Argument::cetera())->willReturn(false);
-        $cacheFrontendProphecy->set(Argument::cetera())->willReturn(null);
-
-        GeneralUtility::makeInstance(LanguageStore::class)->initialize();
-    }
-    /**
-     * Cleans up the environment after running a test.
-     */
-    protected function tearDown(): void
-    {
-        GeneralUtility::purgeInstances();
-        parent::tearDown();
-    }
-
-    protected static function getFixtureFilePath($filename)
-    {
-        // We have to take the whole relative path as otherwise this test fails on Windows systems
-        return Environment::getFrameworkBasePath() . '/core/Tests/UnitDeprecated/Localization/Parser/Fixtures/' . $filename;
-    }
-
-    /**
-     * @test
-     */
-    public function canParseLlxmlInEnglish()
-    {
-        $LOCAL_LANG = (new LocallangXmlParser())->getParsedData(self::getFixtureFilePath('locallang.xml'), 'default');
-        self::assertArrayHasKey('default', $LOCAL_LANG, 'default key not found in $LOCAL_LANG');
-        $expectedLabels = [
-            'label1' => 'This is label #1',
-            'label2' => 'This is label #2',
-            'label3' => 'This is label #3'
-        ];
-        foreach ($expectedLabels as $key => $expectedLabel) {
-            self::assertEquals($expectedLabel, $LOCAL_LANG['default'][$key][0]['target']);
-        }
-    }
-
-    /**
-     * @test
-     */
-    public function canParseLlxmlInMd5Code()
-    {
-        $LOCAL_LANG = (new LocallangXmlParser())->getParsedData(self::getFixtureFilePath('locallang.xml'), 'md5');
-        self::assertArrayHasKey('md5', $LOCAL_LANG, 'md5 key not found in $LOCAL_LANG');
-        $expectedLabels = [
-            'label1' => '409a6edbc70dbeeccbfe5f1e569d6717',
-            'label2' => 'b5dc71ae9f52ecb9e7704c50562e39b0',
-            'label3' => '51eac55fa5ca15789ce9bbb0cf927296'
-        ];
-        foreach ($expectedLabels as $key => $expectedLabel) {
-            self::assertEquals($expectedLabel, $LOCAL_LANG['md5'][$key][0]['target']);
-        }
-    }
-
-    /**
-     * @test
-     */
-    public function canParseLlxmlInFrenchAndReturnsNullLabelsIfNoTranslationIsFound()
-    {
-        $localLang = (new LocallangXmlParser())->getParsedData(
-            self::getFixtureFilePath('locallangOnlyDefaultLanguage.xml'),
-            'fr'
-        );
-        // This test case is odd: The system under test does NOT
-        // return 'target' at all if there is no such translation.
-        // @todo: Either change / fix subject, or adapt test and test name!
-        self::assertNull($localLang['fr']['label1'][0]['target'] ?? null);
-        self::assertNull($localLang['fr']['label2'][0]['target'] ?? null);
-        self::assertNull($localLang['fr']['label3'][0]['target'] ?? null);
-    }
-
-    /**
-     * @test
-     */
-    public function canOverrideLlxml()
-    {
-        /** @var $factory LocalizationFactory */
-        $factory = new LocalizationFactory(new LanguageStore(), $this->cacheManagerProphecy->reveal());
-
-        $GLOBALS['TYPO3_CONF_VARS']['SYS']['locallangXMLOverride'][self::getFixtureFilePath('locallang.xml')][] = self::getFixtureFilePath('locallang_override.xml');
-        $LOCAL_LANG = array_merge(
-            $factory->getParsedData(self::getFixtureFilePath('locallang.xml'), 'default'),
-            $factory->getParsedData(self::getFixtureFilePath('locallang.xml'), 'md5')
-        );
-        self::assertArrayHasKey('default', $LOCAL_LANG, 'default key not found in $LOCAL_LANG');
-        self::assertArrayHasKey('md5', $LOCAL_LANG, 'md5 key not found in $LOCAL_LANG');
-        $expectedLabels = [
-            'default' => [
-                'label1' => 'This is my 1st label',
-                'label2' => 'This is my 2nd label',
-                'label3' => 'This is label #3'
-            ],
-            'md5' => [
-                'label1' => '409a6edbc70dbeeccbfe5f1e569d6717',
-                'label2' => 'b5dc71ae9f52ecb9e7704c50562e39b0',
-                'label3' => '51eac55fa5ca15789ce9bbb0cf927296'
-            ]
-        ];
-        foreach ($expectedLabels as $languageKey => $expectedLanguageLabels) {
-            foreach ($expectedLanguageLabels as $key => $expectedLabel) {
-                self::assertEquals($expectedLabel, $LOCAL_LANG[$languageKey][$key][0]['target']);
-            }
-        }
-    }
-
-    public function numericKeysDataProvider()
-    {
-        return [
-            'Numeric key 1' => [
-                1,
-                'This is label #1 [FR]'
-            ],
-            'Numeric key 2' => [
-                2,
-                'This is label #2 [FR]'
-            ],
-            'Numeric key 3' => [
-                3,
-                'This is label #3 [FR]'
-            ],
-            'Numeric key 5' => [
-                5,
-                'This is label #5 [FR]'
-            ],
-            'Numeric key 10' => [
-                10,
-                'This is label #10 [FR]'
-            ],
-        ];
-    }
-
-    /**
-     * @test
-     * @dataProvider numericKeysDataProvider
-     */
-    public function canTranslateNumericKeys($key, $expectedResult)
-    {
-        /** @var $factory LocalizationFactory */
-        $factory = new LocalizationFactory(new LanguageStore(), $this->cacheManagerProphecy->reveal());
-
-        $LOCAL_LANG = $factory->getParsedData(self::getFixtureFilePath('locallangNumericKeys.xml'), 'fr');
-
-        self::assertEquals($expectedResult, $LOCAL_LANG['fr'][$key][0]['target']);
-    }
-}
index a138d04..6fb791c 100644 (file)
@@ -135,7 +135,7 @@ class LocalizationUtility
     }
 
     /**
-     * Loads local-language values by looking for a "locallang.xlf" (or "locallang.xml") file in the plugin resources directory and if found includes it.
+     * Loads local-language values by looking for a "locallang.xlf" file in the plugin resources directory and if found includes it.
      * Also locallang values set in the TypoScript property "_LOCAL_LANG" are merged onto the values found in the "locallang.xlf" file.
      *
      * @param string $languageFilePath
index 34b919f..42afb5d 100644 (file)
@@ -4,5 +4,5 @@ defined('TYPO3_MODE') or die();
 
 if (is_array($GLOBALS['TCA']['fe_users']['columns']['tx_extbase_type'])) {
     $GLOBALS['TCA']['fe_users']['types']['ExtbaseTeam\BlogExample\Domain\Model\Administrator'] = $GLOBALS['TCA']['fe_users']['types']['0'];
-    $GLOBALS['TCA']['fe_users']['columns']['tx_extbase_type']['config']['items'][] = ['LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:fe_users.tx_extbase_type.ExtbaseTeam\BlogExample\Domain\Model\Administrator', 'ExtbaseTeam\BlogExample\Domain\Model\Administrator'];
+    $GLOBALS['TCA']['fe_users']['columns']['tx_extbase_type']['config']['items'][] = ['LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:fe_users.tx_extbase_type.ExtbaseTeam\BlogExample\Domain\Model\Administrator', 'ExtbaseTeam\BlogExample\Domain\Model\Administrator'];
 }
index 09f854a..2e9c96b 100644 (file)
@@ -2,7 +2,7 @@
 
 return [
     'ctrl' => [
-        'title' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_blog',
+        'title' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_blog',
         'label' => 'title',
         'tstamp' => 'tstamp',
         'crdate' => 'crdate',
@@ -89,7 +89,7 @@ return [
             ],
         ],
         'title' => [
-            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_blog.title',
+            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_blog.title',
             'config' => [
                 'type' => 'input',
                 'size' => 20,
@@ -98,7 +98,7 @@ return [
             ]
         ],
         'subtitle' => [
-            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_post.subtitle',
+            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_post.subtitle',
             'config' => [
                 'type' => 'input',
                 'size' => 20,
@@ -108,7 +108,7 @@ return [
         ],
         'description' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_blog.description',
+            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_blog.description',
             'config' => [
                 'type' => 'text',
                 'eval' => 'required',
@@ -118,12 +118,12 @@ return [
         ],
         'logo' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_blog.logo',
+            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_blog.logo',
             'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig('logo')
         ],
         'posts' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_blog.posts',
+            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_blog.posts',
             'config' => [
                 'type' => 'inline',
                 'foreign_table' => 'tx_blogexample_domain_model_post',
@@ -137,7 +137,7 @@ return [
         ],
         'administrator' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_blog.administrator',
+            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_blog.administrator',
             'config' => [
                 'type' => 'select',
                 'renderType' => 'selectSingle',
index b423670..e2c3db8 100644 (file)
@@ -2,7 +2,7 @@
 
 return [
     'ctrl' => [
-        'title' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_comment',
+        'title' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_comment',
         'label' => 'date',
         'label_alt' => 'author',
         'label_alt_force' => true,
@@ -24,7 +24,7 @@ return [
         ],
         'date' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_comment.date',
+            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_comment.date',
             'config' => [
                 'type' => 'input',
                 'renderType' => 'inputDateTime',
@@ -35,7 +35,7 @@ return [
             ]
         ],
         'author' => [
-            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_comment.author',
+            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_comment.author',
             'config' => [
                 'type' => 'input',
                 'size' => 20,
@@ -44,7 +44,7 @@ return [
             ]
         ],
         'email' => [
-            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_comment.email',
+            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_comment.email',
             'config' => [
                 'type' => 'input',
                 'size' => 20,
@@ -54,7 +54,7 @@ return [
         ],
         'content' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_comment.content',
+            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_comment.content',
             'config' => [
                 'type' => 'text',
                 'rows' => 30,
index e098200..da19acb 100644 (file)
@@ -2,7 +2,7 @@
 
 return [
     'ctrl' => [
-        'title' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_dateexample',
+        'title' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_dateexample',
         'label' => 'title',
         'tstamp' => 'tstamp',
         'crdate' => 'crdate',
index d0a2c0e..9244a5b 100644 (file)
@@ -2,7 +2,7 @@
 
 return [
     'ctrl' => [
-        'title' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_info',
+        'title' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_info',
         'label' => 'name',
         'tstamp' => 'tstamp',
         'crdate' => 'crdate',
@@ -71,7 +71,7 @@ return [
             ]
         ],
         'name' => [
-            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_info.name',
+            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_info.name',
             'config' => [
                 'type' => 'input',
                 'size' => 20,
index b2173f7..643de62 100644 (file)
@@ -2,7 +2,7 @@
 
 return [
     'ctrl' => [
-        'title' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_person',
+        'title' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_person',
         'label' => 'lastname',
         'label_alt' => 'firstname',
         'label_alt_force' => true,
@@ -58,7 +58,7 @@ return [
             ]
         ],
         'firstname' => [
-            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_person.firstname',
+            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_person.firstname',
             'config' => [
                 'type' => 'input',
                 'size' => 20,
@@ -67,7 +67,7 @@ return [
             ]
         ],
         'lastname' => [
-            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_person.lastname',
+            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_person.lastname',
             'config' => [
                 'type' => 'input',
                 'size' => 20,
@@ -76,7 +76,7 @@ return [
             ]
         ],
         'email' => [
-            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_person.email',
+            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_person.email',
             'config' => [
                 'type' => 'input',
                 'size' => 20,
@@ -85,7 +85,7 @@ return [
             ]
         ],
         'tags' => [
-            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_person.tags',
+            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_person.tags',
             'config' => [
                 'type' => 'inline',
                 'foreign_table' => 'tx_blogexample_domain_model_tag',
@@ -103,7 +103,7 @@ return [
         ],
         'tags_special' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_person.tags_special',
+            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_person.tags_special',
             'config' => [
                 'type' => 'inline',
                 'foreign_table' => 'tx_blogexample_domain_model_tag',
index d1f53ac..526a813 100644 (file)
@@ -2,7 +2,7 @@
 
 return [
     'ctrl' => [
-        'title' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_post',
+        'title' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_post',
         'label' => 'title',
         'label_alt' => 'author',
         'label_alt_force' => true,
@@ -73,7 +73,7 @@ return [
         ],
         'blog' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_post.blog',
+            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_post.blog',
             'config' => [
                 'type' => 'select',
                 'renderType' => 'selectSingle',
@@ -82,7 +82,7 @@ return [
             ]
         ],
         'title' => [
-            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_post.title',
+            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_post.title',
             'config' => [
                 'type' => 'input',
                 'size' => 20,
@@ -92,7 +92,7 @@ return [
         ],
         'date' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_post.date',
+            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_post.date',
             'config' => [
                 'type' => 'input',
                 'renderType' => 'inputDateTime',
@@ -103,7 +103,7 @@ return [
         ],
         'author' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_post.author',
+            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_post.author',
             'config' => [
                 'type' => 'select',
                 'renderType' => 'selectSingle',
@@ -123,7 +123,7 @@ return [
         ],
         'second_author' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_post.second_author',
+            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_post.second_author',
             'config' => [
                 'type' => 'group',
                 'internal_type' => 'db',
@@ -145,7 +145,7 @@ return [
         ],
         'reviewer' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_post.reviewer',
+            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_post.reviewer',
             'config' => [
                 'type' => 'select',
                 'renderType' => 'selectSingle',
@@ -165,7 +165,7 @@ return [
         ],
         'content' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_post.content',
+            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_post.content',
             'config' => [
                 'type' => 'text',
                 'rows' => 30,
@@ -174,7 +174,7 @@ return [
         ],
         'tags' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_post.tags',
+            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_post.tags',
             'config' => [
                 'type' => 'inline',
                 'foreign_table' => 'tx_blogexample_domain_model_tag',
@@ -189,7 +189,7 @@ return [
         ],
         'comments' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_post.comments',
+            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_post.comments',
             'config' => [
                 'type' => 'inline',
                 'foreign_table' => 'tx_blogexample_domain_model_comment',
@@ -205,7 +205,7 @@ return [
         ],
         'related_posts' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_post.related',
+            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_post.related',
             'config' => [
                 'type' => 'select',
                 'renderType' => 'selectMultipleSideBySide',
@@ -220,7 +220,7 @@ return [
         ],
         'additional_name' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_post.additional_name',
+            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_post.additional_name',
             'config' => [
                 'type' => 'inline', // this will store the info uid in the additional_name field (CSV)
                 'foreign_table' => 'tx_blogexample_domain_model_info',
@@ -230,7 +230,7 @@ return [
         ],
         'additional_info' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_post.additional_info',
+            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_post.additional_info',
             'config' => [
                 'type' => 'inline', // this will store the post uid in the post field of the info table
                 'foreign_table' => 'tx_blogexample_domain_model_info',
@@ -241,7 +241,7 @@ return [
         ],
         'additional_comments' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_post.additional_comments',
+            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_post.additional_comments',
             'config' => [
                 'type' => 'inline', // this will store the comments uids in the additional_comments field (CSV)
                 'foreign_table' => 'tx_blogexample_domain_model_comment',
index d3573b0..8d3992a 100644 (file)
@@ -2,7 +2,7 @@
 
 return [
     'ctrl' => [
-        'title' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_tag',
+        'title' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_tag',
         'label' => 'name',
         'tstamp' => 'tstamp',
         'crdate' => 'crdate',
@@ -61,7 +61,7 @@ return [
             ]
         ],
         'name' => [
-            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_tag.name',
+            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_tag.name',
             'config' => [
                 'type' => 'input',
                 'size' => 20,
@@ -71,7 +71,7 @@ return [
         ],
         'posts' => [
             'exclude' => true,
-            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_tag.posts',
+            'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xlf:tx_blogexample_domain_model_tag.posts',
             'config' => [
                 'type' => 'select',
                 'renderType' => 'selectMultipleSideBySide',
diff --git a/typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/blog_example/Resources/Private/Language/locallang_csh.xlf b/typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/blog_example/Resources/Private/Language/locallang_csh.xlf
new file mode 100644 (file)
index 0000000..8e4d4a6
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xliff version="1.0" xmlns:t3="http://typo3.org/schemas/xliff">
+       <file t3:id="1591192384" source-language="en" datatype="plaintext" original="EXT:blog_example/Resources/Private/Language/locallang_csh.xlf" date="2020-06-03T15:50:00Z" product-name="blog_example">
+               <header/>
+               <body>
+                       <trans-unit id=".alttitle" resname=".alttitle">
+                               <source>Blog Example</source>
+                       </trans-unit>
+                       <trans-unit id=".description" resname=".description">
+                               <source>This is some dummy help. But it's context sensitive!</source>
+                       </trans-unit>
+                       <trans-unit id=".seeAlso" resname=".seeAlso">
+                               <source>_MOD_web_layout:columns_single</source>
+                       </trans-unit>
+               </body>
+       </file>
+</xliff>
diff --git a/typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/blog_example/Resources/Private/Language/locallang_csh.xml b/typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/blog_example/Resources/Private/Language/locallang_csh.xml
deleted file mode 100644 (file)
index 4ea8692..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<T3locallang>
-       <meta type="array">
-               <type>CSH</type>
-               <description>Language labels for the blog_example context sensitive help (CSH)</description>
-               <csh_table>_MOD_txblogexampleM1</csh_table>
-       </meta>
-       <data type="array">
-               <languageKey index="default" type="array">
-                       <label index=".alttitle">Blog Example</label>
-                       <label index=".description">This is some dummy help. But it's context sensitive!</label>
-                       <label index=".seeAlso">_MOD_web_layout:columns_single</label>
-               </languageKey>
-       </data>
-</T3locallang>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/blog_example/Resources/Private/Language/locallang_db.xlf b/typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/blog_example/Resources/Private/Language/locallang_db.xlf
new file mode 100644 (file)
index 0000000..6a9fd6f
--- /dev/null
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xliff version="1.0" xmlns:t3="http://typo3.org/schemas/xliff">
+       <file t3:id="1591192170" source-language="en" datatype="plaintext" original="EXT:blog_example/Resources/Private/Language/locallang_db.xlf" date="2020-06-03T15:50:00Z" product-name="blog_example">
+               <header/>
+               <body>
+                       <trans-unit id="tx_blogexample_domain_model_blog" resname="tx_blogexample_domain_model_blog">
+                               <source>Blog</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_blog.title" resname="tx_blogexample_domain_model_blog.title">
+                               <source>Blog title</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_blog.description" resname="tx_blogexample_domain_model_blog.description">
+                               <source>Short description</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_blog.logo" resname="tx_blogexample_domain_model_blog.logo">
+                               <source>Logo</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_blog.posts" resname="tx_blogexample_domain_model_blog.posts">
+                               <source>Posts</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_blog.administrator" resname="tx_blogexample_domain_model_blog.administrator">
+                               <source>Administrator</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_post" resname="tx_blogexample_domain_model_post">
+                               <source>Post</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_post.blog" resname="tx_blogexample_domain_model_post.blog">
+                               <source>Related to</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_post.title" resname="tx_blogexample_domain_model_post.title">
+                               <source>Title</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_post.subtitle" resname="tx_blogexample_domain_model_post.subtitle">
+                               <source>Title</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_post.date" resname="tx_blogexample_domain_model_post.date">
+                               <source>Date</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_post.author" resname="tx_blogexample_domain_model_post.author">
+                               <source>Author</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_post.second_author" resname="tx_blogexample_domain_model_post.second_author">
+                               <source>Second author</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_post.reviewer" resname="tx_blogexample_domain_model_post.reviewer">
+                               <source>Reviewer</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_post.content" resname="tx_blogexample_domain_model_post.content">
+                               <source>Content</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_post.votes" resname="tx_blogexample_domain_model_post.votes">
+                               <source>Votes</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_post.published" resname="tx_blogexample_domain_model_post.published">
+                               <source>Published</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_post.tags" resname="tx_blogexample_domain_model_post.tags">
+                               <source>Tags</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_post.comments" resname="tx_blogexample_domain_model_post.comments">
+                               <source>Comments</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_post.related" resname="tx_blogexample_domain_model_post.related">
+                               <source>Related posts</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_post.additional_info" resname="tx_blogexample_domain_model_post.additional_info">
+                               <source>Additional info (inline 1:1 foreign_field)</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_post.additional_name" resname="tx_blogexample_domain_model_post.additional_name">
+                               <source>Additional name (inline 1:1 csv)</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_post.additional_comments" resname="tx_blogexample_domain_model_post.additional_comments">
+                               <source>Additional comments (inline 1:n csv)</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_person" resname="tx_blogexample_domain_model_person">
+                               <source>Person</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_person.firstname" resname="tx_blogexample_domain_model_person.firstname">
+                               <source>Firstname</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_person.lastname" resname="tx_blogexample_domain_model_person.lastname">
+                               <source>Lastname</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_person.email" resname="tx_blogexample_domain_model_person.email">
+                               <source>E-Mail</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_person.avatar" resname="tx_blogexample_domain_model_person.avatar">
+                               <source>Avatar</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_person.tags" resname="tx_blogexample_domain_model_person.tags">
+                               <source>Tags</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_person.tags_special" resname="tx_blogexample_domain_model_person.tags_special">
+                               <source>Special tags</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_comment" resname="tx_blogexample_domain_model_comment">
+                               <source>Comment</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_comment.date" resname="tx_blogexample_domain_model_comment.date">
+                               <source>Date</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_comment.author" resname="tx_blogexample_domain_model_comment.author">
+                               <source>Author</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_comment.reviewer" resname="tx_blogexample_domain_model_comment.reviewer">
+                               <source>Reviewer</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_comment.email" resname="tx_blogexample_domain_model_comment.email">
+                               <source>Email</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_comment.content" resname="tx_blogexample_domain_model_comment.content">
+                               <source>Content</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_tag" resname="tx_blogexample_domain_model_tag">
+                               <source>Tag</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_tag.name" resname="tx_blogexample_domain_model_tag.name">
+                               <source>Name</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_tag.posts" resname="tx_blogexample_domain_model_tag.posts">
+                               <source>Related posts</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_info" resname="tx_blogexample_domain_model_info">
+                               <source>Additional Info</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_info.name" resname="tx_blogexample_domain_model_info.name">
+                               <source>Additional name</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_info.post" resname="tx_blogexample_domain_model_info.post">
+                               <source>Post - parent</source>
+                       </trans-unit>
+                       <trans-unit id="tx_blogexample_domain_model_dateexample" resname="tx_blogexample_domain_model_dateexample">
+                               <source>Date example</source>
+                       </trans-unit>
+                       <trans-unit id="fe_users.tx_extbase_type.ExtbaseTeam\BlogExample\Domain\Model\Administrator" resname="fe_users.tx_extbase_type.ExtbaseTeam\BlogExample\Domain\Model\Administrator">
+                               <source>Blog Admin (BlogExample)</source>
+                       </trans-unit>
+               </body>
+       </file>
+</xliff>
diff --git a/typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/blog_example/Resources/Private/Language/locallang_db.xml b/typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/blog_example/Resources/Private/Language/locallang_db.xml
deleted file mode 100644 (file)
index 1667f65..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<T3locallang>
-       <meta type="array">
-               <type>database</type>
-               <description>Language labels for database tables/fields belonging to extension 'blog_example'</description>
-       </meta>
-       <data type="array">
-               <languageKey index="default" type="array">
-                       <label index="tx_blogexample_domain_model_blog">Blog</label>
-                       <label index="tx_blogexample_domain_model_blog.title">Blog title</label>
-                       <label index="tx_blogexample_domain_model_blog.description">Short description</label>
-                       <label index="tx_blogexample_domain_model_blog.logo">Logo</label>
-                       <label index="tx_blogexample_domain_model_blog.posts">Posts</label>
-                       <label index="tx_blogexample_domain_model_blog.administrator">Administrator</label>
-                       <label index="tx_blogexample_domain_model_post">Post</label>
-                       <label index="tx_blogexample_domain_model_post.blog">Related to</label>
-                       <label index="tx_blogexample_domain_model_post.title">Title</label>
-                       <label index="tx_blogexample_domain_model_post.subtitle">Title</label>
-                       <label index="tx_blogexample_domain_model_post.date">Date</label>
-                       <label index="tx_blogexample_domain_model_post.author">Author</label>
-                       <label index="tx_blogexample_domain_model_post.second_author">Second author</label>
-                       <label index="tx_blogexample_domain_model_post.reviewer">Reviewer</label>
-                       <label index="tx_blogexample_domain_model_post.content">Content</label>
-                       <label index="tx_blogexample_domain_model_post.votes">Votes</label>
-                       <label index="tx_blogexample_domain_model_post.published">Published</label>
-                       <label index="tx_blogexample_domain_model_post.tags">Tags</label>
-                       <label index="tx_blogexample_domain_model_post.comments">Comments</label>
-                       <label index="tx_blogexample_domain_model_post.related">Related posts</label>
-                       <label index="tx_blogexample_domain_model_post.additional_info">Additional info (inline 1:1 foreign_field)</label>
-                       <label index="tx_blogexample_domain_model_post.additional_name">Additional name (inline 1:1 csv)</label>
-                       <label index="tx_blogexample_domain_model_post.additional_comments">Additional comments (inline 1:n csv)</label>
-                       <label index="tx_blogexample_domain_model_person">Person</label>
-                       <label index="tx_blogexample_domain_model_person.firstname">Firstname</label>
-                       <label index="tx_blogexample_domain_model_person.lastname">Lastname</label>
-                       <label index="tx_blogexample_domain_model_person.email">E-Mail</label>
-                       <label index="tx_blogexample_domain_model_person.avatar">Avatar</label>
-                       <label index="tx_blogexample_domain_model_person.tags">Tags</label>
-                       <label index="tx_blogexample_domain_model_person.tags_special">Special tags</label>
-                       <label index="tx_blogexample_domain_model_comment">Comment</label>
-                       <label index="tx_blogexample_domain_model_comment.date">Date</label>
-                       <label index="tx_blogexample_domain_model_comment.author">Author</label>
-                       <label index="tx_blogexample_domain_model_comment.reviewer">Reviewer</label>
-                       <label index="tx_blogexample_domain_model_comment.email">Email</label>
-                       <label index="tx_blogexample_domain_model_comment.content">Content</label>
-                       <label index="tx_blogexample_domain_model_tag">Tag</label>
-                       <label index="tx_blogexample_domain_model_tag.name">Name</label>
-                       <label index="tx_blogexample_domain_model_tag.posts">Related posts</label>
-                       <label index="tx_blogexample_domain_model_info">Additional Info</label>
-                       <label index="tx_blogexample_domain_model_info.name">Additional name</label>
-                       <label index="tx_blogexample_domain_model_info.post">Post - parent</label>
-                       <label index="tx_blogexample_domain_model_dateexample">Date example</label>
-                       <label index="fe_users.tx_extbase_type.ExtbaseTeam\BlogExample\Domain\Model\Administrator">Blog Admin (BlogExample)</label>
-               </languageKey>
-       </data>
-</T3locallang>
index 9fd71de..24846ad 100644 (file)
@@ -5,7 +5,7 @@ defined('TYPO3_MODE') or die();
 /**
  * Add labels for context sensitive help (CSH)
  */
-\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addLLrefForTCAdescr('_MOD_web_BlogExampleTxBlogexampleM1', 'EXT:blog_example/Resources/Private/Language/locallang_csh.xml');
+\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addLLrefForTCAdescr('_MOD_web_BlogExampleTxBlogexampleM1', 'EXT:blog_example/Resources/Private/Language/locallang_csh.xlf');
 
 \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin('blog_example', 'Blogs', 'Blog listing');
 
index c53efdf..1873594 100644 (file)
@@ -966,7 +966,7 @@ class AbstractPlugin
      * plugin class directory ($this->scriptRelPath).
      * Also locallang values set in the TypoScript property "_LOCAL_LANG" are
      * merged onto the values found in the "locallang" file.
-     * Supported file extensions xlf, xml
+     * Supported file extensions xlf
      *
      * @param string $languageFilePath path to the plugin language file in format EXT:....
      */
index 7d51bd4..95578e7 100644 (file)
@@ -1339,6 +1339,7 @@ return [
     'TYPO3\CMS\Core\Localization\Parser\LocallangXmlParser' => [
         'restFiles' => [
             'Deprecation-89037-DeprecatedLocallangXmlParser.rst',
+            'Breaking-91473-DeprecatedFunctionalityRemoved.rst'
         ],
     ],
     'TYPO3\CMS\Extbase\Mvc\Controller\AbstractController' => [