6476 lines
153 KiB
Python
6476 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_name, 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": "sekunti",
|
|||
|
"seconds": {"past": "{0} muutama sekunti", "future": "{0} muutaman 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": "päivä",
|
|||
|
"days": {"past": "{0} päivää", "future": "{0} päivän"},
|
|||
|
"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 = {
|
|||
|
"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 = 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} يوم"},
|
|||
|
"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"},
|
|||
|
"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}ষ্ঠ"
|
|||
|
|
|||
|
|
|||
|
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",
|
|||
|
"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 = {
|
|||
|
"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 = 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"]
|