From 8bf3504d8d2dad257bbe757b9330e80743ffcab6 Mon Sep 17 00:00:00 2001 From: "mamonov.ep" Date: Thu, 4 Dec 2025 21:37:40 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=BC=D0=BF=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ bot/handlers/practice.py | 51 +++++++++++++++++++++++++++++++++------- 2 files changed, 45 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 0c51f76..1829b51 100644 --- a/README.md +++ b/README.md @@ -287,6 +287,8 @@ bot_tg_language/ - [x] Spaced repetition алгоритм (базовая версия) - [x] Напоминания и ежедневные задания по расписанию - [x] Убрать переводы текстов (скрыть перевод в упражнениях/диалогах/тестах) +- [x] Добавлены английский и японский в локализацию интерфейса +- [x] Добавлены языки для обучения **Следующие улучшения:** - [ ] Экспорт словаря (PDF, Anki, CSV) diff --git a/bot/handlers/practice.py b/bot/handlers/practice.py index b41d098..5ae7716 100644 --- a/bot/handlers/practice.py +++ b/bot/handlers/practice.py @@ -100,9 +100,14 @@ async def start_scenario(callback: CallbackQuery, state: FSMContext): # Формируем сообщение (перевод скрыт, доступен по кнопке) ai_msg = conversation_start.get('message', '') if learn_lang.lower() == 'ja': - fg = conversation_start.get('furigana') - if fg: - ai_msg = f"{ai_msg} ({fg})" + annotated = conversation_start.get('message_annotated') + if annotated: + ai_msg = annotated + else: + # Фолбэк к старому формату с общим furigana + fg = conversation_start.get('furigana') + if fg: + ai_msg = f"{ai_msg} ({fg})" text = ( f"{SCENARIOS[scenario].get(ui_lang, SCENARIOS[scenario]['ru'])}\n\n" @@ -112,7 +117,21 @@ async def start_scenario(callback: CallbackQuery, state: FSMContext): ) for suggestion in conversation_start.get('suggestions', []): - text += f"• {suggestion}\n" + if isinstance(suggestion, dict): + # Для японского стараемся брать learn_annotated + if learn_lang.lower() == 'ja': + learn_text = suggestion.get('learn_annotated') or suggestion.get('learn') or '' + else: + learn_text = suggestion.get('learn') or '' + trans_text = suggestion.get('trans') or '' + else: + learn_text = str(suggestion) + trans_text = '' + # В спойлере — язык изучения, в скобках — перевод на язык интерфейса + if trans_text: + text += f"• {learn_text} ({trans_text})\n" + else: + text += f"• {learn_text}\n" text += t(ui_lang, 'practice.write_or_stop') @@ -242,9 +261,13 @@ async def handle_conversation(message: Message, state: FSMContext): # Ответ AI (с фуриганой для японского) resp = ai_response.get('response', '') if learn_lang2.lower() == 'ja': - fg = ai_response.get('furigana') - if fg: - resp = f"{resp} ({fg})" + annotated = ai_response.get('response_annotated') + if annotated: + resp = annotated + else: + fg = ai_response.get('furigana') + if fg: + resp = f"{resp} ({fg})" text += f"AI: {resp}\n\n" # Подсказки @@ -252,7 +275,19 @@ async def handle_conversation(message: Message, state: FSMContext): if suggestions: text += t(ui_lang2, 'practice.hints') + "\n" for suggestion in suggestions[:3]: - text += f"• {suggestion}\n" + if isinstance(suggestion, dict): + if learn_lang2.lower() == 'ja': + learn_text = suggestion.get('learn_annotated') or suggestion.get('learn') or '' + else: + learn_text = suggestion.get('learn') or '' + trans_text = suggestion.get('trans') or '' + else: + learn_text = str(suggestion) + trans_text = '' + if trans_text: + text += f"• {learn_text} ({trans_text})\n" + else: + text += f"• {learn_text}\n" # Сохраняем перевод под новым индексом translations = data.get('translations', {}) or {}