--- phase: 34-i18n-foundation plan: "08" subsystem: i18n tags: [i18n, german, locale, gap-closure] dependency_graph: requires: [34-06, 34-07] provides: [german-locale-parity] affects: [src/client/locales/de] tech_stack: added: [] patterns: [json-locale-files, i18n-key-parity] key_files: created: [] modified: - src/client/locales/de/common.json - src/client/locales/de/settings.json - src/client/locales/de/threads.json - src/client/locales/de/setups.json - src/client/locales/de/collection.json decisions: - Used single quotes instead of German-style „ „ curly quotes in dangerZoneDescription to avoid JSON syntax errors metrics: duration: ~8 minutes completed: 2026-04-18 tasks_completed: 1 tasks_total: 1 files_modified: 5 --- # Phase 34 Plan 08: German Translation Gap Closure Summary **One-liner:** Added 58 missing German translation keys across 5 de/*.json locale files to achieve full key parity with English, fixing fallback display for home, profile, threads, setups, and collection sections. ## Objective Close the German translation gap identified in VERIFICATION.md — plans 34-06/34-07 wired useTranslation into routes and fixed umlaut encoding, but never added corresponding German translations for the new English keys. ## Tasks Completed | Task | Name | Commit | Files | |------|------|--------|-------| | 1 | Add 58 missing German translations to 5 de/*.json files | 23172f7 | de/common.json, de/settings.json, de/threads.json, de/setups.json, de/collection.json | ## Key Changes ### de/common.json — 34 keys added - `home.*` (3 keys): popularSetups, recentlyAdded, trendingCategories - `imageUpload.*` (4 keys): clickToAdd, invalidType, tooLarge, uploadFailed - `profile.*` (27 keys): full profile management section including account info, password management, danger zone ### de/settings.json — 4 keys added - `currency.suggestion`: currency region suggestion with `{{symbol}}` and `{{code}}` interpolation - `currency.switch`: switch button label - `showConversions.title` + `showConversions.description`: price conversion toggle ### de/threads.json — 11 keys added - `card.candidates` + `card.candidates_one`: pluralized candidate count with `{{count}}` interpolation - `planning.*` (9 keys): full planning section with step-by-step guidance ### de/setups.json — 3 keys added - `card.by`: attributed author with `{{name}}` interpolation - `card.anonymous`: anonymous attribution - `impact.compareWith`: setup comparison prompt ### de/collection.json — 6 keys added - `tabs.setups`: setups tab label - `totals.totalWeight` + `totals.totalCost`: totals bar labels - `classificationBadge.base` + `classificationBadge.worn` + `classificationBadge.consumable`: classification badge labels ## Verification ``` bun test tests/i18n/locales.test.ts 19 pass, 0 fail (previously 14 pass, 5 fail) ``` ASCII umlaut fallback check: 0 matches (no regressions). ## Deviations from Plan ### Auto-fixed Issues **1. [Rule 1 - Bug] Fixed JSON syntax error from smart quotes in dangerZoneDescription** - **Found during:** Task 1 — test run revealed `SyntaxError: JSON Parse error: Expected '}'` - **Issue:** The German translation for `dangerZoneDescription` used German-style curly double-quotes `„Gelöschter Benutzer"` — the closing `"` (U+201C) was parsed by the JSON parser as the string-closing delimiter, causing a syntax error at line 115 - **Fix:** Replaced curly quotes with straight single quotes: `'Gelöschter Benutzer'` - **Files modified:** src/client/locales/de/common.json - **Commit:** 23172f7 ## Known Stubs None — all translation keys have real German text values, no placeholders. ## Threat Flags None — plan modifies static bundled locale JSON files only. No network endpoints, auth paths, or schema changes introduced. ## Self-Check: PASSED - [x] src/client/locales/de/common.json — exists and valid JSON - [x] src/client/locales/de/settings.json — exists and valid JSON - [x] src/client/locales/de/threads.json — exists and valid JSON - [x] src/client/locales/de/setups.json — exists and valid JSON - [x] src/client/locales/de/collection.json — exists and valid JSON - [x] Commit 23172f7 exists - [x] bun test tests/i18n/locales.test.ts: 19 pass, 0 fail