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);
     }
 }