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

1167 statements  

« prev     ^ index     » next       coverage.py v7.3.2, created at 2023-12-08 06:26 +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 self._month_name_to_ordinal = None 

133 

134 def describe( 

135 self, 

136 timeframe: TimeFrameLiteral, 

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

138 only_distance: bool = False, 

139 ) -> str: 

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

141 

142 :param timeframe: a string representing a timeframe. 

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

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

145 """ 

146 

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

148 if not only_distance: 

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

150 

151 return humanized 

152 

153 def describe_multi( 

154 self, 

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

156 only_distance: bool = False, 

157 ) -> str: 

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

159 

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

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

162 """ 

163 

164 parts = [ 

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

166 for timeframe, delta in timeframes 

167 ] 

168 if self.and_word: 

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

170 humanized = " ".join(parts) 

171 

172 if not only_distance: 

173 # Needed to determine the correct relative string to use 

174 timeframe_value = 0 

175 

176 for _, unit_value in timeframes: 

177 if trunc(unit_value) != 0: 

178 timeframe_value = trunc(unit_value) 

179 break 

180 

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

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

183 

184 return humanized 

185 

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

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

188 

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

190 

191 """ 

192 

193 return self.day_names[day] 

194 

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

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

197 

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

199 

200 """ 

201 

202 return self.day_abbreviations[day] 

203 

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

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

206 

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

208 

209 """ 

210 

211 return self.month_names[month] 

212 

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

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

215 

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

217 

218 """ 

219 

220 return self.month_abbreviations[month] 

221 

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

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

224 

225 :param name: the month name or abbreviation. 

226 

227 """ 

228 

229 if self._month_name_to_ordinal is None: 

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

231 self._month_name_to_ordinal.update( 

232 self._name_to_ordinal(self.month_abbreviations) 

233 ) 

234 

235 return self._month_name_to_ordinal.get(name) 

236 

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

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

239 

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

241 """ 

242 return f"{year:04d}" 

243 

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

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

246 

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

248 """ 

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

250 

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

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

253 

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

255 :param token: the format token. 

256 """ 

257 

258 if token == "a": 

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

260 if token == "A": 

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

262 return None 

263 

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

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

266 

267 :param n: an integer 

268 """ 

269 return self._ordinal_number(n) 

270 

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

272 return f"{n}" 

273 

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

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

276 

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

278 # TODO: remove cast 

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

280 

281 def _format_relative( 

282 self, 

283 humanized: str, 

284 timeframe: TimeFrameLiteral, 

285 delta: Union[float, int], 

286 ) -> str: 

287 if timeframe == "now": 

288 return humanized 

289 

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

291 

292 return direction.format(humanized) 

293 

294 

295class EnglishLocale(Locale): 

296 names = [ 

297 "en", 

298 "en-us", 

299 "en-gb", 

300 "en-au", 

301 "en-be", 

302 "en-jp", 

303 "en-za", 

304 "en-ca", 

305 "en-ph", 

306 ] 

307 

308 past = "{0} ago" 

309 future = "in {0}" 

310 and_word = "and" 

311 

312 timeframes = { 

313 "now": "just now", 

314 "second": "a second", 

315 "seconds": "{0} seconds", 

316 "minute": "a minute", 

317 "minutes": "{0} minutes", 

318 "hour": "an hour", 

319 "hours": "{0} hours", 

320 "day": "a day", 

321 "days": "{0} days", 

322 "week": "a week", 

323 "weeks": "{0} weeks", 

324 "month": "a month", 

325 "months": "{0} months", 

326 "quarter": "a quarter", 

327 "quarters": "{0} quarters", 

328 "year": "a year", 

329 "years": "{0} years", 

330 } 

331 

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

333 

334 month_names = [ 

335 "", 

336 "January", 

337 "February", 

338 "March", 

339 "April", 

340 "May", 

341 "June", 

342 "July", 

343 "August", 

344 "September", 

345 "October", 

346 "November", 

347 "December", 

348 ] 

349 month_abbreviations = [ 

350 "", 

351 "Jan", 

352 "Feb", 

353 "Mar", 

354 "Apr", 

355 "May", 

356 "Jun", 

357 "Jul", 

358 "Aug", 

359 "Sep", 

360 "Oct", 

361 "Nov", 

362 "Dec", 

363 ] 

364 

365 day_names = [ 

366 "", 

367 "Monday", 

368 "Tuesday", 

369 "Wednesday", 

370 "Thursday", 

371 "Friday", 

372 "Saturday", 

373 "Sunday", 

374 ] 

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

376 

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

378 

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

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

381 remainder = abs(n) % 10 

382 if remainder == 1: 

383 return f"{n}st" 

384 elif remainder == 2: 

385 return f"{n}nd" 

386 elif remainder == 3: 

387 return f"{n}rd" 

388 return f"{n}th" 

389 

390 def describe( 

391 self, 

392 timeframe: TimeFrameLiteral, 

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

394 only_distance: bool = False, 

395 ) -> str: 

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

397 

398 :param timeframe: a string representing a timeframe. 

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

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

401 """ 

402 

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

404 if only_distance and timeframe == "now": 

405 humanized = "instantly" 

406 

407 return humanized 

408 

409 

410class ItalianLocale(Locale): 

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

412 past = "{0} fa" 

413 future = "tra {0}" 

414 and_word = "e" 

415 

416 timeframes = { 

417 "now": "adesso", 

418 "second": "un secondo", 

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

420 "minute": "un minuto", 

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

422 "hour": "un'ora", 

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

424 "day": "un giorno", 

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

426 "week": "una settimana", 

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

428 "month": "un mese", 

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

430 "year": "un anno", 

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

432 } 

433 

434 month_names = [ 

435 "", 

436 "gennaio", 

437 "febbraio", 

438 "marzo", 

439 "aprile", 

440 "maggio", 

441 "giugno", 

442 "luglio", 

443 "agosto", 

444 "settembre", 

445 "ottobre", 

446 "novembre", 

447 "dicembre", 

448 ] 

449 month_abbreviations = [ 

450 "", 

451 "gen", 

452 "feb", 

453 "mar", 

454 "apr", 

455 "mag", 

456 "giu", 

457 "lug", 

458 "ago", 

459 "set", 

460 "ott", 

461 "nov", 

462 "dic", 

463 ] 

464 

465 day_names = [ 

466 "", 

467 "lunedì", 

468 "martedì", 

469 "mercoledì", 

470 "giovedì", 

471 "venerdì", 

472 "sabato", 

473 "domenica", 

474 ] 

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

476 

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

478 

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

480 return f"{n}º" 

481 

482 

483class SpanishLocale(Locale): 

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

485 past = "hace {0}" 

486 future = "en {0}" 

487 and_word = "y" 

488 

489 timeframes = { 

490 "now": "ahora", 

491 "second": "un segundo", 

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

493 "minute": "un minuto", 

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

495 "hour": "una hora", 

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

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

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

499 "week": "una semana", 

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

501 "month": "un mes", 

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

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

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

505 } 

506 

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

508 

509 month_names = [ 

510 "", 

511 "enero", 

512 "febrero", 

513 "marzo", 

514 "abril", 

515 "mayo", 

516 "junio", 

517 "julio", 

518 "agosto", 

519 "septiembre", 

520 "octubre", 

521 "noviembre", 

522 "diciembre", 

523 ] 

524 month_abbreviations = [ 

525 "", 

526 "ene", 

527 "feb", 

528 "mar", 

529 "abr", 

530 "may", 

531 "jun", 

532 "jul", 

533 "ago", 

534 "sep", 

535 "oct", 

536 "nov", 

537 "dic", 

538 ] 

539 

540 day_names = [ 

541 "", 

542 "lunes", 

543 "martes", 

544 "miércoles", 

545 "jueves", 

546 "viernes", 

547 "sábado", 

548 "domingo", 

549 ] 

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

551 

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

553 

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

555 return f"{n}º" 

556 

557 

558class FrenchBaseLocale(Locale): 

559 past = "il y a {0}" 

560 future = "dans {0}" 

561 and_word = "et" 

562 

563 timeframes = { 

564 "now": "maintenant", 

565 "second": "une seconde", 

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

567 "minute": "une minute", 

568 "minutes": "{0} minutes", 

569 "hour": "une heure", 

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

571 "day": "un jour", 

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

573 "week": "une semaine", 

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

575 "month": "un mois", 

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

577 "year": "un an", 

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

579 } 

580 

581 month_names = [ 

582 "", 

583 "janvier", 

584 "février", 

585 "mars", 

586 "avril", 

587 "mai", 

588 "juin", 

589 "juillet", 

590 "août", 

591 "septembre", 

592 "octobre", 

593 "novembre", 

594 "décembre", 

595 ] 

596 

597 day_names = [ 

598 "", 

599 "lundi", 

600 "mardi", 

601 "mercredi", 

602 "jeudi", 

603 "vendredi", 

604 "samedi", 

605 "dimanche", 

606 ] 

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

608 

609 ordinal_day_re = ( 

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

611 ) 

612 

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

614 if abs(n) == 1: 

615 return f"{n}er" 

616 return f"{n}e" 

617 

618 

619class FrenchLocale(FrenchBaseLocale, Locale): 

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

621 

622 month_abbreviations = [ 

623 "", 

624 "janv", 

625 "févr", 

626 "mars", 

627 "avr", 

628 "mai", 

629 "juin", 

630 "juil", 

631 "août", 

632 "sept", 

633 "oct", 

634 "nov", 

635 "déc", 

636 ] 

637 

638 

639class FrenchCanadianLocale(FrenchBaseLocale, Locale): 

640 names = ["fr-ca"] 

641 

642 month_abbreviations = [ 

643 "", 

644 "janv", 

645 "févr", 

646 "mars", 

647 "avr", 

648 "mai", 

649 "juin", 

650 "juill", 

651 "août", 

652 "sept", 

653 "oct", 

654 "nov", 

655 "déc", 

656 ] 

657 

658 

659class GreekLocale(Locale): 

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

661 

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

663 future = "σε {0}" 

664 and_word = "και" 

665 

666 timeframes = { 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

682 } 

683 

684 month_names = [ 

685 "", 

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

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

688 "Μαρτίου", 

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

690 "Μαΐου", 

691 "Ιουνίου", 

692 "Ιουλίου", 

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

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

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

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

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

698 ] 

699 month_abbreviations = [ 

700 "", 

701 "Ιαν", 

702 "Φεβ", 

703 "Μαρ", 

704 "Απρ", 

705 "Μαϊ", 

706 "Ιον", 

707 "Ιολ", 

708 "Αυγ", 

709 "Σεπ", 

710 "Οκτ", 

711 "Νοε", 

712 "Δεκ", 

713 ] 

714 

715 day_names = [ 

716 "", 

717 "Δευτέρα", 

718 "Τρίτη", 

719 "Τετάρτη", 

720 "Πέμπτη", 

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

722 "Σάββατο", 

723 "Κυριακή", 

724 ] 

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

726 

727 

728class JapaneseLocale(Locale): 

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

730 

731 past = "{0}前" 

732 future = "{0}後" 

733 and_word = "" 

734 

735 timeframes = { 

736 "now": "現在", 

737 "second": "1秒", 

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

739 "minute": "1分", 

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

741 "hour": "1時間", 

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

743 "day": "1日", 

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

745 "week": "1週間", 

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

747 "month": "1ヶ月", 

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

749 "year": "1年", 

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

751 } 

752 

753 month_names = [ 

754 "", 

755 "1月", 

756 "2月", 

757 "3月", 

758 "4月", 

759 "5月", 

760 "6月", 

761 "7月", 

762 "8月", 

763 "9月", 

764 "10月", 

765 "11月", 

766 "12月", 

767 ] 

768 month_abbreviations = [ 

769 "", 

770 " 1", 

771 " 2", 

772 " 3", 

773 " 4", 

774 " 5", 

775 " 6", 

776 " 7", 

777 " 8", 

778 " 9", 

779 "10", 

780 "11", 

781 "12", 

782 ] 

783 

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

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

786 

787 

788class SwedishLocale(Locale): 

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

790 

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

792 future = "om {0}" 

793 and_word = "och" 

794 

795 timeframes = { 

796 "now": "just nu", 

797 "second": "en sekund", 

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

799 "minute": "en minut", 

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

801 "hour": "en timme", 

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

803 "day": "en dag", 

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

805 "week": "en vecka", 

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

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

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

809 "year": "ett år", 

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

811 } 

812 

813 month_names = [ 

814 "", 

815 "januari", 

816 "februari", 

817 "mars", 

818 "april", 

819 "maj", 

820 "juni", 

821 "juli", 

822 "augusti", 

823 "september", 

824 "oktober", 

825 "november", 

826 "december", 

827 ] 

828 month_abbreviations = [ 

829 "", 

830 "jan", 

831 "feb", 

832 "mar", 

833 "apr", 

834 "maj", 

835 "jun", 

836 "jul", 

837 "aug", 

838 "sep", 

839 "okt", 

840 "nov", 

841 "dec", 

842 ] 

843 

844 day_names = [ 

845 "", 

846 "måndag", 

847 "tisdag", 

848 "onsdag", 

849 "torsdag", 

850 "fredag", 

851 "lördag", 

852 "söndag", 

853 ] 

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

855 

856 

857class FinnishLocale(Locale): 

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

859 

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

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

862 

863 past = "{0} sitten" 

864 future = "{0} kuluttua" 

865 

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

867 "now": "juuri nyt", 

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

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

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

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

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

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

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

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

876 "week": {"past": "viikko", "future": "viikon"}, 

