Skip to content

Commit 326c62c

Browse files
authored
Refactor of Slavic Locales for Future Dehumanize Support (#992)
1 parent 95838a8 commit 326c62c

File tree

1 file changed

+133
-45
lines changed

1 file changed

+133
-45
lines changed

arrow/locales.py

Lines changed: 133 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1298,19 +1298,19 @@ class DutchLocale(Locale):
12981298

12991299

13001300
class SlavicBaseLocale(Locale):
1301-
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, List[str]]]]
1301+
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]]
13021302

13031303
def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str:
13041304
form = self.timeframes[timeframe]
13051305
delta = abs(delta)
13061306

1307-
if isinstance(form, list):
1307+
if isinstance(form, Mapping):
13081308
if delta % 10 == 1 and delta % 100 != 11:
1309-
form = form[0]
1309+
form = form["singular"]
13101310
elif 2 <= delta % 10 <= 4 and (delta % 100 < 10 or delta % 100 >= 20):
1311-
form = form[1]
1311+
form = form["dual"]
13121312
else:
1313-
form = form[2]
1313+
form = form["plural"]
13141314

13151315
return form.format(delta)
13161316

@@ -1322,20 +1322,32 @@ class BelarusianLocale(SlavicBaseLocale):
13221322
past = "{0} таму"
13231323
future = "праз {0}"
13241324

1325-
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, List[str]]]] = {
1325+
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
13261326
"now": "зараз",
13271327
"second": "секунду",
13281328
"seconds": "{0} некалькі секунд",
13291329
"minute": "хвіліну",
1330-
"minutes": ["{0} хвіліну", "{0} хвіліны", "{0} хвілін"],
1330+
"minutes": {
1331+
"singular": "{0} хвіліну",
1332+
"dual": "{0} хвіліны",
1333+
"plural": "{0} хвілін",
1334+
},
13311335
"hour": "гадзіну",
1332-
"hours": ["{0} гадзіну", "{0} гадзіны", "{0} гадзін"],
1336+
"hours": {
1337+
"singular": "{0} гадзіну",
1338+
"dual": "{0} гадзіны",
1339+
"plural": "{0} гадзін",
1340+
},
13331341
"day": "дзень",
1334-
"days": ["{0} дзень", "{0} дні", "{0} дзён"],
1342+
"days": {"singular": "{0} дзень", "dual": "{0} дні", "plural": "{0} дзён"},
13351343
"month": "месяц",
1336-
"months": ["{0} месяц", "{0} месяцы", "{0} месяцаў"],
1344+
"months": {
1345+
"singular": "{0} месяц",
1346+
"dual": "{0} месяцы",
1347+
"plural": "{0} месяцаў",
1348+
},
13371349
"year": "год",
1338-
"years": ["{0} год", "{0} гады", "{0} гадоў"],
1350+
"years": {"singular": "{0} год", "dual": "{0} гады", "plural": "{0} гадоў"},
13391351
}
13401352

13411353
month_names = [
@@ -1391,22 +1403,42 @@ class PolishLocale(SlavicBaseLocale):
13911403

13921404
# The nouns should be in genitive case (Polish: "dopełniacz")
13931405
# in order to correctly form `past` & `future` expressions.
1394-
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, List[str]]]] = {
1406+
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
13951407
"now": "teraz",
13961408
"second": "sekundę",
1397-
"seconds": ["{0} sekund", "{0} sekundy", "{0} sekund"],
1409+
"seconds": {
1410+
"singular": "{0} sekund",
1411+
"dual": "{0} sekundy",
1412+
"plural": "{0} sekund",
1413+
},
13981414
"minute": "minutę",
1399-
"minutes": ["{0} minut", "{0} minuty", "{0} minut"],
1415+
"minutes": {
1416+
"singular": "{0} minut",
1417+
"dual": "{0} minuty",
1418+
"plural": "{0} minut",
1419+
},
14001420
"hour": "godzinę",
1401-
"hours": ["{0} godzin", "{0} godziny", "{0} godzin"],
1421+
"hours": {
1422+
"singular": "{0} godzin",
1423+
"dual": "{0} godziny",
1424+
"plural": "{0} godzin",
1425+
},
14021426
"day": "dzień",
14031427
"days": "{0} dni",
14041428
"week": "tydzień",
1405-
"weeks": ["{0} tygodni", "{0} tygodnie", "{0} tygodni"],
1429+
"weeks": {
1430+
"singular": "{0} tygodni",
1431+
"dual": "{0} tygodnie",
1432+
"plural": "{0} tygodni",
1433+
},
14061434
"month": "miesiąc",
1407-
"months": ["{0} miesięcy", "{0} miesiące", "{0} miesięcy"],
1435+
"months": {
1436+
"singular": "{0} miesięcy",
1437+
"dual": "{0} miesiące",
1438+
"plural": "{0} miesięcy",
1439+
},
14081440
"year": "rok",
1409-
"years": ["{0} lat", "{0} lata", "{0} lat"],
1441+
"years": {"singular": "{0} lat", "dual": "{0} lata", "plural": "{0} lat"},
14101442
}
14111443

