[BUGFIX] Make extensionName parameter optional for LocalizationUtility::translate() 19/53419/2
authorXavier Perseguers <xavier@typo3.org>
Tue, 9 May 2017 10:33:24 +0000 (12:33 +0200)
committerMarkus Klein <markus.klein@typo3.org>
Thu, 6 Jul 2017 14:26:11 +0000 (16:26 +0200)
This patch prevents a PHP warning when second parameter of the method is not provided.
The extensionName is indeed optional since a fully qualified reference (starting with
"LLL:" may be provided as key.

Resolves: #81168
Releases: master, 8.7
Change-Id: I69145eb9379533b323696354d508b54bdbe4bd51
Reviewed-on: https://review.typo3.org/53419
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Markus Klein <markus.klein@typo3.org>
Tested-by: Markus Klein <markus.klein@typo3.org>
typo3/sysext/extbase/Classes/Utility/LocalizationUtility.php
typo3/sysext/extbase/Tests/Unit/Utility/LocalizationUtilityTest.php

index 25abcf1..60968bd 100644 (file)
@@ -72,18 +72,23 @@ class LocalizationUtility
      * Returns the localized label of the LOCAL_LANG key, $key.
      *
      * @param string $key The key from the LOCAL_LANG array for which to return the value.
-     * @param string $extensionName The name of the extension
+     * @param string|null $extensionName The name of the extension
      * @param array $arguments the arguments of the extension, being passed over to vsprintf
      * @return string|NULL The value from LOCAL_LANG or NULL if no translation was found.
      * @api
      * @todo : If vsprintf gets a malformed string, it returns FALSE! Should we throw an exception there?
      */
-    public static function translate($key, $extensionName, $arguments = null)
+    public static function translate($key, $extensionName = null, $arguments = null)
     {
         $value = null;
         if (GeneralUtility::isFirstPartOfStr($key, 'LLL:')) {
             $value = self::translateFileReference($key);
         } else {
+            if (empty($extensionName)) {
+                throw new \InvalidArgumentException(
+                    'Parameter $extensionName cannot be empty if a fully-qualified key is not specified.', 1498144052
+                );
+            }
             self::initializeLocalization($extensionName);
             // The "from" charset of csConv() is only set for strings from TypoScript via _LOCAL_LANG
             if (!empty(self::$LOCAL_LANG[$extensionName][self::$languageKey][$key][0]['target'])
index a68680c..9e6aa7d 100644 (file)
@@ -454,4 +454,25 @@ class LocalizationUtilityTest extends \TYPO3\TestingFramework\Core\Unit\UnitTest
         $this->assertNotNull($result);
         $this->assertEquals('', $result);
     }
+
+    /**
+     * Tests whether method can be invoked without second parameter. Actual translation is not tested here.
+     *
+     * @test
+     */
+    public function translateWithFullyQualifiedKey()
+    {
+        $result = LocalizationUtility::translate('LLL:EXT:extbase/Resources/Private/Language/locallang_db.xlf:fe_users.tx_extbase_type');
+        $this->assertNotEmpty($result);
+    }
+
+    /**
+     * @test
+     */
+    public function translateThrowsExceptionWithEmptyExtensionNameIfKeyIsNotPrefixedWithLLL()
+    {
+        $this->expectException(\InvalidArgumentException::class);
+        $this->expectExceptionCode(1498144052);
+        LocalizationUtility::translate('foo/bar', '');
+    }
 }