[TASK] Only instantiate Locales in csConv when necessary 32/44932/3
authorBenni Mack <benni@typo3.org>
Tue, 24 Nov 2015 14:21:09 +0000 (15:21 +0100)
committerMarkus Klein <markus.klein@typo3.org>
Wed, 25 Nov 2015 12:34:02 +0000 (13:34 +0100)
The locales property inside CharsetConverter is only
used for detecting the browsers' preferred language,
so it does not need to be instantiated on every TYPO3
request.

Resolves: #71805
Releases: master
Change-Id: I2de5591e75bb7b9dd3feaf2182d3502b0c7384a8
Reviewed-on: https://review.typo3.org/44932
Reviewed-by: Helmut Hummel <helmut.hummel@typo3.org>
Tested-by: Helmut Hummel <helmut.hummel@typo3.org>
Reviewed-by: Markus Klein <markus.klein@typo3.org>
Tested-by: Markus Klein <markus.klein@typo3.org>
typo3/sysext/core/Classes/Charset/CharsetConverter.php

index 1827097..9aaae41 100644 (file)
@@ -52,10 +52,6 @@ use TYPO3\CMS\Core\Utility\GeneralUtility;
  */
 class CharsetConverter
 {
-    /**
-     * @var \TYPO3\CMS\Core\Localization\Locales
-     */
-    protected $locales;
 
     /**
      * ASCII Value for chars with no equivalent.
@@ -522,14 +518,6 @@ class CharsetConverter
     );
 
     /**
-     * Constructor
-     */
-    public function __construct()
-    {
-        $this->locales = GeneralUtility::makeInstance(Locales::class);
-    }
-
-    /**
      * Normalize - changes input character set to lowercase letters.
      *
      * @param string $charset Input charset
@@ -1703,21 +1691,8 @@ class CharsetConverter
      */
     public function getPreferredClientLanguage($languageCodesList)
     {
-        $allLanguageCodes = array();
+        $allLanguageCodes = $this->getAllLanguageCodes();
         $selectedLanguage = 'default';
-        // Get all languages where TYPO3 code is the same as the ISO code
-        foreach ($this->charSetArray as $typo3Lang => $charSet) {
-            $allLanguageCodes[$typo3Lang] = $typo3Lang;
-        }
-        // Get all languages where TYPO3 code differs from ISO code
-        // or needs the country part
-        // the iso codes will here overwrite the default typo3 language in the key
-        foreach ($this->locales->getIsoMapping() as $typo3Lang => $isoLang) {
-            $isoLang = join('-', explode('_', $isoLang));
-            $allLanguageCodes[$typo3Lang] = $isoLang;
-        }
-        // Move the iso codes to the (because we're comparing the keys with "isset" later on)
-        $allLanguageCodes = array_flip($allLanguageCodes);
         $preferredLanguages = GeneralUtility::trimExplode(',', $languageCodesList);
         // Order the preferred languages after they key
         $sortedPreferredLanguages = array();
@@ -1748,6 +1723,28 @@ class CharsetConverter
         return $selectedLanguage;
     }
 
+    /**
+     * Merges all available charsets and locales, currently only used for getPreferredClientLanguage()
+     *
+     * @return array
+     */
+    protected function getAllLanguageCodes() {
+        // Get all languages where TYPO3 code is the same as the ISO code
+        $typo3LanguageCodes = array_keys($this->charSetArray);
+        $allLanguageCodes = array_combine($typo3LanguageCodes, $typo3LanguageCodes);
+        // Get all languages where TYPO3 code differs from ISO code
+        // or needs the country part
+        // the iso codes will here overwrite the default typo3 language in the key
+        /** @var Locales $locales */
+        $locales = GeneralUtility::makeInstance(Locales::class);
+        foreach ($locales->getIsoMapping() as $typo3Lang => $isoLang) {
+            $isoLang = join('-', explode('_', $isoLang));
+            $allLanguageCodes[$typo3Lang] = $isoLang;
+        }
+        // Move the iso codes to the (because we're comparing the keys with "isset" later on)
+        return array_flip($allLanguageCodes);
+    }
+
     /********************************************
      *
      * Internal string operation functions