877 "weeks": {"past": "{0} viikkoa", "future": "{0} viikon"}, 

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: ClassVar[Dict[TimeFrameLiteral, str]] = { 

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: str = self.timeframes_only_distance[timeframe].format( 

1986 trunc(abs(delta)) 

1987 ) 

1988 

1989 return humanized 

1990 

1991 

1992class GermanLocale(GermanBaseLocale, Locale): 

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

1994 

1995 

1996class SwissLocale(GermanBaseLocale, Locale): 

1997 names = ["de-ch"] 

1998 

1999 

2000class AustrianLocale(GermanBaseLocale, Locale): 

2001 names = ["de-at"] 

2002 

2003 month_names = [ 

2004 "", 

2005 "Jänner", 

2006 "Februar", 

2007 "März", 

2008 "April", 

2009 "Mai", 

2010 "Juni", 

2011 "Juli", 

2012 "August", 

2013 "September", 

2014 "Oktober", 

2015 "November", 

2016 "Dezember", 

2017 ] 

2018 

2019 

2020class NorwegianLocale(Locale): 

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

2022 

2023 past = "for {0} siden" 

2024 future = "om {0}" 

2025 

2026 timeframes = { 

2027 "now": "nå nettopp", 

2028 "second": "ett sekund", 

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

2030 "minute": "ett minutt", 

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

2032 "hour": "en time", 

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

2034 "day": "en dag", 

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

2036 "week": "en uke", 

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

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

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

2040 "year": "ett år", 

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

2042 } 

2043 

2044 month_names = [ 

2045 "", 

2046 "januar", 

2047 "februar", 

2048 "mars", 

2049 "april", 

2050 "mai", 

2051 "juni", 

2052 "juli", 

2053 "august", 

2054 "september", 

2055 "oktober", 

2056 "november", 

2057 "desember", 

2058 ] 

2059 month_abbreviations = [ 

2060 "", 

2061 "jan", 

2062 "feb", 

2063 "mar", 

2064 "apr", 

2065 "mai", 

2066 "jun", 

2067 "jul", 

2068 "aug", 

2069 "sep", 

2070 "okt", 

2071 "nov", 

2072 "des", 

2073 ] 

2074 

2075 day_names = [ 

2076 "", 

2077 "mandag", 

2078 "tirsdag", 

2079 "onsdag", 

2080 "torsdag", 

2081 "fredag", 

2082 "lørdag", 

2083 "søndag", 

2084 ] 

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

2086 

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

2088 return f"{n}." 

2089 

2090 

2091class NewNorwegianLocale(Locale): 

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

2093 

2094 past = "for {0} sidan" 

2095 future = "om {0}" 

2096 

2097 timeframes = { 

2098 "now": "no nettopp", 

2099 "second": "eitt sekund", 

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

2101 "minute": "eitt minutt", 

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

2103 "hour": "ein time", 

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

2105 "day": "ein dag", 

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

2107 "week": "ei veke", 

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

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

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

2111 "year": "eitt år", 

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

2113 } 

2114 

2115 month_names = [ 

2116 "", 

2117 "januar", 

2118 "februar", 

2119 "mars", 

2120 "april", 

2121 "mai", 

2122 "juni", 

2123 "juli", 

2124 "august", 

2125 "september", 

2126 "oktober", 

2127 "november", 

2128 "desember", 

2129 ] 

2130 month_abbreviations = [ 

2131 "", 

2132 "jan", 

2133 "feb", 

2134 "mar", 

2135 "apr", 

2136 "mai", 

2137 "jun", 

2138 "jul", 

2139 "aug", 

2140 "sep", 

2141 "okt", 

2142 "nov", 

2143 "des", 

2144 ] 

2145 

2146 day_names = [ 

2147 "", 

2148 "måndag", 

2149 "tysdag", 

2150 "onsdag", 

2151 "torsdag", 

2152 "fredag", 

2153 "laurdag", 

2154 "sundag", 

2155 ] 

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

2157 

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

2159 return f"{n}." 

2160 

2161 

2162class PortugueseLocale(Locale): 

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

2164 

2165 past = "há {0}" 

2166 future = "em {0}" 

2167 and_word = "e" 

2168 

2169 timeframes = { 

2170 "now": "agora", 

2171 "second": "um segundo", 

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

2173 "minute": "um minuto", 

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

2175 "hour": "uma hora", 

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

2177 "day": "um dia", 

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

2179 "week": "uma semana", 

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

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

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

2183 "year": "um ano", 

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

2185 } 

2186 

2187 month_names = [ 

2188 "", 

2189 "Janeiro", 

2190 "Fevereiro", 

2191 "Março", 

2192 "Abril", 

2193 "Maio", 

2194 "Junho", 

2195 "Julho", 

2196 "Agosto", 

2197 "Setembro", 

2198 "Outubro", 

2199 "Novembro", 

2200 "Dezembro", 

2201 ] 

2202 month_abbreviations = [ 

2203 "", 

2204 "Jan", 

2205 "Fev", 

2206 "Mar", 

2207 "Abr", 

2208 "Mai", 

2209 "Jun", 

2210 "Jul", 

2211 "Ago", 

2212 "Set", 

2213 "Out", 

2214 "Nov", 

2215 "Dez", 

2216 ] 

2217 

2218 day_names = [ 

2219 "", 

2220 "Segunda-feira", 

2221 "Terça-feira", 

2222 "Quarta-feira", 

2223 "Quinta-feira", 

2224 "Sexta-feira", 

2225 "Sábado", 

2226 "Domingo", 

2227 ] 

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

2229 

2230 

2231class BrazilianPortugueseLocale(PortugueseLocale): 

2232 names = ["pt-br"] 

2233 

2234 past = "faz {0}" 

2235 

2236 

2237class TagalogLocale(Locale): 

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

2239 

2240 past = "nakaraang {0}" 

2241 future = "{0} mula ngayon" 

2242 

2243 timeframes = { 

2244 "now": "ngayon lang", 

2245 "second": "isang segundo", 

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

2247 "minute": "isang minuto", 

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

2249 "hour": "isang oras", 

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

2251 "day": "isang araw", 

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

2253 "week": "isang linggo", 

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

2255 "month": "isang buwan", 

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

2257 "year": "isang taon", 

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

2259 } 

2260 

2261 month_names = [ 

2262 "", 

2263 "Enero", 

2264 "Pebrero", 

2265 "Marso", 

2266 "Abril", 

2267 "Mayo", 

2268 "Hunyo", 

2269 "Hulyo", 

2270 "Agosto", 

2271 "Setyembre", 

2272 "Oktubre", 

2273 "Nobyembre", 

2274 "Disyembre", 

2275 ] 

2276 month_abbreviations = [ 

2277 "", 

2278 "Ene", 

2279 "Peb", 

2280 "Mar", 

2281 "Abr", 

2282 "May", 

2283 "Hun", 

2284 "Hul", 

2285 "Ago", 

2286 "Set", 

2287 "Okt", 

2288 "Nob", 

2289 "Dis", 

2290 ] 

2291 

2292 day_names = [ 

2293 "", 

2294 "Lunes", 

2295 "Martes", 

2296 "Miyerkules", 

2297 "Huwebes", 

2298 "Biyernes", 

2299 "Sabado", 

2300 "Linggo", 

2301 ] 

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

2303 

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

2305 

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

2307 return f"ika-{n}" 

2308 

2309 

2310class VietnameseLocale(Locale): 

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

2312 

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

2314 future = "{0} nữa" 

2315 

2316 timeframes = { 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2332 } 

2333 

2334 month_names = [ 

2335 "", 

2336 "Tháng Một", 

2337 "Tháng Hai", 

2338 "Tháng Ba", 

2339 "Tháng Tư", 

2340 "Tháng Năm", 

2341 "Tháng Sáu", 

2342 "Tháng Bảy", 

2343 "Tháng Tám", 

2344 "Tháng Chín", 

2345 "Tháng Mười", 

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

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

2348 ] 

2349 month_abbreviations = [ 

2350 "", 

2351 "Tháng 1", 

2352 "Tháng 2", 

2353 "Tháng 3", 

2354 "Tháng 4", 

2355 "Tháng 5", 

2356 "Tháng 6", 

2357 "Tháng 7", 

2358 "Tháng 8", 

2359 "Tháng 9", 

2360 "Tháng 10", 

2361 "Tháng 11", 

2362 "Tháng 12", 

2363 ] 

2364 

2365 day_names = [ 

2366 "", 

2367 "Thứ Hai", 

2368 "Thứ Ba", 

2369 "Thứ Tư", 

2370 "Thứ Năm", 

2371 "Thứ Sáu", 

2372 "Thứ Bảy", 

2373 "Chủ Nhật", 

2374 ] 

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

2376 

2377 

2378class TurkishLocale(Locale): 

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

2380 

2381 past = "{0} önce" 

2382 future = "{0} sonra" 

2383 and_word = "ve" 

2384 

2385 timeframes = { 

2386 "now": "şimdi", 

2387 "second": "bir saniye", 

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

2389 "minute": "bir dakika", 

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

2391 "hour": "bir saat", 

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

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

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

2395 "week": "bir hafta", 

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

2397 "month": "bir ay", 

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

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

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

2401 } 

2402 

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

2404 

2405 month_names = [ 

2406 "", 

2407 "Ocak", 

2408 "Şubat", 

2409 "Mart", 

2410 "Nisan", 

2411 "Mayıs", 

2412 "Haziran", 

2413 "Temmuz", 

2414 "Ağustos", 

2415 "Eylül", 

2416 "Ekim", 

2417 "Kasım", 

2418 "Aralık", 

2419 ] 

2420 month_abbreviations = [ 

2421 "", 

2422 "Oca", 

2423 "Şub", 

2424 "Mar", 

2425 "Nis", 

2426 "May", 

2427 "Haz", 

2428 "Tem", 

2429 "Ağu", 

2430 "Eyl", 

2431 "Eki", 

2432 "Kas", 

2433 "Ara", 

2434 ] 

2435 

2436 day_names = [ 

2437 "", 

2438 "Pazartesi", 

2439 "Salı", 

2440 "Çarşamba", 

2441 "Perşembe", 

2442 "Cuma", 

2443 "Cumartesi", 

2444 "Pazar", 

2445 ] 

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

2447 

2448 

2449class AzerbaijaniLocale(Locale): 

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

2451 

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

2453 future = "{0} sonra" 

2454 

2455 timeframes = { 

2456 "now": "indi", 

2457 "second": "bir saniyə", 

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

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

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

2461 "hour": "bir saat", 

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

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

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

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

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

2467 "month": "bir ay", 

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

2469 "year": "bir il", 

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

2471 } 

2472 

2473 month_names = [ 

2474 "", 

2475 "Yanvar", 

2476 "Fevral", 

2477 "Mart", 

2478 "Aprel", 

2479 "May", 

2480 "İyun", 

2481 "İyul", 

2482 "Avqust", 

2483 "Sentyabr", 

2484 "Oktyabr", 

2485 "Noyabr", 

2486 "Dekabr", 

2487 ] 

2488 month_abbreviations = [ 

2489 "", 

2490 "Yan", 

2491 "Fev", 

2492 "Mar", 

2493 "Apr", 

2494 "May", 

2495 "İyn", 

2496 "İyl", 

2497 "Avq", 

2498 "Sen", 

2499 "Okt", 

2500 "Noy", 

2501 "Dek", 

2502 ] 

2503 

2504 day_names = [ 

2505 "", 

2506 "Bazar ertəsi", 

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

2508 "Çərşənbə", 

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

2510 "Cümə", 

2511 "Şənbə", 

2512 "Bazar", 

2513 ] 

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

2515 

2516 

2517class ArabicLocale(Locale): 

2518 names = [ 

2519 "ar", 

2520 "ar-ae", 

2521 "ar-bh", 

2522 "ar-dj", 

2523 "ar-eg", 

2524 "ar-eh", 

2525 "ar-er", 

2526 "ar-km", 

2527 "ar-kw", 

2528 "ar-ly", 

2529 "ar-om", 

2530 "ar-qa", 

2531 "ar-sa", 

2532 "ar-sd", 

2533 "ar-so", 

2534 "ar-ss", 

2535 "ar-td", 

2536 "ar-ye", 

2537 ] 

2538 

2539 past = "منذ {0}" 

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

2541 

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

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

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

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

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

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

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

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

2550 "day": "يوم", 

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

2552 "week": "اسبوع", 

2553 "weeks": {"2": "اسبوعين", "ten": "{0} أسابيع", "higher": "{0} اسبوع"}, 

2554 "month": "شهر", 

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

2556 "year": "سنة", 

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

2558 } 

2559 

2560 month_names = [ 

2561 "", 

2562 "يناير", 

2563 "فبراير", 

2564 "مارس", 

2565 "أبريل", 

2566 "مايو", 

2567 "يونيو", 

2568 "يوليو", 

2569 "أغسطس", 

2570 "سبتمبر", 

2571 "أكتوبر", 

2572 "نوفمبر", 

2573 "ديسمبر", 

2574 ] 

2575 month_abbreviations = [ 

2576 "", 

2577 "يناير", 

2578 "فبراير", 

2579 "مارس", 

2580 "أبريل", 

2581 "مايو", 

2582 "يونيو", 

2583 "يوليو", 

2584 "أغسطس", 

2585 "سبتمبر", 

2586 "أكتوبر", 

2587 "نوفمبر", 

2588 "ديسمبر", 

2589 ] 

2590 

2591 day_names = [ 

2592 "", 

2593 "الإثنين", 

2594 "الثلاثاء", 

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

2596 "الخميس", 

2597 "الجمعة", 

2598 "السبت", 

2599 "الأحد", 

2600 ] 

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

2602 

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

2604 form = self.timeframes[timeframe] 

2605 delta = abs(delta) 

2606 if isinstance(form, Mapping): 

2607 if delta == 2: 

2608 form = form["2"] 

2609 elif 2 < delta <= 10: 

2610 form = form["ten"] 

2611 else: 

2612 form = form["higher"] 

2613 

2614 return form.format(delta) 

2615 

2616 

2617class LevantArabicLocale(ArabicLocale): 

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

2619 month_names = [ 

2620 "", 

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

2622 "شباط", 

2623 "آذار", 

2624 "نيسان", 

2625 "أيار", 

2626 "حزيران", 

2627 "تموز", 

2628 "آب", 

2629 "أيلول", 

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

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

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

2633 ] 

2634 month_abbreviations = [ 

2635 "", 

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

2637 "شباط", 

2638 "آذار", 

2639 "نيسان", 

2640 "أيار", 

2641 "حزيران", 

2642 "تموز", 

2643 "آب", 

2644 "أيلول", 

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

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

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

2648 ] 

2649 

2650 

2651class AlgeriaTunisiaArabicLocale(ArabicLocale): 

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

2653 month_names = [ 

2654 "", 

2655 "جانفي", 

2656 "فيفري", 

2657 "مارس", 

2658 "أفريل", 

2659 "ماي", 

2660 "جوان", 

2661 "جويلية", 

2662 "أوت", 

2663 "سبتمبر", 

2664 "أكتوبر", 

2665 "نوفمبر", 

2666 "ديسمبر", 

2667 ] 

2668 month_abbreviations = [ 

2669 "", 

2670 "جانفي", 

2671 "فيفري", 

2672 "مارس", 

2673 "أفريل", 

2674 "ماي", 

2675 "جوان", 

2676 "جويلية", 

2677 "أوت", 

2678 "سبتمبر", 

2679 "أكتوبر", 

2680 "نوفمبر", 

2681 "ديسمبر", 

2682 ] 

2683 

2684 

2685class MauritaniaArabicLocale(ArabicLocale): 

2686 names = ["ar-mr"] 

2687 month_names = [ 

2688 "", 

2689 "يناير", 

2690 "فبراير", 

2691 "مارس", 

2692 "إبريل", 

2693 "مايو", 

2694 "يونيو", 

2695 "يوليو", 

2696 "أغشت", 

2697 "شتمبر", 

2698 "أكتوبر", 

2699 "نوفمبر", 

2700 "دجمبر", 

2701 ] 

2702 month_abbreviations = [ 

2703 "", 

2704 "يناير", 

2705 "فبراير", 

2706 "مارس", 

2707 "إبريل", 

2708 "مايو", 

2709 "يونيو", 

2710 "يوليو", 

2711 "أغشت", 

2712 "شتمبر", 

2713 "أكتوبر", 

2714 "نوفمبر", 

2715 "دجمبر", 

2716 ] 

2717 

2718 

2719class MoroccoArabicLocale(ArabicLocale): 

2720 names = ["ar-ma"] 

2721 month_names = [ 

2722 "", 

2723 "يناير", 

2724 "فبراير", 

2725 "مارس", 

2726 "أبريل", 

2727 "ماي", 

2728 "يونيو", 

2729 "يوليوز", 

2730 "غشت", 

2731 "شتنبر", 

2732 "أكتوبر", 

2733 "نونبر", 

2734 "دجنبر", 

2735 ] 

2736 month_abbreviations = [ 

2737 "", 

2738 "يناير", 

2739 "فبراير", 

2740 "مارس", 

2741 "أبريل", 

2742 "ماي", 

2743 "يونيو", 

2744 "يوليوز", 

2745 "غشت", 

2746 "شتنبر", 

2747 "أكتوبر", 

2748 "نونبر", 

2749 "دجنبر", 

2750 ] 

2751 

2752 

2753class IcelandicLocale(Locale): 

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

2755 form = self.timeframes[timeframe] 

2756 

2757 if isinstance(form, Mapping): 

2758 if delta < 0: 

2759 form = form["past"] 

2760 elif delta > 0: 

2761 form = form["future"] 

2762 else: 

2763 raise ValueError( 

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

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

2766 ) 

2767 # FIXME: handle when delta is 0 

2768 

2769 return form.format(abs(delta)) 

2770 

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

2772 

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

2774 future = "eftir {0}" 

2775 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2790 } 

2791 

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

2793 

2794 month_names = [ 

2795 "", 

2796 "janúar", 

2797 "febrúar", 

2798 "mars", 

2799 "apríl", 

2800 "maí", 

2801 "júní", 

2802 "júlí", 

2803 "ágúst", 

2804 "september", 

2805 "október", 

2806 "nóvember", 

2807 "desember", 

2808 ] 

2809 month_abbreviations = [ 

2810 "", 

2811 "jan", 

2812 "feb", 

2813 "mar", 

2814 "apr", 

2815 "maí", 

2816 "jún", 

2817 "júl", 

2818 "ágú", 

2819 "sep", 

2820 "okt", 

2821 "nóv", 

2822 "des", 

2823 ] 

2824 

2825 day_names = [ 

2826 "", 

2827 "mánudagur", 

2828 "þriðjudagur", 

2829 "miðvikudagur", 

2830 "fimmtudagur", 

2831 "föstudagur", 

2832 "laugardagur", 

2833 "sunnudagur", 

2834 ] 

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

2836 

2837 

2838class DanishLocale(Locale): 

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

2840 

2841 past = "for {0} siden" 

2842 future = "om {0}" 

2843 and_word = "og" 

2844 

2845 timeframes = { 

2846 "now": "lige nu", 

2847 "second": "et sekund", 

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

2849 "minute": "et minut", 

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

2851 "hour": "en time", 

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

2853 "day": "en dag", 

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

2855 "week": "en uge", 

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

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

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

2859 "year": "et år", 

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

2861 } 

2862 

2863 month_names = [ 

2864 "", 

2865 "januar", 

2866 "februar", 

2867 "marts", 

2868 "april", 

2869 "maj", 

2870 "juni", 

2871 "juli", 

2872 "august", 

2873 "september", 

2874 "oktober", 

2875 "november", 

2876 "december", 

2877 ] 

2878 month_abbreviations = [ 

2879 "", 

2880 "jan", 

2881 "feb", 

2882 "mar", 

2883 "apr", 

2884 "maj", 

2885 "jun", 

2886 "jul", 

2887 "aug", 

2888 "sep", 

2889 "okt", 

2890 "nov", 

2891 "dec", 

2892 ] 

2893 

2894 day_names = [ 

2895 "", 

2896 "mandag", 

2897 "tirsdag", 

2898 "onsdag", 

2899 "torsdag", 

2900 "fredag", 

2901 "lørdag", 

2902 "søndag", 

2903 ] 

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

2905 

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

2907 return f"{n}." 

2908 

2909 

2910class MalayalamLocale(Locale): 

2911 names = ["ml"] 

2912 

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

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

2915 

2916 timeframes = { 

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

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

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

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

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

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

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

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

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

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

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

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

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

2930 } 

2931 

2932 meridians = { 

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

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

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

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

2937 } 

