Fix i18n system
This commit is contained in:
parent
1a0341b3dd
commit
028d51af18
@ -1,3 +1,7 @@
|
||||
en:
|
||||
start: "Hello, {message.from_user.full_name}"
|
||||
help: "Just simple bot, which greets the user. Use /start"
|
||||
|
||||
ru:
|
||||
start: "Привет, {message.from_user.full_name}"
|
||||
help: "Это простой бот, который приветствует пользователя. Используй /start"
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user