diff --git a/.planning/STATE.md b/.planning/STATE.md index 3033de9..256fdc8 100644 --- a/.planning/STATE.md +++ b/.planning/STATE.md @@ -5,16 +5,16 @@ milestone_name: milestone current_phase: 08 current_phase_name: dashboard-widgets-vollimplementierung status: executing -stopped_at: Phase 8 context gathered -last_updated: "2026-07-01T07:46:32.037Z" +stopped_at: context exhaustion at 75% (2026-07-01) +last_updated: "2026-07-01T09:34:09.492Z" last_activity: 2026-07-01 -last_activity_desc: Phase 08 execution resumed (wave continue) +last_activity_desc: Completed quick task 260701-abc: Fix i18n missing keys (marketplace.accessDenied + calendar form) progress: total_phases: 8 - completed_phases: 6 + completed_phases: 7 total_plans: 34 - completed_plans: 29 - percent: 75 + completed_plans: 33 + percent: 88 --- # Project State @@ -136,6 +136,7 @@ None yet. | # | Description | Date | Commit | Directory | |---|-------------|------|--------|-----------| | 260630-gbh | User Settings: Passwort ändern (nur non-LDAP) + Profilbild setzen | 2026-06-30 | merge | [260630-gbh-user-settings-passwort-ndern-nur-non-lda](.planning/quick/260630-gbh-user-settings-passwort-ndern-nur-non-lda/) | +| 260701-abc | Fix i18n: marketplace.accessDenied + calendar form hardcoded EN strings | 2026-07-01 | e5b76b7 | [260701-abc-i18n-missing-keys](.planning/quick/260701-abc-i18n-missing-keys/) | ## Deferred Items @@ -147,6 +148,6 @@ Items acknowledged and carried forward from previous milestone close: ## Session Continuity -Last session: 2026-07-01T06:33:00.382Z -Stopped at: Phase 8 context gathered +Last session: 2026-07-01T09:34:09.479Z +Stopped at: context exhaustion at 75% (2026-07-01) Resume file: .planning/phases/08-dashboard-widgets-vollimplementierung/08-CONTEXT.md diff --git a/.planning/quick/260701-abc-i18n-missing-keys/260701-abc-PLAN.md b/.planning/quick/260701-abc-i18n-missing-keys/260701-abc-PLAN.md new file mode 100644 index 0000000..b142b8d --- /dev/null +++ b/.planning/quick/260701-abc-i18n-missing-keys/260701-abc-PLAN.md @@ -0,0 +1,87 @@ +--- +quick_id: 260701-abc +slug: i18n-missing-keys +date: 2026-07-01 +status: in-progress +--- + +# Quick Task: Fix i18n Missing Keys + +## Goal +Fix two i18n bugs found during UAT: +1. `marketplace.accessDenied` missing from both de.json and en.json +2. `calendar-source-form.tsx` uses hardcoded English strings instead of translations + +## Tasks + +### T-01: Add marketplace.accessDenied to de.json +Add `"accessDenied": "Zugriff verweigert"` to the `marketplace` section in de.json. + +**File:** `apps/web/src/messages/de.json` +**Location:** After `"detailStatusInactive"` (line ~448), before closing `}` + +### T-02: Add marketplace.accessDenied to en.json +Add `"accessDenied": "Access denied"` to the `marketplace` section in en.json. + +**File:** `apps/web/src/messages/en.json` +**Location:** Same position as de.json + +### T-03: Add calendar form translation keys to de.json +Add to `widgets.calendar` section in de.json: +```json +"formFieldName": "Name", +"formFieldType": "Typ", +"formFieldUrl": "URL", +"formFieldUsername": "Benutzername", +"formFieldPassword": "Passwort", +"formFieldColor": "Farbe", +"formFieldExchangeMode": "Exchange-Modus", +"formSave": "Speichern", +"formSaving": "Wird gespeichert...", +"formCancel": "Abbrechen", +"formUrlErrorHttps": "URL muss HTTPS verwenden", +"formUrlErrorInvalid": "Ungültiges URL-Format" +``` + +### T-04: Add calendar form translation keys to en.json +Add to `widgets.calendar` section in en.json: +```json +"formFieldName": "Name", +"formFieldType": "Type", +"formFieldUrl": "URL", +"formFieldUsername": "Username", +"formFieldPassword": "Password", +"formFieldColor": "Color", +"formFieldExchangeMode": "Exchange Mode", +"formSave": "Save", +"formSaving": "Saving...", +"formCancel": "Cancel", +"formUrlErrorHttps": "URL must use HTTPS protocol", +"formUrlErrorInvalid": "Invalid URL format" +``` + +### T-05: Fix calendar-source-form.tsx +Replace all hardcoded English strings with `t()` calls. Remove hack on line 298. + +**File:** `apps/web/src/components/settings/calendar-source-form.tsx` + +Changes: +- `"Name *"` → `\`${t('calendar.formFieldName')} *\`` +- `"Type *"` → `\`${t('calendar.formFieldType')} *\`` +- `"URL *"` → `\`${t('calendar.formFieldUrl')} *\`` +- `"Username"` → `t('calendar.formFieldUsername')` +- `"Password"` → `t('calendar.formFieldPassword')` +- `"Color"` → `t('calendar.formFieldColor')` +- `"Exchange Mode"` → `t('calendar.formFieldExchangeMode')` +- `'Saving...'` → `t('calendar.formSaving')` +- `'Save'` → `t('calendar.formSave')` +- Cancel button hack → `t('calendar.formCancel')` +- `'URL must use HTTPS protocol'` → `t('calendar.formUrlErrorHttps')` +- `'Invalid URL format'` → `t('calendar.formUrlErrorInvalid')` + +## Must Haves +- [ ] `marketplace.accessDenied` present in de.json and en.json marketplace sections +- [ ] All 12 `formField*` / `form*` keys present in widgets.calendar for both locales +- [ ] No hardcoded English strings in calendar-source-form.tsx +- [ ] Hack on line 298 removed +- [ ] No TypeScript errors introduced diff --git a/.planning/quick/260701-abc-i18n-missing-keys/260701-abc-SUMMARY.md b/.planning/quick/260701-abc-i18n-missing-keys/260701-abc-SUMMARY.md new file mode 100644 index 0000000..d45a82d --- /dev/null +++ b/.planning/quick/260701-abc-i18n-missing-keys/260701-abc-SUMMARY.md @@ -0,0 +1,29 @@ +--- +quick_id: 260701-abc +status: complete +date: 2026-07-01 +commit: e5b76b7 +--- + +# Summary: Fix i18n Missing Keys + +## What was done + +Fixed two i18n bugs found during UAT testing. + +### Bug 1: marketplace.accessDenied missing +Added `"accessDenied"` to the `marketplace` section in both `de.json` and `en.json`. The marketplace page uses `useTranslations('marketplace')` and calls `t('accessDenied')` — the key existed at top level but not under the marketplace namespace. + +### Bug 2: calendar-source-form.tsx hardcoded English +Added 12 new translation keys to `widgets.calendar` in both locale files: +`formFieldName`, `formFieldType`, `formFieldUrl`, `formFieldUsername`, `formFieldPassword`, +`formFieldColor`, `formFieldExchangeMode`, `formSave`, `formSaving`, `formCancel`, +`formUrlErrorHttps`, `formUrlErrorInvalid` + +Replaced all hardcoded English strings in `calendar-source-form.tsx` with `t()` calls. +Removed the locale-detection hack on the Cancel button (`t('calendar.addSource') === 'Add source' ? 'Cancel' : 'Abbrechen'`). + +## Verification +- Browser confirmed: calendar form shows "Typ", "Benutzername", "Passwort", "Farbe", "Speichern", "Abbrechen" +- Browser confirmed: marketplace console no longer shows MISSING_MESSAGE error +- TypeScript: no errors