Skip to content

Commit 78bbb13

Browse files
committed
Support Romanian ordinal formatting
1 parent 976484a commit 78bbb13

4 files changed

Lines changed: 139 additions & 1 deletion

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ size or throughput. It is localized to:
3636
- Norwegian
3737
- Persian
3838
- Polish
39+
- Romanian
3940
- Russian
4041
- Simplified Chinese
4142
- Slovak
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
# Romanian translations for humanize.
2+
# This file is distributed under the same license as the humanize package.
3+
#
4+
msgid ""
5+
msgstr ""
6+
"Project-Id-Version: humanize\n"
7+
"Report-Msgid-Bugs-To: \n"
8+
"POT-Creation-Date: 2026-06-24 00:00+0000\n"
9+
"PO-Revision-Date: 2026-06-24 00:00+0000\n"
10+
"Last-Translator: Automatically generated\n"
11+
"Language-Team: Romanian\n"
12+
"Language: ro\n"
13+
"MIME-Version: 1.0\n"
14+
"Content-Type: text/plain; charset=UTF-8\n"
15+
"Content-Transfer-Encoding: 8bit\n"
16+
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2);\n"
17+
18+
#: src/humanize/number.py
19+
msgctxt "ordinal value 1 (male)"
20+
msgid "%(value)s"
21+
msgstr "primul"
22+
23+
#: src/humanize/number.py
24+
msgctxt "ordinal value 1 (female)"
25+
msgid "%(value)s"
26+
msgstr "prima"
27+
28+
#: src/humanize/number.py
29+
msgctxt "ordinal 0 (male)"
30+
msgid "%(value)sth"
31+
msgstr "al %(value)s-lea"
32+
33+
#: src/humanize/number.py
34+
msgctxt "ordinal 1 (male)"
35+
msgid "%(value)sst"
36+
msgstr "al %(value)s-lea"
37+
38+
#: src/humanize/number.py
39+
msgctxt "ordinal 2 (male)"
40+
msgid "%(value)snd"
41+
msgstr "al %(value)s-lea"
42+
43+
#: src/humanize/number.py
44+
msgctxt "ordinal 3 (male)"
45+
msgid "%(value)srd"
46+
msgstr "al %(value)s-lea"
47+
48+
#: src/humanize/number.py
49+
msgctxt "ordinal 4 (male)"
50+
msgid "%(value)sth"
51+
msgstr "al %(value)s-lea"
52+
53+
#: src/humanize/number.py
54+
msgctxt "ordinal 5 (male)"
55+
msgid "%(value)sth"
56+
msgstr "al %(value)s-lea"
57+
58+
#: src/humanize/number.py
59+
msgctxt "ordinal 6 (male)"
60+
msgid "%(value)sth"
61+
msgstr "al %(value)s-lea"
62+
63+
#: src/humanize/number.py
64+
msgctxt "ordinal 7 (male)"
65+
msgid "%(value)sth"
66+
msgstr "al %(value)s-lea"
67+
68+
#: src/humanize/number.py
69+
msgctxt "ordinal 8 (male)"
70+
msgid "%(value)sth"
71+
msgstr "al %(value)s-lea"
72+
73+
#: src/humanize/number.py
74+
msgctxt "ordinal 9 (male)"
75+
msgid "%(value)sth"
76+
msgstr "al %(value)s-lea"
77+
78+
#: src/humanize/number.py
79+
msgctxt "ordinal 0 (female)"
80+
msgid "%(value)sth"
81+
msgstr "a %(value)s-a"
82+
83+
#: src/humanize/number.py
84+
msgctxt "ordinal 1 (female)"
85+
msgid "%(value)sst"
86+
msgstr "a %(value)s-a"
87+
88+
#: src/humanize/number.py
89+
msgctxt "ordinal 2 (female)"
90+
msgid "%(value)snd"
91+
msgstr "a %(value)s-a"
92+
93+
#: src/humanize/number.py
94+
msgctxt "ordinal 3 (female)"
95+
msgid "%(value)srd"
96+
msgstr "a %(value)s-a"
97+
98+
#: src/humanize/number.py
99+
msgctxt "ordinal 4 (female)"
100+
msgid "%(value)sth"
101+
msgstr "a %(value)s-a"
102+
103+
#: src/humanize/number.py
104+
msgctxt "ordinal 5 (female)"
105+
msgid "%(value)sth"
106+
msgstr "a %(value)s-a"
107+
108+
#: src/humanize/number.py
109+
msgctxt "ordinal 6 (female)"
110+
msgid "%(value)sth"
111+
msgstr "a %(value)s-a"
112+
113+
#: src/humanize/number.py
114+
msgctxt "ordinal 7 (female)"
115+
msgid "%(value)sth"
116+
msgstr "a %(value)s-a"
117+
118+
#: src/humanize/number.py
119+
msgctxt "ordinal 8 (female)"
120+
msgid "%(value)sth"
121+
msgstr "a %(value)s-a"
122+
123+
#: src/humanize/number.py
124+
msgctxt "ordinal 9 (female)"
125+
msgid "%(value)sth"
126+
msgstr "a %(value)s-a"

src/humanize/number.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
_SUPERSCRIPT_TRANS = str.maketrans(_SUPERSCRIPT_MAP)
3535

3636
_ORDINAL_SUFFIXES = ("th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th")
37+
_ORDINAL_VALUE = "%(value)s"
3738
_APNUMBER_WORDS = (
3839
"zero",
3940
"one",
@@ -108,7 +109,11 @@ def ordinal(value: NumberOrString, gender: str = "male") -> str:
108109
return str(value)
109110
gender = "male" if gender == "male" else "female"
110111
digit = 0 if value % 100 in (11, 12, 13) else value % 10
111-
return f"{value}{P_(f'{digit} ({gender})', _ORDINAL_SUFFIXES[digit])}"
112+
ordinal_format = P_(f"ordinal value {value} ({gender})", _ORDINAL_VALUE)
113+
if ordinal_format == _ORDINAL_VALUE:
114+
suffix = P_(f"{digit} ({gender})", _ORDINAL_SUFFIXES[digit])
115+
ordinal_format = P_(f"ordinal {digit} ({gender})", f"{_ORDINAL_VALUE}{suffix}")
116+
return ordinal_format % {"value": value}
112117

113118

114119
def intcomma(value: NumberOrString, ndigits: int | None = None) -> str:

tests/test_i18n.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,12 @@ def test_langauge_codes(locale: str, expected_result: str) -> None:
237237
("es_ES", 5, "female", "5ª"),
238238
("it_IT", 3, "male", "3º"),
239239
("it_IT", 8, "female", "8ª"),
240+
("ro", 1, "male", "primul"),
241+
("ro", 1, "female", "prima"),
242+
("ro", 2, "male", "al 2-lea"),
243+
("ro", 2, "female", "a 2-a"),
244+
("ro", 21, "male", "al 21-lea"),
245+
("ro", 23, "female", "a 23-a"),
240246
],
241247
)
242248
def test_ordinal_genders(

0 commit comments

Comments
 (0)