Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/arrow/locales.py: 75%

1167 statements  

« prev     ^ index     » next       coverage.py v7.2.7, created at 2023-06-07 06:17 +0000

1"""Provides internationalization for arrow in over 60 languages and dialects.""" 

2 

3import sys 

4from math import trunc 

5from typing import ( 

6 Any, 

7 ClassVar, 

8 Dict, 

9 List, 

10 Mapping, 

11 Optional, 

12 Sequence, 

13 Tuple, 

14 Type, 

15 Union, 

16 cast, 

17) 

18 

19if sys.version_info < (3, 8): # pragma: no cover 

20 from typing_extensions import Literal 

21else: 

22 from typing import Literal # pragma: no cover 

23 

24TimeFrameLiteral = Literal[ 

25 "now", 

26 "second", 

27 "seconds", 

28 "minute", 

29 "minutes", 

30 "hour", 

31 "hours", 

32 "day", 

33 "days", 

34 "week", 

35 "weeks", 

36 "month", 

37 "months", 

38 "quarter", 

39 "quarters", 

40 "year", 

41 "years", 

42] 

43 

44_TimeFrameElements = Union[ 

45 str, Sequence[str], Mapping[str, str], Mapping[str, Sequence[str]] 

46] 

47 

48_locale_map: Dict[str, Type["Locale"]] = {} 

49 

50 

51def get_locale(name: str) -> "Locale": 

52 """Returns an appropriate :class:`Locale <arrow.locales.Locale>` 

53 corresponding to an input locale name. 

54 

55 :param name: the name of the locale. 

56 

57 """ 

58 

59 normalized_locale_name = name.lower().replace("_", "-") 

60 locale_cls = _locale_map.get(normalized_locale_name) 

61 

62 if locale_cls is None: 

63 raise ValueError(f"Unsupported locale {normalized_locale_name!r}.") 

64 

65 return locale_cls() 

66 

67 

68def get_locale_by_class_name(name: str) -> "Locale": 

69 """Returns an appropriate :class:`Locale <arrow.locales.Locale>` 

70 corresponding to an locale class name. 

71 

72 :param name: the name of the locale class. 

73 

74 """ 

75 locale_cls: Optional[Type[Locale]] = globals().get(name) 

76 

77 if locale_cls is None: 

78 raise ValueError(f"Unsupported locale {name!r}.") 

79 

80 return locale_cls() 

81 

82 

83class Locale: 

84 """Represents locale-specific data and functionality.""" 

85 

86 names: ClassVar[List[str]] = [] 

87 

88 timeframes: ClassVar[Mapping[TimeFrameLiteral, _TimeFrameElements]] = { 

89 "now": "", 

90 "second": "", 

91 "seconds": "", 

92 "minute": "", 

93 "minutes": "", 

94 "hour": "", 

95 "hours": "", 

96 "day": "", 

97 "days": "", 

98 "week": "", 

99 "weeks": "", 

100 "month": "", 

101 "months": "", 

102 "quarter": "", 

103 "quarters": "", 

104 "year": "", 

105 "years": "", 

106 } 

107 

108 meridians: ClassVar[Dict[str, str]] = {"am": "", "pm": "", "AM": "", "PM": ""} 

109 

110 past: ClassVar[str] 

111 future: ClassVar[str] 

112 and_word: ClassVar[Optional[str]] = None 

113 

114 month_names: ClassVar[List[str]] = [] 

115 month_abbreviations: ClassVar[List[str]] = [] 

116 

117 day_names: ClassVar[List[str]] = [] 

118 day_abbreviations: ClassVar[List[str]] = [] 

119 

120 ordinal_day_re: ClassVar[str] = r"(\d+)" 

121 

122 _month_name_to_ordinal: Optional[Dict[str, int]] 

123 

124 def __init_subclass__(cls, **kwargs: Any) -> None: 

125 for locale_name in cls.names: 

126 if locale_name in _locale_map: 

127 raise LookupError(f"Duplicated locale name: {locale_name}") 

128 

129 _locale_map[locale_name.lower().replace("_", "-")] = cls 

130 

131 def __init__(self) -> None: 

132 

133 self._month_name_to_ordinal = None 

134 

135 def describe( 

136 self, 

137 timeframe: TimeFrameLiteral, 

138 delta: Union[float, int] = 0, 

139 only_distance: bool = False, 

140 ) -> str: 

141 """Describes a delta within a timeframe in plain language. 

142 

143 :param timeframe: a string representing a timeframe. 

144 :param delta: a quantity representing a delta in a timeframe. 

145 :param only_distance: return only distance eg: "11 seconds" without "in" or "ago" keywords 

146 """ 

147 

148 humanized = self._format_timeframe(timeframe, trunc(delta)) 

149 if not only_distance: 

150 humanized = self._format_relative(humanized, timeframe, delta) 

151 

152 return humanized 

153 

154 def describe_multi( 

155 self, 

156 timeframes: Sequence[Tuple[TimeFrameLiteral, Union[int, float]]], 

157 only_distance: bool = False, 

158 ) -> str: 

159 """Describes a delta within multiple timeframes in plain language. 

160 

161 :param timeframes: a list of string, quantity pairs each representing a timeframe and delta. 

162 :param only_distance: return only distance eg: "2 hours and 11 seconds" without "in" or "ago" keywords 

163 """ 

164 

165 parts = [ 

166 self._format_timeframe(timeframe, trunc(delta)) 

167 for timeframe, delta in timeframes 

168 ] 

169 if self.and_word: 

170 parts.insert(-1, self.and_word) 

171 humanized = " ".join(parts) 

172 

173 if not only_distance: 

174 # Needed to determine the correct relative string to use 

175 timeframe_value = 0 

176 

177 for _unit_name, unit_value in timeframes: 

178 if trunc(unit_value) != 0: 

179 timeframe_value = trunc(unit_value) 

180 break 

181 

182 # Note it doesn't matter the timeframe unit we use on the call, only the value 

183 humanized = self._format_relative(humanized, "seconds", timeframe_value) 

184 

185 return humanized 

186 

187 def day_name(self, day: int) -> str: 

188 """Returns the day name for a specified day of the week. 

189 

190 :param day: the ``int`` day of the week (1-7). 

191 

192 """ 

193 

194 return self.day_names[day] 

195 

196 def day_abbreviation(self, day: int) -> str: 

197 """Returns the day abbreviation for a specified day of the week. 

198 

199 :param day: the ``int`` day of the week (1-7). 

200 

201 """ 

202 

203 return self.day_abbreviations[day] 

204 

205 def month_name(self, month: int) -> str: 

206 """Returns the month name for a specified month of the year. 

207 

208 :param month: the ``int`` month of the year (1-12). 

209 

210 """ 

211 

212 return self.month_names[month] 

213 

214 def month_abbreviation(self, month: int) -> str: 

215 """Returns the month abbreviation for a specified month of the year. 

216 

217 :param month: the ``int`` month of the year (1-12). 

218 

219 """ 

220 

221 return self.month_abbreviations[month] 

222 

223 def month_number(self, name: str) -> Optional[int]: 

224 """Returns the month number for a month specified by name or abbreviation. 

225 

226 :param name: the month name or abbreviation. 

227 

228 """ 

229 

230 if self._month_name_to_ordinal is None: 

231 self._month_name_to_ordinal = self._name_to_ordinal(self.month_names) 

232 self._month_name_to_ordinal.update( 

233 self._name_to_ordinal(self.month_abbreviations) 

234 ) 

235 

236 return self._month_name_to_ordinal.get(name) 

237 

238 def year_full(self, year: int) -> str: 

239 """Returns the year for specific locale if available 

240 

241 :param year: the ``int`` year (4-digit) 

242 """ 

243 return f"{year:04d}" 

244 

245 def year_abbreviation(self, year: int) -> str: 

246 """Returns the year for specific locale if available 

247 

248 :param year: the ``int`` year (4-digit) 

249 """ 

250 return f"{year:04d}"[2:] 

251 

252 def meridian(self, hour: int, token: Any) -> Optional[str]: 

253 """Returns the meridian indicator for a specified hour and format token. 

254 

255 :param hour: the ``int`` hour of the day. 

256 :param token: the format token. 

257 """ 

258 

259 if token == "a": 

260 return self.meridians["am"] if hour < 12 else self.meridians["pm"] 

261 if token == "A": 

262 return self.meridians["AM"] if hour < 12 else self.meridians["PM"] 

263 return None 

264 

265 def ordinal_number(self, n: int) -> str: 

266 """Returns the ordinal format of a given integer 

267 

268 :param n: an integer 

269 """ 

270 return self._ordinal_number(n) 

271 

272 def _ordinal_number(self, n: int) -> str: 

273 return f"{n}" 

274 

275 def _name_to_ordinal(self, lst: Sequence[str]) -> Dict[str, int]: 

276 return {elem.lower(): i for i, elem in enumerate(lst[1:], 1)} 

277 

278 def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str: 

279 # TODO: remove cast 

280 return cast(str, self.timeframes[timeframe]).format(trunc(abs(delta))) 

281 

282 def _format_relative( 

283 self, 

284 humanized: str, 

285 timeframe: TimeFrameLiteral, 

286 delta: Union[float, int], 

287 ) -> str: 

288 

289 if timeframe == "now": 

290 return humanized 

291 

292 direction = self.past if delta < 0 else self.future 

293 

294 return direction.format(humanized) 

295 

296 

297class EnglishLocale(Locale): 

298 names = [ 

299 "en", 

300 "en-us", 

301 "en-gb", 

302 "en-au", 

303 "en-be", 

304 "en-jp", 

305 "en-za", 

306 "en-ca", 

307 "en-ph", 

308 ] 

309 

310 past = "{0} ago" 

311 future = "in {0}" 

312 and_word = "and" 

313 

314 timeframes = { 

315 "now": "just now", 

316 "second": "a second", 

317 "seconds": "{0} seconds", 

318 "minute": "a minute", 

319 "minutes": "{0} minutes", 

320 "hour": "an hour", 

321 "hours": "{0} hours", 

322 "day": "a day", 

323 "days": "{0} days", 

324 "week": "a week", 

325 "weeks": "{0} weeks", 

326 "month": "a month", 

327 "months": "{0} months", 

328 "quarter": "a quarter", 

329 "quarters": "{0} quarters", 

330 "year": "a year", 

331 "years": "{0} years", 

332 } 

333 

334 meridians = {"am": "am", "pm": "pm", "AM": "AM", "PM": "PM"} 

335 

336 month_names = [ 

337 "", 

338 "January", 

339 "February", 

340 "March", 

341 "April", 

342 "May", 

343 "June", 

344 "July", 

345 "August", 

346 "September", 

347 "October", 

348 "November", 

349 "December", 

350 ] 

351 month_abbreviations = [ 

352 "", 

353 "Jan", 

354 "Feb", 

355 "Mar", 

356 "Apr", 

357 "May", 

358 "Jun", 

359 "Jul", 

360 "Aug", 

361 "Sep", 

362 "Oct", 

363 "Nov", 

364 "Dec", 

365 ] 

366 

367 day_names = [ 

368 "", 

369 "Monday", 

370 "Tuesday", 

371 "Wednesday", 

372 "Thursday", 

373 "Friday", 

374 "Saturday", 

375 "Sunday", 

376 ] 

377 day_abbreviations = ["", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"] 

378 

379 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))" 

380 

381 def _ordinal_number(self, n: int) -> str: 

382 if n % 100 not in (11, 12, 13): 

383 remainder = abs(n) % 10 

384 if remainder == 1: 

385 return f"{n}st" 

386 elif remainder == 2: 

387 return f"{n}nd" 

388 elif remainder == 3: 

389 return f"{n}rd" 

390 return f"{n}th" 

391 

392 def describe( 

393 self, 

394 timeframe: TimeFrameLiteral, 

395 delta: Union[int, float] = 0, 

396 only_distance: bool = False, 

397 ) -> str: 

398 """Describes a delta within a timeframe in plain language. 

399 

400 :param timeframe: a string representing a timeframe. 

401 :param delta: a quantity representing a delta in a timeframe. 

402 :param only_distance: return only distance eg: "11 seconds" without "in" or "ago" keywords 

403 """ 

404 

405 humanized = super().describe(timeframe, delta, only_distance) 

406 if only_distance and timeframe == "now": 

407 humanized = "instantly" 

408 

409 return humanized 

410 

411 

412class ItalianLocale(Locale): 

413 names = ["it", "it-it"] 

414 past = "{0} fa" 

415 future = "tra {0}" 

416 and_word = "e" 

417 

418 timeframes = { 

419 "now": "adesso", 

420 "second": "un secondo", 

421 "seconds": "{0} qualche secondo", 

422 "minute": "un minuto", 

423 "minutes": "{0} minuti", 

424 "hour": "un'ora", 

425 "hours": "{0} ore", 

426 "day": "un giorno", 

427 "days": "{0} giorni", 

428 "week": "una settimana", 

429 "weeks": "{0} settimane", 

430 "month": "un mese", 

431 "months": "{0} mesi", 

432 "year": "un anno", 

433 "years": "{0} anni", 

434 } 

435 

436 month_names = [ 

437 "", 

438 "gennaio", 

439 "febbraio", 

440 "marzo", 

441 "aprile", 

442 "maggio", 

443 "giugno", 

444 "luglio", 

445 "agosto", 

446 "settembre", 

447 "ottobre", 

448 "novembre", 

449 "dicembre", 

450 ] 

451 month_abbreviations = [ 

452 "", 

453 "gen", 

454 "feb", 

455 "mar", 

456 "apr", 

457 "mag", 

458 "giu", 

459 "lug", 

460 "ago", 

461 "set", 

462 "ott", 

463 "nov", 

464 "dic", 

465 ] 

466 

467 day_names = [ 

468 "", 

469 "lunedì", 

470 "martedì", 

471 "mercoledì", 

472 "giovedì", 

473 "venerdì", 

474 "sabato", 

475 "domenica", 

476 ] 

477 day_abbreviations = ["", "lun", "mar", "mer", "gio", "ven", "sab", "dom"] 

478 

479 ordinal_day_re = r"((?P<value>[1-3]?[0-9](?=[ºª]))[ºª])" 

480 

481 def _ordinal_number(self, n: int) -> str: 

482 return f"{n}º" 

483 

484 

485class SpanishLocale(Locale): 

486 names = ["es", "es-es"] 

487 past = "hace {0}" 

488 future = "en {0}" 

489 and_word = "y" 

490 

491 timeframes = { 

492 "now": "ahora", 

493 "second": "un segundo", 

494 "seconds": "{0} segundos", 

495 "minute": "un minuto", 

496 "minutes": "{0} minutos", 

497 "hour": "una hora", 

498 "hours": "{0} horas", 

499 "day": "un día", 

500 "days": "{0} días", 

501 "week": "una semana", 

502 "weeks": "{0} semanas", 

503 "month": "un mes", 

504 "months": "{0} meses", 

505 "year": "un año", 

506 "years": "{0} años", 

507 } 

508 

509 meridians = {"am": "am", "pm": "pm", "AM": "AM", "PM": "PM"} 

510 

511 month_names = [ 

512 "", 

513 "enero", 

514 "febrero", 

515 "marzo", 

516 "abril", 

517 "mayo", 

518 "junio", 

519 "julio", 

520 "agosto", 

521 "septiembre", 

522 "octubre", 

523 "noviembre", 

524 "diciembre", 

525 ] 

526 month_abbreviations = [ 

527 "", 

528 "ene", 

529 "feb", 

530 "mar", 

531 "abr", 

532 "may", 

533 "jun", 

534 "jul", 

535 "ago", 

536 "sep", 

537 "oct", 

538 "nov", 

539 "dic", 

540 ] 

541 

542 day_names = [ 

543 "", 

544 "lunes", 

545 "martes", 

546 "miércoles", 

547 "jueves", 

548 "viernes", 

549 "sábado", 

550 "domingo", 

551 ] 

552 day_abbreviations = ["", "lun", "mar", "mie", "jue", "vie", "sab", "dom"] 

553 

554 ordinal_day_re = r"((?P<value>[1-3]?[0-9](?=[ºª]))[ºª])" 

555 

556 def _ordinal_number(self, n: int) -> str: 

557 return f"{n}º" 

558 

559 

560class FrenchBaseLocale(Locale): 

561 past = "il y a {0}" 

562 future = "dans {0}" 

563 and_word = "et" 

564 

565 timeframes = { 

566 "now": "maintenant", 

567 "second": "une seconde", 

568 "seconds": "{0} secondes", 

569 "minute": "une minute", 

570 "minutes": "{0} minutes", 

571 "hour": "une heure", 

572 "hours": "{0} heures", 

573 "day": "un jour", 

574 "days": "{0} jours", 

575 "week": "une semaine", 

576 "weeks": "{0} semaines", 

577 "month": "un mois", 

578 "months": "{0} mois", 

579 "year": "un an", 

580 "years": "{0} ans", 

581 } 

582 

583 month_names = [ 

584 "", 

585 "janvier", 

586 "février", 

587 "mars", 

588 "avril", 

589 "mai", 

590 "juin", 

591 "juillet", 

592 "août", 

593 "septembre", 

594 "octobre", 

595 "novembre", 

596 "décembre", 

597 ] 

598 

599 day_names = [ 

600 "", 

601 "lundi", 

602 "mardi", 

603 "mercredi", 

604 "jeudi", 

605 "vendredi", 

606 "samedi", 

607 "dimanche", 

608 ] 

609 day_abbreviations = ["", "lun", "mar", "mer", "jeu", "ven", "sam", "dim"] 

610 

611 ordinal_day_re = ( 

612 r"((?P<value>\b1(?=er\b)|[1-3]?[02-9](?=e\b)|[1-3]1(?=e\b))(er|e)\b)" 

613 ) 

614 

615 def _ordinal_number(self, n: int) -> str: 

616 if abs(n) == 1: 

617 return f"{n}er" 

618 return f"{n}e" 

619 

620 

621class FrenchLocale(FrenchBaseLocale, Locale): 

622 names = ["fr", "fr-fr"] 

623 

624 month_abbreviations = [ 

625 "", 

626 "janv", 

627 "févr", 

628 "mars", 

629 "avr", 

630 "mai", 

631 "juin", 

632 "juil", 

633 "août", 

634 "sept", 

635 "oct", 

636 "nov", 

637 "déc", 

638 ] 

639 

640 

641class FrenchCanadianLocale(FrenchBaseLocale, Locale): 

642 names = ["fr-ca"] 

643 

644 month_abbreviations = [ 

645 "", 

646 "janv", 

647 "févr", 

648 "mars", 

649 "avr", 

650 "mai", 

651 "juin", 

652 "juill", 

653 "août", 

654 "sept", 

655 "oct", 

656 "nov", 

657 "déc", 

658 ] 

659 

660 

661class GreekLocale(Locale): 

662 names = ["el", "el-gr"] 

663 

664 past = "{0} πριν" 

665 future = "σε {0}" 

666 and_word = "και" 

667 

668 timeframes = { 

669 "now": "τώρα", 

670 "second": "ένα δεύτερο", 

671 "seconds": "{0} δευτερόλεπτα", 

672 "minute": "ένα λεπτό", 

673 "minutes": "{0} λεπτά", 

674 "hour": "μία ώρα", 

675 "hours": "{0} ώρες", 

676 "day": "μία μέρα", 

677 "days": "{0} μέρες", 

678 "week": "μία εβδομάδα", 

679 "weeks": "{0} εβδομάδες", 

680 "month": "ένα μήνα", 

681 "months": "{0} μήνες", 

682 "year": "ένα χρόνο", 

683 "years": "{0} χρόνια", 

684 } 

685 

686 month_names = [ 

687 "", 

688 "Ιανουαρίου", 

689 "Φεβρουαρίου", 

690 "Μαρτίου", 

691 "Απριλίου", 

692 "Μαΐου", 

693 "Ιουνίου", 

694 "Ιουλίου", 

695 "Αυγούστου", 

696 "Σεπτεμβρίου", 

697 "Οκτωβρίου", 

698 "Νοεμβρίου", 

699 "Δεκεμβρίου", 

700 ] 

701 month_abbreviations = [ 

702 "", 

703 "Ιαν", 

704 "Φεβ", 

705 "Μαρ", 

706 "Απρ", 

707 "Μαϊ", 

708 "Ιον", 

709 "Ιολ", 

710 "Αυγ", 

711 "Σεπ", 

712 "Οκτ", 

713 "Νοε", 

714 "Δεκ", 

715 ] 

716 

717 day_names = [ 

718 "", 

719 "Δευτέρα", 

720 "Τρίτη", 

721 "Τετάρτη", 

722 "Πέμπτη", 

723 "Παρασκευή", 

724 "Σάββατο", 

725 "Κυριακή", 

726 ] 

