Fix i18n system

This commit is contained in:
2024-07-21 02:40:49 +03:00
parent 1a0341b3dd
commit 028d51af18
4 changed files with 22 additions and 3 deletions
+1 -1
View File
@@ -7,6 +7,6 @@ from .i18n import I18N
def main():
config = Config()
logger = create_logger("mybot", config.LOG_LEVEL)
i18n = I18N(logger, config.I18N_PATH)
i18n = I18N(logger, config.I18N_PATH, config.I18N_LANG, config.I18N_FALLBACK_LANG)
bot = create_bot(config, logger, i18n)
bot.infinity_polling(config.TIMEOUT, config.DROP_PENDING, config.POLLING_TIMEOUT)
+1
View File
@@ -17,6 +17,7 @@ class Config:
# i18n
I18N_PATH: str = os.getenv("I18N_PATH", "i18n.yaml")
I18N_LANG: str = os.getenv("I18N_LANG", "en")
I18N_FALLBACK_LANG: str = os.getenv("I18N_FALLBACK_LANG", "en")
# state storage
SS_TYPE: str = os.getenv("SS_TYPE", "memory").lower()
+16 -2
View File
@@ -5,10 +5,14 @@ from yaml import safe_load
class I18N:
def __init__(self, logger: logging.Logger, path="i18n.yaml", fallback_lang="en"):
def __init__(self, logger: logging.Logger,
path: str = "i18n.yaml",
lang: Optional[str] = None,
fallback_lang: str = "en"):
self.logger = logger
self._path = path
self._fallback_lang = fallback_lang
self._lang = lang or self.fallback_lang
self._dict = dict()
self.load()
@@ -20,6 +24,16 @@ class I18N:
def fallback_lang(self):
return self._fallback_lang
def set_lang(self, lang: Optional[str] = None):
if lang in self._dict:
self._lang = lang
else:
self._lang = self.fallback_lang
@property
def lang(self):
return self._lang
def load(self):
self._dict.clear()
with open(self._path) as f:
@@ -28,7 +42,7 @@ class I18N:
raise RuntimeError("I18N file doesn't contain fallback language section")
def get(self, phrase: str, lang: Optional[str] = None):
lang = lang or self.fallback_lang
lang = lang or self.lang
if lang not in self._dict:
self.logger.warning(f"Language '{lang}' not found in i18n, using fallback")
lang = self.fallback_lang