7.7 KiB
phase, plan, type, wave, depends_on, files_modified, autonomous, gap_closure, requirements, must_haves
| phase | plan | type | wave | depends_on | files_modified | autonomous | gap_closure | requirements | must_haves | |||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 34-i18n-foundation | 07 | execute | 4 |
|
|
true | true |
|
|
Purpose: UAT test 4 reported that German text uses "ae" instead of "ä", "oe" instead of "ö", "ue" instead of "ü", and similar. All 6 German JSON files were generated with ASCII approximations instead of proper German characters. This plan does a complete pass through every German locale file and replaces every ASCII fallback with the correct Unicode character. Output: All 6 de/*.json files with proper German umlauts (ä, ö, ü, Ä, Ö, Ü, ß).
<execution_context> @$HOME/.claude/get-shit-done/workflows/execute-plan.md @$HOME/.claude/get-shit-done/templates/summary.md </execution_context>
@.planning/PROJECT.md @.planning/ROADMAP.md @.planning/STATE.md @.planning/phases/34-i18n-foundation/34-CONTEXT.md @.planning/phases/34-i18n-foundation/34-UAT.md Task 1: Replace ASCII fallbacks with proper umlauts in all 6 German locale files 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 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 Read each German locale file fully. For every string value, replace ASCII umlaut approximations with proper Unicode characters. This is NOT a simple find-and-replace — you must check each word in context because "ae", "oe", "ue" are not always umlauts (e.g., "Israel" should not become "Israöl").Replacement rules (apply to German words only):
ae→äwhen it represents an umlaut (Loeschen → Löschen, Gegenstaende → Gegenstände, Waehrung → Währung, Aenderung → Änderung)oe→öwhen it represents an umlaut (Loeschen → Löschen, Groesse → Größe)ue→üwhen it represents an umlaut (Zurueck → Zurück, Ausruestung → Ausrüstung, Ueberpruefen → Überprüfen, Stueck → Stück, hinzufuegen → hinzufügen)Ae→Äat word start (Aenderung → Änderung)Oe→Öat word startUe→Üat word start (Ueberpruefen → Überprüfen)ss→ßwhere appropriate in German (Schliessen → Schließen, Groesse → Größe, Strasse → Straße, weiss → weiß) — but NOT in compounds like "Impressum" or "Pressemitteilung"
Known corrections (from UAT report and file inspection):
Loeschen→LöschenZurueck→ZurückBestaetigen→BestätigenSchliessen→SchließenGegenstaende→GegenständeAusruestung→AusrüstungWaehrung→WährungSchluessel→Schlüsselhinzufuegen→hinzufügenHinzufuegen→HinzufügenUeberpruefen→Überprüfenverfuegbar→verfügbarStueck→StückGroesse→Größeaendern→ändernAendern→Ändernaehnlich→ähnlichhaeufig→häufigunterstuetzen→unterstützenErnaehrung→ErnährungGeraet→GerätGeraete→Gerätegewuenscht→gewünschtmoeglich→möglichmoeglicherweise→möglicherweisenatuerlich→natürlichpruefen→prüfenUebersicht→ÜbersichtVeroeffentlichen→Veröffentlichenoeffentlich→öffentlichOeffentlich→Öffentlichwuenschen→wünschenfuer→fürFuer→Fürueber→überUeber→Über
Process for each file:
- Read the entire file
- Go through every string value
- Identify every German word that uses ASCII umlaut approximation
- Replace with proper Unicode umlaut
- Write the corrected file
- Ensure the file is valid JSON after corrections
Also review for natural German phrasing. While fixing umlauts, if you notice awkward or unnatural German translations, improve them. The goal (per D-14) is natural German, not word-for-word translation.
Do NOT change:
- JSON key names (only values)
- Interpolation variables: {{count}}, {{name}}, etc. must remain exactly as-is
- English loanwords used intentionally in German context (e.g., "Setup", "Thread", "Export", "Import", "CSV") cd /home/jlmak/Projects/jlmak/GearBox && echo "=== Checking for remaining ASCII fallbacks ===" && grep -r "Loeschen|Zurueck|Bestaetigen|Schliessen|Gegenstaende|Ausruestung|Waehrung|Schluessel" src/client/locales/de/ && echo "FAIL: ASCII fallbacks still present" || echo "PASS: No known ASCII fallbacks found" && echo "=== Checking for proper umlauts ===" && grep -c "ä|ö|ü|Ä|Ö|Ü|ß" src/client/locales/de/common.json && echo "=== Key parity ===" && bun test tests/i18n/locales.test.ts 2>&1 | tail -5 All 6 German locale files use proper Unicode umlauts, no ASCII approximations remain, key parity test passes, German reads naturally
<threat_model>
Trust Boundaries
| Boundary | Description |
|---|---|
| locale JSON→i18n | Static bundled files — trusted, no runtime injection vector |
STRIDE Threat Register
| Threat ID | Category | Component | Disposition | Mitigation Plan |
|---|---|---|---|---|
| T-34-08 | Information Disclosure | de locale files | accept | Translation files contain only UI strings, no secrets. Same disposition as T-34-02 and T-34-06. |
| </threat_model> |
<success_criteria>
- Every German locale file uses proper Unicode umlauts (ä, ö, ü, Ä, Ö, Ü, ß)
- Zero instances of known ASCII fallback patterns remain
- German translations read naturally
- Key parity test passes
- Build passes </success_criteria>