diff --git a/TESTING.md b/TESTING.md index 2cf6bac..a7bbfcc 100644 --- a/TESTING.md +++ b/TESTING.md @@ -1564,17 +1564,35 @@ gewesen, an dem jemand die letzte Kopie entfernt. Steht jetzt einmal in - [ ] Kreisel dreht sich noch: Suchfeld tippen, Admin → Audit laden, Versionen-Dialog öffnen 🔎 -### Offen: der Sprachmix +### Der Sprachmix ist weg (18.09.2026) -`CalendarPage.tsx` ist durchgehend deutsch („Kalender", „Lädt…", „Keine -Termine"), die übrige Oberfläche englisch. Betroffen sind sechs Dateien: -CalendarPage, Shell, calendar/controls, calendar/EventDialog, TagChip, -UserMenu. +Die Kalenderseite war durchgehend deutsch, die übrige Oberfläche englisch. +Jetzt spricht alles Englisch – 80 Stellen in sechs Dateien. Shell, TagChip und +UserMenu standen nur wegen ihrer **Kommentare** auf der Verdachtsliste; deren +Oberfläche war längst englisch. -Bewusst **nicht** nebenbei erledigt: Eine halbe Übersetzung ist schlimmer als -gar keine, weil dann eine Seite in sich gemischt ist. Das gehört in einem Zug -gemacht – samt der Entscheidung, welche Sprache die Oberfläche eigentlich -spricht. +Kommentare bleiben deutsch. Das Ersetzen hat Kommentarzeilen deshalb +übersprungen. + +- [ ] Monatsansicht: Wochentage Mon–Sun, Monatsnamen englisch 🔎 +- [ ] Umschalter Month / Week / List, Knopf „Today" +- [ ] Termin anlegen: Title, Calendar, All day, Start/End, Repeat, Color, + Location, Description +- [ ] Wiederholung: Does not repeat / Daily / Weekly / Monthly / Yearly, + Ends: Never / After / On a date +- [ ] Serientermin löschen: „Only this event" / „Entire series" / „Cancel" +- [ ] Kalendermenü: Edit / Share… / Export (.ics) / Import (.ics) / Delete +- [ ] Leerer Zeitraum → „No events" + +### Der Standardkalender heißt „Personal" + +Automatisch angelegt wurde er als „Persönlich". Migration 000027 zieht die +bestehenden nach – **bewusst eng gefasst**: nur Zeilen mit Name *und* Farbe des +Automaten (`#4285f4`). Wer sich selbst einen Kalender „Persönlich" angelegt +hat, behält seinen Namen; das ist seine Beschriftung, nicht unsere. + +- [x] Nach der Migration meldet die API `'Personal'` – geprüft, nicht nur + „Migration gelaufen". --- diff --git a/backend/db/migrations/000027_default_calendar_english.down.sql b/backend/db/migrations/000027_default_calendar_english.down.sql new file mode 100644 index 0000000..82cbf1c --- /dev/null +++ b/backend/db/migrations/000027_default_calendar_english.down.sql @@ -0,0 +1,5 @@ +-- Zurück auf den deutschen Namen, nach derselben engen Regel. +UPDATE cal_calendars + SET name = 'Persönlich' + WHERE name = 'Personal' + AND color = '#4285f4'; diff --git a/backend/db/migrations/000027_default_calendar_english.up.sql b/backend/db/migrations/000027_default_calendar_english.up.sql new file mode 100644 index 0000000..816c06a --- /dev/null +++ b/backend/db/migrations/000027_default_calendar_english.up.sql @@ -0,0 +1,11 @@ +-- Der automatisch angelegte Kalender hieß "Persönlich", die übrige Oberfläche +-- spricht Englisch. Seit dem 18.09.2026 heißt er "Personal"; diese Migration +-- zieht die bereits angelegten nach. +-- +-- **Bewusst eng gefasst:** nur Zeilen, die Name *und* Farbe des Automaten +-- tragen. Wer sich selbst einen Kalender "Persönlich" angelegt hat, behält +-- seinen Namen – das ist seine Beschriftung, nicht unsere. +UPDATE cal_calendars + SET name = 'Personal' + WHERE name = 'Persönlich' + AND color = '#4285f4'; diff --git a/backend/internal/calendar/store.go b/backend/internal/calendar/store.go index 580a8b7..56cd00c 100644 --- a/backend/internal/calendar/store.go +++ b/backend/internal/calendar/store.go @@ -126,7 +126,7 @@ func isUniqueViolation(err error) bool { } // EnsureDefaultCalendar liefert den ersten Kalender des Nutzers, legt bei -// Bedarf "Persönlich" an. So findet ein frisch eingerichteter Client sofort +// Bedarf "Personal" an. So findet ein frisch eingerichteter Client sofort // ein Ziel vor, statt erst ein MKCALENDAR schicken zu müssen – nicht jeder // CalDAV-Client kann das. func (s *Store) EnsureDefaultCalendar(ctx context.Context, ownerID uuid.UUID) (*Calendar, error) { @@ -137,7 +137,7 @@ func (s *Store) EnsureDefaultCalendar(ctx context.Context, ownerID uuid.UUID) (* if len(cals) > 0 { return &cals[0], nil } - return s.CreateCalendar(ctx, ownerID, "Persönlich", "#4285f4", "") + return s.CreateCalendar(ctx, ownerID, "Personal", "#4285f4", "") } func (s *Store) CreateCalendar(ctx context.Context, ownerID uuid.UUID, name, color, description string) (*Calendar, error) { diff --git a/backend/pkg/db/migrations/000027_default_calendar_english.down.sql b/backend/pkg/db/migrations/000027_default_calendar_english.down.sql new file mode 100644 index 0000000..82cbf1c --- /dev/null +++ b/backend/pkg/db/migrations/000027_default_calendar_english.down.sql @@ -0,0 +1,5 @@ +-- Zurück auf den deutschen Namen, nach derselben engen Regel. +UPDATE cal_calendars + SET name = 'Persönlich' + WHERE name = 'Personal' + AND color = '#4285f4'; diff --git a/backend/pkg/db/migrations/000027_default_calendar_english.up.sql b/backend/pkg/db/migrations/000027_default_calendar_english.up.sql new file mode 100644 index 0000000..816c06a --- /dev/null +++ b/backend/pkg/db/migrations/000027_default_calendar_english.up.sql @@ -0,0 +1,11 @@ +-- Der automatisch angelegte Kalender hieß "Persönlich", die übrige Oberfläche +-- spricht Englisch. Seit dem 18.09.2026 heißt er "Personal"; diese Migration +-- zieht die bereits angelegten nach. +-- +-- **Bewusst eng gefasst:** nur Zeilen, die Name *und* Farbe des Automaten +-- tragen. Wer sich selbst einen Kalender "Persönlich" angelegt hat, behält +-- seinen Namen – das ist seine Beschriftung, nicht unsere. +UPDATE cal_calendars + SET name = 'Personal' + WHERE name = 'Persönlich' + AND color = '#4285f4'; diff --git a/frontend/src/components/calendar/CalendarDialog.tsx b/frontend/src/components/calendar/CalendarDialog.tsx index f2b4ac5..84a6668 100644 --- a/frontend/src/components/calendar/CalendarDialog.tsx +++ b/frontend/src/components/calendar/CalendarDialog.tsx @@ -34,7 +34,7 @@ export default function CalendarDialog({ calendar, onSave, onCancel }: Props) { borderRadius: 14, padding: 24, width: 340, maxWidth: '100%', }}>
{recurring - ? <>„{summary || 'Ohne Titel'}" gehört zu einer Reihe. Was soll gelöscht werden?> - : <>„{summary || 'Ohne Titel'}" unwiderruflich löschen?>} + ? <>„{summary || 'Untitled'}" gehört zu einer Reihe. Was soll gelöscht werden?> + : <>„{summary || 'Untitled'}" unwiderruflich löschen?>}