Skip to content

feat(desktop): add German (de) locale - #81775

Open
goetterbote2342 wants to merge 1 commit into
NousResearch:mainfrom
goetterbote2342:feat/desktop-german-translation
Open

goetterbote2342 wants to merge 1 commit into
NousResearch:mainfrom
goetterbote2342:feat/desktop-german-translation

Conversation

@goetterbote2342

Copy link
Copy Markdown

Summary

Adds German (de) as a fully translated locale for the Hermes Desktop app, alongside the existing en / zh / zh-hant / ja / ar locales. German is a new language — it was previously not selectable at all.

Changes

File Change
apps/desktop/src/i18n/de.ts New — complete German bundle via defineLocale(), covering every top-level section of the en catalog (~2,600 string keys, including the 72 settings field labels and 30 field descriptions)
apps/desktop/src/i18n/languages.ts de added to LOCALE_OPTIONS + LOCALE_ALIASES (de, de-DE, de-AT, de-CH, german, deutsch)
apps/desktop/src/i18n/types.ts Locale union extended with 'de'
apps/desktop/src/i18n/catalog.ts de registered in TRANSLATIONS
apps/desktop/src/i18n/languages.test.ts Coverage for the new locale + aliases (previous tests asserted de was unsupported)
apps/desktop/src/plugins/kanban/i18n.ts German bundle for the Kanban plugin (167 keys, matches en)

Quality notes

  • Structure validated: every translated key-path was programmatically checked against en.ts and the FIELD_LABELS / FIELD_DESCRIPTIONS trees in constants.ts — no typos in key names, string/function/object shapes match the Translations type 1:1, and all 38 top-level sections are covered. Untranslated keys would fall back to English via the existing runtime fallback (translateFrom), but none are left.
  • Grammar/consistency: informal "du" throughout, German plural handling in count templates, German date/day names in the cron scheduler, quotes as „…“.
  • Tests: languages.test.ts updated for the new locale; no other tests hard-code the locale list (verified by search).

Notes

I could not run tsc/vitest locally (no Node runtime on this machine), so the type check and i18n test suite are pending on CI.

@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 duplicate This issue or pull request already exists labels Aug 8, 2026
@alt-glitch

Copy link
Copy Markdown

This was generated by AI during triage.

Duplicate of #51762: both PRs add the same Desktop German locale through de.ts, locale registration, picker aliases, and tests. #51762 is the earlier open implementation.

@goetterbote2342

Copy link
Copy Markdown
Author

Local verification (before CI)

I got a Node runtime onto the machine and ran the checks locally:

  • tsc --noEmit (TypeScript 5.9, strict): ✅ exit 0 — de.ts is type-conformant against TranslationOverrides via defineLocale(), all touched files compile, and the Kanban de bundle matches KanbanMessages 1:1 (167/167 keys).
  • vitest run (Node 24): ✅ 11/11 tests passed — languages.test.ts (4 tests, including the new de alias/locale assertions) and runtime.test.ts (7 tests, unchanged behavior).
  • Structural check (script): every one of the ~2,900 translated key-paths exists in en.ts / constants.ts with matching string/function/object shapes.

The isolated setup used ambient stubs for unrelated external packages (icons, query libs) — none of the stubs touched the translation files themselves.

@goetterbote2342

Copy link
Copy Markdown
Author

Quick note on the duplicate label: this PR and #51762 do overlap in intent (German desktop locale), but they're not identical — this one additionally covers the Kanban plugin bundle (src/plugins/kanban/i18n.ts, all 167 KanbanMessages keys), which #51762 doesn't touch.

I've posted a comparison over there (#51762 (comment)) proposing that whichever PR the maintainers prefer becomes the base and the Kanban translation from the other lands as a follow-up. Happy to rebase, split out the Kanban part as its own PR, or close if #51762 merges as-is with a follow-up planned — whatever is easiest for review.

Rebased onto current main: the core desktop German locale (de.ts, catalog, languages, types) has since landed upstream, so this PR now carries only the remaining gap — the Kanban plugin bundle, whose KANBAN_LOCALES still lists en/ja/zh/zh-hant only. The de bundle is brought up to the current KanbanMessages shape (200/200 keys parity with en): adds the24 keys added upstream since the original submission (notify.* block, board import/export/rename/switch titles) and drops three keys that no longer exist in the interface, plus the select key now takes the primary-modifier argument.
@goetterbote2342
goetterbote2342 force-pushed the feat/desktop-german-translation branch from 81f944b to 7a59ece Compare September 24, 2026 09:52
@goetterbote2342

Copy link
Copy Markdown
Author

Scope update after rebasing onto current main (7a59ece):

The core desktop German locale this PR originally added — de.ts, catalog.ts, languages.ts, types.ts — has since landed upstream on its own, so those files are no longer part of this PR. What remains is the gap that is still open: the Kanban plugin bundle, where KANBAN_LOCALES is still { en, ja, zh, 'zh-hant' } only.

The de bundle was brought up to the current KanbanMessages shape rather than kept at its August state:

  • 200/200 key parity with en — adds the 24 keys added upstream since submission (notify.* block, board import/export/rename/switch titles, …)
  • drops 3 keys that no longer exist in the interface
  • select now takes the primary-modifier argument

tsc --noEmit is clean for src/plugins/kanban/i18n.ts. Given the core locale is on main now, the duplicate label no longer describes what's left — this is the remaining locale gap for the Kanban surface.

This branch has not been deployed

No deployments
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 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.

2 participants