"" "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" ]
Messung V0.5 in Prozent C=98 H=98 G=97
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.167Bemerkung:
(vorverarbeitet am 2026-04-26)
¤
*Bot Zugriff