Skip to content

Resolve (untested): 8221-improve-german-translation#8256

Open
Schwachinformatiker wants to merge 12 commits into
janhq:mainfrom
Schwachinformatiker:8221-improve-german-translation
Open

Resolve (untested): 8221-improve-german-translation#8256
Schwachinformatiker wants to merge 12 commits into
janhq:mainfrom
Schwachinformatiker:8221-improve-german-translation

Conversation

@Schwachinformatiker

@Schwachinformatiker Schwachinformatiker commented Jun 1, 2026

Copy link
Copy Markdown

Describe Your Changes

This PR improves the translation in German as well as extends the translation.
It also replaces hard coded English text so it can be translated.
This PR is untested due to make dev does have problems on my computer (It complains about missing libraries but they are installed on my system).

Fixes Issues

Self Checklist

  • Added relevant comments, esp in complex areas
  • Updated docs (for bug fixes / features)
  • Created issues for follow-up changes or refactoring needed

@tokamak-pm

tokamak-pm Bot commented Jun 3, 2026

Copy link
Copy Markdown

Review: PR #8256 - DRAFT: 8221-improve-german-translation

Summary

This PR improves the German (de-DE) locale and fixes a hardcoded English string in the interface settings component. It addresses issue #8221.

Changes Analyzed

  1. .gitignore -- Adds .idea/ (JetBrains IDE directory). Reasonable housekeeping.

  2. web-app/src/locales/de-DE/settings.json -- Adds 10 missing German translation keys under the interface section:

    • accentColor, accentColorDesc
    • notificationPosition, notificationPositionDesc, and the four position options
    • showTokenSpeed, showTokenSpeedDesc
    • Also renames "Erscheinungsbild" to "Darstellungseinstellungen" for the interface title and the reset-success message, which is a more precise German term.
  3. web-app/src/locales/en/settings.json -- Adds the missing English keys accentColor and accentColorDesc that were absent from the English locale but were hardcoded in the component.

  4. web-app/src/routes/settings/interface.tsx -- Replaces hardcoded English strings "Accent color" and "Customize the accent color of the application." with t('settings:interface.accentColor') and t('settings:interface.accentColorDesc'). This is a genuine bug fix -- without this, the accent color section was always in English regardless of locale.

Issues Found

  • PR is self-described as WIP/DRAFT in the description: "This merge request is still WIP. Please do not merge it!" However, the GitHub PR is not marked as a Draft PR (the API shows draft: false). The author should either convert it to a proper GitHub Draft PR, or remove the WIP notice if it is actually ready.

  • Other locales are not updated with the new accentColor/accentColorDesc keys. This is not a blocker since most i18n frameworks fall back to the English key, but it would be ideal to note this as follow-up work.

  • German translation quality looks good. The notification position translations and token speed descriptions are natural and accurate. The choice of "Darstellungseinstellungen" over "Erscheinungsbild" is reasonable ("display settings" vs "appearance"), though "Erscheinungsbild" is also widely used -- this is a subjective style preference, not an error.

  • Self-checklist items are unchecked, which aligns with the WIP status.

Verdict

The code changes are correct and well-scoped. The i18n fix in interface.tsx is a genuine improvement beyond just translation. However, the author explicitly states this is not ready for merge. Respect that request.

Recommendation: fix needed

Action items:

  1. Author should clarify readiness: either mark as a proper GitHub Draft PR, or update the description to indicate it is ready for review.
  2. Once the author signals readiness, this is a clean merge candidate.

"errorInvalidType": "Ungültiger Typ '{{type}}' für Server '{{serverName}}'. Typ muss 'stdio', 'http' oder 'sse' sein",
"save": "Speichern"
"save": "Speichern",
"transportType": "Transport Methode"

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure if this is really a meaningful translation...

Comment thread web-app/src/locales/de-DE/settings.json Outdated
@Schwachinformatiker Schwachinformatiker changed the title DRAFT: 8221-improve-german-translation Resolve (untested): 8221-improve-german-translation Jun 4, 2026
@Schwachinformatiker

This comment was marked as outdated.

@tokamak-pm

tokamak-pm Bot commented Jun 5, 2026

Copy link
Copy Markdown

Follow-up Review (new commits since Jun 3)

Two new commits since my last review:

  • e07ced53 (Jun 4) — additional translation entries
  • d13fdabf (Jun 4) — merge of remote tracking branch

