Skip to content

feat(i18n): add Russian (ru) locale for desktop app#46634

Open
Anatoly17 wants to merge 2 commits into
NousResearch:mainfrom
Anatoly17:feat/i18n-russian-locale
Open

feat(i18n): add Russian (ru) locale for desktop app#46634
Anatoly17 wants to merge 2 commits into
NousResearch:mainfrom
Anatoly17:feat/i18n-russian-locale

Conversation

@Anatoly17

@Anatoly17 Anatoly17 commented Jun 15, 2026

Copy link
Copy Markdown

Full Russian translation for all desktop UI strings (~1000 lines). Adds ru.ts translation file and registers the locale in types.ts, languages.ts, and catalog.ts. Uses defineLocale() for English fallback on any untranslated strings.

What does this PR do?

Adds a full Russian (ru) locale for the Hermes Desktop UI

Related Issue

Fixes # (no issue)

Type of Change

  • 🐛 Bug fix (non-breaking change that fixes an issue)
  • ✨ New feature (non-breaking change that adds functionality)
  • 🔒 Security fix
  • 📝 Documentation update
  • ✅ Tests (adding or improving test coverage)
  • ♻️ Refactor (no behavior change)
  • 🎯 New skill (bundled or hub)

Changes Made

  • Added apps/desktop/src/i18n/ru.ts with ~1000 translated strings

  • Registered 'ru' in types.ts, languages.ts (aliases: ru, ru-ru), and catalog.ts

  • Used defineLocale() so future untranslated keys fall back to English automatically

How to Test

  1. Launch Hermes Desktop
  2. Go to Settings → Language
  3. Select "Русский"
  4. Verify all UI elements display in Russian

Checklist

Code

  • I've read the Contributing Guide
  • My commit messages follow Conventional Commits (fix(scope):, feat(scope):, etc.)
  • I searched for existing PRs to make sure this isn't a duplicate
  • My PR contains only changes related to this fix/feature (no unrelated commits)
  • I've run pytest tests/ -q and all tests pass
  • I've added tests for my changes (required for bug fixes, strongly encouraged for features)
  • I've tested on my platform:

Documentation & Housekeeping

  • I've updated relevant documentation (README, docs/, docstrings) — or N/A
  • I've updated cli-config.yaml.example if I added/changed config keys — or N/A
  • I've updated CONTRIBUTING.md or AGENTS.md if I changed architecture or workflows — or N/A
  • I've considered cross-platform impact (Windows, macOS) per the compatibility guide — or N/A
  • I've updated tool descriptions/schemas if I changed tool behavior — or N/A

For New Skills

  • This skill is broadly useful to most users (if bundled) — see Contributing Guide
  • SKILL.md follows the standard format (frontmatter, trigger conditions, steps, pitfalls)
  • No external dependencies that aren't already available (prefer stdlib, curl, existing Hermes tools)
  • I've tested the skill end-to-end: hermes --toolsets skills -q "Use the X skill to do Y"

Screenshots / Logs

@alt-glitch alt-glitch added type/feature New feature or request comp/tui Terminal UI (ui-tui/ + tui_gateway/) P3 Low — cosmetic, nice to have duplicate This issue or pull request already exists labels Jun 15, 2026
@alt-glitch

Copy link
Copy Markdown
Collaborator

Duplicate of #41677 — both add a full Russian (ru) locale for the Desktop app i18n (catalog/languages/ru.ts/types). #41677 is the earliest still-open PR in this saturated ru-i18n cluster (also competing: #40701, #42705). Marking this as duplicate of the canonical open PR.

