автоматический перевод некоторых сообщений в зависимости от локали устройства

This commit is contained in:
mihalin 2022-04-11 15:51:00 +03:00
parent b09f8d9cb6
commit 059e97a96d
2 changed files with 17 additions and 1 deletions

View File

@ -15,3 +15,10 @@ if lang == "ru":
else: else:
t = gettext.translation("olgram", localedir=locales_dir, languages=[lang]) t = gettext.translation("olgram", localedir=locales_dir, languages=[lang])
_ = t.gettext _ = t.gettext
translators = {
"ru": dummy_translator,
"uk": gettext.translation("olgram", localedir=locales_dir, languages=["uk"]).gettext,
"zh": gettext.translation("olgram", localedir=locales_dir, languages=["zh"]).gettext,
}

View File

@ -12,7 +12,7 @@ import logging
import typing as ty import typing as ty
from olgram.settings import ServerSettings from olgram.settings import ServerSettings
from olgram.models.models import Bot, GroupChat, BannedUser from olgram.models.models import Bot, GroupChat, BannedUser
from locales.locale import _ from locales.locale import _, translators
from server.inlines import inline_handler from server.inlines import inline_handler
_logger = logging.getLogger(__name__) _logger = logging.getLogger(__name__)
@ -23,6 +23,10 @@ db_bot_instance: ContextVar[Bot] = ContextVar('db_bot_instance')
_redis: ty.Optional[Redis] = None _redis: ty.Optional[Redis] = None
def _get_translator(message: types.Message) -> ty.Callable:
return translators.get(message.from_user.locale, _)
async def init_redis(): async def init_redis():
global _redis global _redis
_redis = await create_redis_pool(ServerSettings.redis_path()) _redis = await create_redis_pool(ServerSettings.redis_path())
@ -37,6 +41,7 @@ def _thread_uniqie_id(bot_id: int, chat_id: int) -> str:
def _on_security_policy(message: types.Message, bot): def _on_security_policy(message: types.Message, bot):
_ = _get_translator(message)
text = _("<b>Политика конфиденциальности</b>\n\n" text = _("<b>Политика конфиденциальности</b>\n\n"
"Этот бот не хранит ваши сообщения, имя пользователя и @username. При отправке сообщения (кроме команд " "Этот бот не хранит ваши сообщения, имя пользователя и @username. При отправке сообщения (кроме команд "
"/start и /security_policy) ваш идентификатор пользователя записывается в кеш на некоторое время и потом " "/start и /security_policy) ваш идентификатор пользователя записывается в кеш на некоторое время и потом "
@ -79,6 +84,7 @@ async def send_user_message(message: types.Message, super_chat_id: int, bot):
async def handle_user_message(message: types.Message, super_chat_id: int, bot): async def handle_user_message(message: types.Message, super_chat_id: int, bot):
"""Обычный пользователь прислал сообщение в бот, нужно переслать его операторам""" """Обычный пользователь прислал сообщение в бот, нужно переслать его операторам"""
_ = _get_translator(message)
is_super_group = super_chat_id < 0 is_super_group = super_chat_id < 0
# Проверить, не забанен ли пользователь # Проверить, не забанен ли пользователь
@ -118,6 +124,8 @@ async def handle_user_message(message: types.Message, super_chat_id: int, bot):
async def handle_operator_message(message: types.Message, super_chat_id: int, bot): async def handle_operator_message(message: types.Message, super_chat_id: int, bot):
"""Оператор написал что-то, нужно переслать сообщение обратно пользователю, или забанить его и т.д.""" """Оператор написал что-то, нужно переслать сообщение обратно пользователю, или забанить его и т.д."""
_ = _get_translator(message)
if message.reply_to_message: if message.reply_to_message:
if not message.reply_to_message.from_user.is_bot: if not message.reply_to_message.from_user.is_bot:
@ -167,6 +175,7 @@ async def handle_operator_message(message: types.Message, super_chat_id: int, bo
async def message_handler(message: types.Message, *args, **kwargs): async def message_handler(message: types.Message, *args, **kwargs):
_logger.info("message handler") _logger.info("message handler")
_ = _get_translator(message)
bot = db_bot_instance.get() bot = db_bot_instance.get()
if message.text and message.text == "/start": if message.text and message.text == "/start":