Skip to content

Commit e435240

Browse files
authored
Fix ordinals for norwegian languages (#1074)
In Norwegian, there should be a period after the day of the month. This also adds basic test coverage to both norwegian languages, and fixes some small errors uncovered by those tests.
1 parent 7d7926a commit e435240

File tree

2 files changed

+123
-1
lines changed

2 files changed

+123
-1
lines changed

arrow/locales.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2056,6 +2056,8 @@ class NorwegianLocale(Locale):
20562056
"hours": "{0} timer",
20572057
"day": "en dag",
20582058
"days": "{0} dager",
2059+
"week": "en uke",
2060+
"weeks": "{0} uker",
20592061
"month": "en måned",
20602062
"months": "{0} måneder",
20612063
"year": "ett år",
@@ -2105,6 +2107,9 @@ class NorwegianLocale(Locale):
21052107
]
21062108
day_abbreviations = ["", "ma", "ti", "on", "to", "fr", "lø", "sø"]
21072109

2110+
def _ordinal_number(self, n: int) -> str:
2111+
return f"{n}."
2112+
21082113

21092114
class NewNorwegianLocale(Locale):
21102115

@@ -2123,7 +2128,9 @@ class NewNorwegianLocale(Locale):
21232128
"hours": "{0} timar",
21242129
"day": "ein dag",
21252130
"days": "{0} dagar",
2126-
"month": "en månad",
2131+
"week": "ei veke",
2132+
"weeks": "{0} veker",
2133+
"month": "ein månad",
21272134
"months": "{0} månader",
21282135
"year": "eitt år",
21292136
"years": "{0} år",
@@ -2172,6 +2179,9 @@ class NewNorwegianLocale(Locale):
21722179
]
21732180
day_abbreviations = ["", "må", "ty", "on", "to", "fr", "la", "su"]
21742181

2182+
def _ordinal_number(self, n: int) -> str:
2183+
return f"{n}."
2184+
21752185

21762186
class PortugueseLocale(Locale):
21772187
names = ["pt", "pt-pt"]