14121444
month_names = [
@@ -1460,22 +1492,34 @@ class RussianLocale(SlavicBaseLocale):
14601492
past = "{0} назад"
14611493
future = "через {0}"
14621494

1463-
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, List[str]]]] = {
1495+
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
14641496
"now": "сейчас",
14651497
"second": "Второй",
14661498
"seconds": "{0} несколько секунд",
14671499
"minute": "минуту",
1468-
"minutes": ["{0} минуту", "{0} минуты", "{0} минут"],
1500+
"minutes": {
1501+
"singular": "{0} минуту",
1502+
"dual": "{0} минуты",
1503+
"plural": "{0} минут",
1504+
},
14691505
"hour": "час",
1470-
"hours": ["{0} час", "{0} часа", "{0} часов"],
1506+
"hours": {"singular": "{0} час", "dual": "{0} часа", "plural": "{0} часов"},
14711507
"day": "день",
1472-
"days": ["{0} день", "{0} дня", "{0} дней"],
1508+
"days": {"singular": "{0} день", "dual": "{0} дня", "plural": "{0} дней"},
14731509
"week": "неделю",
1474-
"weeks": ["{0} неделю", "{0} недели", "{0} недель"],
1510+
"weeks": {
1511+
"singular": "{0} неделю",
1512+
"dual": "{0} недели",
1513+
"plural": "{0} недель",
1514+
},
14751515
"month": "месяц",
1476-
"months": ["{0} месяц", "{0} месяца", "{0} месяцев"],
1516+
"months": {
1517+
"singular": "{0} месяц",
1518+
"dual": "{0} месяца",
1519+
"plural": "{0} месяцев",
1520+
},
14771521
"year": "год",
1478-
"years": ["{0} год", "{0} года", "{0} лет"],
1522+
"years": {"singular": "{0} год", "dual": "{0} года", "plural": "{0} лет"},
14791523
}
14801524

14811525
month_names = [
@@ -1596,20 +1640,32 @@ class BulgarianLocale(SlavicBaseLocale):
15961640
past = "{0} назад"
15971641
future = "напред {0}"
15981642

1599-
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, List[str]]]] = {
1643+
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
16001644
"now": "сега",
16011645
"second": "секунда",
16021646
"seconds": "{0} няколко секунди",
16031647
"minute": "минута",
1604-
"minutes": ["{0} минута", "{0} минути", "{0} минути"],
1648+
"minutes": {
1649+
"singular": "{0} минута",
1650+
"dual": "{0} минути",
1651+
"plural": "{0} минути",
1652+
},
16051653
"hour": "час",
1606-
"hours": ["{0} час", "{0} часа", "{0} часа"],
1654+
"hours": {"singular": "{0} час", "dual": "{0} часа", "plural": "{0} часа"},
16071655
"day": "ден",
1608-
"days": ["{0} ден", "{0} дни", "{0} дни"],
1656+
"days": {"singular": "{0} ден", "dual": "{0} дни", "plural": "{0} дни"},
16091657
"month": "месец",
1610-
"months": ["{0} месец", "{0} месеца", "{0} месеца"],
1658+
"months": {
1659+
"singular": "{0} месец",
1660+
"dual": "{0} месеца",
1661+
"plural": "{0} месеца",
1662+
},
16111663
"year": "година",
1612-
"years": ["{0} година", "{0} години", "{0} години"],
1664+
"years": {
1665+
"singular": "{0} година",
1666+
"dual": "{0} години",
1667+
"plural": "{0} години",
1668+
},
16131669
}
16141670

