feat(i18n): add Russian (ru) locale to Hermes Desktop - #64929
Conversation
Correction: this PR is not a duplicate. Its broad Desktop Russian locale and separate web translations have concrete scope/completeness differences from the ongoing #41677, #40701, and #50083 cluster. The maintainer sweep marked it |
Why this PR should be the canonical ru-locale PRCompared to #40701 (the earliest ru-PR marked as canonical by the triage bot), this PR is objectively more complete and closer to merge-ready:
This PR is a superset: every key from #40701 is also present here, plus 2,200+ additional translations covering all upstream sections added since #40701 was opened. Recent updateJust pushed a comprehensive update adding all 249 missing upstream keys (commandCenter, gateway Cloud, MCP, skills hub, updates, etc.). The locale now covers every section of the Hermes Desktop UI. Merci! |
- Add Russian desktop locale using defineLocale() partial pattern - Populate fieldLabels and fieldDescriptions with Russian translations - Register 'ru' in Locale type, catalog, language picker and aliases - Update web Russian locale
Add 304 lines of Russian translations covering: - assistant tool titles (browser_snapshot, browser_take_screenshot, session_search_recall) - commandCenter maintenance, logs, sections - composer snippets, attachUrl, queueStuckBody - cron createDesc, editDesc, placeholders - desktop handoff, branchStop, restart messages - errors boundaryDesc - messaging noTokenNeeded - onboarding fireworks, openrouter, featuredPitch, flowSubtitles - preview sourceLine, web restarting/reloading - profiles createDesc, cloneFromDesc, editSoul, renameMenu - prompts sudoDesc - rightSidebar noProjectBody - settings.appearance (embedsReset, toolView, translucency, uiScale) - settings.gateway (Cloud mode — 35+ keys) - settings.mcp (22 keys — catalog, status, testing, auth) - settings.model (appliesDesc, auxiliaryDesc, fallbackAdd) - settings.notifications (completionSound, testSent) - settings.sessions (defaultDirUpdated) - settings.toolsets (loadingModels, modelDefault, modelInUse) - shell.statusbar (yoloOff, yoloOn) - sidebar (allPinned, baseBranch, renameDesc, branchOff) - skills (archive, bulkNoChange, disableAll, edit, hub — 50+ keys, provenance, sort, tabs) - updates (applyStatus, stages, manualBody, unsupported)
A stray noTokenNeeded entry was spliced into the middle of the label value in 676b7e0, producing a syntax error that broke vite build. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…application Commit 676b7e0 mis-applied translation hunks, splicing inserted blocks into the middle of existing lines throughout ru.ts. This broke the vite build (multiple syntax errors) and left duplicated and lost keys. - restore 13 cut lines (keys split mid-identifier or mid-string) - remove all duplicated keys the splices introduced (26 pairs) - re-add translations the splices swallowed: updates.stages entries, commandCenter maintenance keys, keybinds terminal/review/voice actions, settings.gateway cloud labels, settings.mcp server/tool toggles, settings.toolsets model labels, skills + hub strings - restore missing closing paren of the defineLocale() call ru.ts now parses cleanly, has zero duplicate keys, and matches en.ts key structure exactly. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Remove 'dismiss' from remoteDisplayBanner (not in type contract) - Remove 'or' and 'escToCancel' from credentials (not in type contract) - Remove 'tokensK' typo (only 'tokens' exists in type contract)
|
Thanks for implementing the Desktop locale with the existing partial-locale pattern. Current Problems
Suggested changes
Automated hermes-sweeper review. |
Suggested tests for
|
|
Superseded by #70673 — clean rebase on fresh upstream main. |
Russian localization for Hermes Desktop
Uses the
defineLocale()partial-locale pattern (same asja.ts) — any missing keys fall back to English, so the locale stays healthy as upstream adds new keys.What is included
apps/desktop/src/i18n/ru.ts) — 2654 lines, all sections translatedfieldLabelsandfieldDescriptionspopulated viadefineFieldCopy()(all config keys)web/src/i18n/ru.ts) — updated Russian translationsruinLocaletype,catalog.ts,languages.ts, and locale aliases (ru,ru-ru,ru_ru)What this fixes from the previous PR
fieldLabelsandfieldDescriptionsnow populated (were empty{})defineLocale()partial pattern (was rigidTranslationstype — breaks on new upstream keys).idea/filesStructure