Add i18n support with Russian language#4987
Open
agrloki wants to merge 107 commits into
Open
Conversation
# Conflicts: # src/agent_loop.py
…ests for i18n - Added `from __future__ import annotations` to 36 source files for Python 3.9 compatibility (upstream uses 3.10+ PEP 604 union syntax) - Added tests/__init__.py (missing module marker) - Updated 5 tests to match i18n replacements of hardcoded English strings: - test_document_deeplink: doc.documentNotFound - test_upload_error_surfaced: settings.failedToSave - test_cookbook_download_toast_duration: cookbook.downloadFailed - test_local_endpoint_api_key_js: added window.__t shim - test_setup_llamacpp_hint_js: upstream removed llama-server string
6 tasks
# Conflicts: # routes/memory_routes.py # src/tool_implementations.py
- Root files: README, CONTRIBUTING, SECURITY, THREAT_MODEL, ROADMAP, ACKNOWLEDGMENTS translated to Russian; originals preserved as *_en.md - docs/: setup, backup-restore, security-ci, agent-migration, email-outlook, pr-blocker-audit moved to docs/en/; Russian translations in docs/ru/ - Internal links updated to point to docs/ru/ in Russian files
# Conflicts: # routes/cookbook_routes.py # src/tool_implementations.py # src/tools/calendar.py # static/app.js # static/index.html # static/js/admin.js # static/js/calendar.js # static/js/chat.js # static/js/cookbook-hwfit.js # static/js/cookbookServe.js # static/js/document.js # static/js/emailLibrary.js # static/js/gallery.js # static/js/research/panel.js # static/js/sessions.js # static/js/settings.js # static/js/tasks.js # tests/test_cookbook_cpu_only_serve.py
Upstream added tests that import src/tools/* which was removed during the i18n merge. Restored from upstream/dev.
… status, admin privileges) - Email Translation card: data-i18n for auto-translate toggle, translate-to input - Search tab: labels for URL, API Key, CX ID, Fallbacks, Test button - settings.js: wrapped status messages (max tokens, extract, parallel, agent limits) - admin.js: wrapped PRIV_LABELS and endpoint placeholders with __t() - Added ~38 new locale keys to en.js and ru.js (2868 total)
# Conflicts: # tests/run_focus.py
- Add kokoro + soundfile to requirements-optional.txt - Add CPU fallback to _KokoroPipeline (auto-detects CUDA, falls back to CPU) - Update Dockerfile with INSTALL_SPEECH/INSTALL_SPEECH_GPU build args - Add docker/speech.yml and docker/speech.gpu.yml compose overlays - Add stt_health() and tts_health() to service diagnostics - Add .env.example documentation for local speech setup - Add scripts/prefetch-speech-models.py for model pre-download
…ut sending to agent
…to auth exemptions
…n headers and descriptions
…ve panel labels, tooltips, toasts
…r deep integration
…t and extend tool parser for local model JSON format
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds a complete internationalization (i18n) system to the Odysseus frontend with Russian as the first non-English language. ~2830 translation keys covering all UI modules, two locale files (en/ru), and a lightweight custom i18n engine.
Target branch
dev, notmain. All PRs land indev;mainis curated by the maintainer at each release. If your PR is onmainby accident, click "Edit" on this PR and change the base.Linked Issue
Fixes #58
Type of Change
Checklist
devdocker compose uporuvicorn app:app) and verified the change works end-to-end. Type-checks and unit tests are not enough.How to Test
AUTH_ENABLED=true)Step 1: Verify language switcher works
http://localhost:7000in browserStep 2: Test sidebar navigation
Step 3: Test Settings modal — Appearance tab
Step 4: Test Settings modal — Shortcuts tab
Step 5: Test other Settings tabs
Step 6: Test chat functionality
Step 7: Test modules
Step 8: Switch back to English
settings.vis.brain) appear anywhereStep 9: Test browser persistence
http://localhost:7000localStorage)Step 10: Check browser console
i18nerrors, no missing key warnings__t is not definederrorsVisual / UI changes — REQUIRED if you touched anything that renders
Anything that changes what the UI looks like — buttons, icons, padding, colors, fonts, spacing, layout, CSS, HTML, SVG, or any
static/js/module that draws to the DOM — needs all of the following. PRs that change rendering without these WILL be closed.--red,--fg,--bg,--card,--border, etc.) — do not introduce new color values, font sizes, or spacing units.static/index.html) or plain text.Fira Code) for primary UI text. Don't override.Screenshots / clips