2938 

2939 month_names = [ 

2940 "", 

2941 "ജനുവരി", 

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

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

2944 "ഏപ്രിൽ ", 

2945 "മെയ്‌ ", 

2946 "ജൂണ്‍", 

2947 "ജൂലൈ", 

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

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

2950 "ഒക്ടോബർ", 

2951 "നവംബർ", 

2952 "ഡിസംബർ", 

2953 ] 

2954 month_abbreviations = [ 

2955 "", 

2956 "ജനു", 

2957 "ഫെബ് ", 

2958 "മാർ", 

2959 "ഏപ്രിൽ", 

2960 "മേയ്", 

2961 "ജൂണ്‍", 

2962 "ജൂലൈ", 

2963 "ഓഗസ്റ", 

2964 "സെപ്റ്റ", 

2965 "ഒക്ടോ", 

2966 "നവം", 

2967 "ഡിസം", 

2968 ] 

2969 

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

2971 day_abbreviations = [ 

2972 "", 

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

2974 "ചൊവ്വ", 

2975 "ബുധന്‍", 

2976 "വ്യാഴം", 

2977 "വെള്ളി", 

2978 "ശനി", 

2979 "ഞായര്‍", 

2980 ] 

2981 

2982 

2983class HindiLocale(Locale): 

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

2985 

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

2987 future = "{0} बाद" 

2988 

2989 timeframes = { 

2990 "now": "अभी", 

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

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

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

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

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

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

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

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

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

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

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

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

3003 } 

3004 

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

3006 

3007 month_names = [ 

3008 "", 

3009 "जनवरी", 

3010 "फरवरी", 

3011 "मार्च", 

3012 "अप्रैल ", 

3013 "मई", 

3014 "जून", 

3015 "जुलाई", 

3016 "अगस्त", 

3017 "सितंबर", 

3018 "अक्टूबर", 

3019 "नवंबर", 

3020 "दिसंबर", 

3021 ] 

3022 month_abbreviations = [ 

3023 "", 

3024 "जन", 

3025 "फ़र", 

3026 "मार्च", 

3027 "अप्रै", 

3028 "मई", 

3029 "जून", 

3030 "जुलाई", 

3031 "आग", 

3032 "सित", 

3033 "अकत", 

3034 "नवे", 

3035 "दिस", 

3036 ] 

3037 

3038 day_names = [ 

3039 "", 

3040 "सोमवार", 

3041 "मंगलवार", 

3042 "बुधवार", 

3043 "गुरुवार", 

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

3045 "शनिवार", 

3046 "रविवार", 

3047 ] 

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

3049 

3050 

3051class CzechLocale(Locale): 

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

3053 

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

3055 "now": "Teď", 

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

3057 "seconds": { 

3058 "zero": "vteřina", 

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

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

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

3062 }, 

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

3064 "minutes": { 

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

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

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

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

3069 }, 

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

3071 "hours": { 

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

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

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

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

3076 }, 

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

3078 "days": { 

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

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

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

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

3083 }, 

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

3085 "weeks": { 

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

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

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

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

3090 }, 

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

3092 "months": { 

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

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

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

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

3097 }, 

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

3099 "years": { 

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

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

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

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

3104 }, 

3105 } 

3106 

3107 past = "Před {0}" 

3108 future = "Za {0}" 

3109 

3110 month_names = [ 

3111 "", 

3112 "leden", 

3113 "únor", 

3114 "březen", 

3115 "duben", 

3116 "květen", 

3117 "červen", 

3118 "červenec", 

3119 "srpen", 

3120 "září", 

3121 "říjen", 

3122 "listopad", 

3123 "prosinec", 

3124 ] 

3125 month_abbreviations = [ 

3126 "", 

3127 "led", 

3128 "úno", 

3129 "bře", 

3130 "dub", 

3131 "kvě", 

3132 "čvn", 

3133 "čvc", 

3134 "srp", 

3135 "zář", 

3136 "říj", 

3137 "lis", 

3138 "pro", 

3139 ] 

3140 

3141 day_names = [ 

3142 "", 

3143 "pondělí", 

3144 "úterý", 

3145 "středa", 

3146 "čtvrtek", 

3147 "pátek", 

3148 "sobota", 

3149 "neděle", 

3150 ] 

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

3152 

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

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

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

3156 abs_delta = abs(delta) 

3157 form = self.timeframes[timeframe] 

3158 

3159 if isinstance(form, str): 

3160 return form.format(abs_delta) 

3161 

3162 if delta == 0: 

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

3164 elif delta < 0: 

3165 key = "past" 

3166 else: 

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

3168 if "future-singular" not in form: 

3169 key = "future" 

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

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

3172 ): 

3173 key = "future-singular" 

3174 else: 

3175 key = "future-paucal" 

3176 

3177 form: str = form[key] 

3178 return form.format(abs_delta) 

3179 

3180 

3181class SlovakLocale(Locale): 

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

3183 

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

3185 "now": "Teraz", 

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

3187 "seconds": { 

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

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

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

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

3192 }, 

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

3194 "minutes": { 

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

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

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

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

3199 }, 

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

3201 "hours": { 

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

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

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

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

3206 }, 

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

3208 "days": { 

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

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

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

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

3213 }, 

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

3215 "weeks": { 

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

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

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

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

3220 }, 

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

3222 "months": { 

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

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

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

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

3227 }, 

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

3229 "years": { 

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

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

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

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

3234 }, 

3235 } 

3236 

3237 past = "Pred {0}" 

3238 future = "O {0}" 

3239 and_word = "a" 

3240 

3241 month_names = [ 

3242 "", 

3243 "január", 

3244 "február", 

3245 "marec", 

3246 "apríl", 

3247 "máj", 

3248 "jún", 

3249 "júl", 

3250 "august", 

3251 "september", 

3252 "október", 

3253 "november", 

3254 "december", 

3255 ] 

3256 month_abbreviations = [ 

3257 "", 

3258 "jan", 

3259 "feb", 

3260 "mar", 

3261 "apr", 

3262 "máj", 

3263 "jún", 

3264 "júl", 

3265 "aug", 

3266 "sep", 

3267 "okt", 

3268 "nov", 

3269 "dec", 

3270 ] 

3271 

3272 day_names = [ 

3273 "", 

3274 "pondelok", 

3275 "utorok", 

3276 "streda", 

3277 "štvrtok", 

3278 "piatok", 

3279 "sobota", 

3280 "nedeľa", 

3281 ] 

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

3283 

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

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

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

3287 abs_delta = abs(delta) 

3288 form = self.timeframes[timeframe] 

3289 

3290 if isinstance(form, str): 

3291 return form.format(abs_delta) 

3292 

3293 if delta == 0: 

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

3295 elif delta < 0: 

3296 key = "past" 

3297 else: 

3298 if "future-singular" not in form: 

3299 key = "future" 

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

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

3302 ): 

3303 key = "future-singular" 

3304 else: 

3305 key = "future-paucal" 

3306 

3307 form: str = form[key] 

3308 return form.format(abs_delta) 

3309 

3310 

3311class FarsiLocale(Locale): 

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

3313 

3314 past = "{0} قبل" 

3315 future = "در {0}" 

3316 

3317 timeframes = { 

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

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

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

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

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

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

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

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

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

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

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

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

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

3331 } 

3332 

3333 meridians = { 

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

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

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

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

3338 } 

3339 

3340 month_names = [ 

3341 "", 

3342 "January", 

3343 "February", 

3344 "March", 

3345 "April", 

3346 "May", 

3347 "June", 

3348 "July", 

3349 "August", 

3350 "September", 

3351 "October", 

3352 "November", 

3353 "December", 

3354 ] 

3355 month_abbreviations = [ 

3356 "", 

3357 "Jan", 

3358 "Feb", 

3359 "Mar", 

3360 "Apr", 

3361 "May", 

3362 "Jun", 

3363 "Jul", 

3364 "Aug", 

3365 "Sep", 

3366 "Oct", 

3367 "Nov", 

3368 "Dec", 

3369 ] 

3370 

3371 day_names = [ 

3372 "", 

3373 "دو شنبه", 

3374 "سه شنبه", 

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

3376 "پنجشنبه", 

3377 "جمعه", 

3378 "شنبه", 

3379 "یکشنبه", 

3380 ] 

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

3382 

3383 

3384class HebrewLocale(Locale): 

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

3386 

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

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

3389 and_word = "ו" 

3390 

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

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

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

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

3395 "minute": "דקה", 

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

3397 "hour": "שעה", 

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

3399 "day": "יום", 

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

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

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

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

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

3405 "year": "שנה", 

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

3407 } 

3408 

3409 meridians = { 

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

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

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

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

3414 } 

3415 

3416 month_names = [ 

3417 "", 

3418 "ינואר", 

3419 "פברואר", 

3420 "מרץ", 

3421 "אפריל", 

3422 "מאי", 

3423 "יוני", 

3424 "יולי", 

3425 "אוגוסט", 

3426 "ספטמבר", 

3427 "אוקטובר", 

3428 "נובמבר", 

3429 "דצמבר", 

3430 ] 

3431 month_abbreviations = [ 

3432 "", 

3433 "ינו׳", 

3434 "פבר׳", 

3435 "מרץ", 

3436 "אפר׳", 

3437 "מאי", 

3438 "יוני", 

3439 "יולי", 

3440 "אוג׳", 

3441 "ספט׳", 

3442 "אוק׳", 

3443 "נוב׳", 

3444 "דצמ׳", 

3445 ] 

3446 

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

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

3449 

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

3451 form = self.timeframes[timeframe] 

3452 delta = abs(delta) 

3453 if isinstance(form, Mapping): 

3454 if delta == 2: 

3455 form = form["2"] 

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

3457 form = form["ten"] 

3458 else: 

3459 form = form["higher"] 

3460 

3461 return form.format(delta) 

3462 

3463 def describe_multi( 

3464 self, 

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

3466 only_distance: bool = False, 

3467 ) -> str: 

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

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

3470 

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

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

3473 """ 

3474 

3475 humanized = "" 

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

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

3478 if index == 0: 

3479 humanized = last_humanized 

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

3481 humanized += " " + self.and_word 

3482 if last_humanized[0].isdecimal(): 

3483 humanized += "־" 

3484 humanized += last_humanized 

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

3486 humanized += ", " + last_humanized 

3487 

3488 if not only_distance: 

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

3490 

3491 return humanized 

3492 

3493 

3494class MarathiLocale(Locale): 

3495 names = ["mr"] 

3496 

3497 past = "{0} आधी" 

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

3499 

3500 timeframes = { 

3501 "now": "सद्य", 

3502 "second": "एक सेकंद", 

3503 "seconds": "{0} सेकंद", 

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

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

3506 "hour": "एक तास", 

3507 "hours": "{0} तास", 

3508 "day": "एक दिवस", 

3509 "days": "{0} दिवस", 

3510 "month": "एक महिना ", 

3511 "months": "{0} महिने ", 

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

3513 "years": "{0} वर्ष ", 

3514 } 

3515 

3516 meridians = {"am": "सकाळ", "pm": "संध्याकाळ", "AM": "सकाळ", "PM": "संध्याकाळ"} 

3517 

3518 month_names = [ 

3519 "", 

3520 "जानेवारी", 

3521 "फेब्रुवारी", 

3522 "मार्च", 

3523 "एप्रिल", 

3524 "मे", 

3525 "जून", 

3526 "जुलै", 

3527 "अॉगस्ट", 

3528 "सप्टेंबर", 

3529 "अॉक्टोबर", 

3530 "नोव्हेंबर", 

3531 "डिसेंबर", 

3532 ] 

3533 month_abbreviations = [ 

3534 "", 

3535 "जान", 

3536 "फेब्रु", 

3537 "मार्च", 

3538 "एप्रि", 

3539 "मे", 

3540 "जून", 

3541 "जुलै", 

3542 "अॉग", 

3543 "सप्टें", 

3544 "अॉक्टो", 

3545 "नोव्हें", 

3546 "डिसें", 

3547 ] 

3548 

3549 day_names = [ 

3550 "", 

3551 "सोमवार", 

3552 "मंगळवार", 

3553 "बुधवार", 

3554 "गुरुवार", 

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

3556 "शनिवार", 

3557 "रविवार", 

3558 ] 

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

3560 

3561 

3562class CatalanLocale(Locale): 

3563 names = ["ca", "ca-es", "ca-ad", "ca-fr", "ca-it"] 

3564 past = "Fa {0}" 

3565 future = "En {0}" 

3566 and_word = "i" 

3567 

3568 timeframes = { 

3569 "now": "Ara mateix", 

3570 "second": "un segon", 

3571 "seconds": "{0} segons", 

3572 "minute": "un minut", 

3573 "minutes": "{0} minuts", 

3574 "hour": "una hora", 

3575 "hours": "{0} hores", 

3576 "day": "un dia", 

3577 "days": "{0} dies", 

3578 "month": "un mes", 

3579 "months": "{0} mesos", 

3580 "year": "un any", 

3581 "years": "{0} anys", 

3582 } 

3583 

3584 month_names = [ 

3585 "", 

3586 "gener", 

3587 "febrer", 

3588 "març", 

3589 "abril", 

3590 "maig", 

3591 "juny", 

3592 "juliol", 

3593 "agost", 

3594 "setembre", 

3595 "octubre", 

3596 "novembre", 

3597 "desembre", 

3598 ] 

3599 month_abbreviations = [ 

3600 "", 

3601 "gen.", 

3602 "febr.", 

3603 "març", 

3604 "abr.", 

3605 "maig", 

3606 "juny", 

3607 "jul.", 

3608 "ag.", 

3609 "set.", 

3610 "oct.", 

3611 "nov.", 

3612 "des.", 

3613 ] 

3614 day_names = [ 

3615 "", 

3616 "dilluns", 

3617 "dimarts", 

3618 "dimecres", 

3619 "dijous", 

3620 "divendres", 

3621 "dissabte", 

3622 "diumenge", 

3623 ] 

3624 day_abbreviations = [ 

3625 "", 

3626 "dl.", 

3627 "dt.", 

3628 "dc.", 

3629 "dj.", 

3630 "dv.", 

3631 "ds.", 

3632 "dg.", 

3633 ] 

3634 

3635 

3636class BasqueLocale(Locale): 

3637 names = ["eu", "eu-eu"] 

3638 past = "duela {0}" 

3639 future = "{0}" # I don't know what's the right phrase in Basque for the future. 

3640 

3641 timeframes = { 

3642 "now": "Orain", 

3643 "second": "segundo bat", 

3644 "seconds": "{0} segundu", 

3645 "minute": "minutu bat", 

3646 "minutes": "{0} minutu", 

3647 "hour": "ordu bat", 

3648 "hours": "{0} ordu", 

3649 "day": "egun bat", 

3650 "days": "{0} egun", 

3651 "month": "hilabete bat", 

3652 "months": "{0} hilabet", 

3653 "year": "urte bat", 

3654 "years": "{0} urte", 

3655 } 

3656 

3657 month_names = [ 

3658 "", 

3659 "urtarrilak", 

3660 "otsailak", 

3661 "martxoak", 

3662 "apirilak", 

3663 "maiatzak", 

3664 "ekainak", 

3665 "uztailak", 

3666 "abuztuak", 

3667 "irailak", 

3668 "urriak", 

3669 "azaroak", 

3670 "abenduak", 

3671 ] 

3672 month_abbreviations = [ 

3673 "", 

3674 "urt", 

3675 "ots", 

3676 "mar", 

3677 "api", 

3678 "mai", 

3679 "eka", 

3680 "uzt", 

3681 "abu", 

3682 "ira", 

3683 "urr", 

3684 "aza", 

3685 "abe", 

3686 ] 

3687 day_names = [ 

3688 "", 

3689 "astelehena", 

3690 "asteartea", 

3691 "asteazkena", 

3692 "osteguna", 

3693 "ostirala", 

3694 "larunbata", 

3695 "igandea", 

3696 ] 

3697 day_abbreviations = ["", "al", "ar", "az", "og", "ol", "lr", "ig"] 

3698 

3699 

3700class HungarianLocale(Locale): 

3701 names = ["hu", "hu-hu"] 

3702 

3703 past = "{0} ezelőtt" 

3704 future = "{0} múlva" 

3705 

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

3707 "now": "éppen most", 

3708 "second": {"past": "egy második", "future": "egy második"}, 

3709 "seconds": {"past": "{0} másodpercekkel", "future": "{0} pár másodperc"}, 

3710 "minute": {"past": "egy perccel", "future": "egy perc"}, 

3711 "minutes": {"past": "{0} perccel", "future": "{0} perc"}, 

3712 "hour": {"past": "egy órával", "future": "egy óra"}, 

3713 "hours": {"past": "{0} órával", "future": "{0} óra"}, 

3714 "day": {"past": "egy nappal", "future": "egy nap"}, 

3715 "days": {"past": "{0} nappal", "future": "{0} nap"}, 

3716 "week": {"past": "egy héttel", "future": "egy hét"}, 

3717 "weeks": {"past": "{0} héttel", "future": "{0} hét"}, 

3718 "month": {"past": "egy hónappal", "future": "egy hónap"}, 

3719 "months": {"past": "{0} hónappal", "future": "{0} hónap"}, 

3720 "year": {"past": "egy évvel", "future": "egy év"}, 

3721 "years": {"past": "{0} évvel", "future": "{0} év"}, 

3722 } 

3723 

3724 month_names = [ 

3725 "", 

3726 "január", 

3727 "február", 

3728 "március", 

3729 "április", 

3730 "május", 

3731 "június", 

3732 "július", 

3733 "augusztus", 

3734 "szeptember", 

3735 "október", 

3736 "november", 

3737 "december", 

3738 ] 

3739 month_abbreviations = [ 

3740 "", 

3741 "jan", 

3742 "febr", 

3743 "márc", 

3744 "ápr", 

3745 "máj", 

3746 "jún", 

3747 "júl", 

3748 "aug", 

3749 "szept", 

3750 "okt", 

3751 "nov", 

3752 "dec", 

3753 ] 

3754 

3755 day_names = [ 

3756 "", 

3757 "hétfő", 

3758 "kedd", 

3759 "szerda", 

3760 "csütörtök", 

3761 "péntek", 

3762 "szombat", 

3763 "vasárnap", 

3764 ] 

3765 day_abbreviations = ["", "hét", "kedd", "szer", "csüt", "pént", "szom", "vas"] 

3766 

3767 meridians = {"am": "de", "pm": "du", "AM": "DE", "PM": "DU"} 

3768 

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

3770 form = self.timeframes[timeframe] 

3771 

3772 if isinstance(form, Mapping): 

3773 if delta > 0: 

3774 form = form["future"] 

3775 else: 

3776 form = form["past"] 

3777 

3778 return form.format(abs(delta)) 

3779 

3780 

3781class EsperantoLocale(Locale): 

3782 names = ["eo", "eo-xx"] 

3783 past = "antaŭ {0}" 

3784 future = "post {0}" 

3785 

3786 timeframes = { 

3787 "now": "nun", 

3788 "second": "sekundo", 

3789 "seconds": "{0} kelkaj sekundoj", 

3790 "minute": "unu minuto", 

3791 "minutes": "{0} minutoj", 

3792 "hour": "un horo", 

3793 "hours": "{0} horoj", 

3794 "day": "unu tago", 

3795 "days": "{0} tagoj", 

3796 "month": "unu monato", 

3797 "months": "{0} monatoj", 

3798 "year": "unu jaro", 

3799 "years": "{0} jaroj", 

3800 } 

3801 

3802 month_names = [ 

3803 "", 

3804 "januaro", 

3805 "februaro", 

3806 "marto", 

3807 "aprilo", 

3808 "majo", 

3809 "junio", 

3810 "julio", 

3811 "aŭgusto", 

3812 "septembro", 

3813 "oktobro", 

3814 "novembro", 

3815 "decembro", 

3816 ] 

3817 month_abbreviations = [ 

3818 "", 

3819 "jan", 

3820 "feb", 

3821 "mar", 

3822 "apr", 

3823 "maj", 

3824 "jun", 

3825 "jul", 

3826 "aŭg", 

3827 "sep", 

3828 "okt", 

3829 "nov", 

3830 "dec", 

3831 ] 

3832 

3833 day_names = [ 

3834 "", 

3835 "lundo", 

3836 "mardo", 

3837 "merkredo", 

3838 "ĵaŭdo", 

3839 "vendredo", 

3840 "sabato", 

3841 "dimanĉo", 

3842 ] 

3843 day_abbreviations = ["", "lun", "mar", "mer", "ĵaŭ", "ven", "sab", "dim"] 

3844 

3845 meridians = {"am": "atm", "pm": "ptm", "AM": "ATM", "PM": "PTM"} 

3846 

3847 ordinal_day_re = r"((?P<value>[1-3]?[0-9](?=a))a)" 

3848 

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

3850 return f"{n}a" 

3851 

3852 

3853class ThaiLocale(Locale): 

3854 names = ["th", "th-th"] 

3855 

3856 past = "{0} ที่ผ่านมา" 

3857 future = "ในอีก {0}" 

3858 

3859 timeframes = { 

3860 "now": "ขณะนี้", 

3861 "second": "วินาที", 

3862 "seconds": "{0} ไม่กี่วินาที", 

3863 "minute": "1 นาที", 

3864 "minutes": "{0} นาที", 

3865 "hour": "1 ชั่วโมง", 

3866 "hours": "{0} ชั่วโมง", 

3867 "day": "1 วัน", 

3868 "days": "{0} วัน", 

3869 "month": "1 เดือน", 

3870 "months": "{0} เดือน", 

3871 "year": "1 ปี", 

3872 "years": "{0} ปี", 

3873 } 

3874 

3875 month_names = [ 

3876 "", 

3877 "มกราคม", 

3878 "กุมภาพันธ์", 

3879 "มีนาคม", 

3880 "เมษายน", 

3881 "พฤษภาคม", 

3882 "มิถุนายน", 

3883 "กรกฎาคม", 

3884 "สิงหาคม", 

3885 "กันยายน", 

3886 "ตุลาคม", 

3887 "พฤศจิกายน", 

3888 "ธันวาคม", 

3889 ] 

3890 month_abbreviations = [ 

3891 "", 

3892 "ม.ค.", 

3893 "ก.พ.", 

3894 "มี.ค.", 

3895 "เม.ย.", 

3896 "พ.ค.", 

3897 "มิ.ย.", 

3898 "ก.ค.", 

3899 "ส.ค.", 

3900 "ก.ย.", 

3901 "ต.ค.", 

3902 "พ.ย.", 

3903 "ธ.ค.", 

3904 ] 

3905 

3906 day_names = ["", "จันทร์", "อังคาร", "พุธ", "พฤหัสบดี", "ศุกร์", "เสาร์", "อาทิตย์"] 

3907 day_abbreviations = ["", "จ", "อ", "พ", "พฤ", "ศ", "ส", "อา"] 

3908 

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

3910 

3911 BE_OFFSET = 543 

3912 

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

3914 """Thai always use Buddhist Era (BE) which is CE + 543""" 

3915 year += self.BE_OFFSET 

3916 return f"{year:04d}" 

3917 

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

3919 """Thai always use Buddhist Era (BE) which is CE + 543""" 

3920 year += self.BE_OFFSET 

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

3922 

3923 def _format_relative( 

3924 self, 

3925 humanized: str, 

3926 timeframe: TimeFrameLiteral, 

3927 delta: Union[float, int], 

3928 ) -> str: 

3929 """Thai normally doesn't have any space between words""" 

3930 if timeframe == "now": 

3931 return humanized 

3932 

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

3934 relative_string = direction.format(humanized) 

3935 

3936 if timeframe == "seconds": 

3937 relative_string = relative_string.replace(" ", "") 

3938 

3939 return relative_string 

3940 

3941 

3942class LaotianLocale(Locale): 

3943 names = ["lo", "lo-la"] 

3944 

3945 past = "{0} ກ່ອນຫນ້ານີ້" 

3946 future = "ໃນ {0}" 

3947 

3948 timeframes = { 

3949 "now": "ດຽວນີ້", 

3950 "second": "ວິນາທີ", 

3951 "seconds": "{0} ວິນາທີ", 

3952 "minute": "ນາທີ", 

3953 "minutes": "{0} ນາທີ", 

3954 "hour": "ຊົ່ວໂມງ", 

3955 "hours": "{0} ຊົ່ວໂມງ", 

3956 "day": "ມື້", 

3957 "days": "{0} ມື້", 

3958 "week": "ອາທິດ", 

3959 "weeks": "{0} ອາທິດ", 

3960 "month": "ເດືອນ", 

3961 "months": "{0} ເດືອນ", 

3962 "year": "ປີ", 

3963 "years": "{0} ປີ", 

3964 } 

3965 

3966 month_names = [ 

3967 "", 

3968 "ມັງກອນ", # mangkon 

3969 "ກຸມພາ", # kumpha 

3970 "ມີນາ", # mina 

3971 "ເມສາ", # mesa 

3972 "ພຶດສະພາ", # phudsapha 

3973 "ມິຖຸນາ", # mithuna 

3974 "ກໍລະກົດ", # kolakod 

3975 "ສິງຫາ", # singha 

3976 "ກັນຍາ", # knaia 

3977 "ຕຸລາ", # tula 

3978 "ພະຈິກ", # phachik 

3979 "ທັນວາ", # thanuaa 

3980 ] 

3981 month_abbreviations = [ 

3982 "", 

3983 "ມັງກອນ", 

3984 "ກຸມພາ", 

3985 "ມີນາ", 

3986 "ເມສາ", 

3987 "ພຶດສະພາ", 

3988 "ມິຖຸນາ", 

3989 "ກໍລະກົດ", 

3990 "ສິງຫາ", 

3991 "ກັນຍາ", 

3992 "ຕຸລາ", 

3993 "ພະຈິກ", 

3994 "ທັນວາ", 

3995 ] 

3996 

3997 day_names = [ 

3998 "", 

3999 "ວັນຈັນ", # vanchan 

4000 "ວັນອັງຄານ", # vnoangkhan 

4001 "ວັນພຸດ", # vanphud 

4002 "ວັນພະຫັດ", # vanphahad 

4003 "ວັນ​ສຸກ", # vansuk 

4004 "ວັນເສົາ", # vansao 

4005 "ວັນອາທິດ", # vnoathid 

4006 ] 

4007 day_abbreviations = [ 

4008 "", 

4009 "ວັນຈັນ", 

4010 "ວັນອັງຄານ", 

4011 "ວັນພຸດ", 

4012 "ວັນພະຫັດ", 

4013 "ວັນ​ສຸກ", 

4014 "ວັນເສົາ", 

4015 "ວັນອາທິດ", 

4016 ] 

4017 

4018 BE_OFFSET = 543 

4019 

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

4021 """Lao always use Buddhist Era (BE) which is CE + 543""" 

4022 year += self.BE_OFFSET 

4023 return f"{year:04d}" 

4024 

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

4026 """Lao always use Buddhist Era (BE) which is CE + 543""" 

4027 year += self.BE_OFFSET 

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

4029 

4030 def _format_relative( 

4031 self, 

4032 humanized: str, 

4033 timeframe: TimeFrameLiteral, 

4034 delta: Union[float, int], 

4035 ) -> str: 

4036 """Lao normally doesn't have any space between words""" 

4037 if timeframe == "now": 

4038 return humanized 

4039 

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

4041 relative_string = direction.format(humanized) 

4042 

4043 if timeframe == "seconds": 

4044 relative_string = relative_string.replace(" ", "") 

4045 

4046 return relative_string 

4047 

4048 

4049class BengaliLocale(Locale): 

4050 names = ["bn", "bn-bd", "bn-in"] 

4051 

4052 past = "{0} আগে" 

4053 future = "{0} পরে" 

4054 

4055 timeframes = { 

4056 "now": "এখন", 

4057 "second": "একটি দ্বিতীয়", 

4058 "seconds": "{0} সেকেন্ড", 

4059 "minute": "এক মিনিট", 

4060 "minutes": "{0} মিনিট", 

4061 "hour": "এক ঘণ্টা", 

4062 "hours": "{0} ঘণ্টা", 

4063 "day": "এক দিন", 

4064 "days": "{0} দিন", 

4065 "month": "এক মাস", 

4066 "months": "{0} মাস ", 

4067 "year": "এক বছর", 

4068 "years": "{0} বছর", 

4069 } 

4070 

4071 meridians = {"am": "সকাল", "pm": "বিকাল", "AM": "সকাল", "PM": "বিকাল"} 

4072 

4073 month_names = [ 

4074 "", 

4075 "জানুয়ারি", 

4076 "ফেব্রুয়ারি", 

4077 "মার্চ", 

4078 "এপ্রিল", 

4079 "মে", 

4080 "জুন", 

4081 "জুলাই", 

4082 "আগস্ট", 

4083 "সেপ্টেম্বর", 

4084 "অক্টোবর", 

4085 "নভেম্বর", 

4086 "ডিসেম্বর", 

4087 ] 

4088 month_abbreviations = [ 

4089 "", 

4090 "জানু", 

4091 "ফেব", 

4092 "মার্চ", 

4093 "এপ্রি", 

4094 "মে", 

4095 "জুন", 

4096 "জুল", 

4097 "অগা", 

4098 "সেপ্ট", 

4099 "অক্টো", 

4100 "নভে", 

4101 "ডিসে", 

4102 ] 

4103 

4104 day_names = [ 

4105 "", 

4106 "সোমবার", 

4107 "মঙ্গলবার", 

4108 "বুধবার", 

4109 "বৃহস্পতিবার", 

4110 "শুক্রবার", 

4111 "শনিবার", 

4112 "রবিবার", 

4113 ] 

4114 day_abbreviations = ["", "সোম", "মঙ্গল", "বুধ", "বৃহঃ", "শুক্র", "শনি", "রবি"] 

4115 

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

4117 if n > 10 or n == 0: 

4118 return f"{n}তম" 

4119 if n in [1, 5, 7, 8, 9, 10]: 

4120 return f"{n}ম" 

4121 if n in [2, 3]: 

4122 return f"{n}য়" 

4123 if n == 4: 

4124 return f"{n}র্থ" 

4125 if n == 6: 

4126 return f"{n}ষ্ঠ" 

4127 return "" 

4128 

4129 

4130class RomanshLocale(Locale): 

4131 names = ["rm", "rm-ch"] 

4132 

4133 past = "avant {0}" 

4134 future = "en {0}" 

4135 

4136 timeframes = { 

4137 "now": "en quest mument", 

4138 "second": "in secunda", 

4139 "seconds": "{0} secundas", 

4140 "minute": "ina minuta", 

4141 "minutes": "{0} minutas", 

4142 "hour": "in'ura", 

4143 "hours": "{0} ura", 

4144 "day": "in di", 

4145 "days": "{0} dis", 

4146 "week": "in'emna", 

4147 "weeks": "{0} emnas", 

4148 "month": "in mais", 

4149 "months": "{0} mais", 

4150 "year": "in onn", 

4151 "years": "{0} onns", 

4152 } 

4153 

4154 month_names = [ 

4155 "", 

4156 "schaner", 

4157 "favrer", 

4158 "mars", 

4159 "avrigl", 

4160 "matg", 

4161 "zercladur", 

4162 "fanadur", 

4163 "avust", 

4164 "settember", 

4165 "october", 

4166 "november", 

4167 "december", 

4168 ] 

4169 

4170 month_abbreviations = [ 

4171 "", 

4172 "schan", 

4173 "fav", 

4174 "mars", 

4175 "avr", 

4176 "matg", 

4177 "zer", 

4178 "fan", 

4179 "avu", 

4180 "set", 

4181 "oct", 

4182 "nov", 

4183 "dec", 

4184 ] 

4185 

4186 day_names = [ 

4187 "", 

4188 "glindesdi", 

4189 "mardi", 

4190 "mesemna", 

4191 "gievgia", 

4192 "venderdi", 

4193 "sonda", 

4194 "dumengia", 

4195 ] 

4196 

4197 day_abbreviations = ["", "gli", "ma", "me", "gie", "ve", "so", "du"] 

4198 

4199 

4200class RomanianLocale(Locale): 

4201 names = ["ro", "ro-ro"] 

4202 

4203 past = "{0} în urmă" 

4204 future = "peste {0}" 

4205 and_word = "și" 

4206 

4207 timeframes = { 

4208 "now": "acum", 

4209 "second": "o secunda", 

4210 "seconds": "{0} câteva secunde", 

4211 "minute": "un minut", 

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

4213 "hour": "o oră", 

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

4215 "day": "o zi", 

4216 "days": "{0} zile", 

4217 "month": "o lună", 

4218 "months": "{0} luni", 

4219 "year": "un an", 

4220 "years": "{0} ani", 

4221 } 

4222 

4223 month_names = [ 

4224 "", 

4225 "ianuarie", 

4226 "februarie", 

4227 "martie", 

4228 "aprilie", 

4229 "mai", 

4230 "iunie", 

4231 "iulie", 

4232 "august", 

4233 "septembrie", 

4234 "octombrie", 

4235 "noiembrie", 

4236 "decembrie", 

4237 ] 

4238 month_abbreviations = [ 

4239 "", 

4240 "ian", 

4241 "febr", 

4242 "mart", 

4243 "apr", 

4244 "mai", 

4245 "iun", 

4246 "iul", 

4247 "aug", 

4248 "sept", 

4249 "oct", 

4250 "nov", 

4251 "dec", 

4252 ] 

4253 

4254 day_names = [ 

4255 "", 

4256 "luni", 

4257 "marți", 

4258 "miercuri", 

4259 "joi", 

4260 "vineri", 

4261 "sâmbătă", 

4262 "duminică", 

4263 ] 

4264 day_abbreviations = ["", "Lun", "Mar", "Mie", "Joi", "Vin", "Sâm", "Dum"] 

4265 

4266 

4267class SlovenianLocale(Locale): 

4268 names = ["sl", "sl-si"] 

4269 

