diff --git a/src/Benchmarks/TimeOnlyToClockNotationConverterBenchmarks.cs b/src/Benchmarks/TimeOnlyToClockNotationConverterBenchmarks.cs
index 1e2918628..8ede932a5 100644
--- a/src/Benchmarks/TimeOnlyToClockNotationConverterBenchmarks.cs
+++ b/src/Benchmarks/TimeOnlyToClockNotationConverterBenchmarks.cs
@@ -1,4 +1,4 @@
-[MemoryDiagnoser(false)]
+[MemoryDiagnoser(false)]
public class TimeOnlyToClockNotationConverterBenchmarks
{
static TimeOnly time = new(13, 6, 2, 88, 987);
@@ -7,39 +7,39 @@ public class TimeOnlyToClockNotationConverterBenchmarks
[Benchmark]
public void EsClockNotationConverter()
{
- esConverter.Convert(time, ClockNotationRounding.None);
- esConverter.Convert(time, ClockNotationRounding.NearestFiveMinutes);
+ esConverter.Convert(time, ClockNotationRounding.None, null);
+ esConverter.Convert(time, ClockNotationRounding.NearestFiveMinutes, null);
}
static BrazilianPortugueseTimeOnlyToClockNotationConverter brazilianConverter = new();
[Benchmark]
public void BrazilianPortugueseClockNotationConverter()
{
- brazilianConverter.Convert(time, ClockNotationRounding.None);
- brazilianConverter.Convert(time, ClockNotationRounding.NearestFiveMinutes);
+ brazilianConverter.Convert(time, ClockNotationRounding.None, null);
+ brazilianConverter.Convert(time, ClockNotationRounding.NearestFiveMinutes, null);
}
static FrTimeOnlyToClockNotationConverter frConverter = new();
[Benchmark]
public void FrClockNotationConverter()
{
- frConverter.Convert(time, ClockNotationRounding.None);
- frConverter.Convert(time, ClockNotationRounding.NearestFiveMinutes);
+ frConverter.Convert(time, ClockNotationRounding.None, null);
+ frConverter.Convert(time, ClockNotationRounding.NearestFiveMinutes, null);
}
static LbTimeOnlyToClockNotationConverter lbConverter = new();
[Benchmark]
public void LbClockNotationConverter()
{
- lbConverter.Convert(time, ClockNotationRounding.None);
- lbConverter.Convert(time, ClockNotationRounding.NearestFiveMinutes);
+ lbConverter.Convert(time, ClockNotationRounding.None, null);
+ lbConverter.Convert(time, ClockNotationRounding.NearestFiveMinutes, null);
}
static DefaultTimeOnlyToClockNotationConverter defaultConverter = new();
[Benchmark]
public void DefaultClockNotationConverter()
{
- defaultConverter.Convert(time, ClockNotationRounding.None);
- defaultConverter.Convert(time, ClockNotationRounding.NearestFiveMinutes);
+ defaultConverter.Convert(time, ClockNotationRounding.None, null);
+ defaultConverter.Convert(time, ClockNotationRounding.NearestFiveMinutes, null);
}
}
\ No newline at end of file
diff --git a/src/Humanizer.Tests/ApiApprover/PublicApiApprovalTest.Approve_Public_Api.DotNet8_0.verified.txt b/src/Humanizer.Tests/ApiApprover/PublicApiApprovalTest.Approve_Public_Api.DotNet8_0.verified.txt
index 63bdf7959..0eb8c183f 100644
--- a/src/Humanizer.Tests/ApiApprover/PublicApiApprovalTest.Approve_Public_Api.DotNet8_0.verified.txt
+++ b/src/Humanizer.Tests/ApiApprover/PublicApiApprovalTest.Approve_Public_Api.DotNet8_0.verified.txt
@@ -367,7 +367,7 @@ namespace Humanizer
}
public interface ITimeOnlyToClockNotationConverter
{
- string Convert(System.TimeOnly time, Humanizer.ClockNotationRounding roundToNearestFive);
+ string Convert(System.TimeOnly time, Humanizer.ClockNotationRounding roundToNearestFive, System.Globalization.CultureInfo? culture);
}
public interface ITruncator
{
@@ -1873,7 +1873,7 @@ namespace Humanizer
}
public static class TimeOnlyToClockNotationExtensions
{
- public static string ToClockNotation(this System.TimeOnly input, Humanizer.ClockNotationRounding roundToNearestFive = 0) { }
+ public static string ToClockNotation(this System.TimeOnly input, Humanizer.ClockNotationRounding roundToNearestFive = 0, System.Globalization.CultureInfo? culture = null) { }
}
public static class TimeSpanHumanizeExtensions
{
diff --git a/src/Humanizer.Tests/Localisation/en/TimeToClockNotationTests.cs b/src/Humanizer.Tests/Localisation/en/TimeToClockNotationTests.cs
index 7e43774c9..6c14ecd7a 100644
--- a/src/Humanizer.Tests/Localisation/en/TimeToClockNotationTests.cs
+++ b/src/Humanizer.Tests/Localisation/en/TimeToClockNotationTests.cs
@@ -1,4 +1,4 @@
-#if NET6_0_OR_GREATER
+#if NET6_0_OR_GREATER
namespace en;
@@ -28,6 +28,29 @@ public void ConvertToClockNotationTimeOnlyStringEnUs(int hours, int minutes, str
Assert.Equal(expectedResult, actualResult);
}
+ [Theory]
+ [InlineData(00, 00, "midnight")]
+ [InlineData(04, 00, "four o'clock")]
+ [InlineData(05, 01, "five one")]
+ [InlineData(06, 05, "five past six")]
+ [InlineData(07, 10, "ten past seven")]
+ [InlineData(08, 15, "a quarter past eight")]
+ [InlineData(09, 20, "twenty past nine")]
+ [InlineData(10, 25, "twenty-five past ten")]
+ [InlineData(11, 30, "half past eleven")]
+ [InlineData(12, 00, "noon")]
+ [InlineData(15, 35, "three thirty-five")]
+ [InlineData(16, 40, "twenty to five")]
+ [InlineData(17, 45, "a quarter to six")]
+ [InlineData(18, 50, "ten to seven")]
+ [InlineData(19, 55, "five to eight")]
+ [InlineData(20, 59, "eight fifty-nine")]
+ public void ConvertToClockNotationTimeOnlyStringWithCultureEnUs(int hours, int minutes, string expectedResult)
+ {
+ var actualResult = new TimeOnly(hours, minutes).ToClockNotation(ClockNotationRounding.None, CultureInfo.CreateSpecificCulture("en"));
+ Assert.Equal(expectedResult, actualResult);
+ }
+
[Theory]
[InlineData(00, 00, "midnight")]
[InlineData(04, 00, "four o'clock")]
@@ -52,6 +75,31 @@ public void ConvertToRoundedClockNotationTimeOnlyStringEnUs(int hours, int minut
var actualResult = new TimeOnly(hours, minutes).ToClockNotation(ClockNotationRounding.NearestFiveMinutes);
Assert.Equal(expectedResult, actualResult);
}
+
+ [Theory]
+ [InlineData(00, 00, "midnight")]
+ [InlineData(04, 00, "four o'clock")]
+ [InlineData(05, 01, "five o'clock")]
+ [InlineData(06, 05, "five past six")]
+ [InlineData(07, 10, "ten past seven")]
+ [InlineData(08, 15, "a quarter past eight")]
+ [InlineData(09, 20, "twenty past nine")]
+ [InlineData(10, 25, "twenty-five past ten")]
+ [InlineData(11, 30, "half past eleven")]
+ [InlineData(12, 00, "noon")]
+ [InlineData(13, 23, "twenty-five past one")]
+ [InlineData(14, 32, "half past two")]
+ [InlineData(15, 35, "three thirty-five")]
+ [InlineData(16, 40, "twenty to five")]
+ [InlineData(17, 45, "a quarter to six")]
+ [InlineData(18, 50, "ten to seven")]
+ [InlineData(19, 55, "five to eight")]
+ [InlineData(20, 59, "nine o'clock")]
+ public void ConvertToRoundedClockNotationTimeOnlyStringWithCultureEnUs(int hours, int minutes, string expectedResult)
+ {
+ var actualResult = new TimeOnly(hours, minutes).ToClockNotation(ClockNotationRounding.NearestFiveMinutes, CultureInfo.CreateSpecificCulture("en"));
+ Assert.Equal(expectedResult, actualResult);
+ }
}
#endif
diff --git a/src/Humanizer.Tests/Localisation/es/TimeToClockNotationTests.cs b/src/Humanizer.Tests/Localisation/es/TimeToClockNotationTests.cs
index 0f5e93794..dc8b42d11 100644
--- a/src/Humanizer.Tests/Localisation/es/TimeToClockNotationTests.cs
+++ b/src/Humanizer.Tests/Localisation/es/TimeToClockNotationTests.cs
@@ -1,4 +1,4 @@
-#if NET6_0_OR_GREATER
+#if NET6_0_OR_GREATER
namespace es;
@@ -34,6 +34,35 @@ public void ConvertToClockNotationTimeOnlyString(int hours, int minutes, string
Assert.Equal(expectedResult, actualResult);
}
+ [Theory]
+ [InlineData(0, 0, "medianoche")]
+ [InlineData(0, 7, "las doce y siete de la noche")]
+ [InlineData(1, 11, "la una y once de la madrugada")]
+ [InlineData(4, 0, "las cuatro de la madrugada")]
+ [InlineData(5, 1, "las cinco y uno de la madrugada")]
+ [InlineData(6, 0, "las seis de la mañana")]
+ [InlineData(6, 5, "las seis y cinco de la mañana")]
+ [InlineData(7, 10, "las siete y diez de la mañana")]
+ [InlineData(8, 15, "las ocho y cuarto de la mañana")]
+ [InlineData(9, 20, "las nueve y veinte de la mañana")]
+ [InlineData(10, 25, "las diez y veinticinco de la mañana")]
+ [InlineData(11, 30, "las once y media de la mañana")]
+ [InlineData(12, 00, "mediodía")]
+ [InlineData(12, 38, "las doce y treinta y ocho de la tarde")]
+ [InlineData(12, 35, "la una menos veinticinco de la tarde")]
+ [InlineData(15, 40, "las cuatro menos veinte de la tarde")]
+ [InlineData(17, 45, "las seis menos cuarto de la tarde")]
+ [InlineData(19, 50, "las ocho menos diez de la tarde")]
+ [InlineData(21, 0, "las nueve de la noche")]
+ [InlineData(21, 55, "las diez menos cinco de la noche")]
+ [InlineData(22, 59, "las diez y cincuenta y nueve de la noche")]
+ [InlineData(23, 43, "las once y cuarenta y tres de la noche")]
+ public void ConvertToClockNotationTimeOnlyStringWithCulture(int hours, int minutes, string expectedResult)
+ {
+ var actualResult = new TimeOnly(hours, minutes).ToClockNotation(ClockNotationRounding.None, CultureInfo.CreateSpecificCulture("es-ES"));
+ Assert.Equal(expectedResult, actualResult);
+ }
+
[Theory]
[InlineData(0, 0, "medianoche")]
[InlineData(0, 7, "las doce y cinco de la noche")]
@@ -62,6 +91,35 @@ public void ConvertToRoundedClockNotationTimeOnlyString(int hours, int minutes,
var actualResult = new TimeOnly(hours, minutes).ToClockNotation(ClockNotationRounding.NearestFiveMinutes);
Assert.Equal(expectedResult, actualResult);
}
+
+ [Theory]
+ [InlineData(0, 0, "medianoche")]
+ [InlineData(0, 7, "las doce y cinco de la noche")]
+ [InlineData(1, 11, "la una y diez de la madrugada")]
+ [InlineData(4, 0, "las cuatro de la madrugada")]
+ [InlineData(5, 1, "las cinco de la madrugada")]
+ [InlineData(6, 0, "las seis de la mañana")]
+ [InlineData(6, 5, "las seis y cinco de la mañana")]
+ [InlineData(7, 10, "las siete y diez de la mañana")]
+ [InlineData(8, 15, "las ocho y cuarto de la mañana")]
+ [InlineData(9, 20, "las nueve y veinte de la mañana")]
+ [InlineData(10, 25, "las diez y veinticinco de la mañana")]
+ [InlineData(11, 30, "las once y media de la mañana")]
+ [InlineData(12, 00, "mediodía")]
+ [InlineData(12, 38, "la una menos veinte de la tarde")]
+ [InlineData(12, 35, "la una menos veinticinco de la tarde")]
+ [InlineData(15, 40, "las cuatro menos veinte de la tarde")]
+ [InlineData(17, 45, "las seis menos cuarto de la tarde")]
+ [InlineData(19, 50, "las ocho menos diez de la tarde")]
+ [InlineData(21, 0, "las nueve de la noche")]
+ [InlineData(21, 55, "las diez menos cinco de la noche")]
+ [InlineData(22, 59, "las once de la noche")]
+ [InlineData(23, 43, "las doce menos cuarto de la noche")]
+ public void ConvertToRoundedClockNotationTimeOnlyStringWithCulture(int hours, int minutes, string expectedResult)
+ {
+ var actualResult = new TimeOnly(hours, minutes).ToClockNotation(ClockNotationRounding.NearestFiveMinutes, CultureInfo.CreateSpecificCulture("es-ES"));
+ Assert.Equal(expectedResult, actualResult);
+ }
}
#endif
diff --git a/src/Humanizer.Tests/Localisation/fr/TimeToClockNotationTests.cs b/src/Humanizer.Tests/Localisation/fr/TimeToClockNotationTests.cs
index a1d1ff929..86a17f5f6 100644
--- a/src/Humanizer.Tests/Localisation/fr/TimeToClockNotationTests.cs
+++ b/src/Humanizer.Tests/Localisation/fr/TimeToClockNotationTests.cs
@@ -1,4 +1,4 @@
-#if NET6_0_OR_GREATER
+#if NET6_0_OR_GREATER
namespace fr;
@@ -30,6 +30,31 @@ public void ConvertToClockNotationTimeOnlyString(int hours, int minutes, string
var actualResult = new TimeOnly(hours, minutes).ToClockNotation();
Assert.Equal(expectedResult, actualResult);
}
+ [Theory]
+ [InlineData(00, 00, "minuit")]
+ [InlineData(00, 07, "minuit sept")]
+ [InlineData(01, 11, "une heure onze")]
+ [InlineData(04, 00, "quatre heures")]
+ [InlineData(05, 01, "cinq heures une")]
+ [InlineData(06, 05, "six heures cinq")]
+ [InlineData(07, 10, "sept heures dix")]
+ [InlineData(08, 15, "huit heures quinze")]
+ [InlineData(09, 20, "neuf heures vingt")]
+ [InlineData(10, 25, "dix heures vingt-cinq")]
+ [InlineData(11, 30, "onze heures trente")]
+ [InlineData(12, 00, "midi")]
+ [InlineData(12, 38, "midi trente-huit")]
+ [InlineData(15, 35, "quinze heures trente-cinq")]
+ [InlineData(16, 40, "seize heures quarante")]
+ [InlineData(17, 45, "dix-sept heures quarante-cinq")]
+ [InlineData(18, 50, "dix-huit heures cinquante")]
+ [InlineData(19, 55, "dix-neuf heures cinquante-cinq")]
+ [InlineData(20, 59, "vingt heures cinquante-neuf")]
+ public void ConvertToClockNotationTimeOnlyStringWithCulture(int hours, int minutes, string expectedResult)
+ {
+ var actualResult = new TimeOnly(hours, minutes).ToClockNotation(ClockNotationRounding.None, CultureInfo.CreateSpecificCulture("fr"));
+ Assert.Equal(expectedResult, actualResult);
+ }
[Theory]
[InlineData(00, 00, "minuit")]
@@ -58,6 +83,34 @@ public void ConvertToRoundedClockNotationTimeOnlyString(int hours, int minutes,
var actualResult = new TimeOnly(hours, minutes).ToClockNotation(ClockNotationRounding.NearestFiveMinutes);
Assert.Equal(expectedResult, actualResult);
}
+
+ [Theory]
+ [InlineData(00, 00, "minuit")]
+ [InlineData(00, 07, "minuit cinq")]
+ [InlineData(01, 11, "une heure dix")]
+ [InlineData(04, 00, "quatre heures")]
+ [InlineData(05, 01, "cinq heures")]
+ [InlineData(06, 05, "six heures cinq")]
+ [InlineData(07, 10, "sept heures dix")]
+ [InlineData(08, 15, "huit heures quinze")]
+ [InlineData(09, 20, "neuf heures vingt")]
+ [InlineData(10, 25, "dix heures vingt-cinq")]
+ [InlineData(11, 30, "onze heures trente")]
+ [InlineData(12, 00, "midi")]
+ [InlineData(12, 38, "midi quarante")]
+ [InlineData(13, 23, "treize heures vingt-cinq")]
+ [InlineData(14, 32, "quatorze heures trente")]
+ [InlineData(15, 35, "quinze heures trente-cinq")]
+ [InlineData(16, 40, "seize heures quarante")]
+ [InlineData(17, 45, "dix-sept heures quarante-cinq")]
+ [InlineData(18, 50, "dix-huit heures cinquante")]
+ [InlineData(19, 55, "dix-neuf heures cinquante-cinq")]
+ [InlineData(20, 59, "vingt et une heures")]
+ public void ConvertToRoundedClockNotationTimeOnlyStringWithCulture(int hours, int minutes, string expectedResult)
+ {
+ var actualResult = new TimeOnly(hours, minutes).ToClockNotation(ClockNotationRounding.NearestFiveMinutes, CultureInfo.CreateSpecificCulture("fr"));
+ Assert.Equal(expectedResult, actualResult);
+ }
}
#endif
diff --git a/src/Humanizer.Tests/Localisation/lb/TimeToClockNotationTests.cs b/src/Humanizer.Tests/Localisation/lb/TimeToClockNotationTests.cs
index 06a8fef60..f8750416d 100644
--- a/src/Humanizer.Tests/Localisation/lb/TimeToClockNotationTests.cs
+++ b/src/Humanizer.Tests/Localisation/lb/TimeToClockNotationTests.cs
@@ -1,4 +1,4 @@
-#if NET6_0_OR_GREATER
+#if NET6_0_OR_GREATER
namespace lb;
@@ -34,6 +34,35 @@ public void ConvertToClockNotationTimeOnlyString(int hours, int minutes, string
var actualResult = new TimeOnly(hours, minutes).ToClockNotation();
Assert.Equal(expectedResult, actualResult);
}
+ [Theory]
+ [InlineData(00, 00, "Mëtternuecht")]
+ [InlineData(00, 07, "siwe Minutten op zwielef")]
+ [InlineData(01, 11, "eelef Minutten op eng")]
+ [InlineData(04, 00, "véier Auer")]
+ [InlineData(05, 01, "eng Minutt op fënnef")]
+ [InlineData(06, 05, "fënnef op sechs")]
+ [InlineData(07, 10, "zéng op siwen")]
+ [InlineData(08, 15, "Véirel op aacht")]
+ [InlineData(09, 20, "zwanzeg op néng")]
+ [InlineData(10, 25, "fënnef vir hallwer eelef")]
+ [InlineData(11, 30, "hallwer zwielef")]
+ [InlineData(12, 00, "Mëtteg")]
+ [InlineData(12, 39, "eenanzwanzeg Minutten vir eng")]
+ [InlineData(13, 23, "dräianzwanzeg Minutten op eng")]
+ [InlineData(14, 32, "zwou Minutten op hallwer dräi")]
+ [InlineData(15, 35, "fënnef op hallwer véier")]
+ [InlineData(16, 40, "zwanzeg vir fënnef")]
+ [InlineData(17, 45, "Véirel vir sechs")]
+ [InlineData(18, 50, "zéng vir siwen")]
+ [InlineData(19, 52, "aacht Minutten vir aacht")]
+ [InlineData(20, 55, "fënnef vir néng")]
+ [InlineData(21, 58, "zwou Minutten vir zéng")]
+ [InlineData(22, 59, "eng Minutt vir eelef")]
+ public void ConvertToClockNotationTimeOnlyStringWithCulture(int hours, int minutes, string expectedResult)
+ {
+ var actualResult = new TimeOnly(hours, minutes).ToClockNotation(ClockNotationRounding.None, CultureInfo.CreateSpecificCulture("lb-LU"));
+ Assert.Equal(expectedResult, actualResult);
+ }
[Theory]
[InlineData(00, 00, "Mëtternuecht")]
@@ -64,6 +93,36 @@ public void ConvertToRoundedClockNotationTimeOnlyString(int hours, int minutes,
var actualResult = new TimeOnly(hours, minutes).ToClockNotation(ClockNotationRounding.NearestFiveMinutes);
Assert.Equal(expectedResult, actualResult);
}
+
+ [Theory]
+ [InlineData(00, 00, "Mëtternuecht")]
+ [InlineData(00, 07, "fënnef op zwielef")]
+ [InlineData(01, 11, "zéng op eng")]
+ [InlineData(04, 00, "véier Auer")]
+ [InlineData(05, 01, "fënnef Auer")]
+ [InlineData(06, 05, "fënnef op sechs")]
+ [InlineData(07, 10, "zéng op siwen")]
+ [InlineData(08, 15, "Véirel op aacht")]
+ [InlineData(09, 20, "zwanzeg op néng")]
+ [InlineData(10, 25, "fënnef vir hallwer eelef")]
+ [InlineData(11, 30, "hallwer zwielef")]
+ [InlineData(12, 00, "Mëtteg")]
+ [InlineData(12, 39, "zwanzeg vir eng")]
+ [InlineData(13, 23, "fënnef vir hallwer zwou")]
+ [InlineData(14, 32, "hallwer dräi")]
+ [InlineData(15, 35, "fënnef op hallwer véier")]
+ [InlineData(16, 40, "zwanzeg vir fënnef")]
+ [InlineData(17, 45, "Véirel vir sechs")]
+ [InlineData(18, 50, "zéng vir siwen")]
+ [InlineData(19, 52, "zéng vir aacht")]
+ [InlineData(20, 55, "fënnef vir néng")]
+ [InlineData(21, 58, "zéng Auer")]
+ [InlineData(22, 59, "eelef Auer")]
+ public void ConvertToRoundedClockNotationTimeOnlyStringWithCulture(int hours, int minutes, string expectedResult)
+ {
+ var actualResult = new TimeOnly(hours, minutes).ToClockNotation(ClockNotationRounding.NearestFiveMinutes, CultureInfo.CreateSpecificCulture("lb-LU"));
+ Assert.Equal(expectedResult, actualResult);
+ }
}
#endif
diff --git a/src/Humanizer.Tests/Localisation/pt-BR/TimeToClockNotationTests.cs b/src/Humanizer.Tests/Localisation/pt-BR/TimeToClockNotationTests.cs
index 53496aba8..21c3b8fbf 100644
--- a/src/Humanizer.Tests/Localisation/pt-BR/TimeToClockNotationTests.cs
+++ b/src/Humanizer.Tests/Localisation/pt-BR/TimeToClockNotationTests.cs
@@ -1,4 +1,4 @@
-#if NET6_0_OR_GREATER
+#if NET6_0_OR_GREATER
namespace ptBR;
@@ -27,6 +27,28 @@ public void ConvertToClockNotationTimeOnlyStringPtBr(int hours, int minutes, str
var actualResult = new TimeOnly(hours, minutes).ToClockNotation();
Assert.Equal(expectedResult, actualResult);
}
+ [Theory]
+ [InlineData(00, 00, "meia-noite")]
+ [InlineData(04, 00, "quatro em ponto")]
+ [InlineData(05, 01, "cinco e um")]
+ [InlineData(06, 05, "seis e cinco")]
+ [InlineData(07, 10, "sete e dez")]
+ [InlineData(08, 15, "oito e quinze")]
+ [InlineData(09, 20, "nove e vinte")]
+ [InlineData(10, 25, "dez e vinte e cinco")]
+ [InlineData(11, 30, "onze e meia")]
+ [InlineData(12, 00, "meio-dia")]
+ [InlineData(15, 35, "três e trinta e cinco")]
+ [InlineData(16, 40, "vinte para as cinco")]
+ [InlineData(17, 45, "quinze para as seis")]
+ [InlineData(18, 50, "dez para as sete")]
+ [InlineData(19, 55, "cinco para as oito")]
+ [InlineData(20, 59, "oito e cinquenta e nove")]
+ public void ConvertToClockNotationTimeOnlyStringWithCulturePtBr(int hours, int minutes, string expectedResult)
+ {
+ var actualResult = new TimeOnly(hours, minutes).ToClockNotation(ClockNotationRounding.None, CultureInfo.CreateSpecificCulture("pt-BR"));
+ Assert.Equal(expectedResult, actualResult);
+ }
[Theory]
[InlineData(00, 00, "meia-noite")]
@@ -52,6 +74,31 @@ public void ConvertToRoundedClockNotationTimeOnlyStringPtBr(int hours, int minut
var actualResult = new TimeOnly(hours, minutes).ToClockNotation(ClockNotationRounding.NearestFiveMinutes);
Assert.Equal(expectedResult, actualResult);
}
+
+ [Theory]
+ [InlineData(00, 00, "meia-noite")]
+ [InlineData(04, 00, "quatro em ponto")]
+ [InlineData(05, 01, "cinco em ponto")]
+ [InlineData(06, 05, "seis e cinco")]
+ [InlineData(07, 10, "sete e dez")]
+ [InlineData(08, 15, "oito e quinze")]
+ [InlineData(09, 20, "nove e vinte")]
+ [InlineData(10, 25, "dez e vinte e cinco")]
+ [InlineData(11, 30, "onze e meia")]
+ [InlineData(12, 00, "meio-dia")]
+ [InlineData(13, 23, "uma e vinte e cinco")]
+ [InlineData(14, 32, "duas e meia")]
+ [InlineData(15, 35, "três e trinta e cinco")]
+ [InlineData(16, 40, "vinte para as cinco")]
+ [InlineData(17, 45, "quinze para as seis")]
+ [InlineData(18, 50, "dez para as sete")]
+ [InlineData(19, 55, "cinco para as oito")]
+ [InlineData(20, 59, "nove em ponto")]
+ public void ConvertToRoundedClockNotationTimeOnlyStringWithCulturePtBr(int hours, int minutes, string expectedResult)
+ {
+ var actualResult = new TimeOnly(hours, minutes).ToClockNotation(ClockNotationRounding.NearestFiveMinutes, CultureInfo.CreateSpecificCulture("pt-BR"));
+ Assert.Equal(expectedResult, actualResult);
+ }
}
#endif
diff --git a/src/Humanizer.Tests/Localisation/pt/TimeToClockNotationTests.cs b/src/Humanizer.Tests/Localisation/pt/TimeToClockNotationTests.cs
index 960ffaf89..a9e449b18 100644
--- a/src/Humanizer.Tests/Localisation/pt/TimeToClockNotationTests.cs
+++ b/src/Humanizer.Tests/Localisation/pt/TimeToClockNotationTests.cs
@@ -1,4 +1,4 @@
-#if NET6_0_OR_GREATER
+#if NET6_0_OR_GREATER
namespace pt;
@@ -22,12 +22,35 @@ public class TimeToClockNotationTests
[InlineData(18, 50, "sete menos dez")]
[InlineData(19, 55, "oito menos cinco")]
[InlineData(20, 59, "oito e cinquenta e nove")]
- public void ConvertToClockNotationTimeOnlyStringPtBr(int hours, int minutes, string expectedResult)
+ public void ConvertToClockNotationTimeOnlyStringPt(int hours, int minutes, string expectedResult)
{
var actualResult = new TimeOnly(hours, minutes).ToClockNotation();
Assert.Equal(expectedResult, actualResult);
}
+ [Theory]
+ [InlineData(00, 00, "meia-noite")]
+ [InlineData(04, 00, "quatro horas")]
+ [InlineData(05, 01, "cinco e um")]
+ [InlineData(06, 05, "seis e cinco")]
+ [InlineData(07, 10, "sete e dez")]
+ [InlineData(08, 15, "oito e um quarto")]
+ [InlineData(09, 20, "nove e vinte")]
+ [InlineData(10, 25, "dez e vinte e cinco")]
+ [InlineData(11, 30, "onze e meia")]
+ [InlineData(12, 00, "meio-dia")]
+ [InlineData(15, 35, "três e trinta e cinco")]
+ [InlineData(16, 40, "cinco menos vinte")]
+ [InlineData(17, 45, "seis menos um quarto")]
+ [InlineData(18, 50, "sete menos dez")]
+ [InlineData(19, 55, "oito menos cinco")]
+ [InlineData(20, 59, "oito e cinquenta e nove")]
+ public void ConvertToClockNotationTimeOnlyStringWithCulturePt(int hours, int minutes, string expectedResult)
+ {
+ var actualResult = new TimeOnly(hours, minutes).ToClockNotation(ClockNotationRounding.None, new("pt"));
+ Assert.Equal(expectedResult, actualResult);
+ }
+
[Theory]
[InlineData(00, 00, "meia-noite")]
[InlineData(04, 00, "quatro horas")]
@@ -47,11 +70,36 @@ public void ConvertToClockNotationTimeOnlyStringPtBr(int hours, int minutes, str
[InlineData(18, 50, "sete menos dez")]
[InlineData(19, 55, "oito menos cinco")]
[InlineData(20, 59, "nove horas")]
- public void ConvertToRoundedClockNotationTimeOnlyStringPtBr(int hours, int minutes, string expectedResult)
+ public void ConvertToRoundedClockNotationTimeOnlyStringPt(int hours, int minutes, string expectedResult)
{
var actualResult = new TimeOnly(hours, minutes).ToClockNotation(ClockNotationRounding.NearestFiveMinutes);
Assert.Equal(expectedResult, actualResult);
}
+
+ [Theory]
+ [InlineData(00, 00, "meia-noite")]
+ [InlineData(04, 00, "quatro horas")]
+ [InlineData(05, 01, "cinco horas")]
+ [InlineData(06, 05, "seis e cinco")]
+ [InlineData(07, 10, "sete e dez")]
+ [InlineData(08, 15, "oito e um quarto")]
+ [InlineData(09, 20, "nove e vinte")]
+ [InlineData(10, 25, "dez e vinte e cinco")]
+ [InlineData(11, 30, "onze e meia")]
+ [InlineData(12, 00, "meio-dia")]
+ [InlineData(13, 23, "uma e vinte e cinco")]
+ [InlineData(14, 32, "duas e meia")]
+ [InlineData(15, 35, "três e trinta e cinco")]
+ [InlineData(16, 40, "cinco menos vinte")]
+ [InlineData(17, 45, "seis menos um quarto")]
+ [InlineData(18, 50, "sete menos dez")]
+ [InlineData(19, 55, "oito menos cinco")]
+ [InlineData(20, 59, "nove horas")]
+ public void ConvertToRoundedClockNotationTimeOnlyStringWithCulturePt(int hours, int minutes, string expectedResult)
+ {
+ var actualResult = new TimeOnly(hours, minutes).ToClockNotation(ClockNotationRounding.NearestFiveMinutes, new("pt"));
+ Assert.Equal(expectedResult, actualResult);
+ }
}
#endif
diff --git a/src/Humanizer/Configuration/Configurator.cs b/src/Humanizer/Configuration/Configurator.cs
index 617b3622b..67976f287 100644
--- a/src/Humanizer/Configuration/Configurator.cs
+++ b/src/Humanizer/Configuration/Configurator.cs
@@ -1,4 +1,4 @@
-namespace Humanizer;
+namespace Humanizer;
///
/// Provides a configuration point for Humanizer
@@ -74,7 +74,7 @@ internal static INumberToWordsConverter GetNumberToWordsConverter(CultureInfo? c
///
internal static IDateOnlyToOrdinalWordConverter DateOnlyToOrdinalWordsConverter => DateOnlyToOrdinalWordsConverters.ResolveForUiCulture();
- internal static ITimeOnlyToClockNotationConverter TimeOnlyToClockNotationConverter => TimeOnlyToClockNotationConverters.ResolveForUiCulture();
+ internal static ITimeOnlyToClockNotationConverter TimeOnlyToClockNotationConverter(CultureInfo? culture) => TimeOnlyToClockNotationConverters.ResolveForCulture(culture);
#endif
///
diff --git a/src/Humanizer/Localisation/TimeToClockNotation/BrazilianPortugueseTimeOnlyToClockNotationConverter.cs b/src/Humanizer/Localisation/TimeToClockNotation/BrazilianPortugueseTimeOnlyToClockNotationConverter.cs
index 4ee18ee9f..116b150c5 100644
--- a/src/Humanizer/Localisation/TimeToClockNotation/BrazilianPortugueseTimeOnlyToClockNotationConverter.cs
+++ b/src/Humanizer/Localisation/TimeToClockNotation/BrazilianPortugueseTimeOnlyToClockNotationConverter.cs
@@ -1,10 +1,10 @@
-#if NET6_0_OR_GREATER
+#if NET6_0_OR_GREATER
namespace Humanizer;
class BrazilianPortugueseTimeOnlyToClockNotationConverter : ITimeOnlyToClockNotationConverter
{
- public string Convert(TimeOnly time, ClockNotationRounding roundToNearestFive)
+ public string Convert(TimeOnly time, ClockNotationRounding roundToNearestFive, CultureInfo? culture)
{
switch (time)
{
@@ -21,14 +21,14 @@ public string Convert(TimeOnly time, ClockNotationRounding roundToNearestFive)
return normalizedMinutes switch
{
- 00 => $"{normalizedHour.ToWords(GrammaticalGender.Feminine)} em ponto",
- 30 => $"{normalizedHour.ToWords(GrammaticalGender.Feminine)} e meia",
- 40 => $"vinte para as {(normalizedHour + 1).ToWords(GrammaticalGender.Feminine)}",
- 45 => $"quinze para as {(normalizedHour + 1).ToWords(GrammaticalGender.Feminine)}",
- 50 => $"dez para as {(normalizedHour + 1).ToWords(GrammaticalGender.Feminine)}",
- 55 => $"cinco para as {(normalizedHour + 1).ToWords(GrammaticalGender.Feminine)}",
- 60 => $"{(normalizedHour + 1).ToWords(GrammaticalGender.Feminine)} em ponto",
- _ => $"{normalizedHour.ToWords(GrammaticalGender.Feminine)} e {normalizedMinutes.ToWords()}"
+ 00 => $"{normalizedHour.ToWords(GrammaticalGender.Feminine, culture)} em ponto",
+ 30 => $"{normalizedHour.ToWords(GrammaticalGender.Feminine, culture)} e meia",
+ 40 => $"vinte para as {(normalizedHour + 1).ToWords(GrammaticalGender.Feminine, culture)}",
+ 45 => $"quinze para as {(normalizedHour + 1).ToWords(GrammaticalGender.Feminine, culture)}",
+ 50 => $"dez para as {(normalizedHour + 1).ToWords(GrammaticalGender.Feminine, culture)}",
+ 55 => $"cinco para as {(normalizedHour + 1).ToWords(GrammaticalGender.Feminine, culture)}",
+ 60 => $"{(normalizedHour + 1).ToWords(GrammaticalGender.Feminine, culture)} em ponto",
+ _ => $"{normalizedHour.ToWords(GrammaticalGender.Feminine, culture)} e {normalizedMinutes.ToWords(culture)}"
};
}
}
diff --git a/src/Humanizer/Localisation/TimeToClockNotation/DefaultTimeOnlyToClockNotationConverter.cs b/src/Humanizer/Localisation/TimeToClockNotation/DefaultTimeOnlyToClockNotationConverter.cs
index 3efc3a5ab..e7bdb70d4 100644
--- a/src/Humanizer/Localisation/TimeToClockNotation/DefaultTimeOnlyToClockNotationConverter.cs
+++ b/src/Humanizer/Localisation/TimeToClockNotation/DefaultTimeOnlyToClockNotationConverter.cs
@@ -1,10 +1,10 @@
-#if NET6_0_OR_GREATER
+#if NET6_0_OR_GREATER
namespace Humanizer;
class DefaultTimeOnlyToClockNotationConverter : ITimeOnlyToClockNotationConverter
{
- public string Convert(TimeOnly time, ClockNotationRounding roundToNearestFive)
+ public string Convert(TimeOnly time, ClockNotationRounding roundToNearestFive, CultureInfo? culture)
{
switch (time)
{
@@ -21,19 +21,19 @@ public string Convert(TimeOnly time, ClockNotationRounding roundToNearestFive)
return normalizedMinutes switch
{
- 00 => $"{normalizedHour.ToWords()} o'clock",
- 05 => $"five past {normalizedHour.ToWords()}",
- 10 => $"ten past {normalizedHour.ToWords()}",
- 15 => $"a quarter past {normalizedHour.ToWords()}",
- 20 => $"twenty past {normalizedHour.ToWords()}",
- 25 => $"twenty-five past {normalizedHour.ToWords()}",
- 30 => $"half past {normalizedHour.ToWords()}",
- 40 => $"twenty to {(normalizedHour + 1).ToWords()}",
- 45 => $"a quarter to {(normalizedHour + 1).ToWords()}",
- 50 => $"ten to {(normalizedHour + 1).ToWords()}",
- 55 => $"five to {(normalizedHour + 1).ToWords()}",
- 60 => $"{(normalizedHour + 1).ToWords()} o'clock",
- _ => $"{normalizedHour.ToWords()} {normalizedMinutes.ToWords()}"
+ 00 => $"{normalizedHour.ToWords(culture)} o'clock",
+ 05 => $"five past {normalizedHour.ToWords(culture)}",
+ 10 => $"ten past {normalizedHour.ToWords(culture)}",
+ 15 => $"a quarter past {normalizedHour.ToWords(culture)}",
+ 20 => $"twenty past {normalizedHour.ToWords(culture)}",
+ 25 => $"twenty-five past {normalizedHour.ToWords(culture)}",
+ 30 => $"half past {normalizedHour.ToWords(culture)}",
+ 40 => $"twenty to {(normalizedHour + 1).ToWords(culture)}",
+ 45 => $"a quarter to {(normalizedHour + 1).ToWords(culture)}",
+ 50 => $"ten to {(normalizedHour + 1).ToWords(culture)}",
+ 55 => $"five to {(normalizedHour + 1).ToWords(culture)}",
+ 60 => $"{(normalizedHour + 1).ToWords(culture)} o'clock",
+ _ => $"{normalizedHour.ToWords(culture)} {normalizedMinutes.ToWords(culture)}"
};
}
}
diff --git a/src/Humanizer/Localisation/TimeToClockNotation/EsTimeOnlyToClockNotationConverter.cs b/src/Humanizer/Localisation/TimeToClockNotation/EsTimeOnlyToClockNotationConverter.cs
index e14282744..714fe2aaf 100644
--- a/src/Humanizer/Localisation/TimeToClockNotation/EsTimeOnlyToClockNotationConverter.cs
+++ b/src/Humanizer/Localisation/TimeToClockNotation/EsTimeOnlyToClockNotationConverter.cs
@@ -1,4 +1,4 @@
-#if NET6_0_OR_GREATER
+#if NET6_0_OR_GREATER
namespace Humanizer;
@@ -8,7 +8,7 @@ class EsTimeOnlyToClockNotationConverter : ITimeOnlyToClockNotationConverter
const int NOON = 12;
const int AFTERNOON = 21;
- public string Convert(TimeOnly time, ClockNotationRounding roundToNearestFive)
+ public string Convert(TimeOnly time, ClockNotationRounding roundToNearestFive, CultureInfo? culture)
{
switch (time)
{
@@ -21,8 +21,8 @@ public string Convert(TimeOnly time, ClockNotationRounding roundToNearestFive)
var article = GetArticle(time);
var articleNextHour = GetArticle(time.AddHours(1));
- var hour = NormalizeHour(time).ToWords(GrammaticalGender.Feminine);
- var nextHour = NormalizeHour(time.AddHours(1)).ToWords(GrammaticalGender.Feminine);
+ var hour = NormalizeHour(time).ToWords(GrammaticalGender.Feminine, culture);
+ var nextHour = NormalizeHour(time.AddHours(1)).ToWords(GrammaticalGender.Feminine, culture);
var dayPeriod = GetDayPeriod(time);
var dayPeriodNextHour = GetDayPeriod(time.AddHours(1));
@@ -45,7 +45,7 @@ public string Convert(TimeOnly time, ClockNotationRounding roundToNearestFive)
return clockNotationMap.GetValueOrDefault(
normalizedMinutes,
- $"{article} {hour} y {normalizedMinutes.ToWords()} {dayPeriod}");
+ $"{article} {hour} y {normalizedMinutes.ToWords(culture)} {dayPeriod}");
}
static int NormalizeHour(TimeOnly time) =>
diff --git a/src/Humanizer/Localisation/TimeToClockNotation/FrTimeOnlyToClockNotationConverter.cs b/src/Humanizer/Localisation/TimeToClockNotation/FrTimeOnlyToClockNotationConverter.cs
index 62bdf31d3..7727e8446 100644
--- a/src/Humanizer/Localisation/TimeToClockNotation/FrTimeOnlyToClockNotationConverter.cs
+++ b/src/Humanizer/Localisation/TimeToClockNotation/FrTimeOnlyToClockNotationConverter.cs
@@ -1,10 +1,10 @@
-#if NET6_0_OR_GREATER
+#if NET6_0_OR_GREATER
namespace Humanizer;
class FrTimeOnlyToClockNotationConverter : ITimeOnlyToClockNotationConverter
{
- public string Convert(TimeOnly time, ClockNotationRounding roundToNearestFive)
+ public string Convert(TimeOnly time, ClockNotationRounding roundToNearestFive, CultureInfo? culture)
{
var normalizedMinutes = (int)(roundToNearestFive == ClockNotationRounding.NearestFiveMinutes
? 5 * Math.Round(time.Minute / 5.0)
@@ -12,17 +12,17 @@ public string Convert(TimeOnly time, ClockNotationRounding roundToNearestFive)
return normalizedMinutes switch
{
- 00 => GetHourExpression(time.Hour),
- 60 => GetHourExpression(time.Hour + 1),
- _ => $"{GetHourExpression(time.Hour)} {normalizedMinutes.ToWords(GrammaticalGender.Feminine)}"
+ 00 => GetHourExpression(time.Hour, culture),
+ 60 => GetHourExpression(time.Hour + 1, culture),
+ _ => $"{GetHourExpression(time.Hour, culture)} {normalizedMinutes.ToWords(GrammaticalGender.Feminine, culture)}"
};
- static string GetHourExpression(int hour) =>
+ static string GetHourExpression(int hour, CultureInfo? culture) =>
hour switch
{
0 => "minuit",
12 => "midi",
- _ => hour.ToWords(GrammaticalGender.Feminine) + (hour > 1 ? " heures" : " heure")
+ _ => hour.ToWords(GrammaticalGender.Feminine, culture) + (hour > 1 ? " heures" : " heure")
};
}
}
diff --git a/src/Humanizer/Localisation/TimeToClockNotation/ITimeOnlyToClockNotationConverter.cs b/src/Humanizer/Localisation/TimeToClockNotation/ITimeOnlyToClockNotationConverter.cs
index a2ad41551..757fad650 100644
--- a/src/Humanizer/Localisation/TimeToClockNotation/ITimeOnlyToClockNotationConverter.cs
+++ b/src/Humanizer/Localisation/TimeToClockNotation/ITimeOnlyToClockNotationConverter.cs
@@ -1,4 +1,4 @@
-#if NET6_0_OR_GREATER
+#if NET6_0_OR_GREATER
namespace Humanizer;
@@ -10,7 +10,6 @@ public interface ITimeOnlyToClockNotationConverter
///
/// Converts the time to Clock Notation
///
- string Convert(TimeOnly time, ClockNotationRounding roundToNearestFive);
+ string Convert(TimeOnly time, ClockNotationRounding roundToNearestFive, CultureInfo? culture);
}
-
#endif
diff --git a/src/Humanizer/Localisation/TimeToClockNotation/LbTimeOnlyToClockNotationConverter.cs b/src/Humanizer/Localisation/TimeToClockNotation/LbTimeOnlyToClockNotationConverter.cs
index e14c7b20c..1a9b5ac9c 100644
--- a/src/Humanizer/Localisation/TimeToClockNotation/LbTimeOnlyToClockNotationConverter.cs
+++ b/src/Humanizer/Localisation/TimeToClockNotation/LbTimeOnlyToClockNotationConverter.cs
@@ -1,10 +1,10 @@
-#if NET6_0_OR_GREATER
+#if NET6_0_OR_GREATER
namespace Humanizer;
class LbTimeOnlyToClockNotationConverter : ITimeOnlyToClockNotationConverter
{
- public string Convert(TimeOnly time, ClockNotationRounding roundToNearestFive)
+ public string Convert(TimeOnly time, ClockNotationRounding roundToNearestFive, CultureInfo? culture)
{
var roundedTime = roundToNearestFive is ClockNotationRounding.NearestFiveMinutes
? GetRoundedTime(time)
@@ -16,22 +16,22 @@ public string Convert(TimeOnly time, ClockNotationRounding roundToNearestFive)
{ Hour: 12, Minute: 0 } => "Mëtteg",
_ => roundedTime.Minute switch
{
- 00 => GetHourExpression(roundedTime.Hour, "Auer"),
- 15 => $"Véirel op {GetHourExpression(roundedTime.Hour)}",
- 25 => $"{GetMinuteExpression(30 - roundedTime.Minute, "vir")} hallwer {GetHourExpression(roundedTime.Hour + 1)}",
- 30 => $"hallwer {GetHourExpression(roundedTime.Hour + 1)}",
- 35 => $"{GetMinuteExpression(roundedTime.Minute - 30, "op")} hallwer {GetHourExpression(roundedTime.Hour + 1)}",
- 45 => $"Véirel vir {GetHourExpression(roundedTime.Hour + 1)}",
- 60 => GetHourExpression(roundedTime.Hour + 1, "Auer"),
- 01 => $"{GetMinuteExpression(roundedTime.Minute, "Minutt")} op {GetHourExpression(roundedTime.Hour)}",
- 59 => $"{GetMinuteExpression(60 - roundedTime.Minute, "Minutt")} vir {GetHourExpression(roundedTime.Hour + 1)}",
- 05 or 10 or 20 => $"{GetMinuteExpression(roundedTime.Minute, "op")} {GetHourExpression(roundedTime.Hour)}",
- 40 or 50 or 55 => $"{GetMinuteExpression(60 - roundedTime.Minute, "vir")} {GetHourExpression(roundedTime.Hour + 1)}",
- > 00 and < 25 => $"{GetMinuteExpression(roundedTime.Minute, "Minutten")} op {GetHourExpression(roundedTime.Hour)}",
- > 25 and < 30 => $"{GetMinuteExpression(30 - roundedTime.Minute, "Minutten")} vir hallwer {GetHourExpression(roundedTime.Hour + 1)}",
- > 30 and < 35 => $"{GetMinuteExpression(roundedTime.Minute - 30, "Minutten")} op hallwer {GetHourExpression(roundedTime.Hour + 1)}",
- > 35 and < 60 => $"{GetMinuteExpression(60 - roundedTime.Minute, "Minutten")} vir {GetHourExpression(roundedTime.Hour + 1)}",
- _ => $"{GetHourExpression(time.Hour, "Auer")} {GetMinuteExpression(time.Minute)}"
+ 00 => GetHourExpression(culture, roundedTime.Hour, "Auer"),
+ 15 => $"Véirel op {GetHourExpression(culture, roundedTime.Hour)}",
+ 25 => $"{GetMinuteExpression(culture, 30 - roundedTime.Minute, "vir")} hallwer {GetHourExpression(culture, roundedTime.Hour + 1)}",
+ 30 => $"hallwer {GetHourExpression(culture, roundedTime.Hour + 1)}",
+ 35 => $"{GetMinuteExpression(culture, roundedTime.Minute - 30, "op")} hallwer {GetHourExpression(culture, roundedTime.Hour + 1)}",
+ 45 => $"Véirel vir {GetHourExpression(culture, roundedTime.Hour + 1)}",
+ 60 => GetHourExpression(culture, roundedTime.Hour + 1, "Auer"),
+ 01 => $"{GetMinuteExpression(culture, roundedTime.Minute, "Minutt")} op {GetHourExpression(culture, roundedTime.Hour)}",
+ 59 => $"{GetMinuteExpression(culture, 60 - roundedTime.Minute, "Minutt")} vir {GetHourExpression(culture, roundedTime.Hour + 1)}",
+ 05 or 10 or 20 => $"{GetMinuteExpression(culture, roundedTime.Minute, "op")} {GetHourExpression(culture, roundedTime.Hour)}",
+ 40 or 50 or 55 => $"{GetMinuteExpression(culture, 60 - roundedTime.Minute, "vir")} {GetHourExpression(culture, roundedTime.Hour + 1)}",
+ > 00 and < 25 => $"{GetMinuteExpression(culture, roundedTime.Minute, "Minutten")} op {GetHourExpression(culture, roundedTime.Hour)}",
+ > 25 and < 30 => $"{GetMinuteExpression(culture, 30 - roundedTime.Minute, "Minutten")} vir hallwer {GetHourExpression(culture, roundedTime.Hour + 1)}",
+ > 30 and < 35 => $"{GetMinuteExpression(culture, roundedTime.Minute - 30, "Minutten")} op hallwer {GetHourExpression(culture, roundedTime.Hour + 1)}",
+ > 35 and < 60 => $"{GetMinuteExpression(culture, 60 - roundedTime.Minute, "Minutten")} vir {GetHourExpression(culture, roundedTime.Hour + 1)}",
+ _ => $"{GetHourExpression(culture, time.Hour, "Auer")} {GetMinuteExpression(culture, time.Minute)}"
}
};
}
@@ -44,23 +44,23 @@ private static TimeOnly GetRoundedTime(TimeOnly time)
return new(roundedHours, roundedMinutes);
}
- private static string GetMinuteExpression(int minute, string nextWord = "")
- => GetFormattedExpression(minute, nextWord);
+ private static string GetMinuteExpression(CultureInfo? culture, int minute, string nextWord = "")
+ => GetFormattedExpression(culture, minute, nextWord);
- private static string GetHourExpression(int hour, string nextWord = "")
+ private static string GetHourExpression(CultureInfo? culture, int hour, string nextWord = "")
{
var normalizedHour = hour % 12;
var hourExpression = normalizedHour == 0 ? 12 : normalizedHour;
- return GetFormattedExpression(hourExpression, nextWord);
+ return GetFormattedExpression(culture, hourExpression, nextWord);
}
- private static string GetFormattedExpression(int number, string nextWord) =>
+ private static string GetFormattedExpression(CultureInfo? culture, int number, string nextWord) =>
(number switch
{
- 1 or 2 => $"{number.ToWords(GrammaticalGender.Feminine)} {nextWord}",
- 7 => $"{number.ToWords(LuxembourgishFormatter.DoesEifelerRuleApply(nextWord) ? WordForm.Eifeler : WordForm.Normal)} {nextWord}",
- _ => $"{number.ToWords()} {nextWord}"
+ 1 or 2 => $"{number.ToWords(GrammaticalGender.Feminine, culture)} {nextWord}",
+ 7 => $"{number.ToWords(LuxembourgishFormatter.DoesEifelerRuleApply(nextWord) ? WordForm.Eifeler : WordForm.Normal, culture)} {nextWord}",
+ _ => $"{number.ToWords(culture)} {nextWord}"
}).TrimEnd();
}
diff --git a/src/Humanizer/Localisation/TimeToClockNotation/PortugueseTimeOnlyToClockNotationConverter.cs b/src/Humanizer/Localisation/TimeToClockNotation/PortugueseTimeOnlyToClockNotationConverter.cs
index 1b3be880e..5e16d77b8 100644
--- a/src/Humanizer/Localisation/TimeToClockNotation/PortugueseTimeOnlyToClockNotationConverter.cs
+++ b/src/Humanizer/Localisation/TimeToClockNotation/PortugueseTimeOnlyToClockNotationConverter.cs
@@ -1,10 +1,10 @@
-#if NET6_0_OR_GREATER
+#if NET6_0_OR_GREATER
namespace Humanizer;
class PortugueseTimeOnlyToClockNotationConverter : ITimeOnlyToClockNotationConverter
{
- public string Convert(TimeOnly time, ClockNotationRounding roundToNearestFive)
+ public string Convert(TimeOnly time, ClockNotationRounding roundToNearestFive, CultureInfo? culture)
{
switch (time)
{
@@ -21,15 +21,15 @@ public string Convert(TimeOnly time, ClockNotationRounding roundToNearestFive)
return normalizedMinutes switch
{
- 00 => $"{normalizedHour.ToWords(GrammaticalGender.Feminine)} horas",
- 15 => $"{normalizedHour.ToWords(GrammaticalGender.Feminine)} e um quarto",
- 30 => $"{normalizedHour.ToWords(GrammaticalGender.Feminine)} e meia",
- 40 => $"{(normalizedHour + 1).ToWords(GrammaticalGender.Feminine)} menos vinte",
- 45 => $"{(normalizedHour + 1).ToWords(GrammaticalGender.Feminine)} menos um quarto",
- 50 => $"{(normalizedHour + 1).ToWords(GrammaticalGender.Feminine)} menos dez",
- 55 => $"{(normalizedHour + 1).ToWords(GrammaticalGender.Feminine)} menos cinco",
- 60 => $"{(normalizedHour + 1).ToWords(GrammaticalGender.Feminine)} horas",
- _ => $"{normalizedHour.ToWords(GrammaticalGender.Feminine)} e {normalizedMinutes.ToWords()}"
+ 00 => $"{normalizedHour.ToWords(GrammaticalGender.Feminine, culture)} horas",
+ 15 => $"{normalizedHour.ToWords(GrammaticalGender.Feminine, culture)} e um quarto",
+ 30 => $"{normalizedHour.ToWords(GrammaticalGender.Feminine, culture)} e meia",
+ 40 => $"{(normalizedHour + 1).ToWords(GrammaticalGender.Feminine, culture)} menos vinte",
+ 45 => $"{(normalizedHour + 1).ToWords(GrammaticalGender.Feminine, culture)} menos um quarto",
+ 50 => $"{(normalizedHour + 1).ToWords(GrammaticalGender.Feminine, culture)} menos dez",
+ 55 => $"{(normalizedHour + 1).ToWords(GrammaticalGender.Feminine, culture)} menos cinco",
+ 60 => $"{(normalizedHour + 1).ToWords(GrammaticalGender.Feminine, culture)} horas",
+ _ => $"{normalizedHour.ToWords(GrammaticalGender.Feminine, culture)} e {normalizedMinutes.ToWords(culture)}"
};
}
}
diff --git a/src/Humanizer/TimeOnlyToClockNotationExtensions.cs b/src/Humanizer/TimeOnlyToClockNotationExtensions.cs
index 871598e45..ad4f72cc1 100644
--- a/src/Humanizer/TimeOnlyToClockNotationExtensions.cs
+++ b/src/Humanizer/TimeOnlyToClockNotationExtensions.cs
@@ -1,4 +1,4 @@
-#if NET6_0_OR_GREATER
+#if NET6_0_OR_GREATER
namespace Humanizer;
@@ -12,9 +12,10 @@ public static class TimeOnlyToClockNotationExtensions
///
/// The time to be made into clock notation
/// Whether to round the minutes to the nearest five or not
+ /// Culture to use. If null, current thread's UI culture is used.
/// The time in clock notation
- public static string ToClockNotation(this TimeOnly input, ClockNotationRounding roundToNearestFive = ClockNotationRounding.None) =>
- Configurator.TimeOnlyToClockNotationConverter.Convert(input, roundToNearestFive);
+ public static string ToClockNotation(this TimeOnly input, ClockNotationRounding roundToNearestFive = ClockNotationRounding.None, CultureInfo? culture = null) =>
+ Configurator.TimeOnlyToClockNotationConverter(culture).Convert(input, roundToNearestFive, culture);
}
#endif