Skip to content

Commit 69b8651

Browse files
author
Oren Novotny
authored
Merge pull request #870 from ldimitrijevic/features/FrenchOrdinalizers
French ordinal registry
2 parents fc178cf + be0f046 commit 69b8651

File tree

4 files changed

+152
-0
lines changed

4 files changed

+152
-0
lines changed

src/Humanizer.Tests.Shared/Humanizer.Tests.Shared.projitems

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@
7777
<Compile Include="$(MSBuildThisFileDirectory)Localisation\fr-CH\NumberToWordsTests.cs" />
7878
<Compile Include="$(MSBuildThisFileDirectory)Localisation\fr\DateHumanizeTests.cs" />
7979
<Compile Include="$(MSBuildThisFileDirectory)Localisation\fr\NumberToWordsTests.cs" />
80+
<Compile Include="$(MSBuildThisFileDirectory)Localisation\fr\OrdinalizeTests.cs" />
8081
<Compile Include="$(MSBuildThisFileDirectory)Localisation\fr\TimeSpanHumanizeTests.cs" />
8182
<Compile Include="$(MSBuildThisFileDirectory)Localisation\he\DateHumanizeTests.cs" />
8283
<Compile Include="$(MSBuildThisFileDirectory)Localisation\he\NumberToWordsTests.cs" />
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
using Xunit;
2+
3+
namespace Humanizer.Tests.Localisation.fr
4+
{
5+
[UseCulture("fr")]
6+
public class OrdinalizeTests
7+
{
8+
9+
[Theory]
10+
[InlineData("0", "0ème")]
11+
[InlineData("1", "1er")]
12+
[InlineData("2", "2ème")]
13+
[InlineData("3", "3ème")]
14+
[InlineData("4", "4ème")]
15+
[InlineData("5", "5ème")]
16+
[InlineData("6", "6ème")]
17+
[InlineData("23", "23ème")]
18+
[InlineData("100", "100ème")]
19+
[InlineData("101", "101ème")]
20+
[InlineData("102", "102ème")]
21+
[InlineData("103", "103ème")]
22+
[InlineData("1001", "1001ème")]
23+
public void OrdinalizeString(string number, string ordinalized)
24+
{
25+
Assert.Equal(number.Ordinalize(GrammaticalGender.Masculine), ordinalized);
26+
}
27+
28+
[Theory]
29+
[InlineData("0", "0ème")]
30+
[InlineData("1", "1ère")]
31+
[InlineData("2", "2ème")]
32+
[InlineData("3", "3ème")]
33+
[InlineData("4", "4ème")]
34+
[InlineData("5", "5ème")]
35+
[InlineData("6", "6ème")]
36+
[InlineData("23", "23ème")]
37+
[InlineData("100", "100ème")]
38+
[InlineData("101", "101ème")]
39+
[InlineData("102", "102ème")]
40+
[InlineData("103", "103ème")]
41+
[InlineData("1001", "1001ème")]
42+
public void OrdinalizeStringFeminine(string number, string ordinalized)
43+
{
44+
Assert.Equal(number.Ordinalize(GrammaticalGender.Feminine), ordinalized);
45+
}
46+
47+
[Theory]
48+
[InlineData("0", "0ème")]
49+
[InlineData("1", "1er")]
50+
[InlineData("2", "2ème")]
51+
[InlineData("3", "3ème")]
52+
[InlineData("4", "4ème")]
53+
[InlineData("5", "5ème")]
54+
[InlineData("6", "6ème")]
55+
[InlineData("23", "23ème")]
56+
[InlineData("100", "100ème")]
57+
[InlineData("101", "101ème")]
58+
[InlineData("102", "102ème")]
59+
[InlineData("103", "103ème")]
60+
[InlineData("1001", "1001ème")]
61+
public void OrdinalizeStringNeuter(string number, string ordinalized)
62+
{
63+
Assert.Equal(number.Ordinalize(GrammaticalGender.Neuter), ordinalized);
64+
}
65+
66+
[Theory]
67+
[InlineData(0, "0ème")]
68+
[InlineData(1, "1er")]
69+
[InlineData(2, "2ème")]
70+
[InlineData(3, "3ème")]
71+
[InlineData(4, "4ème")]
72+
[InlineData(5, "5ème")]
73+
[InlineData(6, "6ème")]
74+
[InlineData(10, "10ème")]
75+
[InlineData(23, "23ème")]
76+
[InlineData(100, "100ème")]
77+
[InlineData(101, "101ème")]
78+
[InlineData(102, "102ème")]
79+
[InlineData(103, "103ème")]
80+
[InlineData(1001, "1001ème")]
81+
public void OrdinalizeNumber(int number, string ordinalized)
82+
{
83+
Assert.Equal(number.Ordinalize(GrammaticalGender.Masculine), ordinalized);
84+
}
85+
86+
[Theory]
87+
[InlineData(0, "0ème")]
88+
[InlineData(1, "1ère")]
89+
[InlineData(2, "2ème")]
90+
[InlineData(3, "3ème")]
91+
[InlineData(4, "4ème")]
92+
[InlineData(5, "5ème")]
93+
[InlineData(6, "6ème")]
94+
[InlineData(10, "10ème")]
95+
[InlineData(23, "23ème")]
96+
[InlineData(100, "100ème")]
97+
[InlineData(101, "101ème")]
98+
[InlineData(102, "102ème")]
99+
[InlineData(103, "103ème")]
100+
[InlineData(1001, "1001ème")]
101+
public void OrdinalizeNumberFeminine(int number, string ordinalized)
102+
{
103+
Assert.Equal(number.Ordinalize(GrammaticalGender.Feminine), ordinalized);
104+
}
105+
106+
[Theory]
107+
[InlineData(0, "0ème")]
108+
[InlineData(1, "1er")]
109+
[InlineData(2, "2ème")]
110+
[InlineData(3, "3ème")]
111+
[InlineData(4, "4ème")]
112+
[InlineData(5, "5ème")]
113+
[InlineData(6, "6ème")]
114+
[InlineData(10, "10ème")]
115+
[InlineData(23, "23ème")]
116+
[InlineData(100, "100ème")]
117+
[InlineData(101, "101ème")]
118+
[InlineData(102, "102ème")]
119+
[InlineData(103, "103ème")]
120+
[InlineData(1001, "1001ème")]
121+
public void OrdinalizeNumberNeuter(int number, string ordinalized)
122+
{
123+
Assert.Equal(number.Ordinalize(GrammaticalGender.Neuter), ordinalized);
124+
}
125+
}
126+
}

src/Humanizer/Configuration/OrdinalizerRegistry.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ public OrdinalizerRegistry() : base(new DefaultOrdinalizer())
99
Register("de", new GermanOrdinalizer());
1010
Register("en", new EnglishOrdinalizer());
1111
Register("es", new SpanishOrdinalizer());
12+
Register("fr", new FrenchOrdinalizer());
1213
Register("it", new ItalianOrdinalizer());
1314
Register("nl", new DutchOrdinalizer());
1415
Register("pt", new PortugueseOrdinalizer());
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
namespace Humanizer.Localisation.Ordinalizers
2+
{
3+
internal class FrenchOrdinalizer : DefaultOrdinalizer
4+
{
5+
public override string Convert(int number, string numberString)
6+
{
7+
return Convert(number, numberString, GrammaticalGender.Masculine);
8+
}
9+
10+
public override string Convert(int number, string numberString, GrammaticalGender gender)
11+
{
12+
if (number == 1)
13+
{
14+
if (gender == GrammaticalGender.Feminine)
15+
{
16+
return numberString + "ère";
17+
}
18+
return numberString + "er";
19+
}
20+
21+
return numberString + "ème";
22+
}
23+
}
24+
}

0 commit comments

Comments
 (0)