Skip to content

feat(desktop,i18n): Hermes Desktop speaks Russian (#84418, salvage #42705) - #100429

Merged
teknium1 merged 2 commits into
mainfrom
salvage/desktop-ru-locale
Sep 1, 2026
Merged

teknium1 merged 2 commits into
mainfrom
salvage/desktop-ru-locale

Conversation

@teknium1

@teknium1 teknium1 commented Sep 1, 2026

Copy link
Copy Markdown
Collaborator

Adds the Russian (ru) locale to Hermes Desktop, closing the gap tracked in #84418: the agent core already ships locales/ru.yaml and the web dashboard has web/src/i18n/ru.ts, but the desktop app only offered en/zh/zh-hant/ja/ar.

Credit

This is a salvage PR consolidating a 7-PR duplicate cluster:

Duplicate PRs superseded by this one (left open for maintainer disposition, not closed by this PR): #42705, #66833 (@timoncool), #70499 (@Gromakoff), #70673 (@saimon4eg), #78483 (@konstantin969696), #91780 (@FASTCHIP), #92096 (@systemINTERNET). Thanks to all of you — seven independent submissions is a strong signal this was wanted.

Related but separate scope (dashboard web/ ru completion, NOT included here): #88444, #97969.

Why #91780 as the base

  • Narrow 4-file footprint touching exactly the i18n seam (ru.ts, languages.ts, types.ts, catalog.ts); only 3 lines of deletions.
  • Largest/most current catalog of the cluster (3,662 lines vs ~2,900 in the July PRs), tracking a much newer en.ts.
  • Follows the current conventions exactly: defineLocale() partial catalog with English fallback, defineFieldCopy() for settings field labels/descriptions (the ja/zh-hant pattern — no separate ru-constants.ts file like older entries used), and proper Russian plural forms via RU_PLURAL/RU_NOUN helpers (one/few/many).
  • Only one trivial conflict on cherry-pick (types.ts Locale union vs. the newer TipId import), vs. 9,000–10,000+ commits of staleness on the July entries.

What's in the follow-up commit

  • Translated the handful of leftover untranslated "toolset(s)" strings in ru.ts into natural Russian («набор инструментов»).
  • languages.test.ts: ru alias/isLocale/localeConfigValue coverage, mirroring exactly how ar (the most recently added locale, 5b6990e) was wired. No context.tsx changes needed — Russian is LTR, so the RTL plumbing from the ar commit doesn't apply.
  • website/docs/user-guide/desktop.md: the UI language switcher bullet now lists all six desktop locales including Russian.

Wiring checklist (mirrors the ar locale commit's touchpoints)

  • types.ts'ru' in the Locale union
  • catalog.tsru imported and registered in TRANSLATIONS
  • languages.tsLOCALE_OPTIONS entry (endonym Русский, englishName Russian) + aliases ru, ru-ru, ru_ru, ru-by, ru-kz, russian, русский (incl. common misspelling руский)
  • languages.test.ts — alias/id/config-value coverage
  • Docs updated in the same PR
  • defineLocale() partial → any key added to en.ts later falls back to English cleanly (verified: parity probe shows fallback handles the delta; tsc --build clean)

Verification

  • npx vitest run src/i18n/4 files, 28 tests passed
  • npx tsc --build tsconfig.json → clean
  • npx eslint on all touched i18n files → clean
  • python3 scripts/audit_pr_attribution.py → all contributor emails mapped (FASTCHIP uses an id+login@users.noreply address; CI auto-resolves)
  • Translation spot-check: natural Russian with correct ё usage, «…» quoting, and grammatical plural forms

Closes #84418.

Infographic

Hermes Desktop speaks Russian

FASTCHIP and others added 2 commits September 1, 2026 08:14
Full desktop UI translation (ru.ts, 3076 string/function leaves,
mirrors en.ts 1:1) plus locale registration in types, catalog and
language list with aliases (ru, ru-ru, ru_ru, ru-by).

Russian plurals (1 / 2-4 / 5+, 11-14 exception) via RU_PLURAL/RU_NOUN
helpers; count accepts number | string to match en.ts signatures.

Verified against current main: structural validation 3076/3076 with
placeholder parity, typecheck (renderer/electron/e2e) clean,
i18n vitest 28/28, prettier + eslint clean.
…ests/docs

- Translate leftover English 'toolset(s)' strings in ru.ts
- Cover ru aliases/config value in languages.test.ts (parity with ar)
- List Russian among desktop UI languages in website/docs/user-guide/desktop.md
@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

૮ >ﻌ< ა ci review

ran on 9103f78 — fix(desktop,i18n): polish Russian catalog and register ru in

⚠️ Warnings

OSV vulnerability scan · View job

6 known vulnerabilities found in pinned dependencies.

How to fix:

Review the findings in the Security tab. Update the affected dependencies if a patched version is available.


debug info

CI timings

CI timings · View report · View job

Wall time 4m26s vs 5m25s (-18.2%). 6 job(s) slower, 8 faster, 1 unchanged.

  • Docs Site / docs-site-checks: +19.0s
  • OS-specific tests / macOS-only tests: -13.0s
  • Check contributors / check-attribution: -10.0s
  • Python lints / Windows footguns (blocking): -8.0s
  • Python tests / Run tests: +4.0s

@alt-glitch alt-glitch added type/feature New feature or request comp/desktop Electron desktop app (apps/desktop/*) P3 Low — cosmetic, nice to have labels Sep 1, 2026
@alt-glitch

Copy link
Copy Markdown
Contributor

This was generated by AI during triage.

Supersedes the related Desktop Russian localization implementations #42705 and #91780 as the focused maintainer salvage.

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/*) 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.

Desktop app: add Russian (ru) to UI language picker

3 participants