4270 past = "pred {0}" 

4271 future = "čez {0}" 

4272 and_word = "in" 

4273 

4274 timeframes = { 

4275 "now": "zdaj", 

4276 "second": "sekundo", 

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

4278 "minute": "minuta", 

4279 "minutes": "{0} minutami", 

4280 "hour": "uro", 

4281 "hours": "{0} ur", 

4282 "day": "dan", 

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

4284 "month": "mesec", 

4285 "months": "{0} mesecev", 

4286 "year": "leto", 

4287 "years": "{0} let", 

4288 } 

4289 

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

4291 

4292 month_names = [ 

4293 "", 

4294 "Januar", 

4295 "Februar", 

4296 "Marec", 

4297 "April", 

4298 "Maj", 

4299 "Junij", 

4300 "Julij", 

4301 "Avgust", 

4302 "September", 

4303 "Oktober", 

4304 "November", 

4305 "December", 

4306 ] 

4307 

4308 month_abbreviations = [ 

4309 "", 

4310 "Jan", 

4311 "Feb", 

4312 "Mar", 

4313 "Apr", 

4314 "Maj", 

4315 "Jun", 

4316 "Jul", 

4317 "Avg", 

4318 "Sep", 

4319 "Okt", 

4320 "Nov", 

4321 "Dec", 

4322 ] 

4323 

4324 day_names = [ 

4325 "", 

4326 "Ponedeljek", 

4327 "Torek", 

4328 "Sreda", 

4329 "Četrtek", 

4330 "Petek", 

4331 "Sobota", 

4332 "Nedelja", 

4333 ] 

4334 

4335 day_abbreviations = ["", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob", "Ned"] 

4336 

4337 

4338class IndonesianLocale(Locale): 

4339 names = ["id", "id-id"] 

4340 

4341 past = "{0} yang lalu" 

4342 future = "dalam {0}" 

4343 and_word = "dan" 

4344 

4345 timeframes = { 

4346 "now": "baru saja", 

4347 "second": "1 sebentar", 

4348 "seconds": "{0} detik", 

4349 "minute": "1 menit", 

4350 "minutes": "{0} menit", 

4351 "hour": "1 jam", 

4352 "hours": "{0} jam", 

4353 "day": "1 hari", 

4354 "days": "{0} hari", 

4355 "week": "1 minggu", 

4356 "weeks": "{0} minggu", 

4357 "month": "1 bulan", 

4358 "months": "{0} bulan", 

4359 "quarter": "1 kuartal", 

4360 "quarters": "{0} kuartal", 

4361 "year": "1 tahun", 

4362 "years": "{0} tahun", 

4363 } 

4364 

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

4366 

4367 month_names = [ 

4368 "", 

4369 "Januari", 

4370 "Februari", 

4371 "Maret", 

4372 "April", 

4373 "Mei", 

4374 "Juni", 

4375 "Juli", 

4376 "Agustus", 

4377 "September", 

4378 "Oktober", 

4379 "November", 

4380 "Desember", 

4381 ] 

4382 

4383 month_abbreviations = [ 

4384 "", 

4385 "Jan", 

4386 "Feb", 

4387 "Mar", 

4388 "Apr", 

4389 "Mei", 

4390 "Jun", 

4391 "Jul", 

4392 "Ags", 

4393 "Sept", 

4394 "Okt", 

4395 "Nov", 

4396 "Des", 

4397 ] 

4398 

4399 day_names = ["", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu", "Minggu"] 

4400 

4401 day_abbreviations = [ 

4402 "", 

4403 "Senin", 

4404 "Selasa", 

4405 "Rabu", 

4406 "Kamis", 

4407 "Jumat", 

4408 "Sabtu", 

4409 "Minggu", 

4410 ] 

4411 

4412 

4413class NepaliLocale(Locale): 

4414 names = ["ne", "ne-np"] 

4415 

4416 past = "{0} पहिले" 

4417 future = "{0} पछी" 

4418 

4419 timeframes = { 

4420 "now": "अहिले", 

4421 "second": "एक सेकेन्ड", 

4422 "seconds": "{0} सेकण्ड", 

4423 "minute": "मिनेट", 

4424 "minutes": "{0} मिनेट", 

4425 "hour": "एक घण्टा", 

4426 "hours": "{0} घण्टा", 

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

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

4429 "month": "एक महिना", 

4430 "months": "{0} महिना", 

4431 "year": "एक बर्ष", 

4432 "years": "{0} बर्ष", 

4433 } 

4434 

4435 meridians = {"am": "पूर्वाह्न", "pm": "अपरान्ह", "AM": "पूर्वाह्न", "PM": "अपरान्ह"} 

4436 

4437 month_names = [ 

4438 "", 

4439 "जनवरी", 

4440 "फेब्रुअरी", 

4441 "मार्च", 

4442 "एप्रील", 

4443 "मे", 

4444 "जुन", 

4445 "जुलाई", 

4446 "अगष्ट", 

4447 "सेप्टेम्बर", 

4448 "अक्टोबर", 

4449 "नोवेम्बर", 

4450 "डिसेम्बर", 

4451 ] 

4452 month_abbreviations = [ 

4453 "", 

4454 "जन", 

4455 "फेब", 

4456 "मार्च", 

4457 "एप्रील", 

4458 "मे", 

4459 "जुन", 

4460 "जुलाई", 

4461 "अग", 

4462 "सेप", 

4463 "अक्ट", 

4464 "नोव", 

4465 "डिस", 

4466 ] 

4467 

4468 day_names = [ 

4469 "", 

4470 "सोमवार", 

4471 "मंगलवार", 

4472 "बुधवार", 

4473 "बिहिवार", 

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

4475 "शनिवार", 

4476 "आइतवार", 

4477 ] 

4478 

4479 day_abbreviations = ["", "सोम", "मंगल", "बुध", "बिहि", "शुक्र", "शनि", "आइत"] 

4480 

4481 

4482class EstonianLocale(Locale): 

4483 names = ["ee", "et"] 

4484 

4485 past = "{0} tagasi" 

4486 future = "{0} pärast" 

4487 and_word = "ja" 

4488 

4489 timeframes: ClassVar[Mapping[TimeFrameLiteral, Mapping[str, str]]] = { 

4490 "now": {"past": "just nüüd", "future": "just nüüd"}, 

4491 "second": {"past": "üks sekund", "future": "ühe sekundi"}, 

4492 "seconds": {"past": "{0} sekundit", "future": "{0} sekundi"}, 

4493 "minute": {"past": "üks minut", "future": "ühe minuti"}, 

4494 "minutes": {"past": "{0} minutit", "future": "{0} minuti"}, 

4495 "hour": {"past": "tund aega", "future": "tunni aja"}, 

4496 "hours": {"past": "{0} tundi", "future": "{0} tunni"}, 

4497 "day": {"past": "üks päev", "future": "ühe päeva"}, 

4498 "days": {"past": "{0} päeva", "future": "{0} päeva"}, 

4499 "month": {"past": "üks kuu", "future": "ühe kuu"}, 

4500 "months": {"past": "{0} kuud", "future": "{0} kuu"}, 

4501 "year": {"past": "üks aasta", "future": "ühe aasta"}, 

4502 "years": {"past": "{0} aastat", "future": "{0} aasta"}, 

4503 } 

4504 

4505 month_names = [ 

4506 "", 

4507 "Jaanuar", 

4508 "Veebruar", 

4509 "Märts", 

4510 "Aprill", 

4511 "Mai", 

4512 "Juuni", 

4513 "Juuli", 

4514 "August", 

4515 "September", 

4516 "Oktoober", 

4517 "November", 

4518 "Detsember", 

4519 ] 

4520 month_abbreviations = [ 

4521 "", 

4522 "Jan", 

4523 "Veb", 

4524 "Mär", 

4525 "Apr", 

4526 "Mai", 

4527 "Jun", 

4528 "Jul", 

4529 "Aug", 

4530 "Sep", 

4531 "Okt", 

4532 "Nov", 

4533 "Dets", 

4534 ] 

4535 

4536 day_names = [ 

4537 "", 

4538 "Esmaspäev", 

4539 "Teisipäev", 

4540 "Kolmapäev", 

4541 "Neljapäev", 

4542 "Reede", 

4543 "Laupäev", 

4544 "Pühapäev", 

4545 ] 

4546 day_abbreviations = ["", "Esm", "Teis", "Kolm", "Nelj", "Re", "Lau", "Püh"] 

4547 

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

4549 form = self.timeframes[timeframe] 

4550 if delta > 0: 

4551 _form = form["future"] 

4552 else: 

4553 _form = form["past"] 

4554 return _form.format(abs(delta)) 

4555 

4556 

4557class LatvianLocale(Locale): 

4558 names = ["lv", "lv-lv"] 

4559 

4560 past = "pirms {0}" 

4561 future = "pēc {0}" 

4562 and_word = "un" 

4563 

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

4565 "now": "tagad", 

4566 "second": "sekundes", 

4567 "seconds": "{0} sekundēm", 

4568 "minute": "minūtes", 

4569 "minutes": "{0} minūtēm", 

4570 "hour": "stundas", 

4571 "hours": "{0} stundām", 

4572 "day": "dienas", 

4573 "days": "{0} dienām", 

4574 "week": "nedēļas", 

4575 "weeks": "{0} nedēļām", 

4576 "month": "mēneša", 

4577 "months": "{0} mēnešiem", 

4578 "year": "gada", 

4579 "years": "{0} gadiem", 

4580 } 

4581 

4582 month_names = [ 

4583 "", 

4584 "janvāris", 

4585 "februāris", 

4586 "marts", 

4587 "aprīlis", 

4588 "maijs", 

4589 "jūnijs", 

4590 "jūlijs", 

4591 "augusts", 

4592 "septembris", 

4593 "oktobris", 

4594 "novembris", 

4595 "decembris", 

4596 ] 

4597 

4598 month_abbreviations = [ 

4599 "", 

4600 "jan", 

4601 "feb", 

4602 "marts", 

4603 "apr", 

4604 "maijs", 

4605 "jūnijs", 

4606 "jūlijs", 

4607 "aug", 

4608 "sept", 

4609 "okt", 

4610 "nov", 

4611 "dec", 

4612 ] 

4613 

4614 day_names = [ 

4615 "", 

4616 "pirmdiena", 

4617 "otrdiena", 

4618 "trešdiena", 

4619 "ceturtdiena", 

4620 "piektdiena", 

4621 "sestdiena", 

4622 "svētdiena", 

4623 ] 

4624 

4625 day_abbreviations = [ 

4626 "", 

4627 "pi", 

4628 "ot", 

4629 "tr", 

4630 "ce", 

4631 "pi", 

4632 "se", 

4633 "sv", 

4634 ] 

4635 

4636 

4637class SwahiliLocale(Locale): 

4638 names = [ 

4639 "sw", 

4640 "sw-ke", 

4641 "sw-tz", 

4642 ] 

4643 

4644 past = "{0} iliyopita" 

4645 future = "muda wa {0}" 

4646 and_word = "na" 

4647 

4648 timeframes = { 

4649 "now": "sasa hivi", 

4650 "second": "sekunde", 

4651 "seconds": "sekunde {0}", 

4652 "minute": "dakika moja", 

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

4654 "hour": "saa moja", 

4655 "hours": "saa {0}", 

4656 "day": "siku moja", 

4657 "days": "siku {0}", 

4658 "week": "wiki moja", 

4659 "weeks": "wiki {0}", 

4660 "month": "mwezi moja", 

4661 "months": "miezi {0}", 

4662 "year": "mwaka moja", 

4663 "years": "miaka {0}", 

4664 } 

4665 

4666 meridians = {"am": "asu", "pm": "mch", "AM": "ASU", "PM": "MCH"} 

4667 

4668 month_names = [ 

4669 "", 

4670 "Januari", 

4671 "Februari", 

4672 "Machi", 

4673 "Aprili", 

4674 "Mei", 

4675 "Juni", 

4676 "Julai", 

4677 "Agosti", 

4678 "Septemba", 

4679 "Oktoba", 

4680 "Novemba", 

4681 "Desemba", 

4682 ] 

4683 month_abbreviations = [ 

4684 "", 

4685 "Jan", 

4686 "Feb", 

4687 "Mac", 

4688 "Apr", 

4689 "Mei", 

4690 "Jun", 

4691 "Jul", 

4692 "Ago", 

4693 "Sep", 

4694 "Okt", 

4695 "Nov", 

4696 "Des", 

4697 ] 

4698 

4699 day_names = [ 

4700 "", 

4701 "Jumatatu", 

4702 "Jumanne", 

4703 "Jumatano", 

4704 "Alhamisi", 

4705 "Ijumaa", 

4706 "Jumamosi", 

4707 "Jumapili", 

4708 ] 

4709 day_abbreviations = [ 

4710 "", 

4711 "Jumatatu", 

4712 "Jumanne", 

4713 "Jumatano", 

4714 "Alhamisi", 

4715 "Ijumaa", 

4716 "Jumamosi", 

4717 "Jumapili", 

4718 ] 

4719 

4720 

4721class CroatianLocale(Locale): 

4722 names = ["hr", "hr-hr"] 

4723 

4724 past = "prije {0}" 

4725 future = "za {0}" 

4726 and_word = "i" 

4727 

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

4729 "now": "upravo sad", 

4730 "second": "sekundu", 

4731 "seconds": {"double": "{0} sekunde", "higher": "{0} sekundi"}, 

4732 "minute": "minutu", 

4733 "minutes": {"double": "{0} minute", "higher": "{0} minuta"}, 

4734 "hour": "sat", 

4735 "hours": {"double": "{0} sata", "higher": "{0} sati"}, 

4736 "day": "jedan dan", 

4737 "days": {"double": "{0} dana", "higher": "{0} dana"}, 

4738 "week": "tjedan", 

4739 "weeks": {"double": "{0} tjedna", "higher": "{0} tjedana"}, 

4740 "month": "mjesec", 

4741 "months": {"double": "{0} mjeseca", "higher": "{0} mjeseci"}, 

4742 "year": "godinu", 

4743 "years": {"double": "{0} godine", "higher": "{0} godina"}, 

4744 } 

4745 

4746 month_names = [ 

4747 "", 

4748 "siječanj", 

4749 "veljača", 

4750 "ožujak", 

4751 "travanj", 

4752 "svibanj", 

4753 "lipanj", 

4754 "srpanj", 

4755 "kolovoz", 

4756 "rujan", 

4757 "listopad", 

4758 "studeni", 

4759 "prosinac", 

4760 ] 

4761 

4762 month_abbreviations = [ 

4763 "", 

4764 "siječ", 

4765 "velj", 

4766 "ožuj", 

4767 "trav", 

4768 "svib", 

4769 "lip", 

4770 "srp", 

4771 "kol", 

4772 "ruj", 

4773 "list", 

4774 "stud", 

4775 "pros", 

4776 ] 

4777 

4778 day_names = [ 

4779 "", 

4780 "ponedjeljak", 

4781 "utorak", 

4782 "srijeda", 

4783 "četvrtak", 

4784 "petak", 

4785 "subota", 

4786 "nedjelja", 

4787 ] 

4788 

4789 day_abbreviations = [ 

4790 "", 

4791 "po", 

4792 "ut", 

4793 "sr", 

4794 "če", 

4795 "pe", 

4796 "su", 

4797 "ne", 

4798 ] 

4799 

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

4801 form = self.timeframes[timeframe] 

4802 delta = abs(delta) 

4803 if isinstance(form, Mapping): 

4804 if 1 < delta <= 4: 

4805 form = form["double"] 

4806 else: 

4807 form = form["higher"] 

4808 

4809 return form.format(delta) 

4810 

4811 

4812class LatinLocale(Locale): 

4813 names = ["la", "la-va"] 

4814 

4815 past = "ante {0}" 

4816 future = "in {0}" 

4817 and_word = "et" 

4818 

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

4820 "now": "nunc", 

4821 "second": "secundum", 

4822 "seconds": "{0} secundis", 

4823 "minute": "minutam", 

4824 "minutes": "{0} minutis", 

4825 "hour": "horam", 

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

4827 "day": "diem", 

4828 "days": "{0} dies", 

4829 "week": "hebdomadem", 

4830 "weeks": "{0} hebdomades", 

4831 "month": "mensem", 

4832 "months": "{0} mensis", 

4833 "year": "annum", 

4834 "years": "{0} annos", 

4835 } 

4836 

4837 month_names = [ 

4838 "", 

4839 "Ianuarius", 

4840 "Februarius", 

4841 "Martius", 

4842 "Aprilis", 

4843 "Maius", 

4844 "Iunius", 

4845 "Iulius", 

4846 "Augustus", 

4847 "September", 

4848 "October", 

4849 "November", 

4850 "December", 

4851 ] 

4852 

4853 month_abbreviations = [ 

4854 "", 

4855 "Ian", 

4856 "Febr", 

4857 "Mart", 

4858 "Apr", 

4859 "Mai", 

4860 "Iun", 

4861 "Iul", 

4862 "Aug", 

4863 "Sept", 

4864 "Oct", 

4865 "Nov", 

4866 "Dec", 

4867 ] 