16151671
month_names = [
@@ -1663,20 +1719,32 @@ class UkrainianLocale(SlavicBaseLocale):
16631719
past = "{0} тому"
16641720
future = "за {0}"
16651721

1666-
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, List[str]]]] = {
1722+
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
16671723
"now": "зараз",
16681724
"second": "секунда",
16691725
"seconds": "{0} кілька секунд",
16701726
"minute": "хвилину",
1671-
"minutes": ["{0} хвилину", "{0} хвилини", "{0} хвилин"],
1727+
"minutes": {
1728+
"singular": "{0} хвилину",
1729+
"dual": "{0} хвилини",
1730+
"plural": "{0} хвилин",
1731+
},
16721732
"hour": "годину",
1673-
"hours": ["{0} годину", "{0} години", "{0} годин"],
1733+
"hours": {
1734+
"singular": "{0} годину",
1735+
"dual": "{0} години",
1736+
"plural": "{0} годин",
1737+
},
16741738
"day": "день",
1675-
"days": ["{0} день", "{0} дні", "{0} днів"],
1739+
"days": {"singular": "{0} день", "dual": "{0} дні", "plural": "{0} днів"},
16761740
"month": "місяць",
1677-
"months": ["{0} місяць", "{0} місяці", "{0} місяців"],
1741+
"months": {
1742+
"singular": "{0} місяць",
1743+
"dual": "{0} місяці",
1744+
"plural": "{0} місяців",
1745+
},
16781746
"year": "рік",
1679-
"years": ["{0} рік", "{0} роки", "{0} років"],
1747+
"years": {"singular": "{0} рік", "dual": "{0} роки", "plural": "{0} років"},
16801748
}
16811749

16821750
month_names = [
@@ -1729,22 +1797,42 @@ class MacedonianLocale(SlavicBaseLocale):
17291797
past = "пред {0}"
17301798
future = "за {0}"
17311799

1732-
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, List[str]]]] = {
1800+
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
17331801
"now": "сега",
17341802
"second": "една секунда",
1735-
"seconds": ["{0} секунда", "{0} секунди", "{0} секунди"],
1803+
"seconds": {
1804+
"singular": "{0} секунда",
1805+
"dual": "{0} секунди",
1806+
"plural": "{0} секунди",
1807+
},
17361808
"minute": "една минута",
1737-
"minutes": ["{0} минута", "{0} минути", "{0} минути"],
1809+
"minutes": {
1810+
"singular": "{0} минута",
1811+
"dual": "{0} минути",
1812+
"plural": "{0} минути",
1813+
},
17381814
"hour": "еден саат",
1739-
"hours": ["{0} саат", "{0} саати", "{0} саати"],
1815+
"hours": {"singular": "{0} саат", "dual": "{0} саати", "plural": "{0} саати"},
17401816
"day": "еден ден",
1741-
"days": ["{0} ден", "{0} дена", "{0} дена"],
1817+
"days": {"singular": "{0} ден", "dual": "{0} дена", "plural": "{0} дена"},
17421818
"week": "една недела",
1743-
"weeks": ["{0} недела", "{0} недели", "{0} недели"],
1819+
"weeks": {
1820+
"singular": "{0} недела",
1821+
"dual": "{0} недели",
1822+
"plural": "{0} недели",
1823+
},
17441824
"month": "еден месец",
1745-
"months": ["{0} месец", "{0} месеци", "{0} месеци"],
1825+
"months": {
1826+
"singular": "{0} месец",
1827+
"dual": "{0} месеци",
1828+
"plural": "{0} месеци",
1829+
},
17461830
"year": "една година",
1747-
"years": ["{0} година", "{0} години", "{0} години"],
1831+
"years": {
1832+
"singular": "{0} година",
1833+
"dual": "{0} години",
1834+
"plural": "{0} години",
1835+
},
17481836
}
17491837

17501838
meridians = {"am": "дп", "pm": "пп", "AM": "претпладне", "PM": "попладне"}

0 commit comments

Comments
 (0)