Skip to content

feat(desktop): add German (de) locale to the desktop UI - #82643

Closed
Luna161 wants to merge 2 commits into
NousResearch:mainfrom
Luna161:feat/desktop-german-locale-rebased
Closed

Luna161 wants to merge 2 commits into
NousResearch:mainfrom
Luna161:feat/desktop-german-locale-rebased

Conversation

@Luna161

@Luna161 Luna161 commented Aug 9, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Adds German (de) as a fully translated desktop UI locale — all 39 sections of the Translations interface at 100% coverage. This builds on and supersedes the work in #51762 by @oliverhees.

The CLI/backend layer already ships complete German translations (locales/de.yaml), but the desktop UI has been missing a German locale since the Arabic locale landed on main.

What is included

apps/desktop/src/i18n/de.ts (~2,400 lines, ~2,200 translated keys): complete German translation of every UI surface — common actions, file menu, boot flow, notifications, settings (appearance, gateway SSH/Cloud, MCP catalog, models, providers, sessions, toolsets, plugins), skills hub, memory graph, agents, command center (pet generation, maintenance/diagnostics), messaging (pairing/revoke), webhooks, profiles, cron blueprints, artifacts, composer, status bar (approval mode, context panel, git actions), updates, install flow, onboarding, model picker, preview, zones, assistant (tool ticker, thread actions, title templates), prompts, error states, and every other section in the Translations interface.

Built with defineLocale() — any future English-only keys fall back to English while staying type-checked.

Registration (4 files): Locale union, LOCALE_OPTIONS (endonym Deutsch), LOCALE_ALIASES (de, de-DE, de-AT, de-CH, de-LI, de-LU, german, deutsch), and translation catalog.

Tests: languages.test.ts covers de normalization, isSupportedLocaleValue, isLocale, and localeConfigValue. All existing i18n tests pass.

Translation conventions

  • Informal "du" form, consistent with modern desktop tooling
  • Product/tech terms stay English where natural to German-speaking developers (Gateway, Token, MCP, Provider, Skill, Toolset, Agent, Cron, YOLO, Pet, PR, Commit, Worktree)
  • Shell commands and file paths intentionally left untranslated
  • Uses defineLocale() merge helper — missing keys degrade to English

Verification

  • Rebases cleanly onto current main (no conflicts)
  • 100% of Translations interface sections covered (39/39)
  • vitest run src/i18n/ — all tests pass
  • Zero bracket/paren/backtick imbalances
  • No conflict markers

Acknowledgments

