from pathlib import Path from aiogram import Bot, Dispatcher, executor, types from aiogram.contrib.middlewares.i18n import I18nMiddleware TOKEN = 'BOT_TOKEN_HERE' I18N_DOMAIN = 'mybot' BASE_DIR = Path(__file__).parent LOCALES_DIR = BASE_DIR / 'locales' bot = Bot(TOKEN, parse_mode=types.ParseMode.HTML) dp = Dispatcher(bot) # Setup i18n middleware i18n = I18nMiddleware(I18N_DOMAIN, LOCALES_DIR) dp.middleware.setup(i18n) # Alias for gettext method _ = i18n.gettext @dp.message_handler(commands='start') async def cmd_start(message: types.Message): # Simply use `_('message')` instead of `'message'` and never use f-strings for translatable texts. await message.reply( _('Hello, <b>{user}</b>!').format(user=message.from_user.full_name)) @dp.message_handler(commands='lang') async def cmd_lang(message: types.Message, locale):
from pathlib import Path from logbook.compat import LoggingHandler from aiohttp.web import Application from aiogram import Bot, Dispatcher from aiogram.contrib.middlewares.i18n import I18nMiddleware from .conf import config PROJECT_NAME = 'alarmbot' LOCALES_DIR = Path(__file__).parent.parent / 'locales' app = Application() # Initialize bot and dispatcher bot = Bot(token=config.TELEGRAM_TOKEN) dp = Dispatcher(bot) i18n = I18nMiddleware(PROJECT_NAME, LOCALES_DIR) dp.middleware.setup(i18n) LoggingHandler().push_application()
import logging.config import aiohttp from aiogram import Bot, Dispatcher from aiogram.contrib.fsm_storage.redis import RedisStorage2 from aiogram.contrib.middlewares.i18n import I18nMiddleware from babel.support import LazyProxy from environs import Env env = Env() settings_name = env("BOT_SETTINGS_MODULE", "bot.settings.production") settings = importlib.import_module(settings_name) logging.config.dictConfig(settings.LOGGING) bot = Bot(settings.BOT_TOKEN) dp = Dispatcher(bot, storage=RedisStorage2(**settings.FSM_STORAGE)) i18n = I18nMiddleware(settings.I18N_DOMAIN, settings.LOCALES_DIR) dp.middleware.setup(i18n) _ = i18n.gettext def N_(*args, **kwargs) -> LazyProxy: return i18n.lazy_gettext(*args, enable_cache=False, **kwargs)