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