feat: JLPT levels for Japanese, custom practice scenarios, UI improvements
- Add separate level systems: CEFR (A1-C2) for European languages, JLPT (N5-N1) for Japanese - Store levels per language in new `levels_by_language` JSON field - Add custom scenario option in AI practice mode - Show action buttons after practice ends (new dialogue, tasks, words) - Fix level display across all handlers to use correct level system - Add Alembic migration for levels_by_language field - Update all locale files (ru, en, ja) with new keys 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -13,6 +13,7 @@ from aiogram.fsm.context import FSMContext
|
||||
from database.db import async_session_maker
|
||||
from services.user_service import UserService
|
||||
from utils.i18n import t
|
||||
from utils.levels import get_user_level_for_language
|
||||
|
||||
router = Router()
|
||||
|
||||
@@ -185,10 +186,11 @@ async def pick_theme_from_menu(callback: CallbackQuery, state: FSMContext):
|
||||
return
|
||||
|
||||
lang = (user.language_interface or 'ru')
|
||||
current_level = get_user_level_for_language(user)
|
||||
generating = await callback.message.answer(t(lang, 'words.generating', theme=theme))
|
||||
words = await ai_service.generate_thematic_words(
|
||||
theme=theme,
|
||||
level=user.level.value,
|
||||
level=current_level,
|
||||
count=10,
|
||||
learning_lang=user.learning_language,
|
||||
translation_lang=user.language_interface,
|
||||
@@ -200,7 +202,7 @@ async def pick_theme_from_menu(callback: CallbackQuery, state: FSMContext):
|
||||
return
|
||||
|
||||
# Сохраняем в состояние как в /words
|
||||
await state.update_data(theme=theme, words=words, user_id=user.id, level=user.level.name)
|
||||
await state.update_data(theme=theme, words=words, user_id=user.id, level=current_level)
|
||||
await state.set_state(WordsStates.viewing_words)
|
||||
|
||||
await show_words_list(callback.message, words, theme)
|
||||
|
||||
Reference in New Issue
Block a user