Skip to content

Commit f1df58b

Browse files
authored
Add Luxembourgish Locale (#993)
1 parent 7c9632c commit f1df58b

File tree

4 files changed

+133
-0
lines changed

4 files changed

+133
-0
lines changed

arrow/constants.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,4 +128,6 @@
128128
"ms-bn",
129129
"or",
130130
"or-in",
131+
"lb",
132+
"lb-lu",
131133
}

arrow/locales.py

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5164,3 +5164,105 @@ def _format_timeframe(
51645164
form = form["higher"]
51655165

51665166
return form.format(delta)
5167+
5168+
5169+
class LuxembourgishLocale(Locale):
5170+
5171+
names = ["lb", "lb-lu"]
5172+
5173+
past = "virun {0}"
5174+
future = "an {0}"
5175+
and_word = "an"
5176+
5177+
timeframes = {
5178+
"now": "just elo",
5179+
"second": "enger Sekonn",
5180+
"seconds": "{0} Sekonnen",
5181+
"minute": "enger Minutt",
5182+
"minutes": "{0} Minutten",
5183+
"hour": "enger Stonn",
5184+
"hours": "{0} Stonnen",
5185+
"day": "engem Dag",
5186+
"days": "{0} Deeg",
5187+
"week": "enger Woch",
5188+
"weeks": "{0} Wochen",
5189+
"month": "engem Mount",
5190+
"months": "{0} Méint",
5191+
"year": "engem Joer",
5192+
"years": "{0} Jahren",
5193+
}
5194+
5195+
timeframes_only_distance = timeframes.copy()
5196+
timeframes_only_distance["second"] = "eng Sekonn"
5197+
timeframes_only_distance["minute"] = "eng Minutt"
5198+
timeframes_only_distance["hour"] = "eng Stonn"
5199+
timeframes_only_distance["day"] = "een Dag"
5200+
timeframes_only_distance["days"] = "{0} Deeg"
5201+
timeframes_only_distance["week"] = "eng Woch"
5202+
timeframes_only_distance["month"] = "ee Mount"
5203+
timeframes_only_distance["months"] = "{0} Méint"
5204+
timeframes_only_distance["year"] = "ee Joer"
5205+
timeframes_only_distance["years"] = "{0} Joer"
5206+
5207+
month_names = [
5208+
"",
5209+
"Januar",
5210+
"Februar",
5211+
"Mäerz",
5212+
"Abrëll",
5213+
"Mee",
5214+
"Juni",
5215+
"Juli",
5216+
"August",
5217+
"September",
5218+
"Oktouber",
5219+
"November",
5220+
"Dezember",
5221+
]
5222+
5223+
month_abbreviations = [
5224+
"",
5225+
"Jan",
5226+
"Feb",
5227+
"Mäe",
5228+
"Abr",
5229+
"Mee",
5230+
"Jun",
5231+
"Jul",
5232+
"Aug",
5233+
"Sep",
5234+
"Okt",
5235+
"Nov",
5236+
"Dez",
5237+
]
5238+
5239+
day_names = [
5240+
"",
5241+
"Méindeg",
5242+
"Dënschdeg",
5243+
"Mëttwoch",
5244+
"Donneschdeg",
5245+
"Freideg",
5246+
"Samschdeg",
5247+
"Sonndeg",
5248+
]
5249+
5250+
day_abbreviations = ["", "Méi", "Dën", "Mët", "Don", "Fre", "Sam", "Son"]
5251+
5252+
def _ordinal_number(self, n: int) -> str:
5253+
return f"{n}."
5254+
5255+
def describe(
5256+
self,
5257+
timeframe: TimeFrameLiteral,
5258+
delta: Union[int, float] = 0,
5259+
only_distance: bool = False,
5260+
) -> str:
5261+
5262+
if not only_distance:
5263+
return super().describe(timeframe, delta, only_distance)
5264+
5265+
# Luxembourgish uses a different case without 'in' or 'ago'
5266+
humanized = self.timeframes_only_distance[timeframe].format(trunc(abs(delta)))
5267+
5268+
return humanized

tests/test_arrow.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2386,6 +2386,8 @@ def locale_list_no_weeks():
23862386
"se-fi",
23872387
"se-no",
23882388
"se-se",
2389+
"lb",
2390+
"lb-lu",
23892391
]
23902392

23912393
return tested_langs
@@ -2441,6 +2443,8 @@ def locale_list_with_weeks():
24412443
"ms",
24422444
"ms-my",
24432445
"ms-bn",
2446+
"lb",
2447+
"lb-lu",
24442448
]
24452449

24462450
return tested_langs

tests/test_locales.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1740,3 +1740,28 @@ def test_plurals_mk(self):
17401740
assert self.locale._format_timeframe("months", 11) == "11 ay"
17411741
assert self.locale._format_timeframe("year", 1) == "bir yıl"
17421742
assert self.locale._format_timeframe("years", 12) == "12 yıl"
1743+
1744+
1745+
@pytest.mark.usefixtures("lang_locale")
1746+
class TestLuxembourgishLocale:
1747+
def test_ordinal_number(self):
1748+
assert self.locale.ordinal_number(1) == "1."
1749+
1750+
def test_define(self):
1751+
assert self.locale.describe("minute", only_distance=True) == "eng Minutt"
1752+
assert self.locale.describe("minute", only_distance=False) == "an enger Minutt"
1753+
assert self.locale.describe("hour", only_distance=True) == "eng Stonn"
1754+
assert self.locale.describe("hour", only_distance=False) == "an enger Stonn"
1755+
assert self.locale.describe("day", only_distance=True) == "een Dag"
1756+
assert self.locale.describe("day", only_distance=False) == "an engem Dag"
1757+
assert self.locale.describe("week", only_distance=True) == "eng Woch"
1758+
assert self.locale.describe("week", only_distance=False) == "an enger Woch"
1759+
assert self.locale.describe("month", only_distance=True) == "ee Mount"
1760+
assert self.locale.describe("month", only_distance=False) == "an engem Mount"
1761+
assert self.locale.describe("year", only_distance=True) == "ee Joer"
1762+
assert self.locale.describe("year", only_distance=False) == "an engem Joer"
1763+
1764+
def test_weekday(self):
1765+
dt = arrow.Arrow(2015, 4, 11, 17, 30, 00)
1766+
assert self.locale.day_name(dt.isoweekday()) == "Samschdeg"
1767+
assert self.locale.day_abbreviation(dt.isoweekday()) == "Sam"

0 commit comments

Comments
 (0)