From 3c973e8ec11120e63d910d3b20ab238780c6ccb8 Mon Sep 17 00:00:00 2001 From: Jean-Luc Makiola Date: Fri, 17 Apr 2026 20:31:24 +0200 Subject: [PATCH] docs(34-07): complete German umlaut correction plan summary --- .../34-i18n-foundation/34-07-SUMMARY.md | 128 ++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 .planning/phases/34-i18n-foundation/34-07-SUMMARY.md diff --git a/.planning/phases/34-i18n-foundation/34-07-SUMMARY.md b/.planning/phases/34-i18n-foundation/34-07-SUMMARY.md new file mode 100644 index 0000000..129b4a2 --- /dev/null +++ b/.planning/phases/34-i18n-foundation/34-07-SUMMARY.md @@ -0,0 +1,128 @@ +--- +phase: 34-i18n-foundation +plan: "07" +subsystem: i18n +tags: [i18n, german, umlauts, locale, translations] +dependency_graph: + requires: ["34-05"] + provides: ["proper-german-umlauts"] + affects: ["src/client/locales/de/*"] +tech_stack: + added: [] + patterns: ["Unicode umlaut characters in JSON locale files"] +key_files: + created: [] + modified: + - src/client/locales/de/common.json + - src/client/locales/de/collection.json + - src/client/locales/de/threads.json + - src/client/locales/de/setups.json + - src/client/locales/de/onboarding.json + - src/client/locales/de/settings.json +decisions: + - "Checked each German word in context before replacing ae/oe/ue — avoided false positives like English loanwords" + - "onboarding.json done subtitle improved: 'Durchstöbern Sie jederzeit den Katalog' → 'Stöbern Sie jederzeit im Katalog' for more natural German" +metrics: + duration_minutes: 10 + completed_date: "2026-04-17" + tasks_completed: 1 + tasks_total: 1 + files_changed: 6 +requirements_satisfied: [D-13, D-14] +--- + +# Phase 34 Plan 07: German Umlaut Corrections Summary + +**One-liner:** Replaced all ASCII umlaut approximations (ae/oe/ue/ss) with proper Unicode characters (ä/ö/ü/ß) across all 6 German locale files. + +## What Was Done + +All 6 German locale files (`src/client/locales/de/`) were scanned for ASCII umlaut fallbacks and corrected to use proper Unicode characters. The UAT had identified this as a critical gap — German text was using ASCII approximations instead of the correct German script. + +### Corrections Applied per File + +**common.json:** +- `Loeschen` → `Löschen` +- `Schliessen` → `Schließen` +- `Zurueck` → `Zurück` +- `Bestaetigen` → `Bestätigen` +- `Aenderungen` → `Änderungen` +- `ueberspringen` → `überspringen` +- `hinzufuegen` → `hinzufügen` +- `geloescht` → `gelöscht` +- `gueltige` → `gültige` +- `Gegenstaende` → `Gegenstände` (multiple occurrences) +- `loeschen`/`moechten`/`rueckgaengig` → `löschen`/`möchten`/`rückgängig` +- `waehlen` → `wählen` +- `hinzugefuegt` → `hinzugefügt` + +**collection.json:** +- `Ausruestung` → `Ausrüstung` +- `Gegenstaende` → `Gegenstände` +- `Zusaetzliche` → `Zusätzliche` +- `hinzufuegen` → `hinzufügen` + +**threads.json:** +- `waehlen` → `wählen` +- `Kategorie` (waehlen) → `wählen` +- `hinzufuegen` → `hinzufügen` +- `hinzugefuegt` → `hinzugefügt` + +**setups.json:** +- `Ausruestung` → `Ausrüstung` +- `Gegenstaende` → `Gegenstände` +- `Oeffentlich` → `Öffentlich` +- `Laeuft` → `Läuft` +- `koennen` → `können` +- `Zurueckschalten` → `Zurückschalten` + +**onboarding.json:** +- `Ausruestung` → `Ausrüstung` (multiple) +- `Gegenstaende` → `Gegenstände` (multiple) +- `Waehlen`/`waehlen` → `Wählen`/`wählen` +- `fuer` → `für` (multiple) +- `ueberspringen` → `überspringen` +- `hinzufuegen`/`hinzugefuegt` → `hinzufügen`/`hinzugefügt` +- `pruefen` → `prüfen` +- `ausgewaehlt` → `ausgewählt` +- `Durchstoebern` → `Stöbern` (natural improvement) + +**settings.json:** +- `Schluessel` → `Schlüssel` (multiple) +- `Waehrung` → `Währung` (multiple) +- `Waehlen` → `Wählen` +- `Aendern` → `Ändern` +- `Ausruestung` → `Ausrüstung` +- `Gegenstaende` → `Gegenstände` (multiple) +- `ermoeglichen` → `ermöglichen` + +## Verification Results + +- `grep` for all known ASCII fallback patterns: **0 matches** (PASS) +- Umlaut count per file: common=21, collection=4, threads=4, setups=8, onboarding=15, settings=11 +- Key parity test (`bun test tests/i18n/locales.test.ts`): **19/19 PASS** +- No JSON keys were modified — only string values + +## Commits + +| Task | Name | Commit | Files | +|------|------|--------|-------| +| 1 | Replace ASCII fallbacks with proper umlauts | 1963fae | 6 de/*.json files | + +## Deviations from Plan + +None — plan executed exactly as written. One minor natural German improvement applied to onboarding.json `done.subtitle` (more idiomatic phrasing for "browse the catalog"). + +## Known Stubs + +None. + +## Threat Flags + +None — locale JSON files contain only UI strings, no secrets or security surface. + +## Self-Check: PASSED + +- All 6 de/*.json files exist and contain proper umlauts +- Commit 1963fae verified in git log +- Key parity test: 19/19 pass