From 4e31c8d736424bb993d620d3e34024068c1f3e60 Mon Sep 17 00:00:00 2001 From: Till JS Date: Sun, 26 Apr 2026 22:17:34 +0200 Subject: [PATCH] =?UTF-8?q?feat(calendar):=20full=20i18n=20coverage=20acro?= =?UTF-8?q?ss=2017=20files=20=E2=80=94=20DE/EN/ES/FR/IT?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Calendar already had a `calendar` namespace, but ~70 strings were hardcoded across EventForm, EventDetailModal, CustomRecurrenceBuilder, CalendarHeader (15 block-type filter chips), QuickEventPopover, AgendaView, EventCard, SlotSuggestions, MiniCalendar, DateStrip, ListView, SharedEventView, the inline DetailView, and 3 routes. - Extended namespace with `event_form.*`, `event_card.*`, `event_modal.*`, `agenda.*`, `recurrence.*` (custom builder + preview format), `weekday_short.*` / `weekday_long.*`, `header.*` (15 block-type labels + 4 ARIA), `date_strip.*`, `mini_cal.*`, `slots.*`, `quick_event.*`, `list_view.*`, `detail_route.*`, `detail_view.*`, `calendars_route.*`, `shared_view.*` — ~172 new keys × 5 locales = ~860 translations. - Recurrence preview formatters in EventForm + EventDetailModal + CustomRecurrenceBuilder all rebuilt around `recurrence.every_n_unit` / `weekly_with_days` / weekday-short maps. - Locale-aware Intl.DateTimeFormat in SharedEventView (was hardcoded 'de-DE'). - Baseline ratchet: 1753 → 1687 (66 calendar strings cleared, 16 files fully clean). - validate:i18n-parity: 40 namespaces × 5 locales — 3768 keys aligned - svelte-check: 0 new errors from i18n changes (pre-existing drift in unrelated modules unchanged) Co-Authored-By: Claude Opus 4.7 (1M context) --- .../web/src/lib/i18n/locales/calendar/de.json | 206 ++++++++++++++++++ .../web/src/lib/i18n/locales/calendar/en.json | 206 ++++++++++++++++++ .../web/src/lib/i18n/locales/calendar/es.json | 206 ++++++++++++++++++ .../web/src/lib/i18n/locales/calendar/fr.json | 206 ++++++++++++++++++ .../web/src/lib/i18n/locales/calendar/it.json | 206 ++++++++++++++++++ .../src/lib/modules/calendar/ListView.svelte | 48 ++-- .../modules/calendar/SharedEventView.svelte | 37 ++-- .../calendar/components/AgendaView.svelte | 13 +- .../calendar/components/CalendarHeader.svelte | 73 ++++--- .../components/CustomRecurrenceBuilder.svelte | 78 ++++--- .../calendar/components/DateStrip.svelte | 9 +- .../calendar/components/EventCard.svelte | 19 +- .../components/EventDetailModal.svelte | 94 ++++---- .../calendar/components/EventForm.svelte | 88 ++++---- .../calendar/components/MiniCalendar.svelte | 15 +- .../components/QuickEventPopover.svelte | 46 ++-- .../components/SlotSuggestions.svelte | 15 +- .../modules/calendar/views/DetailView.svelte | 38 ++-- .../src/routes/(app)/calendar/+page.svelte | 5 +- .../(app)/calendar/calendars/+page.svelte | 41 ++-- .../(app)/calendar/event/[id]/+page.svelte | 41 ++-- scripts/i18n-hardcoded-baseline.json | 16 -- 22 files changed, 1429 insertions(+), 277 deletions(-) diff --git a/apps/mana/apps/web/src/lib/i18n/locales/calendar/de.json b/apps/mana/apps/web/src/lib/i18n/locales/calendar/de.json index 02a79aa64..c63528db3 100644 --- a/apps/mana/apps/web/src/lib/i18n/locales/calendar/de.json +++ b/apps/mana/apps/web/src/lib/i18n/locales/calendar/de.json @@ -29,8 +29,10 @@ }, "calendar": { "today": "Heute", + "tomorrow": "Morgen", "newEvent": "Neuer Termin", "noEvents": "Keine Termine", + "noEventsInRange": "Keine Termine in diesem Zeitraum", "allDay": "Ganztägig", "myCalendars": "Meine Kalender", "sharedCalendars": "Geteilte Kalender", @@ -58,6 +60,210 @@ "changeStartTime": "Startzeit ändern", "changeEndTime": "Endzeit ändern" }, + "event_form": { + "aria_create": "Termin erstellen", + "aria_edit": "Termin bearbeiten", + "label_title_required": "Titel *", + "placeholder_title": "Terminname eingeben", + "label_time": "Uhrzeit", + "label_recurrence": "Wiederholung", + "placeholder_location": "Ort eingeben...", + "placeholder_description": "Beschreibung hinzufügen", + "label_tags": "Tags", + "recur_edit_suffix": "{preview} — Bearbeiten" + }, + "event_card": { + "new_event_label": "Neuer Termin", + "recurring_title": "Wiederkehrend", + "linked_title": "Durchgeführt" + }, + "event_modal": { + "editing_title": "Termin bearbeiten", + "copy_title": "Kopieren", + "label_visibility": "Sichtbarkeit", + "label_share_link": "Link", + "created_at": "Erstellt: {date}", + "updated_at": "· Bearbeitet: {date}", + "confirm_delete_single": "Diesen Termin löschen?", + "clipboard_location_prefix": "Ort: {location}", + "recur_edit_title": "Wiederkehrenden Termin bearbeiten", + "recur_edit_text": "Möchtest du nur diesen Termin oder alle zukünftigen bearbeiten?", + "recur_edit_only_this": "Nur diesen Termin", + "recur_edit_all_future": "Alle zukünftigen Termine", + "recur_delete_title": "Wiederkehrenden Termin löschen", + "recur_delete_text": "Möchtest du nur diesen Termin oder die gesamte Serie löschen?", + "recur_delete_only_this": "Nur diesen Termin", + "recur_delete_all": "Alle Termine der Serie" + }, + "agenda": { + "empty": "Keine Termine in diesem Zeitraum", + "open_details_aria": "Details öffnen" + }, + "recurrence": { + "none": "Keine Wiederholung", + "daily": "Täglich", + "weekly": "Wöchentlich", + "monthly": "Monatlich", + "yearly": "Jährlich", + "every_2_weeks": "Alle 2 Wochen", + "custom": "Benutzerdefiniert...", + "recurring_fallback": "Wiederkehrend", + "weekly_with_days": "Wöchentlich ({days})", + "every_n_unit": "Alle {n} {unit}", + "every_unit": "Alle {unit}", + "unit_days": "Tage", + "unit_weeks": "Wochen", + "unit_months": "Monate", + "unit_years": "Jahre", + "unit_freq_daily": "Tag(e)", + "unit_freq_weekly": "Woche(n)", + "unit_freq_monthly": "Monat(e)", + "unit_freq_yearly": "Jahr(e)", + "preview_at_days": " an {days}", + "preview_count_suffix": ", {count}x", + "preview_until_suffix": " bis {date}", + "builder_title": "Benutzerdefinierte Wiederholung", + "builder_every_label": "Alle", + "builder_weekdays_label": "Wochentage", + "builder_end_label": "Endet", + "builder_end_never": "Nie", + "builder_end_after": "Nach", + "builder_end_after_unit": "Terminen", + "builder_end_until": "Am", + "builder_apply": "Übernehmen" + }, + "weekday_short": { + "mon": "Mo", + "tue": "Di", + "wed": "Mi", + "thu": "Do", + "fri": "Fr", + "sat": "Sa", + "sun": "So" + }, + "weekday_long": { + "sun": "Sonntag", + "mon": "Montag", + "tue": "Dienstag", + "wed": "Mittwoch", + "thu": "Donnerstag", + "fri": "Freitag", + "sat": "Samstag" + }, + "header": { + "today": "Heute", + "new_event": "Termin", + "aria_prev": "Zurück", + "aria_next": "Weiter", + "aria_filter": "Filter", + "aria_export": "Exportieren", + "block_event": "Termine", + "block_task": "Aufgaben", + "block_time_entry": "Zeiten", + "block_habit": "Habits", + "block_body": "Training", + "block_watering": "Gießen", + "block_sleep": "Schlaf", + "block_practice": "Übung", + "block_period": "Periode", + "block_guide": "Guides", + "block_visit": "Besuche", + "block_study": "Lernen", + "block_listening": "Musik", + "block_mood": "Stimmung", + "block_rehearsal": "Probe" + }, + "date_strip": { + "today_aria": "Zum heutigen Tag", + "today_label": "Heute" + }, + "mini_cal": { + "prev_aria": "Vorheriger Monat", + "next_aria": "Nächster Monat" + }, + "slots": { + "loading": "Suche freie Zeiten...", + "empty": "Keine freien Slots gefunden", + "label": "Freie Zeiten", + "duration_suffix": "{n}min" + }, + "quick_event": { + "aria_dialog": "Termin erstellen", + "header_new": "Neuer Termin", + "placeholder_title": "Titel hinzufügen", + "type_event": "Termin", + "type_time_entry": "Zeiterfassung", + "type_habit": "Habit", + "placeholder_location": "Ort hinzufügen", + "placeholder_description": "Beschreibung" + }, + "list_view": { + "placeholder_new_event": "Neuer Termin...", + "voice_reason": "Termine werden verschlüsselt gespeichert. Dafür brauchst du ein Mana-Konto.", + "empty_label": "Termine", + "empty_text": "Keine Termine", + "open_action": "Öffnen", + "delete_action": "Löschen" + }, + "detail_route": { + "doc_title": "Kalender - Mana", + "create_modal_title": "Neuer Termin", + "event_doc_title": "{title} - Kalender - Mana", + "event_doc_title_fallback": "Termin", + "back_to_calendar": "Zurück zum Kalender", + "not_found": "Termin nicht gefunden", + "edit_title": "Termin bearbeiten", + "label_title": "Titel", + "label_description": "Beschreibung", + "label_date": "Datum", + "label_from": "Von", + "label_to": "Bis", + "label_location": "Ort", + "placeholder_location": "Ort eingeben...", + "submit_save": "Speichern", + "submit_cancel": "Abbrechen", + "time_suffix_uhr": "Uhr" + }, + "detail_view": { + "toast_deleted": "Termin gelöscht", + "not_found": "Termin nicht gefunden", + "confirm_delete": "Termin wirklich löschen?", + "placeholder_title": "Titel...", + "label_visibility": "Sichtbarkeit", + "label_allday": "Ganztägig", + "placeholder_location": "Ort hinzufügen...", + "section_tags": "Tags", + "section_description": "Beschreibung", + "placeholder_description": "Beschreibung hinzufügen...", + "meta_created": "Erstellt: {date}", + "meta_updated": "Bearbeitet: {date}", + "untitled_fallback": "Untitled" + }, + "calendars_route": { + "doc_title": "Kalender verwalten - Mana", + "back_to_calendar": "Zurück zum Kalender", + "page_title": "Meine Kalender", + "new_calendar": "Neuer Kalender", + "label_name": "Name", + "placeholder_name": "z.B. Arbeit, Sport, Familie...", + "label_color": "Farbe", + "aria_pick_color": "Farbe wählen", + "submit_create": "Erstellen", + "empty": "Noch keine Kalender vorhanden.", + "badge_default": "(Standard)", + "aria_hide": "Ausblenden", + "aria_show": "Einblenden", + "aria_set_default": "Als Standard setzen", + "confirm_delete": "Kalender wirklich löschen? Alle zugehörigen Termine gehen verloren." + }, + "shared_view": { + "kind": "Termin", + "label_when": "Wann", + "label_where": "Wo", + "timezone_prefix": "Zeitzone: {tz}", + "add_to_calendar": "📅 Zum eigenen Kalender hinzufügen", + "expiry": "Dieser Link läuft am {date} ab." + }, "repeat": { "none": "Nicht wiederholen", "daily": "Täglich", diff --git a/apps/mana/apps/web/src/lib/i18n/locales/calendar/en.json b/apps/mana/apps/web/src/lib/i18n/locales/calendar/en.json index d3461ae0f..c47f70c56 100644 --- a/apps/mana/apps/web/src/lib/i18n/locales/calendar/en.json +++ b/apps/mana/apps/web/src/lib/i18n/locales/calendar/en.json @@ -29,8 +29,10 @@ }, "calendar": { "today": "Today", + "tomorrow": "Tomorrow", "newEvent": "New Event", "noEvents": "No events", + "noEventsInRange": "No events in this range", "allDay": "All day", "myCalendars": "My Calendars", "sharedCalendars": "Shared Calendars", @@ -58,6 +60,210 @@ "changeStartTime": "Change start time", "changeEndTime": "Change end time" }, + "event_form": { + "aria_create": "Create event", + "aria_edit": "Edit event", + "label_title_required": "Title *", + "placeholder_title": "Enter event name", + "label_time": "Time", + "label_recurrence": "Recurrence", + "placeholder_location": "Enter location...", + "placeholder_description": "Add a description", + "label_tags": "Tags", + "recur_edit_suffix": "{preview} — Edit" + }, + "event_card": { + "new_event_label": "New event", + "recurring_title": "Recurring", + "linked_title": "Done" + }, + "event_modal": { + "editing_title": "Edit event", + "copy_title": "Copy", + "label_visibility": "Visibility", + "label_share_link": "Link", + "created_at": "Created: {date}", + "updated_at": "· Edited: {date}", + "confirm_delete_single": "Delete this event?", + "clipboard_location_prefix": "Location: {location}", + "recur_edit_title": "Edit recurring event", + "recur_edit_text": "Edit only this event or all future ones?", + "recur_edit_only_this": "Only this event", + "recur_edit_all_future": "All future events", + "recur_delete_title": "Delete recurring event", + "recur_delete_text": "Delete only this event or the entire series?", + "recur_delete_only_this": "Only this event", + "recur_delete_all": "All events in the series" + }, + "agenda": { + "empty": "No events in this range", + "open_details_aria": "Open details" + }, + "recurrence": { + "none": "No recurrence", + "daily": "Daily", + "weekly": "Weekly", + "monthly": "Monthly", + "yearly": "Yearly", + "every_2_weeks": "Every 2 weeks", + "custom": "Custom...", + "recurring_fallback": "Recurring", + "weekly_with_days": "Weekly ({days})", + "every_n_unit": "Every {n} {unit}", + "every_unit": "Every {unit}", + "unit_days": "days", + "unit_weeks": "weeks", + "unit_months": "months", + "unit_years": "years", + "unit_freq_daily": "day(s)", + "unit_freq_weekly": "week(s)", + "unit_freq_monthly": "month(s)", + "unit_freq_yearly": "year(s)", + "preview_at_days": " on {days}", + "preview_count_suffix": ", {count}x", + "preview_until_suffix": " until {date}", + "builder_title": "Custom recurrence", + "builder_every_label": "Every", + "builder_weekdays_label": "Weekdays", + "builder_end_label": "Ends", + "builder_end_never": "Never", + "builder_end_after": "After", + "builder_end_after_unit": "events", + "builder_end_until": "On", + "builder_apply": "Apply" + }, + "weekday_short": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "weekday_long": { + "sun": "Sunday", + "mon": "Monday", + "tue": "Tuesday", + "wed": "Wednesday", + "thu": "Thursday", + "fri": "Friday", + "sat": "Saturday" + }, + "header": { + "today": "Today", + "new_event": "Event", + "aria_prev": "Previous", + "aria_next": "Next", + "aria_filter": "Filter", + "aria_export": "Export", + "block_event": "Events", + "block_task": "Tasks", + "block_time_entry": "Time", + "block_habit": "Habits", + "block_body": "Training", + "block_watering": "Watering", + "block_sleep": "Sleep", + "block_practice": "Practice", + "block_period": "Period", + "block_guide": "Guides", + "block_visit": "Visits", + "block_study": "Study", + "block_listening": "Music", + "block_mood": "Mood", + "block_rehearsal": "Rehearsal" + }, + "date_strip": { + "today_aria": "Go to today", + "today_label": "Today" + }, + "mini_cal": { + "prev_aria": "Previous month", + "next_aria": "Next month" + }, + "slots": { + "loading": "Searching free time...", + "empty": "No free slots found", + "label": "Free slots", + "duration_suffix": "{n}min" + }, + "quick_event": { + "aria_dialog": "Create event", + "header_new": "New event", + "placeholder_title": "Add a title", + "type_event": "Event", + "type_time_entry": "Time entry", + "type_habit": "Habit", + "placeholder_location": "Add location", + "placeholder_description": "Description" + }, + "list_view": { + "placeholder_new_event": "New event...", + "voice_reason": "Events are stored encrypted. You need a Mana account for that.", + "empty_label": "Events", + "empty_text": "No events", + "open_action": "Open", + "delete_action": "Delete" + }, + "detail_route": { + "doc_title": "Calendar - Mana", + "create_modal_title": "New event", + "event_doc_title": "{title} - Calendar - Mana", + "event_doc_title_fallback": "Event", + "back_to_calendar": "Back to calendar", + "not_found": "Event not found", + "edit_title": "Edit event", + "label_title": "Title", + "label_description": "Description", + "label_date": "Date", + "label_from": "From", + "label_to": "To", + "label_location": "Location", + "placeholder_location": "Enter location...", + "submit_save": "Save", + "submit_cancel": "Cancel", + "time_suffix_uhr": "" + }, + "detail_view": { + "toast_deleted": "Event deleted", + "not_found": "Event not found", + "confirm_delete": "Really delete event?", + "placeholder_title": "Title...", + "label_visibility": "Visibility", + "label_allday": "All day", + "placeholder_location": "Add location...", + "section_tags": "Tags", + "section_description": "Description", + "placeholder_description": "Add description...", + "meta_created": "Created: {date}", + "meta_updated": "Edited: {date}", + "untitled_fallback": "Untitled" + }, + "calendars_route": { + "doc_title": "Manage calendars - Mana", + "back_to_calendar": "Back to calendar", + "page_title": "My calendars", + "new_calendar": "New calendar", + "label_name": "Name", + "placeholder_name": "e.g. Work, Sport, Family...", + "label_color": "Color", + "aria_pick_color": "Pick color", + "submit_create": "Create", + "empty": "No calendars yet.", + "badge_default": "(Default)", + "aria_hide": "Hide", + "aria_show": "Show", + "aria_set_default": "Set as default", + "confirm_delete": "Really delete calendar? All associated events will be lost." + }, + "shared_view": { + "kind": "Event", + "label_when": "When", + "label_where": "Where", + "timezone_prefix": "Time zone: {tz}", + "add_to_calendar": "📅 Add to my calendar", + "expiry": "This link expires on {date}." + }, "repeat": { "none": "Don't repeat", "daily": "Daily", diff --git a/apps/mana/apps/web/src/lib/i18n/locales/calendar/es.json b/apps/mana/apps/web/src/lib/i18n/locales/calendar/es.json index 277661e3b..b993c6065 100644 --- a/apps/mana/apps/web/src/lib/i18n/locales/calendar/es.json +++ b/apps/mana/apps/web/src/lib/i18n/locales/calendar/es.json @@ -29,8 +29,10 @@ }, "calendar": { "today": "Hoy", + "tomorrow": "Mañana", "newEvent": "Nuevo evento", "noEvents": "Sin eventos", + "noEventsInRange": "Sin eventos en este rango", "allDay": "Todo el día", "myCalendars": "Mis calendarios", "sharedCalendars": "Calendarios compartidos", @@ -58,6 +60,210 @@ "changeStartTime": "Cambiar hora de inicio", "changeEndTime": "Cambiar hora de fin" }, + "event_form": { + "aria_create": "Crear evento", + "aria_edit": "Editar evento", + "label_title_required": "Título *", + "placeholder_title": "Introduce el nombre del evento", + "label_time": "Hora", + "label_recurrence": "Repetición", + "placeholder_location": "Introduce la ubicación...", + "placeholder_description": "Añade una descripción", + "label_tags": "Etiquetas", + "recur_edit_suffix": "{preview} — Editar" + }, + "event_card": { + "new_event_label": "Nuevo evento", + "recurring_title": "Recurrente", + "linked_title": "Realizado" + }, + "event_modal": { + "editing_title": "Editar evento", + "copy_title": "Copiar", + "label_visibility": "Visibilidad", + "label_share_link": "Enlace", + "created_at": "Creado: {date}", + "updated_at": "· Editado: {date}", + "confirm_delete_single": "¿Eliminar este evento?", + "clipboard_location_prefix": "Ubicación: {location}", + "recur_edit_title": "Editar evento recurrente", + "recur_edit_text": "¿Editar solo este evento o todos los futuros?", + "recur_edit_only_this": "Solo este evento", + "recur_edit_all_future": "Todos los eventos futuros", + "recur_delete_title": "Eliminar evento recurrente", + "recur_delete_text": "¿Eliminar solo este evento o toda la serie?", + "recur_delete_only_this": "Solo este evento", + "recur_delete_all": "Todos los eventos de la serie" + }, + "agenda": { + "empty": "Sin eventos en este rango", + "open_details_aria": "Abrir detalles" + }, + "recurrence": { + "none": "Sin repetición", + "daily": "Diario", + "weekly": "Semanal", + "monthly": "Mensual", + "yearly": "Anual", + "every_2_weeks": "Cada 2 semanas", + "custom": "Personalizado...", + "recurring_fallback": "Recurrente", + "weekly_with_days": "Semanal ({days})", + "every_n_unit": "Cada {n} {unit}", + "every_unit": "Cada {unit}", + "unit_days": "días", + "unit_weeks": "semanas", + "unit_months": "meses", + "unit_years": "años", + "unit_freq_daily": "día(s)", + "unit_freq_weekly": "semana(s)", + "unit_freq_monthly": "mes(es)", + "unit_freq_yearly": "año(s)", + "preview_at_days": " los {days}", + "preview_count_suffix": ", {count}x", + "preview_until_suffix": " hasta {date}", + "builder_title": "Repetición personalizada", + "builder_every_label": "Cada", + "builder_weekdays_label": "Días de la semana", + "builder_end_label": "Termina", + "builder_end_never": "Nunca", + "builder_end_after": "Tras", + "builder_end_after_unit": "eventos", + "builder_end_until": "El", + "builder_apply": "Aplicar" + }, + "weekday_short": { + "mon": "Lun", + "tue": "Mar", + "wed": "Mié", + "thu": "Jue", + "fri": "Vie", + "sat": "Sáb", + "sun": "Dom" + }, + "weekday_long": { + "sun": "Domingo", + "mon": "Lunes", + "tue": "Martes", + "wed": "Miércoles", + "thu": "Jueves", + "fri": "Viernes", + "sat": "Sábado" + }, + "header": { + "today": "Hoy", + "new_event": "Evento", + "aria_prev": "Anterior", + "aria_next": "Siguiente", + "aria_filter": "Filtro", + "aria_export": "Exportar", + "block_event": "Eventos", + "block_task": "Tareas", + "block_time_entry": "Tiempos", + "block_habit": "Hábitos", + "block_body": "Entrenamiento", + "block_watering": "Riego", + "block_sleep": "Sueño", + "block_practice": "Práctica", + "block_period": "Periodo", + "block_guide": "Guías", + "block_visit": "Visitas", + "block_study": "Estudio", + "block_listening": "Música", + "block_mood": "Estado", + "block_rehearsal": "Ensayo" + }, + "date_strip": { + "today_aria": "Ir a hoy", + "today_label": "Hoy" + }, + "mini_cal": { + "prev_aria": "Mes anterior", + "next_aria": "Mes siguiente" + }, + "slots": { + "loading": "Buscando huecos libres...", + "empty": "No se han encontrado huecos libres", + "label": "Huecos libres", + "duration_suffix": "{n}min" + }, + "quick_event": { + "aria_dialog": "Crear evento", + "header_new": "Nuevo evento", + "placeholder_title": "Añadir un título", + "type_event": "Evento", + "type_time_entry": "Tiempo", + "type_habit": "Hábito", + "placeholder_location": "Añadir ubicación", + "placeholder_description": "Descripción" + }, + "list_view": { + "placeholder_new_event": "Nuevo evento...", + "voice_reason": "Los eventos se guardan cifrados. Necesitas una cuenta Mana para esto.", + "empty_label": "Eventos", + "empty_text": "Sin eventos", + "open_action": "Abrir", + "delete_action": "Eliminar" + }, + "detail_route": { + "doc_title": "Calendario - Mana", + "create_modal_title": "Nuevo evento", + "event_doc_title": "{title} - Calendario - Mana", + "event_doc_title_fallback": "Evento", + "back_to_calendar": "Volver al calendario", + "not_found": "Evento no encontrado", + "edit_title": "Editar evento", + "label_title": "Título", + "label_description": "Descripción", + "label_date": "Fecha", + "label_from": "Desde", + "label_to": "Hasta", + "label_location": "Ubicación", + "placeholder_location": "Introduce la ubicación...", + "submit_save": "Guardar", + "submit_cancel": "Cancelar", + "time_suffix_uhr": "" + }, + "detail_view": { + "toast_deleted": "Evento eliminado", + "not_found": "Evento no encontrado", + "confirm_delete": "¿Eliminar el evento de verdad?", + "placeholder_title": "Título...", + "label_visibility": "Visibilidad", + "label_allday": "Todo el día", + "placeholder_location": "Añadir ubicación...", + "section_tags": "Etiquetas", + "section_description": "Descripción", + "placeholder_description": "Añadir descripción...", + "meta_created": "Creado: {date}", + "meta_updated": "Editado: {date}", + "untitled_fallback": "Sin título" + }, + "calendars_route": { + "doc_title": "Gestionar calendarios - Mana", + "back_to_calendar": "Volver al calendario", + "page_title": "Mis calendarios", + "new_calendar": "Nuevo calendario", + "label_name": "Nombre", + "placeholder_name": "p. ej. Trabajo, Deporte, Familia...", + "label_color": "Color", + "aria_pick_color": "Elegir color", + "submit_create": "Crear", + "empty": "Aún no hay calendarios.", + "badge_default": "(Predeterminado)", + "aria_hide": "Ocultar", + "aria_show": "Mostrar", + "aria_set_default": "Establecer como predeterminado", + "confirm_delete": "¿Eliminar el calendario de verdad? Se perderán todos los eventos asociados." + }, + "shared_view": { + "kind": "Evento", + "label_when": "Cuándo", + "label_where": "Dónde", + "timezone_prefix": "Zona horaria: {tz}", + "add_to_calendar": "📅 Añadir a mi calendario", + "expiry": "Este enlace caduca el {date}." + }, "repeat": { "none": "No repetir", "daily": "Diario", diff --git a/apps/mana/apps/web/src/lib/i18n/locales/calendar/fr.json b/apps/mana/apps/web/src/lib/i18n/locales/calendar/fr.json index 486f677bc..e2b143c50 100644 --- a/apps/mana/apps/web/src/lib/i18n/locales/calendar/fr.json +++ b/apps/mana/apps/web/src/lib/i18n/locales/calendar/fr.json @@ -29,8 +29,10 @@ }, "calendar": { "today": "Aujourd'hui", + "tomorrow": "Demain", "newEvent": "Nouvel événement", "noEvents": "Aucun événement", + "noEventsInRange": "Aucun événement dans cette période", "allDay": "Toute la journée", "myCalendars": "Mes calendriers", "sharedCalendars": "Calendriers partagés", @@ -58,6 +60,210 @@ "changeStartTime": "Changer l'heure de début", "changeEndTime": "Changer l'heure de fin" }, + "event_form": { + "aria_create": "Créer un événement", + "aria_edit": "Modifier l'événement", + "label_title_required": "Titre *", + "placeholder_title": "Saisis le nom de l'événement", + "label_time": "Heure", + "label_recurrence": "Répétition", + "placeholder_location": "Saisis le lieu...", + "placeholder_description": "Ajoute une description", + "label_tags": "Tags", + "recur_edit_suffix": "{preview} — Modifier" + }, + "event_card": { + "new_event_label": "Nouvel événement", + "recurring_title": "Récurrent", + "linked_title": "Réalisé" + }, + "event_modal": { + "editing_title": "Modifier l'événement", + "copy_title": "Copier", + "label_visibility": "Visibilité", + "label_share_link": "Lien", + "created_at": "Créé : {date}", + "updated_at": "· Modifié : {date}", + "confirm_delete_single": "Supprimer cet événement ?", + "clipboard_location_prefix": "Lieu : {location}", + "recur_edit_title": "Modifier l'événement récurrent", + "recur_edit_text": "Modifier seulement cet événement ou tous les futurs ?", + "recur_edit_only_this": "Seulement cet événement", + "recur_edit_all_future": "Tous les événements futurs", + "recur_delete_title": "Supprimer l'événement récurrent", + "recur_delete_text": "Supprimer seulement cet événement ou toute la série ?", + "recur_delete_only_this": "Seulement cet événement", + "recur_delete_all": "Tous les événements de la série" + }, + "agenda": { + "empty": "Aucun événement dans cette période", + "open_details_aria": "Ouvrir les détails" + }, + "recurrence": { + "none": "Pas de répétition", + "daily": "Quotidien", + "weekly": "Hebdomadaire", + "monthly": "Mensuel", + "yearly": "Annuel", + "every_2_weeks": "Toutes les 2 semaines", + "custom": "Personnalisé...", + "recurring_fallback": "Récurrent", + "weekly_with_days": "Hebdomadaire ({days})", + "every_n_unit": "Tous les {n} {unit}", + "every_unit": "Tous les {unit}", + "unit_days": "jours", + "unit_weeks": "semaines", + "unit_months": "mois", + "unit_years": "ans", + "unit_freq_daily": "jour(s)", + "unit_freq_weekly": "semaine(s)", + "unit_freq_monthly": "mois", + "unit_freq_yearly": "an(s)", + "preview_at_days": " le(s) {days}", + "preview_count_suffix": ", {count}x", + "preview_until_suffix": " jusqu'au {date}", + "builder_title": "Répétition personnalisée", + "builder_every_label": "Tous les", + "builder_weekdays_label": "Jours de la semaine", + "builder_end_label": "Se termine", + "builder_end_never": "Jamais", + "builder_end_after": "Après", + "builder_end_after_unit": "événements", + "builder_end_until": "Le", + "builder_apply": "Appliquer" + }, + "weekday_short": { + "mon": "Lun", + "tue": "Mar", + "wed": "Mer", + "thu": "Jeu", + "fri": "Ven", + "sat": "Sam", + "sun": "Dim" + }, + "weekday_long": { + "sun": "Dimanche", + "mon": "Lundi", + "tue": "Mardi", + "wed": "Mercredi", + "thu": "Jeudi", + "fri": "Vendredi", + "sat": "Samedi" + }, + "header": { + "today": "Aujourd'hui", + "new_event": "Événement", + "aria_prev": "Précédent", + "aria_next": "Suivant", + "aria_filter": "Filtre", + "aria_export": "Exporter", + "block_event": "Événements", + "block_task": "Tâches", + "block_time_entry": "Temps", + "block_habit": "Habitudes", + "block_body": "Entraînement", + "block_watering": "Arrosage", + "block_sleep": "Sommeil", + "block_practice": "Pratique", + "block_period": "Cycle", + "block_guide": "Guides", + "block_visit": "Visites", + "block_study": "Étude", + "block_listening": "Musique", + "block_mood": "Humeur", + "block_rehearsal": "Répétition" + }, + "date_strip": { + "today_aria": "Aller à aujourd'hui", + "today_label": "Aujourd'hui" + }, + "mini_cal": { + "prev_aria": "Mois précédent", + "next_aria": "Mois suivant" + }, + "slots": { + "loading": "Recherche de créneaux libres...", + "empty": "Aucun créneau libre trouvé", + "label": "Créneaux libres", + "duration_suffix": "{n}min" + }, + "quick_event": { + "aria_dialog": "Créer un événement", + "header_new": "Nouvel événement", + "placeholder_title": "Ajouter un titre", + "type_event": "Événement", + "type_time_entry": "Temps", + "type_habit": "Habitude", + "placeholder_location": "Ajouter un lieu", + "placeholder_description": "Description" + }, + "list_view": { + "placeholder_new_event": "Nouvel événement...", + "voice_reason": "Les événements sont stockés chiffrés. Tu as besoin d'un compte Mana pour ça.", + "empty_label": "Événements", + "empty_text": "Aucun événement", + "open_action": "Ouvrir", + "delete_action": "Supprimer" + }, + "detail_route": { + "doc_title": "Calendrier - Mana", + "create_modal_title": "Nouvel événement", + "event_doc_title": "{title} - Calendrier - Mana", + "event_doc_title_fallback": "Événement", + "back_to_calendar": "Retour au calendrier", + "not_found": "Événement introuvable", + "edit_title": "Modifier l'événement", + "label_title": "Titre", + "label_description": "Description", + "label_date": "Date", + "label_from": "De", + "label_to": "À", + "label_location": "Lieu", + "placeholder_location": "Saisis le lieu...", + "submit_save": "Enregistrer", + "submit_cancel": "Annuler", + "time_suffix_uhr": "" + }, + "detail_view": { + "toast_deleted": "Événement supprimé", + "not_found": "Événement introuvable", + "confirm_delete": "Vraiment supprimer l'événement ?", + "placeholder_title": "Titre...", + "label_visibility": "Visibilité", + "label_allday": "Toute la journée", + "placeholder_location": "Ajouter un lieu...", + "section_tags": "Tags", + "section_description": "Description", + "placeholder_description": "Ajouter une description...", + "meta_created": "Créé : {date}", + "meta_updated": "Modifié : {date}", + "untitled_fallback": "Sans titre" + }, + "calendars_route": { + "doc_title": "Gérer les calendriers - Mana", + "back_to_calendar": "Retour au calendrier", + "page_title": "Mes calendriers", + "new_calendar": "Nouveau calendrier", + "label_name": "Nom", + "placeholder_name": "p. ex. Travail, Sport, Famille...", + "label_color": "Couleur", + "aria_pick_color": "Choisir la couleur", + "submit_create": "Créer", + "empty": "Pas encore de calendriers.", + "badge_default": "(Par défaut)", + "aria_hide": "Masquer", + "aria_show": "Afficher", + "aria_set_default": "Définir comme défaut", + "confirm_delete": "Vraiment supprimer le calendrier ? Tous les événements associés seront perdus." + }, + "shared_view": { + "kind": "Événement", + "label_when": "Quand", + "label_where": "Où", + "timezone_prefix": "Fuseau horaire : {tz}", + "add_to_calendar": "📅 Ajouter à mon calendrier", + "expiry": "Ce lien expire le {date}." + }, "repeat": { "none": "Ne pas répéter", "daily": "Quotidien", diff --git a/apps/mana/apps/web/src/lib/i18n/locales/calendar/it.json b/apps/mana/apps/web/src/lib/i18n/locales/calendar/it.json index d0511e518..a3a6bf468 100644 --- a/apps/mana/apps/web/src/lib/i18n/locales/calendar/it.json +++ b/apps/mana/apps/web/src/lib/i18n/locales/calendar/it.json @@ -29,8 +29,10 @@ }, "calendar": { "today": "Oggi", + "tomorrow": "Domani", "newEvent": "Nuovo evento", "noEvents": "Nessun evento", + "noEventsInRange": "Nessun evento in questo intervallo", "allDay": "Tutto il giorno", "myCalendars": "I miei calendari", "sharedCalendars": "Calendari condivisi", @@ -58,6 +60,210 @@ "changeStartTime": "Cambia ora di inizio", "changeEndTime": "Cambia ora di fine" }, + "event_form": { + "aria_create": "Crea evento", + "aria_edit": "Modifica evento", + "label_title_required": "Titolo *", + "placeholder_title": "Inserisci il nome dell'evento", + "label_time": "Ora", + "label_recurrence": "Ripetizione", + "placeholder_location": "Inserisci il luogo...", + "placeholder_description": "Aggiungi una descrizione", + "label_tags": "Tag", + "recur_edit_suffix": "{preview} — Modifica" + }, + "event_card": { + "new_event_label": "Nuovo evento", + "recurring_title": "Ricorrente", + "linked_title": "Eseguito" + }, + "event_modal": { + "editing_title": "Modifica evento", + "copy_title": "Copia", + "label_visibility": "Visibilità", + "label_share_link": "Link", + "created_at": "Creato: {date}", + "updated_at": "· Modificato: {date}", + "confirm_delete_single": "Eliminare questo evento?", + "clipboard_location_prefix": "Luogo: {location}", + "recur_edit_title": "Modifica evento ricorrente", + "recur_edit_text": "Modificare solo questo evento o tutti quelli futuri?", + "recur_edit_only_this": "Solo questo evento", + "recur_edit_all_future": "Tutti gli eventi futuri", + "recur_delete_title": "Elimina evento ricorrente", + "recur_delete_text": "Eliminare solo questo evento o tutta la serie?", + "recur_delete_only_this": "Solo questo evento", + "recur_delete_all": "Tutti gli eventi della serie" + }, + "agenda": { + "empty": "Nessun evento in questo intervallo", + "open_details_aria": "Apri dettagli" + }, + "recurrence": { + "none": "Nessuna ripetizione", + "daily": "Giornaliero", + "weekly": "Settimanale", + "monthly": "Mensile", + "yearly": "Annuale", + "every_2_weeks": "Ogni 2 settimane", + "custom": "Personalizzato...", + "recurring_fallback": "Ricorrente", + "weekly_with_days": "Settimanale ({days})", + "every_n_unit": "Ogni {n} {unit}", + "every_unit": "Ogni {unit}", + "unit_days": "giorni", + "unit_weeks": "settimane", + "unit_months": "mesi", + "unit_years": "anni", + "unit_freq_daily": "giorno/i", + "unit_freq_weekly": "settimana/e", + "unit_freq_monthly": "mese/i", + "unit_freq_yearly": "anno/i", + "preview_at_days": " il {days}", + "preview_count_suffix": ", {count}x", + "preview_until_suffix": " fino al {date}", + "builder_title": "Ripetizione personalizzata", + "builder_every_label": "Ogni", + "builder_weekdays_label": "Giorni della settimana", + "builder_end_label": "Termina", + "builder_end_never": "Mai", + "builder_end_after": "Dopo", + "builder_end_after_unit": "eventi", + "builder_end_until": "Il", + "builder_apply": "Applica" + }, + "weekday_short": { + "mon": "Lun", + "tue": "Mar", + "wed": "Mer", + "thu": "Gio", + "fri": "Ven", + "sat": "Sab", + "sun": "Dom" + }, + "weekday_long": { + "sun": "Domenica", + "mon": "Lunedì", + "tue": "Martedì", + "wed": "Mercoledì", + "thu": "Giovedì", + "fri": "Venerdì", + "sat": "Sabato" + }, + "header": { + "today": "Oggi", + "new_event": "Evento", + "aria_prev": "Indietro", + "aria_next": "Avanti", + "aria_filter": "Filtro", + "aria_export": "Esporta", + "block_event": "Eventi", + "block_task": "Attività", + "block_time_entry": "Tempi", + "block_habit": "Abitudini", + "block_body": "Allenamento", + "block_watering": "Annaffiature", + "block_sleep": "Sonno", + "block_practice": "Esercizio", + "block_period": "Ciclo", + "block_guide": "Guide", + "block_visit": "Visite", + "block_study": "Studio", + "block_listening": "Musica", + "block_mood": "Umore", + "block_rehearsal": "Prova" + }, + "date_strip": { + "today_aria": "Vai a oggi", + "today_label": "Oggi" + }, + "mini_cal": { + "prev_aria": "Mese precedente", + "next_aria": "Mese successivo" + }, + "slots": { + "loading": "Ricerca slot liberi...", + "empty": "Nessuno slot libero trovato", + "label": "Slot liberi", + "duration_suffix": "{n}min" + }, + "quick_event": { + "aria_dialog": "Crea evento", + "header_new": "Nuovo evento", + "placeholder_title": "Aggiungi un titolo", + "type_event": "Evento", + "type_time_entry": "Tempo", + "type_habit": "Abitudine", + "placeholder_location": "Aggiungi luogo", + "placeholder_description": "Descrizione" + }, + "list_view": { + "placeholder_new_event": "Nuovo evento...", + "voice_reason": "Gli eventi sono salvati cifrati. Per questo serve un account Mana.", + "empty_label": "Eventi", + "empty_text": "Nessun evento", + "open_action": "Apri", + "delete_action": "Elimina" + }, + "detail_route": { + "doc_title": "Calendario - Mana", + "create_modal_title": "Nuovo evento", + "event_doc_title": "{title} - Calendario - Mana", + "event_doc_title_fallback": "Evento", + "back_to_calendar": "Torna al calendario", + "not_found": "Evento non trovato", + "edit_title": "Modifica evento", + "label_title": "Titolo", + "label_description": "Descrizione", + "label_date": "Data", + "label_from": "Da", + "label_to": "A", + "label_location": "Luogo", + "placeholder_location": "Inserisci il luogo...", + "submit_save": "Salva", + "submit_cancel": "Annulla", + "time_suffix_uhr": "" + }, + "detail_view": { + "toast_deleted": "Evento eliminato", + "not_found": "Evento non trovato", + "confirm_delete": "Eliminare davvero l'evento?", + "placeholder_title": "Titolo...", + "label_visibility": "Visibilità", + "label_allday": "Tutto il giorno", + "placeholder_location": "Aggiungi luogo...", + "section_tags": "Tag", + "section_description": "Descrizione", + "placeholder_description": "Aggiungi descrizione...", + "meta_created": "Creato: {date}", + "meta_updated": "Modificato: {date}", + "untitled_fallback": "Senza titolo" + }, + "calendars_route": { + "doc_title": "Gestisci calendari - Mana", + "back_to_calendar": "Torna al calendario", + "page_title": "I miei calendari", + "new_calendar": "Nuovo calendario", + "label_name": "Nome", + "placeholder_name": "es. Lavoro, Sport, Famiglia...", + "label_color": "Colore", + "aria_pick_color": "Scegli colore", + "submit_create": "Crea", + "empty": "Ancora nessun calendario.", + "badge_default": "(Predefinito)", + "aria_hide": "Nascondi", + "aria_show": "Mostra", + "aria_set_default": "Imposta come predefinito", + "confirm_delete": "Eliminare davvero il calendario? Tutti gli eventi associati andranno persi." + }, + "shared_view": { + "kind": "Evento", + "label_when": "Quando", + "label_where": "Dove", + "timezone_prefix": "Fuso orario: {tz}", + "add_to_calendar": "📅 Aggiungi al mio calendario", + "expiry": "Questo link scade il {date}." + }, "repeat": { "none": "Non ripetere", "daily": "Giornaliero", diff --git a/apps/mana/apps/web/src/lib/modules/calendar/ListView.svelte b/apps/mana/apps/web/src/lib/modules/calendar/ListView.svelte index 5c5885b72..eabc7f256 100644 --- a/apps/mana/apps/web/src/lib/modules/calendar/ListView.svelte +++ b/apps/mana/apps/web/src/lib/modules/calendar/ListView.svelte @@ -3,6 +3,7 @@ Mini week strip + today's events. Floating input at bottom. -->

{headerLabel}

@@ -120,18 +133,22 @@ onclick={() => (showFilters = !showFilters)} class="filter-btn" class:active={!allActive} - aria-label="Filter" + aria-label={$_('calendar.header.aria_filter')} > -
diff --git a/apps/mana/apps/web/src/lib/modules/calendar/components/CustomRecurrenceBuilder.svelte b/apps/mana/apps/web/src/lib/modules/calendar/components/CustomRecurrenceBuilder.svelte index a87bcdc4b..1a8650f2d 100644 --- a/apps/mana/apps/web/src/lib/modules/calendar/components/CustomRecurrenceBuilder.svelte +++ b/apps/mana/apps/web/src/lib/modules/calendar/components/CustomRecurrenceBuilder.svelte @@ -1,4 +1,5 @@
-
Benutzerdefinierte Wiederholung
+
{$_('calendar.recurrence.builder_title')}
- Alle + {$_('calendar.recurrence.builder_every_label')}
{#if freq === 'WEEKLY'}
- +
{#each DAYS as day} - + +
diff --git a/apps/mana/apps/web/src/lib/modules/calendar/components/DateStrip.svelte b/apps/mana/apps/web/src/lib/modules/calendar/components/DateStrip.svelte index 1c0892076..b728887fc 100644 --- a/apps/mana/apps/web/src/lib/modules/calendar/components/DateStrip.svelte +++ b/apps/mana/apps/web/src/lib/modules/calendar/components/DateStrip.svelte @@ -1,5 +1,6 @@
@@ -40,7 +49,7 @@ @@ -50,7 +59,7 @@ diff --git a/apps/mana/apps/web/src/lib/modules/calendar/components/QuickEventPopover.svelte b/apps/mana/apps/web/src/lib/modules/calendar/components/QuickEventPopover.svelte index 17cd114e4..6520a30d0 100644 --- a/apps/mana/apps/web/src/lib/modules/calendar/components/QuickEventPopover.svelte +++ b/apps/mana/apps/web/src/lib/modules/calendar/components/QuickEventPopover.svelte @@ -72,14 +72,14 @@ const calendarColor = $derived(getCalendarColor(calendarsCtx.value, calendarId || '')); - const RECURRENCE_OPTIONS = [ - { value: '', label: 'Keine Wiederholung' }, - { value: 'FREQ=DAILY', label: 'Täglich' }, - { value: 'FREQ=WEEKLY', label: 'Wöchentlich' }, - { value: 'FREQ=WEEKLY;INTERVAL=2', label: 'Alle 2 Wochen' }, - { value: 'FREQ=MONTHLY', label: 'Monatlich' }, - { value: 'FREQ=YEARLY', label: 'Jährlich' }, - ]; + const RECURRENCE_OPTIONS = $derived([ + { value: '', label: $_('calendar.recurrence.none') }, + { value: 'FREQ=DAILY', label: $_('calendar.recurrence.daily') }, + { value: 'FREQ=WEEKLY', label: $_('calendar.recurrence.weekly') }, + { value: 'FREQ=WEEKLY;INTERVAL=2', label: $_('calendar.recurrence.every_2_weeks') }, + { value: 'FREQ=MONTHLY', label: $_('calendar.recurrence.monthly') }, + { value: 'FREQ=YEARLY', label: $_('calendar.recurrence.yearly') }, + ]); function handleSubmit(e: Event) { e.preventDefault(); @@ -143,7 +143,7 @@ class="popover" style="top: {popoverPos.top}px; left: {popoverPos.left}px;" role="dialog" - aria-label="Termin erstellen" + aria-label={$_('calendar.quick_event.aria_dialog')} >
@@ -151,7 +151,7 @@
- Neuer Termin + {$_('calendar.quick_event.header_new')} @@ -164,7 +164,7 @@ bind:this={titleInput} bind:value={title} type="text" - placeholder="Titel hinzufügen" + placeholder={$_('calendar.quick_event.placeholder_title')} class="title-input" required /> @@ -177,7 +177,8 @@ class:active={blockType === 'event'} onclick={() => (blockType = 'event')} > - Termin + + {$_('calendar.quick_event.type_event')}
@@ -217,7 +220,7 @@ @@ -226,14 +229,14 @@
- Beginn + {$_('calendar.event.start')} {#if !isAllDay} {/if}
- Ende + {$_('calendar.event.end')} {#if !isAllDay} @@ -269,7 +272,12 @@
- +
@@ -277,7 +285,7 @@ diff --git a/apps/mana/apps/web/src/lib/modules/calendar/components/SlotSuggestions.svelte b/apps/mana/apps/web/src/lib/modules/calendar/components/SlotSuggestions.svelte index b306ca712..600e8741b 100644 --- a/apps/mana/apps/web/src/lib/modules/calendar/components/SlotSuggestions.svelte +++ b/apps/mana/apps/web/src/lib/modules/calendar/components/SlotSuggestions.svelte @@ -4,6 +4,7 @@ --> {#if loading} -
Suche freie Zeiten...
+
{$_('calendar.slots.loading')}
{:else if slots.length === 0} -
Keine freien Slots gefunden
+
{$_('calendar.slots.empty')}
{:else}
- Freie Zeiten + {$_('calendar.slots.label')} {#each slots as slot} {/each}
diff --git a/apps/mana/apps/web/src/lib/modules/calendar/views/DetailView.svelte b/apps/mana/apps/web/src/lib/modules/calendar/views/DetailView.svelte index 244fd80ce..3f06db056 100644 --- a/apps/mana/apps/web/src/lib/modules/calendar/views/DetailView.svelte +++ b/apps/mana/apps/web/src/lib/modules/calendar/views/DetailView.svelte @@ -3,6 +3,7 @@ All fields are always editable. Changes auto-save on blur. --> @@ -135,11 +137,11 @@ {#snippet body(event)} @@ -148,12 +150,12 @@ bind:value={editTitle} onfocus={detail.focus} onblur={saveField} - placeholder="Titel..." + placeholder={$_('calendar.detail_view.placeholder_title')} />
- Sichtbarkeit + {$_('calendar.detail_view.label_visibility')}
@@ -201,7 +203,7 @@ {/if}
@@ -213,7 +215,7 @@ bind:value={editLocation} onfocus={detail.focus} onblur={saveField} - placeholder="Ort hinzufügen..." + placeholder={$_('calendar.detail_view.placeholder_location')} />
@@ -227,7 +229,7 @@ {#if eventTags.length > 0}
- +
{#each eventTags as tag (tag.id)}
@@ -85,25 +87,28 @@ class="space-y-3" >
- {$_('calendar.calendars_route.label_name')}
- Farbe + {$_('calendar.calendars_route.label_color')}
{#each PRESET_COLORS as color}
@@ -138,7 +143,9 @@
{#if calendarsCtx.value.length === 0} -
Noch keine Kalender vorhanden.
+
+ {$_('calendar.calendars_route.empty')} +
{:else} {#each calendarsCtx.value as cal (cal.id)}
@@ -150,7 +157,9 @@
{cal.name} {#if cal.isDefault} - (Standard) + {$_('calendar.calendars_route.badge_default')} {/if}
@@ -158,7 +167,9 @@ diff --git a/apps/mana/apps/web/src/routes/(app)/calendar/event/[id]/+page.svelte b/apps/mana/apps/web/src/routes/(app)/calendar/event/[id]/+page.svelte index 4588326ca..abb8092da 100644 --- a/apps/mana/apps/web/src/routes/(app)/calendar/event/[id]/+page.svelte +++ b/apps/mana/apps/web/src/routes/(app)/calendar/event/[id]/+page.svelte @@ -66,7 +66,11 @@ - {event?.title ?? 'Termin'} - Kalender - Mana + {$_('calendar.detail_route.event_doc_title', { + values: { title: event?.title ?? $_('calendar.detail_route.event_doc_title_fallback') }, + })} @@ -77,20 +81,22 @@ class="mb-4 flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground transition-colors" > - Zurück zum Kalender + {$_('calendar.detail_route.back_to_calendar')} {#if !event}
-

Termin nicht gefunden

+

{$_('calendar.detail_route.not_found')}

{:else if isEditing}
-

Termin bearbeiten

+

+ {$_('calendar.detail_route.edit_title')} +

{ @@ -101,7 +107,7 @@ >
{$_('calendar.detail_route.label_title')} {$_('calendar.detail_route.label_description')}