727 day_abbreviations = ["", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ", "Κυρ"] 

728 

729 

730class JapaneseLocale(Locale): 

731 names = ["ja", "ja-jp"] 

732 

733 past = "{0}前" 

734 future = "{0}後" 

735 and_word = "" 

736 

737 timeframes = { 

738 "now": "現在", 

739 "second": "1秒", 

740 "seconds": "{0}秒", 

741 "minute": "1分", 

742 "minutes": "{0}分", 

743 "hour": "1時間", 

744 "hours": "{0}時間", 

745 "day": "1日", 

746 "days": "{0}日", 

747 "week": "1週間", 

748 "weeks": "{0}週間", 

749 "month": "1ヶ月", 

750 "months": "{0}ヶ月", 

751 "year": "1年", 

752 "years": "{0}年", 

753 } 

754 

755 month_names = [ 

756 "", 

757 "1月", 

758 "2月", 

759 "3月", 

760 "4月", 

761 "5月", 

762 "6月", 

763 "7月", 

764 "8月", 

765 "9月", 

766 "10月", 

767 "11月", 

768 "12月", 

769 ] 

770 month_abbreviations = [ 

771 "", 

772 " 1", 

773 " 2", 

774 " 3", 

775 " 4", 

776 " 5", 

777 " 6", 

778 " 7", 

779 " 8", 

780 " 9", 

781 "10", 

782 "11", 

783 "12", 

784 ] 

785 

786 day_names = ["", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日", "日曜日"] 

787 day_abbreviations = ["", "月", "火", "水", "木", "金", "土", "日"] 

788 

789 

790class SwedishLocale(Locale): 

791 names = ["sv", "sv-se"] 

792 

793 past = "för {0} sen" 

794 future = "om {0}" 

795 and_word = "och" 

796 

797 timeframes = { 

798 "now": "just nu", 

799 "second": "en sekund", 

800 "seconds": "{0} sekunder", 

801 "minute": "en minut", 

802 "minutes": "{0} minuter", 

803 "hour": "en timme", 

804 "hours": "{0} timmar", 

805 "day": "en dag", 

806 "days": "{0} dagar", 

807 "week": "en vecka", 

808 "weeks": "{0} veckor", 

809 "month": "en månad", 

810 "months": "{0} månader", 

811 "year": "ett år", 

812 "years": "{0} år", 

813 } 

814 

815 month_names = [ 

816 "", 

817 "januari", 

818 "februari", 

819 "mars", 

820 "april", 

821 "maj", 

822 "juni", 

823 "juli", 

824 "augusti", 

825 "september", 

826 "oktober", 

827 "november", 

828 "december", 

829 ] 

830 month_abbreviations = [ 

831 "", 

832 "jan", 

833 "feb", 

834 "mar", 

835 "apr", 

836 "maj", 

837 "jun", 

838 "jul", 

839 "aug", 

840 "sep", 

841 "okt", 

842 "nov", 

843 "dec", 

844 ] 

845 

846 day_names = [ 

847 "", 

848 "måndag", 

849 "tisdag", 

850 "onsdag", 

851 "torsdag", 

852 "fredag", 

853 "lördag", 

854 "söndag", 

855 ] 

856 day_abbreviations = ["", "mån", "tis", "ons", "tor", "fre", "lör", "sön"] 

857 

858 

859class FinnishLocale(Locale): 

860 names = ["fi", "fi-fi"] 

861 

862 # The finnish grammar is very complex, and its hard to convert 

863 # 1-to-1 to something like English. 

864 

865 past = "{0} sitten" 

866 future = "{0} kuluttua" 

867 

868 timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = { 

869 "now": "juuri nyt", 

870 "second": {"past": "sekunti", "future": "sekunnin"}, 

871 "seconds": {"past": "{0} sekuntia", "future": "{0} sekunnin"}, 

872 "minute": {"past": "minuutti", "future": "minuutin"}, 

873 "minutes": {"past": "{0} minuuttia", "future": "{0} minuutin"}, 

874 "hour": {"past": "tunti", "future": "tunnin"}, 

875 "hours": {"past": "{0} tuntia", "future": "{0} tunnin"}, 

876 "day": {"past": "päivä", "future": "päivän"}, 

877 "days": {"past": "{0} päivää", "future": "{0} päivän"}, 

878 "month": {"past": "kuukausi", "future": "kuukauden"}, 

879 "months": {"past": "{0} kuukautta", "future": "{0} kuukauden"}, 

880 "year": {"past": "vuosi", "future": "vuoden"}, 

881 "years": {"past": "{0} vuotta", "future": "{0} vuoden"}, 

882 } 

883 

884 # Months and days are lowercase in Finnish 

885 month_names = [ 

886 "", 

887 "tammikuu", 

888 "helmikuu", 

889 "maaliskuu", 

890 "huhtikuu", 

891 "toukokuu", 

892 "kesäkuu", 

893 "heinäkuu", 

894 "elokuu", 

895 "syyskuu", 

896 "lokakuu", 

897 "marraskuu", 

898 "joulukuu", 

899 ] 

900 

901 month_abbreviations = [ 

902 "", 

903 "tammi", 

904 "helmi", 

905 "maalis", 

906 "huhti", 

907 "touko", 

908 "kesä", 

909 "heinä", 

910 "elo", 

911 "syys", 

912 "loka", 

913 "marras", 

914 "joulu", 

915 ] 

916 

917 day_names = [ 

918 "", 

919 "maanantai", 

920 "tiistai", 

921 "keskiviikko", 

922 "torstai", 

923 "perjantai", 

924 "lauantai", 

925 "sunnuntai", 

926 ] 

927 

928 day_abbreviations = ["", "ma", "ti", "ke", "to", "pe", "la", "su"] 

929 

930 def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str: 

931 form = self.timeframes[timeframe] 

932 

933 if isinstance(form, Mapping): 

934 if delta < 0: 

935 form = form["past"] 

936 else: 

937 form = form["future"] 

938 

939 return form.format(abs(delta)) 

940 

941 def _ordinal_number(self, n: int) -> str: 

942 return f"{n}." 

943 

944 

945class ChineseCNLocale(Locale): 

946 names = ["zh", "zh-cn"] 

947 

948 past = "{0}前" 

949 future = "{0}后" 

950 

951 timeframes = { 

952 "now": "刚才", 

953 "second": "1秒", 

954 "seconds": "{0}秒", 

955 "minute": "1分钟", 

956 "minutes": "{0}分钟", 

957 "hour": "1小时", 

958 "hours": "{0}小时", 

959 "day": "1天", 

960 "days": "{0}天", 

961 "week": "1周", 

962 "weeks": "{0}周", 

963 "month": "1个月", 

964 "months": "{0}个月", 

965 "year": "1年", 

966 "years": "{0}年", 

967 } 

968 

969 month_names = [ 

970 "", 

971 "一月", 

972 "二月", 

973 "三月", 

974 "四月", 

975 "五月", 

976 "六月", 

977 "七月", 

978 "八月", 

979 "九月", 

980 "十月", 

981 "十一月", 

982 "十二月", 

983 ] 

984 month_abbreviations = [ 

985 "", 

986 " 1", 

987 " 2", 

988 " 3", 

989 " 4", 

990 " 5", 

991 " 6", 

992 " 7", 

993 " 8", 

994 " 9", 

995 "10", 

996 "11", 

997 "12", 

998 ] 

999 

1000 day_names = ["", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"] 

1001 day_abbreviations = ["", "一", "二", "三", "四", "五", "六", "日"] 

1002 

1003 

1004class ChineseTWLocale(Locale): 

1005 names = ["zh-tw"] 

1006 

1007 past = "{0}前" 

1008 future = "{0}後" 

1009 and_word = "和" 

1010 

1011 timeframes = { 

1012 "now": "剛才", 

1013 "second": "1秒", 

1014 "seconds": "{0}秒", 

1015 "minute": "1分鐘", 

1016 "minutes": "{0}分鐘", 

1017 "hour": "1小時", 

1018 "hours": "{0}小時", 

1019 "day": "1天", 

1020 "days": "{0}天", 

1021 "week": "1週", 

1022 "weeks": "{0}週", 

1023 "month": "1個月", 

1024 "months": "{0}個月", 

1025 "year": "1年", 

1026 "years": "{0}年", 

1027 } 

1028 

1029 month_names = [ 

1030 "", 

1031 "1月", 

1032 "2月", 

1033 "3月", 

1034 "4月", 

1035 "5月", 

1036 "6月", 

1037 "7月", 

1038 "8月", 

1039 "9月", 

1040 "10月", 

1041 "11月", 

1042 "12月", 

1043 ] 

1044 month_abbreviations = [ 

1045 "", 

1046 " 1", 

1047 " 2", 

1048 " 3", 

1049 " 4", 

1050 " 5", 

1051 " 6", 

1052 " 7", 

1053 " 8", 

1054 " 9", 

1055 "10", 

1056 "11", 

1057 "12", 

1058 ] 

1059 

1060 day_names = ["", "週一", "週二", "週三", "週四", "週五", "週六", "週日"] 

1061 day_abbreviations = ["", "一", "二", "三", "四", "五", "六", "日"] 

1062 

1063 

1064class HongKongLocale(Locale): 

1065 names = ["zh-hk"] 

1066 

1067 past = "{0}前" 

1068 future = "{0}後" 

1069 

1070 timeframes = { 

1071 "now": "剛才", 

1072 "second": "1秒", 

1073 "seconds": "{0}秒", 

1074 "minute": "1分鐘", 

1075 "minutes": "{0}分鐘", 

1076 "hour": "1小時", 

1077 "hours": "{0}小時", 

1078 "day": "1天", 

1079 "days": "{0}天", 

1080 "week": "1星期", 

1081 "weeks": "{0}星期", 

1082 "month": "1個月", 

1083 "months": "{0}個月", 

1084 "year": "1年", 

1085 "years": "{0}年", 

1086 } 

1087 

1088 month_names = [ 

1089 "", 

1090 "1月", 

1091 "2月", 

1092 "3月", 

1093 "4月", 

1094 "5月", 

1095 "6月", 

1096 "7月", 

1097 "8月", 

1098 "9月", 

1099 "10月", 

1100 "11月", 

1101 "12月", 

1102 ] 

1103 month_abbreviations = [ 

1104 "", 

1105 " 1", 

1106 " 2", 

1107 " 3", 

1108 " 4", 

1109 " 5", 

1110 " 6", 

1111 " 7", 

1112 " 8", 

1113 " 9", 

1114 "10", 

1115 "11", 

1116 "12", 

1117 ] 

1118 

1119 day_names = ["", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"] 

1120 day_abbreviations = ["", "一", "二", "三", "四", "五", "六", "日"] 

1121 

1122 

1123class KoreanLocale(Locale): 

1124 names = ["ko", "ko-kr"] 

1125 

1126 past = "{0} 전" 

1127 future = "{0} 후" 

1128 

1129 timeframes = { 

1130 "now": "지금", 

1131 "second": "1초", 

1132 "seconds": "{0}초", 

1133 "minute": "1분", 

1134 "minutes": "{0}분", 

1135 "hour": "한시간", 

1136 "hours": "{0}시간", 

1137 "day": "하루", 

1138 "days": "{0}일", 

1139 "week": "1주", 

1140 "weeks": "{0}주", 

1141 "month": "한달", 

1142 "months": "{0}개월", 

1143 "year": "1년", 

1144 "years": "{0}년", 

1145 } 

1146 

1147 special_dayframes = { 

1148 -3: "그끄제", 

1149 -2: "그제", 

1150 -1: "어제", 

1151 1: "내일", 

1152 2: "모레", 

1153 3: "글피", 

1154 4: "그글피", 

1155 } 

1156 

1157 special_yearframes = {-2: "제작년", -1: "작년", 1: "내년", 2: "내후년"} 

1158 

1159 month_names = [ 

1160 "", 

1161 "1월", 

1162 "2월", 

1163 "3월", 

1164 "4월", 

1165 "5월", 

1166 "6월", 

1167 "7월", 

1168 "8월", 

1169 "9월", 

1170 "10월", 

1171 "11월", 

1172 "12월", 

1173 ] 

1174 month_abbreviations = [ 

1175 "", 

1176 " 1", 

1177 " 2", 

1178 " 3", 

1179 " 4", 

1180 " 5", 

1181 " 6", 

1182 " 7", 

1183 " 8", 

1184 " 9", 

1185 "10", 

1186 "11", 

1187 "12", 

1188 ] 

1189 

1190 day_names = ["", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일", "일요일"] 

1191 day_abbreviations = ["", "월", "화", "수", "목", "금", "토", "일"] 

1192 

1193 def _ordinal_number(self, n: int) -> str: 

1194 ordinals = ["0", "첫", "두", "세", "네", "다섯", "여섯", "일곱", "여덟", "아홉", "열"] 

1195 if n < len(ordinals): 

1196 return f"{ordinals[n]}번째" 

1197 return f"{n}번째" 

1198 

1199 def _format_relative( 

1200 self, 

1201 humanized: str, 

1202 timeframe: TimeFrameLiteral, 

1203 delta: Union[float, int], 

1204 ) -> str: 

1205 if timeframe in ("day", "days"): 

1206 special = self.special_dayframes.get(int(delta)) 

1207 if special: 

1208 return special 

1209 elif timeframe in ("year", "years"): 

1210 special = self.special_yearframes.get(int(delta)) 

1211 if special: 

1212 return special 

1213 

1214 return super()._format_relative(humanized, timeframe, delta) 

1215 

1216 

1217# derived locale types & implementations. 

1218class DutchLocale(Locale): 

1219 names = ["nl", "nl-nl"] 

1220 

1221 past = "{0} geleden" 

1222 future = "over {0}" 

1223 

1224 timeframes = { 

1225 "now": "nu", 

1226 "second": "een seconde", 

1227 "seconds": "{0} seconden", 

1228 "minute": "een minuut", 

1229 "minutes": "{0} minuten", 

1230 "hour": "een uur", 

1231 "hours": "{0} uur", 

1232 "day": "een dag", 

1233 "days": "{0} dagen", 

1234 "week": "een week", 

1235 "weeks": "{0} weken", 

1236 "month": "een maand", 

1237 "months": "{0} maanden", 

1238 "year": "een jaar", 

1239 "years": "{0} jaar", 

1240 } 

1241 

1242 # In Dutch names of months and days are not starting with a capital letter 

1243 # like in the English language. 

1244 month_names = [ 

1245 "", 

1246 "januari", 

1247 "februari", 

1248 "maart", 

1249 "april", 

1250 "mei", 

1251 "juni", 

1252 "juli", 

1253 "augustus", 

1254 "september", 

1255 "oktober", 

1256 "november", 

1257 "december", 

1258 ] 

1259 month_abbreviations = [ 

1260 "", 

1261 "jan", 

1262 "feb", 

1263 "mrt", 

1264 "apr", 

1265 "mei", 

1266 "jun", 

1267 "jul", 

1268 "aug", 

1269 "sep", 

1270 "okt", 

1271 "nov", 

1272 "dec", 

1273 ] 

1274 

1275 day_names = [ 

1276 "", 

1277 "maandag", 

1278 "dinsdag", 

1279 "woensdag", 

1280 "donderdag", 

1281 "vrijdag", 

1282 "zaterdag", 

1283 "zondag", 

1284 ] 

1285 day_abbreviations = ["", "ma", "di", "wo", "do", "vr", "za", "zo"] 

1286 

1287 

1288class SlavicBaseLocale(Locale): 

1289 timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] 

1290 

1291 def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str: 

1292 form = self.timeframes[timeframe] 

1293 delta = abs(delta) 

1294 

1295 if isinstance(form, Mapping): 

1296 if delta % 10 == 1 and delta % 100 != 11: 

1297 form = form["singular"] 

1298 elif 2 <= delta % 10 <= 4 and (delta % 100 < 10 or delta % 100 >= 20): 

1299 form = form["dual"] 

1300 else: 

1301 form = form["plural"] 

1302 

1303 return form.format(delta) 

1304 

1305 

1306class BelarusianLocale(SlavicBaseLocale): 

1307 names = ["be", "be-by"] 

1308 

1309 past = "{0} таму" 

1310 future = "праз {0}" 

1311 

1312 timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = { 

1313 "now": "зараз", 

1314 "second": "секунду", 

1315 "seconds": "{0} некалькі секунд", 

1316 "minute": "хвіліну", 

1317 "minutes": { 

1318 "singular": "{0} хвіліну", 

1319 "dual": "{0} хвіліны", 

1320 "plural": "{0} хвілін", 

1321 }, 

1322 "hour": "гадзіну", 

1323 "hours": { 

1324 "singular": "{0} гадзіну", 

1325 "dual": "{0} гадзіны", 

1326 "plural": "{0} гадзін", 

1327 }, 

1328 "day": "дзень", 

1329 "days": {"singular": "{0} дзень", "dual": "{0} дні", "plural": "{0} дзён"}, 

1330 "month": "месяц", 

1331 "months": { 

1332 "singular": "{0} месяц", 

1333 "dual": "{0} месяцы", 

1334 "plural": "{0} месяцаў", 

1335 }, 

1336 "year": "год", 

1337 "years": {"singular": "{0} год", "dual": "{0} гады", "plural": "{0} гадоў"}, 

1338 } 

1339 

1340 month_names = [ 

1341 "", 

1342 "студзеня", 

1343 "лютага", 

1344 "сакавіка", 

1345 "красавіка", 

1346 "траўня", 

1347 "чэрвеня", 

1348 "ліпеня", 

1349 "жніўня", 

1350 "верасня", 

1351 "кастрычніка", 

1352 "лістапада", 

1353 "снежня", 

1354 ] 

1355 month_abbreviations = [ 

1356 "", 

1357 "студ", 

1358 "лют", 

1359 "сак", 

1360 "крас", 

1361 "трав", 

1362 "чэрв", 

1363 "ліп", 

1364 "жнів", 

1365 "вер", 

1366 "каст", 

1367 "ліст", 

1368 "снеж", 

1369 ] 

1370 

1371 day_names = [ 

1372 "", 

1373 "панядзелак", 

1374 "аўторак", 

1375 "серада", 

1376 "чацвер", 

1377 "пятніца", 

1378 "субота", 

1379 "нядзеля", 

1380 ] 

1381 day_abbreviations = ["", "пн", "ат", "ср", "чц", "пт", "сб", "нд"] 

1382 

1383 

1384class PolishLocale(SlavicBaseLocale): 

1385 names = ["pl", "pl-pl"] 

1386 

1387 past = "{0} temu" 

1388 future = "za {0}" 

1389 

1390 # The nouns should be in genitive case (Polish: "dopełniacz") 

1391 # in order to correctly form `past` & `future` expressions. 

1392 timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = { 

1393 "now": "teraz", 

1394 "second": "sekundę", 

1395 "seconds": { 

1396 "singular": "{0} sekund", 

1397 "dual": "{0} sekundy", 

1398 "plural": "{0} sekund", 

1399 }, 

1400 "minute": "minutę", 

1401 "minutes": { 

1402 "singular": "{0} minut", 

1403 "dual": "{0} minuty", 

1404 "plural": "{0} minut", 

1405 }, 

1406 "hour": "godzinę", 

1407 "hours": { 

1408 "singular": "{0} godzin", 

1409 "dual": "{0} godziny", 

1410 "plural": "{0} godzin", 

1411 }, 

1412 "day": "dzień", 

1413 "days": "{0} dni", 

1414 "week": "tydzień", 

1415 "weeks": { 

1416 "singular": "{0} tygodni", 

1417 "dual": "{0} tygodnie", 

1418 "plural": "{0} tygodni", 

1419 }, 

1420 "month": "miesiąc", 

1421 "months": { 

1422 "singular": "{0} miesięcy", 

1423 "dual": "{0} miesiące", 

1424 "plural": "{0} miesięcy", 

1425 }, 

1426 "year": "rok", 

1427 "years": {"singular": "{0} lat", "dual": "{0} lata", "plural": "{0} lat"}, 

1428 } 

1429 

1430 month_names = [ 

1431 "", 

1432 "styczeń", 

1433 "luty", 

1434 "marzec", 

1435 "kwiecień", 

1436 "maj", 

1437 "czerwiec", 

1438 "lipiec", 

1439 "sierpień", 

1440 "wrzesień", 

1441 "październik", 

1442 "listopad", 

1443 "grudzień", 

1444 ] 

1445 month_abbreviations = [ 

1446 "", 

1447 "sty", 

1448 "lut", 

1449 "mar", 

1450 "kwi", 

1451 "maj", 

1452 "cze", 

1453 "lip", 

1454 "sie", 

1455 "wrz", 

1456 "paź", 

1457 "lis", 

1458 "gru", 

1459 ] 

1460 

1461 day_names = [ 

1462 "", 

1463 "poniedziałek", 

1464 "wtorek", 

1465 "środa", 

1466 "czwartek", 

1467 "piątek", 

1468 "sobota", 

1469 "niedziela", 

1470 ] 

1471 day_abbreviations = ["", "Pn", "Wt", "Śr", "Czw", "Pt", "So", "Nd"] 

1472 

1473 

1474class RussianLocale(SlavicBaseLocale): 

1475 names = ["ru", "ru-ru"] 

1476 

1477 past = "{0} назад" 

1478 future = "через {0}" 

1479 

1480 timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = { 

1481 "now": "сейчас", 

1482 "second": "секунда", 

1483 "seconds": { 

1484 "singular": "{0} секунду", 

1485 "dual": "{0} секунды", 

1486 "plural": "{0} секунд", 

1487 }, 

1488 "minute": "минуту", 

1489 "minutes": { 

1490 "singular": "{0} минуту", 

1491 "dual": "{0} минуты", 

1492 "plural": "{0} минут", 

1493 }, 

1494 "hour": "час", 

1495 "hours": {"singular": "{0} час", "dual": "{0} часа", "plural": "{0} часов"}, 

1496 "day": "день", 

1497 "days": {"singular": "{0} день", "dual": "{0} дня", "plural": "{0} дней"}, 

1498 "week": "неделю", 

1499 "weeks": { 

1500 "singular": "{0} неделю", 

1501 "dual": "{0} недели", 

1502 "plural": "{0} недель", 

1503 }, 

1504 "month": "месяц", 

1505 "months": { 

1506 "singular": "{0} месяц", 

1507 "dual": "{0} месяца", 

1508 "plural": "{0} месяцев", 

1509 }, 

1510 "quarter": "квартал", 

1511 "quarters": { 

1512 "singular": "{0} квартал", 

1513 "dual": "{0} квартала", 

1514 "plural": "{0} кварталов", 

1515 }, 

1516 "year": "год", 

1517 "years": {"singular": "{0} год", "dual": "{0} года", "plural": "{0} лет"}, 

1518 } 

1519 

1520 month_names = [ 

1521 "", 

1522 "января", 

1523 "февраля", 

1524 "марта", 

1525 "апреля", 

1526 "мая", 

1527 "июня", 

1528 "июля", 

1529 "августа", 

1530 "сентября", 

1531 "октября", 

1532 "ноября", 

1533 "декабря", 

1534 ] 

1535 month_abbreviations = [ 

1536 "", 

1537 "янв", 

1538 "фев", 

1539 "мар", 

1540 "апр", 

1541 "май", 

1542 "июн", 

1543 "июл", 

1544 "авг", 

1545 "сен", 

1546 "окт", 

1547 "ноя", 

1548 "дек", 

1549 ] 

1550 

1551 day_names = [ 

1552 "", 

1553 "понедельник", 

1554 "вторник", 

1555 "среда", 

1556 "четверг", 

1557 "пятница", 

1558 "суббота", 

1559 "воскресенье", 

1560 ] 

1561 day_abbreviations = ["", "пн", "вт", "ср", "чт", "пт", "сб", "вс"] 

1562 

1563 

1564class AfrikaansLocale(Locale): 

1565 names = ["af", "af-nl"] 

1566 

1567 past = "{0} gelede" 

1568 future = "in {0}" 

1569 

1570 timeframes = { 

1571 "now": "nou", 

1572 "second": "n sekonde", 

1573 "seconds": "{0} sekondes", 

1574 "minute": "minuut", 

1575 "minutes": "{0} minute", 

1576 "hour": "uur", 

1577 "hours": "{0} ure", 

1578 "day": "een dag", 

1579 "days": "{0} dae", 

1580 "month": "een maand", 

1581 "months": "{0} maande", 

1582 "year": "een jaar", 

1583 "years": "{0} jaar", 

1584 } 

1585 

1586 month_names = [ 

1587 "", 

1588 "Januarie", 

1589 "Februarie", 

1590 "Maart", 

1591 "April", 

1592 "Mei", 

1593 "Junie", 

1594 "Julie", 

1595 "Augustus", 

1596 "September", 

1597 "Oktober", 

1598 "November", 

1599 "Desember", 

1600 ] 

1601 month_abbreviations = [ 

1602 "", 

1603 "Jan", 

1604 "Feb", 

1605 "Mrt", 

1606 "Apr", 

1607 "Mei", 

1608 "Jun", 

1609 "Jul", 

1610 "Aug", 

1611 "Sep", 

1612 "Okt", 

1613 "Nov", 

1614 "Des", 

1615 ] 

1616 

1617 day_names = [ 

1618 "", 

1619 "Maandag", 

1620 "Dinsdag", 

1621 "Woensdag", 

1622 "Donderdag", 

1623 "Vrydag", 

1624 "Saterdag", 

1625 "Sondag", 

1626 ] 

1627 day_abbreviations = ["", "Ma", "Di", "Wo", "Do", "Vr", "Za", "So"] 

1628 

1629 

1630class BulgarianLocale(SlavicBaseLocale): 

1631 names = ["bg", "bg-bg"] 

1632 

1633 past = "{0} назад" 

1634 future = "напред {0}" 

1635 

1636 timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = { 

1637 "now": "сега", 

1638 "second": "секунда", 

1639 "seconds": "{0} няколко секунди", 

1640 "minute": "минута", 

1641 "minutes": { 

1642 "singular": "{0} минута", 

1643 "dual": "{0} минути", 

1644 "plural": "{0} минути", 

1645 }, 

1646 "hour": "час", 

1647 "hours": {"singular": "{0} час", "dual": "{0} часа", "plural": "{0} часа"}, 

1648 "day": "ден", 

1649 "days": {"singular": "{0} ден", "dual": "{0} дни", "plural": "{0} дни"}, 

1650 "month": "месец", 

1651 "months": { 

1652 "singular": "{0} месец", 

1653 "dual": "{0} месеца", 

1654 "plural": "{0} месеца", 

1655 }, 

1656 "year": "година", 

1657 "years": { 

1658 "singular": "{0} година", 

1659 "dual": "{0} години", 

1660 "plural": "{0} години", 

1661 }, 

1662 } 

1663 

1664 month_names = [ 

1665 "", 

1666 "януари", 

1667 "февруари", 

1668 "март", 

1669 "април", 

1670 "май", 

1671 "юни", 

1672 "юли", 

1673 "август", 

1674 "септември", 

1675 "октомври", 

1676 "ноември", 

1677 "декември", 

1678 ] 

1679 month_abbreviations = [ 

1680 "", 

1681 "ян", 

1682 "февр", 

1683 "март", 

1684 "апр", 

1685 "май", 

1686 "юни", 

1687 "юли", 

1688 "авг", 

1689 "септ", 

1690 "окт", 

1691 "ноем", 

1692 "дек", 

1693 ] 

1694 

1695 day_names = [ 

1696 "", 

1697 "понеделник", 

1698 "вторник", 

1699 "сряда", 

1700 "четвъртък", 

1701 "петък", 

1702 "събота", 

1703 "неделя", 

1704 ] 

1705 day_abbreviations = ["", "пон", "вт", "ср", "четв", "пет", "съб", "нед"] 

1706 

1707 

1708class UkrainianLocale(SlavicBaseLocale): 

1709 names = ["ua", "uk", "uk-ua"] 

1710 

1711 past = "{0} тому" 

1712 future = "за {0}" 

1713 

1714 timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = { 

1715 "now": "зараз", 

1716 "second": "секунда", 

1717 "seconds": "{0} кілька секунд", 

1718 "minute": "хвилину", 

1719 "minutes": { 

1720 "singular": "{0} хвилину", 

1721 "dual": "{0} хвилини", 

1722 "plural": "{0} хвилин", 

1723 }, 

1724 "hour": "годину", 

1725 "hours": { 

1726 "singular": "{0} годину", 

1727 "dual": "{0} години", 

1728 "plural": "{0} годин", 

1729 }, 

1730 "day": "день", 

1731 "days": {"singular": "{0} день", "dual": "{0} дні", "plural": "{0} днів"}, 

1732 "month": "місяць", 

1733 "months": { 

1734 "singular": "{0} місяць", 

1735 "dual": "{0} місяці", 

1736 "plural": "{0} місяців", 

1737 }, 

1738 "year": "рік", 

1739 "years": {"singular": "{0} рік", "dual": "{0} роки", "plural": "{0} років"}, 

1740 } 

1741 

1742 month_names = [ 

1743 "", 

1744 "січня", 

1745 "лютого", 

1746 "березня", 

1747 "квітня", 

1748 "травня", 

1749 "червня", 

1750 "липня", 

1751 "серпня", 

1752 "вересня", 

1753 "жовтня", 

1754 "листопада", 

1755 "грудня", 

1756 ] 

1757 month_abbreviations = [ 

1758 "", 

1759 "січ", 

1760 "лют", 

1761 "бер", 

1762 "квіт", 

1763 "трав", 

1764 "черв", 

1765 "лип", 

1766 "серп", 

1767 "вер", 

1768 "жовт", 

1769 "лист", 

1770 "груд", 

1771 ] 

1772 

1773 day_names = [ 

1774 "", 

1775 "понеділок", 

1776 "вівторок", 

1777 "середа", 

1778 "четвер", 

1779 "п’ятниця", 

1780 "субота", 

1781 "неділя", 

1782 ] 

1783 day_abbreviations = ["", "пн", "вт", "ср", "чт", "пт", "сб", "нд"] 

1784 

1785 

1786class MacedonianLocale(SlavicBaseLocale): 

1787 names = ["mk", "mk-mk"] 

1788 

1789 past = "пред {0}" 

1790 future = "за {0}" 

1791 

1792 timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = { 

1793 "now": "сега", 

1794 "second": "една секунда", 

1795 "seconds": { 

1796 "singular": "{0} секунда", 

1797 "dual": "{0} секунди", 

1798 "plural": "{0} секунди", 

1799 }, 

1800 "minute": "една минута", 

1801 "minutes": { 

1802 "singular": "{0} минута", 

1803 "dual": "{0} минути", 

1804 "plural": "{0} минути", 

1805 }, 

1806 "hour": "еден саат", 

1807 "hours": {"singular": "{0} саат", "dual": "{0} саати", "plural": "{0} саати"}, 

1808 "day": "еден ден", 

1809 "days": {"singular": "{0} ден", "dual": "{0} дена", "plural": "{0} дена"}, 

1810 "week": "една недела", 

1811 "weeks": { 

1812 "singular": "{0} недела", 

1813 "dual": "{0} недели", 

1814 "plural": "{0} недели", 

1815 }, 

1816 "month": "еден месец", 

1817 "months": { 

1818 "singular": "{0} месец", 

1819 "dual": "{0} месеци", 

1820 "plural": "{0} месеци", 

1821 }, 

1822 "year": "една година", 

1823 "years": { 

1824 "singular": "{0} година", 

1825 "dual": "{0} години", 

1826 "plural": "{0} години", 

1827 }, 

1828 } 

1829 

1830 meridians = {"am": "дп", "pm": "пп", "AM": "претпладне", "PM": "попладне"} 

1831 

1832 month_names = [ 

1833 "", 

1834 "Јануари", 

1835 "Февруари", 

1836 "Март", 

1837 "Април", 

1838 "Мај", 

1839 "Јуни", 

1840 "Јули", 

1841 "Август", 

1842 "Септември", 

1843 "Октомври", 

1844 "Ноември", 

1845 "Декември", 

1846 ] 

1847 month_abbreviations = [ 

1848 "", 

1849 "Јан", 

1850 "Фев", 

1851 "Мар", 

1852 "Апр", 

1853 "Мај", 

1854 "Јун", 

1855 "Јул", 

1856 "Авг", 

1857 "Септ", 

1858 "Окт", 

1859 "Ноем", 

1860 "Декем", 

1861 ] 

1862 

1863 day_names = [ 

1864 "", 

1865 "Понеделник", 

1866 "Вторник", 

1867 "Среда", 

1868 "Четврток", 

1869 "Петок", 

1870 "Сабота", 

1871 "Недела", 

1872 ] 

1873 day_abbreviations = [ 

1874 "", 

1875 "Пон", 

1876 "Вт", 

1877 "Сре", 

1878 "Чет", 

1879 "Пет", 

1880 "Саб", 

1881 "Нед", 

1882 ] 

1883 

1884 

1885class GermanBaseLocale(Locale): 

1886 past = "vor {0}" 

1887 future = "in {0}" 

1888 and_word = "und" 

1889 

1890 timeframes = { 

1891 "now": "gerade eben", 

1892 "second": "einer Sekunde", 

1893 "seconds": "{0} Sekunden", 

1894 "minute": "einer Minute", 

1895 "minutes": "{0} Minuten", 

1896 "hour": "einer Stunde", 

1897 "hours": "{0} Stunden", 

1898 "day": "einem Tag", 

1899 "days": "{0} Tagen", 

1900 "week": "einer Woche", 

1901 "weeks": "{0} Wochen", 

1902 "month": "einem Monat", 

1903 "months": "{0} Monaten", 

1904 "year": "einem Jahr", 

1905 "years": "{0} Jahren", 

1906 } 

1907 

1908 timeframes_only_distance = timeframes.copy() 

1909 timeframes_only_distance["second"] = "eine Sekunde" 

1910 timeframes_only_distance["minute"] = "eine Minute" 

1911 timeframes_only_distance["hour"] = "eine Stunde" 

1912 timeframes_only_distance["day"] = "ein Tag" 

1913 timeframes_only_distance["days"] = "{0} Tage" 

1914 timeframes_only_distance["week"] = "eine Woche" 

1915 timeframes_only_distance["month"] = "ein Monat" 

1916 timeframes_only_distance["months"] = "{0} Monate" 

1917 timeframes_only_distance["year"] = "ein Jahr" 

1918 timeframes_only_distance["years"] = "{0} Jahre" 

1919 

1920 month_names = [ 

1921 "", 

1922 "Januar", 

1923 "Februar", 

1924 "März", 

1925 "April", 

1926 "Mai", 

1927 "Juni", 

1928 "Juli", 

1929 "August", 

1930 "September", 

1931 "Oktober", 

1932 "November", 

1933 "Dezember", 

1934 ] 

1935 

1936 month_abbreviations = [ 

1937 "", 

1938 "Jan", 

1939 "Feb", 

1940 "Mär", 

1941 "Apr", 

1942 "Mai", 

1943 "Jun", 

1944 "Jul", 

1945 "Aug", 

1946 "Sep", 

1947 "Okt", 

1948 "Nov", 

1949 "Dez", 

1950 ] 

1951 

1952 day_names = [ 

1953 "", 

1954 "Montag", 

1955 "Dienstag", 

1956 "Mittwoch", 

1957 "Donnerstag", 

1958 "Freitag", 

1959 "Samstag", 

1960 "Sonntag", 

1961 ] 

1962 

1963 day_abbreviations = ["", "Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"] 

1964 

1965 def _ordinal_number(self, n: int) -> str: 

1966 return f"{n}." 

1967 

1968 def describe( 

1969 self, 

1970 timeframe: TimeFrameLiteral, 

1971 delta: Union[int, float] = 0, 

1972 only_distance: bool = False, 

1973 ) -> str: 

1974 """Describes a delta within a timeframe in plain language. 

1975 

1976 :param timeframe: a string representing a timeframe. 

1977 :param delta: a quantity representing a delta in a timeframe. 

1978 :param only_distance: return only distance eg: "11 seconds" without "in" or "ago" keywords 

1979 """ 

1980 

1981 if not only_distance: 

1982 return super().describe(timeframe, delta, only_distance) 

1983 

1984 # German uses a different case without 'in' or 'ago' 

1985 humanized = self.timeframes_only_distance[timeframe].format(trunc(abs(delta))) 

1986 

1987 return humanized 

1988 

1989 

1990class GermanLocale(GermanBaseLocale, Locale): 

1991 names = ["de", "de-de"] 

1992 

1993 

1994class SwissLocale(GermanBaseLocale, Locale): 

1995 names = ["de-ch"] 

1996 

1997 

1998class AustrianLocale(GermanBaseLocale, Locale): 

1999 names = ["de-at"] 

2000 

2001 month_names = [ 

2002 "", 

2003 "Jänner", 

2004 "Februar", 

2005 "März", 

2006 "April", 

2007 "Mai", 

2008 "Juni", 

2009 "Juli", 

2010 "August", 

2011 "September", 

2012 "Oktober", 

2013 "November", 

2014 "Dezember", 

2015 ] 

2016 

2017 

2018class NorwegianLocale(Locale): 

2019 names = ["nb", "nb-no"] 

2020 

2021 past = "for {0} siden" 

2022 future = "om {0}" 

2023 

2024 timeframes = { 

2025 "now": "nå nettopp", 

2026 "second": "ett sekund", 

2027 "seconds": "{0} sekunder", 

2028 "minute": "ett minutt", 

2029 "minutes": "{0} minutter", 

2030 "hour": "en time", 

2031 "hours": "{0} timer", 

2032 "day": "en dag", 

2033 "days": "{0} dager", 

2034 "week": "en uke", 

2035 "weeks": "{0} uker", 

2036 "month": "en måned", 

2037 "months": "{0} måneder", 

2038 "year": "ett år", 

2039 "years": "{0} år", 

2040 } 

2041 

2042 month_names = [ 

2043 "", 

2044 "januar", 

2045 "februar", 

2046 "mars", 

2047 "april", 

2048 "mai", 

2049 "juni", 

2050 "juli", 

2051 "august", 

2052 "september", 

2053 "oktober", 

2054 "november", 

2055 "desember", 

2056 ] 

2057 month_abbreviations = [ 

2058 "", 

2059 "jan", 

2060 "feb", 

2061 "mar", 

2062 "apr", 

2063 "mai", 

2064 "jun", 

2065 "jul", 

2066 "aug", 

2067 "sep", 

2068 "okt", 

2069 "nov", 

2070 "des", 

2071 ] 

2072 

2073 day_names = [ 

2074 "", 

2075 "mandag", 

2076 "tirsdag", 

2077 "onsdag", 

2078 "torsdag", 

2079 "fredag", 

2080 "lørdag", 

2081 "søndag", 

2082 ] 

2083 day_abbreviations = ["", "ma", "ti", "on", "to", "fr", "lø", "sø"] 

2084 

2085 def _ordinal_number(self, n: int) -> str: 

2086 return f"{n}." 

2087 

2088 

2089class NewNorwegianLocale(Locale): 

2090 names = ["nn", "nn-no"] 

2091 

2092 past = "for {0} sidan" 

2093 future = "om {0}" 

2094 

2095 timeframes = { 

2096 "now": "no nettopp", 

2097 "second": "eitt sekund", 

2098 "seconds": "{0} sekund", 

2099 "minute": "eitt minutt", 

2100 "minutes": "{0} minutt", 

2101 "hour": "ein time", 

2102 "hours": "{0} timar", 

2103 "day": "ein dag", 

2104 "days": "{0} dagar", 

2105 "week": "ei veke", 

2106 "weeks": "{0} veker", 

2107 "month": "ein månad", 

2108 "months": "{0} månader", 

2109 "year": "eitt år", 

2110 "years": "{0} år", 

2111 } 

2112 

2113 month_names = [ 

2114 "", 

2115 "januar", 

2116 "februar", 

2117 "mars", 

2118 "april", 

2119 "mai", 

2120 "juni", 

2121 "juli", 

2122 "august", 

2123 "september", 

2124 "oktober", 

2125 "november", 

2126 "desember", 

2127 ] 

2128 month_abbreviations = [ 

2129 "", 

2130 "jan", 

2131 "feb", 

2132 "mar", 

2133 "apr", 

2134 "mai", 

2135 "jun", 

2136 "jul", 

2137 "aug", 

2138 "sep", 

2139 "okt", 

2140 "nov", 

2141 "des", 

2142 ] 

2143 

2144 day_names = [ 

2145 "", 

2146 "måndag", 

2147 "tysdag", 

2148 "onsdag", 

2149 "torsdag", 

2150 "fredag", 

2151 "laurdag", 

2152 "sundag", 

2153 ] 

2154 day_abbreviations = ["", "må", "ty", "on", "to", "fr", "la", "su"] 

2155 

2156 def _ordinal_number(self, n: int) -> str: 

2157 return f"{n}." 

2158 

2159 

2160class PortugueseLocale(Locale): 

2161 names = ["pt", "pt-pt"] 

2162 

2163 past = "há {0}" 

2164 future = "em {0}" 

2165 and_word = "e" 

2166 

2167 timeframes = { 

2168 "now": "agora", 

2169 "second": "um segundo", 

2170 "seconds": "{0} segundos", 

2171 "minute": "um minuto", 

2172 "minutes": "{0} minutos", 

2173 "hour": "uma hora", 

2174 "hours": "{0} horas", 

2175 "day": "um dia", 

2176 "days": "{0} dias", 

2177 "week": "uma semana", 

2178 "weeks": "{0} semanas", 

2179 "month": "um mês", 

2180 "months": "{0} meses", 

2181 "year": "um ano", 

2182 "years": "{0} anos", 

2183 } 

2184 

2185 month_names = [ 

2186 "", 

2187 "Janeiro", 

2188 "Fevereiro", 

2189 "Março", 

2190 "Abril", 

2191 "Maio", 

2192 "Junho", 

2193 "Julho", 

2194 "Agosto", 

2195 "Setembro", 

2196 "Outubro", 

2197 "Novembro", 

2198 "Dezembro", 

2199 ] 

2200 month_abbreviations = [ 

2201 "", 

2202 "Jan", 

2203 "Fev", 

2204 "Mar", 

2205 "Abr", 

2206 "Mai", 

2207 "Jun", 

2208 "Jul", 

2209 "Ago", 

2210 "Set", 

2211 "Out", 

2212 "Nov", 

2213 "Dez", 

2214 ] 

2215 

2216 day_names = [ 

2217 "", 

2218 "Segunda-feira", 

2219 "Terça-feira", 

2220 "Quarta-feira", 

2221 "Quinta-feira", 

2222 "Sexta-feira", 

2223 "Sábado", 

2224 "Domingo", 

2225 ] 

2226 day_abbreviations = ["", "Seg", "Ter", "Qua", "Qui", "Sex", "Sab", "Dom"] 

2227 

2228 

2229class BrazilianPortugueseLocale(PortugueseLocale): 

2230 names = ["pt-br"] 

2231 

2232 past = "faz {0}" 

2233 

2234 

2235class TagalogLocale(Locale): 

2236 names = ["tl", "tl-ph"] 

2237 

2238 past = "nakaraang {0}" 

2239 future = "{0} mula ngayon" 

2240 

2241 timeframes = { 

2242 "now": "ngayon lang", 

2243 "second": "isang segundo", 

2244 "seconds": "{0} segundo", 

2245 "minute": "isang minuto", 

2246 "minutes": "{0} minuto", 

2247 "hour": "isang oras", 

2248 "hours": "{0} oras", 

2249 "day": "isang araw", 

2250 "days": "{0} araw", 

2251 "week": "isang linggo", 

2252 "weeks": "{0} linggo", 

2253 "month": "isang buwan", 

2254 "months": "{0} buwan", 

2255 "year": "isang taon", 

2256 "years": "{0} taon", 

2257 } 

2258 

2259 month_names = [ 

2260 "", 

2261 "Enero", 

2262 "Pebrero", 

2263 "Marso", 

2264 "Abril", 

2265 "Mayo", 

2266 "Hunyo", 

2267 "Hulyo", 

2268 "Agosto", 

2269 "Setyembre", 

2270 "Oktubre", 

2271 "Nobyembre", 

2272 "Disyembre", 

2273 ] 

2274 month_abbreviations = [ 

2275 "", 

2276 "Ene", 

2277 "Peb", 

2278 "Mar", 

2279 "Abr", 

2280 "May", 

2281 "Hun", 

2282 "Hul", 

2283 "Ago", 

2284 "Set", 

2285 "Okt", 

2286 "Nob", 

2287 "Dis", 

2288 ] 

2289 

2290 day_names = [ 

2291 "", 

2292 "Lunes", 

2293 "Martes", 

2294 "Miyerkules", 

2295 "Huwebes", 

2296 "Biyernes", 

2297 "Sabado", 

2298 "Linggo", 

2299 ] 

2300 day_abbreviations = ["", "Lun", "Mar", "Miy", "Huw", "Biy", "Sab", "Lin"] 

2301 

2302 meridians = {"am": "nu", "pm": "nh", "AM": "ng umaga", "PM": "ng hapon"} 

2303 

2304 def _ordinal_number(self, n: int) -> str: 

2305 return f"ika-{n}" 

2306 

2307 

2308class VietnameseLocale(Locale): 

2309 names = ["vi", "vi-vn"] 

2310 

2311 past = "{0} trước" 

2312 future = "{0} nữa" 

2313 

2314 timeframes = { 

2315 "now": "hiện tại", 

2316 "second": "một giây", 

2317 "seconds": "{0} giây", 

2318 "minute": "một phút", 

2319 "minutes": "{0} phút", 

2320 "hour": "một giờ", 

2321 "hours": "{0} giờ", 

2322 "day": "một ngày", 

2323 "days": "{0} ngày", 

2324 "week": "một tuần", 

2325 "weeks": "{0} tuần", 

2326 "month": "một tháng", 

2327 "months": "{0} tháng", 

2328 "year": "một năm", 

2329 "years": "{0} năm", 

2330 } 

2331 

2332 month_names = [ 

2333 "", 

2334 "Tháng Một", 

2335 "Tháng Hai", 

2336 "Tháng Ba", 

2337 "Tháng Tư", 

2338 "Tháng Năm", 

2339 "Tháng Sáu", 

2340 "Tháng Bảy", 

2341 "Tháng Tám", 

2342 "Tháng Chín", 

2343 "Tháng Mười", 

2344 "Tháng Mười Một", 

2345 "Tháng Mười Hai", 

2346 ] 

2347 month_abbreviations = [ 

2348 "", 

2349 "Tháng 1", 

2350 "Tháng 2", 

2351 "Tháng 3", 

2352 "Tháng 4", 

2353 "Tháng 5", 

2354 "Tháng 6", 

2355 "Tháng 7", 

2356 "Tháng 8", 

2357 "Tháng 9", 

2358 "Tháng 10", 

2359 "Tháng 11", 

2360 "Tháng 12", 

2361 ] 

2362 

2363 day_names = [ 

2364 "", 

2365 "Thứ Hai", 

2366 "Thứ Ba", 

2367 "Thứ Tư", 

2368 "Thứ Năm", 

2369 "Thứ Sáu", 

2370 "Thứ Bảy", 

2371 "Chủ Nhật", 

2372 ] 

2373 day_abbreviations = ["", "Thứ 2", "Thứ 3", "Thứ 4", "Thứ 5", "Thứ 6", "Thứ 7", "CN"] 

2374 

2375 

2376class TurkishLocale(Locale): 

2377 names = ["tr", "tr-tr"] 

2378 

2379 past = "{0} önce" 

2380 future = "{0} sonra" 

2381 and_word = "ve" 

2382 

2383 timeframes = { 

2384 "now": "şimdi", 

2385 "second": "bir saniye", 

2386 "seconds": "{0} saniye", 

2387 "minute": "bir dakika", 

2388 "minutes": "{0} dakika", 

2389 "hour": "bir saat", 

2390 "hours": "{0} saat", 

2391 "day": "bir gün", 

2392 "days": "{0} gün", 

2393 "week": "bir hafta", 

2394 "weeks": "{0} hafta", 

2395 "month": "bir ay", 

2396 "months": "{0} ay", 

2397 "year": "bir yıl", 

2398 "years": "{0} yıl", 

2399 } 

2400 

2401 meridians = {"am": "öö", "pm": "ös", "AM": "ÖÖ", "PM": "ÖS"} 

2402 

2403 month_names = [ 

2404 "", 

2405 "Ocak", 

2406 "Şubat", 

2407 "Mart", 

2408 "Nisan", 

2409 "Mayıs", 

2410 "Haziran", 

2411 "Temmuz", 

2412 "Ağustos", 

2413 "Eylül", 

2414 "Ekim", 

2415 "Kasım", 

2416 "Aralık", 

2417 ] 

2418 month_abbreviations = [ 

2419 "", 

2420 "Oca", 

2421 "Şub", 

2422 "Mar", 

2423 "Nis", 

2424 "May", 

2425 "Haz", 

2426 "Tem", 

2427 "Ağu", 

2428 "Eyl", 

2429 "Eki", 

2430 "Kas", 

2431 "Ara", 

2432 ] 

2433 

2434 day_names = [ 

2435 "", 

2436 "Pazartesi", 

2437 "Salı", 

2438 "Çarşamba", 

2439 "Perşembe", 

2440 "Cuma", 

2441 "Cumartesi", 

2442 "Pazar", 

2443 ] 

2444 day_abbreviations = ["", "Pzt", "Sal", "Çar", "Per", "Cum", "Cmt", "Paz"] 

2445 

2446 

2447class AzerbaijaniLocale(Locale): 

2448 names = ["az", "az-az"] 

2449 

2450 past = "{0} əvvəl" 

2451 future = "{0} sonra" 

2452 

2453 timeframes = { 

2454 "now": "indi", 

2455 "second": "bir saniyə", 

2456 "seconds": "{0} saniyə", 

2457 "minute": "bir dəqiqə", 

2458 "minutes": "{0} dəqiqə", 

2459 "hour": "bir saat", 

2460 "hours": "{0} saat", 

2461 "day": "bir gün", 

2462 "days": "{0} gün", 

2463 "week": "bir həftə", 

2464 "weeks": "{0} həftə", 

2465 "month": "bir ay", 

2466 "months": "{0} ay", 

2467 "year": "bir il", 

2468 "years": "{0} il", 

2469 } 

2470 

2471 month_names = [ 

2472 "", 

2473 "Yanvar", 

2474 "Fevral", 

2475 "Mart", 

2476 "Aprel", 

2477 "May", 

2478 "İyun", 

2479 "İyul", 

2480 "Avqust", 

2481 "Sentyabr", 

2482 "Oktyabr", 

2483 "Noyabr", 

2484 "Dekabr", 

2485 ] 

2486 month_abbreviations = [ 

2487 "", 

2488 "Yan", 

2489 "Fev", 

2490 "Mar", 

2491 "Apr", 

2492 "May", 

2493 "İyn", 

2494 "İyl", 

2495 "Avq", 

2496 "Sen", 

2497 "Okt", 

2498 "Noy", 

2499 "Dek", 

2500 ] 

2501 

2502 day_names = [ 

2503 "", 

2504 "Bazar ertəsi", 

2505 "Çərşənbə axşamı", 

2506 "Çərşənbə", 

2507 "Cümə axşamı", 

2508 "Cümə", 

2509 "Şənbə", 

2510 "Bazar", 

2511 ] 

2512 day_abbreviations = ["", "Ber", "Çax", "Çər", "Cax", "Cüm", "Şnb", "Bzr"] 

2513 

2514 

2515class ArabicLocale(Locale): 

2516 names = [ 

2517 "ar", 

2518 "ar-ae", 

2519 "ar-bh", 

2520 "ar-dj", 

2521 "ar-eg", 

2522 "ar-eh", 

2523 "ar-er", 

2524 "ar-km", 

2525 "ar-kw", 

2526 "ar-ly", 

2527 "ar-om", 

2528 "ar-qa", 

2529 "ar-sa", 

2530 "ar-sd", 

2531 "ar-so", 

2532 "ar-ss", 

2533 "ar-td", 

2534 "ar-ye", 

2535 ] 

2536 

2537 past = "منذ {0}" 

2538 future = "خلال {0}" 

2539 

2540 timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = { 

2541 "now": "الآن", 

2542 "second": "ثانية", 

2543 "seconds": {"2": "ثانيتين", "ten": "{0} ثوان", "higher": "{0} ثانية"}, 

2544 "minute": "دقيقة", 

2545 "minutes": {"2": "دقيقتين", "ten": "{0} دقائق", "higher": "{0} دقيقة"}, 

2546 "hour": "ساعة", 

2547 "hours": {"2": "ساعتين", "ten": "{0} ساعات", "higher": "{0} ساعة"}, 

2548 "day": "يوم", 

2549 "days": {"2": "يومين", "ten": "{0} أيام", "higher": "{0} يوم"}, 

2550 "month": "شهر", 

2551 "months": {"2": "شهرين", "ten": "{0} أشهر", "higher": "{0} شهر"}, 

2552 "year": "سنة", 

2553 "years": {"2": "سنتين", "ten": "{0} سنوات", "higher": "{0} سنة"}, 

2554 } 

2555 

2556 month_names = [ 

2557 "", 

2558 "يناير", 

2559 "فبراير", 

2560 "مارس", 

2561 "أبريل", 

2562 "مايو", 

2563 "يونيو", 

2564 "يوليو", 

2565 "أغسطس", 

2566 "سبتمبر", 

2567 "أكتوبر", 

2568 "نوفمبر", 

2569 "ديسمبر", 

2570 ] 

2571 month_abbreviations = [ 

2572 "", 

2573 "يناير", 

2574 "فبراير", 

2575 "مارس", 

2576 "أبريل", 

2577 "مايو", 

2578 "يونيو", 

2579 "يوليو", 

2580 "أغسطس", 

2581 "سبتمبر", 

2582 "أكتوبر", 

2583 "نوفمبر", 

2584 "ديسمبر", 

2585 ] 

2586 

2587 day_names = [ 

2588 "", 

2589 "الإثنين", 

2590 "الثلاثاء", 

2591 "الأربعاء", 

2592 "الخميس", 

2593 "الجمعة", 

2594 "السبت", 

2595 "الأحد", 

2596 ] 

2597 day_abbreviations = ["", "إثنين", "ثلاثاء", "أربعاء", "خميس", "جمعة", "سبت", "أحد"] 

2598 

2599 def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str: 

2600 form = self.timeframes[timeframe] 

2601 delta = abs(delta) 

2602 if isinstance(form, Mapping): 

2603 if delta == 2: 

2604 form = form["2"] 

2605 elif 2 < delta <= 10: 

2606 form = form["ten"] 

2607 else: 

2608 form = form["higher"] 

2609 

2610 return form.format(delta) 

2611 

2612 

2613class LevantArabicLocale(ArabicLocale): 

2614 names = ["ar-iq", "ar-jo", "ar-lb", "ar-ps", "ar-sy"] 

2615 month_names = [ 

2616 "", 

2617 "كانون الثاني", 

2618 "شباط", 

2619 "آذار", 

2620 "نيسان", 

2621 "أيار", 

2622 "حزيران", 

2623 "تموز", 

2624 "آب", 

2625 "أيلول", 

2626 "تشرين الأول", 

2627 "تشرين الثاني", 

2628 "كانون الأول", 

2629 ] 

2630 month_abbreviations = [ 

2631 "", 

2632 "كانون الثاني", 

2633 "شباط", 

2634 "آذار", 

2635 "نيسان", 

2636 "أيار", 

2637 "حزيران", 

2638 "تموز", 

2639 "آب", 

2640 "أيلول", 

2641 "تشرين الأول", 

2642 "تشرين الثاني", 

2643 "كانون الأول", 

2644 ] 

2645 

2646 

2647class AlgeriaTunisiaArabicLocale(ArabicLocale): 

2648 names = ["ar-tn", "ar-dz"] 

2649 month_names = [ 

2650 "", 

2651 "جانفي", 

2652 "فيفري", 

2653 "مارس", 

2654 "أفريل", 

2655 "ماي", 

2656 "جوان", 

2657 "جويلية", 

2658 "أوت", 

2659 "سبتمبر", 

2660 "أكتوبر", 

2661 "نوفمبر", 

2662 "ديسمبر", 

2663 ] 

2664 month_abbreviations = [ 

2665 "", 

2666 "جانفي", 

2667 "فيفري", 

2668 "مارس", 

2669 "أفريل", 

2670 "ماي", 

2671 "جوان", 

2672 "جويلية", 

2673 "أوت", 

2674 "سبتمبر", 

2675 "أكتوبر", 

2676 "نوفمبر", 

2677 "ديسمبر", 

2678 ] 

2679 

2680 

2681class MauritaniaArabicLocale(ArabicLocale): 

2682 names = ["ar-mr"] 

2683 month_names = [ 

2684 "", 

2685 "يناير", 

2686 "فبراير", 

2687 "مارس", 

2688 "إبريل", 

2689 "مايو", 

2690 "يونيو", 

2691 "يوليو", 

2692 "أغشت", 

2693 "شتمبر", 

2694 "أكتوبر", 

2695 "نوفمبر", 

2696 "دجمبر", 

2697 ] 

2698 month_abbreviations = [ 

2699 "", 

2700 "يناير", 

2701 "فبراير", 

2702 "مارس", 

2703 "إبريل", 

2704 "مايو", 

2705 "يونيو", 

2706 "يوليو", 

2707 "أغشت", 

2708 "شتمبر", 

2709 "أكتوبر", 

2710 "نوفمبر", 

2711 "دجمبر", 

2712 ] 

2713 

2714 

2715class MoroccoArabicLocale(ArabicLocale): 

2716 names = ["ar-ma"] 

2717 month_names = [ 

2718 "", 

2719 "يناير", 

2720 "فبراير", 

2721 "مارس", 

2722 "أبريل", 

2723 "ماي", 

2724 "يونيو", 

2725 "يوليوز", 

2726 "غشت", 

2727 "شتنبر", 

2728 "أكتوبر", 

2729 "نونبر", 

2730 "دجنبر", 

2731 ] 

2732 month_abbreviations = [ 

2733 "", 

2734 "يناير", 

2735 "فبراير", 

2736 "مارس", 

2737 "أبريل", 

2738 "ماي", 

2739 "يونيو", 

2740 "يوليوز", 

2741 "غشت", 

2742 "شتنبر", 

2743 "أكتوبر", 

2744 "نونبر", 

2745 "دجنبر", 

2746 ] 

2747 

2748 

2749class IcelandicLocale(Locale): 

2750 def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str: 

2751 form = self.timeframes[timeframe] 

2752 

2753 if isinstance(form, Mapping): 

2754 if delta < 0: 

2755 form = form["past"] 

2756 elif delta > 0: 

2757 form = form["future"] 

2758 else: 

2759 raise ValueError( 

2760 "Icelandic Locale does not support units with a delta of zero. " 

2761 "Please consider making a contribution to fix this issue." 

2762 ) 

2763 # FIXME: handle when delta is 0 

2764 

2765 return form.format(abs(delta)) 

2766 

2767 names = ["is", "is-is"] 

2768 

2769 past = "fyrir {0} síðan" 

2770 future = "eftir {0}" 

2771 

2772 timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = { 

2773 "now": "rétt í þessu", 

2774 "second": {"past": "sekúndu", "future": "sekúndu"}, 

2775 "seconds": {"past": "{0} nokkrum sekúndum", "future": "nokkrar sekúndur"}, 

2776 "minute": {"past": "einni mínútu", "future": "eina mínútu"}, 

2777 "minutes": {"past": "{0} mínútum", "future": "{0} mínútur"}, 

2778 "hour": {"past": "einum tíma", "future": "einn tíma"}, 

2779 "hours": {"past": "{0} tímum", "future": "{0} tíma"}, 

2780 "day": {"past": "einum degi", "future": "einn dag"}, 

2781 "days": {"past": "{0} dögum", "future": "{0} daga"}, 

2782 "month": {"past": "einum mánuði", "future": "einn mánuð"}, 

2783 "months": {"past": "{0} mánuðum", "future": "{0} mánuði"}, 

2784 "year": {"past": "einu ári", "future": "eitt ár"}, 

2785 "years": {"past": "{0} árum", "future": "{0} ár"}, 

2786 } 

2787 

2788 meridians = {"am": "f.h.", "pm": "e.h.", "AM": "f.h.", "PM": "e.h."} 

2789 

2790 month_names = [ 

2791 "", 

2792 "janúar", 

2793 "febrúar", 

2794 "mars", 

2795 "apríl", 

2796 "maí", 

2797 "júní", 

2798 "júlí", 

2799 "ágúst", 

2800 "september", 

2801 "október", 

2802 "nóvember", 

2803 "desember", 

2804 ] 

2805 month_abbreviations = [ 

2806 "", 

2807 "jan", 

2808 "feb", 

2809 "mar", 

2810 "apr", 

2811 "maí", 

2812 "jún", 

2813 "júl", 

2814 "ágú", 

2815 "sep", 

2816 "okt", 

2817 "nóv", 

2818 "des", 

2819 ] 

2820 

2821 day_names = [ 

2822 "", 

2823 "mánudagur", 

2824 "þriðjudagur", 

2825 "miðvikudagur", 

2826 "fimmtudagur", 

2827 "föstudagur", 

2828 "laugardagur", 

2829 "sunnudagur", 

2830 ] 

2831 day_abbreviations = ["", "mán", "þri", "mið", "fim", "fös", "lau", "sun"] 

2832 

2833 

2834class DanishLocale(Locale): 

2835 names = ["da", "da-dk"] 

2836 

2837 past = "for {0} siden" 

2838 future = "om {0}" 

2839 and_word = "og" 

2840 

2841 timeframes = { 

2842 "now": "lige nu", 

2843 "second": "et sekund", 

2844 "seconds": "{0} sekunder", 

2845 "minute": "et minut", 

2846 "minutes": "{0} minutter", 

2847 "hour": "en time", 

2848 "hours": "{0} timer", 

2849 "day": "en dag", 

2850 "days": "{0} dage", 

2851 "week": "en uge", 

2852 "weeks": "{0} uger", 

2853 "month": "en måned", 

2854 "months": "{0} måneder", 

2855 "year": "et år", 

2856 "years": "{0} år", 

2857 } 

2858 

2859 month_names = [ 

2860 "", 

2861 "januar", 

2862 "februar", 

2863 "marts", 

2864 "april", 

2865 "maj", 

2866 "juni", 

2867 "juli", 

2868 "august", 

2869 "september", 

2870 "oktober", 

2871 "november", 

2872 "december", 

2873 ] 

2874 month_abbreviations = [ 

2875 "", 

2876 "jan", 

2877 "feb", 

2878 "mar", 

2879 "apr", 

2880 "maj", 

2881 "jun", 

2882 "jul", 

2883 "aug", 

2884 "sep", 

2885 "okt", 

2886 "nov", 

2887 "dec", 

2888 ] 

2889 

2890 day_names = [ 

2891 "", 

2892 "mandag", 

2893 "tirsdag", 

2894 "onsdag", 

2895 "torsdag", 

2896 "fredag", 

2897 "lørdag", 

2898 "søndag", 

2899 ] 

2900 day_abbreviations = ["", "man", "tir", "ons", "tor", "fre", "lør", "søn"] 

2901 

2902 def _ordinal_number(self, n: int) -> str: 

2903 return f"{n}." 

2904 

2905 

2906class MalayalamLocale(Locale): 

2907 names = ["ml"] 

2908 

2909 past = "{0} മുമ്പ്" 

2910 future = "{0} ശേഷം" 

2911 

2912 timeframes = { 

2913 "now": "ഇപ്പോൾ", 

2914 "second": "ഒരു നിമിഷം", 

2915 "seconds": "{0} സെക്കന്റ്‌", 

2916 "minute": "ഒരു മിനിറ്റ്", 

2917 "minutes": "{0} മിനിറ്റ്", 

2918 "hour": "ഒരു മണിക്കൂർ", 

2919 "hours": "{0} മണിക്കൂർ", 

2920 "day": "ഒരു ദിവസം ", 

2921 "days": "{0} ദിവസം ", 

2922 "month": "ഒരു മാസം ", 

2923 "months": "{0} മാസം ", 

2924 "year": "ഒരു വർഷം ", 

2925 "years": "{0} വർഷം ", 

2926 } 

2927 

2928 meridians = { 

2929 "am": "രാവിലെ", 

2930 "pm": "ഉച്ചക്ക് ശേഷം", 

2931 "AM": "രാവിലെ", 

2932 "PM": "ഉച്ചക്ക് ശേഷം", 

2933 } 

2934 

2935 month_names = [ 

2936 "", 

2937 "ജനുവരി", 

2938 "ഫെബ്രുവരി", 

2939 "മാർച്ച്‌", 

2940 "ഏപ്രിൽ ", 

2941 "മെയ്‌ ", 

2942 "ജൂണ്‍", 

2943 "ജൂലൈ", 

2944 "ഓഗസ്റ്റ്‌", 

2945 "സെപ്റ്റംബർ", 

2946 "ഒക്ടോബർ", 

2947 "നവംബർ", 

2948 "ഡിസംബർ", 

2949 ] 

2950 month_abbreviations = [ 

2951 "", 

2952 "ജനു", 

2953 "ഫെബ് ", 

2954 "മാർ", 

2955 "ഏപ്രിൽ", 

2956 "മേയ്", 

2957 "ജൂണ്‍", 

2958 "ജൂലൈ", 

2959 "ഓഗസ്റ", 

2960 "സെപ്റ്റ", 

2961 "ഒക്ടോ", 

2962 "നവം", 

2963 "ഡിസം", 

2964 ] 

2965 

2966 day_names = ["", "തിങ്കള്‍", "ചൊവ്വ", "ബുധന്‍", "വ്യാഴം", "വെള്ളി", "ശനി", "ഞായര്‍"] 

2967 day_abbreviations = [ 

2968 "", 

2969 "തിങ്കള്‍", 

2970 "ചൊവ്വ", 

2971 "ബുധന്‍", 

2972 "വ്യാഴം", 

2973 "വെള്ളി", 

2974 "ശനി", 

2975 "ഞായര്‍", 

2976 ] 

2977 

2978 

2979class HindiLocale(Locale): 

2980 names = ["hi", "hi-in"] 

2981 

2982 past = "{0} पहले" 

2983 future = "{0} बाद" 

2984 

2985 timeframes = { 

2986 "now": "अभी", 

2987 "second": "एक पल", 

2988 "seconds": "{0} सेकंड्", 

2989 "minute": "एक मिनट ", 

2990 "minutes": "{0} मिनट ", 

2991 "hour": "एक घंटा", 

2992 "hours": "{0} घंटे", 

2993 "day": "एक दिन", 

2994 "days": "{0} दिन", 

2995 "month": "एक माह ", 

2996 "months": "{0} महीने ", 

2997 "year": "एक वर्ष ", 

2998 "years": "{0} साल ", 

2999 } 

3000 

3001 meridians = {"am": "सुबह", "pm": "शाम", "AM": "सुबह", "PM": "शाम"} 

3002 

3003 month_names = [ 

3004 "", 

3005 "जनवरी", 

3006 "फरवरी", 

3007 "मार्च", 

3008 "अप्रैल ", 

3009 "मई", 

3010 "जून", 

3011 "जुलाई", 

3012 "अगस्त", 

3013 "सितंबर", 

3014 "अक्टूबर", 

3015 "नवंबर", 

3016 "दिसंबर", 

3017 ] 

3018 month_abbreviations = [ 

3019 "", 

3020 "जन", 

3021 "फ़र", 

3022 "मार्च", 

3023 "अप्रै", 

3024 "मई", 

3025 "जून", 

3026 "जुलाई", 

3027 "आग", 

3028 "सित", 

3029 "अकत", 

3030 "नवे", 

3031 "दिस", 

3032 ] 

3033 

3034 day_names = [ 

3035 "", 

3036 "सोमवार", 

3037 "मंगलवार", 

3038 "बुधवार", 

3039 "गुरुवार", 

3040 "शुक्रवार", 

3041 "शनिवार", 

3042 "रविवार", 

3043 ] 

3044 day_abbreviations = ["", "सोम", "मंगल", "बुध", "गुरुवार", "शुक्र", "शनि", "रवि"] 

3045 

3046 

3047class CzechLocale(Locale): 

3048 names = ["cs", "cs-cz"] 

3049 

3050 timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = { 

3051 "now": "Teď", 

3052 "second": {"past": "vteřina", "future": "vteřina"}, 

3053 "seconds": { 

3054 "zero": "vteřina", 

3055 "past": "{0} sekundami", 

3056 "future-singular": "{0} sekundy", 

3057 "future-paucal": "{0} sekund", 

3058 }, 

3059 "minute": {"past": "minutou", "future": "minutu"}, 

3060 "minutes": { 

3061 "zero": "{0} minut", 

3062 "past": "{0} minutami", 

3063 "future-singular": "{0} minuty", 

3064 "future-paucal": "{0} minut", 

3065 }, 

3066 "hour": {"past": "hodinou", "future": "hodinu"}, 

3067 "hours": { 

3068 "zero": "{0} hodin", 

3069 "past": "{0} hodinami", 

3070 "future-singular": "{0} hodiny", 

3071 "future-paucal": "{0} hodin", 

3072 }, 

3073 "day": {"past": "dnem", "future": "den"}, 

3074 "days": { 

3075 "zero": "{0} dnů", 

3076 "past": "{0} dny", 

3077 "future-singular": "{0} dny", 

3078 "future-paucal": "{0} dnů", 

3079 }, 

3080 "week": {"past": "týdnem", "future": "týden"}, 

3081 "weeks": { 

3082 "zero": "{0} týdnů", 

3083 "past": "{0} týdny", 

3084 "future-singular": "{0} týdny", 

3085 "future-paucal": "{0} týdnů", 

3086 }, 

3087 "month": {"past": "měsícem", "future": "měsíc"}, 

3088 "months": { 

3089 "zero": "{0} měsíců", 

3090 "past": "{0} měsíci", 

3091 "future-singular": "{0} měsíce", 

3092 "future-paucal": "{0} měsíců", 

3093 }, 

3094 "year": {"past": "rokem", "future": "rok"}, 

3095 "years": { 

3096 "zero": "{0} let", 

3097 "past": "{0} lety", 

3098 "future-singular": "{0} roky", 

3099 "future-paucal": "{0} let", 

3100 }, 

3101 } 

3102 

3103 past = "Před {0}" 

3104 future = "Za {0}" 

3105 

3106 month_names = [ 

3107 "", 

3108 "leden", 

3109 "únor", 

3110 "březen", 

3111 "duben", 

3112 "květen", 

3113 "červen", 

3114 "červenec", 

3115 "srpen", 

3116 "září", 

3117 "říjen", 

3118 "listopad", 

3119 "prosinec", 

3120 ] 

3121 month_abbreviations = [ 

3122 "", 

3123 "led", 

3124 "úno", 

3125 "bře", 

3126 "dub", 

3127 "kvě", 

3128 "čvn", 

3129 "čvc", 

3130 "srp", 

3131 "zář", 

3132 "říj", 

3133 "lis", 

3134 "pro", 

3135 ] 

3136 

3137 day_names = [ 

3138 "", 

3139 "pondělí", 

3140 "úterý", 

3141 "středa", 

3142 "čtvrtek", 

3143 "pátek", 

3144 "sobota", 

3145 "neděle", 

3146 ] 

3147 day_abbreviations = ["", "po", "út", "st", "čt", "pá", "so", "ne"] 

3148 

3149 def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str: 

3150 """Czech aware time frame format function, takes into account 

3151 the differences between past and future forms.""" 

3152 abs_delta = abs(delta) 

3153 form = self.timeframes[timeframe] 

3154 

3155 if isinstance(form, str): 

3156 return form.format(abs_delta) 

3157 

3158 if delta == 0: 

3159 key = "zero" # And *never* use 0 in the singular! 

3160 elif delta < 0: 

3161 key = "past" 

3162 else: 

3163 # Needed since both regular future and future-singular and future-paucal cases 

3164 if "future-singular" not in form: 

3165 key = "future" 

3166 elif 2 <= abs_delta % 10 <= 4 and ( 

3167 abs_delta % 100 < 10 or abs_delta % 100 >= 20 

3168 ): 

3169 key = "future-singular" 

3170 else: 

3171 key = "future-paucal" 

3172 

3173 form: str = form[key] 

3174 return form.format(abs_delta) 

3175 

3176 

3177class SlovakLocale(Locale): 

3178 names = ["sk", "sk-sk"] 

3179 

3180 timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = { 

3181 "now": "Teraz", 

3182 "second": {"past": "sekundou", "future": "sekundu"}, 

3183 "seconds": { 

3184 "zero": "{0} sekúnd", 

3185 "past": "{0} sekundami", 

3186 "future-singular": "{0} sekundy", 

3187 "future-paucal": "{0} sekúnd", 

3188 }, 

3189 "minute": {"past": "minútou", "future": "minútu"}, 

3190 "minutes": { 

3191 "zero": "{0} minút", 

3192 "past": "{0} minútami", 

3193 "future-singular": "{0} minúty", 

3194 "future-paucal": "{0} minút", 

3195 }, 

3196 "hour": {"past": "hodinou", "future": "hodinu"}, 

3197 "hours": { 

3198 "zero": "{0} hodín", 

3199 "past": "{0} hodinami", 

3200 "future-singular": "{0} hodiny", 

3201 "future-paucal": "{0} hodín", 

3202 }, 

3203 "day": {"past": "dňom", "future": "deň"}, 

3204 "days": { 

3205 "zero": "{0} dní", 

3206 "past": "{0} dňami", 

3207 "future-singular": "{0} dni", 

3208 "future-paucal": "{0} dní", 

3209 }, 

3210 "week": {"past": "týždňom", "future": "týždeň"}, 

3211 "weeks": { 

3212 "zero": "{0} týždňov", 

3213 "past": "{0} týždňami", 

3214 "future-singular": "{0} týždne", 

3215 "future-paucal": "{0} týždňov", 

3216 }, 

3217 "month": {"past": "mesiacom", "future": "mesiac"}, 

3218 "months": { 

3219 "zero": "{0} mesiacov", 

3220 "past": "{0} mesiacmi", 

3221 "future-singular": "{0} mesiace", 

3222 "future-paucal": "{0} mesiacov", 

3223 }, 

3224 "year": {"past": "rokom", "future": "rok"}, 

3225 "years": { 

3226 "zero": "{0} rokov", 

3227 "past": "{0} rokmi", 

3228 "future-singular": "{0} roky", 

3229 "future-paucal": "{0} rokov", 

3230 }, 

3231 } 

3232 

3233 past = "Pred {0}" 

3234 future = "O {0}" 

3235 and_word = "a" 

3236 

3237 month_names = [ 

3238 "", 

3239 "január", 

3240 "február", 

3241 "marec", 

3242 "apríl", 

3243 "máj", 

3244 "jún", 

3245 "júl", 

3246 "august", 

3247 "september", 

3248 "október", 

3249 "november", 

3250 "december", 

3251 ] 

3252 month_abbreviations = [ 

3253 "", 

3254 "jan", 

3255 "feb", 

3256 "mar", 

3257 "apr", 

3258 "máj", 

3259 "jún", 

3260 "júl", 

3261 "aug", 

3262 "sep", 

3263 "okt", 

3264 "nov", 

3265 "dec", 

3266 ] 

3267 

3268 day_names = [ 

3269 "", 

3270 "pondelok", 

3271 "utorok", 

3272 "streda", 

3273 "štvrtok", 

3274 "piatok", 

3275 "sobota", 

3276 "nedeľa", 

3277 ] 

3278 day_abbreviations = ["", "po", "ut", "st", "št", "pi", "so", "ne"] 

3279 

3280 def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str: 

3281 """Slovak aware time frame format function, takes into account 

3282 the differences between past and future forms.""" 

3283 abs_delta = abs(delta) 

3284 form = self.timeframes[timeframe] 

3285 

3286 if isinstance(form, str): 

3287 return form.format(abs_delta) 

3288 

3289 if delta == 0: 

3290 key = "zero" # And *never* use 0 in the singular! 

3291 elif delta < 0: 

3292 key = "past" 

3293 else: 

3294 if "future-singular" not in form: 

3295 key = "future" 

3296 elif 2 <= abs_delta % 10 <= 4 and ( 

3297 abs_delta % 100 < 10 or abs_delta % 100 >= 20 

3298 ): 

3299 key = "future-singular" 

3300 else: 

3301 key = "future-paucal" 

3302 

3303 form: str = form[key] 

3304 return form.format(abs_delta) 

3305 

3306 

3307class FarsiLocale(Locale): 

3308 names = ["fa", "fa-ir"] 

3309 

3310 past = "{0} قبل" 

3311 future = "در {0}" 

3312 

3313 timeframes = { 

3314 "now": "اکنون", 

3315 "second": "یک لحظه", 

3316 "seconds": "{0} ثانیه", 

3317 "minute": "یک دقیقه", 

3318 "minutes": "{0} دقیقه", 

3319 "hour": "یک ساعت", 

3320 "hours": "{0} ساعت", 

3321 "day": "یک روز", 

3322 "days": "{0} روز", 

3323 "month": "یک ماه", 

3324 "months": "{0} ماه", 

3325 "year": "یک سال", 

3326 "years": "{0} سال", 

3327 } 

3328 

3329 meridians = { 

3330 "am": "قبل از ظهر", 

3331 "pm": "بعد از ظهر", 

3332 "AM": "قبل از ظهر", 

3333 "PM": "بعد از ظهر", 

3334 } 

3335 

3336 month_names = [ 

3337 "", 

3338 "January", 

3339 "February", 

3340 "March", 

3341 "April", 

3342 "May", 

3343 "June", 

3344 "July", 

3345 "August", 

3346 "September", 

3347 "October", 

3348 "November", 

3349 "December", 

3350 ] 

3351 month_abbreviations = [ 

3352 "", 

3353 "Jan", 

3354 "Feb", 

3355 "Mar", 

3356 "Apr", 

3357 "May", 

3358 "Jun", 

3359 "Jul", 

3360 "Aug", 

3361 "Sep", 

3362 "Oct", 

3363 "Nov", 

3364 "Dec", 

3365 ] 

3366 

3367 day_names = [ 

3368 "", 

3369 "دو شنبه", 

3370 "سه شنبه", 

3371 "چهارشنبه", 

3372 "پنجشنبه", 

3373 "جمعه", 

3374 "شنبه", 

3375 "یکشنبه", 

3376 ] 

3377 day_abbreviations = ["", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"] 

3378 

3379 

3380class HebrewLocale(Locale): 

3381 names = ["he", "he-il"] 

3382 

3383 past = "לפני {0}" 

3384 future = "בעוד {0}" 

3385 and_word = "ו" 

3386 

3387 timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = { 

3388 "now": "הרגע", 

3389 "second": "שנייה", 

3390 "seconds": "{0} שניות", 

3391 "minute": "דקה", 

3392 "minutes": "{0} דקות", 

3393 "hour": "שעה", 

3394 "hours": {"2": "שעתיים", "ten": "{0} שעות", "higher": "{0} שעות"}, 

3395 "day": "יום", 

3396 "days": {"2": "יומיים", "ten": "{0} ימים", "higher": "{0} יום"}, 

3397 "week": "שבוע", 

3398 "weeks": {"2": "שבועיים", "ten": "{0} שבועות", "higher": "{0} שבועות"}, 

3399 "month": "חודש", 

3400 "months": {"2": "חודשיים", "ten": "{0} חודשים", "higher": "{0} חודשים"}, 

3401 "year": "שנה", 

3402 "years": {"2": "שנתיים", "ten": "{0} שנים", "higher": "{0} שנה"}, 

3403 } 

3404 

3405 meridians = { 

3406 "am": 'לפנ"צ', 

3407 "pm": 'אחר"צ', 

3408 "AM": "לפני הצהריים", 

3409 "PM": "אחרי הצהריים", 

3410 } 

3411 

3412 month_names = [ 

3413 "", 

3414 "ינואר", 

3415 "פברואר", 

3416 "מרץ", 

3417 "אפריל", 

3418 "מאי", 

3419 "יוני", 

3420 "יולי", 

3421 "אוגוסט", 

3422 "ספטמבר", 

3423 "אוקטובר", 

3424 "נובמבר", 

3425 "דצמבר", 

3426 ] 

3427 month_abbreviations = [ 

3428 "", 

3429 "ינו׳", 

3430 "פבר׳", 

3431 "מרץ", 

3432 "אפר׳", 

3433 "מאי", 

3434 "יוני", 

3435 "יולי", 

3436 "אוג׳", 

3437 "ספט׳", 

3438 "אוק׳", 

3439 "נוב׳", 

3440 "דצמ׳", 

3441 ] 

3442 

3443 day_names = ["", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת", "ראשון"] 

3444 day_abbreviations = ["", "ב׳", "ג׳", "ד׳", "ה׳", "ו׳", "ש׳", "א׳"] 

3445 

3446 def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str: 

3447 form = self.timeframes[timeframe] 

3448 delta = abs(delta) 

3449 if isinstance(form, Mapping): 

3450 if delta == 2: 

3451 form = form["2"] 

3452 elif delta == 0 or 2 < delta <= 10: 

3453 form = form["ten"] 

3454 else: 

3455 form = form["higher"] 

3456 

3457 return form.format(delta) 

3458 

3459 def describe_multi( 

3460 self, 

3461 timeframes: Sequence[Tuple[TimeFrameLiteral, Union[int, float]]], 

3462 only_distance: bool = False, 

3463 ) -> str: 

3464 """Describes a delta within multiple timeframes in plain language. 

3465 In Hebrew, the and word behaves a bit differently. 

3466 

3467 :param timeframes: a list of string, quantity pairs each representing a timeframe and delta. 

3468 :param only_distance: return only distance eg: "2 hours and 11 seconds" without "in" or "ago" keywords 

3469 """ 

3470 

3471 humanized = "" 

3472 for index, (timeframe, delta) in enumerate(timeframes): 

3473 last_humanized = self._format_timeframe(timeframe, trunc(delta)) 

3474 if index == 0: 

3475 humanized = last_humanized 

3476 elif index == len(timeframes) - 1: # Must have at least 2 items 

3477 humanized += " " + self.and_word 

3478 if last_humanized[0].isdecimal(): 

3479 humanized += "־" 

3480 humanized += last_humanized 

3481 else: # Don't add for the last one 

3482 humanized += ", " + last_humanized 

3483 

3484 if not only_distance: 

3485 humanized = self._format_relative(humanized, timeframe, trunc(delta)) 

3486 

3487 return humanized 

3488 

3489 

3490class MarathiLocale(Locale): 

3491 names = ["mr"] 

3492 

3493 past = "{0} आधी" 

3494 future = "{0} नंतर" 

3495 

3496 timeframes = { 

3497 "now": "सद्य", 

3498 "second": "एक सेकंद", 

3499 "seconds": "{0} सेकंद", 

3500 "minute": "एक मिनिट ", 

3501 "minutes": "{0} मिनिट ", 

3502 "hour": "एक तास", 

3503 "hours": "{0} तास", 

3504 "day": "एक दिवस", 

3505 "days": "{0} दिवस", 

3506 "month": "एक महिना ", 

3507 "months": "{0} महिने ", 

3508 "year": "एक वर्ष ", 

3509 "years": "{0} वर्ष ", 

3510 } 

3511 

3512 meridians = {"am": "सकाळ", "pm": "संध्याकाळ", "AM": "सकाळ", "PM": "संध्याकाळ"} 

3513 

3514 month_names = [ 

3515 "", 

3516 "जानेवारी", 

3517 "फेब्रुवारी", 

3518 "मार्च", 

3519 "एप्रिल", 

3520 "मे", 

3521 "जून", 

3522 "जुलै", 

3523 "अॉगस्ट", 

3524 "सप्टेंबर", 

3525 "अॉक्टोबर", 

3526 "नोव्हेंबर", 

3527 "डिसेंबर", 

3528 ] 

3529 month_abbreviations = [ 

3530 "", 

3531 "जान", 

3532 "फेब्रु", 

3533 "मार्च", 

3534 "एप्रि", 

3535 "मे", 

3536 "जून", 

3537 "जुलै", 

3538 "अॉग", 

3539 "सप्टें", 

3540 "अॉक्टो", 

3541 "नोव्हें", 

3542 "डिसें", 

3543 ] 

3544 

3545 day_names = [ 

3546 "", 

3547 "सोमवार", 

3548 "मंगळवार", 

3549 "बुधवार", 

3550 "गुरुवार", 

3551 "शुक्रवार", 

3552 "शनिवार", 

3553 "रविवार", 

3554 ] 

3555 day_abbreviations = ["", "सोम", "मंगळ", "बुध", "गुरु", "शुक्र", "शनि", "रवि"] 

3556 

3557 

3558class CatalanLocale(Locale): 

3559 names = ["ca", "ca-es", "ca-ad", "ca-fr", "ca-it"] 

3560 past = "Fa {0}" 

3561 future = "En {0}" 

3562 and_word = "i" 

3563 

3564 timeframes = { 

3565 "now": "Ara mateix", 

3566 "second": "un segon", 

3567 "seconds": "{0} segons", 

3568 "minute": "un minut", 

3569 "minutes": "{0} minuts", 

3570 "hour": "una hora", 

3571 "hours": "{0} hores", 

3572 "day": "un dia", 

3573 "days": "{0} dies", 

3574 "month": "un mes", 

3575 "months": "{0} mesos", 

3576 "year": "un any", 

3577 "years": "{0} anys", 

3578 } 

3579 

3580 month_names = [ 

3581 "", 

3582 "gener", 

3583 "febrer", 

3584 "març", 

3585 "abril", 

3586 "maig", 

3587 "juny", 

3588 "juliol", 

3589 "agost", 

3590 "setembre", 

3591 "octubre", 

3592 "novembre", 

3593 "desembre", 

3594 ] 

3595 month_abbreviations = [ 

3596 "", 

3597 "gen.", 

3598 "febr.", 

3599 "març", 

3600 "abr.", 

3601 "maig", 

3602 "juny", 

3603 "jul.", 

3604 "ag.", 

3605 "set.", 

3606 "oct.", 

3607 "nov.", 

3608 "des.", 

3609 ] 

3610 day_names = [ 

3611 "", 

3612 "dilluns", 

3613 "dimarts", 

3614 "dimecres", 

3615 "dijous", 

3616 "divendres", 

3617 "dissabte", 

3618 "diumenge", 

3619 ] 

3620 day_abbreviations = [ 

3621 "", 

3622 "dl.", 

3623 "dt.", 

3624 "dc.", 

3625 "dj.", 

3626 "dv.", 

3627 "ds.", 

3628 "dg.", 

3629 ] 

3630 

3631 

3632class BasqueLocale(Locale): 

3633 names = ["eu", "eu-eu"] 

3634 past = "duela {0}" 

3635 future = "{0}" # I don't know what's the right phrase in Basque for the future. 

3636 

3637 timeframes = { 

3638 "now": "Orain", 

3639 "second": "segundo bat", 

3640 "seconds": "{0} segundu", 

3641 "minute": "minutu bat", 

3642 "minutes": "{0} minutu", 

3643 "hour": "ordu bat", 

3644 "hours": "{0} ordu", 

3645 "day": "egun bat", 

3646 "days": "{0} egun", 

3647 "month": "hilabete bat", 

3648 "months": "{0} hilabet", 

3649 "year": "urte bat", 

3650 "years": "{0} urte", 

3651 } 

3652 

3653 month_names = [ 

3654 "", 

3655 "urtarrilak", 

3656 "otsailak", 

3657 "martxoak", 

3658 "apirilak", 

3659 "maiatzak", 

3660 "ekainak", 

3661 "uztailak", 

3662 "abuztuak", 

3663 "irailak", 

3664 "urriak", 

3665 "azaroak", 

3666 "abenduak", 

3667 ] 

3668 month_abbreviations = [ 

3669 "", 

3670 "urt", 

3671 "ots", 

3672 "mar", 

3673 "api", 

3674 "mai", 

3675 "eka", 

3676 "uzt", 

3677 "abu", 

3678 "ira", 

3679 "urr", 

3680 "aza", 

3681 "abe", 

3682 ] 

3683 day_names = [ 

3684 "", 

3685 "astelehena", 

3686 "asteartea", 

3687 "asteazkena", 

3688 "osteguna", 

3689 "ostirala", 

3690 "larunbata", 

3691 "igandea", 

3692 ] 

3693 day_abbreviations = ["", "al", "ar", "az", "og", "ol", "lr", "ig"] 

3694 

3695 

3696class HungarianLocale(Locale): 

3697 names = ["hu", "hu-hu"] 

3698 

3699 past = "{0} ezelőtt" 

3700 future = "{0} múlva" 

3701 

3702 timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = { 

3703 "now": "éppen most", 

3704 "second": {"past": "egy második", "future": "egy második"}, 

3705 "seconds": {"past": "{0} másodpercekkel", "future": "{0} pár másodperc"}, 

3706 "minute": {"past": "egy perccel", "future": "egy perc"}, 

3707 "minutes": {"past": "{0} perccel", "future": "{0} perc"}, 

3708 "hour": {"past": "egy órával", "future": "egy óra"}, 

3709 "hours": {"past": "{0} órával", "future": "{0} óra"}, 

3710 "day": {"past": "egy nappal", "future": "egy nap"}, 

3711 "days": {"past": "{0} nappal", "future": "{0} nap"}, 

3712 "week": {"past": "egy héttel", "future": "egy hét"}, 

3713 "weeks": {"past": "{0} héttel", "future": "{0} hét"}, 

3714 "month": {"past": "egy hónappal", "future": "egy hónap"}, 

3715 "months": {"past": "{0} hónappal", "future": "{0} hónap"}, 

3716 "year": {"past": "egy évvel", "future": "egy év"}, 

3717 "years": {"past": "{0} évvel", "future": "{0} év"}, 

3718 } 

3719 

3720 month_names = [ 

3721 "", 

3722 "január", 

3723 "február", 

3724 "március", 

3725 "április", 

3726 "május", 

3727 "június", 

3728 "július", 

3729 "augusztus", 

3730 "szeptember", 

3731 "október", 

3732 "november", 

3733 "december", 

3734 ] 

3735 month_abbreviations = [ 

3736 "", 

3737 "jan", 

3738 "febr", 

3739 "márc", 

3740 "ápr", 

3741 "máj", 

3742 "jún", 

3743 "júl", 

3744 "aug", 

3745 "szept", 

3746 "okt", 

3747 "nov", 

3748 "dec", 

3749 ] 

3750 

3751 day_names = [ 

3752 "", 

3753 "hétfő", 

3754 "kedd", 

3755 "szerda", 

3756 "csütörtök", 

3757 "péntek", 

3758 "szombat", 

3759 "vasárnap", 

3760 ] 

3761 day_abbreviations = ["", "hét", "kedd", "szer", "csüt", "pént", "szom", "vas"] 

3762 

3763 meridians = {"am": "de", "pm": "du", "AM": "DE", "PM": "DU"} 

3764 

3765 def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str: 

3766 form = self.timeframes[timeframe] 

3767 

3768 if isinstance(form, Mapping): 

3769 if delta > 0: 

3770 form = form["future"] 

3771 else: 

3772 form = form["past"] 

3773 

3774 return form.format(abs(delta)) 

3775 

3776 

3777class EsperantoLocale(Locale): 

3778 names = ["eo", "eo-xx"] 

3779 past = "antaŭ {0}" 

3780 future = "post {0}" 

3781 

3782 timeframes = { 

3783 "now": "nun", 

3784 "second": "sekundo", 

3785 "seconds": "{0} kelkaj sekundoj", 

3786 "minute": "unu minuto", 

3787 "minutes": "{0} minutoj", 

3788 "hour": "un horo", 

3789 "hours": "{0} horoj", 

3790 "day": "unu tago", 

3791 "days": "{0} tagoj", 

3792 "month": "unu monato", 

3793 "months": "{0} monatoj", 

3794 "year": "unu jaro", 

3795 "years": "{0} jaroj", 

3796 } 

3797 

3798 month_names = [ 

3799 "", 

3800 "januaro", 

3801 "februaro", 

3802 "marto", 

3803 "aprilo", 

3804 "majo", 

3805 "junio", 

3806 "julio", 

3807 "aŭgusto", 

3808 "septembro", 

3809 "oktobro", 

3810 "novembro", 

3811 "decembro", 

3812 ] 

3813 month_abbreviations = [ 

3814 "", 

3815 "jan", 

3816 "feb", 

3817 "mar", 

3818 "apr", 

3819 "maj", 

3820 "jun", 

3821 "jul", 

3822 "aŭg", 

3823 "sep", 

3824 "okt", 

3825 "nov", 

3826 "dec", 

3827 ] 

3828 

3829 day_names = [ 

3830 "", 

3831 "lundo", 

3832 "mardo", 

3833 "merkredo", 

3834 "ĵaŭdo", 

3835 "vendredo", 

3836 "sabato", 

3837 "dimanĉo", 

3838 ] 

3839 day_abbreviations = ["", "lun", "mar", "mer", "ĵaŭ", "ven", "sab", "dim"] 

3840 

3841 meridians = {"am": "atm", "pm": "ptm", "AM": "ATM", "PM": "PTM"} 

3842 

3843 ordinal_day_re = r"((?P<value>[1-3]?[0-9](?=a))a)" 

3844 

3845 def _ordinal_number(self, n: int) -> str: 

3846 return f"{n}a" 

3847 

3848 

3849class ThaiLocale(Locale): 

3850 names = ["th", "th-th"] 

3851 

3852 past = "{0} ที่ผ่านมา" 

3853 future = "ในอีก {0}" 

3854 

3855 timeframes = { 

3856 "now": "ขณะนี้", 

3857 "second": "วินาที", 

3858 "seconds": "{0} ไม่กี่วินาที", 

3859 "minute": "1 นาที", 

3860 "minutes": "{0} นาที", 

3861 "hour": "1 ชั่วโมง", 

3862 "hours": "{0} ชั่วโมง", 

3863 "day": "1 วัน", 

3864 "days": "{0} วัน", 

3865 "month": "1 เดือน", 

3866 "months": "{0} เดือน", 

3867 "year": "1 ปี", 

3868 "years": "{0} ปี", 

3869 } 

3870 

3871 month_names = [ 

3872 "", 

3873 "มกราคม", 

3874 "กุมภาพันธ์", 

3875 "มีนาคม", 

3876 "เมษายน", 

3877 "พฤษภาคม", 

3878 "มิถุนายน", 

3879 "กรกฎาคม", 

3880 "สิงหาคม", 

3881 "กันยายน", 

3882 "ตุลาคม", 

3883 "พฤศจิกายน", 

3884 "ธันวาคม", 

3885 ] 

3886 month_abbreviations = [ 

3887 "", 

3888 "ม.ค.", 

3889 "ก.พ.", 

3890 "มี.ค.", 

3891 "เม.ย.", 

3892 "พ.ค.", 

3893 "มิ.ย.", 

3894 "ก.ค.", 

3895 "ส.ค.", 

3896 "ก.ย.", 

3897 "ต.ค.", 

3898 "พ.ย.", 

3899 "ธ.ค.", 

3900 ] 

3901 

3902 day_names = ["", "จันทร์", "อังคาร", "พุธ", "พฤหัสบดี", "ศุกร์", "เสาร์", "อาทิตย์"] 

3903 day_abbreviations = ["", "จ", "อ", "พ", "พฤ", "ศ", "ส", "อา"] 

3904 

3905 meridians = {"am": "am", "pm": "pm", "AM": "AM", "PM": "PM"} 

3906 

3907 BE_OFFSET = 543 

3908 

3909 def year_full(self, year: int) -> str: 

3910 """Thai always use Buddhist Era (BE) which is CE + 543""" 

3911 year += self.BE_OFFSET 

3912 return f"{year:04d}" 

3913 

3914 def year_abbreviation(self, year: int) -> str: 

3915 """Thai always use Buddhist Era (BE) which is CE + 543""" 

3916 year += self.BE_OFFSET 

3917 return f"{year:04d}"[2:] 

3918 

3919 def _format_relative( 

3920 self, 

3921 humanized: str, 

3922 timeframe: TimeFrameLiteral, 

3923 delta: Union[float, int], 

3924 ) -> str: 

3925 """Thai normally doesn't have any space between words""" 

3926 if timeframe == "now": 

3927 return humanized 

3928 

3929 direction = self.past if delta < 0 else self.future 

3930 relative_string = direction.format(humanized) 

3931 

3932 if timeframe == "seconds": 

3933 relative_string = relative_string.replace(" ", "") 

3934 

3935 return relative_string 

3936 

3937 

3938class LaotianLocale(Locale): 

3939 

3940 names = ["lo", "lo-la"] 

3941 

3942 past = "{0} ກ່ອນຫນ້ານີ້" 

3943 future = "ໃນ {0}" 

3944 

3945 timeframes = { 

3946 "now": "ດຽວນີ້", 

3947 "second": "ວິນາທີ", 

3948 "seconds": "{0} ວິນາທີ", 

3949 "minute": "ນາທີ", 

3950 "minutes": "{0} ນາທີ", 

3951 "hour": "ຊົ່ວໂມງ", 

3952 "hours": "{0} ຊົ່ວໂມງ", 

3953 "day": "ມື້", 

3954 "days": "{0} ມື້", 

3955 "week": "ອາທິດ", 

3956 "weeks": "{0} ອາທິດ", 

3957 "month": "ເດືອນ", 

3958 "months": "{0} ເດືອນ", 

3959 "year": "ປີ", 

3960 "years": "{0} ປີ", 

3961 } 

3962 

3963 month_names = [ 

3964 "", 

3965 "ມັງກອນ", # mangkon 

3966 "ກຸມພາ", # kumpha 

3967 "ມີນາ", # mina 

3968 "ເມສາ", # mesa 

3969 "ພຶດສະພາ", # phudsapha 

3970 "ມິຖຸນາ", # mithuna 

3971 "ກໍລະກົດ", # kolakod 

3972 "ສິງຫາ", # singha 

3973 "ກັນຍາ", # knaia 

3974 "ຕຸລາ", # tula 

3975 "ພະຈິກ", # phachik 

3976 "ທັນວາ", # thanuaa 

3977 ] 

3978 month_abbreviations = [ 

3979 "", 

3980 "ມັງກອນ", 

3981 "ກຸມພາ", 

3982 "ມີນາ", 

3983 "ເມສາ", 

3984 "ພຶດສະພາ", 

3985 "ມິຖຸນາ", 

3986 "ກໍລະກົດ", 

3987 "ສິງຫາ", 

3988 "ກັນຍາ", 

3989 "ຕຸລາ", 

3990 "ພະຈິກ", 

3991 "ທັນວາ", 

3992 ] 

3993 

3994 day_names = [ 

3995 "", 

3996 "ວັນຈັນ", # vanchan 

3997 "ວັນອັງຄານ", # vnoangkhan 

3998 "ວັນພຸດ", # vanphud 

3999 "ວັນພະຫັດ", # vanphahad 

4000 "ວັນ​ສຸກ", # vansuk 

4001 "ວັນເສົາ", # vansao 

4002 "ວັນອາທິດ", # vnoathid 

4003 ] 

4004 day_abbreviations = [ 

4005 "", 

4006 "ວັນຈັນ", 

4007 "ວັນອັງຄານ", 

4008 "ວັນພຸດ", 

4009 "ວັນພະຫັດ", 

4010 "ວັນ​ສຸກ", 

4011 "ວັນເສົາ", 

4012 "ວັນອາທິດ", 

4013 ] 

4014 

4015 BE_OFFSET = 543 

4016 

4017 def year_full(self, year: int) -> str: 

4018 """Lao always use Buddhist Era (BE) which is CE + 543""" 

4019 year += self.BE_OFFSET 

4020 return f"{year:04d}" 

4021 

4022 def year_abbreviation(self, year: int) -> str: 

4023 """Lao always use Buddhist Era (BE) which is CE + 543""" 

4024 year += self.BE_OFFSET 

4025 return f"{year:04d}"[2:] 

4026 

4027 def _format_relative( 

4028 self, 

4029 humanized: str, 

4030 timeframe: TimeFrameLiteral, 

4031 delta: Union[float, int], 

4032 ) -> str: 

4033 """Lao normally doesn't have any space between words""" 

4034 if timeframe == "now": 

4035 return humanized 

4036 

4037 direction = self.past if delta < 0 else self.future 

4038 relative_string = direction.format(humanized) 

4039 

4040 if timeframe == "seconds": 

4041 relative_string = relative_string.replace(" ", "") 

4042 

4043 return relative_string 

4044 

4045 

4046class BengaliLocale(Locale): 

4047 names = ["bn", "bn-bd", "bn-in"] 

4048 

4049 past = "{0} আগে" 

4050 future = "{0} পরে" 

4051 

4052 timeframes = { 

4053 "now": "এখন", 

4054 "second": "একটি দ্বিতীয়", 

4055 "seconds": "{0} সেকেন্ড", 

4056 "minute": "এক মিনিট", 

4057 "minutes": "{0} মিনিট", 

4058 "hour": "এক ঘণ্টা", 

4059 "hours": "{0} ঘণ্টা", 

4060 "day": "এক দিন", 

4061 "days": "{0} দিন", 

4062 "month": "এক মাস", 

4063 "months": "{0} মাস ", 

4064 "year": "এক বছর", 

4065 "years": "{0} বছর", 

4066 } 

4067 

4068 meridians = {"am": "সকাল", "pm": "বিকাল", "AM": "সকাল", "PM": "বিকাল"} 

4069 

4070 month_names = [ 

4071 "", 

4072 "জানুয়ারি", 

4073 "ফেব্রুয়ারি", 

4074 "মার্চ", 

4075 "এপ্রিল", 

4076 "মে", 

4077 "জুন", 

4078 "জুলাই", 

4079 "আগস্ট", 

4080 "সেপ্টেম্বর", 

4081 "অক্টোবর", 

4082 "নভেম্বর", 

4083 "ডিসেম্বর", 

4084 ] 

4085 month_abbreviations = [ 

4086 "", 

4087 "জানু", 

4088 "ফেব", 

4089 "মার্চ", 

4090 "এপ্রি", 

4091 "মে", 

4092 "জুন", 

4093 "জুল", 

4094 "অগা", 

4095 "সেপ্ট", 

4096 "অক্টো", 

4097 "নভে", 

4098 "ডিসে", 

4099 ] 

4100 

4101 day_names = [ 

4102 "", 

4103 "সোমবার", 

4104 "মঙ্গলবার", 

4105 "বুধবার", 

4106 "বৃহস্পতিবার", 

4107 "শুক্রবার", 

4108 "শনিবার", 

4109 "রবিবার", 

4110 ] 

4111 day_abbreviations = ["", "সোম", "মঙ্গল", "বুধ", "বৃহঃ", "শুক্র", "শনি", "রবি"] 

4112 

4113 def _ordinal_number(self, n: int) -> str: 

4114 if n > 10 or n == 0: 

4115 return f"{n}তম" 

4116 if n in [1, 5, 7, 8, 9, 10]: 

4117 return f"{n}ম" 

4118 if n in [2, 3]: 

4119 return f"{n}য়" 

4120 if n == 4: 

4121 return f"{n}র্থ" 

4122 if n == 6: 

4123 return f"{n}ষ্ঠ" 

4124 return "" 

4125 

4126 

4127class RomanshLocale(Locale): 

4128 names = ["rm", "rm-ch"] 

4129 

4130 past = "avant {0}" 

4131 future = "en {0}" 

4132 

4133 timeframes = { 

4134 "now": "en quest mument", 

4135 "second": "in secunda", 

4136 "seconds": "{0} secundas", 

4137 "minute": "ina minuta", 

4138 "minutes": "{0} minutas", 

4139 "hour": "in'ura", 

4140 "hours": "{0} ura", 

4141 "day": "in di", 

4142 "days": "{0} dis", 

4143 "week": "in'emna", 

4144 "weeks": "{0} emnas", 

4145 "month": "in mais", 

4146 "months": "{0} mais", 

4147 "year": "in onn", 

4148 "years": "{0} onns", 

4149 } 

4150 

4151 month_names = [ 

4152 "", 

4153 "schaner", 

4154 "favrer", 

4155 "mars", 

4156 "avrigl", 

4157 "matg", 

4158 "zercladur", 

4159 "fanadur", 

4160 "avust", 

4161 "settember", 

4162 "october", 

4163 "november", 

4164 "december", 

4165 ] 

4166 

4167 month_abbreviations = [ 

4168 "", 

4169 "schan", 

4170 "fav", 

4171 "mars", 

4172 "avr", 

4173 "matg", 

4174 "zer", 

4175 "fan", 

4176 "avu", 

4177 "set", 

4178 "oct", 

4179 "nov", 

4180 "dec", 

4181 ] 

4182 

4183 day_names = [ 

4184 "", 

4185 "glindesdi", 

4186 "mardi", 

4187 "mesemna", 

4188 "gievgia", 

4189 "venderdi", 

4190 "sonda", 

4191 "dumengia", 

4192 ] 

4193 

4194 day_abbreviations = ["", "gli", "ma", "me", "gie", "ve", "so", "du"] 

4195 

4196 

4197class RomanianLocale(Locale): 

4198 names = ["ro", "ro-ro"] 

4199 

4200 past = "{0} în urmă" 

4201 future = "peste {0}" 

4202 and_word = "și" 

4203 

4204 timeframes = { 

4205 "now": "acum", 

4206 "second": "o secunda", 

4207 "seconds": "{0} câteva secunde", 

4208 "minute": "un minut", 

4209 "minutes": "{0} minute", 

4210 "hour": "o oră", 

4211 "hours": "{0} ore", 

4212 "day": "o zi", 

4213 "days": "{0} zile", 

4214 "month": "o lună", 

4215 "months": "{0} luni", 

4216 "year": "un an", 

4217 "years": "{0} ani", 

4218 } 

4219 

4220 month_names = [ 

4221 "", 

4222 "ianuarie", 

4223 "februarie", 

4224 "martie", 

4225 "aprilie", 

4226 "mai", 

4227 "iunie", 

4228 "iulie", 

4229 "august", 

4230 "septembrie", 

4231 "octombrie", 

4232 "noiembrie", 

4233 "decembrie", 

4234 ] 

4235 month_abbreviations = [ 

4236 "", 

4237 "ian", 

4238 "febr", 

4239 "mart", 

4240 "apr", 

4241 "mai", 

4242 "iun", 

4243 "iul", 

4244 "aug", 

4245 "sept", 

4246 "oct", 

4247 "nov", 

4248 "dec", 

4249 ] 

4250 

4251 day_names = [ 

4252 "", 

4253 "luni", 

4254 "marți", 

4255 "miercuri", 

4256 "joi", 

4257 "vineri", 

4258 "sâmbătă", 

4259 "duminică", 

4260 ] 

4261 day_abbreviations = ["", "Lun", "Mar", "Mie", "Joi", "Vin", "Sâm", "Dum"] 

4262 

4263 

4264class SlovenianLocale(Locale): 

4265 names = ["sl", "sl-si"] 

4266 

4267 past = "pred {0}" 

4268 future = "čez {0}" 

4269 and_word = "in" 

4270 

4271 timeframes = { 

4272 "now": "zdaj", 

4273 "second": "sekundo", 

4274 "seconds": "{0} sekund", 

4275 "minute": "minuta", 

4276 "minutes": "{0} minutami", 

4277 "hour": "uro", 

4278 "hours": "{0} ur", 

4279 "day": "dan", 

4280 "days": "{0} dni", 

4281 "month": "mesec", 

4282 "months": "{0} mesecev", 

4283 "year": "leto", 

4284 "years": "{0} let", 

4285 } 

4286 

4287 meridians = {"am": "", "pm": "", "AM": "", "PM": ""} 

4288 

4289 month_names = [ 

4290 "", 

4291 "Januar", 

4292 "Februar", 

4293 "Marec", 

4294 "April", 

4295 "Maj", 

4296 "Junij", 

4297 "Julij", 

4298 "Avgust", 

4299 "September", 

4300 "Oktober", 

4301 "November", 

4302 "December", 

4303 ] 

4304 

4305 month_abbreviations = [ 

4306 "", 

4307 "Jan", 

4308 "Feb", 

4309 "Mar", 

4310 "Apr", 

4311 "Maj", 

4312 "Jun", 

4313 "Jul", 

4314 "Avg", 

4315 "Sep", 

4316 "Okt", 

4317 "Nov", 

4318 "Dec", 

4319 ] 

4320 

4321 day_names = [ 

4322 "", 

4323 "Ponedeljek", 

4324 "Torek", 

4325 "Sreda", 

4326 "Četrtek", 

4327 "Petek", 

4328 "Sobota", 

4329 "Nedelja", 

4330 ] 

4331 

4332 day_abbreviations = ["", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob", "Ned"] 

4333 

4334 

4335class IndonesianLocale(Locale): 

4336 names = ["id", "id-id"] 

4337 

4338 past = "{0} yang lalu" 

4339 future = "dalam {0}" 

4340 and_word = "dan" 

4341 

4342 timeframes = { 

4343 "now": "baru saja", 

4344 "second": "1 sebentar", 

4345 "seconds": "{0} detik", 

4346 "minute": "1 menit", 

4347 "minutes": "{0} menit", 

4348 "hour": "1 jam", 

4349 "hours": "{0} jam", 

4350 "day": "1 hari", 

4351 "days": "{0} hari", 

4352 "week": "1 minggu", 

4353 "weeks": "{0} minggu", 

4354 "month": "1 bulan", 

4355 "months": "{0} bulan", 

4356 "quarter": "1 kuartal", 

4357 "quarters": "{0} kuartal", 

4358 "year": "1 tahun", 

4359 "years": "{0} tahun", 

4360 } 

4361 

4362 meridians = {"am": "", "pm": "", "AM": "", "PM": ""} 

4363 

4364 month_names = [ 

4365 "", 

4366 "Januari", 

4367 "Februari", 

4368 "Maret", 

4369 "April", 

4370 "Mei", 

4371 "Juni", 

4372 "Juli", 

4373 "Agustus", 

4374 "September", 

4375 "Oktober", 

4376 "November", 

4377 "Desember", 

4378 ] 

4379 

4380 month_abbreviations = [ 

4381 "", 

4382 "Jan", 

4383 "Feb", 

4384 "Mar", 

4385 "Apr", 

4386 "Mei", 

4387 "Jun", 

4388 "Jul", 

4389 "Ags", 

4390 "Sept", 

4391 "Okt", 

4392 "Nov", 

4393 "Des", 

4394 ] 

4395 

4396 day_names = ["", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu", "Minggu"] 

4397 

4398 day_abbreviations = [ 

4399 "", 

4400 "Senin", 

4401 "Selasa", 

4402 "Rabu", 

4403 "Kamis", 

4404 "Jumat", 

4405 "Sabtu", 

4406 "Minggu", 

4407 ] 

4408 

4409 

4410class NepaliLocale(Locale): 

4411 names = ["ne", "ne-np"] 

4412 

4413 past = "{0} पहिले" 

4414 future = "{0} पछी" 

4415 

4416 timeframes = { 

4417 "now": "अहिले", 

4418 "second": "एक सेकेन्ड", 

4419 "seconds": "{0} सेकण्ड", 

4420 "minute": "मिनेट", 

4421 "minutes": "{0} मिनेट", 

4422 "hour": "एक घण्टा", 

4423 "hours": "{0} घण्टा", 

4424 "day": "एक दिन", 

4425 "days": "{0} दिन", 

4426 "month": "एक महिना", 

4427 "months": "{0} महिना", 

4428 "year": "एक बर्ष", 

4429 "years": "{0} बर्ष", 

4430 } 

4431 

4432 meridians = {"am": "पूर्वाह्न", "pm": "अपरान्ह", "AM": "पूर्वाह्न", "PM": "अपरान्ह"} 

4433 

4434 month_names = [ 

4435 "", 

4436 "जनवरी", 

4437 "फेब्रुअरी", 

4438 "मार्च", 

4439 "एप्रील", 

4440 "मे", 

4441 "जुन", 

4442 "जुलाई", 

4443 "अगष्ट", 

4444 "सेप्टेम्बर", 

4445 "अक्टोबर", 

4446 "नोवेम्बर", 

4447 "डिसेम्बर", 

4448 ] 

4449 month_abbreviations = [ 

4450 "", 

4451 "जन", 

4452 "फेब", 

4453 "मार्च", 

4454 "एप्रील", 

4455 "मे", 

4456 "जुन", 

4457 "जुलाई", 

4458 "अग", 

4459 "सेप", 

4460 "अक्ट", 

4461 "नोव", 

4462 "डिस", 

4463 ] 

4464 

4465 day_names = [ 

4466 "", 

4467 "सोमवार", 

4468 "मंगलवार", 

4469 "बुधवार", 

4470 "बिहिवार", 

4471 "शुक्रवार", 

4472 "शनिवार", 

4473 "आइतवार", 

4474 ] 

4475 

4476 day_abbreviations = ["", "सोम", "मंगल", "बुध", "बिहि", "शुक्र", "शनि", "आइत"] 

4477 

4478 

4479class EstonianLocale(Locale): 

4480 names = ["ee", "et"] 

4481 

4482 past = "{0} tagasi" 

4483 future = "{0} pärast" 

4484 and_word = "ja" 

4485 

4486 timeframes: ClassVar[Mapping[TimeFrameLiteral, Mapping[str, str]]] = { 

4487 "now": {"past": "just nüüd", "future": "just nüüd"}, 

4488 "second": {"past": "üks sekund", "future": "ühe sekundi"}, 

4489 "seconds": {"past": "{0} sekundit", "future": "{0} sekundi"}, 

4490 "minute": {"past": "üks minut", "future": "ühe minuti"}, 

4491 "minutes": {"past": "{0} minutit", "future": "{0} minuti"}, 

4492 "hour": {"past": "tund aega", "future": "tunni aja"}, 

4493 "hours": {"past": "{0} tundi", "future": "{0} tunni"}, 

4494 "day": {"past": "üks päev", "future": "ühe päeva"}, 

4495 "days": {"past": "{0} päeva", "future": "{0} päeva"}, 

4496 "month": {"past": "üks kuu", "future": "ühe kuu"}, 

4497 "months": {"past": "{0} kuud", "future": "{0} kuu"}, 

4498 "year": {"past": "üks aasta", "future": "ühe aasta"}, 

4499 "years": {"past": "{0} aastat", "future": "{0} aasta"}, 

4500 } 

4501 

4502 month_names = [ 

4503 "", 

4504 "Jaanuar", 

4505 "Veebruar", 

4506 "Märts", 

4507 "Aprill", 

4508 "Mai", 

4509 "Juuni", 

4510 "Juuli", 

4511 "August", 

4512 "September", 

4513 "Oktoober", 

4514 "November", 

4515 "Detsember", 

4516 ] 

4517 month_abbreviations = [ 

4518 "", 

4519 "Jan", 

4520 "Veb", 

4521 "Mär", 

4522 "Apr", 

4523 "Mai", 

4524 "Jun", 

4525 "Jul", 

4526 "Aug", 

4527 "Sep", 

4528 "Okt", 

4529 "Nov", 

4530 "Dets", 

4531 ] 

4532 

4533 day_names = [ 

4534 "", 

4535 "Esmaspäev", 

4536 "Teisipäev", 

4537 "Kolmapäev", 

4538 "Neljapäev", 

4539 "Reede", 

4540 "Laupäev", 

4541 "Pühapäev", 

4542 ] 

4543 day_abbreviations = ["", "Esm", "Teis", "Kolm", "Nelj", "Re", "Lau", "Püh"] 

4544 

4545 def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str: 

4546 form = self.timeframes[timeframe] 

4547 if delta > 0: 

4548 _form = form["future"] 

4549 else: 

4550 _form = form["past"] 

4551 return _form.format(abs(delta)) 

4552 

4553 

4554class LatvianLocale(Locale): 

4555 names = ["lv", "lv-lv"] 

4556 

4557 past = "pirms {0}" 

4558 future = "pēc {0}" 

4559 and_word = "un" 

4560 

4561 timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = { 

4562 "now": "tagad", 

4563 "second": "sekundes", 

4564 "seconds": "{0} sekundēm", 

4565 "minute": "minūtes", 

4566 "minutes": "{0} minūtēm", 

4567 "hour": "stundas", 

4568 "hours": "{0} stundām", 

4569 "day": "dienas", 

4570 "days": "{0} dienām", 

4571 "week": "nedēļas", 

4572 "weeks": "{0} nedēļām", 

4573 "month": "mēneša", 

4574 "months": "{0} mēnešiem", 

4575 "year": "gada", 

4576 "years": "{0} gadiem", 

4577 } 

4578 

4579 month_names = [ 

4580 "", 

4581 "janvāris", 

4582 "februāris", 

4583 "marts", 

4584 "aprīlis", 

4585 "maijs", 

4586 "jūnijs", 

4587 "jūlijs", 

4588 "augusts", 

4589 "septembris", 

4590 "oktobris", 

4591 "novembris", 

4592 "decembris", 

4593 ] 

4594 

4595 month_abbreviations = [ 

4596 "", 

4597 "jan", 

4598 "feb", 

4599 "marts", 

4600 "apr", 

4601 "maijs", 

4602 "jūnijs", 

4603 "jūlijs", 

4604 "aug", 

4605 "sept", 

4606 "okt", 

4607 "nov", 

4608 "dec", 

4609 ] 

4610 

4611 day_names = [ 

4612 "", 

4613 "pirmdiena", 

4614 "otrdiena", 

4615 "trešdiena", 

4616 "ceturtdiena", 

4617 "piektdiena", 

4618 "sestdiena", 

4619 "svētdiena", 

4620 ] 

4621 

4622 day_abbreviations = [ 

4623 "", 

4624 "pi", 

4625 "ot", 

4626 "tr", 

4627 "ce", 

4628 "pi", 

4629 "se", 

4630 "sv", 

4631 ] 

4632 

4633 

4634class SwahiliLocale(Locale): 

4635 names = [ 

4636 "sw", 

4637 "sw-ke", 

4638 "sw-tz", 

4639 ] 

4640 

4641 past = "{0} iliyopita" 

4642 future = "muda wa {0}" 

4643 and_word = "na" 

4644 

4645 timeframes = { 

4646 "now": "sasa hivi", 

4647 "second": "sekunde", 

4648 "seconds": "sekunde {0}", 

4649 "minute": "dakika moja", 

4650 "minutes": "dakika {0}", 

4651 "hour": "saa moja", 

4652 "hours": "saa {0}", 

4653 "day": "siku moja", 

4654 "days": "siku {0}", 

4655 "week": "wiki moja", 

4656 "weeks": "wiki {0}", 

4657 "month": "mwezi moja", 

4658 "months": "miezi {0}", 

4659 "year": "mwaka moja", 

4660 "years": "miaka {0}", 

4661 } 

4662 

4663 meridians = {"am": "asu", "pm": "mch", "AM": "ASU", "PM": "MCH"} 

4664 

4665 month_names = [ 

4666 "", 

4667 "Januari", 

4668 "Februari", 

4669 "Machi", 

4670 "Aprili", 

4671 "Mei", 

4672 "Juni", 

4673 "Julai", 

4674 "Agosti", 

4675 "Septemba", 

4676 "Oktoba", 

4677 "Novemba", 

4678 "Desemba", 

4679 ] 

4680 month_abbreviations = [ 

4681 "", 

4682 "Jan", 

4683 "Feb", 

4684 "Mac", 

4685 "Apr", 

4686 "Mei", 

4687 "Jun", 

4688 "Jul", 

4689 "Ago", 

4690 "Sep", 

4691 "Okt", 

4692 "Nov", 

4693 "Des", 

4694 ] 

4695 

4696 day_names = [ 

4697 "", 

4698 "Jumatatu", 

4699 "Jumanne", 

4700 "Jumatano", 

4701 "Alhamisi", 

4702 "Ijumaa", 

4703 "Jumamosi", 

4704 "Jumapili", 

4705 ] 

4706 day_abbreviations = [ 

4707 "", 

4708 "Jumatatu", 

4709 "Jumanne", 

4710 "Jumatano", 

4711 "Alhamisi", 

4712 "Ijumaa", 

4713 "Jumamosi", 

4714 "Jumapili", 

4715 ] 

4716 

4717 

4718class CroatianLocale(Locale): 

4719 names = ["hr", "hr-hr"] 

4720 

4721 past = "prije {0}" 

4722 future = "za {0}" 

4723 and_word = "i" 

4724 

4725 timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = { 

4726 "now": "upravo sad", 

4727 "second": "sekundu", 

4728 "seconds": {"double": "{0} sekunde", "higher": "{0} sekundi"}, 

4729 "minute": "minutu", 

4730 "minutes": {"double": "{0} minute", "higher": "{0} minuta"}, 

4731 "hour": "sat", 

4732 "hours": {"double": "{0} sata", "higher": "{0} sati"}, 

4733 "day": "jedan dan", 

4734 "days": {"double": "{0} dana", "higher": "{0} dana"}, 

4735 "week": "tjedan", 

4736 "weeks": {"double": "{0} tjedna", "higher": "{0} tjedana"}, 

4737 "month": "mjesec", 

4738 "months": {"double": "{0} mjeseca", "higher": "{0} mjeseci"}, 

4739 "year": "godinu", 

4740 "years": {"double": "{0} godine", "higher": "{0} godina"}, 

4741 } 

4742 

4743 month_names = [ 

4744 "", 

4745 "siječanj", 

4746 "veljača", 

4747 "ožujak", 

4748 "travanj", 

4749 "svibanj", 

4750 "lipanj", 

4751 "srpanj", 

4752 "kolovoz", 

4753 "rujan", 

4754 "listopad", 

4755 "studeni", 

4756 "prosinac", 

4757 ] 

4758 

4759 month_abbreviations = [ 

4760 "", 

4761 "siječ", 

4762 "velj", 

4763 "ožuj", 

4764 "trav", 

4765 "svib", 

4766 "lip", 

4767 "srp", 

4768 "kol", 

4769 "ruj", 

4770 "list", 

4771 "stud", 

4772 "pros", 

4773 ] 

4774 

4775 day_names = [ 

4776 "", 

4777 "ponedjeljak", 

4778 "utorak", 

4779 "srijeda", 

4780 "četvrtak", 

4781 "petak", 

4782 "subota", 

4783 "nedjelja", 

4784 ] 

4785 

4786 day_abbreviations = [ 

4787 "", 

4788 "po", 

4789 "ut", 

4790 "sr", 

4791 "če", 

4792 "pe", 

4793 "su", 

4794 "ne", 

4795 ] 

4796 

4797 def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str: 

4798 form = self.timeframes[timeframe] 

4799 delta = abs(delta) 

4800 if isinstance(form, Mapping): 

4801 if 1 < delta <= 4: 

4802 form = form["double"] 

4803 else: 

4804 form = form["higher"] 

4805 

4806 return form.format(delta) 

4807 

4808 

4809class LatinLocale(Locale): 

4810 names = ["la", "la-va"] 

4811 

4812 past = "ante {0}" 

4813 future = "in {0}" 

4814 and_word = "et" 

4815 

4816 timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = { 

4817 "now": "nunc", 

4818 "second": "secundum", 

4819 "seconds": "{0} secundis", 

4820 "minute": "minutam", 

4821 "minutes": "{0} minutis", 

4822 "hour": "horam", 

4823 "hours": "{0} horas", 

4824 "day": "diem", 

4825 "days": "{0} dies", 

4826 "week": "hebdomadem", 

4827 "weeks": "{0} hebdomades", 

4828 "month": "mensem", 

4829 "months": "{0} mensis", 

4830 "year": "annum", 

4831 "years": "{0} annos", 

4832 } 

4833 

4834 month_names = [ 

4835 "", 

4836 "Ianuarius", 

4837 "Februarius", 

4838 "Martius", 

4839 "Aprilis", 

4840 "Maius", 

4841 "Iunius", 

4842 "Iulius", 

4843 "Augustus", 

4844 "September", 

4845 "October", 

4846 "November", 

4847 "December", 

4848 ] 

4849 

4850 month_abbreviations = [ 

4851 "", 

4852 "Ian", 

4853 "Febr", 

4854 "Mart", 

4855 "Apr", 

4856 "Mai", 

4857 "Iun", 

4858 "Iul", 

4859 "Aug", 

4860 "Sept", 

4861 "Oct", 

4862 "Nov", 

4863 "Dec", 

4864 ] 

4865 

4866 day_names = [ 

4867 "", 

4868 "dies Lunae", 

4869 "dies Martis", 

4870 "dies Mercurii", 

4871 "dies Iovis", 

4872 "dies Veneris", 

4873 "dies Saturni", 

4874 "dies Solis", 

4875 ] 

4876 

4877 day_abbreviations = [ 

4878 "", 

4879 "dies Lunae", 

4880 "dies Martis", 

4881 "dies Mercurii", 

4882 "dies Iovis", 

4883 "dies Veneris", 

4884 "dies Saturni", 

4885 "dies Solis", 

4886 ] 

4887 

4888 

4889class LithuanianLocale(Locale): 

4890 names = ["lt", "lt-lt"] 

4891 

4892 past = "prieš {0}" 

4893 future = "po {0}" 

4894 and_word = "ir" 

4895 

4896 timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = { 

4897 "now": "dabar", 

4898 "second": "sekundės", 

4899 "seconds": "{0} sekundžių", 

4900 "minute": "minutės", 

4901 "minutes": "{0} minučių", 

4902 "hour": "valandos", 

4903 "hours": "{0} valandų", 

4904 "day": "dieną", 

4905 "days": "{0} dienų", 

4906 "week": "savaitės", 

4907 "weeks": "{0} savaičių", 

4908 "month": "mėnesio", 

4909 "months": "{0} mėnesių", 

4910 "year": "metų", 

4911 "years": "{0} metų", 

4912 } 

4913 

4914 month_names = [ 

4915 "", 

4916 "sausis", 

4917 "vasaris", 

4918 "kovas", 

4919 "balandis", 

4920 "gegužė", 

4921 "birželis", 

4922 "liepa", 

4923 "rugpjūtis", 

4924 "rugsėjis", 

4925 "spalis", 

4926 "lapkritis", 

4927 "gruodis", 

4928 ] 

4929 

4930 month_abbreviations = [ 

4931 "", 

4932 "saus", 

4933 "vas", 

4934 "kovas", 

4935 "bal", 

4936 "geg", 

4937 "birž", 

4938 "liepa", 

4939 "rugp", 

4940 "rugs", 

4941 "spalis", 

4942 "lapkr", 

4943 "gr", 

4944 ] 

4945 

4946 day_names = [ 

4947 "", 

4948 "pirmadienis", 

4949 "antradienis", 

4950 "trečiadienis", 

4951 "ketvirtadienis", 

4952 "penktadienis", 

4953 "šeštadienis", 

4954 "sekmadienis", 

4955 ] 

4956 

4957 day_abbreviations = [ 

4958 "", 

4959 "pi", 

4960 "an", 

4961 "tr", 

4962 "ke", 

4963 "pe", 

4964 "še", 

4965 "se", 

4966 ] 

4967 

4968 

4969class MalayLocale(Locale): 

4970 names = ["ms", "ms-my", "ms-bn"] 

4971 

4972 past = "{0} yang lalu" 

4973 future = "dalam {0}" 

4974 and_word = "dan" 

4975 

4976 timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = { 

4977 "now": "sekarang", 

4978 "second": "saat", 

4979 "seconds": "{0} saat", 

4980 "minute": "minit", 

4981 "minutes": "{0} minit", 

4982 "hour": "jam", 

4983 "hours": "{0} jam", 

4984 "day": "hari", 

4985 "days": "{0} hari", 

4986 "week": "minggu", 

4987 "weeks": "{0} minggu", 

4988 "month": "bulan", 

4989 "months": "{0} bulan", 

4990 "year": "tahun", 

4991 "years": "{0} tahun", 

4992 } 

4993 

4994 month_names = [ 

4995 "", 

4996 "Januari", 

4997 "Februari", 

4998 "Mac", 

4999 "April", 

5000 "Mei", 

5001 "Jun", 

5002 "Julai", 

5003 "Ogos", 

5004 "September", 

5005 "Oktober", 

5006 "November", 

5007 "Disember", 

5008 ] 

5009 

5010 month_abbreviations = [ 

5011 "", 

5012 "Jan.", 

5013 "Feb.", 

5014 "Mac", 

5015 "Apr.", 

5016 "Mei", 

5017 "Jun", 

5018 "Julai", 

5019 "Og.", 

5020 "Sept.", 

5021 "Okt.", 

5022 "Nov.", 

5023 "Dis.", 

5024 ] 

5025 

5026 day_names = [ 

5027 "", 

5028 "Isnin", 

5029 "Selasa", 

5030 "Rabu", 

5031 "Khamis", 

5032 "Jumaat", 

5033 "Sabtu", 

5034 "Ahad", 

5035 ] 

5036 

5037 day_abbreviations = [ 

5038 "", 

5039 "Isnin", 

5040 "Selasa", 

5041 "Rabu", 

5042 "Khamis", 

5043 "Jumaat", 

5044 "Sabtu", 

5045 "Ahad", 

5046 ] 

5047 

5048 

5049class MalteseLocale(Locale): 

5050 names = ["mt", "mt-mt"] 

5051 

5052 past = "{0} ilu" 

5053 future = "fi {0}" 

5054 and_word = "u" 

5055 

5056 timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = { 

5057 "now": "issa", 

5058 "second": "sekonda", 

5059 "seconds": "{0} sekondi", 

5060 "minute": "minuta", 

5061 "minutes": "{0} minuti", 

5062 "hour": "siegħa", 

5063 "hours": {"dual": "{0} sagħtejn", "plural": "{0} sigħat"}, 

5064 "day": "jum", 

5065 "days": {"dual": "{0} jumejn", "plural": "{0} ijiem"}, 

5066 "week": "ġimgħa", 

5067 "weeks": {"dual": "{0} ġimagħtejn", "plural": "{0} ġimgħat"}, 

5068 "month": "xahar", 

5069 "months": {"dual": "{0} xahrejn", "plural": "{0} xhur"}, 

5070 "year": "sena", 

5071 "years": {"dual": "{0} sentejn", "plural": "{0} snin"}, 

5072 } 

5073 

5074 month_names = [ 

5075 "", 

5076 "Jannar", 

5077 "Frar", 

5078 "Marzu", 

5079 "April", 

5080 "Mejju", 

5081 "Ġunju", 

5082 "Lulju", 

5083 "Awwissu", 

5084 "Settembru", 

5085 "Ottubru", 

5086 "Novembru", 

5087 "Diċembru", 

5088 ] 

5089 

5090 month_abbreviations = [ 

5091 "", 

5092 "Jan", 

5093 "Fr", 

5094 "Mar", 

5095 "Apr", 

5096 "Mejju", 

5097 "Ġun", 

5098 "Lul", 

5099 "Aw", 

5100 "Sett", 

5101 "Ott", 

5102 "Nov", 

5103 "Diċ", 

5104 ] 

5105 

5106 day_names = [ 

5107 "", 

5108 "It-Tnejn", 

5109 "It-Tlieta", 

5110 "L-Erbgħa", 

5111 "Il-Ħamis", 

5112 "Il-Ġimgħa", 

5113 "Is-Sibt", 

5114 "Il-Ħadd", 

5115 ] 

5116 

5117 day_abbreviations = [ 

5118 "", 

5119 "T", 

5120 "TL", 

5121 "E", 

5122 "Ħ", 

5123 "Ġ", 

5124 "S", 

5125 "Ħ", 

5126 ] 

5127 

5128 def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str: 

5129 form = self.timeframes[timeframe] 

5130 delta = abs(delta) 

5131 if isinstance(form, Mapping): 

5132 if delta == 2: 

5133 form = form["dual"] 

5134 else: 

5135 form = form["plural"] 

5136 

5137 return form.format(delta) 

5138 

5139 

5140class SamiLocale(Locale): 

5141 names = ["se", "se-fi", "se-no", "se-se"] 

5142 

5143 past = "{0} dassái" 

5144 future = "{0} " # NOTE: couldn't find preposition for Sami here, none needed? 

5145 

5146 timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = { 

5147 "now": "dál", 

5148 "second": "sekunda", 

5149 "seconds": "{0} sekundda", 

5150 "minute": "minuhta", 

5151 "minutes": "{0} minuhta", 

5152 "hour": "diimmu", 

5153 "hours": "{0} diimmu", 

5154 "day": "beaivvi", 

5155 "days": "{0} beaivvi", 

5156 "week": "vahku", 

5157 "weeks": "{0} vahku", 

5158 "month": "mánu", 

5159 "months": "{0} mánu", 

5160 "year": "jagi", 

5161 "years": "{0} jagi", 

5162 } 

5163 

5164 month_names = [ 

5165 "", 

5166 "Ođđajagimánnu", 

5167 "Guovvamánnu", 

5168 "Njukčamánnu", 

5169 "Cuoŋománnu", 

5170 "Miessemánnu", 

5171 "Geassemánnu", 

5172 "Suoidnemánnu", 

5173 "Borgemánnu", 

5174 "Čakčamánnu", 

5175 "Golggotmánnu", 

5176 "Skábmamánnu", 

5177 "Juovlamánnu", 

5178 ] 

5179 

5180 month_abbreviations = [ 

5181 "", 

5182 "Ođđajagimánnu", 

5183 "Guovvamánnu", 

5184 "Njukčamánnu", 

5185 "Cuoŋománnu", 

5186 "Miessemánnu", 

5187 "Geassemánnu", 

5188 "Suoidnemánnu", 

5189 "Borgemánnu", 

5190 "Čakčamánnu", 

5191 "Golggotmánnu", 

5192 "Skábmamánnu", 

5193 "Juovlamánnu", 

5194 ] 

5195 

5196 day_names = [ 

5197 "", 

5198 "Mánnodat", 

5199 "Disdat", 

5200 "Gaskavahkku", 

5201 "Duorastat", 

5202 "Bearjadat", 

5203 "Lávvordat", 

5204 "Sotnabeaivi", 

5205 ] 

5206 

5207 day_abbreviations = [ 

5208 "", 

5209 "Mánnodat", 

5210 "Disdat", 

5211 "Gaskavahkku", 

5212 "Duorastat", 

5213 "Bearjadat", 

5214 "Lávvordat", 

5215 "Sotnabeaivi", 

5216 ] 

5217 

5218 

5219class OdiaLocale(Locale): 

5220 names = ["or", "or-in"] 

5221 

5222 past = "{0} ପୂର୍ବେ" 

5223 future = "{0} ପରେ" 

5224 

5225 timeframes = { 

5226 "now": "ବର୍ତ୍ତମାନ", 

5227 "second": "ଏକ ସେକେଣ୍ଡ", 

5228 "seconds": "{0} ସେକେଣ୍ଡ", 

5229 "minute": "ଏକ ମିନଟ", 

5230 "minutes": "{0} ମିନଟ", 

5231 "hour": "ଏକ ଘଣ୍ଟା", 

5232 "hours": "{0} ଘଣ୍ଟା", 

5233 "day": "ଏକ ଦିନ", 

5234 "days": "{0} ଦିନ", 

5235 "month": "ଏକ ମାସ", 

5236 "months": "{0} ମାସ ", 

5237 "year": "ଏକ ବର୍ଷ", 

5238 "years": "{0} ବର୍ଷ", 

5239 } 

5240 

5241 meridians = {"am": "ପୂର୍ବାହ୍ନ", "pm": "ଅପରାହ୍ନ", "AM": "ପୂର୍ବାହ୍ନ", "PM": "ଅପରାହ୍ନ"} 

5242 

5243 month_names = [ 

5244 "", 

5245 "ଜାନୁଆରୀ", 

5246 "ଫେବୃଆରୀ", 

5247 "ମାର୍ଚ୍ଚ୍", 

5248 "ଅପ୍ରେଲ", 

5249 "ମଇ", 

5250 "ଜୁନ୍", 

5251 "ଜୁଲାଇ", 

5252 "ଅଗଷ୍ଟ", 

5253 "ସେପ୍ଟେମ୍ବର", 

5254 "ଅକ୍ଟୋବର୍", 

5255 "ନଭେମ୍ବର୍", 

5256 "ଡିସେମ୍ବର୍", 

5257 ] 

5258 month_abbreviations = [ 

5259 "", 

5260 "ଜାନୁ", 

5261 "ଫେବୃ", 

5262 "ମାର୍ଚ୍ଚ୍", 

5263 "ଅପ୍ରେ", 

5264 "ମଇ", 

5265 "ଜୁନ୍", 

5266 "ଜୁଲା", 

5267 "ଅଗ", 

5268 "ସେପ୍ଟେ", 

5269 "ଅକ୍ଟୋ", 

5270 "ନଭେ", 

5271 "ଡିସେ", 

5272 ] 

5273 

5274 day_names = [ 

5275 "", 

5276 "ସୋମବାର", 

5277 "ମଙ୍ଗଳବାର", 

5278 "ବୁଧବାର", 

5279 "ଗୁରୁବାର", 

5280 "ଶୁକ୍ରବାର", 

5281 "ଶନିବାର", 

5282 "ରବିବାର", 

5283 ] 

5284 day_abbreviations = [ 

5285 "", 

5286 "ସୋମ", 

5287 "ମଙ୍ଗଳ", 

5288 "ବୁଧ", 

5289 "ଗୁରୁ", 

5290 "ଶୁକ୍ର", 

5291 "ଶନି", 

5292 "ରବି", 

5293 ] 

5294 

5295 def _ordinal_number(self, n: int) -> str: 

5296 if n > 10 or n == 0: 

5297 return f"{n}ତମ" 

5298 if n in [1, 5, 7, 8, 9, 10]: 

5299 return f"{n}ମ" 

5300 if n in [2, 3]: 

5301 return f"{n}ୟ" 

5302 if n == 4: 

5303 return f"{n}ର୍ଥ" 

5304 if n == 6: 

5305 return f"{n}ଷ୍ଠ" 

5306 return "" 

5307 

5308 

5309class SerbianLocale(Locale): 

5310 names = ["sr", "sr-rs", "sr-sp"] 

5311 

5312 past = "pre {0}" 

5313 future = "za {0}" 

5314 and_word = "i" 

5315 

5316 timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = { 

5317 "now": "sada", 

5318 "second": "sekundu", 

5319 "seconds": {"double": "{0} sekunde", "higher": "{0} sekundi"}, 

5320 "minute": "minutu", 

5321 "minutes": {"double": "{0} minute", "higher": "{0} minuta"}, 

5322 "hour": "sat", 

5323 "hours": {"double": "{0} sata", "higher": "{0} sati"}, 

5324 "day": "dan", 

5325 "days": {"double": "{0} dana", "higher": "{0} dana"}, 

5326 "week": "nedelju", 

5327 "weeks": {"double": "{0} nedelje", "higher": "{0} nedelja"}, 

5328 "month": "mesec", 

5329 "months": {"double": "{0} meseca", "higher": "{0} meseci"}, 

5330 "year": "godinu", 

5331 "years": {"double": "{0} godine", "higher": "{0} godina"}, 

5332 } 

5333 

5334 month_names = [ 

5335 "", 

5336 "januar", # јануар 

5337 "februar", # фебруар 

5338 "mart", # март 

5339 "april", # април 

5340 "maj", # мај 

5341 "jun", # јун 

5342 "jul", # јул 

5343 "avgust", # август 

5344 "septembar", # септембар 

5345 "oktobar", # октобар 

5346 "novembar", # новембар 

5347 "decembar", # децембар 

5348 ] 

5349 

5350 month_abbreviations = [ 

5351 "", 

5352 "jan", 

5353 "feb", 

5354 "mar", 

5355 "apr", 

5356 "maj", 

5357 "jun", 

5358 "jul", 

5359 "avg", 

5360 "sep", 

5361 "okt", 

5362 "nov", 

5363 "dec", 

5364 ] 

5365 

5366 day_names = [ 

5367 "", 

5368 "ponedeljak", # понедељак 

5369 "utorak", # уторак 

5370 "sreda", # среда 

5371 "četvrtak", # четвртак 

5372 "petak", # петак 

5373 "subota", # субота 

5374 "nedelja", # недеља 

5375 ] 

5376 

5377 day_abbreviations = [ 

5378 "", 

5379 "po", # по 

5380 "ut", # ут 

5381 "sr", # ср 

5382 "če", # че 

5383 "pe", # пе 

5384 "su", # су 

5385 "ne", # не 

5386 ] 

5387 

5388 def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str: 

5389 form = self.timeframes[timeframe] 

5390 delta = abs(delta) 

5391 if isinstance(form, Mapping): 

5392 if 1 < delta <= 4: 

5393 form = form["double"] 

5394 else: 

5395 form = form["higher"] 

5396 

5397 return form.format(delta) 

5398 

5399 

5400class LuxembourgishLocale(Locale): 

5401 names = ["lb", "lb-lu"] 

5402 

5403 past = "virun {0}" 

5404 future = "an {0}" 

5405 and_word = "an" 

5406 

5407 timeframes = { 

5408 "now": "just elo", 

5409 "second": "enger Sekonn", 

5410 "seconds": "{0} Sekonnen", 

5411 "minute": "enger Minutt", 

5412 "minutes": "{0} Minutten", 

5413 "hour": "enger Stonn", 

5414 "hours": "{0} Stonnen", 

5415 "day": "engem Dag", 

5416 "days": "{0} Deeg", 

5417 "week": "enger Woch", 

5418 "weeks": "{0} Wochen", 

5419 "month": "engem Mount", 

5420 "months": "{0} Méint", 

5421 "year": "engem Joer", 

5422 "years": "{0} Jahren", 

5423 } 

5424 

5425 timeframes_only_distance = timeframes.copy() 

5426 timeframes_only_distance["second"] = "eng Sekonn" 

5427 timeframes_only_distance["minute"] = "eng Minutt" 

5428 timeframes_only_distance["hour"] = "eng Stonn" 

5429 timeframes_only_distance["day"] = "een Dag" 

5430 timeframes_only_distance["days"] = "{0} Deeg" 

5431 timeframes_only_distance["week"] = "eng Woch" 

5432 timeframes_only_distance["month"] = "ee Mount" 

5433 timeframes_only_distance["months"] = "{0} Méint" 

5434 timeframes_only_distance["year"] = "ee Joer" 

5435 timeframes_only_distance["years"] = "{0} Joer" 

5436 

5437 month_names = [ 

5438 "", 

5439 "Januar", 

5440 "Februar", 

5441 "Mäerz", 

5442 "Abrëll", 

5443 "Mee", 

5444 "Juni", 

5445 "Juli", 

5446 "August", 

5447 "September", 

5448 "Oktouber", 

5449 "November", 

5450 "Dezember", 

5451 ] 

5452 

5453 month_abbreviations = [ 

5454 "", 

5455 "Jan", 

5456 "Feb", 

5457 "Mäe", 

5458 "Abr", 

5459 "Mee", 

5460 "Jun", 

5461 "Jul", 

5462 "Aug", 

5463 "Sep", 

5464 "Okt", 

5465 "Nov", 

5466 "Dez", 

5467 ] 

5468 

5469 day_names = [ 

5470 "", 

5471 "Méindeg", 

5472 "Dënschdeg", 

5473 "Mëttwoch", 

5474 "Donneschdeg", 

5475 "Freideg", 

5476 "Samschdeg", 

5477 "Sonndeg", 

5478 ] 

5479 

5480 day_abbreviations = ["", "Méi", "Dën", "Mët", "Don", "Fre", "Sam", "Son"] 

5481 

5482 def _ordinal_number(self, n: int) -> str: 

5483 return f"{n}." 

5484 

5485 def describe( 

5486 self, 

5487 timeframe: TimeFrameLiteral, 

5488 delta: Union[int, float] = 0, 

5489 only_distance: bool = False, 

5490 ) -> str: 

5491 if not only_distance: 

5492 return super().describe(timeframe, delta, only_distance) 

5493 

5494 # Luxembourgish uses a different case without 'in' or 'ago' 

5495 humanized = self.timeframes_only_distance[timeframe].format(trunc(abs(delta))) 

5496 

5497 return humanized 

5498 

5499 

5500class ZuluLocale(Locale): 

5501 names = ["zu", "zu-za"] 

5502 

5503 past = "{0} edlule" 

5504 future = "{0} " 

5505 and_word = "futhi" 

5506 

5507 timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[Mapping[str, str], str]]] = { 

5508 "now": "manje", 

5509 "second": {"past": "umzuzwana", "future": "ngomzuzwana"}, 

5510 "seconds": {"past": "{0} imizuzwana", "future": "{0} ngemizuzwana"}, 

5511 "minute": {"past": "umzuzu", "future": "ngomzuzu"}, 

5512 "minutes": {"past": "{0} imizuzu", "future": "{0} ngemizuzu"}, 

5513 "hour": {"past": "ihora", "future": "ngehora"}, 

5514 "hours": {"past": "{0} amahora", "future": "{0} emahoreni"}, 

5515 "day": {"past": "usuku", "future": "ngosuku"}, 

5516 "days": {"past": "{0} izinsuku", "future": "{0} ezinsukwini"}, 

5517 "week": {"past": "isonto", "future": "ngesonto"}, 

5518 "weeks": {"past": "{0} amasonto", "future": "{0} emasontweni"}, 

5519 "month": {"past": "inyanga", "future": "ngenyanga"}, 

5520 "months": {"past": "{0} izinyanga", "future": "{0} ezinyangeni"}, 

5521 "year": {"past": "unyaka", "future": "ngonyak"}, 

5522 "years": {"past": "{0} iminyaka", "future": "{0} eminyakeni"}, 

5523 } 

5524 

5525 def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str: 

5526 """Zulu aware time frame format function, takes into account 

5527 the differences between past and future forms.""" 

5528 abs_delta = abs(delta) 

5529 form = self.timeframes[timeframe] 

5530 

5531 if isinstance(form, str): 

5532 return form.format(abs_delta) 

5533 

5534 if delta > 0: 

5535 key = "future" 

5536 else: 

5537 key = "past" 

5538 form = form[key] 

5539 

5540 return form.format(abs_delta) 

5541 

5542 month_names = [ 

5543 "", 

5544 "uMasingane", 

5545 "uNhlolanja", 

5546 "uNdasa", 

5547 "UMbasa", 

5548 "UNhlaba", 

5549 "UNhlangulana", 

5550 "uNtulikazi", 

5551 "UNcwaba", 

5552 "uMandulo", 

5553 "uMfumfu", 

5554 "uLwezi", 

5555 "uZibandlela", 

5556 ] 

5557 

5558 month_abbreviations = [ 

5559 "", 

5560 "uMasingane", 

5561 "uNhlolanja", 

5562 "uNdasa", 

5563 "UMbasa", 

5564 "UNhlaba", 

5565 "UNhlangulana", 

5566 "uNtulikazi", 

5567 "UNcwaba", 

5568 "uMandulo", 

5569 "uMfumfu", 

5570 "uLwezi", 

5571 "uZibandlela", 

5572 ] 

5573 

5574 day_names = [ 

5575 "", 

5576 "uMsombuluko", 

5577 "uLwesibili", 

5578 "uLwesithathu", 

5579 "uLwesine", 

5580 "uLwesihlanu", 

5581 "uMgqibelo", 

5582 "iSonto", 

5583 ] 

5584 

5585 day_abbreviations = [ 

5586 "", 

5587 "uMsombuluko", 

5588 "uLwesibili", 

5589 "uLwesithathu", 

5590 "uLwesine", 

5591 "uLwesihlanu", 

5592 "uMgqibelo", 

5593 "iSonto", 

5594 ] 

5595 

5596 

5597class TamilLocale(Locale): 

5598 names = ["ta", "ta-in", "ta-lk"] 

5599 

5600 past = "{0} நேரத்திற்கு முன்பு" 

5601 future = "இல் {0}" 

5602 

5603 timeframes = { 

5604 "now": "இப்போது", 

5605 "second": "ஒரு இரண்டாவது", 

5606 "seconds": "{0} விநாடிகள்", 

5607 "minute": "ஒரு நிமிடம்", 

5608 "minutes": "{0} நிமிடங்கள்", 

5609 "hour": "ஒரு மணி", 

5610 "hours": "{0} மணிநேரம்", 

5611 "day": "ஒரு நாள்", 

5612 "days": "{0} நாட்கள்", 

5613 "week": "ஒரு வாரம்", 

5614 "weeks": "{0} வாரங்கள்", 

5615 "month": "ஒரு மாதம்", 

5616 "months": "{0} மாதங்கள்", 

5617 "year": "ஒரு ஆண்டு", 

5618 "years": "{0} ஆண்டுகள்", 

5619 } 

5620 

5621 month_names = [ 

5622 "", 

5623 "சித்திரை", 

5624 "வைகாசி", 

5625 "ஆனி", 

5626 "ஆடி", 

5627 "ஆவணி", 

5628 "புரட்டாசி", 

5629 "ஐப்பசி", 

5630 "கார்த்திகை", 

5631 "மார்கழி", 

5632 "தை", 

5633 "மாசி", 

5634 "பங்குனி", 

5635 ] 

5636 

5637 month_abbreviations = [ 

5638 "", 

5639 "ஜன", 

5640 "பிப்", 

5641 "மார்", 

5642 "ஏப்", 

5643 "மே", 

5644 "ஜூன்", 

5645 "ஜூலை", 

5646 "ஆக", 

5647 "செப்", 

5648 "அக்", 

5649 "நவ", 

5650 "டிச", 

5651 ] 

5652 

5653 day_names = [ 

5654 "", 

5655 "திங்கட்கிழமை", 

5656 "செவ்வாய்க்கிழமை", 

5657 "புதன்கிழமை", 

5658 "வியாழக்கிழமை", 

5659 "வெள்ளிக்கிழமை", 

5660 "சனிக்கிழமை", 

5661 "ஞாயிற்றுக்கிழமை", 

5662 ] 

5663 

5664 day_abbreviations = [ 

5665 "", 

5666 "திங்கட்", 

5667 "செவ்வாய்", 

5668 "புதன்", 

5669 "வியாழன்", 

5670 "வெள்ளி", 

5671 "சனி", 

5672 "ஞாயிறு", 

5673 ] 

5674 

5675 def _ordinal_number(self, n: int) -> str: 

5676 if n == 1: 

5677 return f"{n}வது" 

5678 elif n >= 0: 

5679 return f"{n}ஆம்" 

5680 else: 

5681 return "" 

5682 

5683 

5684class AlbanianLocale(Locale): 

5685 names = ["sq", "sq-al"] 

5686 

5687 past = "{0} më parë" 

5688 future = "në {0}" 

5689 and_word = "dhe" 

5690 

5691 timeframes = { 

5692 "now": "tani", 

5693 "second": "sekondë", 

5694 "seconds": "{0} sekonda", 

5695 "minute": "minutë", 

5696 "minutes": "{0} minuta", 

5697 "hour": "orë", 

5698 "hours": "{0} orë", 

5699 "day": "ditë", 

5700 "days": "{0} ditë", 

5701 "week": "javë", 

5702 "weeks": "{0} javë", 

5703 "month": "muaj", 

5704 "months": "{0} muaj", 

5705 "year": "vit", 

5706 "years": "{0} vjet", 

5707 } 

5708 

5709 month_names = [ 

5710 "", 

5711 "janar", 

5712 "shkurt", 

5713 "mars", 

5714 "prill", 

5715 "maj", 

5716 "qershor", 

5717 "korrik", 

5718 "gusht", 

5719 "shtator", 

5720 "tetor", 

5721 "nëntor", 

5722 "dhjetor", 

5723 ] 

5724 

5725 month_abbreviations = [ 

5726 "", 

5727 "jan", 

5728 "shk", 

5729 "mar", 

5730 "pri", 

5731 "maj", 

5732 "qer", 

5733 "korr", 

5734 "gush", 

5735 "sht", 

5736 "tet", 

5737 "nën", 

5738 "dhj", 

5739 ] 

5740 

5741 day_names = [ 

5742 "", 

5743 "e hënë", 

5744 "e martë", 

5745 "e mërkurë", 

5746 "e enjte", 

5747 "e premte", 

5748 "e shtunë", 

5749 "e diel", 

5750 ] 

5751 

5752 day_abbreviations = [ 

5753 "", 

5754 "hën", 

5755 "mar", 

5756 "mër", 

5757 "enj", 

5758 "pre", 

5759 "sht", 

5760 "die", 

5761 ] 

5762 

5763 

5764class GeorgianLocale(Locale): 

5765 names = ["ka", "ka-ge"] 

5766 

5767 past = "{0} წინ" # ts’in 

5768 future = "{0} შემდეგ" # shemdeg 

5769 and_word = "და" # da 

5770 

5771 timeframes = { 

5772 "now": "ახლა", # akhla 

5773 # When a cardinal qualifies a noun, it stands in the singular 

5774 "second": "წამის", # ts’amis 

5775 "seconds": "{0} წამის", 

5776 "minute": "წუთის", # ts’utis 

5777 "minutes": "{0} წუთის", 

5778 "hour": "საათის", # saatis 

5779 "hours": "{0} საათის", 

5780 "day": "დღის", # dghis 

5781 "days": "{0} დღის", 

5782 "week": "კვირის", # k’viris 

5783 "weeks": "{0} კვირის", 

5784 "month": "თვის", # tvis 

5785 "months": "{0} თვის", 

5786 "year": "წლის", # ts’lis 

5787 "years": "{0} წლის", 

5788 } 

5789 

5790 month_names = [ 

5791 # modern month names 

5792 "", 

5793 "იანვარი", # Ianvari 

5794 "თებერვალი", # Tebervali 

5795 "მარტი", # Mart'i 

5796 "აპრილი", # Ap'rili 

5797 "მაისი", # Maisi 

5798 "ივნისი", # Ivnisi 

5799 "ივლისი", # Ivlisi 

5800 "აგვისტო", # Agvist'o 

5801 "სექტემბერი", # Sekt'emberi 

5802 "ოქტომბერი", # Okt'omberi 

5803 "ნოემბერი", # Noemberi 

5804 "დეკემბერი", # Dek'emberi 

5805 ] 

5806 

5807 month_abbreviations = [ 

5808 # no abbr. found yet 

5809 "", 

5810 "იანვარი", # Ianvari 

5811 "თებერვალი", # Tebervali 

5812 "მარტი", # Mart'i 

5813 "აპრილი", # Ap'rili 

5814 "მაისი", # Maisi 

5815 "ივნისი", # Ivnisi 

5816 "ივლისი", # Ivlisi 

5817 "აგვისტო", # Agvist'o 

5818 "სექტემბერი", # Sekt'emberi 

5819 "ოქტომბერი", # Okt'omberi 

5820 "ნოემბერი", # Noemberi 

5821 "დეკემბერი", # Dek'emberi 

5822 ] 

5823 

5824 day_names = [ 

5825 "", 

5826 "ორშაბათი", # orshabati 

5827 "სამშაბათი", # samshabati 

5828 "ოთხშაბათი", # otkhshabati 

5829 "ხუთშაბათი", # khutshabati 

5830 "პარასკევი", # p’arask’evi 

5831 "შაბათი", # shabati 

5832 # "k’vira" also serves as week; to avoid confusion "k’vira-dge" can be used for Sunday 

5833 "კვირა", # k’vira 

5834 ] 

5835 

5836 day_abbreviations = [ 

5837 "", 

5838 "ორშაბათი", # orshabati 

5839 "სამშაბათი", # samshabati 

5840 "ოთხშაბათი", # otkhshabati 

5841 "ხუთშაბათი", # khutshabati 

5842 "პარასკევი", # p’arask’evi 

5843 "შაბათი", # shabati 

5844 "კვირა", # k’vira 

5845 ] 

5846 

5847 

5848class SinhalaLocale(Locale): 

5849 names = ["si", "si-lk"] 

5850 

5851 past = "{0}ට පෙර" 

5852 future = "{0}" 

5853 and_word = "සහ" 

5854 

5855 timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[Mapping[str, str], str]]] = { 

5856 "now": "දැන්", 

5857 "second": { 

5858 "past": "තත්පරයක", 

5859 "future": "තත්පරයකින්", 

5860 }, # ක් is the article 

5861 "seconds": { 

5862 "past": "තත්පර {0} ක", 

5863 "future": "තත්පර {0} කින්", 

5864 }, 

5865 "minute": { 

5866 "past": "විනාඩියක", 

5867 "future": "විනාඩියකින්", 

5868 }, 

5869 "minutes": { 

5870 "past": "විනාඩි {0} ක", 

5871 "future": "මිනිත්තු {0} කින්", 

5872 }, 

5873 "hour": {"past": "පැයක", "future": "පැයකින්"}, 

5874 "hours": { 

5875 "past": "පැය {0} ක", 

5876 "future": "පැය {0} කින්", 

5877 }, 

5878 "day": {"past": "දිනක", "future": "දිනකට"}, 

5879 "days": { 

5880 "past": "දින {0} ක", 

5881 "future": "දින {0} කින්", 

5882 }, 

5883 "week": {"past": "සතියක", "future": "සතියකින්"}, 

5884 "weeks": { 

5885 "past": "සති {0} ක", 

5886 "future": "සති {0} කින්", 

5887 }, 

5888 "month": {"past": "මාසයක", "future": "එය මාසය තුළ"}, 

5889 "months": { 

5890 "past": "මාස {0} ක", 

5891 "future": "මාස {0} කින්", 

5892 }, 

5893 "year": {"past": "වසරක", "future": "වසරක් තුළ"}, 

5894 "years": { 

5895 "past": "අවුරුදු {0} ක", 

5896 "future": "අවුරුදු {0} තුළ", 

5897 }, 

5898 } 

5899 # Sinhala: the general format to describe timeframe is different from past and future, 

5900 # so we do not copy the original timeframes dictionary 

5901 timeframes_only_distance = {} 

5902 timeframes_only_distance["second"] = "තත්පරයක්" 

5903 timeframes_only_distance["seconds"] = "තත්පර {0}" 

5904 timeframes_only_distance["minute"] = "මිනිත්තුවක්" 

5905 timeframes_only_distance["minutes"] = "විනාඩි {0}" 

5906 timeframes_only_distance["hour"] = "පැයක්" 

5907 timeframes_only_distance["hours"] = "පැය {0}" 

5908 timeframes_only_distance["day"] = "දවසක්" 

5909 timeframes_only_distance["days"] = "දවස් {0}" 

5910 timeframes_only_distance["week"] = "සතියක්" 

5911 timeframes_only_distance["weeks"] = "සති {0}" 

5912 timeframes_only_distance["month"] = "මාසයක්" 

5913 timeframes_only_distance["months"] = "මාස {0}" 

5914 timeframes_only_distance["year"] = "අවුරුද්දක්" 

5915 timeframes_only_distance["years"] = "අවුරුදු {0}" 

5916 

5917 def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str: 

5918 """ 

5919 Sinhala awares time frame format function, takes into account 

5920 the differences between general, past, and future forms (three different suffixes). 

5921 """ 

5922 abs_delta = abs(delta) 

5923 form = self.timeframes[timeframe] 

5924 

5925 if isinstance(form, str): 

5926 return form.format(abs_delta) 

5927 

5928 if delta > 0: 

5929 key = "future" 

5930 else: 

5931 key = "past" 

5932 form = form[key] 

5933 

5934 return form.format(abs_delta) 

5935 

5936 def describe( 

5937 self, 

5938 timeframe: TimeFrameLiteral, 

5939 delta: Union[float, int] = 1, # key is always future when only_distance=False 

5940 only_distance: bool = False, 

5941 ) -> str: 

5942 """Describes a delta within a timeframe in plain language. 

5943 

5944 :param timeframe: a string representing a timeframe. 

5945 :param delta: a quantity representing a delta in a timeframe. 

5946 :param only_distance: return only distance eg: "11 seconds" without "in" or "ago" keywords 

5947 """ 

5948 

5949 if not only_distance: 

5950 return super().describe(timeframe, delta, only_distance) 

5951 # Sinhala uses a different case without 'in' or 'ago' 

5952 humanized = self.timeframes_only_distance[timeframe].format(trunc(abs(delta))) 

5953 

5954 return humanized 

5955 

5956 month_names = [ 

5957 "", 

5958 "ජනවාරි", 

5959 "පෙබරවාරි", 

5960 "මාර්තු", 

5961 "අප්‍රේල්", 

5962 "මැයි", 

5963 "ජූනි", 

5964 "ජූලි", 

5965 "අගෝස්තු", 

5966 "සැප්තැම්බර්", 

5967 "ඔක්තෝබර්", 

5968 "නොවැම්බර්", 

5969 "දෙසැම්බර්", 

5970 ] 

5971 

5972 month_abbreviations = [ 

5973 "", 

5974 "ජන", 

5975 "පෙබ", 

5976 "මාර්", 

5977 "අප්‍රේ", 

5978 "මැයි", 

5979 "ජුනි", 

5980 "ජූලි", 

5981 "අගෝ", 

5982 "සැප්", 

5983 "ඔක්", 

5984 "නොවැ", 

5985 "දෙසැ", 

5986 ] 

5987 

5988 day_names = [ 

5989 "", 

5990 "සදුදා", 

5991 "අඟහරැවදා", 

5992 "බදාදා", 

5993 "බ්‍රහස්‍පතින්‍දා", 

5994 "සිකුරාදා", 

5995 "සෙනසුරාදා", 

5996 "ඉරිදා", 

5997 ] 

5998 

5999 day_abbreviations = [ 

6000 "", 

6001 "සදුද", 

6002 "බදා", 

6003 "බදා", 

6004 "සිකු", 

6005 "සෙන", 

6006 "අ", 

6007 "ඉරිදා", 

6008 ] 

6009 

6010 

6011class UrduLocale(Locale): 

6012 names = ["ur", "ur-pk"] 

6013 

6014 past = "پہلے {0}" 

6015 future = "میں {0}" 

6016 and_word = "اور" 

6017 

6018 timeframes = { 

6019 "now": "ابھی", 

6020 "second": "ایک سیکنڈ", 

6021 "seconds": "{0} سیکنڈ", 

6022 "minute": "ایک منٹ", 

6023 "minutes": "{0} منٹ", 

6024 "hour": "ایک گھنٹے", 

6025 "hours": "{0} گھنٹے", 

6026 "day": "ایک دن", 

6027 "days": "{0} دن", 

6028 "week": "ایک ہفتے", 

6029 "weeks": "{0} ہفتے", 

6030 "month": "ایک مہینہ", 

6031 "months": "{0} ماہ", 

6032 "year": "ایک سال", 

6033 "years": "{0} سال", 

6034 } 

6035 

6036 month_names = [ 

6037 "", 

6038 "جنوری", 

6039 "فروری", 

6040 "مارچ", 

6041 "اپریل", 

6042 "مئی", 

6043 "جون", 

6044 "جولائی", 

6045 "اگست", 

6046 "ستمبر", 

6047 "اکتوبر", 

6048 "نومبر", 

6049 "دسمبر", 

6050 ] 

6051 

6052 month_abbreviations = [ 

6053 "", 

6054 "جنوری", 

6055 "فروری", 

6056 "مارچ", 

6057 "اپریل", 

6058 "مئی", 

6059 "جون", 

6060 "جولائی", 

6061 "اگست", 

6062 "ستمبر", 

6063 "اکتوبر", 

6064 "نومبر", 

6065 "دسمبر", 

6066 ] 

6067 

6068 day_names = [ 

6069 "", 

6070 "سوموار", 

6071 "منگل", 

6072 "بدھ", 

6073 "جمعرات", 

6074 "جمعہ", 

6075 "ہفتہ", 

6076 "اتوار", 

6077 ] 

6078 

6079 day_abbreviations = [ 

6080 "", 

6081 "سوموار", 

6082 "منگل", 

6083 "بدھ", 

6084 "جمعرات", 

6085 "جمعہ", 

6086 "ہفتہ", 

6087 "اتوار", 

6088 ] 

6089 

6090 

6091class KazakhLocale(Locale): 

6092 names = ["kk", "kk-kz"] 

6093 

6094 past = "{0} бұрын" 

6095 future = "{0} кейін" 

6096 timeframes = { 

6097 "now": "қазір", 

6098 "second": "бір секунд", 

6099 "seconds": "{0} секунд", 

6100 "minute": "бір минут", 

6101 "minutes": "{0} минут", 

6102 "hour": "бір сағат", 

6103 "hours": "{0} сағат", 

6104 "day": "бір күн", 

6105 "days": "{0} күн", 

6106 "week": "бір апта", 

6107 "weeks": "{0} апта", 

6108 "month": "бір ай", 

6109 "months": "{0} ай", 

6110 "year": "бір жыл", 

6111 "years": "{0} жыл", 

6112 } 

6113 

6114 month_names = [ 

6115 "", 

6116 "Қаңтар", 

6117 "Ақпан", 

6118 "Наурыз", 

6119 "Сәуір", 

6120 "Мамыр", 

6121 "Маусым", 

6122 "Шілде", 

6123 "Тамыз", 

6124 "Қыркүйек", 

6125 "Қазан", 

6126 "Қараша", 

6127 "Желтоқсан", 

6128 ] 

6129 month_abbreviations = [ 

6130 "", 

6131 "Қан", 

6132 "Ақп", 

6133 "Нау", 

6134 "Сәу", 

6135 "Мам", 

6136 "Мау", 

6137 "Шіл", 

6138 "Там", 

6139 "Қыр", 

6140 "Қаз", 

6141 "Қар", 

6142 "Жел", 

6143 ] 

6144 

6145 day_names = [ 

6146 "", 

6147 "Дүйсембі", 

6148 "Сейсенбі", 

6149 "Сәрсенбі", 

6150 "Бейсенбі", 

6151 "Жұма", 

6152 "Сенбі", 

6153 "Жексенбі", 

6154 ] 

6155 day_abbreviations = ["", "Дс", "Сс", "Ср", "Бс", "Жм", "Сб", "Жс"] 

6156 

6157 

6158class AmharicLocale(Locale): 

6159 names = ["am", "am-et"] 

6160 

6161 past = "{0} በፊት" 

6162 future = "{0} ውስጥ" 

6163 and_word = "እና" 

6164 

6165 timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[Mapping[str, str], str]]] = { 

6166 "now": "አሁን", 

6167 "second": { 

6168 "past": "ከአንድ ሰከንድ", 

6169 "future": "በአንድ ሰከንድ", 

6170 }, 

6171 "seconds": { 

6172 "past": "ከ {0} ሰከንድ", 

6173 "future": "በ {0} ሰከንድ", 

6174 }, 

6175 "minute": { 

6176 "past": "ከአንድ ደቂቃ", 

6177 "future": "በአንድ ደቂቃ", 

6178 }, 

6179 "minutes": { 

6180 "past": "ከ {0} ደቂቃዎች", 

6181 "future": "በ {0} ደቂቃዎች", 

6182 }, 

6183 "hour": { 

6184 "past": "ከአንድ ሰዓት", 

6185 "future": "በአንድ ሰዓት", 

6186 }, 

6187 "hours": { 

6188 "past": "ከ {0} ሰዓታት", 

6189 "future": "በ {0} ሰከንድ", 

6190 }, 

6191 "day": { 

6192 "past": "ከአንድ ቀን", 

6193 "future": "በአንድ ቀን", 

6194 }, 

6195 "days": { 

6196 "past": "ከ {0} ቀናት", 

6197 "future": "በ {0} ቀናት", 

6198 }, 

6199 "week": { 

6200 "past": "ከአንድ ሳምንት", 

6201 "future": "በአንድ ሳምንት", 

6202 }, 

6203 "weeks": { 

6204 "past": "ከ {0} ሳምንታት", 

6205 "future": "በ {0} ሳምንታት", 

6206 }, 

6207 "month": { 

6208 "past": "ከአንድ ወር", 

6209 "future": "በአንድ ወር", 

6210 }, 

6211 "months": { 

6212 "past": "ከ {0} ወር", 

6213 "future": "በ {0} ወራት", 

6214 }, 

6215 "year": { 

6216 "past": "ከአንድ አመት", 

6217 "future": "በአንድ አመት", 

6218 }, 

6219 "years": { 

6220 "past": "ከ {0} ዓመታት", 

6221 "future": "በ {0} ዓመታት", 

6222 }, 

6223 } 

6224 # Amharic: the general format to describe timeframe is different from past and future, 

6225 # so we do not copy the original timeframes dictionary 

6226 timeframes_only_distance = { 

6227 "second": "አንድ ሰከንድ", 

6228 "seconds": "{0} ሰከንድ", 

6229 "minute": "አንድ ደቂቃ", 

6230 "minutes": "{0} ደቂቃዎች", 

6231 "hour": "አንድ ሰዓት", 

6232 "hours": "{0} ሰዓት", 

6233 "day": "አንድ ቀን", 

6234 "days": "{0} ቀናት", 

6235 "week": "አንድ ሳምንት", 

6236 "weeks": "{0} ሳምንት", 

6237 "month": "አንድ ወር", 

6238 "months": "{0} ወራት", 

6239 "year": "አንድ አመት", 

6240 "years": "{0} ዓመታት", 

6241 } 

6242 

6243 month_names = [ 

6244 "", 

6245 "ጃንዩወሪ", 

6246 "ፌብሩወሪ", 

6247 "ማርች", 

6248 "ኤፕሪል", 

6249 "ሜይ", 

6250 "ጁን", 

6251 "ጁላይ", 

6252 "ኦገስት", 

6253 "ሴፕቴምበር", 

6254 "ኦክቶበር", 

6255 "ኖቬምበር", 

6256 "ዲሴምበር", 

6257 ] 

6258 

6259 month_abbreviations = [ 

6260 "", 

6261 "ጃንዩ", 

6262 "ፌብሩ", 

6263 "ማርች", 

6264 "ኤፕሪ", 

6265 "ሜይ", 

6266 "ጁን", 

6267 "ጁላይ", 

6268 "ኦገስ", 

6269 "ሴፕቴ", 

6270 "ኦክቶ", 

6271 "ኖቬም", 

6272 "ዲሴም", 

6273 ] 

6274 

6275 day_names = [ 

6276 "", 

6277 "ሰኞ", 

6278 "ማክሰኞ", 

6279 "ረቡዕ", 

6280 "ሐሙስ", 

6281 "ዓርብ", 

6282 "ቅዳሜ", 

6283 "እሑድ", 

6284 ] 

6285 day_abbreviations = ["", "እ", "ሰ", "ማ", "ረ", "ሐ", "ዓ", "ቅ"] 

6286 

6287 def _ordinal_number(self, n: int) -> str: 

6288 return f"{n}ኛ" 

6289 

6290 def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str: 

6291 """ 

6292 Amharic awares time frame format function, takes into account 

6293 the differences between general, past, and future forms (three different suffixes). 

6294 """ 

6295 abs_delta = abs(delta) 

6296 form = self.timeframes[timeframe] 

6297 

6298 if isinstance(form, str): 

6299 return form.format(abs_delta) 

6300 

6301 if delta > 0: 

6302 key = "future" 

6303 else: 

6304 key = "past" 

6305 form = form[key] 

6306 

6307 return form.format(abs_delta) 

6308 

6309 def describe( 

6310 self, 

6311 timeframe: TimeFrameLiteral, 

6312 delta: Union[float, int] = 1, # key is always future when only_distance=False 

6313 only_distance: bool = False, 

6314 ) -> str: 

6315 """Describes a delta within a timeframe in plain language. 

6316 

6317 :param timeframe: a string representing a timeframe. 

6318 :param delta: a quantity representing a delta in a timeframe. 

6319 :param only_distance: return only distance eg: "11 seconds" without "in" or "ago" keywords 

6320 """ 

6321 

6322 if not only_distance: 

6323 return super().describe(timeframe, delta, only_distance) 

6324 humanized = self.timeframes_only_distance[timeframe].format(trunc(abs(delta))) 

6325 

6326 return humanized 

6327 

6328 

6329class ArmenianLocale(Locale): 

6330 names = ["hy", "hy-am"] 

6331 past = "{0} առաջ" 

6332 future = "{0}ից" 

6333 and_word = "Եվ" # Yev 

6334 

6335 timeframes = { 

6336 "now": "հիմա", 

6337 "second": "վայրկյան", 

6338 "seconds": "{0} վայրկյան", 

6339 "minute": "րոպե", 

6340 "minutes": "{0} րոպե", 

6341 "hour": "ժամ", 

6342 "hours": "{0} ժամ", 

6343 "day": "օր", 

6344 "days": "{0} օր", 

6345 "month": "ամիս", 

6346 "months": "{0} ամիս", 

6347 "year": "տարին", 

6348 "years": "{0} տարին", 

6349 "week": "շաբաթ", 

6350 "weeks": "{0} շաբաթ", 

6351 } 

6352 

6353 meridians = { 

6354 "am": "Ամ", 

6355 "pm": "պ.մ.", 

6356 "AM": "Ամ", 

6357 "PM": "պ.մ.", 

6358 } 

6359 

6360 month_names = [ 

6361 "", 

6362 "հունվար", 

6363 "փետրվար", 

6364 "մարտ", 

6365 "ապրիլ", 

6366 "մայիս", 

6367 "հունիս", 

6368 "հուլիս", 

6369 "օգոստոս", 

6370 "սեպտեմբեր", 

6371 "հոկտեմբեր", 

6372 "նոյեմբեր", 

6373 "դեկտեմբեր", 

6374 ] 

6375 

6376 month_abbreviations = [ 

6377 "", 

6378 "հունվար", 

6379 "փետրվար", 

6380 "մարտ", 

6381 "ապրիլ", 

6382 "մայիս", 

6383 "հունիս", 

6384 "հուլիս", 

6385 "օգոստոս", 

6386 "սեպտեմբեր", 

6387 "հոկտեմբեր", 

6388 "նոյեմբեր", 

6389 "դեկտեմբեր", 

6390 ] 

6391 

6392 day_names = [ 

6393 "", 

6394 "երկուշաբթի", 

6395 "երեքշաբթի", 

6396 "չորեքշաբթի", 

6397 "հինգշաբթի", 

6398 "ուրբաթ", 

6399 "շաբաթ", 

6400 "կիրակի", 

6401 ] 

6402 

6403 day_abbreviations = [ 

6404 "", 

6405 "երկ.", 

6406 "երեք.", 

6407 "չորեք.", 

6408 "հինգ.", 

6409 "ուրբ.", 

6410 "շաբ.", 

6411 "կիր.", 

6412 ] 

6413 

6414 

6415class UzbekLocale(Locale): 

6416 names = ["uz", "uz-uz"] 

6417 past = "{0}dan avval" 

6418 future = "{0}dan keyin" 

6419 timeframes = { 

6420 "now": "hozir", 

6421 "second": "bir soniya", 

6422 "seconds": "{0} soniya", 

6423 "minute": "bir daqiqa", 

6424 "minutes": "{0} daqiqa", 

6425 "hour": "bir soat", 

6426 "hours": "{0} soat", 

6427 "day": "bir kun", 

6428 "days": "{0} kun", 

6429 "week": "bir hafta", 

6430 "weeks": "{0} hafta", 

6431 "month": "bir oy", 

6432 "months": "{0} oy", 

6433 "year": "bir yil", 

6434 "years": "{0} yil", 

6435 } 

6436 

6437 month_names = [ 

6438 "", 

6439 "Yanvar", 

6440 "Fevral", 

6441 "Mart", 

6442 "Aprel", 

6443 "May", 

6444 "Iyun", 

6445 "Iyul", 

6446 "Avgust", 

6447 "Sentyabr", 

6448 "Oktyabr", 

6449 "Noyabr", 

6450 "Dekabr", 

6451 ] 

6452 

6453 month_abbreviations = [ 

6454 "", 

6455 "Yan", 

6456 "Fev", 

6457 "Mar", 

6458 "Apr", 

6459 "May", 

6460 "Iyn", 

6461 "Iyl", 

6462 "Avg", 

6463 "Sen", 

6464 "Okt", 

6465 "Noy", 

6466 "Dek", 

6467 ] 

6468 

6469 day_names = [ 

6470 "", 

6471 "Dushanba", 

6472 "Seshanba", 

6473 "Chorshanba", 

6474 "Payshanba", 

6475 "Juma", 

6476 "Shanba", 

6477 "Yakshanba", 

6478 ] 

6479 

6480 day_abbreviations = ["", "Dush", "Sesh", "Chor", "Pay", "Jum", "Shan", "Yak"]