4868 

4869 day_names = [ 

4870 "", 

4871 "dies Lunae", 

4872 "dies Martis", 

4873 "dies Mercurii", 

4874 "dies Iovis", 

4875 "dies Veneris", 

4876 "dies Saturni", 

4877 "dies Solis", 

4878 ] 

4879 

4880 day_abbreviations = [ 

4881 "", 

4882 "dies Lunae", 

4883 "dies Martis", 

4884 "dies Mercurii", 

4885 "dies Iovis", 

4886 "dies Veneris", 

4887 "dies Saturni", 

4888 "dies Solis", 

4889 ] 

4890 

4891 

4892class LithuanianLocale(Locale): 

4893 names = ["lt", "lt-lt"] 

4894 

4895 past = "prieš {0}" 

4896 future = "po {0}" 

4897 and_word = "ir" 

4898 

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

4900 "now": "dabar", 

4901 "second": "sekundės", 

4902 "seconds": "{0} sekundžių", 

4903 "minute": "minutės", 

4904 "minutes": "{0} minučių", 

4905 "hour": "valandos", 

4906 "hours": "{0} valandų", 

4907 "day": "dieną", 

4908 "days": "{0} dienų", 

4909 "week": "savaitės", 

4910 "weeks": "{0} savaičių", 

4911 "month": "mėnesio", 

4912 "months": "{0} mėnesių", 

4913 "year": "metų", 

4914 "years": "{0} metų", 

4915 } 

4916 

4917 month_names = [ 

4918 "", 

4919 "sausis", 

4920 "vasaris", 

4921 "kovas", 

4922 "balandis", 

4923 "gegužė", 

4924 "birželis", 

4925 "liepa", 

4926 "rugpjūtis", 

4927 "rugsėjis", 

4928 "spalis", 

4929 "lapkritis", 

4930 "gruodis", 

4931 ] 

4932 

4933 month_abbreviations = [ 

4934 "", 

4935 "saus", 

4936 "vas", 

4937 "kovas", 

4938 "bal", 

4939 "geg", 

4940 "birž", 

4941 "liepa", 

4942 "rugp", 

4943 "rugs", 

4944 "spalis", 

4945 "lapkr", 

4946 "gr", 

4947 ] 

4948 

4949 day_names = [ 

4950 "", 

4951 "pirmadienis", 

4952 "antradienis", 

4953 "trečiadienis", 

4954 "ketvirtadienis", 

4955 "penktadienis", 

4956 "šeštadienis", 

4957 "sekmadienis", 

4958 ] 

4959 

4960 day_abbreviations = [ 

4961 "", 

4962 "pi", 

4963 "an", 

4964 "tr", 

4965 "ke", 

4966 "pe", 

4967 "še", 

4968 "se", 

4969 ] 

4970 

4971 

4972class MalayLocale(Locale): 

4973 names = ["ms", "ms-my", "ms-bn"] 

4974 

4975 past = "{0} yang lalu" 

4976 future = "dalam {0}" 

4977 and_word = "dan" 

4978 

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

4980 "now": "sekarang", 

4981 "second": "saat", 

4982 "seconds": "{0} saat", 

4983 "minute": "minit", 

4984 "minutes": "{0} minit", 

4985 "hour": "jam", 

4986 "hours": "{0} jam", 

4987 "day": "hari", 

4988 "days": "{0} hari", 

4989 "week": "minggu", 

4990 "weeks": "{0} minggu", 

4991 "month": "bulan", 

4992 "months": "{0} bulan", 

4993 "year": "tahun", 

4994 "years": "{0} tahun", 

4995 } 

4996 

4997 month_names = [ 

4998 "", 

4999 "Januari", 

5000 "Februari", 

5001 "Mac", 

5002 "April", 

5003 "Mei", 

5004 "Jun", 

5005 "Julai", 

5006 "Ogos", 

5007 "September", 

5008 "Oktober", 

5009 "November", 

5010 "Disember", 

5011 ] 

5012 

5013 month_abbreviations = [ 

5014 "", 

5015 "Jan.", 

5016 "Feb.", 

5017 "Mac", 

5018 "Apr.", 

5019 "Mei", 

5020 "Jun", 

5021 "Julai", 

5022 "Og.", 

5023 "Sept.", 

5024 "Okt.", 

5025 "Nov.", 

5026 "Dis.", 

5027 ] 

5028 

5029 day_names = [ 

5030 "", 

5031 "Isnin", 

5032 "Selasa", 

5033 "Rabu", 

5034 "Khamis", 

5035 "Jumaat", 

5036 "Sabtu", 

5037 "Ahad", 

5038 ] 

5039 

5040 day_abbreviations = [ 

5041 "", 

5042 "Isnin", 

5043 "Selasa", 

5044 "Rabu", 

5045 "Khamis", 

5046 "Jumaat", 

5047 "Sabtu", 

5048 "Ahad", 

5049 ] 

5050 

5051 

5052class MalteseLocale(Locale): 

5053 names = ["mt", "mt-mt"] 

5054 

5055 past = "{0} ilu" 

5056 future = "fi {0}" 

5057 and_word = "u" 

5058 

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

5060 "now": "issa", 

5061 "second": "sekonda", 

5062 "seconds": "{0} sekondi", 

5063 "minute": "minuta", 

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

5065 "hour": "siegħa", 

5066 "hours": {"dual": "{0} sagħtejn", "plural": "{0} sigħat"}, 

5067 "day": "jum", 

5068 "days": {"dual": "{0} jumejn", "plural": "{0} ijiem"}, 

5069 "week": "ġimgħa", 

5070 "weeks": {"dual": "{0} ġimagħtejn", "plural": "{0} ġimgħat"}, 

5071 "month": "xahar", 

5072 "months": {"dual": "{0} xahrejn", "plural": "{0} xhur"}, 

5073 "year": "sena", 

5074 "years": {"dual": "{0} sentejn", "plural": "{0} snin"}, 

5075 } 

5076 

5077 month_names = [ 

5078 "", 

5079 "Jannar", 

5080 "Frar", 

5081 "Marzu", 

5082 "April", 

5083 "Mejju", 

5084 "Ġunju", 

5085 "Lulju", 

5086 "Awwissu", 

5087 "Settembru", 

5088 "Ottubru", 

5089 "Novembru", 

5090 "Diċembru", 

5091 ] 

5092 

5093 month_abbreviations = [ 

5094 "", 

5095 "Jan", 

5096 "Fr", 

5097 "Mar", 

5098 "Apr", 

5099 "Mejju", 

5100 "Ġun", 

5101 "Lul", 

5102 "Aw", 

5103 "Sett", 

5104 "Ott", 

5105 "Nov", 

5106 "Diċ", 

5107 ] 

5108 

5109 day_names = [ 

5110 "", 

5111 "It-Tnejn", 

5112 "It-Tlieta", 

5113 "L-Erbgħa", 

5114 "Il-Ħamis", 

5115 "Il-Ġimgħa", 

5116 "Is-Sibt", 

5117 "Il-Ħadd", 

5118 ] 

5119 

5120 day_abbreviations = [ 

5121 "", 

5122 "T", 

5123 "TL", 

5124 "E", 

5125 "Ħ", 

5126 "Ġ", 

5127 "S", 

5128 "Ħ", 

5129 ] 

5130 

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

5132 form = self.timeframes[timeframe] 

5133 delta = abs(delta) 

5134 if isinstance(form, Mapping): 

5135 if delta == 2: 

5136 form = form["dual"] 

5137 else: 

5138 form = form["plural"] 

5139 

5140 return form.format(delta) 

5141 

5142 

5143class SamiLocale(Locale): 

5144 names = ["se", "se-fi", "se-no", "se-se"] 

5145 

5146 past = "{0} dassái" 

5147 future = "{0} " # NOTE: couldn't find preposition for Sami here, none needed? 

5148 

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

5150 "now": "dál", 

5151 "second": "sekunda", 

5152 "seconds": "{0} sekundda", 

5153 "minute": "minuhta", 

5154 "minutes": "{0} minuhta", 

5155 "hour": "diimmu", 

5156 "hours": "{0} diimmu", 

5157 "day": "beaivvi", 

5158 "days": "{0} beaivvi", 

5159 "week": "vahku", 

5160 "weeks": "{0} vahku", 

5161 "month": "mánu", 

5162 "months": "{0} mánu", 

5163 "year": "jagi", 

5164 "years": "{0} jagi", 

5165 } 

5166 

5167 month_names = [ 

5168 "", 

5169 "Ođđajagimánnu", 

5170 "Guovvamánnu", 

5171 "Njukčamánnu", 

5172 "Cuoŋománnu", 

5173 "Miessemánnu", 

5174 "Geassemánnu", 

5175 "Suoidnemánnu", 

5176 "Borgemánnu", 

5177 "Čakčamánnu", 

5178 "Golggotmánnu", 

5179 "Skábmamánnu", 

5180 "Juovlamánnu", 

5181 ] 

5182 

5183 month_abbreviations = [ 

5184 "", 

5185 "Ođđajagimánnu", 

5186 "Guovvamánnu", 

5187 "Njukčamánnu", 

5188 "Cuoŋománnu", 

5189 "Miessemánnu", 

5190 "Geassemánnu", 

5191 "Suoidnemánnu", 

5192 "Borgemánnu", 

5193 "Čakčamánnu", 

5194 "Golggotmánnu", 

5195 "Skábmamánnu", 

5196 "Juovlamánnu", 

5197 ] 

5198 

5199 day_names = [ 

5200 "", 

5201 "Mánnodat", 

5202 "Disdat", 

5203 "Gaskavahkku", 

5204 "Duorastat", 

5205 "Bearjadat", 

5206 "Lávvordat", 

5207 "Sotnabeaivi", 

5208 ] 

5209 

5210 day_abbreviations = [ 

5211 "", 

5212 "Mánnodat", 

5213 "Disdat", 

5214 "Gaskavahkku", 

5215 "Duorastat", 

5216 "Bearjadat", 

5217 "Lávvordat", 

5218 "Sotnabeaivi", 

5219 ] 

5220 

5221 

5222class OdiaLocale(Locale): 

5223 names = ["or", "or-in"] 

5224 

5225 past = "{0} ପୂର୍ବେ" 

5226 future = "{0} ପରେ" 

5227 

5228 timeframes = { 

5229 "now": "ବର୍ତ୍ତମାନ", 

5230 "second": "ଏକ ସେକେଣ୍ଡ", 

5231 "seconds": "{0} ସେକେଣ୍ଡ", 

5232 "minute": "ଏକ ମିନଟ", 

5233 "minutes": "{0} ମିନଟ", 

5234 "hour": "ଏକ ଘଣ୍ଟା", 

5235 "hours": "{0} ଘଣ୍ଟା", 

5236 "day": "ଏକ ଦିନ", 

5237 "days": "{0} ଦିନ", 

5238 "month": "ଏକ ମାସ", 

5239 "months": "{0} ମାସ ", 

5240 "year": "ଏକ ବର୍ଷ", 

5241 "years": "{0} ବର୍ଷ", 

5242 } 

5243 

5244 meridians = {"am": "ପୂର୍ବାହ୍ନ", "pm": "ଅପରାହ୍ନ", "AM": "ପୂର୍ବାହ୍ନ", "PM": "ଅପରାହ୍ନ"} 

5245 

5246 month_names = [ 

5247 "", 

5248 "ଜାନୁଆରୀ", 

5249 "ଫେବୃଆରୀ", 

5250 "ମାର୍ଚ୍ଚ୍", 

5251 "ଅପ୍ରେଲ", 

5252 "ମଇ", 

5253 "ଜୁନ୍", 

5254 "ଜୁଲାଇ", 

5255 "ଅଗଷ୍ଟ", 

5256 "ସେପ୍ଟେମ୍ବର", 

5257 "ଅକ୍ଟୋବର୍", 

5258 "ନଭେମ୍ବର୍", 

5259 "ଡିସେମ୍ବର୍", 

5260 ] 

5261 month_abbreviations = [ 

5262 "", 

5263 "ଜାନୁ", 

5264 "ଫେବୃ", 

5265 "ମାର୍ଚ୍ଚ୍", 

5266 "ଅପ୍ରେ", 

5267 "ମଇ", 

5268 "ଜୁନ୍", 

5269 "ଜୁଲା", 

5270 "ଅଗ", 

5271 "ସେପ୍ଟେ", 

5272 "ଅକ୍ଟୋ", 

5273 "ନଭେ", 

5274 "ଡିସେ", 

5275 ] 

5276 

5277 day_names = [ 

5278 "", 

5279 "ସୋମବାର", 

5280 "ମଙ୍ଗଳବାର", 

5281 "ବୁଧବାର", 

5282 "ଗୁରୁବାର", 

5283 "ଶୁକ୍ରବାର", 

5284 "ଶନିବାର", 

5285 "ରବିବାର", 

5286 ] 

5287 day_abbreviations = [ 

5288 "", 

5289 "ସୋମ", 

5290 "ମଙ୍ଗଳ", 

5291 "ବୁଧ", 

5292 "ଗୁରୁ", 

5293 "ଶୁକ୍ର", 

5294 "ଶନି", 

5295 "ରବି", 

5296 ] 

5297 

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

5299 if n > 10 or n == 0: 

5300 return f"{n}ତମ" 

5301 if n in [1, 5, 7, 8, 9, 10]: 

5302 return f"{n}ମ" 

5303 if n in [2, 3]: 

5304 return f"{n}ୟ" 

5305 if n == 4: 

5306 return f"{n}ର୍ଥ" 

5307 if n == 6: 

5308 return f"{n}ଷ୍ଠ" 

5309 return "" 

5310 

5311 

5312class SerbianLocale(Locale): 

5313 names = ["sr", "sr-rs", "sr-sp"] 

5314 

5315 past = "pre {0}" 

5316 future = "za {0}" 

5317 and_word = "i" 

5318 

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

5320 "now": "sada", 

5321 "second": "sekundu", 

5322 "seconds": {"double": "{0} sekunde", "higher": "{0} sekundi"}, 

5323 "minute": "minutu", 

5324 "minutes": {"double": "{0} minute", "higher": "{0} minuta"}, 

5325 "hour": "sat", 

5326 "hours": {"double": "{0} sata", "higher": "{0} sati"}, 

5327 "day": "dan", 

5328 "days": {"double": "{0} dana", "higher": "{0} dana"}, 

5329 "week": "nedelju", 

5330 "weeks": {"double": "{0} nedelje", "higher": "{0} nedelja"}, 

5331 "month": "mesec", 

5332 "months": {"double": "{0} meseca", "higher": "{0} meseci"}, 

5333 "year": "godinu", 

5334 "years": {"double": "{0} godine", "higher": "{0} godina"}, 

5335 } 

5336 

5337 month_names = [ 

5338 "", 

5339 "januar", # јануар 

5340 "februar", # фебруар 

5341 "mart", # март 

5342 "april", # април 

5343 "maj", # мај 

5344 "jun", # јун 

5345 "jul", # јул 

5346 "avgust", # август 

5347 "septembar", # септембар 

5348 "oktobar", # октобар 

5349 "novembar", # новембар 

5350 "decembar", # децембар 

5351 ] 

5352 

5353 month_abbreviations = [ 

5354 "", 

5355 "jan", 

5356 "feb", 

5357 "mar", 

5358 "apr", 

5359 "maj", 

5360 "jun", 

5361 "jul", 

5362 "avg", 

5363 "sep", 

5364 "okt", 

5365 "nov", 

5366 "dec", 

5367 ] 

5368 

5369 day_names = [ 

5370 "", 

5371 "ponedeljak", # понедељак 

5372 "utorak", # уторак 

5373 "sreda", # среда 

5374 "četvrtak", # четвртак 

5375 "petak", # петак 

5376 "subota", # субота 

5377 "nedelja", # недеља 

5378 ] 

5379 

5380 day_abbreviations = [ 

5381 "", 

5382 "po", # по 

5383 "ut", # ут 

5384 "sr", # ср 

5385 "če", # че 

5386 "pe", # пе 

5387 "su", # су 

5388 "ne", # не 

5389 ] 

5390 

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

5392 form = self.timeframes[timeframe] 

5393 delta = abs(delta) 

5394 if isinstance(form, Mapping): 

5395 if 1 < delta <= 4: 

5396 form = form["double"] 

5397 else: 

5398 form = form["higher"] 

5399 

5400 return form.format(delta) 

5401 

5402 

5403class LuxembourgishLocale(Locale): 

5404 names = ["lb", "lb-lu"] 

5405 

5406 past = "virun {0}" 

5407 future = "an {0}" 

5408 and_word = "an" 

5409 

5410 timeframes: ClassVar[Dict[TimeFrameLiteral, str]] = { 

5411 "now": "just elo", 

5412 "second": "enger Sekonn", 

5413 "seconds": "{0} Sekonnen", 

5414 "minute": "enger Minutt", 

5415 "minutes": "{0} Minutten", 

5416 "hour": "enger Stonn", 

5417 "hours": "{0} Stonnen", 

5418 "day": "engem Dag", 

5419 "days": "{0} Deeg", 

5420 "week": "enger Woch", 

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

5422 "month": "engem Mount", 

5423 "months": "{0} Méint", 

5424 "year": "engem Joer", 

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

5426 } 

