Skip to content

fix(i18n): complete and clean up German (de-DE) common translations#8289

Open
tobiasheinrichfaska wants to merge 3 commits into
janhq:mainfrom
tobiasheinrichfaska:fix/de-translation-common
Open

fix(i18n): complete and clean up German (de-DE) common translations#8289
tobiasheinrichfaska wants to merge 3 commits into
janhq:mainfrom
tobiasheinrichfaska:fix/de-translation-common

Conversation

@tobiasheinrichfaska
Copy link
Copy Markdown

de-DE: complete + clean up common.json

This adds the missing German keys, fixes existing translations (compound
spelling, daßdass, stray formal Sie, ModelModell, a gender slip,
trailing/leading spaces, word order), and standardizes terminology
(AnbieterProvider, capitalized informal Du). Part of #8221.

All 84 previously-missing keys are now translated; the only values left equal to
English are intentional (proper nouns / identical-in-German: Hardware, Hub, Name,
Vision, Jan, etc.).

A terminology question — and why this PR has two commits:

The UI uses three English terms that look interchangeable to me — "thread",
"chat", and "conversation" (e.g. newThread "New Thread" vs newChat
"New Chat", conversationNotAvailable, projects.conversationsIn "Conversations
in …" next to deleteAllThreads).

To make this reviewable, the work is split into two commits:

  1. Translate without unifying — every string is translated/fixed while
    keeping the original thread / chat / conversation wording distinct.
  2. Unify to "Chat" — renders all three with one user-facing German word
    ("Chat") for a consistent UI.

If "thread", "chat" and "conversation" are indeed the same concept, please take
both commits. If you intend a distinction I should preserve, just drop commit 2
and I'll keep commit 1 (or mirror whatever distinction you specify).

🤖 Generated with Claude Code

tobiasheinrichfaska and others added 2 commits June 6, 2026 18:00
Add the 84 missing keys, translate the remaining English-leftover values,
and fix existing translations: compound-noun spacing, old "daß"->"dass"
spelling, stray formal "Sie" -> informal "Du", "Model"->"Modell" typos,
a gender slip (KI -> "ihres"), trailing/leading spaces, and word order.
Also standardize "Anbieter"->"Provider" and capitalize informal address.

This commit keeps the original thread / chat / conversation wording distinct.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Render the three interchangeable English terms (thread, chat, conversation)
with a single user-facing German word, "Chat", for a consistent UI.

If these are meant to be distinct concepts, this commit can be dropped while
keeping the previous one.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@tokamak-pm
Copy link
Copy Markdown

tokamak-pm Bot commented Jun 7, 2026

PR Review: fix(i18n): complete and clean up German (de-DE) common translations

Summary of Changes

This PR updates web-app/src/locales/de-DE/common.json across two commits:

  1. Commit 1 (a8f3140): Translates all 84 missing keys, fixes existing translations (compound-noun spacing, daß -> dass, formal Sie -> informal Du, Model -> Modell, trailing/leading spaces, word order), and standardizes terminology (Anbieter -> Provider).
  2. Commit 2 (e8dd710): Unifies thread/chat/conversation to a single German word "Chat" for UI consistency.

The PR is well-structured: 220 additions, 110 deletions, touching only the single translation file. The two-commit strategy is thoughtful -- it lets maintainers choose whether to accept the terminology unification or keep distinctions.

Quality Assessment

Positives:

  • All 84 previously-missing keys are now translated.
  • Compound noun fixes are correct per German orthography (API Server -> API-Server, Daten Ordner -> Datenordner, Web Suche -> Websuche, etc.).
  • Spelling modernization daß -> dass is correct (post-1996 reform).
  • next: "Nächster" -> "Weiter" is a good contextual fix (button label).
  • interface and appearance now have distinct translations (Benutzeroberfläche vs. Darstellung) instead of both being Erscheinung.
  • The llamacppBusyOnExit section is fully translated (was entirely English before).
  • New sections like missingDependenciesDialog, attachmentsIngestion, toast.uploadFailed.*, modelSettings.mtp, and errors are all well-translated.
  • The PR description is excellent -- clearly explains the rationale and asks the right questions.

Values intentionally left as English are reasonable: Hardware, Hub, Name, Vision, Jan, Claude Code -- these are proper nouns or standard loanwords in German tech context.

Issues Found

1. Remaining formal "Sie" inconsistency (minor fix needed)

projects.deleteProjectDialog.description still reads:

"Sind Sie sicher, dass Sie dieses Projekt löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden."

This is the only remaining instance of formal address in the entire file. Every other confirmation dialog uses informal Du (e.g., deleteAllThreadsConfirm, deleteModel.description, deleteProvider.confirmDescription, dialogs.deleteThread.description). This should be changed to:

"Bist Du sicher, dass Du dieses Projekt löschen möchtest? Diese Aktion kann nicht rückgängig gemacht werden."

Note: this key (projects.deleteProjectDialog.description) does not exist in the English source file, so it may be a vestigial key. If so, it could also just be removed.

2. mcpServers.command vs. mcpServers.enterCommand inconsistency (nit)

command was changed from "Kommando" to "Befehl", but enterCommand was left as "Kommando eingeben". These should use the same term -- either "Befehl eingeben" or both should stay as "Kommando".

3. Pre-existing typo not addressed (nit, not blocking)

toast.editMessage.description contains "...die Antwort des Models." -- "Models" is not valid German genitive. It should be "Modells" (genitive of "Modell"). This is a pre-existing bug, not introduced by this PR, but since the PR's scope is cleaning up the de-DE file, it would be a good opportunity to fix it.

4. Extra keys not in English source (informational)

Two keys exist in de-DE but not in the English source:

  • projects.addProjectDialog.renameSuccess -- kept in this PR, seems intentional
  • projects.deleteProjectDialog.description -- kept in this PR (see issue Initial Readme #1 above)

These may be vestigial. Not blocking but worth noting.

Recommendation: improve needed

The PR is high quality overall. The formal Sie in projects.deleteProjectDialog.description (#1) and the command/enterCommand inconsistency (#2) should be fixed before merging, as they undermine the PR's own stated goal of cleaning up formality and terminology consistency. The Models -> Modells typo fix (#3) would be a nice bonus but is not blocking.

Once those are addressed, this is ready to merge.

- Revert Provider->Anbieter (15 keys): every other locale localizes "provider"
  to its native word, and all other de-DE files use "Anbieter".
- projects.deleteProjectDialog.description: formal "Sie" -> informal "Du"
  (the last formal holdout in the file).
- mcpServers.enterCommand: "Kommando eingeben" -> "Befehl eingeben"
  (match the "command" -> "Befehl" change).
- toast.editMessage.description: "des Models" -> "des Modells" (genitive typo).
Addresses review feedback on janhq#8289.

Each change reviewed and approved by the contributor (native German speaker)
before commit; AI-assisted.

Signed-off-by: Tobias Heinrich <tobias.a.w.heinrich@gmail.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@tobiasheinrichfaska
Copy link
Copy Markdown
Author

Some evidence to back the terminology question (commit 2: unifying thread / chat / conversation to one German word, „Chat").

I checked the source, and these three appear to be the same logical concept surfaced under names borrowed from different layers:

  • The only persisted entity is Thread (core/src/types/thread/threadEntity.ts, @storedid, title, messages). There is no Conversation or Chat data entity.
  • The route is /threads/$threadId, and the chat-session store sets sessionId: threadId while naming the active id activeConversationId (web-app/src/stores/chat-session-store.ts, web-app/src/routes/threads/$threadId.tsx) — so threadId === sessionId === conversationId.
  • Conversation exists only as a presentational component (web-app/src/components/ai-elements/conversation.tsx); Chat/ChatCompletion* are the AI-SDK / API layer.
  • The UI uses all three for the same object: the sidebar's "New Chat" button (NavMain.tsx) creates a thread; the thread list renders that object with the fallback title "New Thread" (ThreadList.tsx); a project's collection of those threads is labeled "Conversations in …" (routes/project/$projectId.tsx).

So the English source itself uses three words for one thing. That's the rationale for commit 2 — German would read more consistently with a single term, and „Chat" matches the app's own primary action.

That said, I checked the other locales and most keep the three words distinct (mirroring the English source) rather than unifying — so this really is your call:

  • Take commit 2 → unify to „Chat" (more internally consistent, diverges from the source wording).
  • Drop commit 2 → keep them distinct like the other locales / the source (commit 1 already does this).

Either is fine by me; commit 1 stands on its own regardless. Just let me know which you prefer.

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

Labels

None yet

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

1 participant