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:
2025-12-07 16:35:08 +03:00
parent d937b37a3b
commit 3e5c1be464
14 changed files with 360 additions and 81 deletions

View File

@@ -36,6 +36,14 @@ def get_user_lang(user) -> str:
return (getattr(user, 'language_interface', None) if user else None) or 'ru'
def get_user_translation_lang(user) -> str:
"""Получить язык перевода (translation_language или language_interface как fallback)."""
translation_lang = getattr(user, 'translation_language', None) if user else None
if translation_lang:
return translation_lang
return get_user_lang(user)
def t(lang: str, key: str, **kwargs) -> str:
"""Translate key for given lang; fallback to ru and to key itself.