88 lines
2.9 KiB
Markdown
88 lines
2.9 KiB
Markdown
---
|
|
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
|