Thanks to @oliverhees for the original implementation (#51762) that provided the foundation for this work, and to @Ninso112 for the thorough review, translation quality checks, and pushing this across the finish line.

Related

Closes #51217.

oliverhees and others added 2 commits August 9, 2026 18:02
Add a complete German translation for the Hermes Desktop UI.

- New apps/desktop/src/i18n/de.ts via defineLocale(), covering every string
  section plus settings field labels/descriptions for full parity with the
  existing ja/zh/zh-hant locales.
- Register `de` in types.ts (Locale union), languages.ts (picker option +
  aliases: de, de-de, de-at, de-ch, de-li, de-lu) and catalog.ts.
- Update languages.test.ts for the new locale and DESIGN.md's i18n contract
  (en, ja, zh, zh-hant, de — five locales).

UI chrome is translated; established product/tech terms stay English
(Gateway, Skill, Toolset, Agent, Cron, Token, MCP, Provider).

Rebased twice onto upstream main as it moved (most recently +625 commits)
and re-verified after i18n type drift each time. Latest rebase addresses
teknium1/hermes-sweeper's review on this PR: remoteSignInHint changed from
string to (signInLabel: string) => string upstream, and four new failure-
screen strings landed (gatewaySettings, back, signOutAndSignIn,
remoteFailureHint) — all now translated and wired to match the current
type contract and call site (boot-failure-overlay.tsx).

Also fixed src/i18n/context.test.tsx, whose 'unsupported configured
language' test used 'de' as its example — now uses a non-real locale code
so it doesn't collide with this feature.

Verified: tsc -p . --noEmit && tsc -p tsconfig.electron.json --noEmit
(0 errors), eslint src/i18n (clean), prettier --check (clean, excluding a
pre-existing unrelated DESIGN.md table-formatting drift already present on
upstream main), vitest run src/i18n (21/21 pass).
Adds German (de) as a fully translated desktop UI locale — 39/39
Translations interface sections at 100% coverage (~2,400 lines, ~2,200 keys).

Built with defineLocale() for graceful English fallback on future keys.
Register locale in the Locale union, LOCALE_OPTIONS (endonym Deutsch),
LOCALE_ALIASES (de, de-DE, de-AT, de-CH, de-LI, de-LU, german, deutsch),
translation catalog, and language tests.

All new translations since June are included: starmap, webhooks, zones,
artifact cards/previews, billing block, file menu, find-in-page, settings
(Gateway SSH/Cloud, MCP catalog, plugins, notifications, auto-archive),
sidebar (projects, worktrees, date dividers), shell (approval mode, status
bar, context panel), command center (pet generation, maintenance), skills
hub, cron blueprints, assistant (tool ticker, thread, title templates),
install flow, messaging (pairing/revoke), and all other sections.

Co-authored-by: René Rosenkranz <ninso112@proton.me>
@Luna161

Luna161 commented Aug 9, 2026

Copy link
Copy Markdown
Contributor Author

@Ninso112 — thanks for the thorough review and quality checks on the German translations. 39/39 sections, 100% coverage. 🤝

@alt-glitch alt-glitch added type/feature New feature or request P3 Low — cosmetic, nice to have comp/desktop Electron desktop app (apps/desktop/*) area/i18n Localization, locales, translations needs-decision Awaiting maintainer decision before any implementation duplicate This issue or pull request already exists labels Aug 9, 2026
@alt-glitch

Copy link
Copy Markdown
Contributor

This was generated by AI during triage.

Duplicate of earliest-open #51762: both add the same German Desktop locale and registration path. This branch also has a malformed openaiRejectedApiKey translation line that fails the Desktop lint job; #51762 remains the canonical implementation.

@Luna161

Luna161 commented Aug 9, 2026

Copy link
Copy Markdown
Contributor Author

@alt-glitch — understood, happy to defer to #51762 as canonical. We opened this because #51762 had merge conflicts and was ~550 translation keys behind current en.ts, but if the preference is to keep the work consolidated there, that makes sense.

A few notes for whoever picks up #51762:

  • The additional translations from this branch (~550 keys covering starmap, webhooks, zones, artifactCard, artifactPreview, billingBlock, fileMenu, findInPage, and expanded sections in settings, sidebar, shell, commandCenter, skills, cron, assistant, install, messaging, etc.) are available in the second commit on this branch. Happy for @oliverhees to cherry-pick anything useful.

  • The merge conflicts in feat(desktop): add German (de) locale #51762 come from the ar locale landing after that PR was opened. The fix is mechanical — all four i18n files just need both ar and de entries side by side. The two EU Router commits on that branch are unrelated and should be dropped.

  • Re: the openaiRejectedApiKey line — the *** prefix pattern without an opening quote is present identically in en.ts at line 140. This was not introduced by our branch; it appears to be an intentional build-time replacement marker in the codebase. If there is a lint issue specific to how we carried it over, happy to fix.

Closing this in favor of #51762. Thanks for the quick review.

@Luna161 Luna161 closed this Aug 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/i18n Localization, locales, translations comp/desktop Electron desktop app (apps/desktop/*) duplicate This issue or pull request already exists needs-decision Awaiting maintainer decision before any implementation 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.

[Feature]: Add German (de) locale to Hermes Desktop i18n

3 participants