Conversation
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>
|
@Ninso112 — thanks for the thorough review and quality checks on the German translations. 39/39 sections, 100% coverage. 🤝 |
|
@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 A few notes for whoever picks up #51762:
Closing this in favor of #51762. Thanks for the quick review. |
Summary
Adds German (
de) as a fully translated desktop UI locale — all 39 sections of theTranslationsinterface 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 theTranslationsinterface.Built with
defineLocale()— any future English-only keys fall back to English while staying type-checked.Registration (4 files):
Localeunion,LOCALE_OPTIONS(endonymDeutsch),LOCALE_ALIASES(de,de-DE,de-AT,de-CH,de-LI,de-LU,german,deutsch), and translation catalog.Tests:
languages.test.tscoversdenormalization,isSupportedLocaleValue,isLocale, andlocaleConfigValue. All existing i18n tests pass.Translation conventions
defineLocale()merge helper — missing keys degrade to EnglishVerification
main(no conflicts)Translationsinterface sections covered (39/39)vitest run src/i18n/— all tests passAcknowledgments
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.