diff --git a/src/libraries/System.Globalization/tests/CultureInfo/CultureInfoEnglishName.cs b/src/libraries/System.Globalization/tests/CultureInfo/CultureInfoEnglishName.cs index ad2c2c9eda57b4..67a19e61401164 100644 --- a/src/libraries/System.Globalization/tests/CultureInfo/CultureInfoEnglishName.cs +++ b/src/libraries/System.Globalization/tests/CultureInfo/CultureInfoEnglishName.cs @@ -8,15 +8,18 @@ namespace System.Globalization.Tests { public class CultureInfoEnglishName { + // Android has its own ICU, which doesn't 100% map to UsingLimitedCultures + public static bool SupportFullGlobalizationData => PlatformDetection.IsNotUsingLimitedCultures || PlatformDetection.IsAndroid; + public static IEnumerable EnglishName_TestData() { yield return new object[] { CultureInfo.CurrentCulture.Name, CultureInfo.CurrentCulture.EnglishName }; - // Android has its own ICU, which doesn't 100% map to UsingLimitedCultures - if (PlatformDetection.IsNotUsingLimitedCultures || PlatformDetection.IsAndroid) + if (SupportFullGlobalizationData) { yield return new object[] { "en-US", "English (United States)" }; yield return new object[] { "fr-FR", "French (France)" }; + yield return new object[] { "uz-Cyrl", "Uzbek (Cyrillic)" }; } else { @@ -33,5 +36,17 @@ public void EnglishName(string name, string expected) CultureInfo myTestCulture = new CultureInfo(name); Assert.Equal(expected, myTestCulture.EnglishName); } + + [ConditionalFact(nameof(SupportFullGlobalizationData))] + public void ChineseNeutralEnglishName() + { + CultureInfo ci = new CultureInfo("zh-Hans"); + Assert.True(ci.EnglishName == "Chinese (Simplified)" || ci.EnglishName == "Chinese, Simplified", + $"'{ci.EnglishName}' not equal to `Chinese (Simplified)` nor `Chinese, Simplified`"); + + ci = new CultureInfo("zh-HanT"); + Assert.True(ci.EnglishName == "Chinese (Traditional)" || ci.EnglishName == "Chinese, Traditional", + $"'{ci.EnglishName}' not equal to `Chinese (Traditional)` nor `Chinese, Traditional`"); + } } } diff --git a/src/libraries/System.Private.CoreLib/src/System/Globalization/CultureData.cs b/src/libraries/System.Private.CoreLib/src/System/Globalization/CultureData.cs index c952e4cb0cdddd..43e0cfe87fc12a 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Globalization/CultureData.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Globalization/CultureData.cs @@ -969,7 +969,12 @@ internal string EnglishName // If its neutral use the language name if (IsNeutralCulture) { - englishDisplayName = EnglishLanguageName; + englishDisplayName = GetLocaleInfoCore(LocaleStringData.EnglishDisplayName); + if (string.IsNullOrEmpty(englishDisplayName)) + { + englishDisplayName = EnglishLanguageName; + } + // differentiate the legacy display names switch (_sName) { @@ -1026,7 +1031,12 @@ internal string NativeName // If its neutral use the language name if (IsNeutralCulture) { - nativeDisplayName = NativeLanguageName; + nativeDisplayName = GetLocaleInfoCore(LocaleStringData.NativeDisplayName); + if (string.IsNullOrEmpty(nativeDisplayName)) + { + nativeDisplayName = NativeLanguageName; + } + // differentiate the legacy display names switch (_sName) {