5427 

5428 timeframes_only_distance = timeframes.copy() 

5429 timeframes_only_distance["second"] = "eng Sekonn" 

5430 timeframes_only_distance["minute"] = "eng Minutt" 

5431 timeframes_only_distance["hour"] = "eng Stonn" 

5432 timeframes_only_distance["day"] = "een Dag" 

5433 timeframes_only_distance["days"] = "{0} Deeg" 

5434 timeframes_only_distance["week"] = "eng Woch" 

5435 timeframes_only_distance["month"] = "ee Mount" 

5436 timeframes_only_distance["months"] = "{0} Méint" 

5437 timeframes_only_distance["year"] = "ee Joer" 

5438 timeframes_only_distance["years"] = "{0} Joer" 

5439 

5440 month_names = [ 

5441 "", 

5442 "Januar", 

5443 "Februar", 

5444 "Mäerz", 

5445 "Abrëll", 

5446 "Mee", 

5447 "Juni", 

5448 "Juli", 

5449 "August", 

5450 "September", 

5451 "Oktouber", 

5452 "November", 

5453 "Dezember", 

5454 ] 

5455 

5456 month_abbreviations = [ 

5457 "", 

5458 "Jan", 

5459 "Feb", 

5460 "Mäe", 

5461 "Abr", 

5462 "Mee", 

5463 "Jun", 

5464 "Jul", 

5465 "Aug", 

5466 "Sep", 

5467 "Okt", 

5468 "Nov", 

5469 "Dez", 

5470 ] 

5471 

5472 day_names = [ 

5473 "", 

5474 "Méindeg", 

5475 "Dënschdeg", 

5476 "Mëttwoch", 

5477 "Donneschdeg", 

5478 "Freideg", 

5479 "Samschdeg", 

5480 "Sonndeg", 

5481 ] 

5482 

5483 day_abbreviations = ["", "Méi", "Dën", "Mët", "Don", "Fre", "Sam", "Son"] 

5484 

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

5486 return f"{n}." 

5487 

5488 def describe( 

5489 self, 

5490 timeframe: TimeFrameLiteral, 

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

5492 only_distance: bool = False, 

5493 ) -> str: 

5494 if not only_distance: 

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

5496 

5497 # Luxembourgish uses a different case without 'in' or 'ago' 

5498 humanized: str = self.timeframes_only_distance[timeframe].format( 

5499 trunc(abs(delta)) 

5500 ) 

5501 

5502 return humanized 

5503 

5504 

5505class ZuluLocale(Locale): 

5506 names = ["zu", "zu-za"] 

5507 

5508 past = "{0} edlule" 

5509 future = "{0} " 

5510 and_word = "futhi" 

5511 

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

5513 "now": "manje", 

5514 "second": {"past": "umzuzwana", "future": "ngomzuzwana"}, 

5515 "seconds": {"past": "{0} imizuzwana", "future": "{0} ngemizuzwana"}, 

5516 "minute": {"past": "umzuzu", "future": "ngomzuzu"}, 

5517 "minutes": {"past": "{0} imizuzu", "future": "{0} ngemizuzu"}, 

5518 "hour": {"past": "ihora", "future": "ngehora"}, 

5519 "hours": {"past": "{0} amahora", "future": "{0} emahoreni"}, 

5520 "day": {"past": "usuku", "future": "ngosuku"}, 

5521 "days": {"past": "{0} izinsuku", "future": "{0} ezinsukwini"}, 

5522 "week": {"past": "isonto", "future": "ngesonto"}, 

5523 "weeks": {"past": "{0} amasonto", "future": "{0} emasontweni"}, 

5524 "month": {"past": "inyanga", "future": "ngenyanga"}, 

5525 "months": {"past": "{0} izinyanga", "future": "{0} ezinyangeni"}, 

5526 "year": {"past": "unyaka", "future": "ngonyak"}, 

5527 "years": {"past": "{0} iminyaka", "future": "{0} eminyakeni"}, 

5528 } 

5529 

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

5531 """Zulu aware time frame format function, takes into account 

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

5533 abs_delta = abs(delta) 

5534 form = self.timeframes[timeframe] 

5535 

5536 if isinstance(form, str): 

5537 return form.format(abs_delta) 

5538 

5539 if delta > 0: 

5540 key = "future" 

5541 else: 

5542 key = "past" 

5543 form = form[key] 

5544 

5545 return form.format(abs_delta) 

5546 

5547 month_names = [ 

5548 "", 

5549 "uMasingane", 

5550 "uNhlolanja", 

5551 "uNdasa", 

5552 "UMbasa", 

5553 "UNhlaba", 

5554 "UNhlangulana", 

5555 "uNtulikazi", 

5556 "UNcwaba", 

5557 "uMandulo", 

5558 "uMfumfu", 

5559 "uLwezi", 

5560 "uZibandlela", 

5561 ] 

5562 

5563 month_abbreviations = [ 

5564 "", 

5565 "uMasingane", 

5566 "uNhlolanja", 

5567 "uNdasa", 

5568 "UMbasa", 

5569 "UNhlaba", 

5570 "UNhlangulana", 

5571 "uNtulikazi", 

5572 "UNcwaba", 

5573 "uMandulo", 

5574 "uMfumfu", 

5575 "uLwezi", 

5576 "uZibandlela", 

5577 ] 

5578 

5579 day_names = [ 

5580 "", 

5581 "uMsombuluko", 

5582 "uLwesibili", 

5583 "uLwesithathu", 

5584 "uLwesine", 

5585 "uLwesihlanu", 

5586 "uMgqibelo", 

5587 "iSonto", 

5588 ] 

5589 

5590 day_abbreviations = [ 

5591 "", 

5592 "uMsombuluko", 

5593 "uLwesibili", 

5594 "uLwesithathu", 

5595 "uLwesine", 

5596 "uLwesihlanu", 

5597 "uMgqibelo", 

5598 "iSonto", 

5599 ] 

5600 

5601 

5602class TamilLocale(Locale): 

5603 names = ["ta", "ta-in", "ta-lk"] 

5604 

5605 past = "{0} நேரத்திற்கு முன்பு" 

5606 future = "இல் {0}" 

5607 

5608 timeframes = { 

5609 "now": "இப்போது", 

5610 "second": "ஒரு இரண்டாவது", 

5611 "seconds": "{0} விநாடிகள்", 

5612 "minute": "ஒரு நிமிடம்", 

5613 "minutes": "{0} நிமிடங்கள்", 

5614 "hour": "ஒரு மணி", 

5615 "hours": "{0} மணிநேரம்", 

5616 "day": "ஒரு நாள்", 

5617 "days": "{0} நாட்கள்", 

5618 "week": "ஒரு வாரம்", 

5619 "weeks": "{0} வாரங்கள்", 

5620 "month": "ஒரு மாதம்", 

5621 "months": "{0} மாதங்கள்", 

5622 "year": "ஒரு ஆண்டு", 

5623 "years": "{0} ஆண்டுகள்", 

5624 } 

5625 

5626 month_names = [ 

5627 "", 

5628 "சித்திரை", 

5629 "வைகாசி", 

5630 "ஆனி", 

5631 "ஆடி", 

5632 "ஆவணி", 

5633 "புரட்டாசி", 

5634 "ஐப்பசி", 

5635 "கார்த்திகை", 

5636 "மார்கழி", 

5637 "தை", 

5638 "மாசி", 

5639 "பங்குனி", 

5640 ] 

5641 

5642 month_abbreviations = [ 

5643 "", 

5644 "ஜன", 

5645 "பிப்", 

5646 "மார்", 

5647 "ஏப்", 

5648 "மே", 

5649 "ஜூன்", 

5650 "ஜூலை", 

5651 "ஆக", 

5652 "செப்", 

5653 "அக்", 

5654 "நவ", 

5655 "டிச", 

5656 ] 

5657 

5658 day_names = [ 

5659 "", 

5660 "திங்கட்கிழமை", 

5661 "செவ்வாய்க்கிழமை", 

5662 "புதன்கிழமை", 

5663 "வியாழக்கிழமை", 

5664 "வெள்ளிக்கிழமை", 

5665 "சனிக்கிழமை", 

5666 "ஞாயிற்றுக்கிழமை", 

5667 ] 

5668 

5669 day_abbreviations = [ 

5670 "", 

5671 "திங்கட்", 

5672 "செவ்வாய்", 

5673 "புதன்", 

5674 "வியாழன்", 

5675 "வெள்ளி", 

5676 "சனி", 

5677 "ஞாயிறு", 

5678 ] 

5679 

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

5681 if n == 1: 

5682 return f"{n}வது" 

5683 elif n >= 0: 

5684 return f"{n}ஆம்" 

5685 else: 

5686 return "" 

5687 

5688 

5689class AlbanianLocale(Locale): 

5690 names = ["sq", "sq-al"] 

5691 

5692 past = "{0} më parë" 

5693 future = "në {0}" 

5694 and_word = "dhe" 

5695 

5696 timeframes = { 

5697 "now": "tani", 

5698 "second": "sekondë", 

5699 "seconds": "{0} sekonda", 

5700 "minute": "minutë", 

5701 "minutes": "{0} minuta", 

5702 "hour": "orë", 

5703 "hours": "{0} orë", 

5704 "day": "ditë", 

5705 "days": "{0} ditë", 

5706 "week": "javë", 

5707 "weeks": "{0} javë", 

5708 "month": "muaj", 

5709 "months": "{0} muaj", 

5710 "year": "vit", 

5711 "years": "{0} vjet", 

5712 } 

5713 

5714 month_names = [ 

5715 "", 

5716 "janar", 

5717 "shkurt", 

5718 "mars", 

5719 "prill", 

5720 "maj", 

5721 "qershor", 

5722 "korrik", 

5723 "gusht", 

5724 "shtator", 

5725 "tetor", 

5726 "nëntor", 

5727 "dhjetor", 

5728 ] 

5729 

5730 month_abbreviations = [ 

5731 "", 

5732 "jan", 

5733 "shk", 

5734 "mar", 

5735 "pri", 

5736 "maj", 

5737 "qer", 

5738 "korr", 

5739 "gush", 

5740 "sht", 

5741 "tet", 

5742 "nën", 

5743 "dhj", 

5744 ] 

5745 

5746 day_names = [ 

5747 "", 

5748 "e hënë", 

5749 "e martë", 

5750 "e mërkurë", 

5751 "e enjte", 

5752 "e premte", 

5753 "e shtunë", 

5754 "e diel", 

5755 ] 

5756 

5757 day_abbreviations = [ 

5758 "", 

5759 "hën", 

5760 "mar", 

5761 "mër", 

5762 "enj", 

5763 "pre", 

5764 "sht", 

5765 "die", 

5766 ] 

5767 

5768 

5769class GeorgianLocale(Locale): 

5770 names = ["ka", "ka-ge"] 

5771 

5772 past = "{0} წინ" # ts’in 

5773 future = "{0} შემდეგ" # shemdeg 

5774 and_word = "და" # da 

5775 

5776 timeframes = { 

5777 "now": "ახლა", # akhla 

5778 # When a cardinal qualifies a noun, it stands in the singular 

5779 "second": "წამის", # ts’amis 

5780 "seconds": "{0} წამის", 

5781 "minute": "წუთის", # ts’utis 

5782 "minutes": "{0} წუთის", 

5783 "hour": "საათის", # saatis 

5784 "hours": "{0} საათის", 

5785 "day": "დღის", # dghis 

5786 "days": "{0} დღის", 

5787 "week": "კვირის", # k’viris 

5788 "weeks": "{0} კვირის", 

5789 "month": "თვის", # tvis 

5790 "months": "{0} თვის", 

5791 "year": "წლის", # ts’lis 

5792 "years": "{0} წლის", 

5793 } 

5794 

5795 month_names = [ 

5796 # modern month names 

5797 "", 

5798 "იანვარი", # Ianvari 

5799 "თებერვალი", # Tebervali 

5800 "მარტი", # Mart'i 

5801 "აპრილი", # Ap'rili 

5802 "მაისი", # Maisi 

5803 "ივნისი", # Ivnisi 

5804 "ივლისი", # Ivlisi 

5805 "აგვისტო", # Agvist'o 

5806 "სექტემბერი", # Sekt'emberi 

5807 "ოქტომბერი", # Okt'omberi 

5808 "ნოემბერი", # Noemberi 

5809 "დეკემბერი", # Dek'emberi 

5810 ] 

5811 

5812 month_abbreviations = [ 

5813 # no abbr. found yet 

5814 "", 

5815 "იანვარი", # Ianvari 

5816 "თებერვალი", # Tebervali 

5817 "მარტი", # Mart'i 

5818 "აპრილი", # Ap'rili 

5819 "მაისი", # Maisi 

5820 "ივნისი", # Ivnisi 

5821 "ივლისი", # Ivlisi 

5822 "აგვისტო", # Agvist'o 

5823 "სექტემბერი", # Sekt'emberi 

5824 "ოქტომბერი", # Okt'omberi 

5825 "ნოემბერი", # Noemberi 

5826 "დეკემბერი", # Dek'emberi 

5827 ] 

5828 

5829 day_names = [ 

5830 "", 

5831 "ორშაბათი", # orshabati 

5832 "სამშაბათი", # samshabati 

5833 "ოთხშაბათი", # otkhshabati 

5834 "ხუთშაბათი", # khutshabati 

5835 "პარასკევი", # p’arask’evi 

5836 "შაბათი", # shabati 

5837 # "k’vira" also serves as week; to avoid confusion "k’vira-dge" can be used for Sunday 

5838 "კვირა", # k’vira 

5839 ] 

5840 

5841 day_abbreviations = [ 

5842 "", 

5843 "ორშაბათი", # orshabati 

5844 "სამშაბათი", # samshabati 

5845 "ოთხშაბათი", # otkhshabati 

5846 "ხუთშაბათი", # khutshabati 

5847 "პარასკევი", # p’arask’evi 

5848 "შაბათი", # shabati 

5849 "კვირა", # k’vira 

5850 ] 

5851 

5852 

5853class SinhalaLocale(Locale): 

5854 names = ["si", "si-lk"] 

5855 

5856 past = "{0}ට පෙර" 

5857 future = "{0}" 

5858 and_word = "සහ" 

5859 

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

5861 "now": "දැන්", 

5862 "second": { 

5863 "past": "තත්පරයක", 

5864 "future": "තත්පරයකින්", 

5865 }, # ක් is the article 

5866 "seconds": { 

5867 "past": "තත්පර {0} ක", 

5868 "future": "තත්පර {0} කින්", 

5869 }, 

5870 "minute": { 

5871 "past": "විනාඩියක", 

5872 "future": "විනාඩියකින්", 

5873 }, 

5874 "minutes": { 

5875 "past": "විනාඩි {0} ක", 

5876 "future": "මිනිත්තු {0} කින්", 

5877 }, 

5878 "hour": {"past": "පැයක", "future": "පැයකින්"}, 

5879 "hours": { 

5880 "past": "පැය {0} ක", 

5881 "future": "පැය {0} කින්", 

5882 }, 

5883 "day": {"past": "දිනක", "future": "දිනකට"}, 

5884 "days": { 

5885 "past": "දින {0} ක", 

5886 "future": "දින {0} කින්", 

5887 }, 

5888 "week": {"past": "සතියක", "future": "සතියකින්"}, 

5889 "weeks": { 

5890 "past": "සති {0} ක", 

5891 "future": "සති {0} කින්", 

5892 }, 

5893 "month": {"past": "මාසයක", "future": "එය මාසය තුළ"}, 

5894 "months": { 

5895 "past": "මාස {0} ක", 

5896 "future": "මාස {0} කින්", 

5897 }, 

5898 "year": {"past": "වසරක", "future": "වසරක් තුළ"}, 

5899 "years": { 

5900 "past": "අවුරුදු {0} ක", 

5901 "future": "අවුරුදු {0} තුළ", 

5902 }, 

5903 } 

5904 # Sinhala: the general format to describe timeframe is different from past and future, 

5905 # so we do not copy the original timeframes dictionary 

5906 timeframes_only_distance = {} 

5907 timeframes_only_distance["second"] = "තත්පරයක්" 

5908 timeframes_only_distance["seconds"] = "තත්පර {0}" 

5909 timeframes_only_distance["minute"] = "මිනිත්තුවක්" 

5910 timeframes_only_distance["minutes"] = "විනාඩි {0}" 

5911 timeframes_only_distance["hour"] = "පැයක්" 

5912 timeframes_only_distance["hours"] = "පැය {0}" 

5913 timeframes_only_distance["day"] = "දවසක්" 

5914 timeframes_only_distance["days"] = "දවස් {0}" 

5915 timeframes_only_distance["week"] = "සතියක්" 

5916 timeframes_only_distance["weeks"] = "සති {0}" 

5917 timeframes_only_distance["month"] = "මාසයක්" 

5918 timeframes_only_distance["months"] = "මාස {0}" 

5919 timeframes_only_distance["year"] = "අවුරුද්දක්" 

5920 timeframes_only_distance["years"] = "අවුරුදු {0}" 

5921 

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

5923 """ 