tests/test_locales.py

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2702,3 +2702,115 @@ def test_plurals_mk(self):
27022702
assert self.locale._format_timeframe("months", 11) == "11 ай"
27032703
assert self.locale._format_timeframe("year", 1) == "бір жыл"
27042704
assert self.locale._format_timeframe("years", 12) == "12 жыл"
2705+
2706+
2707+
@pytest.mark.usefixtures("lang_locale")
2708+
class TestNorwegianLocale:
2709+
def test_describe(self):
2710+
assert self.locale.describe("now", only_distance=True) == "nå nettopp"
2711+
assert self.locale.describe("now", only_distance=False) == "nå nettopp"
2712+
2713+
def test_plurals(self):
2714+
assert self.locale._format_timeframe("now", 0) == "nå nettopp"
2715+
assert self.locale._format_timeframe("second", 1) == "ett sekund"
2716+
assert self.locale._format_timeframe("seconds", 30) == "30 sekunder"
2717+
assert self.locale._format_timeframe("minute", 1) == "ett minutt"
2718+
assert self.locale._format_timeframe("minutes", 40) == "40 minutter"
2719+
assert self.locale._format_timeframe("hour", 1) == "en time"
2720+
assert self.locale._format_timeframe("hours", 23) == "23 timer"
2721+
assert self.locale._format_timeframe("day", 1) == "en dag"
2722+
assert self.locale._format_timeframe("days", 12) == "12 dager"
2723+
assert self.locale._format_timeframe("week", 1) == "en uke"
2724+
assert self.locale._format_timeframe("weeks", 38) == "38 uker"
2725+
assert self.locale._format_timeframe("month", 1) == "en måned"
2726+
assert self.locale._format_timeframe("months", 11) == "11 måneder"
2727+
assert self.locale._format_timeframe("year", 1) == "ett år"
2728+
assert self.locale._format_timeframe("years", 12) == "12 år"
2729+
2730+
def test_ordinal_number(self):
2731+
assert self.locale.ordinal_number(0) == "0."
2732+
assert self.locale.ordinal_number(1) == "1."
2733+
2734+
def test_format_timeframe(self):
2735+
2736+
assert self.locale._format_timeframe("hours", 2) == "2 timer"
2737+
assert self.locale._format_timeframe("hour", 0) == "en time"
2738+
2739+
def test_format_relative_now(self):
2740+
2741+
result = self.locale._format_relative("nå nettopp", "now", 0)
2742+
2743+
assert result == "nå nettopp"
2744+
2745+
def test_format_relative_past(self):
2746+
2747+
result = self.locale._format_relative("en time", "hour", 1)
2748+
2749+
assert result == "om en time"
2750+
2751+
def test_format_relative_future(self):
2752+
2753+
result = self.locale._format_relative("en time", "hour", -1)
2754+
2755+
assert result == "for en time siden"
2756+
2757+
def test_weekday(self):
2758+
dt = arrow.Arrow(2015, 4, 11, 17, 30, 00)
2759+
assert self.locale.day_name(dt.isoweekday()) == "lørdag"
2760+
assert self.locale.day_abbreviation(dt.isoweekday()) == "lø"
2761+
2762+
2763+
@pytest.mark.usefixtures("lang_locale")
2764+
class TestNewNorwegianLocale:
2765+
def test_describe(self):
2766+
assert self.locale.describe("now", only_distance=True) == "no nettopp"
2767+
assert self.locale.describe("now", only_distance=False) == "no nettopp"
2768+
2769+
def test_plurals(self):
2770+
assert self.locale._format_timeframe("now", 0) == "no nettopp"
2771+
assert self.locale._format_timeframe("second", 1) == "eitt sekund"
2772+
assert self.locale._format_timeframe("seconds", 30) == "30 sekund"
2773+
assert self.locale._format_timeframe("minute", 1) == "eitt minutt"
2774+
assert self.locale._format_timeframe("minutes", 40) == "40 minutt"
2775+
assert self.locale._format_timeframe("hour", 1) == "ein time"
2776+
assert self.locale._format_timeframe("hours", 23) == "23 timar"
2777+
assert self.locale._format_timeframe("day", 1) == "ein dag"
2778+
assert self.locale._format_timeframe("days", 12) == "12 dagar"
2779+
assert self.locale._format_timeframe("week", 1) == "ei veke"
2780+
assert self.locale._format_timeframe("weeks", 38) == "38 veker"
2781+
assert self.locale._format_timeframe("month", 1) == "ein månad"
2782+
assert self.locale._format_timeframe("months", 11) == "11 månader"
2783+
assert self.locale._format_timeframe("year", 1) == "eitt år"
2784+
assert self.locale._format_timeframe("years", 12) == "12 år"
2785+
2786+
def test_ordinal_number(self):
2787+
assert self.locale.ordinal_number(0) == "0."
2788+
assert self.locale.ordinal_number(1) == "1."
2789+
2790+
def test_format_timeframe(self):
2791+
2792+
assert self.locale._format_timeframe("hours", 2) == "2 timar"
2793+
assert self.locale._format_timeframe("hour", 0) == "ein time"
2794+
2795+
def test_format_relative_now(self):
2796+
2797+
result = self.locale._format_relative("no nettopp", "now", 0)
2798+
2799+
assert result == "no nettopp"
2800+
2801+
def test_format_relative_past(self):
2802+
2803+
result = self.locale._format_relative("ein time", "hour", 1)
2804+
2805+
assert result == "om ein time"
2806+
2807+
def test_format_relative_future(self):
2808+
2809+
result = self.locale._format_relative("ein time", "hour", -1)
2810+
2811+
assert result == "for ein time sidan"
2812+
2813+
def test_weekday(self):
2814+
dt = arrow.Arrow(2015, 4, 11, 17, 30, 00)
2815+
assert self.locale.day_name(dt.isoweekday()) == "laurdag"
2816+
assert self.locale.day_abbreviation(dt.isoweekday()) == "la"

0 commit comments

Comments
 (0)