From d1181f828eafc78eaea06f7296b7baad4ecb998b Mon Sep 17 00:00:00 2001 From: Igor Mosyagin <408698+cra@users.noreply.github.com> Date: Mon, 26 Jul 2021 19:45:07 +0200 Subject: [PATCH 1/2] Add Swedish [sv] localization. Fix #561 --- pendulum/locales/sv/__init__.py | 0 pendulum/locales/sv/custom.py | 24 ++++ pendulum/locales/sv/locale.py | 218 ++++++++++++++++++++++++++++++++ tests/localization/test_sv.py | 88 +++++++++++++ 4 files changed, 330 insertions(+) create mode 100644 pendulum/locales/sv/__init__.py create mode 100644 pendulum/locales/sv/custom.py create mode 100644 pendulum/locales/sv/locale.py create mode 100644 tests/localization/test_sv.py diff --git a/pendulum/locales/sv/__init__.py b/pendulum/locales/sv/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/pendulum/locales/sv/custom.py b/pendulum/locales/sv/custom.py new file mode 100644 index 00000000..b7df6e60 --- /dev/null +++ b/pendulum/locales/sv/custom.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + + +""" +sv custom locale file. +""" + +translations = { + # Relative time + "ago": "{} sedan", + "from_now": "från nu {}", + "after": "{0} efter", + "before": "{0} innan", + # Date formats + "date_formats": { + "LTS": "HH:mm:ss", + "LT": "HH:mm", + "L": "YYYY-MM-DD", + "LL": "D MMMM YYYY", + "LLL": "D MMMM YYYY, HH:mm", + "LLLL": "dddd, D MMMM YYYY, HH:mm", + }, +} diff --git a/pendulum/locales/sv/locale.py b/pendulum/locales/sv/locale.py new file mode 100644 index 00000000..be8df6b2 --- /dev/null +++ b/pendulum/locales/sv/locale.py @@ -0,0 +1,218 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from .custom import translations as custom_translations + + +""" +sv locale file. + +It has been generated automatically and must not be modified directly. +""" + + +locale = { + 'plural': lambda n: 'one' if ((n == n and ((n == 1))) and (0 == 0 and ((0 == 0)))) else 'other', + 'ordinal': lambda n: 'one' if (((n % 10) == (n % 10) and (((n % 10) == 1) or ((n % 10) == 2))) and (not ((n % 100) == (n % 100) and (((n % 100) == 11) or ((n % 100) == 12))))) else 'other', + 'translations': { + 'days': { + 'abbreviated': { + 0: 'sön', + 1: 'mån', + 2: 'tis', + 3: 'ons', + 4: 'tors', + 5: 'fre', + 6: 'lör', + }, + 'narrow': { + 0: 'S', + 1: 'M', + 2: 'T', + 3: 'O', + 4: 'T', + 5: 'F', + 6: 'L', + }, + 'short': { + 0: 'sö', + 1: 'må', + 2: 'ti', + 3: 'on', + 4: 'to', + 5: 'fr', + 6: 'lö', + }, + 'wide': { + 0: 'söndag', + 1: 'måndag', + 2: 'tisdag', + 3: 'onsdag', + 4: 'torsdag', + 5: 'fredag', + 6: 'lördag', + }, + }, + 'months': { + 'abbreviated': { + 1: 'jan.', + 2: 'feb.', + 3: 'mars', + 4: 'apr.', + 5: 'maj', + 6: 'juni', + 7: 'juli', + 8: 'aug.', + 9: 'sep.', + 10: 'okt.', + 11: 'nov.', + 12: 'dec.', + }, + 'narrow': { + 1: 'J', + 2: 'F', + 3: 'M', + 4: 'A', + 5: 'M', + 6: 'J', + 7: 'J', + 8: 'A', + 9: 'S', + 10: 'O', + 11: 'N', + 12: 'D', + }, + 'wide': { + 1: 'januari', + 2: 'februari', + 3: 'mars', + 4: 'april', + 5: 'maj', + 6: 'juni', + 7: 'juli', + 8: 'augusti', + 9: 'september', + 10: 'oktober', + 11: 'november', + 12: 'december', + }, + }, + 'units': { + 'year': { + 'one': '{0} år', + 'other': '{0} år', + }, + 'month': { + 'one': '{0} månad', + 'other': '{0} månader', + }, + 'week': { + 'one': '{0} vecka', + 'other': '{0} veckor', + }, + 'day': { + 'one': '{0} dygn', + 'other': '{0} dygn', + }, + 'hour': { + 'one': '{0} timme', + 'other': '{0} timmar', + }, + 'minute': { + 'one': '{0} minut', + 'other': '{0} minuter', + }, + 'second': { + 'one': '{0} sekund', + 'other': '{0} sekunder', + }, + 'microsecond': { + 'one': '{0} mikrosekund', + 'other': '{0} mikrosekunder', + }, + }, + 'relative': { + 'year': { + 'future': { + 'other': 'om {0} år', + 'one': 'om {0} år', + }, + 'past': { + 'other': 'för {0} år sedan', + 'one': 'för {0} år sedan', + }, + }, + 'month': { + 'future': { + 'other': 'om {0} månader', + 'one': 'om {0} månad', + }, + 'past': { + 'other': 'för {0} månader sedan', + 'one': 'för {0} månad sedan', + }, + }, + 'week': { + 'future': { + 'other': 'om {0} veckor', + 'one': 'om {0} vecka', + }, + 'past': { + 'other': 'för {0} veckor sedan', + 'one': 'för {0} vecka sedan', + }, + }, + 'day': { + 'future': { + 'other': 'om {0} dagar', + 'one': 'om {0} dag', + }, + 'past': { + 'other': 'för {0} dagar sedan', + 'one': 'för {0} dag sedan', + }, + }, + 'hour': { + 'future': { + 'other': 'om {0} timmar', + 'one': 'om {0} timme', + }, + 'past': { + 'other': 'för {0} timmar sedan', + 'one': 'för {0} timme sedan', + }, + }, + 'minute': { + 'future': { + 'other': 'om {0} minuter', + 'one': 'om {0} minut', + }, + 'past': { + 'other': 'för {0} minuter sedan', + 'one': 'för {0} minut sedan', + }, + }, + 'second': { + 'future': { + 'other': 'om {0} sekunder', + 'one': 'om {0} sekund', + }, + 'past': { + 'other': 'för {0} sekunder sedan', + 'one': 'för {0} sekund sedan', + }, + }, + }, + 'day_periods': { + 'midnight': 'midnatt', + 'am': 'fm', + 'pm': 'em', + 'morning1': 'på morgonen', + 'morning2': 'på förmiddagen', + 'afternoon1': 'på eftermiddagen', + 'evening1': 'på kvällen', + 'night1': 'på natten', + }, + }, + 'custom': custom_translations +} diff --git a/tests/localization/test_sv.py b/tests/localization/test_sv.py new file mode 100644 index 00000000..6ccf0c4c --- /dev/null +++ b/tests/localization/test_sv.py @@ -0,0 +1,88 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +import pendulum + + +locale = "sv" + + +def test_diff_for_humans(): + with pendulum.test(pendulum.datetime(2016, 8, 29)): + diff_for_humans() + + +def diff_for_humans(): + d = pendulum.now().subtract(seconds=1) + assert d.diff_for_humans(locale=locale) == "för 1 sekund sedan" + + d = pendulum.now().subtract(seconds=2) + assert d.diff_for_humans(locale=locale) == "för 2 sekunder sedan" + + d = pendulum.now().subtract(seconds=5) + assert d.diff_for_humans(locale=locale) == "för 5 sekunder sedan" + + d = pendulum.now().subtract(seconds=21) + assert d.diff_for_humans(locale=locale) == "för 21 sekunder sedan" + + d = pendulum.now().subtract(minutes=1) + assert d.diff_for_humans(locale=locale) == "för 1 minut sedan" + + d = pendulum.now().subtract(minutes=2) + assert d.diff_for_humans(locale=locale) == "för 2 minuter sedan" + + d = pendulum.now().subtract(minutes=5) + assert d.diff_for_humans(locale=locale) == "för 5 minuter sedan" + + d = pendulum.now().subtract(hours=1) + assert d.diff_for_humans(locale=locale) == "för 1 timme sedan" + + d = pendulum.now().subtract(hours=2) + assert d.diff_for_humans(locale=locale) == "för 2 timmar sedan" + + d = pendulum.now().subtract(hours=5) + assert d.diff_for_humans(locale=locale) == "för 5 timmar sedan" + + d = pendulum.now().subtract(days=1) + assert d.diff_for_humans(locale=locale) == "för 1 dag sedan" + + d = pendulum.now().subtract(days=2) + assert d.diff_for_humans(locale=locale) == "för 2 dagar sedan" + + d = pendulum.now().subtract(days=5) + assert d.diff_for_humans(locale=locale) == "för 5 dagar sedan" + + d = pendulum.now().subtract(weeks=1) + assert d.diff_for_humans(locale=locale) == "för 1 vecka sedan" + + d = pendulum.now().subtract(weeks=2) + assert d.diff_for_humans(locale=locale) == "för 2 veckor sedan" + + d = pendulum.now().subtract(months=1) + assert d.diff_for_humans(locale=locale) == "för 1 månad sedan" + + d = pendulum.now().subtract(months=2) + assert d.diff_for_humans(locale=locale) == "för 2 månader sedan" + + d = pendulum.now().subtract(months=5) + assert d.diff_for_humans(locale=locale) == "för 5 månader sedan" + + d = pendulum.now().subtract(years=1) + assert d.diff_for_humans(locale=locale) == "för 1 år sedan" + + d = pendulum.now().subtract(years=2) + assert d.diff_for_humans(locale=locale) == "för 2 år sedan" + + d = pendulum.now().subtract(years=5) + assert d.diff_for_humans(locale=locale) == "för 5 år sedan" + + d = pendulum.now().add(seconds=1) + assert d.diff_for_humans(locale=locale) == "om 1 sekund" + + d = pendulum.now().add(seconds=1) + d2 = pendulum.now() + assert d.diff_for_humans(d2, locale=locale) == "1 sekund efter" + assert d2.diff_for_humans(d, locale=locale) == "1 sekund innan" + + assert d.diff_for_humans(d2, True, locale=locale) == "1 sekund" + assert d2.diff_for_humans(d.add(seconds=1), True, locale=locale) == "2 sekunder" From adc01208b389c788dca5d8e1193a57a8a6fde8b7 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 7 Aug 2022 14:49:14 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- pendulum/locales/sv/custom.py | 4 - pendulum/locales/sv/locale.py | 342 +++++++++++++++++----------------- tests/localization/test_sv.py | 3 +- 3 files changed, 174 insertions(+), 175 deletions(-) diff --git a/pendulum/locales/sv/custom.py b/pendulum/locales/sv/custom.py index b7df6e60..7158f4b7 100644 --- a/pendulum/locales/sv/custom.py +++ b/pendulum/locales/sv/custom.py @@ -1,7 +1,3 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - - """ sv custom locale file. """ diff --git a/pendulum/locales/sv/locale.py b/pendulum/locales/sv/locale.py index be8df6b2..5b74a6e1 100644 --- a/pendulum/locales/sv/locale.py +++ b/pendulum/locales/sv/locale.py @@ -1,6 +1,3 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - from .custom import translations as custom_translations @@ -12,207 +9,214 @@ locale = { - 'plural': lambda n: 'one' if ((n == n and ((n == 1))) and (0 == 0 and ((0 == 0)))) else 'other', - 'ordinal': lambda n: 'one' if (((n % 10) == (n % 10) and (((n % 10) == 1) or ((n % 10) == 2))) and (not ((n % 100) == (n % 100) and (((n % 100) == 11) or ((n % 100) == 12))))) else 'other', - 'translations': { - 'days': { - 'abbreviated': { - 0: 'sön', - 1: 'mån', - 2: 'tis', - 3: 'ons', - 4: 'tors', - 5: 'fre', - 6: 'lör', - }, - 'narrow': { - 0: 'S', - 1: 'M', - 2: 'T', - 3: 'O', - 4: 'T', - 5: 'F', - 6: 'L', - }, - 'short': { - 0: 'sö', - 1: 'må', - 2: 'ti', - 3: 'on', - 4: 'to', - 5: 'fr', - 6: 'lö', - }, - 'wide': { - 0: 'söndag', - 1: 'måndag', - 2: 'tisdag', - 3: 'onsdag', - 4: 'torsdag', - 5: 'fredag', - 6: 'lördag', + "plural": lambda n: "one" + if ((n == n and (n == 1)) and (0 == 0 and (0 == 0))) + else "other", + "ordinal": lambda n: "one" + if ( + ((n % 10) == (n % 10) and (((n % 10) == 1) or ((n % 10) == 2))) + and (not ((n % 100) == (n % 100) and (((n % 100) == 11) or ((n % 100) == 12)))) + ) + else "other", + "translations": { + "days": { + "abbreviated": { + 0: "sön", + 1: "mån", + 2: "tis", + 3: "ons", + 4: "tors", + 5: "fre", + 6: "lör", + }, + "narrow": { + 0: "S", + 1: "M", + 2: "T", + 3: "O", + 4: "T", + 5: "F", + 6: "L", + }, + "short": { + 0: "sö", + 1: "må", + 2: "ti", + 3: "on", + 4: "to", + 5: "fr", + 6: "lö", + }, + "wide": { + 0: "söndag", + 1: "måndag", + 2: "tisdag", + 3: "onsdag", + 4: "torsdag", + 5: "fredag", + 6: "lördag", }, }, - 'months': { - 'abbreviated': { - 1: 'jan.', - 2: 'feb.', - 3: 'mars', - 4: 'apr.', - 5: 'maj', - 6: 'juni', - 7: 'juli', - 8: 'aug.', - 9: 'sep.', - 10: 'okt.', - 11: 'nov.', - 12: 'dec.', - }, - 'narrow': { - 1: 'J', - 2: 'F', - 3: 'M', - 4: 'A', - 5: 'M', - 6: 'J', - 7: 'J', - 8: 'A', - 9: 'S', - 10: 'O', - 11: 'N', - 12: 'D', - }, - 'wide': { - 1: 'januari', - 2: 'februari', - 3: 'mars', - 4: 'april', - 5: 'maj', - 6: 'juni', - 7: 'juli', - 8: 'augusti', - 9: 'september', - 10: 'oktober', - 11: 'november', - 12: 'december', + "months": { + "abbreviated": { + 1: "jan.", + 2: "feb.", + 3: "mars", + 4: "apr.", + 5: "maj", + 6: "juni", + 7: "juli", + 8: "aug.", + 9: "sep.", + 10: "okt.", + 11: "nov.", + 12: "dec.", + }, + "narrow": { + 1: "J", + 2: "F", + 3: "M", + 4: "A", + 5: "M", + 6: "J", + 7: "J", + 8: "A", + 9: "S", + 10: "O", + 11: "N", + 12: "D", + }, + "wide": { + 1: "januari", + 2: "februari", + 3: "mars", + 4: "april", + 5: "maj", + 6: "juni", + 7: "juli", + 8: "augusti", + 9: "september", + 10: "oktober", + 11: "november", + 12: "december", }, }, - 'units': { - 'year': { - 'one': '{0} år', - 'other': '{0} år', + "units": { + "year": { + "one": "{0} år", + "other": "{0} år", }, - 'month': { - 'one': '{0} månad', - 'other': '{0} månader', + "month": { + "one": "{0} månad", + "other": "{0} månader", }, - 'week': { - 'one': '{0} vecka', - 'other': '{0} veckor', + "week": { + "one": "{0} vecka", + "other": "{0} veckor", }, - 'day': { - 'one': '{0} dygn', - 'other': '{0} dygn', + "day": { + "one": "{0} dygn", + "other": "{0} dygn", }, - 'hour': { - 'one': '{0} timme', - 'other': '{0} timmar', + "hour": { + "one": "{0} timme", + "other": "{0} timmar", }, - 'minute': { - 'one': '{0} minut', - 'other': '{0} minuter', + "minute": { + "one": "{0} minut", + "other": "{0} minuter", }, - 'second': { - 'one': '{0} sekund', - 'other': '{0} sekunder', + "second": { + "one": "{0} sekund", + "other": "{0} sekunder", }, - 'microsecond': { - 'one': '{0} mikrosekund', - 'other': '{0} mikrosekunder', + "microsecond": { + "one": "{0} mikrosekund", + "other": "{0} mikrosekunder", }, }, - 'relative': { - 'year': { - 'future': { - 'other': 'om {0} år', - 'one': 'om {0} år', + "relative": { + "year": { + "future": { + "other": "om {0} år", + "one": "om {0} år", }, - 'past': { - 'other': 'för {0} år sedan', - 'one': 'för {0} år sedan', + "past": { + "other": "för {0} år sedan", + "one": "för {0} år sedan", }, }, - 'month': { - 'future': { - 'other': 'om {0} månader', - 'one': 'om {0} månad', + "month": { + "future": { + "other": "om {0} månader", + "one": "om {0} månad", }, - 'past': { - 'other': 'för {0} månader sedan', - 'one': 'för {0} månad sedan', + "past": { + "other": "för {0} månader sedan", + "one": "för {0} månad sedan", }, }, - 'week': { - 'future': { - 'other': 'om {0} veckor', - 'one': 'om {0} vecka', + "week": { + "future": { + "other": "om {0} veckor", + "one": "om {0} vecka", }, - 'past': { - 'other': 'för {0} veckor sedan', - 'one': 'för {0} vecka sedan', + "past": { + "other": "för {0} veckor sedan", + "one": "för {0} vecka sedan", }, }, - 'day': { - 'future': { - 'other': 'om {0} dagar', - 'one': 'om {0} dag', + "day": { + "future": { + "other": "om {0} dagar", + "one": "om {0} dag", }, - 'past': { - 'other': 'för {0} dagar sedan', - 'one': 'för {0} dag sedan', + "past": { + "other": "för {0} dagar sedan", + "one": "för {0} dag sedan", }, }, - 'hour': { - 'future': { - 'other': 'om {0} timmar', - 'one': 'om {0} timme', + "hour": { + "future": { + "other": "om {0} timmar", + "one": "om {0} timme", }, - 'past': { - 'other': 'för {0} timmar sedan', - 'one': 'för {0} timme sedan', + "past": { + "other": "för {0} timmar sedan", + "one": "för {0} timme sedan", }, }, - 'minute': { - 'future': { - 'other': 'om {0} minuter', - 'one': 'om {0} minut', + "minute": { + "future": { + "other": "om {0} minuter", + "one": "om {0} minut", }, - 'past': { - 'other': 'för {0} minuter sedan', - 'one': 'för {0} minut sedan', + "past": { + "other": "för {0} minuter sedan", + "one": "för {0} minut sedan", }, }, - 'second': { - 'future': { - 'other': 'om {0} sekunder', - 'one': 'om {0} sekund', + "second": { + "future": { + "other": "om {0} sekunder", + "one": "om {0} sekund", }, - 'past': { - 'other': 'för {0} sekunder sedan', - 'one': 'för {0} sekund sedan', + "past": { + "other": "för {0} sekunder sedan", + "one": "för {0} sekund sedan", }, }, }, - 'day_periods': { - 'midnight': 'midnatt', - 'am': 'fm', - 'pm': 'em', - 'morning1': 'på morgonen', - 'morning2': 'på förmiddagen', - 'afternoon1': 'på eftermiddagen', - 'evening1': 'på kvällen', - 'night1': 'på natten', + "day_periods": { + "midnight": "midnatt", + "am": "fm", + "pm": "em", + "morning1": "på morgonen", + "morning2": "på förmiddagen", + "afternoon1": "på eftermiddagen", + "evening1": "på kvällen", + "night1": "på natten", }, }, - 'custom': custom_translations + "custom": custom_translations, } diff --git a/tests/localization/test_sv.py b/tests/localization/test_sv.py index 6ccf0c4c..b73ec50c 100644 --- a/tests/localization/test_sv.py +++ b/tests/localization/test_sv.py @@ -1,5 +1,4 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals +from __future__ import annotations import pendulum