diff --git a/src/Humanizer.Tests.Shared/OrdinalizeTests.cs b/src/Humanizer.Tests.Shared/OrdinalizeTests.cs
index 99638bf9d..56225f9b9 100644
--- a/src/Humanizer.Tests.Shared/OrdinalizeTests.cs
+++ b/src/Humanizer.Tests.Shared/OrdinalizeTests.cs
@@ -1,4 +1,5 @@
-using Xunit;
+using System.Globalization;
+using Xunit;
namespace Humanizer.Tests
{
@@ -95,5 +96,47 @@ public void OrdinalizeStringGenderIsImmaterial(string number)
var feminineOrdinalized = number.Ordinalize(GrammaticalGender.Feminine);
Assert.Equal(masculineOrdinalized, feminineOrdinalized);
}
+
+ [Theory]
+ [InlineData("en-US", "1", "1st")]
+ [InlineData("nl-NL", "1", "1e")]
+ public void OrdinalizeStringWithCultureOverridesCurrentCulture(string cultureName, string number, string ordinalized)
+ {
+ var culture = new CultureInfo(cultureName);
+ Assert.Equal(number.Ordinalize(culture), ordinalized);
+ }
+
+ [Theory]
+ [InlineData("en-US", 1, "1st")]
+ [InlineData("nl-NL", 1, "1e")]
+ public void OrdinalizeNumberWithCultureOverridesCurrentCulture(string cultureName, int number, string ordinalized)
+ {
+ var culture = new CultureInfo(cultureName);
+ Assert.Equal(number.Ordinalize(culture), ordinalized);
+ }
+
+ [Theory]
+ [InlineData(0)]
+ [InlineData(1)]
+ [InlineData(8)]
+ public void OrdinalizeNumberWithOverridenCultureGenderIsImmaterial(int number)
+ {
+ var culture = new CultureInfo("nl-NL");
+ var masculineOrdinalized = number.Ordinalize(GrammaticalGender.Masculine, culture);
+ var feminineOrdinalized = number.Ordinalize(GrammaticalGender.Feminine, culture);
+ Assert.Equal(masculineOrdinalized, feminineOrdinalized);
+ }
+
+ [Theory]
+ [InlineData("0")]
+ [InlineData("1")]
+ [InlineData("8")]
+ public void OrdinalizeStringWithOverridenGenderIsImmaterial(string number)
+ {
+ var culture = new CultureInfo("nl-NL");
+ var masculineOrdinalized = number.Ordinalize(GrammaticalGender.Masculine, culture);
+ var feminineOrdinalized = number.Ordinalize(GrammaticalGender.Feminine, culture);
+ Assert.Equal(masculineOrdinalized, feminineOrdinalized);
+ }
}
}
diff --git a/src/Humanizer.Tests/ApiApprover/PublicApiApprovalTest.approve_public_api.approved.txt b/src/Humanizer.Tests/ApiApprover/PublicApiApprovalTest.approve_public_api.approved.txt
index fad778dad..0702c7af6 100644
--- a/src/Humanizer.Tests/ApiApprover/PublicApiApprovalTest.approve_public_api.approved.txt
+++ b/src/Humanizer.Tests/ApiApprover/PublicApiApprovalTest.approve_public_api.approved.txt
@@ -978,9 +978,13 @@ namespace Humanizer
public class static OrdinalizeExtensions
{
public static string Ordinalize(this string numberString) { }
+ public static string Ordinalize(this string numberString, System.Globalization.CultureInfo culture) { }
public static string Ordinalize(this string numberString, Humanizer.GrammaticalGender gender) { }
+ public static string Ordinalize(this string numberString, Humanizer.GrammaticalGender gender, System.Globalization.CultureInfo culture) { }
public static string Ordinalize(this int number) { }
+ public static string Ordinalize(this int number, System.Globalization.CultureInfo culture) { }
public static string Ordinalize(this int number, Humanizer.GrammaticalGender gender) { }
+ public static string Ordinalize(this int number, Humanizer.GrammaticalGender gender, System.Globalization.CultureInfo culture) { }
}
public enum Plurality
{
diff --git a/src/Humanizer/OrdinalizeExtensions.cs b/src/Humanizer/OrdinalizeExtensions.cs
index b689804b0..fc1aa36bb 100644
--- a/src/Humanizer/OrdinalizeExtensions.cs
+++ b/src/Humanizer/OrdinalizeExtensions.cs
@@ -18,6 +18,17 @@ public static string Ordinalize(this string numberString)
return Configurator.Ordinalizer.Convert(int.Parse(numberString), numberString);
}
+ ///
+ /// Turns a number into an ordinal string used to denote the position in an ordered sequence such as 1st, 2nd, 3rd, 4th.
+ ///
+ /// The number, in string, to be ordinalized
+ /// Culture to use. If null, current thread's UI culture is used.
+ ///
+ public static string Ordinalize(this string numberString, CultureInfo culture)
+ {
+ return Configurator.Ordinalizers.ResolveForCulture(culture).Convert(int.Parse(numberString, culture), numberString);
+ }
+
///
/// Turns a number into an ordinal string used to denote the position in an ordered sequence such as 1st, 2nd, 3rd, 4th.
/// Gender for Brazilian Portuguese locale
@@ -32,6 +43,21 @@ public static string Ordinalize(this string numberString, GrammaticalGender gend
return Configurator.Ordinalizer.Convert(int.Parse(numberString), numberString, gender);
}
+ ///
+ /// Turns a number into an ordinal string used to denote the position in an ordered sequence such as 1st, 2nd, 3rd, 4th.
+ /// Gender for Brazilian Portuguese locale
+ /// "1".Ordinalize(GrammaticalGender.Masculine) -> "1º"
+ /// "1".Ordinalize(GrammaticalGender.Feminine) -> "1ª"
+ ///
+ /// The number, in string, to be ordinalized
+ /// The grammatical gender to use for output words
+ /// Culture to use. If null, current thread's UI culture is used.
+ ///
+ public static string Ordinalize(this string numberString, GrammaticalGender gender, CultureInfo culture)
+ {
+ return Configurator.Ordinalizers.ResolveForCulture(culture).Convert(int.Parse(numberString, culture), numberString, gender);
+ }
+
///
/// Turns a number into an ordinal number used to denote the position in an ordered sequence such as 1st, 2nd, 3rd, 4th.
///
@@ -42,6 +68,17 @@ public static string Ordinalize(this int number)
return Configurator.Ordinalizer.Convert(number, number.ToString(CultureInfo.InvariantCulture));
}
+ ///
+ /// Turns a number into an ordinal number used to denote the position in an ordered sequence such as 1st, 2nd, 3rd, 4th.
+ ///
+ /// The number to be ordinalized
+ /// Culture to use. If null, current thread's UI culture is used.
+ ///
+ public static string Ordinalize(this int number, CultureInfo culture)
+ {
+ return Configurator.Ordinalizers.ResolveForCulture(culture).Convert(number, number.ToString(culture));
+ }
+
///
/// Turns a number into an ordinal number used to denote the position in an ordered sequence such as 1st, 2nd, 3rd, 4th.
/// Gender for Brazilian Portuguese locale
@@ -55,5 +92,20 @@ public static string Ordinalize(this int number, GrammaticalGender gender)
{
return Configurator.Ordinalizer.Convert(number, number.ToString(CultureInfo.InvariantCulture), gender);
}
+
+ ///
+ /// Turns a number into an ordinal number used to denote the position in an ordered sequence such as 1st, 2nd, 3rd, 4th.
+ /// Gender for Brazilian Portuguese locale
+ /// 1.Ordinalize(GrammaticalGender.Masculine) -> "1º"
+ /// 1.Ordinalize(GrammaticalGender.Feminine) -> "1ª"
+ ///
+ /// The number to be ordinalized
+ /// The grammatical gender to use for output words
+ /// Culture to use. If null, current thread's UI culture is used.
+ ///
+ public static string Ordinalize(this int number, GrammaticalGender gender, CultureInfo culture)
+ {
+ return Configurator.Ordinalizers.ResolveForCulture(culture).Convert(number, number.ToString(culture), gender);
+ }
}
-}
\ No newline at end of file
+}