feat: add JMAP Calendar integration with month/week/day/agenda views

Full calendar support via JMAP Calendars (RFC 8984):
- Event create/edit/delete with recurrence rules and reminders
- Multi-day event spanning, column-based overlap layout
- Locale-aware date formatting, first day of week and time format settings
- Real-time updates via push notifications
- ARIA accessibility, input validation, color sanitization
- Keyboard shortcuts, mobile touch targets, focus trap
- ICU pluralization for all 8 supported languages
This commit is contained in:
Matthieu MALVACHE
2026-02-16 20:34:29 +01:00
committed by Matthieu MALVACHE
parent fb414bf2c9
commit e6f67c24cb
28 changed files with 3922 additions and 39 deletions
+112 -1
View File
@@ -32,6 +32,7 @@
"storage": "Speicher",
"sign_out": "Abmelden",
"contacts": "Kontakte",
"calendar": "Kalender",
"settings": "Einstellungen",
"loading_mailboxes": "Postfächer werden geladen...",
"push_connected": "Echtzeit-Updates aktiv",
@@ -375,7 +376,8 @@
"account": "Konto",
"identities": "Identitäten",
"vacation": "Abwesenheitsnotiz",
"advanced": "Erweitert"
"advanced": "Erweitert",
"calendar": "Kalender"
},
"appearance": {
"title": "Darstellung",
@@ -902,6 +904,115 @@
"error_delete": "Kontakt konnte nicht gelöscht werden"
}
},
"calendar": {
"title": "Kalender",
"back_to_email": "Zurück zu E-Mails",
"my_calendars": "Meine Kalender",
"views": {
"month": "Monat",
"week": "Woche",
"day": "Tag",
"agenda": "Agenda",
"today": "Heute"
},
"events": {
"create": "Termin erstellen",
"edit": "Termin bearbeiten",
"delete": "Termin löschen",
"details": "Termindetails",
"no_events": "Keine Termine",
"all_day": "Ganztägig",
"more": "+{count} weitere",
"no_title": "(Kein Titel)",
"today_header": "Heute",
"tomorrow_header": "Morgen"
},
"form": {
"title": "Titel",
"description": "Beschreibung",
"location": "Ort",
"start_date": "Startdatum",
"end_date": "Enddatum",
"start_time": "Startzeit",
"end_time": "Endzeit",
"all_day_event": "Ganztägiger Termin",
"calendar_select": "Kalender",
"save": "Speichern",
"cancel": "Abbrechen",
"delete_confirm": "Sind Sie sicher, dass Sie diesen Termin löschen möchten?",
"color": "Farbe"
},
"participants": {
"title": "Teilnehmer",
"add": "Teilnehmer hinzufügen",
"organizer": "Organisator",
"attendee": "Teilnehmer",
"accepted": "Zugesagt",
"declined": "Abgelehnt",
"tentative": "Vorläufig",
"needs_action": "Antwort ausstehend"
},
"recurrence": {
"title": "Wiederholung",
"none": "Keine Wiederholung",
"daily": "Täglich",
"weekly": "Wöchentlich",
"monthly": "Monatlich",
"yearly": "Jährlich",
"every_n_days": "Alle {count} Tage",
"every_n_weeks": "Alle {count} Wochen",
"every_n_months": "Alle {count} Monate",
"until": "Bis",
"occurrences": "{count} Wiederholungen"
},
"alerts": {
"title": "Erinnerung",
"none": "Keine Erinnerung",
"at_time": "Zum Zeitpunkt des Termins",
"minutes_before": "{count, plural, one {# Minute vorher} other {# Minuten vorher}}",
"hours_before": "{count, plural, one {# Stunde vorher} other {# Stunden vorher}}",
"days_before": "{count, plural, one {# Tag vorher} other {# Tage vorher}}"
},
"settings": {
"title": "Kalendereinstellungen",
"default_view": "Standardansicht",
"week_starts_on": "Woche beginnt am",
"time_format": "Zeitformat",
"default_calendar": "Standardkalender",
"default_reminder": "Standarderinnerung",
"time_format_12h": "12-Stunden",
"time_format_24h": "24-Stunden"
},
"days": {
"monday": "Montag",
"tuesday": "Dienstag",
"wednesday": "Mittwoch",
"thursday": "Donnerstag",
"friday": "Freitag",
"saturday": "Samstag",
"sunday": "Sonntag",
"mon": "Mo",
"tue": "Di",
"wed": "Mi",
"thu": "Do",
"fri": "Fr",
"sat": "Sa",
"sun": "So"
},
"notifications": {
"event_created": "Termin erstellt",
"event_updated": "Termin aktualisiert",
"event_deleted": "Termin gelöscht",
"calendar_created": "Kalender erstellt",
"calendar_deleted": "Kalender gelöscht"
},
"status": {
"loading_calendars": "Kalender werden geladen...",
"loading_events": "Termine werden geladen..."
},
"nav_prev": "Zurück",
"nav_next": "Weiter"
},
"advanced_search": {
"title": "Erweiterte Suche",
"from": "Von",
+112 -1
View File
@@ -32,6 +32,7 @@
"storage": "Storage",
"sign_out": "Sign out",
"contacts": "Contacts",
"calendar": "Calendar",
"settings": "Settings",
"loading_mailboxes": "Loading mailboxes...",
"push_connected": "Real-time updates active",
@@ -375,7 +376,8 @@
"account": "Account",
"identities": "Identities",
"vacation": "Vacation Responder",
"advanced": "Advanced"
"advanced": "Advanced",
"calendar": "Calendar"
},
"appearance": {
"title": "Appearance",
@@ -902,6 +904,115 @@
"error_delete": "Failed to delete contact"
}
},
"calendar": {
"title": "Calendar",
"back_to_email": "Back to email",
"my_calendars": "My calendars",
"views": {
"month": "Month",
"week": "Week",
"day": "Day",
"agenda": "Agenda",
"today": "Today"
},
"events": {
"create": "Create event",
"edit": "Edit event",
"delete": "Delete event",
"details": "Event details",
"no_events": "No events",
"all_day": "All day",
"more": "+{count} more",
"no_title": "(No title)",
"today_header": "Today",
"tomorrow_header": "Tomorrow"
},
"form": {
"title": "Title",
"description": "Description",
"location": "Location",
"start_date": "Start date",
"end_date": "End date",
"start_time": "Start time",
"end_time": "End time",
"all_day_event": "All-day event",
"calendar_select": "Calendar",
"save": "Save",
"cancel": "Cancel",
"delete_confirm": "Are you sure you want to delete this event?",
"color": "Color"
},
"participants": {
"title": "Participants",
"add": "Add participant",
"organizer": "Organizer",
"attendee": "Attendee",
"accepted": "Accepted",
"declined": "Declined",
"tentative": "Tentative",
"needs_action": "Needs action"
},
"recurrence": {
"title": "Recurrence",
"none": "Does not repeat",
"daily": "Daily",
"weekly": "Weekly",
"monthly": "Monthly",
"yearly": "Yearly",
"every_n_days": "Every {count} days",
"every_n_weeks": "Every {count} weeks",
"every_n_months": "Every {count} months",
"until": "Until",
"occurrences": "{count} occurrences"
},
"alerts": {
"title": "Reminder",
"none": "No reminder",
"at_time": "At time of event",
"minutes_before": "{count, plural, one {# minute before} other {# minutes before}}",
"hours_before": "{count, plural, one {# hour before} other {# hours before}}",
"days_before": "{count, plural, one {# day before} other {# days before}}"
},
"settings": {
"title": "Calendar settings",
"default_view": "Default view",
"week_starts_on": "Week starts on",
"time_format": "Time format",
"default_calendar": "Default calendar",
"default_reminder": "Default reminder",
"time_format_12h": "12-hour",
"time_format_24h": "24-hour"
},
"days": {
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday",
"mon": "Mon",
"tue": "Tue",
"wed": "Wed",
"thu": "Thu",
"fri": "Fri",
"sat": "Sat",
"sun": "Sun"
},
"notifications": {
"event_created": "Event created",
"event_updated": "Event updated",
"event_deleted": "Event deleted",
"calendar_created": "Calendar created",
"calendar_deleted": "Calendar deleted"
},
"status": {
"loading_calendars": "Loading calendars...",
"loading_events": "Loading events..."
},
"nav_prev": "Previous",
"nav_next": "Next"
},
"advanced_search": {
"title": "Advanced Search",
"from": "From",
+112 -1
View File
@@ -32,6 +32,7 @@
"storage": "Almacenamiento",
"sign_out": "Cerrar sesión",
"contacts": "Contactos",
"calendar": "Calendario",
"settings": "Configuración",
"loading_mailboxes": "Cargando buzones...",
"push_connected": "Actualizaciones en tiempo real activas",
@@ -375,7 +376,8 @@
"account": "Cuenta",
"identities": "Identidades",
"vacation": "Respuesta automática",
"advanced": "Avanzado"
"advanced": "Avanzado",
"calendar": "Calendario"
},
"appearance": {
"title": "Apariencia",
@@ -902,6 +904,115 @@
"error_delete": "Error al eliminar el contacto"
}
},
"calendar": {
"title": "Calendario",
"back_to_email": "Volver al correo",
"my_calendars": "Mis calendarios",
"views": {
"month": "Mes",
"week": "Semana",
"day": "Día",
"agenda": "Agenda",
"today": "Hoy"
},
"events": {
"create": "Crear evento",
"edit": "Editar evento",
"delete": "Eliminar evento",
"details": "Detalles del evento",
"no_events": "Sin eventos",
"all_day": "Todo el día",
"more": "+{count} más",
"no_title": "(Sin título)",
"today_header": "Hoy",
"tomorrow_header": "Mañana"
},
"form": {
"title": "Título",
"description": "Descripción",
"location": "Ubicación",
"start_date": "Fecha de inicio",
"end_date": "Fecha de fin",
"start_time": "Hora de inicio",
"end_time": "Hora de fin",
"all_day_event": "Evento de todo el día",
"calendar_select": "Calendario",
"save": "Guardar",
"cancel": "Cancelar",
"delete_confirm": "¿Está seguro de que desea eliminar este evento?",
"color": "Color"
},
"participants": {
"title": "Participantes",
"add": "Agregar participante",
"organizer": "Organizador",
"attendee": "Participante",
"accepted": "Aceptado",
"declined": "Rechazado",
"tentative": "Provisional",
"needs_action": "Pendiente de respuesta"
},
"recurrence": {
"title": "Recurrencia",
"none": "No se repite",
"daily": "Diario",
"weekly": "Semanal",
"monthly": "Mensual",
"yearly": "Anual",
"every_n_days": "Cada {count} días",
"every_n_weeks": "Cada {count} semanas",
"every_n_months": "Cada {count} meses",
"until": "Hasta",
"occurrences": "{count} repeticiones"
},
"alerts": {
"title": "Recordatorio",
"none": "Sin recordatorio",
"at_time": "En el momento del evento",
"minutes_before": "{count, plural, one {# minuto antes} other {# minutos antes}}",
"hours_before": "{count, plural, one {# hora antes} other {# horas antes}}",
"days_before": "{count, plural, one {# día antes} other {# días antes}}"
},
"settings": {
"title": "Configuración del calendario",
"default_view": "Vista predeterminada",
"week_starts_on": "La semana comienza el",
"time_format": "Formato de hora",
"default_calendar": "Calendario predeterminado",
"default_reminder": "Recordatorio predeterminado",
"time_format_12h": "12 horas",
"time_format_24h": "24 horas"
},
"days": {
"monday": "Lunes",
"tuesday": "Martes",
"wednesday": "Miércoles",
"thursday": "Jueves",
"friday": "Viernes",
"saturday": "Sábado",
"sunday": "Domingo",
"mon": "Lun",
"tue": "Mar",
"wed": "Mié",
"thu": "Jue",
"fri": "Vie",
"sat": "Sáb",
"sun": "Dom"
},
"notifications": {
"event_created": "Evento creado",
"event_updated": "Evento actualizado",
"event_deleted": "Evento eliminado",
"calendar_created": "Calendario creado",
"calendar_deleted": "Calendario eliminado"
},
"status": {
"loading_calendars": "Cargando calendarios...",
"loading_events": "Cargando eventos..."
},
"nav_prev": "Anterior",
"nav_next": "Siguiente"
},
"advanced_search": {
"title": "Búsqueda avanzada",
"from": "De",
+112 -1
View File
@@ -32,6 +32,7 @@
"storage": "Stockage",
"sign_out": "Se déconnecter",
"contacts": "Contacts",
"calendar": "Calendrier",
"settings": "Paramètres",
"loading_mailboxes": "Chargement des boîtes mail...",
"push_connected": "Mises à jour en temps réel actives",
@@ -375,7 +376,8 @@
"account": "Compte",
"identities": "Identités",
"vacation": "Répondeur d'absence",
"advanced": "Avancé"
"advanced": "Avancé",
"calendar": "Calendrier"
},
"appearance": {
"title": "Apparence",
@@ -902,6 +904,115 @@
"error_delete": "Échec de la suppression du contact"
}
},
"calendar": {
"title": "Calendrier",
"back_to_email": "Retour aux e-mails",
"my_calendars": "Mes calendriers",
"views": {
"month": "Mois",
"week": "Semaine",
"day": "Jour",
"agenda": "Agenda",
"today": "Aujourd'hui"
},
"events": {
"create": "Créer un événement",
"edit": "Modifier l'événement",
"delete": "Supprimer l'événement",
"details": "Détails de l'événement",
"no_events": "Aucun événement",
"all_day": "Toute la journée",
"more": "+{count} de plus",
"no_title": "(Sans titre)",
"today_header": "Aujourd'hui",
"tomorrow_header": "Demain"
},
"form": {
"title": "Titre",
"description": "Description",
"location": "Lieu",
"start_date": "Date de début",
"end_date": "Date de fin",
"start_time": "Heure de début",
"end_time": "Heure de fin",
"all_day_event": "Événement sur toute la journée",
"calendar_select": "Calendrier",
"save": "Enregistrer",
"cancel": "Annuler",
"delete_confirm": "Êtes-vous sûr de vouloir supprimer cet événement ?",
"color": "Couleur"
},
"participants": {
"title": "Participants",
"add": "Ajouter un participant",
"organizer": "Organisateur",
"attendee": "Participant",
"accepted": "Accepté",
"declined": "Refusé",
"tentative": "Provisoire",
"needs_action": "En attente de réponse"
},
"recurrence": {
"title": "Récurrence",
"none": "Ne se répète pas",
"daily": "Quotidien",
"weekly": "Hebdomadaire",
"monthly": "Mensuel",
"yearly": "Annuel",
"every_n_days": "Tous les {count} jours",
"every_n_weeks": "Toutes les {count} semaines",
"every_n_months": "Tous les {count} mois",
"until": "Jusqu'au",
"occurrences": "{count} occurrences"
},
"alerts": {
"title": "Rappel",
"none": "Aucun rappel",
"at_time": "Au moment de l'événement",
"minutes_before": "{count, plural, one {# minute avant} other {# minutes avant}}",
"hours_before": "{count, plural, one {# heure avant} other {# heures avant}}",
"days_before": "{count, plural, one {# jour avant} other {# jours avant}}"
},
"settings": {
"title": "Paramètres du calendrier",
"default_view": "Vue par défaut",
"week_starts_on": "La semaine commence le",
"time_format": "Format de l'heure",
"default_calendar": "Calendrier par défaut",
"default_reminder": "Rappel par défaut",
"time_format_12h": "12 heures",
"time_format_24h": "24 heures"
},
"days": {
"monday": "Lundi",
"tuesday": "Mardi",
"wednesday": "Mercredi",
"thursday": "Jeudi",
"friday": "Vendredi",
"saturday": "Samedi",
"sunday": "Dimanche",
"mon": "Lun",
"tue": "Mar",
"wed": "Mer",
"thu": "Jeu",
"fri": "Ven",
"sat": "Sam",
"sun": "Dim"
},
"notifications": {
"event_created": "Événement créé",
"event_updated": "Événement mis à jour",
"event_deleted": "Événement supprimé",
"calendar_created": "Calendrier créé",
"calendar_deleted": "Calendrier supprimé"
},
"status": {
"loading_calendars": "Chargement des calendriers...",
"loading_events": "Chargement des événements..."
},
"nav_prev": "Précédent",
"nav_next": "Suivant"
},
"advanced_search": {
"title": "Recherche avancée",
"from": "De",
+112 -1
View File
@@ -32,6 +32,7 @@
"storage": "Spazio di archiviazione",
"sign_out": "Esci",
"contacts": "Contatti",
"calendar": "Calendario",
"settings": "Impostazioni",
"loading_mailboxes": "Caricamento caselle di posta...",
"push_connected": "Aggiornamenti in tempo reale attivi",
@@ -375,7 +376,8 @@
"account": "Account",
"identities": "Identità",
"vacation": "Risponditore automatico",
"advanced": "Avanzate"
"advanced": "Avanzate",
"calendar": "Calendario"
},
"appearance": {
"title": "Aspetto",
@@ -902,6 +904,115 @@
"error_delete": "Impossibile eliminare il contatto"
}
},
"calendar": {
"title": "Calendario",
"back_to_email": "Torna alla posta",
"my_calendars": "I miei calendari",
"views": {
"month": "Mese",
"week": "Settimana",
"day": "Giorno",
"agenda": "Agenda",
"today": "Oggi"
},
"events": {
"create": "Crea evento",
"edit": "Modifica evento",
"delete": "Elimina evento",
"details": "Dettagli evento",
"no_events": "Nessun evento",
"all_day": "Tutto il giorno",
"more": "+{count} altri",
"no_title": "(Senza titolo)",
"today_header": "Oggi",
"tomorrow_header": "Domani"
},
"form": {
"title": "Titolo",
"description": "Descrizione",
"location": "Luogo",
"start_date": "Data di inizio",
"end_date": "Data di fine",
"start_time": "Ora di inizio",
"end_time": "Ora di fine",
"all_day_event": "Evento giornata intera",
"calendar_select": "Calendario",
"save": "Salva",
"cancel": "Annulla",
"delete_confirm": "Sei sicuro di voler eliminare questo evento?",
"color": "Colore"
},
"participants": {
"title": "Partecipanti",
"add": "Aggiungi partecipante",
"organizer": "Organizzatore",
"attendee": "Partecipante",
"accepted": "Accettato",
"declined": "Rifiutato",
"tentative": "Provvisorio",
"needs_action": "In attesa di risposta"
},
"recurrence": {
"title": "Ricorrenza",
"none": "Non si ripete",
"daily": "Giornaliero",
"weekly": "Settimanale",
"monthly": "Mensile",
"yearly": "Annuale",
"every_n_days": "Ogni {count} giorni",
"every_n_weeks": "Ogni {count} settimane",
"every_n_months": "Ogni {count} mesi",
"until": "Fino al",
"occurrences": "{count} ripetizioni"
},
"alerts": {
"title": "Promemoria",
"none": "Nessun promemoria",
"at_time": "All'ora dell'evento",
"minutes_before": "{count, plural, one {# minuto prima} other {# minuti prima}}",
"hours_before": "{count, plural, one {# ora prima} other {# ore prima}}",
"days_before": "{count, plural, one {# giorno prima} other {# giorni prima}}"
},
"settings": {
"title": "Impostazioni calendario",
"default_view": "Vista predefinita",
"week_starts_on": "La settimana inizia il",
"time_format": "Formato ora",
"default_calendar": "Calendario predefinito",
"default_reminder": "Promemoria predefinito",
"time_format_12h": "12 ore",
"time_format_24h": "24 ore"
},
"days": {
"monday": "Lunedì",
"tuesday": "Martedì",
"wednesday": "Mercoledì",
"thursday": "Giovedì",
"friday": "Venerdì",
"saturday": "Sabato",
"sunday": "Domenica",
"mon": "Lun",
"tue": "Mar",
"wed": "Mer",
"thu": "Gio",
"fri": "Ven",
"sat": "Sab",
"sun": "Dom"
},
"notifications": {
"event_created": "Evento creato",
"event_updated": "Evento aggiornato",
"event_deleted": "Evento eliminato",
"calendar_created": "Calendario creato",
"calendar_deleted": "Calendario eliminato"
},
"status": {
"loading_calendars": "Caricamento calendari...",
"loading_events": "Caricamento eventi..."
},
"nav_prev": "Precedente",
"nav_next": "Successivo"
},
"advanced_search": {
"title": "Ricerca avanzata",
"from": "Da",
+112 -1
View File
@@ -32,6 +32,7 @@
"storage": "ストレージ",
"sign_out": "サインアウト",
"contacts": "連絡先",
"calendar": "カレンダー",
"settings": "設定",
"loading_mailboxes": "メールボックスを読み込み中...",
"push_connected": "リアルタイム更新が有効",
@@ -375,7 +376,8 @@
"account": "アカウント",
"identities": "送信者情報",
"vacation": "不在応答",
"advanced": "詳細設定"
"advanced": "詳細設定",
"calendar": "カレンダー"
},
"appearance": {
"title": "外観",
@@ -902,6 +904,115 @@
"error_delete": "連絡先の削除に失敗しました"
}
},
"calendar": {
"title": "カレンダー",
"back_to_email": "メールに戻る",
"my_calendars": "マイカレンダー",
"views": {
"month": "月",
"week": "週",
"day": "日",
"agenda": "予定リスト",
"today": "今日"
},
"events": {
"create": "予定を作成",
"edit": "予定を編集",
"delete": "予定を削除",
"details": "予定の詳細",
"no_events": "予定なし",
"all_day": "終日",
"more": "他{count}件",
"no_title": "(タイトルなし)",
"today_header": "今日",
"tomorrow_header": "明日"
},
"form": {
"title": "タイトル",
"description": "説明",
"location": "場所",
"start_date": "開始日",
"end_date": "終了日",
"start_time": "開始時刻",
"end_time": "終了時刻",
"all_day_event": "終日の予定",
"calendar_select": "カレンダー",
"save": "保存",
"cancel": "キャンセル",
"delete_confirm": "この予定を削除してもよろしいですか?",
"color": "色"
},
"participants": {
"title": "参加者",
"add": "参加者を追加",
"organizer": "主催者",
"attendee": "参加者",
"accepted": "承諾",
"declined": "辞退",
"tentative": "仮承諾",
"needs_action": "未回答"
},
"recurrence": {
"title": "繰り返し",
"none": "繰り返しなし",
"daily": "毎日",
"weekly": "毎週",
"monthly": "毎月",
"yearly": "毎年",
"every_n_days": "{count}日ごと",
"every_n_weeks": "{count}週間ごと",
"every_n_months": "{count}か月ごと",
"until": "終了日",
"occurrences": "{count}回"
},
"alerts": {
"title": "リマインダー",
"none": "リマインダーなし",
"at_time": "予定の時刻",
"minutes_before": "{count}分前",
"hours_before": "{count}時間前",
"days_before": "{count}日前"
},
"settings": {
"title": "カレンダー設定",
"default_view": "デフォルトの表示",
"week_starts_on": "週の開始曜日",
"time_format": "時刻の形式",
"default_calendar": "デフォルトのカレンダー",
"default_reminder": "デフォルトのリマインダー",
"time_format_12h": "12時間制",
"time_format_24h": "24時間制"
},
"days": {
"monday": "月曜日",
"tuesday": "火曜日",
"wednesday": "水曜日",
"thursday": "木曜日",
"friday": "金曜日",
"saturday": "土曜日",
"sunday": "日曜日",
"mon": "月",
"tue": "火",
"wed": "水",
"thu": "木",
"fri": "金",
"sat": "土",
"sun": "日"
},
"notifications": {
"event_created": "予定を作成しました",
"event_updated": "予定を更新しました",
"event_deleted": "予定を削除しました",
"calendar_created": "カレンダーを作成しました",
"calendar_deleted": "カレンダーを削除しました"
},
"status": {
"loading_calendars": "カレンダーを読み込み中...",
"loading_events": "予定を読み込み中..."
},
"nav_prev": "前へ",
"nav_next": "次へ"
},
"advanced_search": {
"title": "詳細検索",
"from": "差出人",
+112 -1
View File
@@ -32,6 +32,7 @@
"storage": "Opslag",
"sign_out": "Afmelden",
"contacts": "Contacten",
"calendar": "Agenda",
"settings": "Instellingen",
"loading_mailboxes": "Mappen laden...",
"push_connected": "Real-time updates actief",
@@ -375,7 +376,8 @@
"account": "Account",
"identities": "Identiteiten",
"vacation": "Afwezigheidsmelder",
"advanced": "Geavanceerd"
"advanced": "Geavanceerd",
"calendar": "Agenda"
},
"appearance": {
"title": "Uiterlijk",
@@ -902,6 +904,115 @@
"error_delete": "Kon contact niet verwijderen"
}
},
"calendar": {
"title": "Agenda",
"back_to_email": "Terug naar e-mail",
"my_calendars": "Mijn agenda's",
"views": {
"month": "Maand",
"week": "Week",
"day": "Dag",
"agenda": "Agenda",
"today": "Vandaag"
},
"events": {
"create": "Evenement aanmaken",
"edit": "Evenement bewerken",
"delete": "Evenement verwijderen",
"details": "Evenementdetails",
"no_events": "Geen evenementen",
"all_day": "Hele dag",
"more": "+{count} meer",
"no_title": "(Geen titel)",
"today_header": "Vandaag",
"tomorrow_header": "Morgen"
},
"form": {
"title": "Titel",
"description": "Beschrijving",
"location": "Locatie",
"start_date": "Startdatum",
"end_date": "Einddatum",
"start_time": "Starttijd",
"end_time": "Eindtijd",
"all_day_event": "Hele dag evenement",
"calendar_select": "Agenda",
"save": "Opslaan",
"cancel": "Annuleren",
"delete_confirm": "Weet je zeker dat je dit evenement wilt verwijderen?",
"color": "Kleur"
},
"participants": {
"title": "Deelnemers",
"add": "Deelnemer toevoegen",
"organizer": "Organisator",
"attendee": "Deelnemer",
"accepted": "Geaccepteerd",
"declined": "Geweigerd",
"tentative": "Voorlopig",
"needs_action": "Reactie vereist"
},
"recurrence": {
"title": "Herhaling",
"none": "Wordt niet herhaald",
"daily": "Dagelijks",
"weekly": "Wekelijks",
"monthly": "Maandelijks",
"yearly": "Jaarlijks",
"every_n_days": "Elke {count} dagen",
"every_n_weeks": "Elke {count} weken",
"every_n_months": "Elke {count} maanden",
"until": "Tot",
"occurrences": "{count} herhalingen"
},
"alerts": {
"title": "Herinnering",
"none": "Geen herinnering",
"at_time": "Op het tijdstip van het evenement",
"minutes_before": "{count, plural, one {# minuut van tevoren} other {# minuten van tevoren}}",
"hours_before": "{count, plural, one {# uur van tevoren} other {# uur van tevoren}}",
"days_before": "{count, plural, one {# dag van tevoren} other {# dagen van tevoren}}"
},
"settings": {
"title": "Agenda-instellingen",
"default_view": "Standaardweergave",
"week_starts_on": "Week begint op",
"time_format": "Tijdnotatie",
"default_calendar": "Standaardagenda",
"default_reminder": "Standaardherinnering",
"time_format_12h": "12-uurs",
"time_format_24h": "24-uurs"
},
"days": {
"monday": "Maandag",
"tuesday": "Dinsdag",
"wednesday": "Woensdag",
"thursday": "Donderdag",
"friday": "Vrijdag",
"saturday": "Zaterdag",
"sunday": "Zondag",
"mon": "Ma",
"tue": "Di",
"wed": "Wo",
"thu": "Do",
"fri": "Vr",
"sat": "Za",
"sun": "Zo"
},
"notifications": {
"event_created": "Evenement aangemaakt",
"event_updated": "Evenement bijgewerkt",
"event_deleted": "Evenement verwijderd",
"calendar_created": "Agenda aangemaakt",
"calendar_deleted": "Agenda verwijderd"
},
"status": {
"loading_calendars": "Agenda's laden...",
"loading_events": "Evenementen laden..."
},
"nav_prev": "Vorige",
"nav_next": "Volgende"
},
"advanced_search": {
"title": "Geavanceerd zoeken",
"from": "Van",
+112 -1
View File
@@ -32,6 +32,7 @@
"storage": "Armazenamento",
"sign_out": "Sair",
"contacts": "Contatos",
"calendar": "Calendário",
"settings": "Configurações",
"loading_mailboxes": "Carregando caixas de entrada...",
"push_connected": "Atualizações em tempo real ativas",
@@ -375,7 +376,8 @@
"account": "Conta",
"identities": "Identidades",
"vacation": "Resposta automática",
"advanced": "Avançado"
"advanced": "Avançado",
"calendar": "Calendário"
},
"appearance": {
"title": "Aparência",
@@ -902,6 +904,115 @@
"error_delete": "Falha ao excluir contato"
}
},
"calendar": {
"title": "Calendário",
"back_to_email": "Voltar ao e-mail",
"my_calendars": "Meus calendários",
"views": {
"month": "Mês",
"week": "Semana",
"day": "Dia",
"agenda": "Agenda",
"today": "Hoje"
},
"events": {
"create": "Criar evento",
"edit": "Editar evento",
"delete": "Excluir evento",
"details": "Detalhes do evento",
"no_events": "Nenhum evento",
"all_day": "Dia inteiro",
"more": "+{count} mais",
"no_title": "(Sem título)",
"today_header": "Hoje",
"tomorrow_header": "Amanhã"
},
"form": {
"title": "Título",
"description": "Descrição",
"location": "Local",
"start_date": "Data de início",
"end_date": "Data de término",
"start_time": "Hora de início",
"end_time": "Hora de término",
"all_day_event": "Evento de dia inteiro",
"calendar_select": "Calendário",
"save": "Salvar",
"cancel": "Cancelar",
"delete_confirm": "Tem certeza de que deseja excluir este evento?",
"color": "Cor"
},
"participants": {
"title": "Participantes",
"add": "Adicionar participante",
"organizer": "Organizador",
"attendee": "Participante",
"accepted": "Aceito",
"declined": "Recusado",
"tentative": "Provisório",
"needs_action": "Aguardando resposta"
},
"recurrence": {
"title": "Recorrência",
"none": "Não se repete",
"daily": "Diário",
"weekly": "Semanal",
"monthly": "Mensal",
"yearly": "Anual",
"every_n_days": "A cada {count} dias",
"every_n_weeks": "A cada {count} semanas",
"every_n_months": "A cada {count} meses",
"until": "Até",
"occurrences": "{count} repetições"
},
"alerts": {
"title": "Lembrete",
"none": "Sem lembrete",
"at_time": "No momento do evento",
"minutes_before": "{count, plural, one {# minuto antes} other {# minutos antes}}",
"hours_before": "{count, plural, one {# hora antes} other {# horas antes}}",
"days_before": "{count, plural, one {# dia antes} other {# dias antes}}"
},
"settings": {
"title": "Configurações do calendário",
"default_view": "Visualização padrão",
"week_starts_on": "Semana começa em",
"time_format": "Formato de hora",
"default_calendar": "Calendário padrão",
"default_reminder": "Lembrete padrão",
"time_format_12h": "12 horas",
"time_format_24h": "24 horas"
},
"days": {
"monday": "Segunda-feira",
"tuesday": "Terça-feira",
"wednesday": "Quarta-feira",
"thursday": "Quinta-feira",
"friday": "Sexta-feira",
"saturday": "Sábado",
"sunday": "Domingo",
"mon": "Seg",
"tue": "Ter",
"wed": "Qua",
"thu": "Qui",
"fri": "Sex",
"sat": "Sáb",
"sun": "Dom"
},
"notifications": {
"event_created": "Evento criado",
"event_updated": "Evento atualizado",
"event_deleted": "Evento excluído",
"calendar_created": "Calendário criado",
"calendar_deleted": "Calendário excluído"
},
"status": {
"loading_calendars": "Carregando calendários...",
"loading_events": "Carregando eventos..."
},
"nav_prev": "Anterior",
"nav_next": "Próximo"
},
"advanced_search": {
"title": "Pesquisa avançada",
"from": "De",