feat: add translation language setting & onboarding flow
- Add separate translation_language setting (independent from interface language) - Implement 3-step onboarding for new users: 1. Choose interface language 2. Choose learning language 3. Choose translation language - Fix localization issues when using callback.message (user_id from state) - Add UserService.get_user_by_id() method - Add get_user_translation_lang() helper in i18n - Update all handlers to use correct translation language - Add localization keys for onboarding (ru/en/ja) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -9,7 +9,7 @@ from database.models import WordSource
|
||||
from services.user_service import UserService
|
||||
from services.vocabulary_service import VocabularyService
|
||||
from services.ai_service import ai_service
|
||||
from utils.i18n import t, get_user_lang
|
||||
from utils.i18n import t, get_user_lang, get_user_translation_lang
|
||||
|
||||
router = Router()
|
||||
|
||||
@@ -73,9 +73,9 @@ async def process_word_addition(message: Message, state: FSMContext, word: str):
|
||||
async with async_session_maker() as session:
|
||||
user = await UserService.get_user_by_telegram_id(session, message.from_user.id)
|
||||
source_lang = user.learning_language if user else 'en'
|
||||
ui_lang = user.language_interface if user else 'ru'
|
||||
translation_lang = get_user_translation_lang(user)
|
||||
word_data = await ai_service.translate_word_with_contexts(
|
||||
word, source_lang=source_lang, translation_lang=ui_lang, max_translations=3
|
||||
word, source_lang=source_lang, translation_lang=translation_lang, max_translations=3
|
||||
)
|
||||
|
||||
# Удаляем сообщение о загрузке
|
||||
@@ -141,7 +141,8 @@ async def confirm_add_word(callback: CallbackQuery, state: FSMContext):
|
||||
# Получаем пользователя для языков
|
||||
user = await UserService.get_user_by_telegram_id(session, callback.from_user.id)
|
||||
source_lang = user.learning_language if user else 'en'
|
||||
ui_lang = user.language_interface if user else 'ru'
|
||||
translation_lang = get_user_translation_lang(user)
|
||||
ui_lang = get_user_lang(user)
|
||||
|
||||
# Добавляем слово в базу
|
||||
new_word = await VocabularyService.add_word(
|
||||
@@ -150,7 +151,7 @@ async def confirm_add_word(callback: CallbackQuery, state: FSMContext):
|
||||
word_original=word_data["word"],
|
||||
word_translation=word_data["translation"],
|
||||
source_lang=source_lang,
|
||||
translation_lang=ui_lang,
|
||||
translation_lang=translation_lang,
|
||||
transcription=word_data.get("transcription"),
|
||||
category=word_data.get("category"),
|
||||
difficulty_level=word_data.get("difficulty"),
|
||||
@@ -168,7 +169,7 @@ async def confirm_add_word(callback: CallbackQuery, state: FSMContext):
|
||||
|
||||
# Получаем общее количество слов
|
||||
words_count = await VocabularyService.get_words_count(session, user_id, learning_lang=user.learning_language)
|
||||
lang = ui_lang or 'ru'
|
||||
lang = ui_lang
|
||||
|
||||
await callback.message.edit_text(
|
||||
t(lang, 'add.added_success', word=word_data['word'], count=words_count)
|
||||
|
||||
Reference in New Issue
Block a user