mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-01-21 02:13:01 -08:00
c1b8be0227
* Bump arrow from 1.2.3 to 1.3.0 Bumps [arrow](https://github.com/arrow-py/arrow) from 1.2.3 to 1.3.0. - [Release notes](https://github.com/arrow-py/arrow/releases) - [Changelog](https://github.com/arrow-py/arrow/blob/master/CHANGELOG.rst) - [Commits](https://github.com/arrow-py/arrow/compare/1.2.3...1.3.0) --- updated-dependencies: - dependency-name: arrow dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> * Update arrow==1.3.0 --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> [skip ci]
6486 lines
153 KiB
Python
6486 lines
153 KiB
Python
"""Provides internationalization for arrow in over 60 languages and dialects."""
|
||
|
||
import sys
|
||
from math import trunc
|
||
from typing import (
|
||
Any,
|
||
ClassVar,
|
||
Dict,
|
||
List,
|
||
Mapping,
|
||
Optional,
|
||
Sequence,
|
||
Tuple,
|
||
Type,
|
||
Union,
|
||
cast,
|
||
)
|
||
|
||
if sys.version_info < (3, 8): # pragma: no cover
|
||
from typing_extensions import Literal
|
||
else:
|
||
from typing import Literal # pragma: no cover
|
||
|
||
TimeFrameLiteral = Literal[
|
||
"now",
|
||
"second",
|
||
"seconds",
|
||
"minute",
|
||
"minutes",
|
||
"hour",
|
||
"hours",
|
||
"day",
|
||
"days",
|
||
"week",
|
||
"weeks",
|
||
"month",
|
||
"months",
|
||
"quarter",
|
||
"quarters",
|
||
"year",
|
||
"years",
|
||
]
|
||
|
||
_TimeFrameElements = Union[
|
||
str, Sequence[str], Mapping[str, str], Mapping[str, Sequence[str]]
|
||
]
|
||
|
||
_locale_map: Dict[str, Type["Locale"]] = {}
|
||
|
||
|
||
def get_locale(name: str) -> "Locale":
|
||
"""Returns an appropriate :class:`Locale <arrow.locales.Locale>`
|
||
corresponding to an input locale name.
|
||
|
||
:param name: the name of the locale.
|
||
|
||
"""
|
||
|
||
normalized_locale_name = name.lower().replace("_", "-")
|
||
locale_cls = _locale_map.get(normalized_locale_name)
|
||
|
||
if locale_cls is None:
|
||
raise ValueError(f"Unsupported locale {normalized_locale_name!r}.")
|
||
|
||
return locale_cls()
|
||
|
||
|
||
def get_locale_by_class_name(name: str) -> "Locale":
|
||
"""Returns an appropriate :class:`Locale <arrow.locales.Locale>`
|
||
corresponding to an locale class name.
|
||
|
||
:param name: the name of the locale class.
|
||
|
||
"""
|
||
locale_cls: Optional[Type[Locale]] = globals().get(name)
|
||
|
||
if locale_cls is None:
|
||
raise ValueError(f"Unsupported locale {name!r}.")
|
||
|
||
return locale_cls()
|
||
|
||
|
||
class Locale:
|
||
"""Represents locale-specific data and functionality."""
|
||
|
||
names: ClassVar[List[str]] = []
|
||
|
||
timeframes: ClassVar[Mapping[TimeFrameLiteral, _TimeFrameElements]] = {
|
||
"now": "",
|
||
"second": "",
|
||
"seconds": "",
|
||
"minute": "",
|
||
"minutes": "",
|
||
"hour": "",
|
||
"hours": "",
|
||
"day": "",
|
||
"days": "",
|
||
"week": "",
|
||
"weeks": "",
|
||
"month": "",
|
||
"months": "",
|
||
"quarter": "",
|
||
"quarters": "",
|
||
"year": "",
|
||
"years": "",
|
||
}
|
||
|
||
meridians: ClassVar[Dict[str, str]] = {"am": "", "pm": "", "AM": "", "PM": ""}
|
||
|
||
past: ClassVar[str]
|
||
future: ClassVar[str]
|
||
and_word: ClassVar[Optional[str]] = None
|
||
|
||
month_names: ClassVar[List[str]] = []
|
||
month_abbreviations: ClassVar[List[str]] = []
|
||
|
||
day_names: ClassVar[List[str]] = []
|
||
day_abbreviations: ClassVar[List[str]] = []
|
||
|
||
ordinal_day_re: ClassVar[str] = r"(\d+)"
|
||
|
||
_month_name_to_ordinal: Optional[Dict[str, int]]
|
||
|
||
def __init_subclass__(cls, **kwargs: Any) -> None:
|
||
for locale_name in cls.names:
|
||
if locale_name in _locale_map:
|
||
raise LookupError(f"Duplicated locale name: {locale_name}")
|
||
|
||
_locale_map[locale_name.lower().replace("_", "-")] = cls
|
||
|
||
def __init__(self) -> None:
|
||
self._month_name_to_ordinal = None
|
||
|
||
def describe(
|
||
self,
|
||
timeframe: TimeFrameLiteral,
|
||
delta: Union[float, int] = 0,
|
||
only_distance: bool = False,
|
||
) -> str:
|
||
"""Describes a delta within a timeframe in plain language.
|
||
|
||
:param timeframe: a string representing a timeframe.
|
||
:param delta: a quantity representing a delta in a timeframe.
|
||
:param only_distance: return only distance eg: "11 seconds" without "in" or "ago" keywords
|
||
"""
|
||
|
||
humanized = self._format_timeframe(timeframe, trunc(delta))
|
||
if not only_distance:
|
||
humanized = self._format_relative(humanized, timeframe, delta)
|
||
|
||
return humanized
|
||
|
||
def describe_multi(
|
||
self,
|
||
timeframes: Sequence[Tuple[TimeFrameLiteral, Union[int, float]]],
|
||
only_distance: bool = False,
|
||
) -> str:
|
||
"""Describes a delta within multiple timeframes in plain language.
|
||
|
||
:param timeframes: a list of string, quantity pairs each representing a timeframe and delta.
|
||
:param only_distance: return only distance eg: "2 hours and 11 seconds" without "in" or "ago" keywords
|
||
"""
|
||
|
||
parts = [
|
||
self._format_timeframe(timeframe, trunc(delta))
|
||
for timeframe, delta in timeframes
|
||
]
|
||
if self.and_word:
|
||
parts.insert(-1, self.and_word)
|
||
humanized = " ".join(parts)
|
||
|
||
if not only_distance:
|
||
# Needed to determine the correct relative string to use
|
||
timeframe_value = 0
|
||
|
||
for _, unit_value in timeframes:
|
||
if trunc(unit_value) != 0:
|
||
timeframe_value = trunc(unit_value)
|
||
break
|
||
|
||
# Note it doesn't matter the timeframe unit we use on the call, only the value
|
||
humanized = self._format_relative(humanized, "seconds", timeframe_value)
|
||
|
||
return humanized
|
||
|
||
def day_name(self, day: int) -> str:
|
||
"""Returns the day name for a specified day of the week.
|
||
|
||
:param day: the ``int`` day of the week (1-7).
|
||
|
||
"""
|
||
|
||
return self.day_names[day]
|
||
|
||
def day_abbreviation(self, day: int) -> str:
|
||
"""Returns the day abbreviation for a specified day of the week.
|
||
|
||
:param day: the ``int`` day of the week (1-7).
|
||
|
||
"""
|
||
|
||
return self.day_abbreviations[day]
|
||
|
||
def month_name(self, month: int) -> str:
|
||
"""Returns the month name for a specified month of the year.
|
||
|
||
:param month: the ``int`` month of the year (1-12).
|
||
|
||
"""
|
||
|
||
return self.month_names[month]
|
||
|
||
def month_abbreviation(self, month: int) -> str:
|
||
"""Returns the month abbreviation for a specified month of the year.
|
||
|
||
:param month: the ``int`` month of the year (1-12).
|
||
|
||
"""
|
||
|
||
return self.month_abbreviations[month]
|
||
|
||
def month_number(self, name: str) -> Optional[int]:
|
||
"""Returns the month number for a month specified by name or abbreviation.
|
||
|
||
:param name: the month name or abbreviation.
|
||
|
||
"""
|
||
|
||
if self._month_name_to_ordinal is None:
|
||
self._month_name_to_ordinal = self._name_to_ordinal(self.month_names)
|
||
self._month_name_to_ordinal.update(
|
||
self._name_to_ordinal(self.month_abbreviations)
|
||
)
|
||
|
||
return self._month_name_to_ordinal.get(name)
|
||
|
||
def year_full(self, year: int) -> str:
|
||
"""Returns the year for specific locale if available
|
||
|
||
:param year: the ``int`` year (4-digit)
|
||
"""
|
||
return f"{year:04d}"
|
||
|
||
def year_abbreviation(self, year: int) -> str:
|
||
"""Returns the year for specific locale if available
|
||
|
||
:param year: the ``int`` year (4-digit)
|
||
"""
|
||
return f"{year:04d}"[2:]
|
||
|
||
def meridian(self, hour: int, token: Any) -> Optional[str]:
|
||
"""Returns the meridian indicator for a specified hour and format token.
|
||
|
||
:param hour: the ``int`` hour of the day.
|
||
:param token: the format token.
|
||
"""
|
||
|
||
if token == "a":
|
||
return self.meridians["am"] if hour < 12 else self.meridians["pm"]
|
||
if token == "A":
|
||
return self.meridians["AM"] if hour < 12 else self.meridians["PM"]
|
||
return None
|
||
|
||
def ordinal_number(self, n: int) -> str:
|
||
"""Returns the ordinal format of a given integer
|
||
|
||
:param n: an integer
|
||
"""
|
||
return self._ordinal_number(n)
|
||
|
||
def _ordinal_number(self, n: int) -> str:
|
||
return f"{n}"
|
||
|
||
def _name_to_ordinal(self, lst: Sequence[str]) -> Dict[str, int]:
|
||
return {elem.lower(): i for i, elem in enumerate(lst[1:], 1)}
|
||
|
||
def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str:
|
||
# TODO: remove cast
|
||
return cast(str, self.timeframes[timeframe]).format(trunc(abs(delta)))
|
||
|
||
def _format_relative(
|
||
self,
|
||
humanized: str,
|
||
timeframe: TimeFrameLiteral,
|
||
delta: Union[float, int],
|
||
) -> str:
|
||
if timeframe == "now":
|
||
return humanized
|
||
|
||
direction = self.past if delta < 0 else self.future
|
||
|
||
return direction.format(humanized)
|
||
|
||
|
||
class EnglishLocale(Locale):
|
||
names = [
|
||
"en",
|
||
"en-us",
|
||
"en-gb",
|
||
"en-au",
|
||
"en-be",
|
||
"en-jp",
|
||
"en-za",
|
||
"en-ca",
|
||
"en-ph",
|
||
]
|
||
|
||
past = "{0} ago"
|
||
future = "in {0}"
|
||
and_word = "and"
|
||
|
||
timeframes = {
|
||
"now": "just now",
|
||
"second": "a second",
|
||
"seconds": "{0} seconds",
|
||
"minute": "a minute",
|
||
"minutes": "{0} minutes",
|
||
"hour": "an hour",
|
||
"hours": "{0} hours",
|
||
"day": "a day",
|
||
"days": "{0} days",
|
||
"week": "a week",
|
||
"weeks": "{0} weeks",
|
||
"month": "a month",
|
||
"months": "{0} months",
|
||
"quarter": "a quarter",
|
||
"quarters": "{0} quarters",
|
||
"year": "a year",
|
||
"years": "{0} years",
|
||
}
|
||
|
||
meridians = {"am": "am", "pm": "pm", "AM": "AM", "PM": "PM"}
|
||
|
||
month_names = [
|
||
"",
|
||
"January",
|
||
"February",
|
||
"March",
|
||
"April",
|
||
"May",
|
||
"June",
|
||
"July",
|
||
"August",
|
||
"September",
|
||
"October",
|
||
"November",
|
||
"December",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"Jan",
|
||
"Feb",
|
||
"Mar",
|
||
"Apr",
|
||
"May",
|
||
"Jun",
|
||
"Jul",
|
||
"Aug",
|
||
"Sep",
|
||
"Oct",
|
||
"Nov",
|
||
"Dec",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"Monday",
|
||
"Tuesday",
|
||
"Wednesday",
|
||
"Thursday",
|
||
"Friday",
|
||
"Saturday",
|
||
"Sunday",
|
||
]
|
||
day_abbreviations = ["", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
|
||
|
||
ordinal_day_re = r"((?P<value>[2-3]?1(?=st)|[2-3]?2(?=nd)|[2-3]?3(?=rd)|[1-3]?[04-9](?=th)|1[1-3](?=th))(st|nd|rd|th))"
|
||
|
||
def _ordinal_number(self, n: int) -> str:
|
||
if n % 100 not in (11, 12, 13):
|
||
remainder = abs(n) % 10
|
||
if remainder == 1:
|
||
return f"{n}st"
|
||
elif remainder == 2:
|
||
return f"{n}nd"
|
||
elif remainder == 3:
|
||
return f"{n}rd"
|
||
return f"{n}th"
|
||
|
||
def describe(
|
||
self,
|
||
timeframe: TimeFrameLiteral,
|
||
delta: Union[int, float] = 0,
|
||
only_distance: bool = False,
|
||
) -> str:
|
||
"""Describes a delta within a timeframe in plain language.
|
||
|
||
:param timeframe: a string representing a timeframe.
|
||
:param delta: a quantity representing a delta in a timeframe.
|
||
:param only_distance: return only distance eg: "11 seconds" without "in" or "ago" keywords
|
||
"""
|
||
|
||
humanized = super().describe(timeframe, delta, only_distance)
|
||
if only_distance and timeframe == "now":
|
||
humanized = "instantly"
|
||
|
||
return humanized
|
||
|
||
|
||
class ItalianLocale(Locale):
|
||
names = ["it", "it-it"]
|
||
past = "{0} fa"
|
||
future = "tra {0}"
|
||
and_word = "e"
|
||
|
||
timeframes = {
|
||
"now": "adesso",
|
||
"second": "un secondo",
|
||
"seconds": "{0} qualche secondo",
|
||
"minute": "un minuto",
|
||
"minutes": "{0} minuti",
|
||
"hour": "un'ora",
|
||
"hours": "{0} ore",
|
||
"day": "un giorno",
|
||
"days": "{0} giorni",
|
||
"week": "una settimana",
|
||
"weeks": "{0} settimane",
|
||
"month": "un mese",
|
||
"months": "{0} mesi",
|
||
"year": "un anno",
|
||
"years": "{0} anni",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"gennaio",
|
||
"febbraio",
|
||
"marzo",
|
||
"aprile",
|
||
"maggio",
|
||
"giugno",
|
||
"luglio",
|
||
"agosto",
|
||
"settembre",
|
||
"ottobre",
|
||
"novembre",
|
||
"dicembre",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"gen",
|
||
"feb",
|
||
"mar",
|
||
"apr",
|
||
"mag",
|
||
"giu",
|
||
"lug",
|
||
"ago",
|
||
"set",
|
||
"ott",
|
||
"nov",
|
||
"dic",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"lunedì",
|
||
"martedì",
|
||
"mercoledì",
|
||
"giovedì",
|
||
"venerdì",
|
||
"sabato",
|
||
"domenica",
|
||
]
|
||
day_abbreviations = ["", "lun", "mar", "mer", "gio", "ven", "sab", "dom"]
|
||
|
||
ordinal_day_re = r"((?P<value>[1-3]?[0-9](?=[ºª]))[ºª])"
|
||
|
||
def _ordinal_number(self, n: int) -> str:
|
||
return f"{n}º"
|
||
|
||
|
||
class SpanishLocale(Locale):
|
||
names = ["es", "es-es"]
|
||
past = "hace {0}"
|
||
future = "en {0}"
|
||
and_word = "y"
|
||
|
||
timeframes = {
|
||
"now": "ahora",
|
||
"second": "un segundo",
|
||
"seconds": "{0} segundos",
|
||
"minute": "un minuto",
|
||
"minutes": "{0} minutos",
|
||
"hour": "una hora",
|
||
"hours": "{0} horas",
|
||
"day": "un día",
|
||
"days": "{0} días",
|
||
"week": "una semana",
|
||
"weeks": "{0} semanas",
|
||
"month": "un mes",
|
||
"months": "{0} meses",
|
||
"year": "un año",
|
||
"years": "{0} años",
|
||
}
|
||
|
||
meridians = {"am": "am", "pm": "pm", "AM": "AM", "PM": "PM"}
|
||
|
||
month_names = [
|
||
"",
|
||
"enero",
|
||
"febrero",
|
||
"marzo",
|
||
"abril",
|
||
"mayo",
|
||
"junio",
|
||
"julio",
|
||
"agosto",
|
||
"septiembre",
|
||
"octubre",
|
||
"noviembre",
|
||
"diciembre",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"ene",
|
||
"feb",
|
||
"mar",
|
||
"abr",
|
||
"may",
|
||
"jun",
|
||
"jul",
|
||
"ago",
|
||
"sep",
|
||
"oct",
|
||
"nov",
|
||
"dic",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"lunes",
|
||
"martes",
|
||
"miércoles",
|
||
"jueves",
|
||
"viernes",
|
||
"sábado",
|
||
"domingo",
|
||
]
|
||
day_abbreviations = ["", "lun", "mar", "mie", "jue", "vie", "sab", "dom"]
|
||
|
||
ordinal_day_re = r"((?P<value>[1-3]?[0-9](?=[ºª]))[ºª])"
|
||
|
||
def _ordinal_number(self, n: int) -> str:
|
||
return f"{n}º"
|
||
|
||
|
||
class FrenchBaseLocale(Locale):
|
||
past = "il y a {0}"
|
||
future = "dans {0}"
|
||
and_word = "et"
|
||
|
||
timeframes = {
|
||
"now": "maintenant",
|
||
"second": "une seconde",
|
||
"seconds": "{0} secondes",
|
||
"minute": "une minute",
|
||
"minutes": "{0} minutes",
|
||
"hour": "une heure",
|
||
"hours": "{0} heures",
|
||
"day": "un jour",
|
||
"days": "{0} jours",
|
||
"week": "une semaine",
|
||
"weeks": "{0} semaines",
|
||
"month": "un mois",
|
||
"months": "{0} mois",
|
||
"year": "un an",
|
||
"years": "{0} ans",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"janvier",
|
||
"février",
|
||
"mars",
|
||
"avril",
|
||
"mai",
|
||
"juin",
|
||
"juillet",
|
||
"août",
|
||
"septembre",
|
||
"octobre",
|
||
"novembre",
|
||
"décembre",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"lundi",
|
||
"mardi",
|
||
"mercredi",
|
||
"jeudi",
|
||
"vendredi",
|
||
"samedi",
|
||
"dimanche",
|
||
]
|
||
day_abbreviations = ["", "lun", "mar", "mer", "jeu", "ven", "sam", "dim"]
|
||
|
||
ordinal_day_re = (
|
||
r"((?P<value>\b1(?=er\b)|[1-3]?[02-9](?=e\b)|[1-3]1(?=e\b))(er|e)\b)"
|
||
)
|
||
|
||
def _ordinal_number(self, n: int) -> str:
|
||
if abs(n) == 1:
|
||
return f"{n}er"
|
||
return f"{n}e"
|
||
|
||
|
||
class FrenchLocale(FrenchBaseLocale, Locale):
|
||
names = ["fr", "fr-fr"]
|
||
|
||
month_abbreviations = [
|
||
"",
|
||
"janv",
|
||
"févr",
|
||
"mars",
|
||
"avr",
|
||
"mai",
|
||
"juin",
|
||
"juil",
|
||
"août",
|
||
"sept",
|
||
"oct",
|
||
"nov",
|
||
"déc",
|
||
]
|
||
|
||
|
||
class FrenchCanadianLocale(FrenchBaseLocale, Locale):
|
||
names = ["fr-ca"]
|
||
|
||
month_abbreviations = [
|
||
"",
|
||
"janv",
|
||
"févr",
|
||
"mars",
|
||
"avr",
|
||
"mai",
|
||
"juin",
|
||
"juill",
|
||
"août",
|
||
"sept",
|
||
"oct",
|
||
"nov",
|
||
"déc",
|
||
]
|
||
|
||
|
||
class GreekLocale(Locale):
|
||
names = ["el", "el-gr"]
|
||
|
||
past = "{0} πριν"
|
||
future = "σε {0}"
|
||
and_word = "και"
|
||
|
||
timeframes = {
|
||
"now": "τώρα",
|
||
"second": "ένα δεύτερο",
|
||
"seconds": "{0} δευτερόλεπτα",
|
||
"minute": "ένα λεπτό",
|
||
"minutes": "{0} λεπτά",
|
||
"hour": "μία ώρα",
|
||
"hours": "{0} ώρες",
|
||
"day": "μία μέρα",
|
||
"days": "{0} μέρες",
|
||
"week": "μία εβδομάδα",
|
||
"weeks": "{0} εβδομάδες",
|
||
"month": "ένα μήνα",
|
||
"months": "{0} μήνες",
|
||
"year": "ένα χρόνο",
|
||
"years": "{0} χρόνια",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"Ιανουαρίου",
|
||
"Φεβρουαρίου",
|
||
"Μαρτίου",
|
||
"Απριλίου",
|
||
"Μαΐου",
|
||
"Ιουνίου",
|
||
"Ιουλίου",
|
||
"Αυγούστου",
|
||
"Σεπτεμβρίου",
|
||
"Οκτωβρίου",
|
||
"Νοεμβρίου",
|
||
"Δεκεμβρίου",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"Ιαν",
|
||
"Φεβ",
|
||
"Μαρ",
|
||
"Απρ",
|
||
"Μαϊ",
|
||
"Ιον",
|
||
"Ιολ",
|
||
"Αυγ",
|
||
"Σεπ",
|
||
"Οκτ",
|
||
"Νοε",
|
||
"Δεκ",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"Δευτέρα",
|
||
"Τρίτη",
|
||
"Τετάρτη",
|
||
"Πέμπτη",
|
||
"Παρασκευή",
|
||
"Σάββατο",
|
||
"Κυριακή",
|
||
]
|
||
day_abbreviations = ["", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ", "Κυρ"]
|
||
|
||
|
||
class JapaneseLocale(Locale):
|
||
names = ["ja", "ja-jp"]
|
||
|
||
past = "{0}前"
|
||
future = "{0}後"
|
||
and_word = ""
|
||
|
||
timeframes = {
|
||
"now": "現在",
|
||
"second": "1秒",
|
||
"seconds": "{0}秒",
|
||
"minute": "1分",
|
||
"minutes": "{0}分",
|
||
"hour": "1時間",
|
||
"hours": "{0}時間",
|
||
"day": "1日",
|
||
"days": "{0}日",
|
||
"week": "1週間",
|
||
"weeks": "{0}週間",
|
||
"month": "1ヶ月",
|
||
"months": "{0}ヶ月",
|
||
"year": "1年",
|
||
"years": "{0}年",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"1月",
|
||
"2月",
|
||
"3月",
|
||
"4月",
|
||
"5月",
|
||
"6月",
|
||
"7月",
|
||
"8月",
|
||
"9月",
|
||
"10月",
|
||
"11月",
|
||
"12月",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
" 1",
|
||
" 2",
|
||
" 3",
|
||
" 4",
|
||
" 5",
|
||
" 6",
|
||
" 7",
|
||
" 8",
|
||
" 9",
|
||
"10",
|
||
"11",
|
||
"12",
|
||
]
|
||
|
||
day_names = ["", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日", "日曜日"]
|
||
day_abbreviations = ["", "月", "火", "水", "木", "金", "土", "日"]
|
||
|
||
|
||
class SwedishLocale(Locale):
|
||
names = ["sv", "sv-se"]
|
||
|
||
past = "för {0} sen"
|
||
future = "om {0}"
|
||
and_word = "och"
|
||
|
||
timeframes = {
|
||
"now": "just nu",
|
||
"second": "en sekund",
|
||
"seconds": "{0} sekunder",
|
||
"minute": "en minut",
|
||
"minutes": "{0} minuter",
|
||
"hour": "en timme",
|
||
"hours": "{0} timmar",
|
||
"day": "en dag",
|
||
"days": "{0} dagar",
|
||
"week": "en vecka",
|
||
"weeks": "{0} veckor",
|
||
"month": "en månad",
|
||
"months": "{0} månader",
|
||
"year": "ett år",
|
||
"years": "{0} år",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"januari",
|
||
"februari",
|
||
"mars",
|
||
"april",
|
||
"maj",
|
||
"juni",
|
||
"juli",
|
||
"augusti",
|
||
"september",
|
||
"oktober",
|
||
"november",
|
||
"december",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"jan",
|
||
"feb",
|
||
"mar",
|
||
"apr",
|
||
"maj",
|
||
"jun",
|
||
"jul",
|
||
"aug",
|
||
"sep",
|
||
"okt",
|
||
"nov",
|
||
"dec",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"måndag",
|
||
"tisdag",
|
||
"onsdag",
|
||
"torsdag",
|
||
"fredag",
|
||
"lördag",
|
||
"söndag",
|
||
]
|
||
day_abbreviations = ["", "mån", "tis", "ons", "tor", "fre", "lör", "sön"]
|
||
|
||
|
||
class FinnishLocale(Locale):
|
||
names = ["fi", "fi-fi"]
|
||
|
||
# The finnish grammar is very complex, and its hard to convert
|
||
# 1-to-1 to something like English.
|
||
|
||
past = "{0} sitten"
|
||
future = "{0} kuluttua"
|
||
|
||
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
|
||
"now": "juuri nyt",
|
||
"second": {"past": "sekunti", "future": "sekunnin"},
|
||
"seconds": {"past": "{0} sekuntia", "future": "{0} sekunnin"},
|
||
"minute": {"past": "minuutti", "future": "minuutin"},
|
||
"minutes": {"past": "{0} minuuttia", "future": "{0} minuutin"},
|
||
"hour": {"past": "tunti", "future": "tunnin"},
|
||
"hours": {"past": "{0} tuntia", "future": "{0} tunnin"},
|
||
"day": {"past": "päivä", "future": "päivän"},
|
||
"days": {"past": "{0} päivää", "future": "{0} päivän"},
|
||
"week": {"past": "viikko", "future": "viikon"},
|
||
"weeks": {"past": "{0} viikkoa", "future": "{0} viikon"},
|
||
"month": {"past": "kuukausi", "future": "kuukauden"},
|
||
"months": {"past": "{0} kuukautta", "future": "{0} kuukauden"},
|
||
"year": {"past": "vuosi", "future": "vuoden"},
|
||
"years": {"past": "{0} vuotta", "future": "{0} vuoden"},
|
||
}
|
||
|
||
# Months and days are lowercase in Finnish
|
||
month_names = [
|
||
"",
|
||
"tammikuu",
|
||
"helmikuu",
|
||
"maaliskuu",
|
||
"huhtikuu",
|
||
"toukokuu",
|
||
"kesäkuu",
|
||
"heinäkuu",
|
||
"elokuu",
|
||
"syyskuu",
|
||
"lokakuu",
|
||
"marraskuu",
|
||
"joulukuu",
|
||
]
|
||
|
||
month_abbreviations = [
|
||
"",
|
||
"tammi",
|
||
"helmi",
|
||
"maalis",
|
||
"huhti",
|
||
"touko",
|
||
"kesä",
|
||
"heinä",
|
||
"elo",
|
||
"syys",
|
||
"loka",
|
||
"marras",
|
||
"joulu",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"maanantai",
|
||
"tiistai",
|
||
"keskiviikko",
|
||
"torstai",
|
||
"perjantai",
|
||
"lauantai",
|
||
"sunnuntai",
|
||
]
|
||
|
||
day_abbreviations = ["", "ma", "ti", "ke", "to", "pe", "la", "su"]
|
||
|
||
def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str:
|
||
form = self.timeframes[timeframe]
|
||
|
||
if isinstance(form, Mapping):
|
||
if delta < 0:
|
||
form = form["past"]
|
||
else:
|
||
form = form["future"]
|
||
|
||
return form.format(abs(delta))
|
||
|
||
def _ordinal_number(self, n: int) -> str:
|
||
return f"{n}."
|
||
|
||
|
||
class ChineseCNLocale(Locale):
|
||
names = ["zh", "zh-cn"]
|
||
|
||
past = "{0}前"
|
||
future = "{0}后"
|
||
|
||
timeframes = {
|
||
"now": "刚才",
|
||
"second": "1秒",
|
||
"seconds": "{0}秒",
|
||
"minute": "1分钟",
|
||
"minutes": "{0}分钟",
|
||
"hour": "1小时",
|
||
"hours": "{0}小时",
|
||
"day": "1天",
|
||
"days": "{0}天",
|
||
"week": "1周",
|
||
"weeks": "{0}周",
|
||
"month": "1个月",
|
||
"months": "{0}个月",
|
||
"year": "1年",
|
||
"years": "{0}年",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"一月",
|
||
"二月",
|
||
"三月",
|
||
"四月",
|
||
"五月",
|
||
"六月",
|
||
"七月",
|
||
"八月",
|
||
"九月",
|
||
"十月",
|
||
"十一月",
|
||
"十二月",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
" 1",
|
||
" 2",
|
||
" 3",
|
||
" 4",
|
||
" 5",
|
||
" 6",
|
||
" 7",
|
||
" 8",
|
||
" 9",
|
||
"10",
|
||
"11",
|
||
"12",
|
||
]
|
||
|
||
day_names = ["", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]
|
||
day_abbreviations = ["", "一", "二", "三", "四", "五", "六", "日"]
|
||
|
||
|
||
class ChineseTWLocale(Locale):
|
||
names = ["zh-tw"]
|
||
|
||
past = "{0}前"
|
||
future = "{0}後"
|
||
and_word = "和"
|
||
|
||
timeframes = {
|
||
"now": "剛才",
|
||
"second": "1秒",
|
||
"seconds": "{0}秒",
|
||
"minute": "1分鐘",
|
||
"minutes": "{0}分鐘",
|
||
"hour": "1小時",
|
||
"hours": "{0}小時",
|
||
"day": "1天",
|
||
"days": "{0}天",
|
||
"week": "1週",
|
||
"weeks": "{0}週",
|
||
"month": "1個月",
|
||
"months": "{0}個月",
|
||
"year": "1年",
|
||
"years": "{0}年",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"1月",
|
||
"2月",
|
||
"3月",
|
||
"4月",
|
||
"5月",
|
||
"6月",
|
||
"7月",
|
||
"8月",
|
||
"9月",
|
||
"10月",
|
||
"11月",
|
||
"12月",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
" 1",
|
||
" 2",
|
||
" 3",
|
||
" 4",
|
||
" 5",
|
||
" 6",
|
||
" 7",
|
||
" 8",
|
||
" 9",
|
||
"10",
|
||
"11",
|
||
"12",
|
||
]
|
||
|
||
day_names = ["", "週一", "週二", "週三", "週四", "週五", "週六", "週日"]
|
||
day_abbreviations = ["", "一", "二", "三", "四", "五", "六", "日"]
|
||
|
||
|
||
class HongKongLocale(Locale):
|
||
names = ["zh-hk"]
|
||
|
||
past = "{0}前"
|
||
future = "{0}後"
|
||
|
||
timeframes = {
|
||
"now": "剛才",
|
||
"second": "1秒",
|
||
"seconds": "{0}秒",
|
||
"minute": "1分鐘",
|
||
"minutes": "{0}分鐘",
|
||
"hour": "1小時",
|
||
"hours": "{0}小時",
|
||
"day": "1天",
|
||
"days": "{0}天",
|
||
"week": "1星期",
|
||
"weeks": "{0}星期",
|
||
"month": "1個月",
|
||
"months": "{0}個月",
|
||
"year": "1年",
|
||
"years": "{0}年",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"1月",
|
||
"2月",
|
||
"3月",
|
||
"4月",
|
||
"5月",
|
||
"6月",
|
||
"7月",
|
||
"8月",
|
||
"9月",
|
||
"10月",
|
||
"11月",
|
||
"12月",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
" 1",
|
||
" 2",
|
||
" 3",
|
||
" 4",
|
||
" 5",
|
||
" 6",
|
||
" 7",
|
||
" 8",
|
||
" 9",
|
||
"10",
|
||
"11",
|
||
"12",
|
||
]
|
||
|
||
day_names = ["", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]
|
||
day_abbreviations = ["", "一", "二", "三", "四", "五", "六", "日"]
|
||
|
||
|
||
class KoreanLocale(Locale):
|
||
names = ["ko", "ko-kr"]
|
||
|
||
past = "{0} 전"
|
||
future = "{0} 후"
|
||
|
||
timeframes = {
|
||
"now": "지금",
|
||
"second": "1초",
|
||
"seconds": "{0}초",
|
||
"minute": "1분",
|
||
"minutes": "{0}분",
|
||
"hour": "한시간",
|
||
"hours": "{0}시간",
|
||
"day": "하루",
|
||
"days": "{0}일",
|
||
"week": "1주",
|
||
"weeks": "{0}주",
|
||
"month": "한달",
|
||
"months": "{0}개월",
|
||
"year": "1년",
|
||
"years": "{0}년",
|
||
}
|
||
|
||
special_dayframes = {
|
||
-3: "그끄제",
|
||
-2: "그제",
|
||
-1: "어제",
|
||
1: "내일",
|
||
2: "모레",
|
||
3: "글피",
|
||
4: "그글피",
|
||
}
|
||
|
||
special_yearframes = {-2: "제작년", -1: "작년", 1: "내년", 2: "내후년"}
|
||
|
||
month_names = [
|
||
"",
|
||
"1월",
|
||
"2월",
|
||
"3월",
|
||
"4월",
|
||
"5월",
|
||
"6월",
|
||
"7월",
|
||
"8월",
|
||
"9월",
|
||
"10월",
|
||
"11월",
|
||
"12월",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
" 1",
|
||
" 2",
|
||
" 3",
|
||
" 4",
|
||
" 5",
|
||
" 6",
|
||
" 7",
|
||
" 8",
|
||
" 9",
|
||
"10",
|
||
"11",
|
||
"12",
|
||
]
|
||
|
||
day_names = ["", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일", "일요일"]
|
||
day_abbreviations = ["", "월", "화", "수", "목", "금", "토", "일"]
|
||
|
||
def _ordinal_number(self, n: int) -> str:
|
||
ordinals = ["0", "첫", "두", "세", "네", "다섯", "여섯", "일곱", "여덟", "아홉", "열"]
|
||
if n < len(ordinals):
|
||
return f"{ordinals[n]}번째"
|
||
return f"{n}번째"
|
||
|
||
def _format_relative(
|
||
self,
|
||
humanized: str,
|
||
timeframe: TimeFrameLiteral,
|
||
delta: Union[float, int],
|
||
) -> str:
|
||
if timeframe in ("day", "days"):
|
||
special = self.special_dayframes.get(int(delta))
|
||
if special:
|
||
return special
|
||
elif timeframe in ("year", "years"):
|
||
special = self.special_yearframes.get(int(delta))
|
||
if special:
|
||
return special
|
||
|
||
return super()._format_relative(humanized, timeframe, delta)
|
||
|
||
|
||
# derived locale types & implementations.
|
||
class DutchLocale(Locale):
|
||
names = ["nl", "nl-nl"]
|
||
|
||
past = "{0} geleden"
|
||
future = "over {0}"
|
||
|
||
timeframes = {
|
||
"now": "nu",
|
||
"second": "een seconde",
|
||
"seconds": "{0} seconden",
|
||
"minute": "een minuut",
|
||
"minutes": "{0} minuten",
|
||
"hour": "een uur",
|
||
"hours": "{0} uur",
|
||
"day": "een dag",
|
||
"days": "{0} dagen",
|
||
"week": "een week",
|
||
"weeks": "{0} weken",
|
||
"month": "een maand",
|
||
"months": "{0} maanden",
|
||
"year": "een jaar",
|
||
"years": "{0} jaar",
|
||
}
|
||
|
||
# In Dutch names of months and days are not starting with a capital letter
|
||
# like in the English language.
|
||
month_names = [
|
||
"",
|
||
"januari",
|
||
"februari",
|
||
"maart",
|
||
"april",
|
||
"mei",
|
||
"juni",
|
||
"juli",
|
||
"augustus",
|
||
"september",
|
||
"oktober",
|
||
"november",
|
||
"december",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"jan",
|
||
"feb",
|
||
"mrt",
|
||
"apr",
|
||
"mei",
|
||
"jun",
|
||
"jul",
|
||
"aug",
|
||
"sep",
|
||
"okt",
|
||
"nov",
|
||
"dec",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"maandag",
|
||
"dinsdag",
|
||
"woensdag",
|
||
"donderdag",
|
||
"vrijdag",
|
||
"zaterdag",
|
||
"zondag",
|
||
]
|
||
day_abbreviations = ["", "ma", "di", "wo", "do", "vr", "za", "zo"]
|
||
|
||
|
||
class SlavicBaseLocale(Locale):
|
||
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]]
|
||
|
||
def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str:
|
||
form = self.timeframes[timeframe]
|
||
delta = abs(delta)
|
||
|
||
if isinstance(form, Mapping):
|
||
if delta % 10 == 1 and delta % 100 != 11:
|
||
form = form["singular"]
|
||
elif 2 <= delta % 10 <= 4 and (delta % 100 < 10 or delta % 100 >= 20):
|
||
form = form["dual"]
|
||
else:
|
||
form = form["plural"]
|
||
|
||
return form.format(delta)
|
||
|
||
|
||
class BelarusianLocale(SlavicBaseLocale):
|
||
names = ["be", "be-by"]
|
||
|
||
past = "{0} таму"
|
||
future = "праз {0}"
|
||
|
||
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
|
||
"now": "зараз",
|
||
"second": "секунду",
|
||
"seconds": "{0} некалькі секунд",
|
||
"minute": "хвіліну",
|
||
"minutes": {
|
||
"singular": "{0} хвіліну",
|
||
"dual": "{0} хвіліны",
|
||
"plural": "{0} хвілін",
|
||
},
|
||
"hour": "гадзіну",
|
||
"hours": {
|
||
"singular": "{0} гадзіну",
|
||
"dual": "{0} гадзіны",
|
||
"plural": "{0} гадзін",
|
||
},
|
||
"day": "дзень",
|
||
"days": {"singular": "{0} дзень", "dual": "{0} дні", "plural": "{0} дзён"},
|
||
"month": "месяц",
|
||
"months": {
|
||
"singular": "{0} месяц",
|
||
"dual": "{0} месяцы",
|
||
"plural": "{0} месяцаў",
|
||
},
|
||
"year": "год",
|
||
"years": {"singular": "{0} год", "dual": "{0} гады", "plural": "{0} гадоў"},
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"студзеня",
|
||
"лютага",
|
||
"сакавіка",
|
||
"красавіка",
|
||
"траўня",
|
||
"чэрвеня",
|
||
"ліпеня",
|
||
"жніўня",
|
||
"верасня",
|
||
"кастрычніка",
|
||
"лістапада",
|
||
"снежня",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"студ",
|
||
"лют",
|
||
"сак",
|
||
"крас",
|
||
"трав",
|
||
"чэрв",
|
||
"ліп",
|
||
"жнів",
|
||
"вер",
|
||
"каст",
|
||
"ліст",
|
||
"снеж",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"панядзелак",
|
||
"аўторак",
|
||
"серада",
|
||
"чацвер",
|
||
"пятніца",
|
||
"субота",
|
||
"нядзеля",
|
||
]
|
||
day_abbreviations = ["", "пн", "ат", "ср", "чц", "пт", "сб", "нд"]
|
||
|
||
|
||
class PolishLocale(SlavicBaseLocale):
|
||
names = ["pl", "pl-pl"]
|
||
|
||
past = "{0} temu"
|
||
future = "za {0}"
|
||
|
||
# The nouns should be in genitive case (Polish: "dopełniacz")
|
||
# in order to correctly form `past` & `future` expressions.
|
||
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
|
||
"now": "teraz",
|
||
"second": "sekundę",
|
||
"seconds": {
|
||
"singular": "{0} sekund",
|
||
"dual": "{0} sekundy",
|
||
"plural": "{0} sekund",
|
||
},
|
||
"minute": "minutę",
|
||
"minutes": {
|
||
"singular": "{0} minut",
|
||
"dual": "{0} minuty",
|
||
"plural": "{0} minut",
|
||
},
|
||
"hour": "godzinę",
|
||
"hours": {
|
||
"singular": "{0} godzin",
|
||
"dual": "{0} godziny",
|
||
"plural": "{0} godzin",
|
||
},
|
||
"day": "dzień",
|
||
"days": "{0} dni",
|
||
"week": "tydzień",
|
||
"weeks": {
|
||
"singular": "{0} tygodni",
|
||
"dual": "{0} tygodnie",
|
||
"plural": "{0} tygodni",
|
||
},
|
||
"month": "miesiąc",
|
||
"months": {
|
||
"singular": "{0} miesięcy",
|
||
"dual": "{0} miesiące",
|
||
"plural": "{0} miesięcy",
|
||
},
|
||
"year": "rok",
|
||
"years": {"singular": "{0} lat", "dual": "{0} lata", "plural": "{0} lat"},
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"styczeń",
|
||
"luty",
|
||
"marzec",
|
||
"kwiecień",
|
||
"maj",
|
||
"czerwiec",
|
||
"lipiec",
|
||
"sierpień",
|
||
"wrzesień",
|
||
"październik",
|
||
"listopad",
|
||
"grudzień",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"sty",
|
||
"lut",
|
||
"mar",
|
||
"kwi",
|
||
"maj",
|
||
"cze",
|
||
"lip",
|
||
"sie",
|
||
"wrz",
|
||
"paź",
|
||
"lis",
|
||
"gru",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"poniedziałek",
|
||
"wtorek",
|
||
"środa",
|
||
"czwartek",
|
||
"piątek",
|
||
"sobota",
|
||
"niedziela",
|
||
]
|
||
day_abbreviations = ["", "Pn", "Wt", "Śr", "Czw", "Pt", "So", "Nd"]
|
||
|
||
|
||
class RussianLocale(SlavicBaseLocale):
|
||
names = ["ru", "ru-ru"]
|
||
|
||
past = "{0} назад"
|
||
future = "через {0}"
|
||
|
||
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
|
||
"now": "сейчас",
|
||
"second": "секунда",
|
||
"seconds": {
|
||
"singular": "{0} секунду",
|
||
"dual": "{0} секунды",
|
||
"plural": "{0} секунд",
|
||
},
|
||
"minute": "минуту",
|
||
"minutes": {
|
||
"singular": "{0} минуту",
|
||
"dual": "{0} минуты",
|
||
"plural": "{0} минут",
|
||
},
|
||
"hour": "час",
|
||
"hours": {"singular": "{0} час", "dual": "{0} часа", "plural": "{0} часов"},
|
||
"day": "день",
|
||
"days": {"singular": "{0} день", "dual": "{0} дня", "plural": "{0} дней"},
|
||
"week": "неделю",
|
||
"weeks": {
|
||
"singular": "{0} неделю",
|
||
"dual": "{0} недели",
|
||
"plural": "{0} недель",
|
||
},
|
||
"month": "месяц",
|
||
"months": {
|
||
"singular": "{0} месяц",
|
||
"dual": "{0} месяца",
|
||
"plural": "{0} месяцев",
|
||
},
|
||
"quarter": "квартал",
|
||
"quarters": {
|
||
"singular": "{0} квартал",
|
||
"dual": "{0} квартала",
|
||
"plural": "{0} кварталов",
|
||
},
|
||
"year": "год",
|
||
"years": {"singular": "{0} год", "dual": "{0} года", "plural": "{0} лет"},
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"января",
|
||
"февраля",
|
||
"марта",
|
||
"апреля",
|
||
"мая",
|
||
"июня",
|
||
"июля",
|
||
"августа",
|
||
"сентября",
|
||
"октября",
|
||
"ноября",
|
||
"декабря",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"янв",
|
||
"фев",
|
||
"мар",
|
||
"апр",
|
||
"май",
|
||
"июн",
|
||
"июл",
|
||
"авг",
|
||
"сен",
|
||
"окт",
|
||
"ноя",
|
||
"дек",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"понедельник",
|
||
"вторник",
|
||
"среда",
|
||
"четверг",
|
||
"пятница",
|
||
"суббота",
|
||
"воскресенье",
|
||
]
|
||
day_abbreviations = ["", "пн", "вт", "ср", "чт", "пт", "сб", "вс"]
|
||
|
||
|
||
class AfrikaansLocale(Locale):
|
||
names = ["af", "af-nl"]
|
||
|
||
past = "{0} gelede"
|
||
future = "in {0}"
|
||
|
||
timeframes = {
|
||
"now": "nou",
|
||
"second": "n sekonde",
|
||
"seconds": "{0} sekondes",
|
||
"minute": "minuut",
|
||
"minutes": "{0} minute",
|
||
"hour": "uur",
|
||
"hours": "{0} ure",
|
||
"day": "een dag",
|
||
"days": "{0} dae",
|
||
"month": "een maand",
|
||
"months": "{0} maande",
|
||
"year": "een jaar",
|
||
"years": "{0} jaar",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"Januarie",
|
||
"Februarie",
|
||
"Maart",
|
||
"April",
|
||
"Mei",
|
||
"Junie",
|
||
"Julie",
|
||
"Augustus",
|
||
"September",
|
||
"Oktober",
|
||
"November",
|
||
"Desember",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"Jan",
|
||
"Feb",
|
||
"Mrt",
|
||
"Apr",
|
||
"Mei",
|
||
"Jun",
|
||
"Jul",
|
||
"Aug",
|
||
"Sep",
|
||
"Okt",
|
||
"Nov",
|
||
"Des",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"Maandag",
|
||
"Dinsdag",
|
||
"Woensdag",
|
||
"Donderdag",
|
||
"Vrydag",
|
||
"Saterdag",
|
||
"Sondag",
|
||
]
|
||
day_abbreviations = ["", "Ma", "Di", "Wo", "Do", "Vr", "Za", "So"]
|
||
|
||
|
||
class BulgarianLocale(SlavicBaseLocale):
|
||
names = ["bg", "bg-bg"]
|
||
|
||
past = "{0} назад"
|
||
future = "напред {0}"
|
||
|
||
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
|
||
"now": "сега",
|
||
"second": "секунда",
|
||
"seconds": "{0} няколко секунди",
|
||
"minute": "минута",
|
||
"minutes": {
|
||
"singular": "{0} минута",
|
||
"dual": "{0} минути",
|
||
"plural": "{0} минути",
|
||
},
|
||
"hour": "час",
|
||
"hours": {"singular": "{0} час", "dual": "{0} часа", "plural": "{0} часа"},
|
||
"day": "ден",
|
||
"days": {"singular": "{0} ден", "dual": "{0} дни", "plural": "{0} дни"},
|
||
"month": "месец",
|
||
"months": {
|
||
"singular": "{0} месец",
|
||
"dual": "{0} месеца",
|
||
"plural": "{0} месеца",
|
||
},
|
||
"year": "година",
|
||
"years": {
|
||
"singular": "{0} година",
|
||
"dual": "{0} години",
|
||
"plural": "{0} години",
|
||
},
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"януари",
|
||
"февруари",
|
||
"март",
|
||
"април",
|
||
"май",
|
||
"юни",
|
||
"юли",
|
||
"август",
|
||
"септември",
|
||
"октомври",
|
||
"ноември",
|
||
"декември",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"ян",
|
||
"февр",
|
||
"март",
|
||
"апр",
|
||
"май",
|
||
"юни",
|
||
"юли",
|
||
"авг",
|
||
"септ",
|
||
"окт",
|
||
"ноем",
|
||
"дек",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"понеделник",
|
||
"вторник",
|
||
"сряда",
|
||
"четвъртък",
|
||
"петък",
|
||
"събота",
|
||
"неделя",
|
||
]
|
||
day_abbreviations = ["", "пон", "вт", "ср", "четв", "пет", "съб", "нед"]
|
||
|
||
|
||
class UkrainianLocale(SlavicBaseLocale):
|
||
names = ["ua", "uk", "uk-ua"]
|
||
|
||
past = "{0} тому"
|
||
future = "за {0}"
|
||
|
||
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
|
||
"now": "зараз",
|
||
"second": "секунда",
|
||
"seconds": "{0} кілька секунд",
|
||
"minute": "хвилину",
|
||
"minutes": {
|
||
"singular": "{0} хвилину",
|
||
"dual": "{0} хвилини",
|
||
"plural": "{0} хвилин",
|
||
},
|
||
"hour": "годину",
|
||
"hours": {
|
||
"singular": "{0} годину",
|
||
"dual": "{0} години",
|
||
"plural": "{0} годин",
|
||
},
|
||
"day": "день",
|
||
"days": {"singular": "{0} день", "dual": "{0} дні", "plural": "{0} днів"},
|
||
"month": "місяць",
|
||
"months": {
|
||
"singular": "{0} місяць",
|
||
"dual": "{0} місяці",
|
||
"plural": "{0} місяців",
|
||
},
|
||
"year": "рік",
|
||
"years": {"singular": "{0} рік", "dual": "{0} роки", "plural": "{0} років"},
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"січня",
|
||
"лютого",
|
||
"березня",
|
||
"квітня",
|
||
"травня",
|
||
"червня",
|
||
"липня",
|
||
"серпня",
|
||
"вересня",
|
||
"жовтня",
|
||
"листопада",
|
||
"грудня",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"січ",
|
||
"лют",
|
||
"бер",
|
||
"квіт",
|
||
"трав",
|
||
"черв",
|
||
"лип",
|
||
"серп",
|
||
"вер",
|
||
"жовт",
|
||
"лист",
|
||
"груд",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"понеділок",
|
||
"вівторок",
|
||
"середа",
|
||
"четвер",
|
||
"п’ятниця",
|
||
"субота",
|
||
"неділя",
|
||
]
|
||
day_abbreviations = ["", "пн", "вт", "ср", "чт", "пт", "сб", "нд"]
|
||
|
||
|
||
class MacedonianLocale(SlavicBaseLocale):
|
||
names = ["mk", "mk-mk"]
|
||
|
||
past = "пред {0}"
|
||
future = "за {0}"
|
||
|
||
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
|
||
"now": "сега",
|
||
"second": "една секунда",
|
||
"seconds": {
|
||
"singular": "{0} секунда",
|
||
"dual": "{0} секунди",
|
||
"plural": "{0} секунди",
|
||
},
|
||
"minute": "една минута",
|
||
"minutes": {
|
||
"singular": "{0} минута",
|
||
"dual": "{0} минути",
|
||
"plural": "{0} минути",
|
||
},
|
||
"hour": "еден саат",
|
||
"hours": {"singular": "{0} саат", "dual": "{0} саати", "plural": "{0} саати"},
|
||
"day": "еден ден",
|
||
"days": {"singular": "{0} ден", "dual": "{0} дена", "plural": "{0} дена"},
|
||
"week": "една недела",
|
||
"weeks": {
|
||
"singular": "{0} недела",
|
||
"dual": "{0} недели",
|
||
"plural": "{0} недели",
|
||
},
|
||
"month": "еден месец",
|
||
"months": {
|
||
"singular": "{0} месец",
|
||
"dual": "{0} месеци",
|
||
"plural": "{0} месеци",
|
||
},
|
||
"year": "една година",
|
||
"years": {
|
||
"singular": "{0} година",
|
||
"dual": "{0} години",
|
||
"plural": "{0} години",
|
||
},
|
||
}
|
||
|
||
meridians = {"am": "дп", "pm": "пп", "AM": "претпладне", "PM": "попладне"}
|
||
|
||
month_names = [
|
||
"",
|
||
"Јануари",
|
||
"Февруари",
|
||
"Март",
|
||
"Април",
|
||
"Мај",
|
||
"Јуни",
|
||
"Јули",
|
||
"Август",
|
||
"Септември",
|
||
"Октомври",
|
||
"Ноември",
|
||
"Декември",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"Јан",
|
||
"Фев",
|
||
"Мар",
|
||
"Апр",
|
||
"Мај",
|
||
"Јун",
|
||
"Јул",
|
||
"Авг",
|
||
"Септ",
|
||
"Окт",
|
||
"Ноем",
|
||
"Декем",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"Понеделник",
|
||
"Вторник",
|
||
"Среда",
|
||
"Четврток",
|
||
"Петок",
|
||
"Сабота",
|
||
"Недела",
|
||
]
|
||
day_abbreviations = [
|
||
"",
|
||
"Пон",
|
||
"Вт",
|
||
"Сре",
|
||
"Чет",
|
||
"Пет",
|
||
"Саб",
|
||
"Нед",
|
||
]
|
||
|
||
|
||
class GermanBaseLocale(Locale):
|
||
past = "vor {0}"
|
||
future = "in {0}"
|
||
and_word = "und"
|
||
|
||
timeframes: ClassVar[Dict[TimeFrameLiteral, str]] = {
|
||
"now": "gerade eben",
|
||
"second": "einer Sekunde",
|
||
"seconds": "{0} Sekunden",
|
||
"minute": "einer Minute",
|
||
"minutes": "{0} Minuten",
|
||
"hour": "einer Stunde",
|
||
"hours": "{0} Stunden",
|
||
"day": "einem Tag",
|
||
"days": "{0} Tagen",
|
||
"week": "einer Woche",
|
||
"weeks": "{0} Wochen",
|
||
"month": "einem Monat",
|
||
"months": "{0} Monaten",
|
||
"year": "einem Jahr",
|
||
"years": "{0} Jahren",
|
||
}
|
||
|
||
timeframes_only_distance = timeframes.copy()
|
||
timeframes_only_distance["second"] = "eine Sekunde"
|
||
timeframes_only_distance["minute"] = "eine Minute"
|
||
timeframes_only_distance["hour"] = "eine Stunde"
|
||
timeframes_only_distance["day"] = "ein Tag"
|
||
timeframes_only_distance["days"] = "{0} Tage"
|
||
timeframes_only_distance["week"] = "eine Woche"
|
||
timeframes_only_distance["month"] = "ein Monat"
|
||
timeframes_only_distance["months"] = "{0} Monate"
|
||
timeframes_only_distance["year"] = "ein Jahr"
|
||
timeframes_only_distance["years"] = "{0} Jahre"
|
||
|
||
month_names = [
|
||
"",
|
||
"Januar",
|
||
"Februar",
|
||
"März",
|
||
"April",
|
||
"Mai",
|
||
"Juni",
|
||
"Juli",
|
||
"August",
|
||
"September",
|
||
"Oktober",
|
||
"November",
|
||
"Dezember",
|
||
]
|
||
|
||
month_abbreviations = [
|
||
"",
|
||
"Jan",
|
||
"Feb",
|
||
"Mär",
|
||
"Apr",
|
||
"Mai",
|
||
"Jun",
|
||
"Jul",
|
||
"Aug",
|
||
"Sep",
|
||
"Okt",
|
||
"Nov",
|
||
"Dez",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"Montag",
|
||
"Dienstag",
|
||
"Mittwoch",
|
||
"Donnerstag",
|
||
"Freitag",
|
||
"Samstag",
|
||
"Sonntag",
|
||
]
|
||
|
||
day_abbreviations = ["", "Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"]
|
||
|
||
def _ordinal_number(self, n: int) -> str:
|
||
return f"{n}."
|
||
|
||
def describe(
|
||
self,
|
||
timeframe: TimeFrameLiteral,
|
||
delta: Union[int, float] = 0,
|
||
only_distance: bool = False,
|
||
) -> str:
|
||
"""Describes a delta within a timeframe in plain language.
|
||
|
||
:param timeframe: a string representing a timeframe.
|
||
:param delta: a quantity representing a delta in a timeframe.
|
||
:param only_distance: return only distance eg: "11 seconds" without "in" or "ago" keywords
|
||
"""
|
||
|
||
if not only_distance:
|
||
return super().describe(timeframe, delta, only_distance)
|
||
|
||
# German uses a different case without 'in' or 'ago'
|
||
humanized: str = self.timeframes_only_distance[timeframe].format(
|
||
trunc(abs(delta))
|
||
)
|
||
|
||
return humanized
|
||
|
||
|
||
class GermanLocale(GermanBaseLocale, Locale):
|
||
names = ["de", "de-de"]
|
||
|
||
|
||
class SwissLocale(GermanBaseLocale, Locale):
|
||
names = ["de-ch"]
|
||
|
||
|
||
class AustrianLocale(GermanBaseLocale, Locale):
|
||
names = ["de-at"]
|
||
|
||
month_names = [
|
||
"",
|
||
"Jänner",
|
||
"Februar",
|
||
"März",
|
||
"April",
|
||
"Mai",
|
||
"Juni",
|
||
"Juli",
|
||
"August",
|
||
"September",
|
||
"Oktober",
|
||
"November",
|
||
"Dezember",
|
||
]
|
||
|
||
|
||
class NorwegianLocale(Locale):
|
||
names = ["nb", "nb-no"]
|
||
|
||
past = "for {0} siden"
|
||
future = "om {0}"
|
||
|
||
timeframes = {
|
||
"now": "nå nettopp",
|
||
"second": "ett sekund",
|
||
"seconds": "{0} sekunder",
|
||
"minute": "ett minutt",
|
||
"minutes": "{0} minutter",
|
||
"hour": "en time",
|
||
"hours": "{0} timer",
|
||
"day": "en dag",
|
||
"days": "{0} dager",
|
||
"week": "en uke",
|
||
"weeks": "{0} uker",
|
||
"month": "en måned",
|
||
"months": "{0} måneder",
|
||
"year": "ett år",
|
||
"years": "{0} år",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"januar",
|
||
"februar",
|
||
"mars",
|
||
"april",
|
||
"mai",
|
||
"juni",
|
||
"juli",
|
||
"august",
|
||
"september",
|
||
"oktober",
|
||
"november",
|
||
"desember",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"jan",
|
||
"feb",
|
||
"mar",
|
||
"apr",
|
||
"mai",
|
||
"jun",
|
||
"jul",
|
||
"aug",
|
||
"sep",
|
||
"okt",
|
||
"nov",
|
||
"des",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"mandag",
|
||
"tirsdag",
|
||
"onsdag",
|
||
"torsdag",
|
||
"fredag",
|
||
"lørdag",
|
||
"søndag",
|
||
]
|
||
day_abbreviations = ["", "ma", "ti", "on", "to", "fr", "lø", "sø"]
|
||
|
||
def _ordinal_number(self, n: int) -> str:
|
||
return f"{n}."
|
||
|
||
|
||
class NewNorwegianLocale(Locale):
|
||
names = ["nn", "nn-no"]
|
||
|
||
past = "for {0} sidan"
|
||
future = "om {0}"
|
||
|
||
timeframes = {
|
||
"now": "no nettopp",
|
||
"second": "eitt sekund",
|
||
"seconds": "{0} sekund",
|
||
"minute": "eitt minutt",
|
||
"minutes": "{0} minutt",
|
||
"hour": "ein time",
|
||
"hours": "{0} timar",
|
||
"day": "ein dag",
|
||
"days": "{0} dagar",
|
||
"week": "ei veke",
|
||
"weeks": "{0} veker",
|
||
"month": "ein månad",
|
||
"months": "{0} månader",
|
||
"year": "eitt år",
|
||
"years": "{0} år",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"januar",
|
||
"februar",
|
||
"mars",
|
||
"april",
|
||
"mai",
|
||
"juni",
|
||
"juli",
|
||
"august",
|
||
"september",
|
||
"oktober",
|
||
"november",
|
||
"desember",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"jan",
|
||
"feb",
|
||
"mar",
|
||
"apr",
|
||
"mai",
|
||
"jun",
|
||
"jul",
|
||
"aug",
|
||
"sep",
|
||
"okt",
|
||
"nov",
|
||
"des",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"måndag",
|
||
"tysdag",
|
||
"onsdag",
|
||
"torsdag",
|
||
"fredag",
|
||
"laurdag",
|
||
"sundag",
|
||
]
|
||
day_abbreviations = ["", "må", "ty", "on", "to", "fr", "la", "su"]
|
||
|
||
def _ordinal_number(self, n: int) -> str:
|
||
return f"{n}."
|
||
|
||
|
||
class PortugueseLocale(Locale):
|
||
names = ["pt", "pt-pt"]
|
||
|
||
past = "há {0}"
|
||
future = "em {0}"
|
||
and_word = "e"
|
||
|
||
timeframes = {
|
||
"now": "agora",
|
||
"second": "um segundo",
|
||
"seconds": "{0} segundos",
|
||
"minute": "um minuto",
|
||
"minutes": "{0} minutos",
|
||
"hour": "uma hora",
|
||
"hours": "{0} horas",
|
||
"day": "um dia",
|
||
"days": "{0} dias",
|
||
"week": "uma semana",
|
||
"weeks": "{0} semanas",
|
||
"month": "um mês",
|
||
"months": "{0} meses",
|
||
"year": "um ano",
|
||
"years": "{0} anos",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"Janeiro",
|
||
"Fevereiro",
|
||
"Março",
|
||
"Abril",
|
||
"Maio",
|
||
"Junho",
|
||
"Julho",
|
||
"Agosto",
|
||
"Setembro",
|
||
"Outubro",
|
||
"Novembro",
|
||
"Dezembro",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"Jan",
|
||
"Fev",
|
||
"Mar",
|
||
"Abr",
|
||
"Mai",
|
||
"Jun",
|
||
"Jul",
|
||
"Ago",
|
||
"Set",
|
||
"Out",
|
||
"Nov",
|
||
"Dez",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"Segunda-feira",
|
||
"Terça-feira",
|
||
"Quarta-feira",
|
||
"Quinta-feira",
|
||
"Sexta-feira",
|
||
"Sábado",
|
||
"Domingo",
|
||
]
|
||
day_abbreviations = ["", "Seg", "Ter", "Qua", "Qui", "Sex", "Sab", "Dom"]
|
||
|
||
|
||
class BrazilianPortugueseLocale(PortugueseLocale):
|
||
names = ["pt-br"]
|
||
|
||
past = "faz {0}"
|
||
|
||
|
||
class TagalogLocale(Locale):
|
||
names = ["tl", "tl-ph"]
|
||
|
||
past = "nakaraang {0}"
|
||
future = "{0} mula ngayon"
|
||
|
||
timeframes = {
|
||
"now": "ngayon lang",
|
||
"second": "isang segundo",
|
||
"seconds": "{0} segundo",
|
||
"minute": "isang minuto",
|
||
"minutes": "{0} minuto",
|
||
"hour": "isang oras",
|
||
"hours": "{0} oras",
|
||
"day": "isang araw",
|
||
"days": "{0} araw",
|
||
"week": "isang linggo",
|
||
"weeks": "{0} linggo",
|
||
"month": "isang buwan",
|
||
"months": "{0} buwan",
|
||
"year": "isang taon",
|
||
"years": "{0} taon",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"Enero",
|
||
"Pebrero",
|
||
"Marso",
|
||
"Abril",
|
||
"Mayo",
|
||
"Hunyo",
|
||
"Hulyo",
|
||
"Agosto",
|
||
"Setyembre",
|
||
"Oktubre",
|
||
"Nobyembre",
|
||
"Disyembre",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"Ene",
|
||
"Peb",
|
||
"Mar",
|
||
"Abr",
|
||
"May",
|
||
"Hun",
|
||
"Hul",
|
||
"Ago",
|
||
"Set",
|
||
"Okt",
|
||
"Nob",
|
||
"Dis",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"Lunes",
|
||
"Martes",
|
||
"Miyerkules",
|
||
"Huwebes",
|
||
"Biyernes",
|
||
"Sabado",
|
||
"Linggo",
|
||
]
|
||
day_abbreviations = ["", "Lun", "Mar", "Miy", "Huw", "Biy", "Sab", "Lin"]
|
||
|
||
meridians = {"am": "nu", "pm": "nh", "AM": "ng umaga", "PM": "ng hapon"}
|
||
|
||
def _ordinal_number(self, n: int) -> str:
|
||
return f"ika-{n}"
|
||
|
||
|
||
class VietnameseLocale(Locale):
|
||
names = ["vi", "vi-vn"]
|
||
|
||
past = "{0} trước"
|
||
future = "{0} nữa"
|
||
|
||
timeframes = {
|
||
"now": "hiện tại",
|
||
"second": "một giây",
|
||
"seconds": "{0} giây",
|
||
"minute": "một phút",
|
||
"minutes": "{0} phút",
|
||
"hour": "một giờ",
|
||
"hours": "{0} giờ",
|
||
"day": "một ngày",
|
||
"days": "{0} ngày",
|
||
"week": "một tuần",
|
||
"weeks": "{0} tuần",
|
||
"month": "một tháng",
|
||
"months": "{0} tháng",
|
||
"year": "một năm",
|
||
"years": "{0} năm",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"Tháng Một",
|
||
"Tháng Hai",
|
||
"Tháng Ba",
|
||
"Tháng Tư",
|
||
"Tháng Năm",
|
||
"Tháng Sáu",
|
||
"Tháng Bảy",
|
||
"Tháng Tám",
|
||
"Tháng Chín",
|
||
"Tháng Mười",
|
||
"Tháng Mười Một",
|
||
"Tháng Mười Hai",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"Tháng 1",
|
||
"Tháng 2",
|
||
"Tháng 3",
|
||
"Tháng 4",
|
||
"Tháng 5",
|
||
"Tháng 6",
|
||
"Tháng 7",
|
||
"Tháng 8",
|
||
"Tháng 9",
|
||
"Tháng 10",
|
||
"Tháng 11",
|
||
"Tháng 12",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"Thứ Hai",
|
||
"Thứ Ba",
|
||
"Thứ Tư",
|
||
"Thứ Năm",
|
||
"Thứ Sáu",
|
||
"Thứ Bảy",
|
||
"Chủ Nhật",
|
||
]
|
||
day_abbreviations = ["", "Thứ 2", "Thứ 3", "Thứ 4", "Thứ 5", "Thứ 6", "Thứ 7", "CN"]
|
||
|
||
|
||
class TurkishLocale(Locale):
|
||
names = ["tr", "tr-tr"]
|
||
|
||
past = "{0} önce"
|
||
future = "{0} sonra"
|
||
and_word = "ve"
|
||
|
||
timeframes = {
|
||
"now": "şimdi",
|
||
"second": "bir saniye",
|
||
"seconds": "{0} saniye",
|
||
"minute": "bir dakika",
|
||
"minutes": "{0} dakika",
|
||
"hour": "bir saat",
|
||
"hours": "{0} saat",
|
||
"day": "bir gün",
|
||
"days": "{0} gün",
|
||
"week": "bir hafta",
|
||
"weeks": "{0} hafta",
|
||
"month": "bir ay",
|
||
"months": "{0} ay",
|
||
"year": "bir yıl",
|
||
"years": "{0} yıl",
|
||
}
|
||
|
||
meridians = {"am": "öö", "pm": "ös", "AM": "ÖÖ", "PM": "ÖS"}
|
||
|
||
month_names = [
|
||
"",
|
||
"Ocak",
|
||
"Şubat",
|
||
"Mart",
|
||
"Nisan",
|
||
"Mayıs",
|
||
"Haziran",
|
||
"Temmuz",
|
||
"Ağustos",
|
||
"Eylül",
|
||
"Ekim",
|
||
"Kasım",
|
||
"Aralık",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"Oca",
|
||
"Şub",
|
||
"Mar",
|
||
"Nis",
|
||
"May",
|
||
"Haz",
|
||
"Tem",
|
||
"Ağu",
|
||
"Eyl",
|
||
"Eki",
|
||
"Kas",
|
||
"Ara",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"Pazartesi",
|
||
"Salı",
|
||
"Çarşamba",
|
||
"Perşembe",
|
||
"Cuma",
|
||
"Cumartesi",
|
||
"Pazar",
|
||
]
|
||
day_abbreviations = ["", "Pzt", "Sal", "Çar", "Per", "Cum", "Cmt", "Paz"]
|
||
|
||
|
||
class AzerbaijaniLocale(Locale):
|
||
names = ["az", "az-az"]
|
||
|
||
past = "{0} əvvəl"
|
||
future = "{0} sonra"
|
||
|
||
timeframes = {
|
||
"now": "indi",
|
||
"second": "bir saniyə",
|
||
"seconds": "{0} saniyə",
|
||
"minute": "bir dəqiqə",
|
||
"minutes": "{0} dəqiqə",
|
||
"hour": "bir saat",
|
||
"hours": "{0} saat",
|
||
"day": "bir gün",
|
||
"days": "{0} gün",
|
||
"week": "bir həftə",
|
||
"weeks": "{0} həftə",
|
||
"month": "bir ay",
|
||
"months": "{0} ay",
|
||
"year": "bir il",
|
||
"years": "{0} il",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"Yanvar",
|
||
"Fevral",
|
||
"Mart",
|
||
"Aprel",
|
||
"May",
|
||
"İyun",
|
||
"İyul",
|
||
"Avqust",
|
||
"Sentyabr",
|
||
"Oktyabr",
|
||
"Noyabr",
|
||
"Dekabr",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"Yan",
|
||
"Fev",
|
||
"Mar",
|
||
"Apr",
|
||
"May",
|
||
"İyn",
|
||
"İyl",
|
||
"Avq",
|
||
"Sen",
|
||
"Okt",
|
||
"Noy",
|
||
"Dek",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"Bazar ertəsi",
|
||
"Çərşənbə axşamı",
|
||
"Çərşənbə",
|
||
"Cümə axşamı",
|
||
"Cümə",
|
||
"Şənbə",
|
||
"Bazar",
|
||
]
|
||
day_abbreviations = ["", "Ber", "Çax", "Çər", "Cax", "Cüm", "Şnb", "Bzr"]
|
||
|
||
|
||
class ArabicLocale(Locale):
|
||
names = [
|
||
"ar",
|
||
"ar-ae",
|
||
"ar-bh",
|
||
"ar-dj",
|
||
"ar-eg",
|
||
"ar-eh",
|
||
"ar-er",
|
||
"ar-km",
|
||
"ar-kw",
|
||
"ar-ly",
|
||
"ar-om",
|
||
"ar-qa",
|
||
"ar-sa",
|
||
"ar-sd",
|
||
"ar-so",
|
||
"ar-ss",
|
||
"ar-td",
|
||
"ar-ye",
|
||
]
|
||
|
||
past = "منذ {0}"
|
||
future = "خلال {0}"
|
||
|
||
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
|
||
"now": "الآن",
|
||
"second": "ثانية",
|
||
"seconds": {"2": "ثانيتين", "ten": "{0} ثوان", "higher": "{0} ثانية"},
|
||
"minute": "دقيقة",
|
||
"minutes": {"2": "دقيقتين", "ten": "{0} دقائق", "higher": "{0} دقيقة"},
|
||
"hour": "ساعة",
|
||
"hours": {"2": "ساعتين", "ten": "{0} ساعات", "higher": "{0} ساعة"},
|
||
"day": "يوم",
|
||
"days": {"2": "يومين", "ten": "{0} أيام", "higher": "{0} يوم"},
|
||
"week": "اسبوع",
|
||
"weeks": {"2": "اسبوعين", "ten": "{0} أسابيع", "higher": "{0} اسبوع"},
|
||
"month": "شهر",
|
||
"months": {"2": "شهرين", "ten": "{0} أشهر", "higher": "{0} شهر"},
|
||
"year": "سنة",
|
||
"years": {"2": "سنتين", "ten": "{0} سنوات", "higher": "{0} سنة"},
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"يناير",
|
||
"فبراير",
|
||
"مارس",
|
||
"أبريل",
|
||
"مايو",
|
||
"يونيو",
|
||
"يوليو",
|
||
"أغسطس",
|
||
"سبتمبر",
|
||
"أكتوبر",
|
||
"نوفمبر",
|
||
"ديسمبر",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"يناير",
|
||
"فبراير",
|
||
"مارس",
|
||
"أبريل",
|
||
"مايو",
|
||
"يونيو",
|
||
"يوليو",
|
||
"أغسطس",
|
||
"سبتمبر",
|
||
"أكتوبر",
|
||
"نوفمبر",
|
||
"ديسمبر",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"الإثنين",
|
||
"الثلاثاء",
|
||
"الأربعاء",
|
||
"الخميس",
|
||
"الجمعة",
|
||
"السبت",
|
||
"الأحد",
|
||
]
|
||
day_abbreviations = ["", "إثنين", "ثلاثاء", "أربعاء", "خميس", "جمعة", "سبت", "أحد"]
|
||
|
||
def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str:
|
||
form = self.timeframes[timeframe]
|
||
delta = abs(delta)
|
||
if isinstance(form, Mapping):
|
||
if delta == 2:
|
||
form = form["2"]
|
||
elif 2 < delta <= 10:
|
||
form = form["ten"]
|
||
else:
|
||
form = form["higher"]
|
||
|
||
return form.format(delta)
|
||
|
||
|
||
class LevantArabicLocale(ArabicLocale):
|
||
names = ["ar-iq", "ar-jo", "ar-lb", "ar-ps", "ar-sy"]
|
||
month_names = [
|
||
"",
|
||
"كانون الثاني",
|
||
"شباط",
|
||
"آذار",
|
||
"نيسان",
|
||
"أيار",
|
||
"حزيران",
|
||
"تموز",
|
||
"آب",
|
||
"أيلول",
|
||
"تشرين الأول",
|
||
"تشرين الثاني",
|
||
"كانون الأول",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"كانون الثاني",
|
||
"شباط",
|
||
"آذار",
|
||
"نيسان",
|
||
"أيار",
|
||
"حزيران",
|
||
"تموز",
|
||
"آب",
|
||
"أيلول",
|
||
"تشرين الأول",
|
||
"تشرين الثاني",
|
||
"كانون الأول",
|
||
]
|
||
|
||
|
||
class AlgeriaTunisiaArabicLocale(ArabicLocale):
|
||
names = ["ar-tn", "ar-dz"]
|
||
month_names = [
|
||
"",
|
||
"جانفي",
|
||
"فيفري",
|
||
"مارس",
|
||
"أفريل",
|
||
"ماي",
|
||
"جوان",
|
||
"جويلية",
|
||
"أوت",
|
||
"سبتمبر",
|
||
"أكتوبر",
|
||
"نوفمبر",
|
||
"ديسمبر",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"جانفي",
|
||
"فيفري",
|
||
"مارس",
|
||
"أفريل",
|
||
"ماي",
|
||
"جوان",
|
||
"جويلية",
|
||
"أوت",
|
||
"سبتمبر",
|
||
"أكتوبر",
|
||
"نوفمبر",
|
||
"ديسمبر",
|
||
]
|
||
|
||
|
||
class MauritaniaArabicLocale(ArabicLocale):
|
||
names = ["ar-mr"]
|
||
month_names = [
|
||
"",
|
||
"يناير",
|
||
"فبراير",
|
||
"مارس",
|
||
"إبريل",
|
||
"مايو",
|
||
"يونيو",
|
||
"يوليو",
|
||
"أغشت",
|
||
"شتمبر",
|
||
"أكتوبر",
|
||
"نوفمبر",
|
||
"دجمبر",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"يناير",
|
||
"فبراير",
|
||
"مارس",
|
||
"إبريل",
|
||
"مايو",
|
||
"يونيو",
|
||
"يوليو",
|
||
"أغشت",
|
||
"شتمبر",
|
||
"أكتوبر",
|
||
"نوفمبر",
|
||
"دجمبر",
|
||
]
|
||
|
||
|
||
class MoroccoArabicLocale(ArabicLocale):
|
||
names = ["ar-ma"]
|
||
month_names = [
|
||
"",
|
||
"يناير",
|
||
"فبراير",
|
||
"مارس",
|
||
"أبريل",
|
||
"ماي",
|
||
"يونيو",
|
||
"يوليوز",
|
||
"غشت",
|
||
"شتنبر",
|
||
"أكتوبر",
|
||
"نونبر",
|
||
"دجنبر",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"يناير",
|
||
"فبراير",
|
||
"مارس",
|
||
"أبريل",
|
||
"ماي",
|
||
"يونيو",
|
||
"يوليوز",
|
||
"غشت",
|
||
"شتنبر",
|
||
"أكتوبر",
|
||
"نونبر",
|
||
"دجنبر",
|
||
]
|
||
|
||
|
||
class IcelandicLocale(Locale):
|
||
def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str:
|
||
form = self.timeframes[timeframe]
|
||
|
||
if isinstance(form, Mapping):
|
||
if delta < 0:
|
||
form = form["past"]
|
||
elif delta > 0:
|
||
form = form["future"]
|
||
else:
|
||
raise ValueError(
|
||
"Icelandic Locale does not support units with a delta of zero. "
|
||
"Please consider making a contribution to fix this issue."
|
||
)
|
||
# FIXME: handle when delta is 0
|
||
|
||
return form.format(abs(delta))
|
||
|
||
names = ["is", "is-is"]
|
||
|
||
past = "fyrir {0} síðan"
|
||
future = "eftir {0}"
|
||
|
||
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
|
||
"now": "rétt í þessu",
|
||
"second": {"past": "sekúndu", "future": "sekúndu"},
|
||
"seconds": {"past": "{0} nokkrum sekúndum", "future": "nokkrar sekúndur"},
|
||
"minute": {"past": "einni mínútu", "future": "eina mínútu"},
|
||
"minutes": {"past": "{0} mínútum", "future": "{0} mínútur"},
|
||
"hour": {"past": "einum tíma", "future": "einn tíma"},
|
||
"hours": {"past": "{0} tímum", "future": "{0} tíma"},
|
||
"day": {"past": "einum degi", "future": "einn dag"},
|
||
"days": {"past": "{0} dögum", "future": "{0} daga"},
|
||
"month": {"past": "einum mánuði", "future": "einn mánuð"},
|
||
"months": {"past": "{0} mánuðum", "future": "{0} mánuði"},
|
||
"year": {"past": "einu ári", "future": "eitt ár"},
|
||
"years": {"past": "{0} árum", "future": "{0} ár"},
|
||
}
|
||
|
||
meridians = {"am": "f.h.", "pm": "e.h.", "AM": "f.h.", "PM": "e.h."}
|
||
|
||
month_names = [
|
||
"",
|
||
"janúar",
|
||
"febrúar",
|
||
"mars",
|
||
"apríl",
|
||
"maí",
|
||
"júní",
|
||
"júlí",
|
||
"ágúst",
|
||
"september",
|
||
"október",
|
||
"nóvember",
|
||
"desember",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"jan",
|
||
"feb",
|
||
"mar",
|
||
"apr",
|
||
"maí",
|
||
"jún",
|
||
"júl",
|
||
"ágú",
|
||
"sep",
|
||
"okt",
|
||
"nóv",
|
||
"des",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"mánudagur",
|
||
"þriðjudagur",
|
||
"miðvikudagur",
|
||
"fimmtudagur",
|
||
"föstudagur",
|
||
"laugardagur",
|
||
"sunnudagur",
|
||
]
|
||
day_abbreviations = ["", "mán", "þri", "mið", "fim", "fös", "lau", "sun"]
|
||
|
||
|
||
class DanishLocale(Locale):
|
||
names = ["da", "da-dk"]
|
||
|
||
past = "for {0} siden"
|
||
future = "om {0}"
|
||
and_word = "og"
|
||
|
||
timeframes = {
|
||
"now": "lige nu",
|
||
"second": "et sekund",
|
||
"seconds": "{0} sekunder",
|
||
"minute": "et minut",
|
||
"minutes": "{0} minutter",
|
||
"hour": "en time",
|
||
"hours": "{0} timer",
|
||
"day": "en dag",
|
||
"days": "{0} dage",
|
||
"week": "en uge",
|
||
"weeks": "{0} uger",
|
||
"month": "en måned",
|
||
"months": "{0} måneder",
|
||
"year": "et år",
|
||
"years": "{0} år",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"januar",
|
||
"februar",
|
||
"marts",
|
||
"april",
|
||
"maj",
|
||
"juni",
|
||
"juli",
|
||
"august",
|
||
"september",
|
||
"oktober",
|
||
"november",
|
||
"december",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"jan",
|
||
"feb",
|
||
"mar",
|
||
"apr",
|
||
"maj",
|
||
"jun",
|
||
"jul",
|
||
"aug",
|
||
"sep",
|
||
"okt",
|
||
"nov",
|
||
"dec",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"mandag",
|
||
"tirsdag",
|
||
"onsdag",
|
||
"torsdag",
|
||
"fredag",
|
||
"lørdag",
|
||
"søndag",
|
||
]
|
||
day_abbreviations = ["", "man", "tir", "ons", "tor", "fre", "lør", "søn"]
|
||
|
||
def _ordinal_number(self, n: int) -> str:
|
||
return f"{n}."
|
||
|
||
|
||
class MalayalamLocale(Locale):
|
||
names = ["ml"]
|
||
|
||
past = "{0} മുമ്പ്"
|
||
future = "{0} ശേഷം"
|
||
|
||
timeframes = {
|
||
"now": "ഇപ്പോൾ",
|
||
"second": "ഒരു നിമിഷം",
|
||
"seconds": "{0} സെക്കന്റ്",
|
||
"minute": "ഒരു മിനിറ്റ്",
|
||
"minutes": "{0} മിനിറ്റ്",
|
||
"hour": "ഒരു മണിക്കൂർ",
|
||
"hours": "{0} മണിക്കൂർ",
|
||
"day": "ഒരു ദിവസം ",
|
||
"days": "{0} ദിവസം ",
|
||
"month": "ഒരു മാസം ",
|
||
"months": "{0} മാസം ",
|
||
"year": "ഒരു വർഷം ",
|
||
"years": "{0} വർഷം ",
|
||
}
|
||
|
||
meridians = {
|
||
"am": "രാവിലെ",
|
||
"pm": "ഉച്ചക്ക് ശേഷം",
|
||
"AM": "രാവിലെ",
|
||
"PM": "ഉച്ചക്ക് ശേഷം",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"ജനുവരി",
|
||
"ഫെബ്രുവരി",
|
||
"മാർച്ച്",
|
||
"ഏപ്രിൽ ",
|
||
"മെയ് ",
|
||
"ജൂണ്",
|
||
"ജൂലൈ",
|
||
"ഓഗസ്റ്റ്",
|
||
"സെപ്റ്റംബർ",
|
||
"ഒക്ടോബർ",
|
||
"നവംബർ",
|
||
"ഡിസംബർ",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"ജനു",
|
||
"ഫെബ് ",
|
||
"മാർ",
|
||
"ഏപ്രിൽ",
|
||
"മേയ്",
|
||
"ജൂണ്",
|
||
"ജൂലൈ",
|
||
"ഓഗസ്റ",
|
||
"സെപ്റ്റ",
|
||
"ഒക്ടോ",
|
||
"നവം",
|
||
"ഡിസം",
|
||
]
|
||
|
||
day_names = ["", "തിങ്കള്", "ചൊവ്വ", "ബുധന്", "വ്യാഴം", "വെള്ളി", "ശനി", "ഞായര്"]
|
||
day_abbreviations = [
|
||
"",
|
||
"തിങ്കള്",
|
||
"ചൊവ്വ",
|
||
"ബുധന്",
|
||
"വ്യാഴം",
|
||
"വെള്ളി",
|
||
"ശനി",
|
||
"ഞായര്",
|
||
]
|
||
|
||
|
||
class HindiLocale(Locale):
|
||
names = ["hi", "hi-in"]
|
||
|
||
past = "{0} पहले"
|
||
future = "{0} बाद"
|
||
|
||
timeframes = {
|
||
"now": "अभी",
|
||
"second": "एक पल",
|
||
"seconds": "{0} सेकंड्",
|
||
"minute": "एक मिनट ",
|
||
"minutes": "{0} मिनट ",
|
||
"hour": "एक घंटा",
|
||
"hours": "{0} घंटे",
|
||
"day": "एक दिन",
|
||
"days": "{0} दिन",
|
||
"month": "एक माह ",
|
||
"months": "{0} महीने ",
|
||
"year": "एक वर्ष ",
|
||
"years": "{0} साल ",
|
||
}
|
||
|
||
meridians = {"am": "सुबह", "pm": "शाम", "AM": "सुबह", "PM": "शाम"}
|
||
|
||
month_names = [
|
||
"",
|
||
"जनवरी",
|
||
"फरवरी",
|
||
"मार्च",
|
||
"अप्रैल ",
|
||
"मई",
|
||
"जून",
|
||
"जुलाई",
|
||
"अगस्त",
|
||
"सितंबर",
|
||
"अक्टूबर",
|
||
"नवंबर",
|
||
"दिसंबर",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"जन",
|
||
"फ़र",
|
||
"मार्च",
|
||
"अप्रै",
|
||
"मई",
|
||
"जून",
|
||
"जुलाई",
|
||
"आग",
|
||
"सित",
|
||
"अकत",
|
||
"नवे",
|
||
"दिस",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"सोमवार",
|
||
"मंगलवार",
|
||
"बुधवार",
|
||
"गुरुवार",
|
||
"शुक्रवार",
|
||
"शनिवार",
|
||
"रविवार",
|
||
]
|
||
day_abbreviations = ["", "सोम", "मंगल", "बुध", "गुरुवार", "शुक्र", "शनि", "रवि"]
|
||
|
||
|
||
class CzechLocale(Locale):
|
||
names = ["cs", "cs-cz"]
|
||
|
||
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
|
||
"now": "Teď",
|
||
"second": {"past": "vteřina", "future": "vteřina"},
|
||
"seconds": {
|
||
"zero": "vteřina",
|
||
"past": "{0} sekundami",
|
||
"future-singular": "{0} sekundy",
|
||
"future-paucal": "{0} sekund",
|
||
},
|
||
"minute": {"past": "minutou", "future": "minutu"},
|
||
"minutes": {
|
||
"zero": "{0} minut",
|
||
"past": "{0} minutami",
|
||
"future-singular": "{0} minuty",
|
||
"future-paucal": "{0} minut",
|
||
},
|
||
"hour": {"past": "hodinou", "future": "hodinu"},
|
||
"hours": {
|
||
"zero": "{0} hodin",
|
||
"past": "{0} hodinami",
|
||
"future-singular": "{0} hodiny",
|
||
"future-paucal": "{0} hodin",
|
||
},
|
||
"day": {"past": "dnem", "future": "den"},
|
||
"days": {
|
||
"zero": "{0} dnů",
|
||
"past": "{0} dny",
|
||
"future-singular": "{0} dny",
|
||
"future-paucal": "{0} dnů",
|
||
},
|
||
"week": {"past": "týdnem", "future": "týden"},
|
||
"weeks": {
|
||
"zero": "{0} týdnů",
|
||
"past": "{0} týdny",
|
||
"future-singular": "{0} týdny",
|
||
"future-paucal": "{0} týdnů",
|
||
},
|
||
"month": {"past": "měsícem", "future": "měsíc"},
|
||
"months": {
|
||
"zero": "{0} měsíců",
|
||
"past": "{0} měsíci",
|
||
"future-singular": "{0} měsíce",
|
||
"future-paucal": "{0} měsíců",
|
||
},
|
||
"year": {"past": "rokem", "future": "rok"},
|
||
"years": {
|
||
"zero": "{0} let",
|
||
"past": "{0} lety",
|
||
"future-singular": "{0} roky",
|
||
"future-paucal": "{0} let",
|
||
},
|
||
}
|
||
|
||
past = "Před {0}"
|
||
future = "Za {0}"
|
||
|
||
month_names = [
|
||
"",
|
||
"leden",
|
||
"únor",
|
||
"březen",
|
||
"duben",
|
||
"květen",
|
||
"červen",
|
||
"červenec",
|
||
"srpen",
|
||
"září",
|
||
"říjen",
|
||
"listopad",
|
||
"prosinec",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"led",
|
||
"úno",
|
||
"bře",
|
||
"dub",
|
||
"kvě",
|
||
"čvn",
|
||
"čvc",
|
||
"srp",
|
||
"zář",
|
||
"říj",
|
||
"lis",
|
||
"pro",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"pondělí",
|
||
"úterý",
|
||
"středa",
|
||
"čtvrtek",
|
||
"pátek",
|
||
"sobota",
|
||
"neděle",
|
||
]
|
||
day_abbreviations = ["", "po", "út", "st", "čt", "pá", "so", "ne"]
|
||
|
||
def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str:
|
||
"""Czech aware time frame format function, takes into account
|
||
the differences between past and future forms."""
|
||
abs_delta = abs(delta)
|
||
form = self.timeframes[timeframe]
|
||
|
||
if isinstance(form, str):
|
||
return form.format(abs_delta)
|
||
|
||
if delta == 0:
|
||
key = "zero" # And *never* use 0 in the singular!
|
||
elif delta < 0:
|
||
key = "past"
|
||
else:
|
||
# Needed since both regular future and future-singular and future-paucal cases
|
||
if "future-singular" not in form:
|
||
key = "future"
|
||
elif 2 <= abs_delta % 10 <= 4 and (
|
||
abs_delta % 100 < 10 or abs_delta % 100 >= 20
|
||
):
|
||
key = "future-singular"
|
||
else:
|
||
key = "future-paucal"
|
||
|
||
form: str = form[key]
|
||
return form.format(abs_delta)
|
||
|
||
|
||
class SlovakLocale(Locale):
|
||
names = ["sk", "sk-sk"]
|
||
|
||
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
|
||
"now": "Teraz",
|
||
"second": {"past": "sekundou", "future": "sekundu"},
|
||
"seconds": {
|
||
"zero": "{0} sekúnd",
|
||
"past": "{0} sekundami",
|
||
"future-singular": "{0} sekundy",
|
||
"future-paucal": "{0} sekúnd",
|
||
},
|
||
"minute": {"past": "minútou", "future": "minútu"},
|
||
"minutes": {
|
||
"zero": "{0} minút",
|
||
"past": "{0} minútami",
|
||
"future-singular": "{0} minúty",
|
||
"future-paucal": "{0} minút",
|
||
},
|
||
"hour": {"past": "hodinou", "future": "hodinu"},
|
||
"hours": {
|
||
"zero": "{0} hodín",
|
||
"past": "{0} hodinami",
|
||
"future-singular": "{0} hodiny",
|
||
"future-paucal": "{0} hodín",
|
||
},
|
||
"day": {"past": "dňom", "future": "deň"},
|
||
"days": {
|
||
"zero": "{0} dní",
|
||
"past": "{0} dňami",
|
||
"future-singular": "{0} dni",
|
||
"future-paucal": "{0} dní",
|
||
},
|
||
"week": {"past": "týždňom", "future": "týždeň"},
|
||
"weeks": {
|
||
"zero": "{0} týždňov",
|
||
"past": "{0} týždňami",
|
||
"future-singular": "{0} týždne",
|
||
"future-paucal": "{0} týždňov",
|
||
},
|
||
"month": {"past": "mesiacom", "future": "mesiac"},
|
||
"months": {
|
||
"zero": "{0} mesiacov",
|
||
"past": "{0} mesiacmi",
|
||
"future-singular": "{0} mesiace",
|
||
"future-paucal": "{0} mesiacov",
|
||
},
|
||
"year": {"past": "rokom", "future": "rok"},
|
||
"years": {
|
||
"zero": "{0} rokov",
|
||
"past": "{0} rokmi",
|
||
"future-singular": "{0} roky",
|
||
"future-paucal": "{0} rokov",
|
||
},
|
||
}
|
||
|
||
past = "Pred {0}"
|
||
future = "O {0}"
|
||
and_word = "a"
|
||
|
||
month_names = [
|
||
"",
|
||
"január",
|
||
"február",
|
||
"marec",
|
||
"apríl",
|
||
"máj",
|
||
"jún",
|
||
"júl",
|
||
"august",
|
||
"september",
|
||
"október",
|
||
"november",
|
||
"december",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"jan",
|
||
"feb",
|
||
"mar",
|
||
"apr",
|
||
"máj",
|
||
"jún",
|
||
"júl",
|
||
"aug",
|
||
"sep",
|
||
"okt",
|
||
"nov",
|
||
"dec",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"pondelok",
|
||
"utorok",
|
||
"streda",
|
||
"štvrtok",
|
||
"piatok",
|
||
"sobota",
|
||
"nedeľa",
|
||
]
|
||
day_abbreviations = ["", "po", "ut", "st", "št", "pi", "so", "ne"]
|
||
|
||
def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str:
|
||
"""Slovak aware time frame format function, takes into account
|
||
the differences between past and future forms."""
|
||
abs_delta = abs(delta)
|
||
form = self.timeframes[timeframe]
|
||
|
||
if isinstance(form, str):
|
||
return form.format(abs_delta)
|
||
|
||
if delta == 0:
|
||
key = "zero" # And *never* use 0 in the singular!
|
||
elif delta < 0:
|
||
key = "past"
|
||
else:
|
||
if "future-singular" not in form:
|
||
key = "future"
|
||
elif 2 <= abs_delta % 10 <= 4 and (
|
||
abs_delta % 100 < 10 or abs_delta % 100 >= 20
|
||
):
|
||
key = "future-singular"
|
||
else:
|
||
key = "future-paucal"
|
||
|
||
form: str = form[key]
|
||
return form.format(abs_delta)
|
||
|
||
|
||
class FarsiLocale(Locale):
|
||
names = ["fa", "fa-ir"]
|
||
|
||
past = "{0} قبل"
|
||
future = "در {0}"
|
||
|
||
timeframes = {
|
||
"now": "اکنون",
|
||
"second": "یک لحظه",
|
||
"seconds": "{0} ثانیه",
|
||
"minute": "یک دقیقه",
|
||
"minutes": "{0} دقیقه",
|
||
"hour": "یک ساعت",
|
||
"hours": "{0} ساعت",
|
||
"day": "یک روز",
|
||
"days": "{0} روز",
|
||
"month": "یک ماه",
|
||
"months": "{0} ماه",
|
||
"year": "یک سال",
|
||
"years": "{0} سال",
|
||
}
|
||
|
||
meridians = {
|
||
"am": "قبل از ظهر",
|
||
"pm": "بعد از ظهر",
|
||
"AM": "قبل از ظهر",
|
||
"PM": "بعد از ظهر",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"January",
|
||
"February",
|
||
"March",
|
||
"April",
|
||
"May",
|
||
"June",
|
||
"July",
|
||
"August",
|
||
"September",
|
||
"October",
|
||
"November",
|
||
"December",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"Jan",
|
||
"Feb",
|
||
"Mar",
|
||
"Apr",
|
||
"May",
|
||
"Jun",
|
||
"Jul",
|
||
"Aug",
|
||
"Sep",
|
||
"Oct",
|
||
"Nov",
|
||
"Dec",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"دو شنبه",
|
||
"سه شنبه",
|
||
"چهارشنبه",
|
||
"پنجشنبه",
|
||
"جمعه",
|
||
"شنبه",
|
||
"یکشنبه",
|
||
]
|
||
day_abbreviations = ["", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
|
||
|
||
|
||
class HebrewLocale(Locale):
|
||
names = ["he", "he-il"]
|
||
|
||
past = "לפני {0}"
|
||
future = "בעוד {0}"
|
||
and_word = "ו"
|
||
|
||
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
|
||
"now": "הרגע",
|
||
"second": "שנייה",
|
||
"seconds": "{0} שניות",
|
||
"minute": "דקה",
|
||
"minutes": "{0} דקות",
|
||
"hour": "שעה",
|
||
"hours": {"2": "שעתיים", "ten": "{0} שעות", "higher": "{0} שעות"},
|
||
"day": "יום",
|
||
"days": {"2": "יומיים", "ten": "{0} ימים", "higher": "{0} יום"},
|
||
"week": "שבוע",
|
||
"weeks": {"2": "שבועיים", "ten": "{0} שבועות", "higher": "{0} שבועות"},
|
||
"month": "חודש",
|
||
"months": {"2": "חודשיים", "ten": "{0} חודשים", "higher": "{0} חודשים"},
|
||
"year": "שנה",
|
||
"years": {"2": "שנתיים", "ten": "{0} שנים", "higher": "{0} שנה"},
|
||
}
|
||
|
||
meridians = {
|
||
"am": 'לפנ"צ',
|
||
"pm": 'אחר"צ',
|
||
"AM": "לפני הצהריים",
|
||
"PM": "אחרי הצהריים",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"ינואר",
|
||
"פברואר",
|
||
"מרץ",
|
||
"אפריל",
|
||
"מאי",
|
||
"יוני",
|
||
"יולי",
|
||
"אוגוסט",
|
||
"ספטמבר",
|
||
"אוקטובר",
|
||
"נובמבר",
|
||
"דצמבר",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"ינו׳",
|
||
"פבר׳",
|
||
"מרץ",
|
||
"אפר׳",
|
||
"מאי",
|
||
"יוני",
|
||
"יולי",
|
||
"אוג׳",
|
||
"ספט׳",
|
||
"אוק׳",
|
||
"נוב׳",
|
||
"דצמ׳",
|
||
]
|
||
|
||
day_names = ["", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת", "ראשון"]
|
||
day_abbreviations = ["", "ב׳", "ג׳", "ד׳", "ה׳", "ו׳", "ש׳", "א׳"]
|
||
|
||
def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str:
|
||
form = self.timeframes[timeframe]
|
||
delta = abs(delta)
|
||
if isinstance(form, Mapping):
|
||
if delta == 2:
|
||
form = form["2"]
|
||
elif delta == 0 or 2 < delta <= 10:
|
||
form = form["ten"]
|
||
else:
|
||
form = form["higher"]
|
||
|
||
return form.format(delta)
|
||
|
||
def describe_multi(
|
||
self,
|
||
timeframes: Sequence[Tuple[TimeFrameLiteral, Union[int, float]]],
|
||
only_distance: bool = False,
|
||
) -> str:
|
||
"""Describes a delta within multiple timeframes in plain language.
|
||
In Hebrew, the and word behaves a bit differently.
|
||
|
||
:param timeframes: a list of string, quantity pairs each representing a timeframe and delta.
|
||
:param only_distance: return only distance eg: "2 hours and 11 seconds" without "in" or "ago" keywords
|
||
"""
|
||
|
||
humanized = ""
|
||
for index, (timeframe, delta) in enumerate(timeframes):
|
||
last_humanized = self._format_timeframe(timeframe, trunc(delta))
|
||
if index == 0:
|
||
humanized = last_humanized
|
||
elif index == len(timeframes) - 1: # Must have at least 2 items
|
||
humanized += " " + self.and_word
|
||
if last_humanized[0].isdecimal():
|
||
humanized += "־"
|
||
humanized += last_humanized
|
||
else: # Don't add for the last one
|
||
humanized += ", " + last_humanized
|
||
|
||
if not only_distance:
|
||
humanized = self._format_relative(humanized, timeframe, trunc(delta))
|
||
|
||
return humanized
|
||
|
||
|
||
class MarathiLocale(Locale):
|
||
names = ["mr"]
|
||
|
||
past = "{0} आधी"
|
||
future = "{0} नंतर"
|
||
|
||
timeframes = {
|
||
"now": "सद्य",
|
||
"second": "एक सेकंद",
|
||
"seconds": "{0} सेकंद",
|
||
"minute": "एक मिनिट ",
|
||
"minutes": "{0} मिनिट ",
|
||
"hour": "एक तास",
|
||
"hours": "{0} तास",
|
||
"day": "एक दिवस",
|
||
"days": "{0} दिवस",
|
||
"month": "एक महिना ",
|
||
"months": "{0} महिने ",
|
||
"year": "एक वर्ष ",
|
||
"years": "{0} वर्ष ",
|
||
}
|
||
|
||
meridians = {"am": "सकाळ", "pm": "संध्याकाळ", "AM": "सकाळ", "PM": "संध्याकाळ"}
|
||
|
||
month_names = [
|
||
"",
|
||
"जानेवारी",
|
||
"फेब्रुवारी",
|
||
"मार्च",
|
||
"एप्रिल",
|
||
"मे",
|
||
"जून",
|
||
"जुलै",
|
||
"अॉगस्ट",
|
||
"सप्टेंबर",
|
||
"अॉक्टोबर",
|
||
"नोव्हेंबर",
|
||
"डिसेंबर",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"जान",
|
||
"फेब्रु",
|
||
"मार्च",
|
||
"एप्रि",
|
||
"मे",
|
||
"जून",
|
||
"जुलै",
|
||
"अॉग",
|
||
"सप्टें",
|
||
"अॉक्टो",
|
||
"नोव्हें",
|
||
"डिसें",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"सोमवार",
|
||
"मंगळवार",
|
||
"बुधवार",
|
||
"गुरुवार",
|
||
"शुक्रवार",
|
||
"शनिवार",
|
||
"रविवार",
|
||
]
|
||
day_abbreviations = ["", "सोम", "मंगळ", "बुध", "गुरु", "शुक्र", "शनि", "रवि"]
|
||
|
||
|
||
class CatalanLocale(Locale):
|
||
names = ["ca", "ca-es", "ca-ad", "ca-fr", "ca-it"]
|
||
past = "Fa {0}"
|
||
future = "En {0}"
|
||
and_word = "i"
|
||
|
||
timeframes = {
|
||
"now": "Ara mateix",
|
||
"second": "un segon",
|
||
"seconds": "{0} segons",
|
||
"minute": "un minut",
|
||
"minutes": "{0} minuts",
|
||
"hour": "una hora",
|
||
"hours": "{0} hores",
|
||
"day": "un dia",
|
||
"days": "{0} dies",
|
||
"month": "un mes",
|
||
"months": "{0} mesos",
|
||
"year": "un any",
|
||
"years": "{0} anys",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"gener",
|
||
"febrer",
|
||
"març",
|
||
"abril",
|
||
"maig",
|
||
"juny",
|
||
"juliol",
|
||
"agost",
|
||
"setembre",
|
||
"octubre",
|
||
"novembre",
|
||
"desembre",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"gen.",
|
||
"febr.",
|
||
"març",
|
||
"abr.",
|
||
"maig",
|
||
"juny",
|
||
"jul.",
|
||
"ag.",
|
||
"set.",
|
||
"oct.",
|
||
"nov.",
|
||
"des.",
|
||
]
|
||
day_names = [
|
||
"",
|
||
"dilluns",
|
||
"dimarts",
|
||
"dimecres",
|
||
"dijous",
|
||
"divendres",
|
||
"dissabte",
|
||
"diumenge",
|
||
]
|
||
day_abbreviations = [
|
||
"",
|
||
"dl.",
|
||
"dt.",
|
||
"dc.",
|
||
"dj.",
|
||
"dv.",
|
||
"ds.",
|
||
"dg.",
|
||
]
|
||
|
||
|
||
class BasqueLocale(Locale):
|
||
names = ["eu", "eu-eu"]
|
||
past = "duela {0}"
|
||
future = "{0}" # I don't know what's the right phrase in Basque for the future.
|
||
|
||
timeframes = {
|
||
"now": "Orain",
|
||
"second": "segundo bat",
|
||
"seconds": "{0} segundu",
|
||
"minute": "minutu bat",
|
||
"minutes": "{0} minutu",
|
||
"hour": "ordu bat",
|
||
"hours": "{0} ordu",
|
||
"day": "egun bat",
|
||
"days": "{0} egun",
|
||
"month": "hilabete bat",
|
||
"months": "{0} hilabet",
|
||
"year": "urte bat",
|
||
"years": "{0} urte",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"urtarrilak",
|
||
"otsailak",
|
||
"martxoak",
|
||
"apirilak",
|
||
"maiatzak",
|
||
"ekainak",
|
||
"uztailak",
|
||
"abuztuak",
|
||
"irailak",
|
||
"urriak",
|
||
"azaroak",
|
||
"abenduak",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"urt",
|
||
"ots",
|
||
"mar",
|
||
"api",
|
||
"mai",
|
||
"eka",
|
||
"uzt",
|
||
"abu",
|
||
"ira",
|
||
"urr",
|
||
"aza",
|
||
"abe",
|
||
]
|
||
day_names = [
|
||
"",
|
||
"astelehena",
|
||
"asteartea",
|
||
"asteazkena",
|
||
"osteguna",
|
||
"ostirala",
|
||
"larunbata",
|
||
"igandea",
|
||
]
|
||
day_abbreviations = ["", "al", "ar", "az", "og", "ol", "lr", "ig"]
|
||
|
||
|
||
class HungarianLocale(Locale):
|
||
names = ["hu", "hu-hu"]
|
||
|
||
past = "{0} ezelőtt"
|
||
future = "{0} múlva"
|
||
|
||
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
|
||
"now": "éppen most",
|
||
"second": {"past": "egy második", "future": "egy második"},
|
||
"seconds": {"past": "{0} másodpercekkel", "future": "{0} pár másodperc"},
|
||
"minute": {"past": "egy perccel", "future": "egy perc"},
|
||
"minutes": {"past": "{0} perccel", "future": "{0} perc"},
|
||
"hour": {"past": "egy órával", "future": "egy óra"},
|
||
"hours": {"past": "{0} órával", "future": "{0} óra"},
|
||
"day": {"past": "egy nappal", "future": "egy nap"},
|
||
"days": {"past": "{0} nappal", "future": "{0} nap"},
|
||
"week": {"past": "egy héttel", "future": "egy hét"},
|
||
"weeks": {"past": "{0} héttel", "future": "{0} hét"},
|
||
"month": {"past": "egy hónappal", "future": "egy hónap"},
|
||
"months": {"past": "{0} hónappal", "future": "{0} hónap"},
|
||
"year": {"past": "egy évvel", "future": "egy év"},
|
||
"years": {"past": "{0} évvel", "future": "{0} év"},
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"január",
|
||
"február",
|
||
"március",
|
||
"április",
|
||
"május",
|
||
"június",
|
||
"július",
|
||
"augusztus",
|
||
"szeptember",
|
||
"október",
|
||
"november",
|
||
"december",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"jan",
|
||
"febr",
|
||
"márc",
|
||
"ápr",
|
||
"máj",
|
||
"jún",
|
||
"júl",
|
||
"aug",
|
||
"szept",
|
||
"okt",
|
||
"nov",
|
||
"dec",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"hétfő",
|
||
"kedd",
|
||
"szerda",
|
||
"csütörtök",
|
||
"péntek",
|
||
"szombat",
|
||
"vasárnap",
|
||
]
|
||
day_abbreviations = ["", "hét", "kedd", "szer", "csüt", "pént", "szom", "vas"]
|
||
|
||
meridians = {"am": "de", "pm": "du", "AM": "DE", "PM": "DU"}
|
||
|
||
def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str:
|
||
form = self.timeframes[timeframe]
|
||
|
||
if isinstance(form, Mapping):
|
||
if delta > 0:
|
||
form = form["future"]
|
||
else:
|
||
form = form["past"]
|
||
|
||
return form.format(abs(delta))
|
||
|
||
|
||
class EsperantoLocale(Locale):
|
||
names = ["eo", "eo-xx"]
|
||
past = "antaŭ {0}"
|
||
future = "post {0}"
|
||
|
||
timeframes = {
|
||
"now": "nun",
|
||
"second": "sekundo",
|
||
"seconds": "{0} kelkaj sekundoj",
|
||
"minute": "unu minuto",
|
||
"minutes": "{0} minutoj",
|
||
"hour": "un horo",
|
||
"hours": "{0} horoj",
|
||
"day": "unu tago",
|
||
"days": "{0} tagoj",
|
||
"month": "unu monato",
|
||
"months": "{0} monatoj",
|
||
"year": "unu jaro",
|
||
"years": "{0} jaroj",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"januaro",
|
||
"februaro",
|
||
"marto",
|
||
"aprilo",
|
||
"majo",
|
||
"junio",
|
||
"julio",
|
||
"aŭgusto",
|
||
"septembro",
|
||
"oktobro",
|
||
"novembro",
|
||
"decembro",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"jan",
|
||
"feb",
|
||
"mar",
|
||
"apr",
|
||
"maj",
|
||
"jun",
|
||
"jul",
|
||
"aŭg",
|
||
"sep",
|
||
"okt",
|
||
"nov",
|
||
"dec",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"lundo",
|
||
"mardo",
|
||
"merkredo",
|
||
"ĵaŭdo",
|
||
"vendredo",
|
||
"sabato",
|
||
"dimanĉo",
|
||
]
|
||
day_abbreviations = ["", "lun", "mar", "mer", "ĵaŭ", "ven", "sab", "dim"]
|
||
|
||
meridians = {"am": "atm", "pm": "ptm", "AM": "ATM", "PM": "PTM"}
|
||
|
||
ordinal_day_re = r"((?P<value>[1-3]?[0-9](?=a))a)"
|
||
|
||
def _ordinal_number(self, n: int) -> str:
|
||
return f"{n}a"
|
||
|
||
|
||
class ThaiLocale(Locale):
|
||
names = ["th", "th-th"]
|
||
|
||
past = "{0} ที่ผ่านมา"
|
||
future = "ในอีก {0}"
|
||
|
||
timeframes = {
|
||
"now": "ขณะนี้",
|
||
"second": "วินาที",
|
||
"seconds": "{0} ไม่กี่วินาที",
|
||
"minute": "1 นาที",
|
||
"minutes": "{0} นาที",
|
||
"hour": "1 ชั่วโมง",
|
||
"hours": "{0} ชั่วโมง",
|
||
"day": "1 วัน",
|
||
"days": "{0} วัน",
|
||
"month": "1 เดือน",
|
||
"months": "{0} เดือน",
|
||
"year": "1 ปี",
|
||
"years": "{0} ปี",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"มกราคม",
|
||
"กุมภาพันธ์",
|
||
"มีนาคม",
|
||
"เมษายน",
|
||
"พฤษภาคม",
|
||
"มิถุนายน",
|
||
"กรกฎาคม",
|
||
"สิงหาคม",
|
||
"กันยายน",
|
||
"ตุลาคม",
|
||
"พฤศจิกายน",
|
||
"ธันวาคม",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"ม.ค.",
|
||
"ก.พ.",
|
||
"มี.ค.",
|
||
"เม.ย.",
|
||
"พ.ค.",
|
||
"มิ.ย.",
|
||
"ก.ค.",
|
||
"ส.ค.",
|
||
"ก.ย.",
|
||
"ต.ค.",
|
||
"พ.ย.",
|
||
"ธ.ค.",
|
||
]
|
||
|
||
day_names = ["", "จันทร์", "อังคาร", "พุธ", "พฤหัสบดี", "ศุกร์", "เสาร์", "อาทิตย์"]
|
||
day_abbreviations = ["", "จ", "อ", "พ", "พฤ", "ศ", "ส", "อา"]
|
||
|
||
meridians = {"am": "am", "pm": "pm", "AM": "AM", "PM": "PM"}
|
||
|
||
BE_OFFSET = 543
|
||
|
||
def year_full(self, year: int) -> str:
|
||
"""Thai always use Buddhist Era (BE) which is CE + 543"""
|
||
year += self.BE_OFFSET
|
||
return f"{year:04d}"
|
||
|
||
def year_abbreviation(self, year: int) -> str:
|
||
"""Thai always use Buddhist Era (BE) which is CE + 543"""
|
||
year += self.BE_OFFSET
|
||
return f"{year:04d}"[2:]
|
||
|
||
def _format_relative(
|
||
self,
|
||
humanized: str,
|
||
timeframe: TimeFrameLiteral,
|
||
delta: Union[float, int],
|
||
) -> str:
|
||
"""Thai normally doesn't have any space between words"""
|
||
if timeframe == "now":
|
||
return humanized
|
||
|
||
direction = self.past if delta < 0 else self.future
|
||
relative_string = direction.format(humanized)
|
||
|
||
if timeframe == "seconds":
|
||
relative_string = relative_string.replace(" ", "")
|
||
|
||
return relative_string
|
||
|
||
|
||
class LaotianLocale(Locale):
|
||
names = ["lo", "lo-la"]
|
||
|
||
past = "{0} ກ່ອນຫນ້ານີ້"
|
||
future = "ໃນ {0}"
|
||
|
||
timeframes = {
|
||
"now": "ດຽວນີ້",
|
||
"second": "ວິນາທີ",
|
||
"seconds": "{0} ວິນາທີ",
|
||
"minute": "ນາທີ",
|
||
"minutes": "{0} ນາທີ",
|
||
"hour": "ຊົ່ວໂມງ",
|
||
"hours": "{0} ຊົ່ວໂມງ",
|
||
"day": "ມື້",
|
||
"days": "{0} ມື້",
|
||
"week": "ອາທິດ",
|
||
"weeks": "{0} ອາທິດ",
|
||
"month": "ເດືອນ",
|
||
"months": "{0} ເດືອນ",
|
||
"year": "ປີ",
|
||
"years": "{0} ປີ",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"ມັງກອນ", # mangkon
|
||
"ກຸມພາ", # kumpha
|
||
"ມີນາ", # mina
|
||
"ເມສາ", # mesa
|
||
"ພຶດສະພາ", # phudsapha
|
||
"ມິຖຸນາ", # mithuna
|
||
"ກໍລະກົດ", # kolakod
|
||
"ສິງຫາ", # singha
|
||
"ກັນຍາ", # knaia
|
||
"ຕຸລາ", # tula
|
||
"ພະຈິກ", # phachik
|
||
"ທັນວາ", # thanuaa
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"ມັງກອນ",
|
||
"ກຸມພາ",
|
||
"ມີນາ",
|
||
"ເມສາ",
|
||
"ພຶດສະພາ",
|
||
"ມິຖຸນາ",
|
||
"ກໍລະກົດ",
|
||
"ສິງຫາ",
|
||
"ກັນຍາ",
|
||
"ຕຸລາ",
|
||
"ພະຈິກ",
|
||
"ທັນວາ",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"ວັນຈັນ", # vanchan
|
||
"ວັນອັງຄານ", # vnoangkhan
|
||
"ວັນພຸດ", # vanphud
|
||
"ວັນພະຫັດ", # vanphahad
|
||
"ວັນສຸກ", # vansuk
|
||
"ວັນເສົາ", # vansao
|
||
"ວັນອາທິດ", # vnoathid
|
||
]
|
||
day_abbreviations = [
|
||
"",
|
||
"ວັນຈັນ",
|
||
"ວັນອັງຄານ",
|
||
"ວັນພຸດ",
|
||
"ວັນພະຫັດ",
|
||
"ວັນສຸກ",
|
||
"ວັນເສົາ",
|
||
"ວັນອາທິດ",
|
||
]
|
||
|
||
BE_OFFSET = 543
|
||
|
||
def year_full(self, year: int) -> str:
|
||
"""Lao always use Buddhist Era (BE) which is CE + 543"""
|
||
year += self.BE_OFFSET
|
||
return f"{year:04d}"
|
||
|
||
def year_abbreviation(self, year: int) -> str:
|
||
"""Lao always use Buddhist Era (BE) which is CE + 543"""
|
||
year += self.BE_OFFSET
|
||
return f"{year:04d}"[2:]
|
||
|
||
def _format_relative(
|
||
self,
|
||
humanized: str,
|
||
timeframe: TimeFrameLiteral,
|
||
delta: Union[float, int],
|
||
) -> str:
|
||
"""Lao normally doesn't have any space between words"""
|
||
if timeframe == "now":
|
||
return humanized
|
||
|
||
direction = self.past if delta < 0 else self.future
|
||
relative_string = direction.format(humanized)
|
||
|
||
if timeframe == "seconds":
|
||
relative_string = relative_string.replace(" ", "")
|
||
|
||
return relative_string
|
||
|
||
|
||
class BengaliLocale(Locale):
|
||
names = ["bn", "bn-bd", "bn-in"]
|
||
|
||
past = "{0} আগে"
|
||
future = "{0} পরে"
|
||
|
||
timeframes = {
|
||
"now": "এখন",
|
||
"second": "একটি দ্বিতীয়",
|
||
"seconds": "{0} সেকেন্ড",
|
||
"minute": "এক মিনিট",
|
||
"minutes": "{0} মিনিট",
|
||
"hour": "এক ঘণ্টা",
|
||
"hours": "{0} ঘণ্টা",
|
||
"day": "এক দিন",
|
||
"days": "{0} দিন",
|
||
"month": "এক মাস",
|
||
"months": "{0} মাস ",
|
||
"year": "এক বছর",
|
||
"years": "{0} বছর",
|
||
}
|
||
|
||
meridians = {"am": "সকাল", "pm": "বিকাল", "AM": "সকাল", "PM": "বিকাল"}
|
||
|
||
month_names = [
|
||
"",
|
||
"জানুয়ারি",
|
||
"ফেব্রুয়ারি",
|
||
"মার্চ",
|
||
"এপ্রিল",
|
||
"মে",
|
||
"জুন",
|
||
"জুলাই",
|
||
"আগস্ট",
|
||
"সেপ্টেম্বর",
|
||
"অক্টোবর",
|
||
"নভেম্বর",
|
||
"ডিসেম্বর",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"জানু",
|
||
"ফেব",
|
||
"মার্চ",
|
||
"এপ্রি",
|
||
"মে",
|
||
"জুন",
|
||
"জুল",
|
||
"অগা",
|
||
"সেপ্ট",
|
||
"অক্টো",
|
||
"নভে",
|
||
"ডিসে",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"সোমবার",
|
||
"মঙ্গলবার",
|
||
"বুধবার",
|
||
"বৃহস্পতিবার",
|
||
"শুক্রবার",
|
||
"শনিবার",
|
||
"রবিবার",
|
||
]
|
||
day_abbreviations = ["", "সোম", "মঙ্গল", "বুধ", "বৃহঃ", "শুক্র", "শনি", "রবি"]
|
||
|
||
def _ordinal_number(self, n: int) -> str:
|
||
if n > 10 or n == 0:
|
||
return f"{n}তম"
|
||
if n in [1, 5, 7, 8, 9, 10]:
|
||
return f"{n}ম"
|
||
if n in [2, 3]:
|
||
return f"{n}য়"
|
||
if n == 4:
|
||
return f"{n}র্থ"
|
||
if n == 6:
|
||
return f"{n}ষ্ঠ"
|
||
return ""
|
||
|
||
|
||
class RomanshLocale(Locale):
|
||
names = ["rm", "rm-ch"]
|
||
|
||
past = "avant {0}"
|
||
future = "en {0}"
|
||
|
||
timeframes = {
|
||
"now": "en quest mument",
|
||
"second": "in secunda",
|
||
"seconds": "{0} secundas",
|
||
"minute": "ina minuta",
|
||
"minutes": "{0} minutas",
|
||
"hour": "in'ura",
|
||
"hours": "{0} ura",
|
||
"day": "in di",
|
||
"days": "{0} dis",
|
||
"week": "in'emna",
|
||
"weeks": "{0} emnas",
|
||
"month": "in mais",
|
||
"months": "{0} mais",
|
||
"year": "in onn",
|
||
"years": "{0} onns",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"schaner",
|
||
"favrer",
|
||
"mars",
|
||
"avrigl",
|
||
"matg",
|
||
"zercladur",
|
||
"fanadur",
|
||
"avust",
|
||
"settember",
|
||
"october",
|
||
"november",
|
||
"december",
|
||
]
|
||
|
||
month_abbreviations = [
|
||
"",
|
||
"schan",
|
||
"fav",
|
||
"mars",
|
||
"avr",
|
||
"matg",
|
||
"zer",
|
||
"fan",
|
||
"avu",
|
||
"set",
|
||
"oct",
|
||
"nov",
|
||
"dec",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"glindesdi",
|
||
"mardi",
|
||
"mesemna",
|
||
"gievgia",
|
||
"venderdi",
|
||
"sonda",
|
||
"dumengia",
|
||
]
|
||
|
||
day_abbreviations = ["", "gli", "ma", "me", "gie", "ve", "so", "du"]
|
||
|
||
|
||
class RomanianLocale(Locale):
|
||
names = ["ro", "ro-ro"]
|
||
|
||
past = "{0} în urmă"
|
||
future = "peste {0}"
|
||
and_word = "și"
|
||
|
||
timeframes = {
|
||
"now": "acum",
|
||
"second": "o secunda",
|
||
"seconds": "{0} câteva secunde",
|
||
"minute": "un minut",
|
||
"minutes": "{0} minute",
|
||
"hour": "o oră",
|
||
"hours": "{0} ore",
|
||
"day": "o zi",
|
||
"days": "{0} zile",
|
||
"month": "o lună",
|
||
"months": "{0} luni",
|
||
"year": "un an",
|
||
"years": "{0} ani",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"ianuarie",
|
||
"februarie",
|
||
"martie",
|
||
"aprilie",
|
||
"mai",
|
||
"iunie",
|
||
"iulie",
|
||
"august",
|
||
"septembrie",
|
||
"octombrie",
|
||
"noiembrie",
|
||
"decembrie",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"ian",
|
||
"febr",
|
||
"mart",
|
||
"apr",
|
||
"mai",
|
||
"iun",
|
||
"iul",
|
||
"aug",
|
||
"sept",
|
||
"oct",
|
||
"nov",
|
||
"dec",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"luni",
|
||
"marți",
|
||
"miercuri",
|
||
"joi",
|
||
"vineri",
|
||
"sâmbătă",
|
||
"duminică",
|
||
]
|
||
day_abbreviations = ["", "Lun", "Mar", "Mie", "Joi", "Vin", "Sâm", "Dum"]
|
||
|
||
|
||
class SlovenianLocale(Locale):
|
||
names = ["sl", "sl-si"]
|
||
|
||
past = "pred {0}"
|
||
future = "čez {0}"
|
||
and_word = "in"
|
||
|
||
timeframes = {
|
||
"now": "zdaj",
|
||
"second": "sekundo",
|
||
"seconds": "{0} sekund",
|
||
"minute": "minuta",
|
||
"minutes": "{0} minutami",
|
||
"hour": "uro",
|
||
"hours": "{0} ur",
|
||
"day": "dan",
|
||
"days": "{0} dni",
|
||
"month": "mesec",
|
||
"months": "{0} mesecev",
|
||
"year": "leto",
|
||
"years": "{0} let",
|
||
}
|
||
|
||
meridians = {"am": "", "pm": "", "AM": "", "PM": ""}
|
||
|
||
month_names = [
|
||
"",
|
||
"Januar",
|
||
"Februar",
|
||
"Marec",
|
||
"April",
|
||
"Maj",
|
||
"Junij",
|
||
"Julij",
|
||
"Avgust",
|
||
"September",
|
||
"Oktober",
|
||
"November",
|
||
"December",
|
||
]
|
||
|
||
month_abbreviations = [
|
||
"",
|
||
"Jan",
|
||
"Feb",
|
||
"Mar",
|
||
"Apr",
|
||
"Maj",
|
||
"Jun",
|
||
"Jul",
|
||
"Avg",
|
||
"Sep",
|
||
"Okt",
|
||
"Nov",
|
||
"Dec",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"Ponedeljek",
|
||
"Torek",
|
||
"Sreda",
|
||
"Četrtek",
|
||
"Petek",
|
||
"Sobota",
|
||
"Nedelja",
|
||
]
|
||
|
||
day_abbreviations = ["", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob", "Ned"]
|
||
|
||
|
||
class IndonesianLocale(Locale):
|
||
names = ["id", "id-id"]
|
||
|
||
past = "{0} yang lalu"
|
||
future = "dalam {0}"
|
||
and_word = "dan"
|
||
|
||
timeframes = {
|
||
"now": "baru saja",
|
||
"second": "1 sebentar",
|
||
"seconds": "{0} detik",
|
||
"minute": "1 menit",
|
||
"minutes": "{0} menit",
|
||
"hour": "1 jam",
|
||
"hours": "{0} jam",
|
||
"day": "1 hari",
|
||
"days": "{0} hari",
|
||
"week": "1 minggu",
|
||
"weeks": "{0} minggu",
|
||
"month": "1 bulan",
|
||
"months": "{0} bulan",
|
||
"quarter": "1 kuartal",
|
||
"quarters": "{0} kuartal",
|
||
"year": "1 tahun",
|
||
"years": "{0} tahun",
|
||
}
|
||
|
||
meridians = {"am": "", "pm": "", "AM": "", "PM": ""}
|
||
|
||
month_names = [
|
||
"",
|
||
"Januari",
|
||
"Februari",
|
||
"Maret",
|
||
"April",
|
||
"Mei",
|
||
"Juni",
|
||
"Juli",
|
||
"Agustus",
|
||
"September",
|
||
"Oktober",
|
||
"November",
|
||
"Desember",
|
||
]
|
||
|
||
month_abbreviations = [
|
||
"",
|
||
"Jan",
|
||
"Feb",
|
||
"Mar",
|
||
"Apr",
|
||
"Mei",
|
||
"Jun",
|
||
"Jul",
|
||
"Ags",
|
||
"Sept",
|
||
"Okt",
|
||
"Nov",
|
||
"Des",
|
||
]
|
||
|
||
day_names = ["", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu", "Minggu"]
|
||
|
||
day_abbreviations = [
|
||
"",
|
||
"Senin",
|
||
"Selasa",
|
||
"Rabu",
|
||
"Kamis",
|
||
"Jumat",
|
||
"Sabtu",
|
||
"Minggu",
|
||
]
|
||
|
||
|
||
class NepaliLocale(Locale):
|
||
names = ["ne", "ne-np"]
|
||
|
||
past = "{0} पहिले"
|
||
future = "{0} पछी"
|
||
|
||
timeframes = {
|
||
"now": "अहिले",
|
||
"second": "एक सेकेन्ड",
|
||
"seconds": "{0} सेकण्ड",
|
||
"minute": "मिनेट",
|
||
"minutes": "{0} मिनेट",
|
||
"hour": "एक घण्टा",
|
||
"hours": "{0} घण्टा",
|
||
"day": "एक दिन",
|
||
"days": "{0} दिन",
|
||
"month": "एक महिना",
|
||
"months": "{0} महिना",
|
||
"year": "एक बर्ष",
|
||
"years": "{0} बर्ष",
|
||
}
|
||
|
||
meridians = {"am": "पूर्वाह्न", "pm": "अपरान्ह", "AM": "पूर्वाह्न", "PM": "अपरान्ह"}
|
||
|
||
month_names = [
|
||
"",
|
||
"जनवरी",
|
||
"फेब्रुअरी",
|
||
"मार्च",
|
||
"एप्रील",
|
||
"मे",
|
||
"जुन",
|
||
"जुलाई",
|
||
"अगष्ट",
|
||
"सेप्टेम्बर",
|
||
"अक्टोबर",
|
||
"नोवेम्बर",
|
||
"डिसेम्बर",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"जन",
|
||
"फेब",
|
||
"मार्च",
|
||
"एप्रील",
|
||
"मे",
|
||
"जुन",
|
||
"जुलाई",
|
||
"अग",
|
||
"सेप",
|
||
"अक्ट",
|
||
"नोव",
|
||
"डिस",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"सोमवार",
|
||
"मंगलवार",
|
||
"बुधवार",
|
||
"बिहिवार",
|
||
"शुक्रवार",
|
||
"शनिवार",
|
||
"आइतवार",
|
||
]
|
||
|
||
day_abbreviations = ["", "सोम", "मंगल", "बुध", "बिहि", "शुक्र", "शनि", "आइत"]
|
||
|
||
|
||
class EstonianLocale(Locale):
|
||
names = ["ee", "et"]
|
||
|
||
past = "{0} tagasi"
|
||
future = "{0} pärast"
|
||
and_word = "ja"
|
||
|
||
timeframes: ClassVar[Mapping[TimeFrameLiteral, Mapping[str, str]]] = {
|
||
"now": {"past": "just nüüd", "future": "just nüüd"},
|
||
"second": {"past": "üks sekund", "future": "ühe sekundi"},
|
||
"seconds": {"past": "{0} sekundit", "future": "{0} sekundi"},
|
||
"minute": {"past": "üks minut", "future": "ühe minuti"},
|
||
"minutes": {"past": "{0} minutit", "future": "{0} minuti"},
|
||
"hour": {"past": "tund aega", "future": "tunni aja"},
|
||
"hours": {"past": "{0} tundi", "future": "{0} tunni"},
|
||
"day": {"past": "üks päev", "future": "ühe päeva"},
|
||
"days": {"past": "{0} päeva", "future": "{0} päeva"},
|
||
"month": {"past": "üks kuu", "future": "ühe kuu"},
|
||
"months": {"past": "{0} kuud", "future": "{0} kuu"},
|
||
"year": {"past": "üks aasta", "future": "ühe aasta"},
|
||
"years": {"past": "{0} aastat", "future": "{0} aasta"},
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"Jaanuar",
|
||
"Veebruar",
|
||
"Märts",
|
||
"Aprill",
|
||
"Mai",
|
||
"Juuni",
|
||
"Juuli",
|
||
"August",
|
||
"September",
|
||
"Oktoober",
|
||
"November",
|
||
"Detsember",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"Jan",
|
||
"Veb",
|
||
"Mär",
|
||
"Apr",
|
||
"Mai",
|
||
"Jun",
|
||
"Jul",
|
||
"Aug",
|
||
"Sep",
|
||
"Okt",
|
||
"Nov",
|
||
"Dets",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"Esmaspäev",
|
||
"Teisipäev",
|
||
"Kolmapäev",
|
||
"Neljapäev",
|
||
"Reede",
|
||
"Laupäev",
|
||
"Pühapäev",
|
||
]
|
||
day_abbreviations = ["", "Esm", "Teis", "Kolm", "Nelj", "Re", "Lau", "Püh"]
|
||
|
||
def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str:
|
||
form = self.timeframes[timeframe]
|
||
if delta > 0:
|
||
_form = form["future"]
|
||
else:
|
||
_form = form["past"]
|
||
return _form.format(abs(delta))
|
||
|
||
|
||
class LatvianLocale(Locale):
|
||
names = ["lv", "lv-lv"]
|
||
|
||
past = "pirms {0}"
|
||
future = "pēc {0}"
|
||
and_word = "un"
|
||
|
||
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
|
||
"now": "tagad",
|
||
"second": "sekundes",
|
||
"seconds": "{0} sekundēm",
|
||
"minute": "minūtes",
|
||
"minutes": "{0} minūtēm",
|
||
"hour": "stundas",
|
||
"hours": "{0} stundām",
|
||
"day": "dienas",
|
||
"days": "{0} dienām",
|
||
"week": "nedēļas",
|
||
"weeks": "{0} nedēļām",
|
||
"month": "mēneša",
|
||
"months": "{0} mēnešiem",
|
||
"year": "gada",
|
||
"years": "{0} gadiem",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"janvāris",
|
||
"februāris",
|
||
"marts",
|
||
"aprīlis",
|
||
"maijs",
|
||
"jūnijs",
|
||
"jūlijs",
|
||
"augusts",
|
||
"septembris",
|
||
"oktobris",
|
||
"novembris",
|
||
"decembris",
|
||
]
|
||
|
||
month_abbreviations = [
|
||
"",
|
||
"jan",
|
||
"feb",
|
||
"marts",
|
||
"apr",
|
||
"maijs",
|
||
"jūnijs",
|
||
"jūlijs",
|
||
"aug",
|
||
"sept",
|
||
"okt",
|
||
"nov",
|
||
"dec",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"pirmdiena",
|
||
"otrdiena",
|
||
"trešdiena",
|
||
"ceturtdiena",
|
||
"piektdiena",
|
||
"sestdiena",
|
||
"svētdiena",
|
||
]
|
||
|
||
day_abbreviations = [
|
||
"",
|
||
"pi",
|
||
"ot",
|
||
"tr",
|
||
"ce",
|
||
"pi",
|
||
"se",
|
||
"sv",
|
||
]
|
||
|
||
|
||
class SwahiliLocale(Locale):
|
||
names = [
|
||
"sw",
|
||
"sw-ke",
|
||
"sw-tz",
|
||
]
|
||
|
||
past = "{0} iliyopita"
|
||
future = "muda wa {0}"
|
||
and_word = "na"
|
||
|
||
timeframes = {
|
||
"now": "sasa hivi",
|
||
"second": "sekunde",
|
||
"seconds": "sekunde {0}",
|
||
"minute": "dakika moja",
|
||
"minutes": "dakika {0}",
|
||
"hour": "saa moja",
|
||
"hours": "saa {0}",
|
||
"day": "siku moja",
|
||
"days": "siku {0}",
|
||
"week": "wiki moja",
|
||
"weeks": "wiki {0}",
|
||
"month": "mwezi moja",
|
||
"months": "miezi {0}",
|
||
"year": "mwaka moja",
|
||
"years": "miaka {0}",
|
||
}
|
||
|
||
meridians = {"am": "asu", "pm": "mch", "AM": "ASU", "PM": "MCH"}
|
||
|
||
month_names = [
|
||
"",
|
||
"Januari",
|
||
"Februari",
|
||
"Machi",
|
||
"Aprili",
|
||
"Mei",
|
||
"Juni",
|
||
"Julai",
|
||
"Agosti",
|
||
"Septemba",
|
||
"Oktoba",
|
||
"Novemba",
|
||
"Desemba",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"Jan",
|
||
"Feb",
|
||
"Mac",
|
||
"Apr",
|
||
"Mei",
|
||
"Jun",
|
||
"Jul",
|
||
"Ago",
|
||
"Sep",
|
||
"Okt",
|
||
"Nov",
|
||
"Des",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"Jumatatu",
|
||
"Jumanne",
|
||
"Jumatano",
|
||
"Alhamisi",
|
||
"Ijumaa",
|
||
"Jumamosi",
|
||
"Jumapili",
|
||
]
|
||
day_abbreviations = [
|
||
"",
|
||
"Jumatatu",
|
||
"Jumanne",
|
||
"Jumatano",
|
||
"Alhamisi",
|
||
"Ijumaa",
|
||
"Jumamosi",
|
||
"Jumapili",
|
||
]
|
||
|
||
|
||
class CroatianLocale(Locale):
|
||
names = ["hr", "hr-hr"]
|
||
|
||
past = "prije {0}"
|
||
future = "za {0}"
|
||
and_word = "i"
|
||
|
||
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
|
||
"now": "upravo sad",
|
||
"second": "sekundu",
|
||
"seconds": {"double": "{0} sekunde", "higher": "{0} sekundi"},
|
||
"minute": "minutu",
|
||
"minutes": {"double": "{0} minute", "higher": "{0} minuta"},
|
||
"hour": "sat",
|
||
"hours": {"double": "{0} sata", "higher": "{0} sati"},
|
||
"day": "jedan dan",
|
||
"days": {"double": "{0} dana", "higher": "{0} dana"},
|
||
"week": "tjedan",
|
||
"weeks": {"double": "{0} tjedna", "higher": "{0} tjedana"},
|
||
"month": "mjesec",
|
||
"months": {"double": "{0} mjeseca", "higher": "{0} mjeseci"},
|
||
"year": "godinu",
|
||
"years": {"double": "{0} godine", "higher": "{0} godina"},
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"siječanj",
|
||
"veljača",
|
||
"ožujak",
|
||
"travanj",
|
||
"svibanj",
|
||
"lipanj",
|
||
"srpanj",
|
||
"kolovoz",
|
||
"rujan",
|
||
"listopad",
|
||
"studeni",
|
||
"prosinac",
|
||
]
|
||
|
||
month_abbreviations = [
|
||
"",
|
||
"siječ",
|
||
"velj",
|
||
"ožuj",
|
||
"trav",
|
||
"svib",
|
||
"lip",
|
||
"srp",
|
||
"kol",
|
||
"ruj",
|
||
"list",
|
||
"stud",
|
||
"pros",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"ponedjeljak",
|
||
"utorak",
|
||
"srijeda",
|
||
"četvrtak",
|
||
"petak",
|
||
"subota",
|
||
"nedjelja",
|
||
]
|
||
|
||
day_abbreviations = [
|
||
"",
|
||
"po",
|
||
"ut",
|
||
"sr",
|
||
"če",
|
||
"pe",
|
||
"su",
|
||
"ne",
|
||
]
|
||
|
||
def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str:
|
||
form = self.timeframes[timeframe]
|
||
delta = abs(delta)
|
||
if isinstance(form, Mapping):
|
||
if 1 < delta <= 4:
|
||
form = form["double"]
|
||
else:
|
||
form = form["higher"]
|
||
|
||
return form.format(delta)
|
||
|
||
|
||
class LatinLocale(Locale):
|
||
names = ["la", "la-va"]
|
||
|
||
past = "ante {0}"
|
||
future = "in {0}"
|
||
and_word = "et"
|
||
|
||
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
|
||
"now": "nunc",
|
||
"second": "secundum",
|
||
"seconds": "{0} secundis",
|
||
"minute": "minutam",
|
||
"minutes": "{0} minutis",
|
||
"hour": "horam",
|
||
"hours": "{0} horas",
|
||
"day": "diem",
|
||
"days": "{0} dies",
|
||
"week": "hebdomadem",
|
||
"weeks": "{0} hebdomades",
|
||
"month": "mensem",
|
||
"months": "{0} mensis",
|
||
"year": "annum",
|
||
"years": "{0} annos",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"Ianuarius",
|
||
"Februarius",
|
||
"Martius",
|
||
"Aprilis",
|
||
"Maius",
|
||
"Iunius",
|
||
"Iulius",
|
||
"Augustus",
|
||
"September",
|
||
"October",
|
||
"November",
|
||
"December",
|
||
]
|
||
|
||
month_abbreviations = [
|
||
"",
|
||
"Ian",
|
||
"Febr",
|
||
"Mart",
|
||
"Apr",
|
||
"Mai",
|
||
"Iun",
|
||
"Iul",
|
||
"Aug",
|
||
"Sept",
|
||
"Oct",
|
||
"Nov",
|
||
"Dec",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"dies Lunae",
|
||
"dies Martis",
|
||
"dies Mercurii",
|
||
"dies Iovis",
|
||
"dies Veneris",
|
||
"dies Saturni",
|
||
"dies Solis",
|
||
]
|
||
|
||
day_abbreviations = [
|
||
"",
|
||
"dies Lunae",
|
||
"dies Martis",
|
||
"dies Mercurii",
|
||
"dies Iovis",
|
||
"dies Veneris",
|
||
"dies Saturni",
|
||
"dies Solis",
|
||
]
|
||
|
||
|
||
class LithuanianLocale(Locale):
|
||
names = ["lt", "lt-lt"]
|
||
|
||
past = "prieš {0}"
|
||
future = "po {0}"
|
||
and_word = "ir"
|
||
|
||
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
|
||
"now": "dabar",
|
||
"second": "sekundės",
|
||
"seconds": "{0} sekundžių",
|
||
"minute": "minutės",
|
||
"minutes": "{0} minučių",
|
||
"hour": "valandos",
|
||
"hours": "{0} valandų",
|
||
"day": "dieną",
|
||
"days": "{0} dienų",
|
||
"week": "savaitės",
|
||
"weeks": "{0} savaičių",
|
||
"month": "mėnesio",
|
||
"months": "{0} mėnesių",
|
||
"year": "metų",
|
||
"years": "{0} metų",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"sausis",
|
||
"vasaris",
|
||
"kovas",
|
||
"balandis",
|
||
"gegužė",
|
||
"birželis",
|
||
"liepa",
|
||
"rugpjūtis",
|
||
"rugsėjis",
|
||
"spalis",
|
||
"lapkritis",
|
||
"gruodis",
|
||
]
|
||
|
||
month_abbreviations = [
|
||
"",
|
||
"saus",
|
||
"vas",
|
||
"kovas",
|
||
"bal",
|
||
"geg",
|
||
"birž",
|
||
"liepa",
|
||
"rugp",
|
||
"rugs",
|
||
"spalis",
|
||
"lapkr",
|
||
"gr",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"pirmadienis",
|
||
"antradienis",
|
||
"trečiadienis",
|
||
"ketvirtadienis",
|
||
"penktadienis",
|
||
"šeštadienis",
|
||
"sekmadienis",
|
||
]
|
||
|
||
day_abbreviations = [
|
||
"",
|
||
"pi",
|
||
"an",
|
||
"tr",
|
||
"ke",
|
||
"pe",
|
||
"še",
|
||
"se",
|
||
]
|
||
|
||
|
||
class MalayLocale(Locale):
|
||
names = ["ms", "ms-my", "ms-bn"]
|
||
|
||
past = "{0} yang lalu"
|
||
future = "dalam {0}"
|
||
and_word = "dan"
|
||
|
||
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
|
||
"now": "sekarang",
|
||
"second": "saat",
|
||
"seconds": "{0} saat",
|
||
"minute": "minit",
|
||
"minutes": "{0} minit",
|
||
"hour": "jam",
|
||
"hours": "{0} jam",
|
||
"day": "hari",
|
||
"days": "{0} hari",
|
||
"week": "minggu",
|
||
"weeks": "{0} minggu",
|
||
"month": "bulan",
|
||
"months": "{0} bulan",
|
||
"year": "tahun",
|
||
"years": "{0} tahun",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"Januari",
|
||
"Februari",
|
||
"Mac",
|
||
"April",
|
||
"Mei",
|
||
"Jun",
|
||
"Julai",
|
||
"Ogos",
|
||
"September",
|
||
"Oktober",
|
||
"November",
|
||
"Disember",
|
||
]
|
||
|
||
month_abbreviations = [
|
||
"",
|
||
"Jan.",
|
||
"Feb.",
|
||
"Mac",
|
||
"Apr.",
|
||
"Mei",
|
||
"Jun",
|
||
"Julai",
|
||
"Og.",
|
||
"Sept.",
|
||
"Okt.",
|
||
"Nov.",
|
||
"Dis.",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"Isnin",
|
||
"Selasa",
|
||
"Rabu",
|
||
"Khamis",
|
||
"Jumaat",
|
||
"Sabtu",
|
||
"Ahad",
|
||
]
|
||
|
||
day_abbreviations = [
|
||
"",
|
||
"Isnin",
|
||
"Selasa",
|
||
"Rabu",
|
||
"Khamis",
|
||
"Jumaat",
|
||
"Sabtu",
|
||
"Ahad",
|
||
]
|
||
|
||
|
||
class MalteseLocale(Locale):
|
||
names = ["mt", "mt-mt"]
|
||
|
||
past = "{0} ilu"
|
||
future = "fi {0}"
|
||
and_word = "u"
|
||
|
||
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
|
||
"now": "issa",
|
||
"second": "sekonda",
|
||
"seconds": "{0} sekondi",
|
||
"minute": "minuta",
|
||
"minutes": "{0} minuti",
|
||
"hour": "siegħa",
|
||
"hours": {"dual": "{0} sagħtejn", "plural": "{0} sigħat"},
|
||
"day": "jum",
|
||
"days": {"dual": "{0} jumejn", "plural": "{0} ijiem"},
|
||
"week": "ġimgħa",
|
||
"weeks": {"dual": "{0} ġimagħtejn", "plural": "{0} ġimgħat"},
|
||
"month": "xahar",
|
||
"months": {"dual": "{0} xahrejn", "plural": "{0} xhur"},
|
||
"year": "sena",
|
||
"years": {"dual": "{0} sentejn", "plural": "{0} snin"},
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"Jannar",
|
||
"Frar",
|
||
"Marzu",
|
||
"April",
|
||
"Mejju",
|
||
"Ġunju",
|
||
"Lulju",
|
||
"Awwissu",
|
||
"Settembru",
|
||
"Ottubru",
|
||
"Novembru",
|
||
"Diċembru",
|
||
]
|
||
|
||
month_abbreviations = [
|
||
"",
|
||
"Jan",
|
||
"Fr",
|
||
"Mar",
|
||
"Apr",
|
||
"Mejju",
|
||
"Ġun",
|
||
"Lul",
|
||
"Aw",
|
||
"Sett",
|
||
"Ott",
|
||
"Nov",
|
||
"Diċ",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"It-Tnejn",
|
||
"It-Tlieta",
|
||
"L-Erbgħa",
|
||
"Il-Ħamis",
|
||
"Il-Ġimgħa",
|
||
"Is-Sibt",
|
||
"Il-Ħadd",
|
||
]
|
||
|
||
day_abbreviations = [
|
||
"",
|
||
"T",
|
||
"TL",
|
||
"E",
|
||
"Ħ",
|
||
"Ġ",
|
||
"S",
|
||
"Ħ",
|
||
]
|
||
|
||
def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str:
|
||
form = self.timeframes[timeframe]
|
||
delta = abs(delta)
|
||
if isinstance(form, Mapping):
|
||
if delta == 2:
|
||
form = form["dual"]
|
||
else:
|
||
form = form["plural"]
|
||
|
||
return form.format(delta)
|
||
|
||
|
||
class SamiLocale(Locale):
|
||
names = ["se", "se-fi", "se-no", "se-se"]
|
||
|
||
past = "{0} dassái"
|
||
future = "{0} " # NOTE: couldn't find preposition for Sami here, none needed?
|
||
|
||
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
|
||
"now": "dál",
|
||
"second": "sekunda",
|
||
"seconds": "{0} sekundda",
|
||
"minute": "minuhta",
|
||
"minutes": "{0} minuhta",
|
||
"hour": "diimmu",
|
||
"hours": "{0} diimmu",
|
||
"day": "beaivvi",
|
||
"days": "{0} beaivvi",
|
||
"week": "vahku",
|
||
"weeks": "{0} vahku",
|
||
"month": "mánu",
|
||
"months": "{0} mánu",
|
||
"year": "jagi",
|
||
"years": "{0} jagi",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"Ođđajagimánnu",
|
||
"Guovvamánnu",
|
||
"Njukčamánnu",
|
||
"Cuoŋománnu",
|
||
"Miessemánnu",
|
||
"Geassemánnu",
|
||
"Suoidnemánnu",
|
||
"Borgemánnu",
|
||
"Čakčamánnu",
|
||
"Golggotmánnu",
|
||
"Skábmamánnu",
|
||
"Juovlamánnu",
|
||
]
|
||
|
||
month_abbreviations = [
|
||
"",
|
||
"Ođđajagimánnu",
|
||
"Guovvamánnu",
|
||
"Njukčamánnu",
|
||
"Cuoŋománnu",
|
||
"Miessemánnu",
|
||
"Geassemánnu",
|
||
"Suoidnemánnu",
|
||
"Borgemánnu",
|
||
"Čakčamánnu",
|
||
"Golggotmánnu",
|
||
"Skábmamánnu",
|
||
"Juovlamánnu",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"Mánnodat",
|
||
"Disdat",
|
||
"Gaskavahkku",
|
||
"Duorastat",
|
||
"Bearjadat",
|
||
"Lávvordat",
|
||
"Sotnabeaivi",
|
||
]
|
||
|
||
day_abbreviations = [
|
||
"",
|
||
"Mánnodat",
|
||
"Disdat",
|
||
"Gaskavahkku",
|
||
"Duorastat",
|
||
"Bearjadat",
|
||
"Lávvordat",
|
||
"Sotnabeaivi",
|
||
]
|
||
|
||
|
||
class OdiaLocale(Locale):
|
||
names = ["or", "or-in"]
|
||
|
||
past = "{0} ପୂର୍ବେ"
|
||
future = "{0} ପରେ"
|
||
|
||
timeframes = {
|
||
"now": "ବର୍ତ୍ତମାନ",
|
||
"second": "ଏକ ସେକେଣ୍ଡ",
|
||
"seconds": "{0} ସେକେଣ୍ଡ",
|
||
"minute": "ଏକ ମିନଟ",
|
||
"minutes": "{0} ମିନଟ",
|
||
"hour": "ଏକ ଘଣ୍ଟା",
|
||
"hours": "{0} ଘଣ୍ଟା",
|
||
"day": "ଏକ ଦିନ",
|
||
"days": "{0} ଦିନ",
|
||
"month": "ଏକ ମାସ",
|
||
"months": "{0} ମାସ ",
|
||
"year": "ଏକ ବର୍ଷ",
|
||
"years": "{0} ବର୍ଷ",
|
||
}
|
||
|
||
meridians = {"am": "ପୂର୍ବାହ୍ନ", "pm": "ଅପରାହ୍ନ", "AM": "ପୂର୍ବାହ୍ନ", "PM": "ଅପରାହ୍ନ"}
|
||
|
||
month_names = [
|
||
"",
|
||
"ଜାନୁଆରୀ",
|
||
"ଫେବୃଆରୀ",
|
||
"ମାର୍ଚ୍ଚ୍",
|
||
"ଅପ୍ରେଲ",
|
||
"ମଇ",
|
||
"ଜୁନ୍",
|
||
"ଜୁଲାଇ",
|
||
"ଅଗଷ୍ଟ",
|
||
"ସେପ୍ଟେମ୍ବର",
|
||
"ଅକ୍ଟୋବର୍",
|
||
"ନଭେମ୍ବର୍",
|
||
"ଡିସେମ୍ବର୍",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"ଜାନୁ",
|
||
"ଫେବୃ",
|
||
"ମାର୍ଚ୍ଚ୍",
|
||
"ଅପ୍ରେ",
|
||
"ମଇ",
|
||
"ଜୁନ୍",
|
||
"ଜୁଲା",
|
||
"ଅଗ",
|
||
"ସେପ୍ଟେ",
|
||
"ଅକ୍ଟୋ",
|
||
"ନଭେ",
|
||
"ଡିସେ",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"ସୋମବାର",
|
||
"ମଙ୍ଗଳବାର",
|
||
"ବୁଧବାର",
|
||
"ଗୁରୁବାର",
|
||
"ଶୁକ୍ରବାର",
|
||
"ଶନିବାର",
|
||
"ରବିବାର",
|
||
]
|
||
day_abbreviations = [
|
||
"",
|
||
"ସୋମ",
|
||
"ମଙ୍ଗଳ",
|
||
"ବୁଧ",
|
||
"ଗୁରୁ",
|
||
"ଶୁକ୍ର",
|
||
"ଶନି",
|
||
"ରବି",
|
||
]
|
||
|
||
def _ordinal_number(self, n: int) -> str:
|
||
if n > 10 or n == 0:
|
||
return f"{n}ତମ"
|
||
if n in [1, 5, 7, 8, 9, 10]:
|
||
return f"{n}ମ"
|
||
if n in [2, 3]:
|
||
return f"{n}ୟ"
|
||
if n == 4:
|
||
return f"{n}ର୍ଥ"
|
||
if n == 6:
|
||
return f"{n}ଷ୍ଠ"
|
||
return ""
|
||
|
||
|
||
class SerbianLocale(Locale):
|
||
names = ["sr", "sr-rs", "sr-sp"]
|
||
|
||
past = "pre {0}"
|
||
future = "za {0}"
|
||
and_word = "i"
|
||
|
||
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
|
||
"now": "sada",
|
||
"second": "sekundu",
|
||
"seconds": {"double": "{0} sekunde", "higher": "{0} sekundi"},
|
||
"minute": "minutu",
|
||
"minutes": {"double": "{0} minute", "higher": "{0} minuta"},
|
||
"hour": "sat",
|
||
"hours": {"double": "{0} sata", "higher": "{0} sati"},
|
||
"day": "dan",
|
||
"days": {"double": "{0} dana", "higher": "{0} dana"},
|
||
"week": "nedelju",
|
||
"weeks": {"double": "{0} nedelje", "higher": "{0} nedelja"},
|
||
"month": "mesec",
|
||
"months": {"double": "{0} meseca", "higher": "{0} meseci"},
|
||
"year": "godinu",
|
||
"years": {"double": "{0} godine", "higher": "{0} godina"},
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"januar", # јануар
|
||
"februar", # фебруар
|
||
"mart", # март
|
||
"april", # април
|
||
"maj", # мај
|
||
"jun", # јун
|
||
"jul", # јул
|
||
"avgust", # август
|
||
"septembar", # септембар
|
||
"oktobar", # октобар
|
||
"novembar", # новембар
|
||
"decembar", # децембар
|
||
]
|
||
|
||
month_abbreviations = [
|
||
"",
|
||
"jan",
|
||
"feb",
|
||
"mar",
|
||
"apr",
|
||
"maj",
|
||
"jun",
|
||
"jul",
|
||
"avg",
|
||
"sep",
|
||
"okt",
|
||
"nov",
|
||
"dec",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"ponedeljak", # понедељак
|
||
"utorak", # уторак
|
||
"sreda", # среда
|
||
"četvrtak", # четвртак
|
||
"petak", # петак
|
||
"subota", # субота
|
||
"nedelja", # недеља
|
||
]
|
||
|
||
day_abbreviations = [
|
||
"",
|
||
"po", # по
|
||
"ut", # ут
|
||
"sr", # ср
|
||
"če", # че
|
||
"pe", # пе
|
||
"su", # су
|
||
"ne", # не
|
||
]
|
||
|
||
def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str:
|
||
form = self.timeframes[timeframe]
|
||
delta = abs(delta)
|
||
if isinstance(form, Mapping):
|
||
if 1 < delta <= 4:
|
||
form = form["double"]
|
||
else:
|
||
form = form["higher"]
|
||
|
||
return form.format(delta)
|
||
|
||
|
||
class LuxembourgishLocale(Locale):
|
||
names = ["lb", "lb-lu"]
|
||
|
||
past = "virun {0}"
|
||
future = "an {0}"
|
||
and_word = "an"
|
||
|
||
timeframes: ClassVar[Dict[TimeFrameLiteral, str]] = {
|
||
"now": "just elo",
|
||
"second": "enger Sekonn",
|
||
"seconds": "{0} Sekonnen",
|
||
"minute": "enger Minutt",
|
||
"minutes": "{0} Minutten",
|
||
"hour": "enger Stonn",
|
||
"hours": "{0} Stonnen",
|
||
"day": "engem Dag",
|
||
"days": "{0} Deeg",
|
||
"week": "enger Woch",
|
||
"weeks": "{0} Wochen",
|
||
"month": "engem Mount",
|
||
"months": "{0} Méint",
|
||
"year": "engem Joer",
|
||
"years": "{0} Jahren",
|
||
}
|
||
|
||
timeframes_only_distance = timeframes.copy()
|
||
timeframes_only_distance["second"] = "eng Sekonn"
|
||
timeframes_only_distance["minute"] = "eng Minutt"
|
||
timeframes_only_distance["hour"] = "eng Stonn"
|
||
timeframes_only_distance["day"] = "een Dag"
|
||
timeframes_only_distance["days"] = "{0} Deeg"
|
||
timeframes_only_distance["week"] = "eng Woch"
|
||
timeframes_only_distance["month"] = "ee Mount"
|
||
timeframes_only_distance["months"] = "{0} Méint"
|
||
timeframes_only_distance["year"] = "ee Joer"
|
||
timeframes_only_distance["years"] = "{0} Joer"
|
||
|
||
month_names = [
|
||
"",
|
||
"Januar",
|
||
"Februar",
|
||
"Mäerz",
|
||
"Abrëll",
|
||
"Mee",
|
||
"Juni",
|
||
"Juli",
|
||
"August",
|
||
"September",
|
||
"Oktouber",
|
||
"November",
|
||
"Dezember",
|
||
]
|
||
|
||
month_abbreviations = [
|
||
"",
|
||
"Jan",
|
||
"Feb",
|
||
"Mäe",
|
||
"Abr",
|
||
"Mee",
|
||
"Jun",
|
||
"Jul",
|
||
"Aug",
|
||
"Sep",
|
||
"Okt",
|
||
"Nov",
|
||
"Dez",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"Méindeg",
|
||
"Dënschdeg",
|
||
"Mëttwoch",
|
||
"Donneschdeg",
|
||
"Freideg",
|
||
"Samschdeg",
|
||
"Sonndeg",
|
||
]
|
||
|
||
day_abbreviations = ["", "Méi", "Dën", "Mët", "Don", "Fre", "Sam", "Son"]
|
||
|
||
def _ordinal_number(self, n: int) -> str:
|
||
return f"{n}."
|
||
|
||
def describe(
|
||
self,
|
||
timeframe: TimeFrameLiteral,
|
||
delta: Union[int, float] = 0,
|
||
only_distance: bool = False,
|
||
) -> str:
|
||
if not only_distance:
|
||
return super().describe(timeframe, delta, only_distance)
|
||
|
||
# Luxembourgish uses a different case without 'in' or 'ago'
|
||
humanized: str = self.timeframes_only_distance[timeframe].format(
|
||
trunc(abs(delta))
|
||
)
|
||
|
||
return humanized
|
||
|
||
|
||
class ZuluLocale(Locale):
|
||
names = ["zu", "zu-za"]
|
||
|
||
past = "{0} edlule"
|
||
future = "{0} "
|
||
and_word = "futhi"
|
||
|
||
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[Mapping[str, str], str]]] = {
|
||
"now": "manje",
|
||
"second": {"past": "umzuzwana", "future": "ngomzuzwana"},
|
||
"seconds": {"past": "{0} imizuzwana", "future": "{0} ngemizuzwana"},
|
||
"minute": {"past": "umzuzu", "future": "ngomzuzu"},
|
||
"minutes": {"past": "{0} imizuzu", "future": "{0} ngemizuzu"},
|
||
"hour": {"past": "ihora", "future": "ngehora"},
|
||
"hours": {"past": "{0} amahora", "future": "{0} emahoreni"},
|
||
"day": {"past": "usuku", "future": "ngosuku"},
|
||
"days": {"past": "{0} izinsuku", "future": "{0} ezinsukwini"},
|
||
"week": {"past": "isonto", "future": "ngesonto"},
|
||
"weeks": {"past": "{0} amasonto", "future": "{0} emasontweni"},
|
||
"month": {"past": "inyanga", "future": "ngenyanga"},
|
||
"months": {"past": "{0} izinyanga", "future": "{0} ezinyangeni"},
|
||
"year": {"past": "unyaka", "future": "ngonyak"},
|
||
"years": {"past": "{0} iminyaka", "future": "{0} eminyakeni"},
|
||
}
|
||
|
||
def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str:
|
||
"""Zulu aware time frame format function, takes into account
|
||
the differences between past and future forms."""
|
||
abs_delta = abs(delta)
|
||
form = self.timeframes[timeframe]
|
||
|
||
if isinstance(form, str):
|
||
return form.format(abs_delta)
|
||
|
||
if delta > 0:
|
||
key = "future"
|
||
else:
|
||
key = "past"
|
||
form = form[key]
|
||
|
||
return form.format(abs_delta)
|
||
|
||
month_names = [
|
||
"",
|
||
"uMasingane",
|
||
"uNhlolanja",
|
||
"uNdasa",
|
||
"UMbasa",
|
||
"UNhlaba",
|
||
"UNhlangulana",
|
||
"uNtulikazi",
|
||
"UNcwaba",
|
||
"uMandulo",
|
||
"uMfumfu",
|
||
"uLwezi",
|
||
"uZibandlela",
|
||
]
|
||
|
||
month_abbreviations = [
|
||
"",
|
||
"uMasingane",
|
||
"uNhlolanja",
|
||
"uNdasa",
|
||
"UMbasa",
|
||
"UNhlaba",
|
||
"UNhlangulana",
|
||
"uNtulikazi",
|
||
"UNcwaba",
|
||
"uMandulo",
|
||
"uMfumfu",
|
||
"uLwezi",
|
||
"uZibandlela",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"uMsombuluko",
|
||
"uLwesibili",
|
||
"uLwesithathu",
|
||
"uLwesine",
|
||
"uLwesihlanu",
|
||
"uMgqibelo",
|
||
"iSonto",
|
||
]
|
||
|
||
day_abbreviations = [
|
||
"",
|
||
"uMsombuluko",
|
||
"uLwesibili",
|
||
"uLwesithathu",
|
||
"uLwesine",
|
||
"uLwesihlanu",
|
||
"uMgqibelo",
|
||
"iSonto",
|
||
]
|
||
|
||
|
||
class TamilLocale(Locale):
|
||
names = ["ta", "ta-in", "ta-lk"]
|
||
|
||
past = "{0} நேரத்திற்கு முன்பு"
|
||
future = "இல் {0}"
|
||
|
||
timeframes = {
|
||
"now": "இப்போது",
|
||
"second": "ஒரு இரண்டாவது",
|
||
"seconds": "{0} விநாடிகள்",
|
||
"minute": "ஒரு நிமிடம்",
|
||
"minutes": "{0} நிமிடங்கள்",
|
||
"hour": "ஒரு மணி",
|
||
"hours": "{0} மணிநேரம்",
|
||
"day": "ஒரு நாள்",
|
||
"days": "{0} நாட்கள்",
|
||
"week": "ஒரு வாரம்",
|
||
"weeks": "{0} வாரங்கள்",
|
||
"month": "ஒரு மாதம்",
|
||
"months": "{0} மாதங்கள்",
|
||
"year": "ஒரு ஆண்டு",
|
||
"years": "{0} ஆண்டுகள்",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"சித்திரை",
|
||
"வைகாசி",
|
||
"ஆனி",
|
||
"ஆடி",
|
||
"ஆவணி",
|
||
"புரட்டாசி",
|
||
"ஐப்பசி",
|
||
"கார்த்திகை",
|
||
"மார்கழி",
|
||
"தை",
|
||
"மாசி",
|
||
"பங்குனி",
|
||
]
|
||
|
||
month_abbreviations = [
|
||
"",
|
||
"ஜன",
|
||
"பிப்",
|
||
"மார்",
|
||
"ஏப்",
|
||
"மே",
|
||
"ஜூன்",
|
||
"ஜூலை",
|
||
"ஆக",
|
||
"செப்",
|
||
"அக்",
|
||
"நவ",
|
||
"டிச",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"திங்கட்கிழமை",
|
||
"செவ்வாய்க்கிழமை",
|
||
"புதன்கிழமை",
|
||
"வியாழக்கிழமை",
|
||
"வெள்ளிக்கிழமை",
|
||
"சனிக்கிழமை",
|
||
"ஞாயிற்றுக்கிழமை",
|
||
]
|
||
|
||
day_abbreviations = [
|
||
"",
|
||
"திங்கட்",
|
||
"செவ்வாய்",
|
||
"புதன்",
|
||
"வியாழன்",
|
||
"வெள்ளி",
|
||
"சனி",
|
||
"ஞாயிறு",
|
||
]
|
||
|
||
def _ordinal_number(self, n: int) -> str:
|
||
if n == 1:
|
||
return f"{n}வது"
|
||
elif n >= 0:
|
||
return f"{n}ஆம்"
|
||
else:
|
||
return ""
|
||
|
||
|
||
class AlbanianLocale(Locale):
|
||
names = ["sq", "sq-al"]
|
||
|
||
past = "{0} më parë"
|
||
future = "në {0}"
|
||
and_word = "dhe"
|
||
|
||
timeframes = {
|
||
"now": "tani",
|
||
"second": "sekondë",
|
||
"seconds": "{0} sekonda",
|
||
"minute": "minutë",
|
||
"minutes": "{0} minuta",
|
||
"hour": "orë",
|
||
"hours": "{0} orë",
|
||
"day": "ditë",
|
||
"days": "{0} ditë",
|
||
"week": "javë",
|
||
"weeks": "{0} javë",
|
||
"month": "muaj",
|
||
"months": "{0} muaj",
|
||
"year": "vit",
|
||
"years": "{0} vjet",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"janar",
|
||
"shkurt",
|
||
"mars",
|
||
"prill",
|
||
"maj",
|
||
"qershor",
|
||
"korrik",
|
||
"gusht",
|
||
"shtator",
|
||
"tetor",
|
||
"nëntor",
|
||
"dhjetor",
|
||
]
|
||
|
||
month_abbreviations = [
|
||
"",
|
||
"jan",
|
||
"shk",
|
||
"mar",
|
||
"pri",
|
||
"maj",
|
||
"qer",
|
||
"korr",
|
||
"gush",
|
||
"sht",
|
||
"tet",
|
||
"nën",
|
||
"dhj",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"e hënë",
|
||
"e martë",
|
||
"e mërkurë",
|
||
"e enjte",
|
||
"e premte",
|
||
"e shtunë",
|
||
"e diel",
|
||
]
|
||
|
||
day_abbreviations = [
|
||
"",
|
||
"hën",
|
||
"mar",
|
||
"mër",
|
||
"enj",
|
||
"pre",
|
||
"sht",
|
||
"die",
|
||
]
|
||
|
||
|
||
class GeorgianLocale(Locale):
|
||
names = ["ka", "ka-ge"]
|
||
|
||
past = "{0} წინ" # ts’in
|
||
future = "{0} შემდეგ" # shemdeg
|
||
and_word = "და" # da
|
||
|
||
timeframes = {
|
||
"now": "ახლა", # akhla
|
||
# When a cardinal qualifies a noun, it stands in the singular
|
||
"second": "წამის", # ts’amis
|
||
"seconds": "{0} წამის",
|
||
"minute": "წუთის", # ts’utis
|
||
"minutes": "{0} წუთის",
|
||
"hour": "საათის", # saatis
|
||
"hours": "{0} საათის",
|
||
"day": "დღის", # dghis
|
||
"days": "{0} დღის",
|
||
"week": "კვირის", # k’viris
|
||
"weeks": "{0} კვირის",
|
||
"month": "თვის", # tvis
|
||
"months": "{0} თვის",
|
||
"year": "წლის", # ts’lis
|
||
"years": "{0} წლის",
|
||
}
|
||
|
||
month_names = [
|
||
# modern month names
|
||
"",
|
||
"იანვარი", # Ianvari
|
||
"თებერვალი", # Tebervali
|
||
"მარტი", # Mart'i
|
||
"აპრილი", # Ap'rili
|
||
"მაისი", # Maisi
|
||
"ივნისი", # Ivnisi
|
||
"ივლისი", # Ivlisi
|
||
"აგვისტო", # Agvist'o
|
||
"სექტემბერი", # Sekt'emberi
|
||
"ოქტომბერი", # Okt'omberi
|
||
"ნოემბერი", # Noemberi
|
||
"დეკემბერი", # Dek'emberi
|
||
]
|
||
|
||
month_abbreviations = [
|
||
# no abbr. found yet
|
||
"",
|
||
"იანვარი", # Ianvari
|
||
"თებერვალი", # Tebervali
|
||
"მარტი", # Mart'i
|
||
"აპრილი", # Ap'rili
|
||
"მაისი", # Maisi
|
||
"ივნისი", # Ivnisi
|
||
"ივლისი", # Ivlisi
|
||
"აგვისტო", # Agvist'o
|
||
"სექტემბერი", # Sekt'emberi
|
||
"ოქტომბერი", # Okt'omberi
|
||
"ნოემბერი", # Noemberi
|
||
"დეკემბერი", # Dek'emberi
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"ორშაბათი", # orshabati
|
||
"სამშაბათი", # samshabati
|
||
"ოთხშაბათი", # otkhshabati
|
||
"ხუთშაბათი", # khutshabati
|
||
"პარასკევი", # p’arask’evi
|
||
"შაბათი", # shabati
|
||
# "k’vira" also serves as week; to avoid confusion "k’vira-dge" can be used for Sunday
|
||
"კვირა", # k’vira
|
||
]
|
||
|
||
day_abbreviations = [
|
||
"",
|
||
"ორშაბათი", # orshabati
|
||
"სამშაბათი", # samshabati
|
||
"ოთხშაბათი", # otkhshabati
|
||
"ხუთშაბათი", # khutshabati
|
||
"პარასკევი", # p’arask’evi
|
||
"შაბათი", # shabati
|
||
"კვირა", # k’vira
|
||
]
|
||
|
||
|
||
class SinhalaLocale(Locale):
|
||
names = ["si", "si-lk"]
|
||
|
||
past = "{0}ට පෙර"
|
||
future = "{0}"
|
||
and_word = "සහ"
|
||
|
||
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[Mapping[str, str], str]]] = {
|
||
"now": "දැන්",
|
||
"second": {
|
||
"past": "තත්පරයක",
|
||
"future": "තත්පරයකින්",
|
||
}, # ක් is the article
|
||
"seconds": {
|
||
"past": "තත්පර {0} ක",
|
||
"future": "තත්පර {0} කින්",
|
||
},
|
||
"minute": {
|
||
"past": "විනාඩියක",
|
||
"future": "විනාඩියකින්",
|
||
},
|
||
"minutes": {
|
||
"past": "විනාඩි {0} ක",
|
||
"future": "මිනිත්තු {0} කින්",
|
||
},
|
||
"hour": {"past": "පැයක", "future": "පැයකින්"},
|
||
"hours": {
|
||
"past": "පැය {0} ක",
|
||
"future": "පැය {0} කින්",
|
||
},
|
||
"day": {"past": "දිනක", "future": "දිනකට"},
|
||
"days": {
|
||
"past": "දින {0} ක",
|
||
"future": "දින {0} කින්",
|
||
},
|
||
"week": {"past": "සතියක", "future": "සතියකින්"},
|
||
"weeks": {
|
||
"past": "සති {0} ක",
|
||
"future": "සති {0} කින්",
|
||
},
|
||
"month": {"past": "මාසයක", "future": "එය මාසය තුළ"},
|
||
"months": {
|
||
"past": "මාස {0} ක",
|
||
"future": "මාස {0} කින්",
|
||
},
|
||
"year": {"past": "වසරක", "future": "වසරක් තුළ"},
|
||
"years": {
|
||
"past": "අවුරුදු {0} ක",
|
||
"future": "අවුරුදු {0} තුළ",
|
||
},
|
||
}
|
||
# Sinhala: the general format to describe timeframe is different from past and future,
|
||
# so we do not copy the original timeframes dictionary
|
||
timeframes_only_distance = {}
|
||
timeframes_only_distance["second"] = "තත්පරයක්"
|
||
timeframes_only_distance["seconds"] = "තත්පර {0}"
|
||
timeframes_only_distance["minute"] = "මිනිත්තුවක්"
|
||
timeframes_only_distance["minutes"] = "විනාඩි {0}"
|
||
timeframes_only_distance["hour"] = "පැයක්"
|
||
timeframes_only_distance["hours"] = "පැය {0}"
|
||
timeframes_only_distance["day"] = "දවසක්"
|
||
timeframes_only_distance["days"] = "දවස් {0}"
|
||
timeframes_only_distance["week"] = "සතියක්"
|
||
timeframes_only_distance["weeks"] = "සති {0}"
|
||
timeframes_only_distance["month"] = "මාසයක්"
|
||
timeframes_only_distance["months"] = "මාස {0}"
|
||
timeframes_only_distance["year"] = "අවුරුද්දක්"
|
||
timeframes_only_distance["years"] = "අවුරුදු {0}"
|
||
|
||
def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str:
|
||
"""
|
||
Sinhala awares time frame format function, takes into account
|
||
the differences between general, past, and future forms (three different suffixes).
|
||
"""
|
||
abs_delta = abs(delta)
|
||
form = self.timeframes[timeframe]
|
||
|
||
if isinstance(form, str):
|
||
return form.format(abs_delta)
|
||
|
||
if delta > 0:
|
||
key = "future"
|
||
else:
|
||
key = "past"
|
||
form = form[key]
|
||
|
||
return form.format(abs_delta)
|
||
|
||
def describe(
|
||
self,
|
||
timeframe: TimeFrameLiteral,
|
||
delta: Union[float, int] = 1, # key is always future when only_distance=False
|
||
only_distance: bool = False,
|
||
) -> str:
|
||
"""Describes a delta within a timeframe in plain language.
|
||
|
||
:param timeframe: a string representing a timeframe.
|
||
:param delta: a quantity representing a delta in a timeframe.
|
||
:param only_distance: return only distance eg: "11 seconds" without "in" or "ago" keywords
|
||
"""
|
||
|
||
if not only_distance:
|
||
return super().describe(timeframe, delta, only_distance)
|
||
# Sinhala uses a different case without 'in' or 'ago'
|
||
humanized = self.timeframes_only_distance[timeframe].format(trunc(abs(delta)))
|
||
|
||
return humanized
|
||
|
||
month_names = [
|
||
"",
|
||
"ජනවාරි",
|
||
"පෙබරවාරි",
|
||
"මාර්තු",
|
||
"අප්රේල්",
|
||
"මැයි",
|
||
"ජූනි",
|
||
"ජූලි",
|
||
"අගෝස්තු",
|
||
"සැප්තැම්බර්",
|
||
"ඔක්තෝබර්",
|
||
"නොවැම්බර්",
|
||
"දෙසැම්බර්",
|
||
]
|
||
|
||
month_abbreviations = [
|
||
"",
|
||
"ජන",
|
||
"පෙබ",
|
||
"මාර්",
|
||
"අප්රේ",
|
||
"මැයි",
|
||
"ජුනි",
|
||
"ජූලි",
|
||
"අගෝ",
|
||
"සැප්",
|
||
"ඔක්",
|
||
"නොවැ",
|
||
"දෙසැ",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"සදුදා",
|
||
"අඟහරැවදා",
|
||
"බදාදා",
|
||
"බ්රහස්පතින්දා",
|
||
"සිකුරාදා",
|
||
"සෙනසුරාදා",
|
||
"ඉරිදා",
|
||
]
|
||
|
||
day_abbreviations = [
|
||
"",
|
||
"සදුද",
|
||
"බදා",
|
||
"බදා",
|
||
"සිකු",
|
||
"සෙන",
|
||
"අ",
|
||
"ඉරිදා",
|
||
]
|
||
|
||
|
||
class UrduLocale(Locale):
|
||
names = ["ur", "ur-pk"]
|
||
|
||
past = "پہلے {0}"
|
||
future = "میں {0}"
|
||
and_word = "اور"
|
||
|
||
timeframes = {
|
||
"now": "ابھی",
|
||
"second": "ایک سیکنڈ",
|
||
"seconds": "{0} سیکنڈ",
|
||
"minute": "ایک منٹ",
|
||
"minutes": "{0} منٹ",
|
||
"hour": "ایک گھنٹے",
|
||
"hours": "{0} گھنٹے",
|
||
"day": "ایک دن",
|
||
"days": "{0} دن",
|
||
"week": "ایک ہفتے",
|
||
"weeks": "{0} ہفتے",
|
||
"month": "ایک مہینہ",
|
||
"months": "{0} ماہ",
|
||
"year": "ایک سال",
|
||
"years": "{0} سال",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"جنوری",
|
||
"فروری",
|
||
"مارچ",
|
||
"اپریل",
|
||
"مئی",
|
||
"جون",
|
||
"جولائی",
|
||
"اگست",
|
||
"ستمبر",
|
||
"اکتوبر",
|
||
"نومبر",
|
||
"دسمبر",
|
||
]
|
||
|
||
month_abbreviations = [
|
||
"",
|
||
"جنوری",
|
||
"فروری",
|
||
"مارچ",
|
||
"اپریل",
|
||
"مئی",
|
||
"جون",
|
||
"جولائی",
|
||
"اگست",
|
||
"ستمبر",
|
||
"اکتوبر",
|
||
"نومبر",
|
||
"دسمبر",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"سوموار",
|
||
"منگل",
|
||
"بدھ",
|
||
"جمعرات",
|
||
"جمعہ",
|
||
"ہفتہ",
|
||
"اتوار",
|
||
]
|
||
|
||
day_abbreviations = [
|
||
"",
|
||
"سوموار",
|
||
"منگل",
|
||
"بدھ",
|
||
"جمعرات",
|
||
"جمعہ",
|
||
"ہفتہ",
|
||
"اتوار",
|
||
]
|
||
|
||
|
||
class KazakhLocale(Locale):
|
||
names = ["kk", "kk-kz"]
|
||
|
||
past = "{0} бұрын"
|
||
future = "{0} кейін"
|
||
timeframes = {
|
||
"now": "қазір",
|
||
"second": "бір секунд",
|
||
"seconds": "{0} секунд",
|
||
"minute": "бір минут",
|
||
"minutes": "{0} минут",
|
||
"hour": "бір сағат",
|
||
"hours": "{0} сағат",
|
||
"day": "бір күн",
|
||
"days": "{0} күн",
|
||
"week": "бір апта",
|
||
"weeks": "{0} апта",
|
||
"month": "бір ай",
|
||
"months": "{0} ай",
|
||
"year": "бір жыл",
|
||
"years": "{0} жыл",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"Қаңтар",
|
||
"Ақпан",
|
||
"Наурыз",
|
||
"Сәуір",
|
||
"Мамыр",
|
||
"Маусым",
|
||
"Шілде",
|
||
"Тамыз",
|
||
"Қыркүйек",
|
||
"Қазан",
|
||
"Қараша",
|
||
"Желтоқсан",
|
||
]
|
||
month_abbreviations = [
|
||
"",
|
||
"Қан",
|
||
"Ақп",
|
||
"Нау",
|
||
"Сәу",
|
||
"Мам",
|
||
"Мау",
|
||
"Шіл",
|
||
"Там",
|
||
"Қыр",
|
||
"Қаз",
|
||
"Қар",
|
||
"Жел",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"Дүйсембі",
|
||
"Сейсенбі",
|
||
"Сәрсенбі",
|
||
"Бейсенбі",
|
||
"Жұма",
|
||
"Сенбі",
|
||
"Жексенбі",
|
||
]
|
||
day_abbreviations = ["", "Дс", "Сс", "Ср", "Бс", "Жм", "Сб", "Жс"]
|
||
|
||
|
||
class AmharicLocale(Locale):
|
||
names = ["am", "am-et"]
|
||
|
||
past = "{0} በፊት"
|
||
future = "{0} ውስጥ"
|
||
and_word = "እና"
|
||
|
||
timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[Mapping[str, str], str]]] = {
|
||
"now": "አሁን",
|
||
"second": {
|
||
"past": "ከአንድ ሰከንድ",
|
||
"future": "በአንድ ሰከንድ",
|
||
},
|
||
"seconds": {
|
||
"past": "ከ {0} ሰከንድ",
|
||
"future": "በ {0} ሰከንድ",
|
||
},
|
||
"minute": {
|
||
"past": "ከአንድ ደቂቃ",
|
||
"future": "በአንድ ደቂቃ",
|
||
},
|
||
"minutes": {
|
||
"past": "ከ {0} ደቂቃዎች",
|
||
"future": "በ {0} ደቂቃዎች",
|
||
},
|
||
"hour": {
|
||
"past": "ከአንድ ሰዓት",
|
||
"future": "በአንድ ሰዓት",
|
||
},
|
||
"hours": {
|
||
"past": "ከ {0} ሰዓታት",
|
||
"future": "በ {0} ሰከንድ",
|
||
},
|
||
"day": {
|
||
"past": "ከአንድ ቀን",
|
||
"future": "በአንድ ቀን",
|
||
},
|
||
"days": {
|
||
"past": "ከ {0} ቀናት",
|
||
"future": "በ {0} ቀናት",
|
||
},
|
||
"week": {
|
||
"past": "ከአንድ ሳምንት",
|
||
"future": "በአንድ ሳምንት",
|
||
},
|
||
"weeks": {
|
||
"past": "ከ {0} ሳምንታት",
|
||
"future": "በ {0} ሳምንታት",
|
||
},
|
||
"month": {
|
||
"past": "ከአንድ ወር",
|
||
"future": "በአንድ ወር",
|
||
},
|
||
"months": {
|
||
"past": "ከ {0} ወር",
|
||
"future": "በ {0} ወራት",
|
||
},
|
||
"year": {
|
||
"past": "ከአንድ አመት",
|
||
"future": "በአንድ አመት",
|
||
},
|
||
"years": {
|
||
"past": "ከ {0} ዓመታት",
|
||
"future": "በ {0} ዓመታት",
|
||
},
|
||
}
|
||
# Amharic: the general format to describe timeframe is different from past and future,
|
||
# so we do not copy the original timeframes dictionary
|
||
timeframes_only_distance = {
|
||
"second": "አንድ ሰከንድ",
|
||
"seconds": "{0} ሰከንድ",
|
||
"minute": "አንድ ደቂቃ",
|
||
"minutes": "{0} ደቂቃዎች",
|
||
"hour": "አንድ ሰዓት",
|
||
"hours": "{0} ሰዓት",
|
||
"day": "አንድ ቀን",
|
||
"days": "{0} ቀናት",
|
||
"week": "አንድ ሳምንት",
|
||
"weeks": "{0} ሳምንት",
|
||
"month": "አንድ ወር",
|
||
"months": "{0} ወራት",
|
||
"year": "አንድ አመት",
|
||
"years": "{0} ዓመታት",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"ጃንዩወሪ",
|
||
"ፌብሩወሪ",
|
||
"ማርች",
|
||
"ኤፕሪል",
|
||
"ሜይ",
|
||
"ጁን",
|
||
"ጁላይ",
|
||
"ኦገስት",
|
||
"ሴፕቴምበር",
|
||
"ኦክቶበር",
|
||
"ኖቬምበር",
|
||
"ዲሴምበር",
|
||
]
|
||
|
||
month_abbreviations = [
|
||
"",
|
||
"ጃንዩ",
|
||
"ፌብሩ",
|
||
"ማርች",
|
||
"ኤፕሪ",
|
||
"ሜይ",
|
||
"ጁን",
|
||
"ጁላይ",
|
||
"ኦገስ",
|
||
"ሴፕቴ",
|
||
"ኦክቶ",
|
||
"ኖቬም",
|
||
"ዲሴም",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"ሰኞ",
|
||
"ማክሰኞ",
|
||
"ረቡዕ",
|
||
"ሐሙስ",
|
||
"ዓርብ",
|
||
"ቅዳሜ",
|
||
"እሑድ",
|
||
]
|
||
day_abbreviations = ["", "እ", "ሰ", "ማ", "ረ", "ሐ", "ዓ", "ቅ"]
|
||
|
||
def _ordinal_number(self, n: int) -> str:
|
||
return f"{n}ኛ"
|
||
|
||
def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str:
|
||
"""
|
||
Amharic awares time frame format function, takes into account
|
||
the differences between general, past, and future forms (three different suffixes).
|
||
"""
|
||
abs_delta = abs(delta)
|
||
form = self.timeframes[timeframe]
|
||
|
||
if isinstance(form, str):
|
||
return form.format(abs_delta)
|
||
|
||
if delta > 0:
|
||
key = "future"
|
||
else:
|
||
key = "past"
|
||
form = form[key]
|
||
|
||
return form.format(abs_delta)
|
||
|
||
def describe(
|
||
self,
|
||
timeframe: TimeFrameLiteral,
|
||
delta: Union[float, int] = 1, # key is always future when only_distance=False
|
||
only_distance: bool = False,
|
||
) -> str:
|
||
"""Describes a delta within a timeframe in plain language.
|
||
|
||
:param timeframe: a string representing a timeframe.
|
||
:param delta: a quantity representing a delta in a timeframe.
|
||
:param only_distance: return only distance eg: "11 seconds" without "in" or "ago" keywords
|
||
"""
|
||
|
||
if not only_distance:
|
||
return super().describe(timeframe, delta, only_distance)
|
||
humanized = self.timeframes_only_distance[timeframe].format(trunc(abs(delta)))
|
||
|
||
return humanized
|
||
|
||
|
||
class ArmenianLocale(Locale):
|
||
names = ["hy", "hy-am"]
|
||
past = "{0} առաջ"
|
||
future = "{0}ից"
|
||
and_word = "Եվ" # Yev
|
||
|
||
timeframes = {
|
||
"now": "հիմա",
|
||
"second": "վայրկյան",
|
||
"seconds": "{0} վայրկյան",
|
||
"minute": "րոպե",
|
||
"minutes": "{0} րոպե",
|
||
"hour": "ժամ",
|
||
"hours": "{0} ժամ",
|
||
"day": "օր",
|
||
"days": "{0} օր",
|
||
"month": "ամիս",
|
||
"months": "{0} ամիս",
|
||
"year": "տարին",
|
||
"years": "{0} տարին",
|
||
"week": "շաբաթ",
|
||
"weeks": "{0} շաբաթ",
|
||
}
|
||
|
||
meridians = {
|
||
"am": "Ամ",
|
||
"pm": "պ.մ.",
|
||
"AM": "Ամ",
|
||
"PM": "պ.մ.",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"հունվար",
|
||
"փետրվար",
|
||
"մարտ",
|
||
"ապրիլ",
|
||
"մայիս",
|
||
"հունիս",
|
||
"հուլիս",
|
||
"օգոստոս",
|
||
"սեպտեմբեր",
|
||
"հոկտեմբեր",
|
||
"նոյեմբեր",
|
||
"դեկտեմբեր",
|
||
]
|
||
|
||
month_abbreviations = [
|
||
"",
|
||
"հունվար",
|
||
"փետրվար",
|
||
"մարտ",
|
||
"ապրիլ",
|
||
"մայիս",
|
||
"հունիս",
|
||
"հուլիս",
|
||
"օգոստոս",
|
||
"սեպտեմբեր",
|
||
"հոկտեմբեր",
|
||
"նոյեմբեր",
|
||
"դեկտեմբեր",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"երկուշաբթի",
|
||
"երեքշաբթի",
|
||
"չորեքշաբթի",
|
||
"հինգշաբթի",
|
||
"ուրբաթ",
|
||
"շաբաթ",
|
||
"կիրակի",
|
||
]
|
||
|
||
day_abbreviations = [
|
||
"",
|
||
"երկ.",
|
||
"երեք.",
|
||
"չորեք.",
|
||
"հինգ.",
|
||
"ուրբ.",
|
||
"շաբ.",
|
||
"կիր.",
|
||
]
|
||
|
||
|
||
class UzbekLocale(Locale):
|
||
names = ["uz", "uz-uz"]
|
||
past = "{0}dan avval"
|
||
future = "{0}dan keyin"
|
||
timeframes = {
|
||
"now": "hozir",
|
||
"second": "bir soniya",
|
||
"seconds": "{0} soniya",
|
||
"minute": "bir daqiqa",
|
||
"minutes": "{0} daqiqa",
|
||
"hour": "bir soat",
|
||
"hours": "{0} soat",
|
||
"day": "bir kun",
|
||
"days": "{0} kun",
|
||
"week": "bir hafta",
|
||
"weeks": "{0} hafta",
|
||
"month": "bir oy",
|
||
"months": "{0} oy",
|
||
"year": "bir yil",
|
||
"years": "{0} yil",
|
||
}
|
||
|
||
month_names = [
|
||
"",
|
||
"Yanvar",
|
||
"Fevral",
|
||
"Mart",
|
||
"Aprel",
|
||
"May",
|
||
"Iyun",
|
||
"Iyul",
|
||
"Avgust",
|
||
"Sentyabr",
|
||
"Oktyabr",
|
||
"Noyabr",
|
||
"Dekabr",
|
||
]
|
||
|
||
month_abbreviations = [
|
||
"",
|
||
"Yan",
|
||
"Fev",
|
||
"Mar",
|
||
"Apr",
|
||
"May",
|
||
"Iyn",
|
||
"Iyl",
|
||
"Avg",
|
||
"Sen",
|
||
"Okt",
|
||
"Noy",
|
||
"Dek",
|
||
]
|
||
|
||
day_names = [
|
||
"",
|
||
"Dushanba",
|
||
"Seshanba",
|
||
"Chorshanba",
|
||
"Payshanba",
|
||
"Juma",
|
||
"Shanba",
|
||
"Yakshanba",
|
||
]
|
||
|
||
day_abbreviations = ["", "Dush", "Sesh", "Chor", "Pay", "Jum", "Shan", "Yak"]
|