What Changed

The PR now touches 17 files: 8 German locale files, matching English locale files for new keys, 8 component files converting hardcoded strings to t() calls, and .gitignore. This is solid i18n work — both adding German translations and properly extracting hardcoded English strings from components.

Issues Found

1. German typo in assistants.json:
"noParameter": "Keine Parameter — Nutzte Model Voreinstellungen."
"Nutzte" is past tense; should be "Nutzt" (present tense: "Uses model defaults").

2. Compound noun in mcp-servers.json:
"transportType": "Transport Methode"
German compound nouns are written as one word: should be "Transportmethode".

3. PR not marked as GitHub Draft:
The body says "do not merge" but the PR is not a GitHub Draft. Consider clicking "Convert to Draft" to prevent accidental merges.

Cairo Build Issue

Regarding the cairo library error when running make dev — this is a common issue on Linux. Try:

  • Ensure libcairo2-dev (Debian/Ubuntu) or cairo-devel (Fedora) is installed, not just the runtime libcairo2.
  • If using NixOS/nix, add cairo and pkg-config to your dev shell.
  • Check that pkg-config --libs cairo returns a valid path.
  • If the error is from a Node native module (e.g., canvas), you may also need pango, libjpeg, and giflib dev packages.

Recommendation: improve needed

The translation work is high quality overall. Fix the two typos above and resolve the local testing before requesting merge. Once tested and the typos are corrected, this should be ready.

@Schwachinformatiker

Schwachinformatiker commented Jun 5, 2026

Copy link
Copy Markdown
Author

@qnixsynapse I cannot make make dev work on my computer, it complains about the cairo dependency not installed on my system but it is installed. Do you have any idea what could be wrong?

Edit: I found the solution. I need to install the devel version of it on fedora. Also for some more dependencies: sudo dnf install glib cargo cairo-devel cairo-gobject-devel javascriptcoregtk4.1-devel atk-devel libsoup3-devel gdk-pixbuf2-devel pango-devel. Now it complains about gdk-3.0. but on fedora there are a lot of libs named this way. Not really sure which one is the right one.

@tokamak-pm

tokamak-pm Bot commented Jun 6, 2026

Copy link
Copy Markdown

Review: PR #8256 — Resolve (untested): 8221-improve-german-translation

Reviewing commit: 8ef17ca6fd ("Fixed LLM findings") — new since last review.


Overview

This PR extends and improves the German (de-DE) translation, adds missing English source keys to match, and converts several hardcoded English strings in component files to t() calls. The scope has grown to 17 files (8 locale files, 8 component files, .gitignore). The translation quality is generally good, and the i18n extraction work is valuable.

Critical Issues (build-breaking)

1. Syntax error in ChatInput.tsx (lines ~2084-2088)

The reasoning tooltip assignment uses {t(...)} inside a plain JS expression (not JSX). Curly braces here create an object literal, which is syntactically invalid:

const tooltipText =
  reasoningValue === 'on'
    ? {t('common:reasoningForced')}       // <-- SyntaxError
    : reasoningValue === 'off'
      ? {t('common:reasoningDisabled')}   // <-- SyntaxError
      : {t('common:reasoningAuto')}       // <-- SyntaxError

Fix: Remove the curly braces — these are JS ternary expressions, not JSX interpolations:

const tooltipText =
  reasoningValue === 'on'
    ? t('common:reasoningForced')
    : reasoningValue === 'off'
      ? t('common:reasoningDisabled')
      : t('common:reasoningAuto')

2. Syntax error in local-api-server.tsx (line ~520)

Same issue — bare {t(...)} inside a JS ternary expression:

) : (
  {t('settings:localApiServer.serverStatusStopped')}
)

This is inside a description prop that alternates between a JSX element and a string. Since the falsy branch is not inside JSX, wrapping with curly braces creates an invalid object literal.

Fix: Remove the braces:

) : (
  t('settings:localApiServer.serverStatusStopped')
)

Both of these will cause TypeScript / build failures and must be fixed before merge.


Minor Issues

3. .gitignore addition of .idea/ — Fine as housekeeping, though unrelated to the translation scope. No objection.

