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:
@@ -55,8 +55,9 @@ class User(Base):
|
||||
id: Mapped[int] = mapped_column(primary_key=True)
|
||||
telegram_id: Mapped[int] = mapped_column(BigInteger, unique=True, nullable=False)
|
||||
username: Mapped[Optional[str]] = mapped_column(String(255))
|
||||
language_interface: Mapped[str] = mapped_column(String(2), default="ru") # ru/en
|
||||
learning_language: Mapped[str] = mapped_column(String(2), default="en") # en
|
||||
language_interface: Mapped[str] = mapped_column(String(2), default="ru") # ru/en/ja - UI language
|
||||
learning_language: Mapped[str] = mapped_column(String(2), default="en") # en/ja - language being learned
|
||||
translation_language: Mapped[Optional[str]] = mapped_column(String(2), default=None) # ru/en/ja - translation target (defaults to language_interface if None)
|
||||
level: Mapped[LanguageLevel] = mapped_column(SQLEnum(LanguageLevel), default=LanguageLevel.A1)
|
||||
levels_by_language: Mapped[Optional[dict]] = mapped_column(JSON, default=None) # {"en": "B1", "ja": "N4"}
|
||||
timezone: Mapped[str] = mapped_column(String(50), default="UTC")
|
||||
|
||||
Reference in New Issue
Block a user