5924 Sinhala awares time frame format function, takes into account 

5925 the differences between general, past, and future forms (three different suffixes). 

5926 """ 

5927 abs_delta = abs(delta) 

5928 form = self.timeframes[timeframe] 

5929 

5930 if isinstance(form, str): 

5931 return form.format(abs_delta) 

5932 

5933 if delta > 0: 

5934 key = "future" 

5935 else: 

5936 key = "past" 

5937 form = form[key] 

5938 

5939 return form.format(abs_delta) 

5940 

5941 def describe( 

5942 self, 

5943 timeframe: TimeFrameLiteral, 

5944 delta: Union[float, int] = 1, # key is always future when only_distance=False 

5945 only_distance: bool = False, 

5946 ) -> str: 

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

5948 

5949 :param timeframe: a string representing a timeframe. 

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

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

5952 """ 

5953 

5954 if not only_distance: 

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

5956 # Sinhala uses a different case without 'in' or 'ago' 

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

5958 

5959 return humanized 

5960 

5961 month_names = [ 

5962 "", 

5963 "ජනවාරි", 

5964 "පෙබරවාරි", 

5965 "මාර්තු", 

5966 "අප්‍රේල්", 

5967 "මැයි", 

5968 "ජූනි", 

5969 "ජූලි", 

5970 "අගෝස්තු", 

5971 "සැප්තැම්බර්", 

5972 "ඔක්තෝබර්", 

5973 "නොවැම්බර්", 

5974 "දෙසැම්බර්", 

5975 ] 

5976 

5977 month_abbreviations = [ 

5978 "", 

5979 "ජන", 

5980 "පෙබ", 

5981 "මාර්", 

5982 "අප්‍රේ", 

5983 "මැයි", 

5984 "ජුනි", 

5985 "ජූලි", 

5986 "අගෝ", 

5987 "සැප්", 

5988 "ඔක්", 

5989 "නොවැ", 

5990 "දෙසැ", 

5991 ] 

5992 

5993 day_names = [ 

5994 "", 

5995 "සදුදා", 

5996 "අඟහරැවදා", 

5997 "බදාදා", 

5998 "බ්‍රහස්‍පතින්‍දා", 

5999 "සිකුරාදා", 

6000 "සෙනසුරාදා", 

6001 "ඉරිදා", 

6002 ] 

6003 

6004 day_abbreviations = [ 

6005 "", 

6006 "සදුද", 

6007 "බදා", 

6008 "බදා", 

6009 "සිකු", 

6010 "සෙන", 

6011 "අ", 

6012 "ඉරිදා", 

6013 ] 

6014 

6015 

6016class UrduLocale(Locale): 

6017 names = ["ur", "ur-pk"] 

6018 

6019 past = "پہلے {0}" 

6020 future = "میں {0}" 

6021 and_word = "اور" 

6022 

6023 timeframes = { 

6024 "now": "ابھی", 

6025 "second": "ایک سیکنڈ", 

6026 "seconds": "{0} سیکنڈ", 

6027 "minute": "ایک منٹ", 

6028 "minutes": "{0} منٹ", 

6029 "hour": "ایک گھنٹے", 

6030 "hours": "{0} گھنٹے", 

6031 "day": "ایک دن", 

6032 "days": "{0} دن", 

6033 "week": "ایک ہفتے", 

6034 "weeks": "{0} ہفتے", 

6035 "month": "ایک مہینہ", 

6036 "months": "{0} ماہ", 

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

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

6039 } 

6040 

6041 month_names = [ 

6042 "", 

6043 "جنوری", 

6044 "فروری", 

6045 "مارچ", 

6046 "اپریل", 

6047 "مئی", 

6048 "جون", 

6049 "جولائی", 

6050 "اگست", 

6051 "ستمبر", 

6052 "اکتوبر", 

6053 "نومبر", 

6054 "دسمبر", 

6055 ] 

6056 

6057 month_abbreviations = [ 

6058 "", 

6059 "جنوری", 

6060 "فروری", 

6061 "مارچ", 

6062 "اپریل", 

6063 "مئی", 

6064 "جون", 

6065 "جولائی", 

6066 "اگست", 

6067 "ستمبر", 

6068 "اکتوبر", 

6069 "نومبر", 

6070 "دسمبر", 

6071 ] 

6072 

6073 day_names = [ 

6074 "", 

6075 "سوموار", 

6076 "منگل", 

6077 "بدھ", 

6078 "جمعرات", 

6079 "جمعہ", 

6080 "ہفتہ", 

6081 "اتوار", 

6082 ] 

6083 

6084 day_abbreviations = [ 

6085 "", 

6086 "سوموار", 

6087 "منگل", 

6088 "بدھ", 

6089 "جمعرات", 

6090 "جمعہ", 

6091 "ہفتہ", 

6092 "اتوار", 

6093 ] 

6094 

6095 

6096class KazakhLocale(Locale): 

6097 names = ["kk", "kk-kz"] 

6098 

6099 past = "{0} бұрын" 

6100 future = "{0} кейін" 

6101 timeframes = { 

6102 "now": "қазір", 

6103 "second": "бір секунд", 

6104 "seconds": "{0} секунд", 

6105 "minute": "бір минут", 

6106 "minutes": "{0} минут", 

6107 "hour": "бір сағат", 

6108 "hours": "{0} сағат", 

6109 "day": "бір күн", 

6110 "days": "{0} күн", 

6111 "week": "бір апта", 

6112 "weeks": "{0} апта", 

6113 "month": "бір ай", 

6114 "months": "{0} ай", 

6115 "year": "бір жыл", 

6116 "years": "{0} жыл", 

6117 } 

6118 

6119 month_names = [ 

6120 "", 

6121 "Қаңтар", 

6122 "Ақпан", 

6123 "Наурыз", 

6124 "Сәуір", 

6125 "Мамыр", 

6126 "Маусым", 

6127 "Шілде", 

6128 "Тамыз", 

6129 "Қыркүйек", 

6130 "Қазан", 

6131 "Қараша", 

6132 "Желтоқсан", 

6133 ] 

6134 month_abbreviations = [ 

6135 "", 

6136 "Қан", 

6137 "Ақп", 

6138 "Нау", 

6139 "Сәу", 

6140 "Мам", 

6141 "Мау", 

6142 "Шіл", 

6143 "Там", 

6144 "Қыр", 

6145 "Қаз", 

6146 "Қар", 

6147 "Жел", 

6148 ] 

6149 

6150 day_names = [ 

6151 "", 

6152 "Дүйсембі", 

6153 "Сейсенбі", 

6154 "Сәрсенбі", 

6155 "Бейсенбі", 

6156 "Жұма", 

6157 "Сенбі", 

6158 "Жексенбі", 

6159 ] 

6160 day_abbreviations = ["", "Дс", "Сс", "Ср", "Бс", "Жм", "Сб", "Жс"] 

6161 

6162 

6163class AmharicLocale(Locale): 

6164 names = ["am", "am-et"] 

6165 

6166 past = "{0} በፊት" 

6167 future = "{0} ውስጥ" 

6168 and_word = "እና" 

6169 

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

6171 "now": "አሁን", 

6172 "second": { 

6173 "past": "ከአንድ ሰከንድ", 

6174 "future": "በአንድ ሰከንድ", 

6175 }, 

6176 "seconds": { 

6177 "past": "ከ {0} ሰከንድ", 

6178 "future": "በ {0} ሰከንድ", 

6179 }, 

6180 "minute": { 

6181 "past": "ከአንድ ደቂቃ", 

6182 "future": "በአንድ ደቂቃ", 

6183 }, 

6184 "minutes": { 

6185 "past": "ከ {0} ደቂቃዎች", 

6186 "future": "በ {0} ደቂቃዎች", 

6187 }, 

6188 "hour": { 

6189 "past": "ከአንድ ሰዓት", 

6190 "future": "በአንድ ሰዓት", 

6191 }, 

6192 "hours": { 

6193 "past": "ከ {0} ሰዓታት", 

6194 "future": "በ {0} ሰከንድ", 

6195 }, 

6196 "day": { 

6197 "past": "ከአንድ ቀን", 

6198 "future": "በአንድ ቀን", 

6199 }, 

6200 "days": { 

6201 "past": "ከ {0} ቀናት", 

6202 "future": "በ {0} ቀናት", 

6203 }, 

6204 "week": { 

6205 "past": "ከአንድ ሳምንት", 

6206 "future": "በአንድ ሳምንት", 

6207 }, 

6208 "weeks": { 

6209 "past": "ከ {0} ሳምንታት", 

6210 "future": "በ {0} ሳምንታት", 

6211 }, 

6212 "month": { 

6213 "past": "ከአንድ ወር", 

6214 "future": "በአንድ ወር", 

6215 }, 

6216 "months": { 

6217 "past": "ከ {0} ወር", 

6218 "future": "በ {0} ወራት", 

6219 }, 

6220 "year": { 

6221 "past": "ከአንድ አመት", 

6222 "future": "በአንድ አመት", 

6223 }, 

6224 "years": { 

6225 "past": "ከ {0} ዓመታት", 

6226 "future": "በ {0} ዓመታት", 

6227 }, 

6228 } 

6229 # Amharic: the general format to describe timeframe is different from past and future, 

6230 # so we do not copy the original timeframes dictionary 

6231 timeframes_only_distance = { 

6232 "second": "አንድ ሰከንድ", 

6233 "seconds": "{0} ሰከንድ", 

6234 "minute": "አንድ ደቂቃ", 

6235 "minutes": "{0} ደቂቃዎች", 

6236 "hour": "አንድ ሰዓት", 

6237 "hours": "{0} ሰዓት", 

6238 "day": "አንድ ቀን", 

6239 "days": "{0} ቀናት", 

6240 "week": "አንድ ሳምንት", 

6241 "weeks": "{0} ሳምንት", 

6242 "month": "አንድ ወር", 

6243 "months": "{0} ወራት", 

6244 "year": "አንድ አመት", 

6245 "years": "{0} ዓመታት", 

6246 } 

6247 

6248 month_names = [ 

6249 "", 

6250 "ጃንዩወሪ", 

6251 "ፌብሩወሪ", 

6252 "ማርች", 

6253 "ኤፕሪል", 

6254 "ሜይ", 

6255 "ጁን", 

6256 "ጁላይ", 

6257 "ኦገስት", 

6258 "ሴፕቴምበር", 

6259 "ኦክቶበር", 

6260 "ኖቬምበር", 

6261 "ዲሴምበር", 

6262 ] 

6263 

6264 month_abbreviations = [ 

6265 "", 

6266 "ጃንዩ", 

6267 "ፌብሩ", 

6268 "ማርች", 

6269 "ኤፕሪ", 

6270 "ሜይ", 

6271 "ጁን", 

6272 "ጁላይ", 

6273 "ኦገስ", 

6274 "ሴፕቴ", 

6275 "ኦክቶ", 

6276 "ኖቬም", 

6277 "ዲሴም", 

6278 ] 

6279 

6280 day_names = [ 

6281 "", 

6282 "ሰኞ", 

6283 "ማክሰኞ", 

6284 "ረቡዕ", 

6285 "ሐሙስ", 

6286 "ዓርብ", 

6287 "ቅዳሜ", 

6288 "እሑድ", 

6289 ] 

6290 day_abbreviations = ["", "እ", "ሰ", "ማ", "ረ", "ሐ", "ዓ", "ቅ"] 

6291 

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

6293 return f"{n}ኛ" 

6294 

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

6296 """ 

6297 Amharic awares time frame format function, takes into account 

6298 the differences between general, past, and future forms (three different suffixes). 

6299 """ 

6300 abs_delta = abs(delta) 

6301 form = self.timeframes[timeframe] 

6302 

6303 if isinstance(form, str): 

6304 return form.format(abs_delta) 

6305 

6306 if delta > 0: 

6307 key = "future" 

6308 else: 

6309 key = "past" 

6310 form = form[key] 

6311 

6312 return form.format(abs_delta) 

6313 

6314 def describe( 

6315 self, 

6316 timeframe: TimeFrameLiteral, 

6317 delta: Union[float, int] = 1, # key is always future when only_distance=False 

6318 only_distance: bool = False, 

6319 ) -> str: 

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

6321 

6322 :param timeframe: a string representing a timeframe. 

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

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

6325 """ 

6326 

6327 if not only_distance: 

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

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

6330 

6331 return humanized 

6332 

6333 

6334class ArmenianLocale(Locale): 

6335 names = ["hy", "hy-am"] 

6336 past = "{0} առաջ" 

6337 future = "{0}ից" 

6338 and_word = "Եվ" # Yev 

6339 

6340 timeframes = { 

6341 "now": "հիմա", 

6342 "second": "վայրկյան", 

6343 "seconds": "{0} վայրկյան", 

6344 "minute": "րոպե", 

6345 "minutes": "{0} րոպե", 

6346 "hour": "ժամ", 

6347 "hours": "{0} ժամ", 

6348 "day": "օր", 

6349 "days": "{0} օր", 

6350 "month": "ամիս", 

6351 "months": "{0} ամիս", 

6352 "year": "տարին", 

6353 "years": "{0} տարին", 

6354 "week": "շաբաթ", 

6355 "weeks": "{0} շաբաթ", 

6356 } 

6357 

6358 meridians = { 

6359 "am": "Ամ", 

6360 "pm": "պ.մ.", 

6361 "AM": "Ամ", 

6362 "PM": "պ.մ.", 

6363 } 

6364 

6365 month_names = [ 

6366 "", 

6367 "հունվար", 

6368 "փետրվար", 

6369 "մարտ", 

6370 "ապրիլ", 

6371 "մայիս", 

6372 "հունիս", 

6373 "հուլիս", 

6374 "օգոստոս", 

6375 "սեպտեմբեր", 

6376 "հոկտեմբեր", 

6377 "նոյեմբեր", 

6378 "դեկտեմբեր", 

6379 ] 

6380 

6381 month_abbreviations = [ 

6382 "", 

6383 "հունվար", 

6384 "փետրվար", 

6385 "մարտ", 

6386 "ապրիլ", 

6387 "մայիս", 

6388 "հունիս", 

6389 "հուլիս", 

6390 "օգոստոս", 

6391 "սեպտեմբեր", 

6392 "հոկտեմբեր", 

6393 "նոյեմբեր", 

6394 "դեկտեմբեր", 

6395 ] 

6396 

6397 day_names = [ 

6398 "", 

6399 "երկուշաբթի", 

6400 "երեքշաբթի", 

6401 "չորեքշաբթի", 

6402 "հինգշաբթի", 

6403 "ուրբաթ", 

6404 "շաբաթ", 

6405 "կիրակի", 

6406 ] 

6407 

6408 day_abbreviations = [ 

6409 "", 

6410 "երկ.", 

6411 "երեք.", 

6412 "չորեք.", 

6413 "հինգ.", 

6414 "ուրբ.", 

6415 "շաբ.", 

6416 "կիր.", 

6417 ] 

6418 

6419 

6420class UzbekLocale(Locale): 

6421 names = ["uz", "uz-uz"] 

6422 past = "{0}dan avval" 

6423 future = "{0}dan keyin" 

6424 timeframes = { 

6425 "now": "hozir", 

6426 "second": "bir soniya", 

6427 "seconds": "{0} soniya", 

6428 "minute": "bir daqiqa", 

6429 "minutes": "{0} daqiqa", 

6430 "hour": "bir soat", 

6431 "hours": "{0} soat", 

6432 "day": "bir kun", 

6433 "days": "{0} kun", 

6434 "week": "bir hafta", 

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

6436 "month": "bir oy", 

6437 "months": "{0} oy", 

6438 "year": "bir yil", 

6439 "years": "{0} yil", 

6440 } 

6441 

6442 month_names = [ 

6443 "", 

6444 "Yanvar", 

6445 "Fevral", 

6446 "Mart", 

6447 "Aprel", 

6448 "May", 

6449 "Iyun", 

6450 "Iyul", 

6451 "Avgust", 

6452 "Sentyabr", 

6453 "Oktyabr", 

6454 "Noyabr", 

6455 "Dekabr", 

6456 ] 

6457 

6458 month_abbreviations = [ 

6459 "", 

6460 "Yan", 

6461 "Fev", 

6462 "Mar", 

6463 "Apr", 

6464 "May", 

6465 "Iyn", 

6466 "Iyl", 

6467 "Avg", 

6468 "Sen", 

6469 "Okt", 

6470 "Noy", 

6471 "Dek", 

6472 ] 

6473 

6474 day_names = [ 

6475 "", 

6476 "Dushanba", 

6477 "Seshanba", 

6478 "Chorshanba", 

6479 "Payshanba", 

6480 "Juma", 

6481 "Shanba", 

6482 "Yakshanba", 

6483 ] 

6484 

6485 day_abbreviations = ["", "Dush", "Sesh", "Chor", "Pay", "Jum", "Shan", "Yak"]