4. German translation nits (non-blocking):

  • "mcpOnServerDesc": "Erlaube Serverseitige Toolnutzung." — "serverseitige" should be lowercase ("Erlaube serverseitige Toolnutzung.").
  • "defaultModel": "Standard Model lokaler API-Server" — "Model" should be "Modell" in German. Same issue in defaultModelDesc and defaultModelPlaceholder.
  • "enableDesc": "Erlaube das Hochladen sowie die Indexierung von Dokumente" — should be "von Dokumenten" (dative plural).

5. Consistency: The English source file en/common.json uses sentence case "Add images" / "Add audio" replacing the original title case "Add Images" / "Add Audio". This is actually an improvement, but worth noting.


What Looks Good

  • Proper extraction of hardcoded strings from TokenCounter.tsx, ParametersSection.tsx, DownloadManagement.tsx, hardware.tsx, interface.tsx, local-api-server.tsx, and AddEditMCPServer.tsx.
  • English source keys are added alongside the German translations, keeping locale files in sync.
  • The llamacppBusyOnExit section was previously left untranslated in German — now fully translated.
  • The large attachments section in de-DE/settings.json fills a substantial gap.
  • Grammar fixes like "weiterzuchatten" -> "weiter zu chatten" and "Umgebungs Variable" -> "Umgebungsvariable" are correct.

Testing

The author explicitly notes this is untested due to build environment issues. Given the two syntax errors identified above, a build would indeed fail. After fixing those, manual verification of the German locale in-app would be needed.


Recommendation

fix needed — The two syntax errors in ChatInput.tsx and local-api-server.tsx will break the build. These are straightforward fixes (remove extraneous curly braces around t() calls in JS expressions). Once fixed, this is solid i18n work that should be safe to merge.

@tobiasheinrichfaska

Copy link
Copy Markdown

@Schwachinformatiker Thanks for coordinating! I compared both branches against main so we can resolve this cleanly. Our PRs are mostly complementary:

