diff --git a/src/Humanizer.Tests.Shared/TimeSpanHumanizeTests.cs b/src/Humanizer.Tests.Shared/TimeSpanHumanizeTests.cs index 0062b699e..cacdb66e7 100644 --- a/src/Humanizer.Tests.Shared/TimeSpanHumanizeTests.cs +++ b/src/Humanizer.Tests.Shared/TimeSpanHumanizeTests.cs @@ -364,7 +364,7 @@ public void TimeSpanWithPrecisionAndCountingEmptyUnits(int milliseconds, int pre [InlineData(1299630020, 3, "2 weeks, 1 day, and 1 hour")] [InlineData(1299630020, 4, "2 weeks, 1 day, 1 hour, and 30 seconds")] [InlineData(1299630020, 5, "2 weeks, 1 day, 1 hour, 30 seconds, and 20 milliseconds")] - public void TimeSpanWithPrecisionAndAlternativeCollectionFormatter(int milliseconds, int precision, + public void TimeSpanWithPrecisionAndAlternativeCollectionFormatter(int milliseconds, int precision, string expected, bool toWords = false) { var actual = TimeSpan.FromMilliseconds(milliseconds).Humanize(precision, collectionSeparator: null, toWords: toWords); @@ -433,5 +433,15 @@ public void CanSpecifyCultureExplicitly(int ms, int precision, string culture, s var actual = TimeSpan.FromMilliseconds(ms).Humanize(precision: precision, culture: new CultureInfo(culture), collectionSeparator: collectionSeparator); Assert.Equal(expected, actual); } + [Theory] + [InlineData(31 * 4, 1, "en-US", "four months")] + [InlineData(236,2,"ar", "سبعة أشهر, اثنان و عشرون يوم")] + [InlineData(321, 2,"es", "diez meses, dieciséis días")] + public void CanSpecifyCultureExplicitlyToWords(int days, int precision,string culture, string expected) + { + var timeSpan = new TimeSpan(days, 0, 0, 0); + var actual = timeSpan.Humanize(precision: precision, culture: new CultureInfo(culture), maxUnit: TimeUnit.Year, toWords: true); + Assert.Equal(expected: expected, actual); + } } } diff --git a/src/Humanizer/Localisation/Formatters/DefaultFormatter.cs b/src/Humanizer/Localisation/Formatters/DefaultFormatter.cs index 341437042..2efe8d73b 100644 --- a/src/Humanizer/Localisation/Formatters/DefaultFormatter.cs +++ b/src/Humanizer/Localisation/Formatters/DefaultFormatter.cs @@ -119,7 +119,7 @@ protected virtual string Format(string resourceKey, int number, bool toWords = f } return toWords - ? resourceString.FormatWith(number.ToWords()) + ? resourceString.FormatWith(number.ToWords(_culture)) : resourceString.FormatWith(number); } diff --git a/src/Humanizer/TimeSpanHumanizeExtensions.cs b/src/Humanizer/TimeSpanHumanizeExtensions.cs index 7ab751898..0ac06b718 100644 --- a/src/Humanizer/TimeSpanHumanizeExtensions.cs +++ b/src/Humanizer/TimeSpanHumanizeExtensions.cs @@ -62,7 +62,7 @@ private static IEnumerable CreateTheTimePartsWithUpperAndLowerLimits(Tim foreach (var timeUnitType in timeUnitsEnumTypes) { - var timepart = GetTimeUnitPart(timeUnitType, timespan, culture, maxUnit, minUnit, cultureFormatter, toWords); + var timepart = GetTimeUnitPart(timeUnitType,timespan, maxUnit, minUnit, cultureFormatter, toWords); if (timepart != null || firstValueFound) { @@ -85,7 +85,7 @@ private static IEnumerable GetEnumTypesForTimeUnit() return enumTypeEnumerator.Reverse(); } - private static string GetTimeUnitPart(TimeUnit timeUnitToGet, TimeSpan timespan, CultureInfo culture, TimeUnit maximumTimeUnit, TimeUnit minimumTimeUnit, IFormatter cultureFormatter, bool toWords = false) + private static string GetTimeUnitPart(TimeUnit timeUnitToGet, TimeSpan timespan, TimeUnit maximumTimeUnit, TimeUnit minimumTimeUnit, IFormatter cultureFormatter, bool toWords = false) { if (timeUnitToGet <= maximumTimeUnit && timeUnitToGet >= minimumTimeUnit) {