---
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
