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 +}