diff --git a/Smartway.UiComponent.UnitTests/Inputs/NumericDateInput/NumericDateEntryTest.cs b/Smartway.UiComponent.UnitTests/Inputs/NumericDateInput/NumericDateEntryTest.cs index 3d545c7..9c1f2c4 100644 --- a/Smartway.UiComponent.UnitTests/Inputs/NumericDateInput/NumericDateEntryTest.cs +++ b/Smartway.UiComponent.UnitTests/Inputs/NumericDateInput/NumericDateEntryTest.cs @@ -45,7 +45,7 @@ public void FilledUncorrectDate(string day, string month, string year) [InlineData("it-IT", "JJ", "MM", "AA")] [InlineData("ru-RU", "JJ", "MM", "AA")] [InlineData("ro-RO", "JJ", "MM", "AA")] - [InlineData("us-US", "DD", "MM", "YY")] + [InlineData("en-US", "DD", "MM", "YY")] [InlineData("en-EN", "DD", "MM", "YY")] public void DefaultPlaceholder(string culture, string day, string month, string year) { @@ -63,7 +63,7 @@ public void DefaultPlaceholder(string culture, string day, string month, string [InlineData("it-IT", "06", "10")] [InlineData("ro-RO", "06", "10")] [InlineData("ru-RU", "06", "10")] - [InlineData("us-US", "10", "06")] + [InlineData("en-US", "10", "06")] [InlineData("en-EN", "10", "06")] public void MonthDayOrderCulture(string culture, string expectedFirst, string expectedSecond) { @@ -74,6 +74,23 @@ public void MonthDayOrderCulture(string culture, string expectedFirst, string ex CheckNumericDateEntry(entry, expectedFirst, expectedSecond, "2022"); } + [Theory] + [InlineData("fr-FR", "th-TH", 2024, "67")] + [InlineData("th-TH", "fr-FR", 2024, "81")] + [InlineData("fr-FR", "fr-FR", 2024, "24")] + public void CustomCulture(string deviceCulture, string customCulture, int year, string expectedYear) + { + SetCulture(deviceCulture); + + var entry = new NumericDateEntry(); + entry.Culture = new CultureInfo(customCulture); + entry.DatePlaceholder = new DateTime(year, 10, 6, Thread.CurrentThread.CurrentCulture.Calendar); + + Check.That(entry.DayEntry.Placeholder).IsEqualTo("06"); + Check.That(entry.MonthEntry.Placeholder).IsEqualTo("10"); + Check.That(entry.YearEntry.Placeholder).IsEqualTo(expectedYear); + } + private void SetCulture(string culture) { Thread.CurrentThread.CurrentCulture = new CultureInfo(culture); diff --git a/Smartway.UiComponent/Inputs/NumericDateEntry.xaml.cs b/Smartway.UiComponent/Inputs/NumericDateEntry.xaml.cs index 1ed68b2..1b8f6a5 100644 --- a/Smartway.UiComponent/Inputs/NumericDateEntry.xaml.cs +++ b/Smartway.UiComponent/Inputs/NumericDateEntry.xaml.cs @@ -65,6 +65,21 @@ public ICommand ErrorCommand set => SetValue(ErrorCommandProperty, value); } + private CultureInfo _culture; + public CultureInfo Culture + { + get + { + if (_culture != null) + { + return _culture; + } + + return CultureInfo.CurrentCulture; + } + set => _culture = value; + } + private List _dateEntries; public Entry DayEntry; public Entry MonthEntry; @@ -98,7 +113,7 @@ protected virtual DateTime GetFilledDate() { var day = int.Parse(DayEntry.Text); var month = int.Parse(MonthEntry.Text); - var year = CultureInfo.CurrentCulture.Calendar.ToFourDigitYear(int.Parse(YearEntry.Text)); + var year = Culture.Calendar.ToFourDigitYear(int.Parse(YearEntry.Text)); return new DateTime(year, month, day); } @@ -158,9 +173,9 @@ private void SetEntriesPlaceHolders() private void SetDateTimePlaceholder() { - DayEntry.Placeholder = DatePlaceholder.ToString("dd"); - MonthEntry.Placeholder = DatePlaceholder.ToString("MM"); - YearEntry.Placeholder = DatePlaceholder.ToString("yy"); + DayEntry.Placeholder = DatePlaceholder.ToString("dd", Culture); + MonthEntry.Placeholder = DatePlaceholder.ToString("MM", Culture); + YearEntry.Placeholder = DatePlaceholder.ToString("yy", Culture); } protected virtual void SetFilledDate() @@ -170,9 +185,9 @@ protected virtual void SetFilledDate() var date = (DateTime)FilledDateTime; - DayEntry.Text = date.ToString("dd"); - MonthEntry.Text = date.ToString("MM"); - YearEntry.Text = date.ToString("yy"); + DayEntry.Text = date.ToString("dd", Culture); + MonthEntry.Text = date.ToString("MM", Culture); + YearEntry.Text = date.ToString("yy", Culture); } private void SetEntriesPosition() @@ -221,15 +236,13 @@ private void SetDefaultPlaceholder() private bool IsDayMonthCalendar() { - var calendarType = - CultureInfo.GetCultureInfo(CultureInfo.CurrentCulture.Name).DateTimeFormat.MonthDayPattern; + var calendarType = Culture.DateTimeFormat.MonthDayPattern; return calendarType.IndexOf("d") < calendarType.IndexOf("M"); } private bool IsYearsFirstCalendar() { - var calendarType = - CultureInfo.GetCultureInfo(CultureInfo.CurrentCulture.Name).DateTimeFormat.YearMonthPattern; + var calendarType = Culture.DateTimeFormat.YearMonthPattern; return calendarType.IndexOf("y") < calendarType.IndexOf("M"); }