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