diff --git a/typo3/sysext/core/Classes/Localization/Locales.php b/typo3/sysext/core/Classes/Localization/Locales.php index f083eca08beb276844b67374816f6ea446a9e575..b328d77cadcab0d3b55131023d424309229cb884 100644 --- a/typo3/sysext/core/Classes/Localization/Locales.php +++ b/typo3/sysext/core/Classes/Localization/Locales.php @@ -111,7 +111,8 @@ class Locales implements \TYPO3\CMS\Core\SingletonInterface 'vi' => 'vn', // Vietnamese 'zh' => 'hk', // Chinese (China) 'zh_CN' => 'ch', // Chinese (Simplified) - 'zh_HK' => 'hk' + 'zh_HK' => 'hk', // Chinese (Simplified Hong Kong) + 'zh_Hans_CN' => 'ch' // Chinese (Simplified Han) ]; /** @@ -215,7 +216,7 @@ class Locales implements \TYPO3\CMS\Core\SingletonInterface public function getPreferredClientLanguage($languageCodesList) { $allLanguageCodesFromLocales = ['en' => 'default']; - foreach ($this->getIsoMapping() as $typo3Lang => $isoLang) { + foreach ($this->isoReverseMapping as $isoLang => $typo3Lang) { $isoLang = str_replace('_', '-', $isoLang); $allLanguageCodesFromLocales[$isoLang] = $typo3Lang; } diff --git a/typo3/sysext/core/Tests/Unit/Localization/LocalesTest.php b/typo3/sysext/core/Tests/Unit/Localization/LocalesTest.php index 80482270ae8cfb51fba3aaeb48de859eb7ca603c..13e6551b30a11dbc908006c3023d089e120882b3 100644 --- a/typo3/sysext/core/Tests/Unit/Localization/LocalesTest.php +++ b/typo3/sysext/core/Tests/Unit/Localization/LocalesTest.php @@ -34,22 +34,42 @@ class LocalesTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase } /** - * @test + * @return array */ - public function browserLanguageDetectionWorks() + public function browserLanguageDetectionWorksDataProvider(): array { - $browserPreferredLanguageHeader = 'de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4'; - $detectedLanguage = $this->subject->getPreferredClientLanguage($browserPreferredLanguageHeader); - $this->assertSame('de', $detectedLanguage); + return [ + 'german' => [ + 'de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4', + 'de', + ], + 'english as default' => [ + 'en-US;q=0.8,en;q=0.6;de-DE,de;q=0.4', + 'default', + ], + 'chinese simplified' => [ + 'zh-CN,en-US;q=0.5,en;q=0.3', + 'ch' + ], + 'chinese simplified han' => [ + 'zh-Hans-CN,zh-Hans;q=0.8,en-US;q=0.5,en;q=0.3', + 'ch' + ], + ]; } /** + * @param string $acceptLanguageHeader + * @param string $expected + * * @test + * @dataProvider browserLanguageDetectionWorksDataProvider */ - public function englishMayBeDefaultLanguage() + public function browserLanguageDetectionWorks(string $acceptLanguageHeader, string $expected) { - $browserPreferredLanguageHeader = 'en-US;q=0.8,en;q=0.6;de-DE,de;q=0.4'; - $detectedLanguage = $this->subject->getPreferredClientLanguage($browserPreferredLanguageHeader); - $this->assertSame('default', $detectedLanguage); + $detectedLanguage = $this->subject->getPreferredClientLanguage( + $acceptLanguageHeader + ); + $this->assertSame($expected, $detectedLanguage); } }