Skip to content

Commit 42b2b19

Browse files
authored
[Apple-Mobile][Globalization] Refactoring of CalendarData.iOS and new DateTimeFormatInfo* tests (#102464)
* enable ShortDatePattern tests + refactor * LongDatePattern correct format * LongDatePattern tests * fix EnumDatePatterns AddRange for Apple Hybrid * remove duplicate invariant ShorDatePattern test * remove duplicate en-US LongDatePattern case * MonthDayPattern test cases * add _ICU suffix to DatePattern names * DayNames ICU test cases * AbbreviatedDayNames ICU tests * Move GetCalendarInfoNative to EnumCalendarInfo ICU * MonthNames test suit for ICU * AbbreviatedMonthGenitiveNames ICU test suit * AbbreviatedMonthNames ICU test suit * MonthGenitive ICU test suit * refactor CalendarData.iOS.cs to use more of the shared CalendarData.ICU code * refactor new DateTiemFormatInfo* API tests
1 parent c09ec65 commit 42b2b19

13 files changed

+160
-75
lines changed

src/libraries/System.Private.CoreLib/src/System/Globalization/CalendarData.Icu.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -436,7 +436,12 @@ internal static unsafe bool EnumCalendarInfo(string localeName, CalendarId calen
436436
#pragma warning disable CS8500 // takes address of managed type
437437
private static unsafe bool EnumCalendarInfo(string localeName, CalendarId calendarId, CalendarDataType dataType, IcuEnumCalendarsData* callbackContext)
438438
{
439+
#if TARGET_MACCATALYST || TARGET_IOS || TARGET_TVOS
440+
callbackContext->Results.AddRange(GetCalendarInfoNative(localeName, calendarId, dataType).Split("||"));
441+
return callbackContext->Results.Count > 0;
442+
#else
439443
return Interop.Globalization.EnumCalendarInfo(&EnumCalendarInfoCallback, localeName, calendarId, dataType, (IntPtr)callbackContext);
444+
#endif
440445
}
441446
#pragma warning restore CS8500
442447

src/libraries/System.Private.CoreLib/src/System/Globalization/CalendarData.iOS.cs

Lines changed: 12 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -17,24 +17,15 @@ private bool LoadCalendarDataFromNative(string localeName, CalendarId calendarId
1717

1818
sNativeName = GetCalendarInfoNative(localeName, calendarId, CalendarDataType.NativeName);
1919
sMonthDay = GetCalendarInfoNative(localeName, calendarId, CalendarDataType.MonthDay);
20-
saShortDates = GetCalendarInfoNative(localeName, calendarId, CalendarDataType.ShortDates).Split("||");
21-
// Handle ShortDatePattern to have "yyyy" year format
22-
List<string> shortDatePatternList = new List<string>(saShortDates);
23-
for (int i = 0; i < shortDatePatternList.Count; i++)
24-
{
25-
shortDatePatternList[i] = NormalizeDatePattern(shortDatePatternList[i]);
26-
}
27-
FixDefaultShortDatePattern(shortDatePatternList);
28-
saShortDates = shortDatePatternList.ToArray();
29-
30-
saLongDates = GetCalendarInfoNative(localeName, calendarId, CalendarDataType.LongDates).Split("||");
31-
saYearMonths = GetCalendarInfoNative(localeName, calendarId, CalendarDataType.YearMonths).Split("||");
32-
saDayNames = GetCalendarInfoNative(localeName, calendarId, CalendarDataType.DayNames).Split("||");
33-
saAbbrevDayNames = GetCalendarInfoNative(localeName, calendarId, CalendarDataType.AbbrevDayNames).Split("||");
34-
saSuperShortDayNames = GetCalendarInfoNative(localeName, calendarId, CalendarDataType.SuperShortDayNames).Split("||");
20+
EnumDatePatterns(localeName, calendarId, CalendarDataType.ShortDates, out this.saShortDates!);
21+
EnumDatePatterns(localeName, calendarId, CalendarDataType.LongDates, out this.saLongDates!);
22+
EnumDatePatterns(localeName, calendarId, CalendarDataType.YearMonths, out this.saYearMonths!);
23+
EnumCalendarInfo(localeName, calendarId, CalendarDataType.DayNames, out this.saDayNames!);
24+
EnumCalendarInfo(localeName, calendarId, CalendarDataType.AbbrevDayNames, out this.saAbbrevDayNames!);
25+
EnumCalendarInfo(localeName, calendarId, CalendarDataType.SuperShortDayNames, out this.saSuperShortDayNames!);
3526

3627
string? leapHebrewMonthName = null;
37-
saMonthNames = NormalizeMonthArray(GetCalendarInfoNative(localeName, calendarId, CalendarDataType.MonthNames).Split("||"), calendarId, ref leapHebrewMonthName);
28+
EnumMonthNames(localeName, calendarId, CalendarDataType.MonthNames, out this.saMonthNames!, ref leapHebrewMonthName);
3829
if (leapHebrewMonthName != null)
3930
{
4031
Debug.Assert(saMonthNames != null);
@@ -51,62 +42,19 @@ private bool LoadCalendarDataFromNative(string localeName, CalendarId calendarId
5142
saMonthNames[6] = leapHebrewMonthName;
5243

5344
}
54-
saAbbrevMonthNames = NormalizeMonthArray(GetCalendarInfoNative(localeName, calendarId, CalendarDataType.AbbrevMonthNames).Split("||"), calendarId, ref leapHebrewMonthName);
55-
saMonthGenitiveNames = NormalizeMonthArray(GetCalendarInfoNative(localeName, calendarId, CalendarDataType.MonthGenitiveNames).Split("||"), calendarId, ref leapHebrewMonthName);
56-
saAbbrevMonthGenitiveNames = NormalizeMonthArray(GetCalendarInfoNative(localeName, calendarId, CalendarDataType.AbbrevMonthGenitiveNames).Split("||"), calendarId, ref leapHebrewMonthName);
45+
EnumMonthNames(localeName, calendarId, CalendarDataType.AbbrevMonthNames, out this.saAbbrevMonthNames!, ref leapHebrewMonthName);
46+
EnumMonthNames(localeName, calendarId, CalendarDataType.MonthGenitiveNames, out this.saMonthGenitiveNames!, ref leapHebrewMonthName);
47+
EnumMonthNames(localeName, calendarId, CalendarDataType.AbbrevMonthGenitiveNames, out this.saAbbrevMonthGenitiveNames!, ref leapHebrewMonthName);
5748

58-
saEraNames = NormalizeEraNames(calendarId, GetCalendarInfoNative(localeName, calendarId, CalendarDataType.EraNames).Split("||"));
59-
saAbbrevEraNames = Array.Empty<string>();
49+
EnumEraNames(localeName, calendarId, CalendarDataType.EraNames, out this.saEraNames!);
50+
EnumEraNames(localeName, calendarId, CalendarDataType.AbbrevEraNames, out this.saAbbrevEraNames!);
6051

6152
return sNativeName != null && saShortDates != null && saLongDates != null && saYearMonths != null &&
6253
saDayNames != null && saAbbrevDayNames != null && saSuperShortDayNames != null && saMonthNames != null &&
6354
saAbbrevMonthNames != null && saMonthGenitiveNames != null && saAbbrevMonthGenitiveNames != null &&
6455
saEraNames != null && saAbbrevEraNames != null;
6556
}
6657

67-
private static string[] NormalizeEraNames(CalendarId calendarId, string[]? eraNames)
68-
{
69-
// .NET expects that only the Japanese calendars have more than 1 era.
70-
// So for other calendars, only return the latest era.
71-
if (calendarId != CalendarId.JAPAN && calendarId != CalendarId.JAPANESELUNISOLAR && eraNames?.Length > 0)
72-
return new string[] { eraNames![eraNames.Length - 1] };
73-
74-
return eraNames ?? Array.Empty<string>();
75-
}
76-
77-
private static string[] NormalizeMonthArray(string[] months, CalendarId calendarId, ref string? leapHebrewMonthName)
78-
{
79-
if (months.Length == 13)
80-
return months;
81-
82-
string[] normalizedMonths = new string[13];
83-
// the month-name arrays are expected to have 13 elements. If only returns 12, add an
84-
// extra empty string to fill the array.
85-
if (months.Length == 12)
86-
{
87-
normalizedMonths[12] = "";
88-
months.CopyTo(normalizedMonths, 0);
89-
return normalizedMonths;
90-
}
91-
92-
if (months.Length > 13)
93-
{
94-
Debug.Assert(calendarId == CalendarId.HEBREW && months.Length == 14);
95-
96-
if (calendarId == CalendarId.HEBREW)
97-
{
98-
leapHebrewMonthName = months[13];
99-
}
100-
for (int i = 0; i < 13; i++)
101-
{
102-
normalizedMonths[i] = months[i];
103-
}
104-
return normalizedMonths;
105-
}
106-
107-
throw new Exception("CalendarData.GetCalendarInfoNative() returned an unexpected number of month names.");
108-
}
109-
11058
private static string GetCalendarInfoNative(string localeName, CalendarId calendarId, CalendarDataType calendarDataType)
11159
{
11260
Debug.Assert(localeName != null);

src/libraries/System.Runtime/tests/System.Globalization.Tests/DateTimeFormatInfo/DateTimeFormatInfoAbbreviatedDayNames.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@ public static IEnumerable<object[]> AbbreviatedDayNames_Set_TestData()
2828
yield return new object[] { new string[] { "", "", "", "", "", "", "" } };
2929
}
3030

31+
public static IEnumerable<object[]> AbbreviatedDayNames_Get_TestData_ICU()
32+
{
33+
yield return new object[] { CultureInfo.GetCultureInfo("en-US").DateTimeFormat, new string[] { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" } };
34+
yield return new object[] { CultureInfo.GetCultureInfo("fr-FR").DateTimeFormat, new string[] { "dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam." } };
35+
}
36+
3137
public static IEnumerable<object[]> AbbreviatedDayNames_Get_TestData_HybridGlobalization()
3238
{
3339
// see the comments on the right to check the non-Hybrid result, if it differs
@@ -86,6 +92,13 @@ public static IEnumerable<object[]> AbbreviatedDayNames_Get_TestData_HybridGloba
8692
yield return new object[] { "zh-CN", new string[] { "周日", "周一", "周二", "周三", "周四", "周五", "周六" } };
8793
}
8894

95+
[ConditionalTheory(typeof(PlatformDetection), nameof(PlatformDetection.IsIcuGlobalization))]
96+
[MemberData(nameof(AbbreviatedDayNames_Get_TestData_ICU))]
97+
public void AbbreviatedDayNames_Get_ReturnsExpected_ICU(DateTimeFormatInfo format, string[] expected)
98+
{
99+
Assert.Equal(expected, format.AbbreviatedDayNames);
100+
}
101+
89102
[ConditionalTheory(typeof(PlatformDetection), nameof(PlatformDetection.IsHybridGlobalizationOnBrowser))]
90103
[MemberData(nameof(AbbreviatedDayNames_Get_TestData_HybridGlobalization))]
91104
public void AbbreviatedDayNames_Get_ReturnsExpected_HybridGlobalization(string cultureName, string[] expected)

src/libraries/System.Runtime/tests/System.Globalization.Tests/DateTimeFormatInfo/DateTimeFormatInfoAbbreviatedMonthGenitiveNames.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@ namespace System.Globalization.Tests
88
{
99
public class DateTimeFormatInfoAbbreviatedMonthGenitiveNames
1010
{
11+
public static IEnumerable<object[]> AbbreviatedMonthGenitiveNames_Get_TestData_ICU()
12+
{
13+
yield return new object[] { CultureInfo.GetCultureInfo("en-US").DateTimeFormat, new string[] { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "" } };
14+
yield return new object[] { CultureInfo.GetCultureInfo("fr-FR").DateTimeFormat, new string[] { "janv.", "févr.", "mars", "avr.", "mai", "juin", "juil.", "août", "sept.", "oct.", "nov.", "déc.", "" } };
15+
}
1116
public static IEnumerable<object[]> AbbreviatedMonthGenitiveNames_Get_TestData_HybridGlobalization()
1217
{
1318
// see the comments on the right to check the non-Hybrid result, if it differs
@@ -209,6 +214,13 @@ public static IEnumerable<object[]> AbbreviatedMonthGenitiveNames_Get_TestData_H
209214
yield return new object[] { "zh-TW", new string[] { "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月", "" } };
210215
}
211216

217+
[ConditionalTheory(typeof(PlatformDetection), nameof(PlatformDetection.IsIcuGlobalization))]
218+
[MemberData(nameof(AbbreviatedMonthGenitiveNames_Get_TestData_ICU))]
219+
public void AbbreviatedMonthGenitiveNames_Get_ReturnsExpected_ICU(DateTimeFormatInfo format, string[] expected)
220+
{
221+
Assert.Equal(expected, format.AbbreviatedMonthGenitiveNames);
222+
}
223+
212224
[ConditionalTheory(typeof(PlatformDetection), nameof(PlatformDetection.IsHybridGlobalizationOnBrowser))]
213225
[MemberData(nameof(AbbreviatedMonthGenitiveNames_Get_TestData_HybridGlobalization))]
214226
public void AbbreviatedMonthGenitiveNames_Get_ReturnsExpected_HybridGlobalization(string cultureName, string[] expected)

src/libraries/System.Runtime/tests/System.Globalization.Tests/DateTimeFormatInfo/DateTimeFormatInfoAbbreviatedMonthNames.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,13 @@ public static IEnumerable<object[]> AbbreviatedMonthNames_Set_TestData()
2828
yield return new object[] { new string[] { "", "", "", "", "", "", "", "", "", "", "", "", "" } };
2929
}
3030

31+
public static IEnumerable<object[]> AbbreviatedMonthNames_Get_TestData_ICU()
32+
{
33+
yield return new object[] { CultureInfo.GetCultureInfo("en-US").DateTimeFormat, new string[] { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "" } };
34+
yield return new object[] { CultureInfo.GetCultureInfo("fr-FR").DateTimeFormat, new string[] { "janv.", "févr.", "mars", "avr.", "mai", "juin", "juil.", "août", "sept.", "oct.", "nov.", "déc.", "" } };
35+
}
36+
37+
3138
public static IEnumerable<object[]> AbbreviatedMonthNames_Get_TestData_HybridGlobalization()
3239
{
3340
// see the comments on the right to check the non-Hybrid result, if it differs
@@ -232,6 +239,13 @@ public static IEnumerable<object[]> AbbreviatedMonthNames_Get_TestData_HybridGlo
232239
yield return new object[] { "zh-TW", new string[] { "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月", "" } };
233240
}
234241

242+
[ConditionalTheory(typeof(PlatformDetection), nameof(PlatformDetection.IsIcuGlobalization))]
243+
[MemberData(nameof(AbbreviatedMonthNames_Get_TestData_ICU))]
244+
public void AbbreviatedMonthNames_Get_ReturnsExpected_ICU(DateTimeFormatInfo format, string[] expected)
245+
{
246+
Assert.Equal(expected, format.AbbreviatedMonthNames);
247+
}
248+
235249
[ConditionalTheory(typeof(PlatformDetection), nameof(PlatformDetection.IsHybridGlobalizationOnBrowser))]
236250
[MemberData(nameof(AbbreviatedMonthNames_Get_TestData_HybridGlobalization))]
237251
public void AbbreviatedMonthNames_Get_ReturnsExpected_HybridGlobalization(string cultureName, string[] expected)

src/libraries/System.Runtime/tests/System.Globalization.Tests/DateTimeFormatInfo/DateTimeFormatInfoDayNames.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@ public static IEnumerable<object[]> DayNames_Set_TestData()
2828
yield return new object[] { new string[] { "", "", "", "", "", "", "" } };
2929
}
3030

31+
public static IEnumerable<object[]> DayNames_Get_TestData_ICU()
32+
{
33+
yield return new object[] { CultureInfo.GetCultureInfo("en-US").DateTimeFormat, new string[] { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" } };
34+
yield return new object[] { CultureInfo.GetCultureInfo("fr-FR").DateTimeFormat, new string[] { "dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi" } };
35+
}
36+
3137
public static IEnumerable<object[]> DayNames_Get_TestData_HybridGlobalization()
3238
{
3339
yield return new object[] { "ar-SA", new string[] { "الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت" } };
@@ -78,6 +84,13 @@ public static IEnumerable<object[]> DayNames_Get_TestData_HybridGlobalization()
7884
yield return new object[] { "zh-TW", new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" } };
7985
}
8086

87+
[ConditionalTheory(typeof(PlatformDetection), nameof(PlatformDetection.IsIcuGlobalization))]
88+
[MemberData(nameof(DayNames_Get_TestData_ICU))]
89+
public void DayNames_Get_ReturnsExpected_ICU(DateTimeFormatInfo format, string[] expected)
90+
{
91+
Assert.Equal(expected, format.DayNames);
92+
}
93+
8194
[ConditionalTheory(typeof(PlatformDetection), nameof(PlatformDetection.IsHybridGlobalizationOnBrowser))]
8295
[MemberData(nameof(DayNames_Get_TestData_HybridGlobalization))]
8396
public void DayNames_Get_ReturnsExpected_HybridGlobalization(string cultureName, string[] expected)

src/libraries/System.Runtime/tests/System.Globalization.Tests/DateTimeFormatInfo/DateTimeFormatInfoLongDatePattern.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@ public static IEnumerable<object[]> LongDatePattern_Set_TestData()
2525
yield return new object[] { "dddd, dd MMMM yyyy" };
2626
}
2727

28+
public static IEnumerable<object[]> LongDatePattern_Get_TestData_ICU()
29+
{
30+
yield return new object[] { CultureInfo.GetCultureInfo("en-US").DateTimeFormat, "dddd, MMMM d, yyyy" };
31+
yield return new object[] { CultureInfo.GetCultureInfo("fr-FR").DateTimeFormat, "dddd d MMMM yyyy" };
32+
}
33+
2834
public static IEnumerable<object[]> LongDatePattern_Get_TestData_HybridGlobalization()
2935
{
3036
// see the comments on the right to check the non-Hybrid result, if it differs
@@ -218,6 +224,13 @@ public static IEnumerable<object[]> LongDatePattern_Get_TestData_HybridGlobaliza
218224
yield return new object[] {"zh-TW", "yyyy年M月d日 dddd" };
219225
}
220226

227+
[ConditionalTheory(typeof(PlatformDetection), nameof(PlatformDetection.IsIcuGlobalization))]
228+
[MemberData(nameof(LongDatePattern_Get_TestData_ICU))]
229+
public void LongDatePattern_Get_ReturnsExpected_ICU(DateTimeFormatInfo format, string expected)
230+
{
231+
Assert.Equal(expected, format.LongDatePattern);
232+
}
233+
221234
[ConditionalTheory(typeof(PlatformDetection), nameof(PlatformDetection.IsHybridGlobalizationOnBrowser))]
222235
[MemberData(nameof(LongDatePattern_Get_TestData_HybridGlobalization))]
223236
public void LongDatePattern_Get_ReturnsExpected_HybridGlobalization(string cultureName, string expected)

src/libraries/System.Runtime/tests/System.Globalization.Tests/DateTimeFormatInfo/DateTimeFormatInfoMonthDayPattern.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@ public static IEnumerable<object[]> MonthDayPattern_Set_TestData()
2626
yield return new object[] { "m" };
2727
}
2828

29+
public static IEnumerable<object[]> MonthDayPattern_Get_TestData_ICU()
30+
{
31+
yield return new object[] { CultureInfo.GetCultureInfo("en-US").DateTimeFormat, "MMMM d" };
32+
yield return new object[] { CultureInfo.GetCultureInfo("fr-FR").DateTimeFormat, "d MMMM" };
33+
}
34+
2935
public static IEnumerable<object[]> MonthDayPattern_Get_TestData_HybridGlobalization()
3036
{
3137
// see the comments on the right to check the non-Hybrid result, if it differs
@@ -149,7 +155,6 @@ public static IEnumerable<object[]> MonthDayPattern_Get_TestData_HybridGlobaliza
149155
yield return new object[] { new CultureInfo("en-ZA").DateTimeFormat, "d MMMM" };
150156
yield return new object[] { new CultureInfo("en-ZM").DateTimeFormat, "d MMMM" };
151157
yield return new object[] { new CultureInfo("en-ZW").DateTimeFormat, "d MMMM" };
152-
yield return new object[] { new CultureInfo("en-US").DateTimeFormat, "MMMM d" };
153158
yield return new object[] { new CultureInfo("es-419").DateTimeFormat, "d de MMMM" }; // d 'de' MMMM
154159
yield return new object[] { new CultureInfo("es-ES").DateTimeFormat, "d de MMMM" }; // d 'de' MMMM
155160
yield return new object[] { new CultureInfo("es-MX").DateTimeFormat, "d de MMMM" }; // d 'de' MMMM
@@ -216,6 +221,13 @@ public static IEnumerable<object[]> MonthDayPattern_Get_TestData_HybridGlobaliza
216221
yield return new object[] { new CultureInfo("zh-HK").DateTimeFormat, "M月d日" };
217222
yield return new object[] { new CultureInfo("zh-TW").DateTimeFormat, "M月d日" };
218223
}
224+
225+
[ConditionalTheory(typeof(PlatformDetection), nameof(PlatformDetection.IsIcuGlobalization))]
226+
[MemberData(nameof(MonthDayPattern_Get_TestData_ICU))]
227+
public void MonthDayPattern_Get_ReturnsExpected_ICU(DateTimeFormatInfo format, string expected)
228+
{
229+
Assert.Equal(expected, format.MonthDayPattern);
230+
}
219231

220232
[ConditionalTheory(typeof(PlatformDetection), nameof(PlatformDetection.IsHybridGlobalizationOnBrowser))]
221233
[MemberData(nameof(MonthDayPattern_Get_TestData_HybridGlobalization))]

src/libraries/System.Runtime/tests/System.Globalization.Tests/DateTimeFormatInfo/DateTimeFormatInfoMonthGenitiveNames.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public static IEnumerable<object[]> MonthGenitiveNames_Get_TestData()
1313
yield return new object[] { DateTimeFormatInfo.InvariantInfo, new string[] { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", "" } };
1414
yield return new object[]
1515
{
16-
new CultureInfo("ru-RU").DateTimeFormat,
16+
CultureInfo.GetCultureInfo("ru-RU").DateTimeFormat,
1717
new string[]
1818
{
1919
"\u044F\u043D\u0432\u0430\u0440\u044F",
@@ -31,6 +31,11 @@ public static IEnumerable<object[]> MonthGenitiveNames_Get_TestData()
3131
""
3232
}
3333
};
34+
if (PlatformDetection.IsIcuGlobalization)
35+
{
36+
yield return new object[] { CultureInfo.GetCultureInfo("en-US").DateTimeFormat, new string[] { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", "" } };
37+
yield return new object[] { CultureInfo.GetCultureInfo("fr-FR").DateTimeFormat, new string[] { "janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre", "" } };
38+
}
3439
if (PlatformDetection.IsHybridGlobalizationOnBrowser)
3540
{
3641
// see the comments on the right to check the non-Hybrid result, if it differs

0 commit comments

Comments
 (0)