@alt-glitch alt-glitch added comp/desktop Electron desktop app (apps/desktop/*) and removed comp/tui Terminal UI (ui-tui/ + tui_gateway/) labels Jun 26, 2026
Full Russian translation for all desktop UI strings. Registers the locale in types.ts, languages.ts, and catalog.ts, and uses defineLocale() so any untranslated string falls back to English.

Adds pluralRu()/countRu() helpers with correct Russian plural rules (incl. the 11-14 exception) and routes all count-based strings through them. Reconciled against current main: dropped removed keys (credentials.or/escToCancel, providers.removeExternal->removeExternalGeneric, agents.tokensK, commandCenter.restartMessaging, sidebar.reorderWorkspace, modelPicker.persistGlobal(Session), clarify.shortcutSuffix/back/send) and moved desktop.branchTitle to its count form.
@Anatoly17 Anatoly17 force-pushed the feat/i18n-russian-locale branch from 2e38e46 to b23a07f Compare July 9, 2026 11:42
@DrMaks22

DrMaks22 commented Jul 9, 2026

Copy link
Copy Markdown

I did another live Desktop QA pass against the current RU Desktop branch and found a few remaining English fallback surfaces, especially the intro/welcome copy, project/sidebar actions, cron counters, context usage, preview save errors, assistant resume copy, and tool-title wrappers.

I opened a focused follow-up PR into the canonical RU branch here: Anatoly17#2

Verification on that patch:

  • npm run typecheck --workspace apps/desktop
  • npm run test:ui --workspace apps/desktop -- src/i18n/languages.test.ts src/i18n/runtime.test.ts src/i18n/context.test.tsx src/components/language-switcher.test.tsx
  • git diff --check for the touched Desktop i18n files
  • live smoke-tested in a separate local macOS bundle (Hermes RU Test.app), leaving the main Hermes.app untouched

The wording pass also removes several unnecessary English/Russian hybrids from the Russian intro copy while preserving command names, provider names, tool ids, paths, and technical tokens where they should remain unchanged.

@DrMaks22

DrMaks22 commented Jul 9, 2026

Copy link
Copy Markdown

A follow-up patch for the newly spotted RU desktop gaps is ready here: Anatoly17#2 (latest commit 374e079).

It addresses the screenshots with remaining English in:

  • Settings → Model → Mixture of Agents: preset/reference/aggregator controls and explanatory copy now go through the existing i18n catalog.
  • Messaging → Telegram: onboarding intro plus allow-all-users and home-channel/thread field labels/help now have RU copy instead of falling back to backend English.
  • The stale auxiliary-model warning is also localized with Russian count handling.

Validation on the patch branch is green:

  • npm run typecheck --workspace apps/desktop
  • npm run test:ui --workspace apps/desktop -- src/i18n/languages.test.ts src/i18n/runtime.test.ts src/i18n/context.test.tsx src/components/language-switcher.test.tsx
  • git diff --check
  • local Hermes RU Test.app pack/install smoke build

Recommended next step: fold/merge Anatoly17#2 into this canonical RU Desktop PR so #46634 carries the screenshot-driven polish before maintainer review.

@Anatoly17

Copy link
Copy Markdown
Author

Thanks for the thorough QA pass, @DrMaks22 — the MoA / intro / stale-aux English-fallback gaps you spotted are real and worth fixing.

That said, I'd like to keep #46634 scoped to the Russian locale itself (the ru.ts translation plus its registration), so it stays a small, focused, easy-to-review PR. Anatoly17#2 goes further: it refactors components (intro.tsx, model-settings.tsx) and extends the shared catalog (en.ts, types.ts, zh.ts), which affects the base English UI and all locales — not just Russian. That's genuinely useful work, but it's a separate concern from "add the RU locale," and it deserves review by the maintainers who own those components.

Could you open #2 as its own PR directly against NousResearch/hermes-agent:main? That way the component / i18n-catalog work lands on its own merits with clear attribution, and the RU locale PR stays focused. I'm happy to translate any new keys it introduces into Russian once the catalog changes are settled.

Thanks again for the collaboration.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp/desktop Electron desktop app (apps/desktop/*) duplicate This issue or pull request already exists P3 Low — cosmetic, nice to have type/feature New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants