diff --git a/src/libraries/System.Globalization/tests/CultureInfo/CultureInfoCtor.cs b/src/libraries/System.Globalization/tests/CultureInfo/CultureInfoCtor.cs index 266f9fc7ef2af..8f056a90f5990 100644 --- a/src/libraries/System.Globalization/tests/CultureInfo/CultureInfoCtor.cs +++ b/src/libraries/System.Globalization/tests/CultureInfo/CultureInfoCtor.cs @@ -471,6 +471,8 @@ public void TestNeutralCultureWithCollationName() [InlineData("xx-u-XX-u-yy", "xx-u-xx-u-yy")] [InlineData("xx-t-ja-JP", "xx-t-ja-jp")] [InlineData("qps-plocm", "qps-PLOCM")] // ICU normalize this name to "qps--plocm" which we normalize it back to "qps-plocm" + [InlineData("zh_CN", "zh_cn")] + [InlineData("km_KH", "km_kh")] [ConditionalTheory(nameof(SupportRemoteExecutionWithIcu))] public void TestCreationWithICUNormalizedNames(string cultureName, string expectedCultureName) { diff --git a/src/libraries/System.Private.CoreLib/src/System/Globalization/CultureData.Icu.cs b/src/libraries/System.Private.CoreLib/src/System/Globalization/CultureData.Icu.cs index 6bf28add62c12..a1f244246de9f 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Globalization/CultureData.Icu.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Globalization/CultureData.Icu.cs @@ -138,13 +138,9 @@ private bool InitIcuCultureDataCore() _bNeutral = TwoLetterISOCountryName.Length == 0; _sSpecificCulture = _bNeutral ? IcuLocaleData.GetSpecificCultureName(_sRealName) : _sRealName; - if (_bNeutral && collationStart > 0) - { - return false; // neutral cultures cannot have collation - } - // Remove the sort from sName unless custom culture - _sName = collationStart < 0 ? _sRealName : _sRealName.Substring(0, collationStart); + // To ensure compatibility, it is necessary to allow the creation of cultures like zh_CN (using ICU notation) in the case of _bNeutral. + _sName = collationStart < 0 || _bNeutral ? _sRealName : _sRealName.Substring(0, collationStart); return true; }