[документация]defset_locale(locale_name):"""Set locale for particular user."""locales_path=os.path.join(os.path.dirname(__file__),"locales")try:translation=gettext.translation("translations",localedir=locales_path,languages=[locale_name],fallback=True)translation.install()global_globalngettext_=translation.gettextngettext=translation.ngettextexceptExceptionase:print(f"Locale error: {e}")translation=gettext.NullTranslations()translation.install()_=translation.gettextngettext=translation.ngettext
[документация]classButtonText:"""Текст кнопочек в телеграмме"""SET_EN="English"SET_RU="Русский"
[документация]defmenu_buttons()->InlineKeyboardMarkup:"""Inline-клавиатура для основного меню"""builder=InlineKeyboardBuilder()# Добавляем кнопки с callback_databuilder.row(InlineKeyboardButton(text=_("Удалить шум с изображения"),callback_data="remove_noise"))builder.row(InlineKeyboardButton(text=_("Сгенерировать изображение"),callback_data="generate_image"))builder.row(InlineKeyboardButton(text=_("Посмотреть историю"),callback_data="view_history"))builder.row(InlineKeyboardButton(text=_("Магия"),callback_data="magic_action"))returnbuilder.as_markup()
[документация]deflanguage_buttons()->InlineKeyboardMarkup:"""Показ кнопок выбора языка (инлайн клавиатура)"""builder=InlineKeyboardBuilder()builder.button(text=ButtonText.SET_RU,callback_data="lang_ru_RU")builder.button(text=ButtonText.SET_EN,callback_data="lang_en_EN")builder.adjust(2)returnbuilder.as_markup()
[документация]@start.message(CommandStart())asyncdefcommand_start(message:Message,state:FSMContext,supabase_client:sb.Client)->None:"""Обработка команды /start - сначала выбор языка."""awaitstate.set_state(Form.set_language)awaitmessage.answer("Пожалуйста, выберите язык / Please choose your language:",reply_markup=language_buttons(),)
[документация]@start.callback_query(Form.set_language,F.data.startswith("lang_"))asyncdefprocess_language_selection(callback:CallbackQuery,state:FSMContext,supabase_client:sb.Client):"""Обработка выбора языка."""language=callback.data.split("_")[1]user_langs[callback.from_user.id]=languageset_locale(language)awaitcallback.message.edit_text(text=_("Выбран русский язык"),reply_markup=None)awaitcallback.message.answer(_("Выберите действие:"),reply_markup=menu_buttons())awaitstate.set_state(Form.is_choosing)awaitcallback.answer()
[документация]@start.message(Form.buttons)asyncdefshow_main_menu(message:Message):"""Показ главного меню по текстовому сообщению от пользователя."""print("_SHOW MAIN MENU_")awaitmessage.answer(_("Выберите действие:"),reply_markup=menu_buttons())