From c8a5f9ffa99c07a75ae35359e1183b414f995223 Mon Sep 17 00:00:00 2001 From: Tarek Mahmoud Sayed Date: Mon, 12 Jun 2023 09:39:36 -0700 Subject: [PATCH 1/2] Fix neutral cultures created with the underscore --- .../tests/CultureInfo/CultureInfoCtor.cs | 2 ++ .../src/System/Globalization/CultureData.Icu.cs | 8 ++------ 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/libraries/System.Globalization/tests/CultureInfo/CultureInfoCtor.cs b/src/libraries/System.Globalization/tests/CultureInfo/CultureInfoCtor.cs index 329bf076d500c2..0622b4f47091a8 100644 --- a/src/libraries/System.Globalization/tests/CultureInfo/CultureInfoCtor.cs +++ b/src/libraries/System.Globalization/tests/CultureInfo/CultureInfoCtor.cs @@ -463,6 +463,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(typeof(PlatformDetection), nameof(PlatformDetection.IsIcuGlobalization))] 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 2eeb65d50321c5..0d4dad112249ca 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; } From 6465c4ef05de55d1a577fc8a09717dc357d8de19 Mon Sep 17 00:00:00 2001 From: Tarek Mahmoud Sayed Date: Mon, 12 Jun 2023 17:01:37 -0700 Subject: [PATCH 2/2] remove un-needed test --- .../tests/CultureInfo/CultureInfoCtor.cs | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/libraries/System.Globalization/tests/CultureInfo/CultureInfoCtor.cs b/src/libraries/System.Globalization/tests/CultureInfo/CultureInfoCtor.cs index 0622b4f47091a8..44386fa0c6d5a3 100644 --- a/src/libraries/System.Globalization/tests/CultureInfo/CultureInfoCtor.cs +++ b/src/libraries/System.Globalization/tests/CultureInfo/CultureInfoCtor.cs @@ -452,13 +452,6 @@ public void TestCreationWithMangledSortName(string cultureName, string expectedC Assert.Equal(expectedSortName, ci.CompareInfo.Name); } - [ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsIcuGlobalization))] - public void TestNeutralCultureWithCollationName() - { - Assert.Throws(() => CultureInfo.GetCultureInfo("zh-u-co-zhuyin")); - Assert.Throws(() => CultureInfo.GetCultureInfo("de-u-co-phonebk")); - } - [InlineData("xx-u-XX", "xx-u-xx")] [InlineData("xx-u-XX-u-yy", "xx-u-xx-u-yy")] [InlineData("xx-t-ja-JP", "xx-t-ja-jp")]