1import sys
2from typing import overload, Any, Container, IO, Iterable, Optional, Type, TypeVar
3
4if sys.version_info >= (3, 8):
5    from typing import Literal
6else:
7    from typing_extensions import Literal
8
9class NullTranslations:
10    def __init__(self, fp: IO[str] = ...) -> None: ...
11    def _parse(self, fp: IO[str]) -> None: ...
12    def add_fallback(self, fallback: NullTranslations) -> None: ...
13    def gettext(self, message: str) -> str: ...
14    def lgettext(self, message: str) -> str: ...
15    def ngettext(self, singular: str, plural: str, n: int) -> str: ...
16    def lngettext(self, singular: str, plural: str, n: int) -> str: ...
17    def pgettext(self, context: str, message: str) -> str: ...
18    def npgettext(self, context: str, msgid1: str, msgid2: str, n: int) -> str: ...
19    def info(self) -> Any: ...
20    def charset(self) -> Any: ...
21    def output_charset(self) -> Any: ...
22    def set_output_charset(self, charset: str) -> None: ...
23    def install(self, names: Optional[Container[str]] = ...) -> None: ...
24
25class GNUTranslations(NullTranslations):
26    LE_MAGIC: int
27    BE_MAGIC: int
28
29def find(domain: str, localedir: Optional[str] = ..., languages: Optional[Iterable[str]] = ...,
30         all: bool = ...) -> Any: ...
31
32_T = TypeVar('_T')
33@overload
34def translation(domain: str, localedir: Optional[str] = ..., languages: Optional[Iterable[str]] = ...,
35                class_: None = ..., fallback: bool = ..., codeset: Optional[str] = ...) -> NullTranslations: ...
36@overload
37def translation(domain: str, localedir: Optional[str] = ..., languages: Optional[Iterable[str]] = ...,
38                class_: Type[_T] = ..., fallback: Literal[False] = ..., codeset: Optional[str] = ...) -> _T: ...
39@overload
40def translation(domain: str, localedir: Optional[str] = ..., languages: Optional[Iterable[str]] = ...,
41                class_: Type[_T] = ..., fallback: Literal[True] = ..., codeset: Optional[str] = ...) -> Any: ...
42
43def install(domain: str, localedir: Optional[str] = ..., codeset: Optional[str] = ...,
44            names: Optional[Container[str]] = ...) -> None: ...
45
46def textdomain(domain: Optional[str] = ...) -> str: ...
47def bindtextdomain(domain: str, localedir: Optional[str] = ...) -> str: ...
48def bind_textdomain_codeset(domain: str, codeset: Optional[str] = ...) -> str: ...
49def dgettext(domain: str, message: str) -> str: ...
50def ldgettext(domain: str, message: str) -> str: ...
51def dngettext(domain: str, singular: str, plural: str, n: int) -> str: ...
52def ldngettext(domain: str, singular: str, plural: str, n: int) -> str: ...
53def gettext(message: str) -> str: ...
54def lgettext(message: str) -> str: ...
55def ngettext(singular: str, plural: str, n: int) -> str: ...
56def lngettext(singular: str, plural: str, n: int) -> str: ...
57def pgettext(context: str, message: str) -> str: ...
58def dpgettext(domain: str, context: str, message: str) -> str: ...
59def npgettext(context: str, msgid1: str, msgid2: str, n: int) -> str: ...
60def dnpgettext(domain: str, context: str, msgid1: str, msgid2: str, n: int) -> str: ...
61
62Catalog = translation
63