docs(34-08): complete German translation gap closure plan summary
- 58 missing German keys added across 5 de/*.json files - 19/19 i18n parity tests pass - 1 deviation: fixed JSON syntax error from smart quotes
This commit is contained in:
107
.planning/phases/34-i18n-foundation/34-08-SUMMARY.md
Normal file
107
.planning/phases/34-i18n-foundation/34-08-SUMMARY.md
Normal file
@@ -0,0 +1,107 @@
|
||||
---
|
||||
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
|
||||
Reference in New Issue
Block a user