The real overlap is small — 22 keys in common, 36 in settings — and almost all are the same newly-added strings we each translated independently. Full side-by-side below, bold = my suggestion (I marked the ones where I think yours reads better, so it's not one-sided). Two rows are left unbolded because they depend on whether the maintainers want thread/chat/conversation unified (see #8289).

common.json — 22 overlapping keys (English / Mine / Theirs)
Key English Mine Theirs
attachmentEmbeddedIndicator Embedded for RAG Für RAG eingebettet Eingebettet für RAG
attachmentInjectedIndicator Injected into chat In den Chat eingefügt Direkt eingebunden in den Chat
attachmentsIngestion.description Choose whether to include these files directly in the chat or index them as embeddings instead. Wähle, ob diese Dateien direkt in den Chat eingefügt oder stattdessen als Embeddings indexiert werden sollen. Wähle, ob die Dateien direkt eingebunden oder per Index eingebettet werden sollen.
attachmentsIngestion.embeddings Use embeddings Embeddings verwenden Einbetten
attachmentsIngestion.inline Inject into chat In den Chat einfügen Direkt in den Chat einbinden
attachmentsIngestion.title Choose how to ingest attachments Wähle, wie Anhänge verarbeitet werden Wähle, wie der Anhang verarbeitet werden soll
downloading Downloading Wird heruntergeladen Herunterladen
editModel.notAvailable Not available yet Noch nicht verfügbar Bisher nicht verfügbar
injectedContentTitle Injected file content Eingefügter Dateiinhalt Eingebundener Dateiinhalt
llamacppBusyOnExit.description One or more models did not unload in time. Force-quitting will terminate llama.cpp and may interrupt active responses. Ein oder mehrere Modelle wurden nicht rechtzeitig entladen. Das erzwungene Beenden beendet llama.cpp und kann aktive Antworten unterbrechen. Mindestens ein Model wurde nicht rechtzeitig beendet. Das erzwungene Beenden von llama.cpp kann die Antwortgenerierung unterbrechen.
llamacppBusyOnExit.forcing Force quitting… Beenden wird erzwungen… Beenden erzwingen…
llamacppBusyOnExit.shuttingDown Shutting down… Wird heruntergefahren… Herunterfahren…
llamacppBusyOnExit.title llama.cpp is still busy llama.cpp ist noch beschäftigt llama.cpp ist noch aktiv
mcpServers.envVars Environment Variables Umgebungsvariablen Umgebungsvariable
projects.addProjectDialog.addAssistant Add Assistant Assistent hinzufügen Assistenten hinzufügen
projects.addProjectDialog.selectAssistant Select an assistant (optional) Einen Assistenten auswählen (optional) Wähle einen Assistenten (optional)
projects.conversationsDescription Click on any conversation to continue chatting, or start a new one below. Klicke auf einen Chat, um weiterzuchatten, oder starte unten einen neuen. Klicken Sie auf ein Gespräch, um weiter zu chatten, oder starten Sie unten ein neues.
searchThreads Search threads... Chats durchsuchen… Durchsuche Threads...
toClose to close zum Schließen Zum Schließen
toNavigate to navigate zum Navigieren Zum Navigieren
toSelect to select zum Auswählen Zum auswählen
viewInjectedContent View injected content Eingefügten Inhalt anzeigen Zeige eingebundenen Inhalt
settings.json — 36 overlapping keys (English / Mine / Theirs)
Key English Mine Theirs
attachments.autoInlineThreshold Auto inline threshold Schwellenwert für automatisches Einfügen Datei Token Schwellenwert
attachments.autoInlineThresholdDesc Fraction of the model context used as the cutoff for inlining parsed files on local models. Anteil des Modellkontexts, der als Grenze für das automatische Einfügen verarbeiteter Dateien bei lokalen Modellen dient. Anteil des lokalen Model-Kontextes, welcher maximal für Dateien genutzt werden darf.
attachments.chunkOverlap Overlap (characters) Überlappung (Zeichen) Chunk Überlappung (Zeichen)
attachments.chunkOverlapDesc Character overlap between consecutive chunks. Zeichenüberlappung zwischen aufeinanderfolgenden Chunks. Anzahl der Zeichen welche bei aufeinanderfolgenden Chunks überlappen.
attachments.chunkSize Chunk Size (characters) Chunk-Größe (Zeichen) Chunk Größe (Zeichen)
attachments.chunkSizeDesc Approximate max characters per chunk for embeddings. Ungefähre maximale Zeichenanzahl pro Chunk für Embeddings. Ungefähre maximale Zeichenanzahl pro Chunk für Einbettungen.
attachments.enable Enable Attachments Anhänge ermöglichen Dateianhänge erlauben
attachments.enableDesc Allow uploading and indexing documents for retrieval. Erlaube das Hochladen und Indexieren von Dokumenten für den Abruf. Erlaube das Hochladen sowie die Indexierung von Dokumenten für die Suche.
attachments.featureTitle Feature Funktion Feature
attachments.limitsTitle Limits Beschränkungen Grenzen
attachments.maxFile Max File Size (MB) Maximale Dateigröße (MB) Maximale Dateigröße in Megabyte (MB)
attachments.maxFileDesc Maximum size per file. Enforced at upload and processing time. Maximale Größe pro Datei. Wird beim Hochladen und bei der Verarbeitung durchgesetzt. Maximale Größe einzelner Dateien. Wird beim Hochladen und Verarbeiten berücksichtigt.
attachments.parseMode Parse preference Verarbeitungs-Voreinstellung Parser Einstellung
attachments.parseModeDesc Choose how parsed documents are added to conversations. Lege fest, wie verarbeitete Dokumente zu Unterhaltungen hinzugefügt werden. Wähle, wie geparste Dokumente zu Chats hinzugefügt werden sollen.
attachments.parseModeEmbeddings Ingest as embeddings Als Embeddings aufnehmen In Chat einbetten
attachments.parseModeInline Include in chat In den Chat einfügen Zu Chat hinzufügen
attachments.parseModePrompt Ask every time Jedes Mal fragen Jedes mal nachfragen
attachments.retrievalTitle Retrieval Abruf Suche
attachments.searchMode Vector Search Mode Vektorsuch-Modus Vektor Suchmodus
attachments.searchModeDesc Choose between sqlite-vec ANN, linear cosine, or auto. Wähle zwischen sqlite-vec ANN, linearer Kosinus-Suche oder automatisch. Wähle zwischen sqlite-vec ANN, linear cosine oder Automodus.
attachments.subtitle Configure document attachments, size limits, and retrieval behavior. Konfiguriere Dokumentanhänge, Größenbeschränkungen und das Abrufverhalten. Einstellungen für Dateianhänge, Dateigröße und Suche.
attachments.threshold Affinity Threshold Affinitäts-Schwellenwert Ähnlichkeitsschwellenwert
attachments.thresholdDesc Minimum similarity score (0-1). Only used for linear cosine search, not ANN. Mindest-Ähnlichkeitswert (0–1). Wird nur für die lineare Kosinus-Suche verwendet, nicht für ANN. Wert zwischen 0-1, welcher die minimale Ähnlichkeit festlegt. Wird nur in linear cosine search genutzt, nicht ANN.
attachments.topKDesc Maximum citations to return. Maximale Anzahl zurückgegebener Quellenangaben. Anzahl der zurückgegebenen Textpassagen.
interface.notificationPosition Notification position Benachrichtigungsposition Position für Benachrichtigungen
interface.notificationPositionDesc Where toast notifications appear. On Windows, the default is bottom-right so popups do not cover the window controls. Wo Benachrichtigungen erscheinen. Unter Windows ist die Voreinstellung unten rechts, damit Pop-ups die Fenstersteuerung nicht verdecken. Position im Fenster für Benachrichtigungen. Unter Windows ist der Standard unten rechts, damit diese nicht die Fenstereinstellungen verdecken.
interface.showTokenSpeed Show token speed Token-Geschwindigkeit anzeigen Token Geschwindigkeit anzeigen
interface.showTokenSpeedDesc Display tokens/sec and token count inline below assistant messages. When off, a compact icon shows the details on click. Zeigt Tokens/Sek. und die Token-Anzahl direkt unter den Antworten des Assistenten an. Wenn deaktiviert, zeigt ein kompaktes Symbol die Details beim Klicken. Zeige die Geschwindigkeit der generierten Token pro Sekunde unter der Nachricht des Chat-Assistenten direkt an. Wenn deaktiviert, kann durch einen Klick auf das Info-Icon die Geschwindigkeit angezeigt werden.
interface.title Interface Benutzeroberfläche Darstellungseinstellungen
localApiServer.apiPrefixDesc Path prefix for API endpoints. Pfadpräfix für den API-Endpunkt. Pfadpräfix für den API Endpunkt.
localApiServer.defaultModel Default Model Local API Server Standardmodell (lokaler API-Server) Standard Model lokaler API-Server
localApiServer.defaultModelDesc Local model to load automatically when the server starts. Lokales Modell, das beim Start des Servers automatisch geladen wird. Lokales Model, welches beim Start des Servers standardmäßig geladen wird.
localApiServer.defaultModelPlaceholder Select a local model Wähle ein lokales Modell Wähle ein lokales Model
localApiServer.runOnStartup Auto start Automatisch starten Autostart
shortcuts.newProjectDesc Open the create project dialog. Öffnet den Dialog zum Erstellen eines Projekts. Öffne den Projekt-Erstell-Dialog.
shortcuts.searchDesc Open the search dialog. Öffnet den Suchdialog. Öffne den Suchdialog.

Proposed split: you keep the code wiring + new en keys + assistants/mcp-servers; I keep the polished common/settings/provider; for the overlapping keys we apply the bolded picks above (adjusting any you disagree with). The two unbolded parseModeDesc/searchThreads rows depend on the thread/chat/conversation decision (#8289).

That said — I'm fairly new to contributing here, so please take these as suggestions, not verdicts. I'd genuinely welcome your feedback and am happy to change any of my edits. And whatever merge order the maintainers prefer, I'm glad to rebase my side onto yours (or vice versa). Does this work for you?

@tokamak-pm

tokamak-pm Bot commented Jun 9, 2026

Copy link
Copy Markdown

Follow-up Review (new commit since Jun 6)

Reviewing commit: 9a6ca4cb ("Fixed findings of LLM round 2. Fixed some (realy stupid) sytax errors.")

Critical Issues: Resolved

Both syntax errors flagged in the Jun 6 review have been fixed:

  • ChatInput.tsx: The tooltipText ternary now correctly uses t('common:reasoningForced') / t('common:reasoningDisabled') / t('common:reasoningAuto') without erroneous curly braces. Build-safe.
  • local-api-server.tsx: The falsy branch for serverStatusStopped now correctly passes a plain t(...) call, not a bare {t(...)} object literal. Build-safe.

Parallel PR Coordination

Contributor tobiasheinrichfaska posted a detailed coordination comment (Jun 8) comparing this PR against their parallel German translation PRs (#8284, #8285, #8289). They performed a thorough side-by-side analysis and proposed a merge strategy. This coordination is constructive and should be resolved before either PR merges.

Suggested path forward for maintainers: Merge #8256 first (it contains the code-level i18n wiring that the other PRs depend on), then have the other PRs rebase on top.

Remaining Translation Nits (non-blocking)

These are genuine translation errors that will affect German users:

  1. assistants.json"Nutzte" (past tense) should be "Nutzt" (present); "Model" should be "Modell"
  2. settings.jsondefaultModel/defaultModelDesc/defaultModelPlaceholder: "Model""Modell" (3 keys)
  3. common.json"Dokumente oder Datei""Dokumente oder Dateien" (plural mismatch)
  4. common.json"Zum auswählen""Zum Auswählen" (nominalized infinitive)
  5. settings.json"Jedes mal""Jedes Mal" (capitalization)
  6. en/settings.json"configuration" key has a double-space before the value (cosmetic)

What Looks Good

  • Critical syntax errors definitively fixed
  • local-api-server.tsx i18n wiring is clean and correct
  • hardware.tsx correctly extracts hardcoded strings
  • llamacppBusyOnExit fully translated in German
  • Grammar fixes (weiterzuchattenweiter zu chatten, Umgebungs VariableUmgebungsvariable) are correct
  • English source keys added alongside all German additions, keeping locales in sync

Recommendation: improve needed (minor)

The critical build-breaking issues are resolved. What remains are several small German language nits (items 1–6 above). If the maintainers are comfortable addressing those in a follow-up PR, this is functionally merge-ready. If translation quality is held to a higher bar, a final fixup commit covering the items above would be helpful.

@Schwachinformatiker

Schwachinformatiker commented Jun 10, 2026

Copy link
Copy Markdown
Author

@tobiasheinrichfaska Thank you for your support. I don't really care what version of translation we use (as long as the translation gets better :D), so we can use your version if you like.
I suggest you rebase your branch (or branches?) to my PR because I think this way git will produce less merge conflicts and we do not lose your translations on merge when done properly.

An alternative would be, that I remove my translations again, but I thinks this would be more confusing...

I admit, this is also my first contribution to this project - my first contribution to open source in general.

@tobiasheinrichfaska

Copy link
Copy Markdown

Thanks, that works great — and congrats on the first OSS contribution! 🎉

To make our PRs combine without conflicts regardless of merge order, how about this: I open a small PR against your branch that aligns the ~58 overlapping common/settings strings to the wording we agreed in the table above (mostly mine, plus the few where yours reads better — e.g. Ähnlichkeitsschwellenwert, Autostart). Once your branch and mine match on those lines, git sees no divergence there, so neither a rebase nor a merge will conflict on them.

Mind if I open that PR into your 8221-improve-german-translation branch? You'd just review and merge it.

After that, I'd suggest letting the small locale-only PRs (#8284/#8285/#8289) be reviewed first, then you rebase #8256 on top — it'll come through cleanly, and your unique parts (the code wiring, new en keys, assistants, mcp-servers) stay intact. Happy to help with the rebase too if useful.

@tokamak-pm

tokamak-pm Bot commented Jun 11, 2026

Copy link
Copy Markdown

Follow-up Review (new commits detected since last review)

Reviewing commit: 27bc5127 ("Fixing LLM findings round 3.", Jun 10) + c7f9600a (merge of main into branch, Jun 10)


Status of Previous Feedback

The Jun 9 review flagged 6 remaining nits after the critical syntax errors were fixed. Here is what "round 3" addressed:

# Nit Status
1 assistants.json "Nutzte""Nutzt" Fixed
2 assistants.json / settings.json "Model""Modell" (6 keys) Still presentdefaultModel, defaultModelDesc, defaultModelPlaceholder, and noParameter all still use "Model"
3 common.json "Dokumente oder Datei""Dokumente oder Dateien" Fixed — now "Dokumente oder Dateien hinzufügen"
4 common.json "Zum auswählen""Zum Auswählen" Fixed — now "Zum Auswählen"
5 settings.json "Jedes mal""Jedes Mal" Fixed — now "Jedes Mal nachfragen"
6 en/settings.json double-space cosmetic Not checked / low priority

Items 3, 4, and 5 are confirmed fixed. The tense fix for "Nutzte""Nutzt" was applied. The "Model""Modell" correction (item 2) was not applied — the following keys still carry the anglicism:

  • de-DE/assistants.json: "noParameter": "Keine Parameter — Nutzt Model Voreinstellungen."
  • de-DE/settings.json: "defaultModel": "Standard Model lokaler API-Server"
  • de-DE/settings.json: "defaultModelDesc": "Lokales Model, welches beim Start des Servers standardmäßig geladen wird."
  • de-DE/settings.json: "defaultModelPlaceholder": "Wähle ein lokales Model"

This is also one of the cases tobiasheinrichfaska flagged in their coordination comment (Jun 8), preferring "Modell" in all four positions.

New in Round 3

The main commit also merged the latest main into the branch (merge commit c7f9600a), so the branch is now up to date with upstream. No conflicts detected in the diff. The PR has 204 additions and 55 deletions across 17 files.

Overall Assessment

All critical (build-breaking) issues have been resolved since the Jun 6 review. The code-level i18n wiring is correct and clean. The remaining open item is the "Model" / "Modell" inconsistency in 4 German strings — a genuine translation error that will be visible to German users. Given that tobiasheinrichfaska has also noted this and is coordinating on the overlapping translation PRs (#8284, #8285, #8289), there are two paths forward:

  1. Fix here (recommended): Apply s/Model/Modell/g to the 4 affected strings in de-DE/assistants.json and de-DE/settings.json. Keeps this PR self-contained and correct.
  2. Fix downstream: Accept the PR as-is and let the follow-up translation PRs correct those strings.

Coordination Note

The coordination discussion between @Schwachinformatiker and @tobiasheinrichfaska is constructive. @tobiasheinrichfaska has proposed opening a small PR against this branch to align the ~58 overlapping keys before merge. That approach is sound and would eliminate potential translation conflicts.

Recommendation: improve needed (very minor)

Four German strings still use "Model" instead of "Modell". This is the one outstanding item from the prior review. Everything else — syntax, logic, i18n wiring, English source keys — is clean. A one-line fix commit would make this merge-ready.

@Schwachinformatiker

Copy link
Copy Markdown
Author

@tobiasheinrichfaska Thank you for your support 🥳

Do you mean you make another PR that will contain the changes of your other three branches (#8284) that gets merged into my PR? Sounds good for me. You can open a PR against my branch :). To what PR should I rebase my PR after merging this new PR + review?

Just for your information: I will be unresponsive for the next week or so.

…anhq#8289

Aligns the 58 common/settings keys that both this branch and the locale
PRs (janhq#8285 settings, janhq#8289 common) touch, so the efforts combine without
merge conflicts. 54 keys adopt the locale-PR wording; the 4 keys we
agreed read better here (addAssistant, threshold, topKDesc, runOnStartup)
are left unchanged. Also picks up Model -> Modell on defaultModel*.

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 added a commit to tobiasheinrichfaska/jan that referenced this pull request Jun 12, 2026
Concede this key to janhq#8256's wording (correct accusative) so the
overlapping de-DE strings match across both PRs and merge cleanly.

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 added a commit to tobiasheinrichfaska/jan that referenced this pull request Jun 12, 2026
Concede threshold -> "Ähnlichkeitsschwellenwert",
topKDesc -> "Anzahl der zurückgegebenen Textpassagen." and
runOnStartup -> "Autostart" to janhq#8256, so the overlapping de-DE
strings match across both PRs and merge cleanly.

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

Pointer for maintainers (cross-posted from #8285): @qnixsynapse asked about overlapping German i18n PRs. The plan we agreed here is in progress — my align PR Schwachinformatiker#1 makes #8256 and #8284/#8285/#8289 conflict-free on every overlapping common/settings key, in any merge order. It's just waiting on @Schwachinformatiker (back from a ~1-week break around now) to merge it. Full breakdown in #8285.

@Schwachinformatiker

Copy link
Copy Markdown
Author

The PR should now be merge ready (or do I need to rebase it? @tobiasheinrichfaska)

@tobiasheinrichfaska

Copy link
Copy Markdown

🎉 Thanks for merging the align PR — and glad the heat finally broke!

Short answer: no rebase needed to avoid conflicts. The align PR made the 58 overlapping common/settings keys identical on both our branches, so git sees no divergence there in any merge order — and your PR already reports MERGEABLE against main. The BLOCKED status is just the maintainer-review / branch-protection gate, not a conflict.

On ordering, our agreed plan still holds and is now conflict-free either way:

Nothing's blocking on my end — all three of mine are mergeable. Really appreciate the collaboration! 🙏

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.

idea: Improve translation for German

2 participants