Files
sbbb/src/frontend/apps/calendars/src/features/i18n/translations.json

1280 lines
47 KiB
JSON
Raw Normal View History

{
"en": {
"translation": {
"401": {
"title": "You need to be logged in to access this application.",
"button": "Login"
},
"403": {
"title": "You don't have the necessary permissions to access this page.",
"button": "Home"
},
"common": {
"cancel": "Cancel"
},
"clipboard": {
"success": "Copied to clipboard",
"error": "Failed to copy to clipboard"
},
"app_title": "Calendars",
"app_description": "Calendars application",
"welcome": "Welcome",
"logout": "Logout",
"login": "Login",
"my_account": "My Account",
"api": {
"error": {
"unexpected": "An unexpected error occurred."
}
},
"home": {
"title": "Easy storage and sharing",
"subtitle": "A modern calendar application built for French public teams. Sovereign hosting in France, strong security, and seamless sync with all LaSuite apps.",
"main_button": "Sign in",
"more": "Learn more"
},
"feedback": {
"button": "Give feedback",
"modal": {
"title": "New feedback",
"description": "Calendars is under development: your feedback matters! Choose how to share your ideas:",
"buttons": {
"form": {
"title": "Give quick feedback",
"description": "30 sec to tell us what you think or report a bug"
},
"tchap": {
"title": "Write on Tchap",
"description": "Direct exchange with our team"
},
"visio": {
"title": "Talk on video",
"description": "20 min for an in-depth discussion"
}
}
}
},
"feedback_widget": {
"shortTitle": "Feedback?",
"title": "Do you have any feedback?",
"placeholder": "Share your feedback here...",
"email_placeholder": "Your email...",
"submit_text": "Send Feedback",
"success_text": "Thank you for your feedback!",
"success_text2": "In case of questions, we'll get back to you soon."
},
"authentication": {
"error": {
"alpha": "This application is in alpha and its access is restricted.",
"user_cannot_access_app": "You do not have the necessary permissions to access this application. Contact your administrator."
}
},
"roles": {
"administrator": "Administrator",
"editor": "Editor",
"reader": "Reader",
"owner": "Owner"
},
"time": {
"years_ago_one": "{{count}} year ago",
"years_ago_other": "{{count}} years ago",
"months_ago_one": "{{count}} month ago",
"months_ago_other": "{{count}} months ago",
"weeks_ago_one": "{{count}} week ago",
"weeks_ago_other": "{{count}} weeks ago",
"days_ago_one": "{{count}} day ago",
"days_ago_other": "{{count}} days ago",
"hours_ago_one": "{{count}} hour ago",
"hours_ago_other": "{{count}} hours ago",
"minutes_ago_one": "{{count}} minute ago",
"minutes_ago_other": "{{count}} minutes ago",
"seconds_ago": "few seconds ago"
},
"calendar": {
"views": {
"day": "Day",
"week": "Week",
"month": "Month",
"listDay": "Day list",
"listWeek": "Week list",
"listMonth": "Month list",
"listYear": "Year list",
"today": "Today"
},
"navigation": {
"previous": "Previous",
"next": "Next"
},
"event": {
"createTitle": "Create event",
"editTitle": "Edit event",
"calendar": "Calendar",
"title": "Title",
"titlePlaceholder": "Event title",
"location": "Location",
"locationPlaceholder": "Location",
"description": "Description",
"descriptionPlaceholder": "Description",
"start": "Start",
"end": "End",
"allDay": "All day",
"organizer": "Organizer",
"attendees": "Attendees",
"deleteConfirm": "Delete event",
"deleteConfirmMessage": "Are you sure you want to delete this event?",
"deleteRecurringPrompt": "This is a recurring event. What would you like to delete?",
"deleteThisOccurrence": "Only this occurrence",
"deleteThisAndFuture": "This and future occurrences",
"deleteAllOccurrences": "All occurrences",
"enterChoice": "Enter your choice (1, 2, or 3):",
"invalidChoice": "Invalid choice. Please enter 1, 2, or 3.",
"delete": "Delete",
"cancel": "Cancel",
"save": "Save",
Refactor EventModal into section components (#7) * 🙈(tools) remove OpenSpec skills and commands from Git tracking Remove .claude/skills/openspec-*/ and .claude/commands/opsx/ from Git tracking while keeping them locally. Extends the previous cleanup (d24eed9) that handled the openspec/ directory. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ✨(front) add EventModal section components and useEventForm hook Extract modal sections into dedicated components (DateTimeSection, RecurrenceSection, LocationSection, VideoConferenceSection, AttendeesSection, DescriptionSection, InvitationResponseSection, RemindersSection, StatusSection, AttachmentsSection) with shared SectionRow and SectionPill layout components. Add useEventForm hook to centralize form state management. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ♻️(front) refactor EventModal to use extracted sections Simplify EventModal by delegating to section components and useEventForm hook. Replace alert() with addToast() for error feedback, convert useCallback to useMemo for buildSummary in RecurrenceEditor, and add missing organizer dependency in useEventForm useEffect. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * 💄(front) update scheduler styles for new modal design Rework SCSS for EventModal, AttendeesInput, RecurrenceEditor, and Scheduler. Move inline styles to CSS classes. Update globals and frontend dependencies. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 16:30:37 +01:00
"create": "Create",
"sections": {
"addRecurrence": "Add recurrence",
"addLocation": "Add location",
"addVideoConference": "Visio",
"createVisio": "Add video conference",
"removeVisio": "Remove video conference",
Refactor EventModal into section components (#7) * 🙈(tools) remove OpenSpec skills and commands from Git tracking Remove .claude/skills/openspec-*/ and .claude/commands/opsx/ from Git tracking while keeping them locally. Extends the previous cleanup (d24eed9) that handled the openspec/ directory. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ✨(front) add EventModal section components and useEventForm hook Extract modal sections into dedicated components (DateTimeSection, RecurrenceSection, LocationSection, VideoConferenceSection, AttendeesSection, DescriptionSection, InvitationResponseSection, RemindersSection, StatusSection, AttachmentsSection) with shared SectionRow and SectionPill layout components. Add useEventForm hook to centralize form state management. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ♻️(front) refactor EventModal to use extracted sections Simplify EventModal by delegating to section components and useEventForm hook. Replace alert() with addToast() for error feedback, convert useCallback to useMemo for buildSummary in RecurrenceEditor, and add missing organizer dependency in useEventForm useEffect. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * 💄(front) update scheduler styles for new modal design Rework SCSS for EventModal, AttendeesInput, RecurrenceEditor, and Scheduler. Move inline styles to CSS classes. Update globals and frontend dependencies. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 16:30:37 +01:00
"videoLink": "Video conference link",
"addAttendees": "Add participants",
"addDescription": "Add description",
"addReminder": "Add reminder",
"addAttachment": "Add attachment",
"moreOptions": "More options",
"reminder_one": "reminder",
"reminder_other": "reminders",
"attachment_one": "attachment",
"attachment_other": "attachments"
},
"reminders": {
"5min": "5 minutes before",
"15min": "15 minutes before",
"30min": "30 minutes before",
"1hour": "1 hour before",
"1day": "1 day before",
"1week": "1 week before"
},
"status": {
"label": "Status",
"confirmed": "Confirmed",
"tentative": "Tentative",
"cancelled": "Cancelled"
},
"visibility": {
"label": "Visibility",
"public": "Public",
"private": "Private",
"confidential": "Confidential"
},
"availability": {
"label": "Availability",
"busy": "Busy",
"free": "Free"
}
},
"list": {
"myCalendars": "My calendars",
"sharedCalendars": "Shared calendars",
"shared": "(shared)",
"showCalendar": "Show calendar",
"edit": "Edit",
"delete": "Delete",
"subscription": "Subscription URL"
},
"subscription": {
"title": "Calendar Subscription URL",
"description": "Use this URL to subscribe to \"{{name}}\" from external calendar applications (Apple Calendar, Google Calendar, Outlook, etc.).",
"loading": "Generating subscription URL...",
"copy": "Copy",
"copied": "Copied!",
"close": "Close",
"warning": "This URL contains a private token. Anyone with this link can view your calendar events.",
"regenerate": "Regenerate URL",
"regenerateConfirm": {
"title": "Regenerate subscription URL?",
"message": "This will invalidate the current URL. Any external calendars using the old URL will no longer sync.",
"confirm": "Regenerate"
},
"error": "Failed to generate subscription URL. Please try again.",
"errorPermission": "You don't have permission to access this calendar.",
"errorNetwork": "Network error. Please check your connection and try again.",
"errorServer": "Server error. Please try again later."
},
"leftPanel": {
"newEvent": "New event"
},
"miniCalendar": {
"previousMonth": "Previous month",
"nextMonth": "Next month"
},
"recurrence": {
"label": "Repeat",
Refactor EventModal into section components (#7) * 🙈(tools) remove OpenSpec skills and commands from Git tracking Remove .claude/skills/openspec-*/ and .claude/commands/opsx/ from Git tracking while keeping them locally. Extends the previous cleanup (d24eed9) that handled the openspec/ directory. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ✨(front) add EventModal section components and useEventForm hook Extract modal sections into dedicated components (DateTimeSection, RecurrenceSection, LocationSection, VideoConferenceSection, AttendeesSection, DescriptionSection, InvitationResponseSection, RemindersSection, StatusSection, AttachmentsSection) with shared SectionRow and SectionPill layout components. Add useEventForm hook to centralize form state management. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ♻️(front) refactor EventModal to use extracted sections Simplify EventModal by delegating to section components and useEventForm hook. Replace alert() with addToast() for error feedback, convert useCallback to useMemo for buildSummary in RecurrenceEditor, and add missing organizer dependency in useEventForm useEffect. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * 💄(front) update scheduler styles for new modal design Rework SCSS for EventModal, AttendeesInput, RecurrenceEditor, and Scheduler. Move inline styles to CSS classes. Update globals and frontend dependencies. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 16:30:37 +01:00
"none": "Does not repeat",
"daily": "Daily",
"weekly": "Weekly",
"monthly": "Monthly",
"yearly": "Yearly",
"custom": "Custom...",
"everyLabel": "Repeat every",
"days": "days",
"weeks": "weeks",
"months": "months",
"years": "years",
"repeatOn": "Repeat on",
"repeatOnDay": "Repeat on day",
"repeatOnDate": "Repeat on date",
"dayOfMonth": "Day",
"endsLabel": "Ends",
"never": "Never",
"on": "On",
"after": "After",
"occurrences": "occurrences",
"weekdays": {
"mo": "M",
"tu": "T",
"we": "W",
"th": "T",
"fr": "F",
"sa": "S",
"su": "S"
},
"months": {
"january": "January",
"february": "February",
"march": "March",
"april": "April",
"may": "May",
"june": "June",
"july": "July",
"august": "August",
"september": "September",
"october": "October",
"november": "November",
"december": "December"
},
"warnings": {
"februaryMax": "February has at most 29 days",
"leapYear": "This date (Feb 29) only exists in leap years",
"monthMax30": "This month has at most 30 days",
"dayMax31": "Day must be between 1 and 31"
}
},
"createCalendar": {
"title": "Create a calendar",
"name": "Name",
"namePlaceholder": "Calendar name",
"nameRequired": "Name is required",
"color": "Color",
"description": "Description",
"descriptionPlaceholder": "Calendar description (optional)",
"cancel": "Cancel",
"create": "Create"
},
"editCalendar": {
"title": "Edit calendar",
"save": "Save"
},
"deleteCalendar": {
"title": "Delete calendar",
"message": "Are you sure you want to delete the calendar \"{{name}}\"? This action cannot be undone.",
"confirm": "Delete"
},
"shareCalendar": {
"title": "Share calendar",
"emailPlaceholder": "Enter email address",
"share": "Share",
"hint": "The person will have the same rights as you (read and write).",
"success": "Calendar shared with {{email}}",
"error": "Failed to share calendar",
"invalidEmail": "Please enter a valid email address"
},
"attendees": {
"label": "Invite attendees",
"placeholder": "Enter email address and press Enter",
"add": "Add",
"remove": "Remove attendee",
"invalidEmail": "Please enter a valid email address",
"alreadyAdded": "This email is already in the list",
"cannotAddOrganizer": "You cannot add yourself as an attendee",
"participants": "Participants",
"organizer": "Organizer",
"viewProfile": "View profile",
"cannotRemoveOrganizer": "Cannot remove organizer"
}
}
}
},
"fr": {
"translation": {
"entitlements": {
"can_upload": {
"cannot_upload": "Vous n'avez pas les droits nécessaires pour transférer des fichiers."
}
},
"401": {
"title": "Connectez-vous pour accéder aux documents.",
"button": "Se connecter"
},
"403": {
"title": "Vous n'avez pas les permissions nécessaires pour accéder à cette page.",
"button": "Accueil"
},
"file_download_modal": {
"error": {
"no_url_or_title": "Ce fichier n'a pas d'URL ou de titre. "
},
"suspicious": {
"title": "Ce fichier est suspect"
},
"file_too_large_to_analyze": {
"title": "Ce fichier est trop volumineux pour être analysé"
},
"analyzing": {
"title": "Ce fichier est en cours d'analyse"
},
"description": "Êtes-vous sûr de vouloir télécharger ce fichier ?",
"download": "Télécharger quand même",
"cancel": "Annuler"
},
"file_preview": {
"suspicious": {
"title": "Fichier suspect",
"description": "Ce fichier semble suspect. Il n'est visible que pour vous.",
"download": "Télécharger le fichier"
},
"error": {
"title": "Une erreur est survenue lors du chargement du document.",
"description": "Veuillez réessayer plus tard."
},
"unsupported": {
"title": "Type de fichier non supporté pour la prévisualisation",
"description": "Pour visualiser le fichier, téléchargez-le sur votre appareil.",
"download": "Télécharger le fichier",
"heic_title": "Les fichiers HEIC ne sont pas encore supportés pour la prévisualisation."
}
},
"common": {
"cancel": "Annuler"
},
"clipboard": {
"success": "Copié dans le presse-papiers",
"error": "Échec de la copie dans le presse-papiers"
},
"app_title": "Calendriers",
"app_description": "Application de calendriers",
"welcome": "Bienvenue",
"logout": "Déconnexion",
"login": "Connexion",
"my_account": "Mon Compte",
"api": {
"error": {
"unexpected": "Une erreur inattendue est survenue."
}
},
"home": {
"title": "Stocker et partager facilement",
"subtitle": "Une application de calendrier moderne pour les équipes publiques françaises. Hébergement en France, sécurité renforcée, et synchronisation fluide avec toutes les applications LaSuite.",
"main_button": "Se connecter",
"more": "En savoir plus"
},
"feedback": {
"button": "Faire un retour",
"modal": {
"title": "Nouveau retour",
"description": "Calendrier est en cours de développement : vos retours comptent ! Choisissez comment partager vos idées :",
"buttons": {
"form": {
"title": "Donner un avis rapide",
"description": "30 sec pour nous dire ce que vous pensez ou signaler un bug"
},
"tchap": {
"title": "Écrire sur Tchap",
"description": "Échange direct avec notre équipe"
},
"visio": {
"title": "Parler en visio",
"description": "20 min pour aller en profondeur"
}
}
}
},
"feedback_widget": {
"shortTitle": "Faire un retour",
"title": "Partager un retour ou une question",
"placeholder": "Saisir votre message...",
"email_placeholder": "Renseigner votre email...",
"submit_text": "Envoyer le message",
"success_text": "Merci pour votre message.",
"success_text2": "En cas de questions, nous vous répondrons dans les meilleurs délais sur l'email renseigné."
},
"authentication": {
"error": {
"alpha": "Cette application est en version alpha et son accès est restreint.",
"user_cannot_access_app": "Vous n'avez pas les permissions nécessaires pour accéder à cette application. Contactez votre administrateur."
}
},
"mime": {
"calc": "Tableur",
"doc": "Document",
"image": "Image",
"other": "Autre",
"pdf": "PDF",
"powerpoint": "Présentation",
"audio": "Audio",
"video": "Vidéo",
"archive": "Archive"
},
"roles": {
"administrator": "Administrateur",
"editor": "Éditeur",
"reader": "Lecteur",
"owner": "Propriétaire"
},
"time": {
"breadcrumbs": {
"spaces": "Espaces"
},
"modal": {
"move": {
"title": "Déplacer",
"move_button": "Déplacer ici",
"description_one_item": "Choisissez le nouvel emplacement pour <strong>{{name}}</strong>",
"description_multiple_items": "Choisissez le nouvel emplacement pour les <strong>{{count}}</strong> éléments sélectionnés"
}
},
"rightPanel": {
"suspicious": {
"text": "Ce fichier semble suspect. Il n'est visible que pour vous."
},
"file_too_large_to_analyze": {
"text": "Ce fichier est trop volumineux pour être analysé. Il peut être dangereux de le télécharger."
},
"multipleSelection": {
"text": "Plusieurs fichiers sélectionnés",
"alt": "Image de plusieurs fichiers sélectionnés"
},
"empty": {
"text": "Aucun fichier sélectionné",
"alt": "Image d'un fichier sélectionné"
},
"sharing": "Partage",
"share": "Partager",
"format": "Format",
"updated_at": "Modification",
"created_at": "Création",
"size": "Poids",
"created_by": "Créé par",
"description": "Description"
},
"grid": {
"name": "Nom",
"last_update": "Dernière modification",
"empty": {
"default": "Aucun dossier trouvé dans le dossier sélectionné",
"caption": "Déposez vos fichiers ici",
"caption_no_create": "Vous n'avez pas les droits pour ajouter des fichiers",
"cta": "Ou cliquez sur \"Créer\"",
"cta_no_create": "Les lecteurs ne peuvent pas ajouter de fichiers ou créer de dossiers"
},
"no_url": "Cette ressource n'a pas d'URL",
"actions": {
"button_aria_label": "Plus d'actions pour {{name}}",
"info": "Informations",
"share": "Partager",
"download": "Télécharger",
"rename": "Renommer",
"move": "Déplacer",
"duplicate": "Dupliquer",
"delete": "Supprimer",
"restore": "Restaurer",
"hard_delete": "Supprimer définitivement"
}
},
"filters": {
"scopes": {
"label": "Emplacement",
"options": {
"all": "Calendars",
"trash": "Corbeille"
}
},
"type": {
"label": "Type",
"options": {
"all": "Tous",
"file": "Fichier",
"folder": "Dossier",
"reset": "Réinitialiser"
}
},
"workspace": {
"label": "Espace"
}
},
"tree": {
"trash": "Corbeille",
"createFolder": "Créer",
"personalSpace": "Espace personnel",
"shared_space": "Espace partagé",
"public_space": "Espace public",
"search": "Rechercher",
"import": {
"label": "Importer",
"files": "Importer des fichiers",
"folders": "Importer des dossiers"
},
"create": {
"label": "Créer",
"folder": "Nouveau dossier",
"workspace": "Nouvel espace"
},
"workspace": {
"options": {
"info": "Informations",
"settings_workspace": "Paramètre de l'espace",
"settings_folder": "Paramètres du dossier",
"delete_workspace": "Supprimer l'espace",
"delete_folder": "Supprimer le dossier",
"share": "Partager",
"share_view": "Voir les accès"
},
"move": {
"confirmation_modal": {
"title": "Transfert de droits",
"description": "Vous êtes sur le point de déplacer l'élément <strong>{{sourceItem}}</strong> vers le dossier <strong>{{targetItem}}</strong>, votre document héritera du partage du dossier cible.",
"description_multiple": "Vous êtes sur le point de déplacer <strong>{{count}}</strong> éléments vers le dossier <strong>{{targetItem}}</strong>, vos documents hériteront du partage du dossier cible.",
"confirm_button": "Déplacer quand même",
"cancel_button": "Annuler"
}
}
}
},
"trash": {
"title": "Corbeille",
"description": "Suppression automatique après 30 jours",
"navigate": {
"modal": {
"title": "Ce dossier est dans la corbeille",
"description": "Pour afficher ce dossier, vous devez d'abord le restaurer."
}
},
"hard_delete": {
"title": "Supprimer définitivement",
"content_one": "Êtes-vous sûr de vouloir supprimer cet élément définitivement?",
"content_other": "Êtes-vous sûr de vouloir supprimer ces {{count}} éléments définitivement?",
"cancel": "Annuler",
"confirm": "Supprimer définitivement"
}
},
"search": {
"modal": {
"title": "Rechercher",
"description": "La fonction de recherche est en cours de développement et sera bientôt disponible.",
"placeholder": "Taper un mot clé ou le nom d'un fichier",
"results": "Sélectionnez un document",
"filters": {
"reset": "Réinitialiser"
}
}
},
"selectionBar": {
"caption_one": "1 élément sélectionné",
"caption_other": "{{count}} éléments sélectionnés",
"download": "Télécharger",
"move": "Déplacer",
"delete": "Supprimer",
"reset_selection": "Réinitialiser la sélection"
},
"folders": {
"edit": {
"title": "Modifier le dossier",
"description": "Modifier les informations du dossier",
"cancel": "Annuler",
"submit": "Mettre à jour"
},
"form": {
"title": "Nom du dossier",
"description": "Description",
"cancel": "Annuler",
"submit": "Mettre à jour"
}
},
"files": {
"not_found": {
"description": "Le fichier que vous recherchez n'existe pas."
}
},
"workspaces": {
"mainWorkspace": "Mon espace",
"form": {
"title": "Nom de l'espace",
"description": "Description",
"settings": "Paramètres de l'espace"
},
"create": {
"title": "Nouvel espace",
"description": "Un espace vous permet d'organiser vos fichiers en équipe.",
"cancel": "Annuler",
"submit": "Créer l'espace"
},
"edit": {
"title": "Modifier l'espace",
"description": "Modifier les informations de l'espace",
"cancel": "Annuler",
"submit": "Mettre à jour"
}
},
"actions": {
"createFolder": {
"modal": {
"title": "Créer un dossier",
"label": "Nom du dossier",
"placeholder": "Entrez le nom du dossier",
"cancel": "Annuler",
"submit": "Créer"
}
},
"upload": {
"toast": "Déposez vos fichiers ici pour les transférer dans {{title}}",
"toast_no_rights": "Vous n'avez pas les droits nécessaires pour transférer des fichiers dans {{title}}",
"steps": {
"preparing": "Préparation du transfert...",
"create_folders": "Création des dossiers en cours..."
},
"files": {
"description_one": "{{count}} fichier en cours de transfert",
"description_other": "{{count}} fichiers en cours de transfert",
"description_done_one": "{{count}} fichier transféré",
"description_done_other": "{{count}} fichiers transférés"
}
},
"delete": {
"toast_one": "Élément supprimé",
"toast_other": "{{count}} éléments supprimés",
"low_rights_toast": "Vous ne pouvez pas restaurer ces éléments car vous n'avez pas les droits nécessaires.",
"toast_error_one": "Une erreur est survenue lors de la suppression de l'élément.",
"toast_error_other": "Une erreur est survenue lors de la suppression des éléments."
},
"hard_delete": {
"toast_one": "Élément supprimé définitivement",
"toast_other": "{{count}} éléments supprimés définitivement"
},
"restore": {
"toast_one": "Élément restauré",
"toast_other": "{{count}} éléments restaurés"
},
"move": {
"toast_one": "{{count}} élément déplacé",
"toast_other": "{{count}} éléments déplacés"
},
"share": {
"modal": {
"title": "Partager l'espace"
}
},
"rename": {
"modal": {
"title": "Renommer",
"label": "Nouveau nom",
"placeholder": "Entrez le nouveau nom",
"cancel": "Annuler",
"submit": "Renommer"
}
}
}
},
"time": {
"years_ago_one": "il y a {{count}} an",
"years_ago_other": "il y a {{count}} ans",
"months_ago_one": "il y a {{count}} mois",
"months_ago_other": "il y a {{count}} mois",
"weeks_ago_one": "il y a {{count}} semaine",
"weeks_ago_other": "il y a {{count}} semaines",
"days_ago_one": "il y a {{count}} jour",
"days_ago_other": "il y a {{count}} jours",
"hours_ago_one": "il y a {{count}} heure",
"hours_ago_other": "il y a {{count}} heures",
"minutes_ago_one": "il y a {{count}} minute",
"minutes_ago_other": "il y a {{count}} minutes",
"seconds_ago": "il y a quelques secondes"
},
"calendar": {
"views": {
"day": "Jour",
"week": "Semaine",
"month": "Mois",
"listDay": "Liste jour",
"listWeek": "Liste semaine",
"listMonth": "Liste mois",
"listYear": "Liste année",
"today": "Aujourd'hui"
},
"navigation": {
"previous": "Précédent",
"next": "Suivant"
},
"event": {
"createTitle": "Créer un événement",
"editTitle": "Modifier l'événement",
"calendar": "Calendrier",
"title": "Titre",
"titlePlaceholder": "Titre de l'événement",
"location": "Lieu",
"locationPlaceholder": "Lieu",
"description": "Description",
"descriptionPlaceholder": "Description",
"start": "Début",
"end": "Fin",
"allDay": "Toute la journée",
"organizer": "Organisateur",
"attendees": "Participants",
"deleteConfirm": "Supprimer l'événement",
"deleteConfirmMessage": "Êtes-vous sûr de vouloir supprimer cet événement ?",
"deleteRecurringPrompt": "Ceci est un événement récurrent. Que souhaitez-vous supprimer ?",
"deleteThisOccurrence": "Seulement cette occurrence",
"deleteThisAndFuture": "Cette occurrence et les suivantes",
"deleteAllOccurrences": "Toutes les occurrences",
"enterChoice": "Entrez votre choix (1, 2 ou 3) :",
"invalidChoice": "Choix invalide. Veuillez entrer 1, 2 ou 3.",
"delete": "Supprimer",
"cancel": "Annuler",
"save": "Enregistrer",
Refactor EventModal into section components (#7) * 🙈(tools) remove OpenSpec skills and commands from Git tracking Remove .claude/skills/openspec-*/ and .claude/commands/opsx/ from Git tracking while keeping them locally. Extends the previous cleanup (d24eed9) that handled the openspec/ directory. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ✨(front) add EventModal section components and useEventForm hook Extract modal sections into dedicated components (DateTimeSection, RecurrenceSection, LocationSection, VideoConferenceSection, AttendeesSection, DescriptionSection, InvitationResponseSection, RemindersSection, StatusSection, AttachmentsSection) with shared SectionRow and SectionPill layout components. Add useEventForm hook to centralize form state management. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ♻️(front) refactor EventModal to use extracted sections Simplify EventModal by delegating to section components and useEventForm hook. Replace alert() with addToast() for error feedback, convert useCallback to useMemo for buildSummary in RecurrenceEditor, and add missing organizer dependency in useEventForm useEffect. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * 💄(front) update scheduler styles for new modal design Rework SCSS for EventModal, AttendeesInput, RecurrenceEditor, and Scheduler. Move inline styles to CSS classes. Update globals and frontend dependencies. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 16:30:37 +01:00
"create": "Créer",
"sections": {
"addRecurrence": "Ajouter une récurrence",
"addLocation": "Ajouter un lieu",
"addVideoConference": "Visio",
"createVisio": "Ajouter une visioconférence",
"removeVisio": "Supprimer la visioconférence",
Refactor EventModal into section components (#7) * 🙈(tools) remove OpenSpec skills and commands from Git tracking Remove .claude/skills/openspec-*/ and .claude/commands/opsx/ from Git tracking while keeping them locally. Extends the previous cleanup (d24eed9) that handled the openspec/ directory. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ✨(front) add EventModal section components and useEventForm hook Extract modal sections into dedicated components (DateTimeSection, RecurrenceSection, LocationSection, VideoConferenceSection, AttendeesSection, DescriptionSection, InvitationResponseSection, RemindersSection, StatusSection, AttachmentsSection) with shared SectionRow and SectionPill layout components. Add useEventForm hook to centralize form state management. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ♻️(front) refactor EventModal to use extracted sections Simplify EventModal by delegating to section components and useEventForm hook. Replace alert() with addToast() for error feedback, convert useCallback to useMemo for buildSummary in RecurrenceEditor, and add missing organizer dependency in useEventForm useEffect. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * 💄(front) update scheduler styles for new modal design Rework SCSS for EventModal, AttendeesInput, RecurrenceEditor, and Scheduler. Move inline styles to CSS classes. Update globals and frontend dependencies. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 16:30:37 +01:00
"videoLink": "Lien de visioconférence",
"addAttendees": "Ajouter des participants",
"addDescription": "Ajouter une description",
"addReminder": "Ajouter un rappel",
"addAttachment": "Ajouter une pièce jointe",
"moreOptions": "Plus d'options",
"reminder_one": "rappel",
"reminder_other": "rappels",
"attachment_one": "pièce jointe",
"attachment_other": "pièces jointes"
},
"reminders": {
"5min": "5 minutes avant",
"15min": "15 minutes avant",
"30min": "30 minutes avant",
"1hour": "1 heure avant",
"1day": "1 jour avant",
"1week": "1 semaine avant"
},
"status": {
"label": "Statut",
"confirmed": "Confirmé",
"tentative": "Provisoire",
"cancelled": "Annulé"
},
"visibility": {
"label": "Visibilité",
"public": "Public",
"private": "Privé",
"confidential": "Confidentiel"
},
"availability": {
"label": "Disponibilité",
"busy": "Occupé",
"free": "Libre"
}
},
"list": {
"myCalendars": "Mes agendas",
"sharedCalendars": "Agendas partagés",
"shared": "(partagé)",
"showCalendar": "Afficher le calendrier",
"edit": "Modifier",
"delete": "Supprimer",
"subscription": "URL d'abonnement"
},
"subscription": {
"title": "URL d'abonnement au calendrier",
"description": "Utilisez cette URL pour vous abonner à \"{{name}}\" depuis des applications de calendrier externes (Apple Calendar, Google Calendar, Outlook, etc.).",
"loading": "Génération de l'URL d'abonnement...",
"copy": "Copier",
"copied": "Copié !",
"close": "Fermer",
"warning": "Cette URL contient un jeton privé. Toute personne possédant ce lien peut voir les événements de votre calendrier.",
"regenerate": "Régénérer l'URL",
"regenerateConfirm": {
"title": "Régénérer l'URL d'abonnement ?",
"message": "Cela invalidera l'URL actuelle. Les calendriers externes utilisant l'ancienne URL ne se synchroniseront plus.",
"confirm": "Régénérer"
},
"error": "Échec de la génération de l'URL d'abonnement. Veuillez réessayer.",
"errorPermission": "Vous n'avez pas la permission d'accéder à ce calendrier.",
"errorNetwork": "Erreur réseau. Veuillez vérifier votre connexion et réessayer.",
"errorServer": "Erreur serveur. Veuillez réessayer plus tard."
},
"leftPanel": {
"newEvent": "Nouvel événement"
},
"miniCalendar": {
"previousMonth": "Mois précédent",
"nextMonth": "Mois suivant"
},
"recurrence": {
"label": "Répéter",
Refactor EventModal into section components (#7) * 🙈(tools) remove OpenSpec skills and commands from Git tracking Remove .claude/skills/openspec-*/ and .claude/commands/opsx/ from Git tracking while keeping them locally. Extends the previous cleanup (d24eed9) that handled the openspec/ directory. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ✨(front) add EventModal section components and useEventForm hook Extract modal sections into dedicated components (DateTimeSection, RecurrenceSection, LocationSection, VideoConferenceSection, AttendeesSection, DescriptionSection, InvitationResponseSection, RemindersSection, StatusSection, AttachmentsSection) with shared SectionRow and SectionPill layout components. Add useEventForm hook to centralize form state management. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ♻️(front) refactor EventModal to use extracted sections Simplify EventModal by delegating to section components and useEventForm hook. Replace alert() with addToast() for error feedback, convert useCallback to useMemo for buildSummary in RecurrenceEditor, and add missing organizer dependency in useEventForm useEffect. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * 💄(front) update scheduler styles for new modal design Rework SCSS for EventModal, AttendeesInput, RecurrenceEditor, and Scheduler. Move inline styles to CSS classes. Update globals and frontend dependencies. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 16:30:37 +01:00
"none": "Ne se répète pas",
"daily": "Tous les jours",
"weekly": "Toutes les semaines",
"monthly": "Tous les mois",
"yearly": "Tous les ans",
"custom": "Personnalisé...",
"everyLabel": "Répéter tous les",
"days": "jours",
"weeks": "semaines",
"months": "mois",
"years": "années",
"repeatOn": "Répéter le",
"repeatOnDay": "Répéter le jour",
"repeatOnDate": "Répéter à la date",
"dayOfMonth": "Jour",
"endsLabel": "Se termine",
"never": "Jamais",
"on": "Le",
"after": "Après",
"occurrences": "occurrences",
"weekdays": {
"mo": "L",
"tu": "M",
"we": "M",
"th": "J",
"fr": "V",
"sa": "S",
"su": "D"
},
"months": {
"january": "Janvier",
"february": "Février",
"march": "Mars",
"april": "Avril",
"may": "Mai",
"june": "Juin",
"july": "Juillet",
"august": "Août",
"september": "Septembre",
"october": "Octobre",
"november": "Novembre",
"december": "Décembre"
},
"warnings": {
"februaryMax": "Février a au maximum 29 jours",
"leapYear": "Cette date (29 février) n'existe que les années bissextiles",
"monthMax30": "Ce mois a au maximum 30 jours",
"dayMax31": "Le jour doit être entre 1 et 31"
}
},
"createCalendar": {
"title": "Créer un agenda",
"name": "Nom",
"namePlaceholder": "Nom de l'agenda",
"nameRequired": "Le nom est requis",
"color": "Couleur",
"description": "Description",
"descriptionPlaceholder": "Description de l'agenda (optionnel)",
"cancel": "Annuler",
"create": "Créer"
},
"editCalendar": {
"title": "Modifier l'agenda",
"save": "Enregistrer"
},
"deleteCalendar": {
"title": "Supprimer l'agenda",
"message": "Êtes-vous sûr de vouloir supprimer l'agenda \"{{name}}\" ? Cette action est irréversible.",
"confirm": "Supprimer"
},
"shareCalendar": {
"title": "Partager l'agenda",
"emailPlaceholder": "Entrez l'adresse email",
"share": "Partager",
"hint": "La personne aura les mêmes droits que vous (lecture et écriture).",
"success": "Agenda partagé avec {{email}}",
"error": "Échec du partage de l'agenda",
"invalidEmail": "Veuillez entrer une adresse email valide"
},
"attendees": {
"label": "Inviter des participants",
"placeholder": "Entrez l'adresse email et appuyez sur Entrée",
"add": "Ajouter",
"remove": "Retirer le participant",
"invalidEmail": "Veuillez entrer une adresse email valide",
"alreadyAdded": "Cette adresse est déjà dans la liste",
"cannotAddOrganizer": "Vous ne pouvez pas vous ajouter comme participant",
"participants": "Participants",
"organizer": "Organisateur",
"viewProfile": "Voir le profil",
"cannotRemoveOrganizer": "Impossible de retirer l'organisateur"
}
}
}
},
"nl": {
"translation": {
"entitlements": {
"can_upload": {
"cannot_upload": "U heeft niet de benodigde rechten om bestanden te uploaden."
}
},
"401": {
"title": "U moet ingelogd zijn om toegang te krijgen tot de bestanden.",
"button": "Login"
},
"403": {
"title": "U beschikt niet over de benodigde rechten om dit bestand te openen.",
"button": "Home"
},
"file_download_modal": {
"error": {
"no_url_or_title": "Dit bestand heeft geen URL of titel."
},
"suspicious": {
"title": "Dit bestand is verdacht"
},
"file_too_large_to_analyze": {
"title": "Dit bestand is te groot om te worden gescand"
},
"analyzing": {
"title": "Dit bestand wordt nog steeds gescand"
},
"description": "Weet u zeker dat u dit bestand wilt downloaden?",
"download": "Toch downloaden",
"cancel": "Annuleren"
},
"file_preview": {
"suspicious": {
"title": "Verdacht bestand",
"description": "Dit bestand is verdacht. Het is alleen voor jou zichtbaar.",
"download": "Bestand downloaden"
},
"error": {
"title": "Er is een fout opgetreden tijdens het laden van het document.",
"description": "Probeer het later opnieuw."
},
"unsupported": {
"title": "Bestandstype niet ondersteund voor voorbeeld",
"description": "Om het bestand te bekijken, downloadt u het naar uw apparaat.",
"download": "Bestand downloaden",
"heic_title": "HEIC bestanden worden nog niet ondersteund voor voorbeeld."
}
},
"common": {
"cancel": "Annuleren"
},
"clipboard": {
"success": "Gekopieërd naar klembord",
"error": "Kopiëren naar klembord mislukt"
},
"app_title": "Calendars",
"app_description": "Kalenderbeheer",
"welcome": "Welkom",
"logout": "Uitloggen",
"login": "Inloggen",
"my_account": "Mijn account",
"api": {
"error": {
"unexpected": "Er is een onverwachte fout opgetreden."
}
},
"home": {
"title": "Eenvoudige opslag en delen",
"subtitle": "Een moderne kalenderapplicatie ontworpen voor Franse publieke teams. Soevereine hosting in Frankrijk, sterke beveiliging en naadloze synchronisatie met alle LaSuite-apps.",
"main_button": "Inloggen",
"more": "Meer informatie"
},
"feedback": {
"button": "Geef feedback",
"modal": {
"title": "Nieuwe feedback",
"description": "Calendars is in ontwikkeling: uw feedback telt! Kies hoe u uw ideeën wilt delen:",
"buttons": {
"form": {
"title": "Geef snel feedback",
"description": "30 seconden om ons te vertellen wat u ervan vindt of een bug te melden"
},
"tchap": {
"title": "Schrijf op Tchap",
"description": "Directe uitwisseling met ons team"
},
"visio": {
"title": "Praten op Videogesprek",
"description": "20 min voor een diepgaand gesprek"
}
}
}
},
"feedback_widget": {
"shortTitle": "Feedback?",
"title": "Heeft u feedback?",
"placeholder": "Deel hier uw feedback...",
"email_placeholder": "Uw e-mailadres...",
"submit_text": "Feedback verzenden",
"success_text": "Bedankt voor uw feedback!",
"success_text2": "Indien u vragen heeft, nemen wij spoedig contact met u op."
},
"authentication": {
"error": {
"alpha": "Deze applicatie bevindt zich in de alfa-fase en de toegang ertoe is beperkt.",
"user_cannot_access_app": "U heeft niet de benodigde rechten om toegang te krijgen tot deze applicatie. Neem contact op met uw beheerder."
}
},
"mime": {
"calc": "Spreadsheet",
"doc": "Document",
"image": "Afbeelding",
"other": "overige",
"pdf": "PDF",
"powerpoint": "Presentatie",
"audio": "Audio",
"video": "Video",
"archive": "Archief"
},
"roles": {
"administrator": "Beheerder",
"editor": "Redacteur",
"reader": "Lezer",
"owner": "Eigenaar"
},
"time": {
"years_ago_one": "{{count}} jaar geleden",
"years_ago_other": "{{count}} jaren geleden",
"months_ago_one": "{{count}} maand geleden",
"months_ago_other": "{{count}} maanden geleden",
"weeks_ago_one": "{{count}} week geleden",
"weeks_ago_other": "{{count}} weken geleden",
"days_ago_one": "{{count}} dag geleden",
"days_ago_other": "{{count}} dagen geleden",
"hours_ago_one": "{{count}} uur geleden",
"hours_ago_other": "{{count}} uren geleden",
"minutes_ago_one": "{{count}} minuut geleden",
"minutes_ago_other": "{{count}} minuten geleden",
"seconds_ago": "een paar seconden geleden"
},
"calendar": {
"views": {
"day": "Dag",
"week": "Week",
"month": "Maand",
"listDay": "Dag lijst",
"listWeek": "Week lijst",
"listMonth": "Maand lijst",
"listYear": "Jaar lijst",
"today": "Vandaag"
},
"navigation": {
"previous": "Vorige",
"next": "Volgende"
},
"event": {
"createTitle": "Evenement aanmaken",
"editTitle": "Evenement bewerken",
"calendar": "Agenda",
"title": "Titel",
"titlePlaceholder": "Evenement titel",
"location": "Locatie",
"locationPlaceholder": "Locatie",
"description": "Beschrijving",
"descriptionPlaceholder": "Beschrijving",
"start": "Start",
"end": "Einde",
"allDay": "Hele dag",
"organizer": "Organisator",
"attendees": "Deelnemers",
"deleteConfirm": "Evenement verwijderen",
"deleteConfirmMessage": "Weet u zeker dat u dit evenement wilt verwijderen?",
"deleteRecurringPrompt": "Dit is een terugkerend evenement. Wat wilt u verwijderen?",
"deleteThisOccurrence": "Alleen deze gebeurtenis",
"deleteThisAndFuture": "Deze en toekomstige gebeurtenissen",
"deleteAllOccurrences": "Alle gebeurtenissen",
"enterChoice": "Voer uw keuze in (1, 2 of 3):",
"invalidChoice": "Ongeldige keuze. Voer 1, 2 of 3 in.",
"delete": "Verwijderen",
"cancel": "Annuleren",
"save": "Opslaan",
Refactor EventModal into section components (#7) * 🙈(tools) remove OpenSpec skills and commands from Git tracking Remove .claude/skills/openspec-*/ and .claude/commands/opsx/ from Git tracking while keeping them locally. Extends the previous cleanup (d24eed9) that handled the openspec/ directory. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ✨(front) add EventModal section components and useEventForm hook Extract modal sections into dedicated components (DateTimeSection, RecurrenceSection, LocationSection, VideoConferenceSection, AttendeesSection, DescriptionSection, InvitationResponseSection, RemindersSection, StatusSection, AttachmentsSection) with shared SectionRow and SectionPill layout components. Add useEventForm hook to centralize form state management. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ♻️(front) refactor EventModal to use extracted sections Simplify EventModal by delegating to section components and useEventForm hook. Replace alert() with addToast() for error feedback, convert useCallback to useMemo for buildSummary in RecurrenceEditor, and add missing organizer dependency in useEventForm useEffect. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * 💄(front) update scheduler styles for new modal design Rework SCSS for EventModal, AttendeesInput, RecurrenceEditor, and Scheduler. Move inline styles to CSS classes. Update globals and frontend dependencies. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 16:30:37 +01:00
"create": "Aanmaken",
"sections": {
"addRecurrence": "Herhaling toevoegen",
"addLocation": "Locatie toevoegen",
"addVideoConference": "Visio",
"createVisio": "Add video conference",
"removeVisio": "Videoconferentie verwijderen",
Refactor EventModal into section components (#7) * 🙈(tools) remove OpenSpec skills and commands from Git tracking Remove .claude/skills/openspec-*/ and .claude/commands/opsx/ from Git tracking while keeping them locally. Extends the previous cleanup (d24eed9) that handled the openspec/ directory. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ✨(front) add EventModal section components and useEventForm hook Extract modal sections into dedicated components (DateTimeSection, RecurrenceSection, LocationSection, VideoConferenceSection, AttendeesSection, DescriptionSection, InvitationResponseSection, RemindersSection, StatusSection, AttachmentsSection) with shared SectionRow and SectionPill layout components. Add useEventForm hook to centralize form state management. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ♻️(front) refactor EventModal to use extracted sections Simplify EventModal by delegating to section components and useEventForm hook. Replace alert() with addToast() for error feedback, convert useCallback to useMemo for buildSummary in RecurrenceEditor, and add missing organizer dependency in useEventForm useEffect. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * 💄(front) update scheduler styles for new modal design Rework SCSS for EventModal, AttendeesInput, RecurrenceEditor, and Scheduler. Move inline styles to CSS classes. Update globals and frontend dependencies. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 16:30:37 +01:00
"videoLink": "Videoconferentie link",
"addAttendees": "Deelnemers toevoegen",
"addDescription": "Beschrijving toevoegen",
"addReminder": "Herinnering toevoegen",
"addAttachment": "Bijlage toevoegen",
"moreOptions": "Meer opties",
"reminder_one": "herinnering",
"reminder_other": "herinneringen",
"attachment_one": "bijlage",
"attachment_other": "bijlagen"
},
"reminders": {
"5min": "5 minuten voor",
"15min": "15 minuten voor",
"30min": "30 minuten voor",
"1hour": "1 uur voor",
"1day": "1 dag voor",
"1week": "1 week voor"
},
"status": {
"label": "Status",
"confirmed": "Bevestigd",
"tentative": "Voorlopig",
"cancelled": "Geannuleerd"
},
"visibility": {
"label": "Zichtbaarheid",
"public": "Openbaar",
"private": "Privé",
"confidential": "Vertrouwelijk"
},
"availability": {
"label": "Beschikbaarheid",
"busy": "Bezet",
"free": "Vrij"
}
},
"list": {
"myCalendars": "Mijn agenda's",
"sharedCalendars": "Gedeelde agenda's",
"shared": "(gedeeld)",
"showCalendar": "Agenda tonen",
"edit": "Bewerken",
"delete": "Verwijderen",
"subscription": "Abonnements-URL"
},
"subscription": {
"title": "Agenda-abonnements-URL",
"description": "Gebruik deze URL om u te abonneren op \"{{name}}\" vanuit externe agendatoepassingen (Apple Calendar, Google Calendar, Outlook, etc.).",
"loading": "Abonnements-URL wordt gegenereerd...",
"copy": "Kopiëren",
"copied": "Gekopieerd!",
"close": "Sluiten",
"warning": "Deze URL bevat een privétoken. Iedereen met deze link kan uw agenda-evenementen bekijken.",
"regenerate": "URL regenereren",
"regenerateConfirm": {
"title": "Abonnements-URL regenereren?",
"message": "Dit maakt de huidige URL ongeldig. Externe agenda's die de oude URL gebruiken zullen niet meer synchroniseren.",
"confirm": "Regenereren"
},
"error": "Genereren van abonnements-URL mislukt. Probeer het opnieuw.",
"errorPermission": "U heeft geen toegang tot deze agenda.",
"errorNetwork": "Netwerkfout. Controleer uw verbinding en probeer het opnieuw.",
"errorServer": "Serverfout. Probeer het later opnieuw."
},
"leftPanel": {
"newEvent": "Nieuw evenement"
},
"miniCalendar": {
"previousMonth": "Vorige maand",
"nextMonth": "Volgende maand"
},
"recurrence": {
"label": "Herhalen",
Refactor EventModal into section components (#7) * 🙈(tools) remove OpenSpec skills and commands from Git tracking Remove .claude/skills/openspec-*/ and .claude/commands/opsx/ from Git tracking while keeping them locally. Extends the previous cleanup (d24eed9) that handled the openspec/ directory. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ✨(front) add EventModal section components and useEventForm hook Extract modal sections into dedicated components (DateTimeSection, RecurrenceSection, LocationSection, VideoConferenceSection, AttendeesSection, DescriptionSection, InvitationResponseSection, RemindersSection, StatusSection, AttachmentsSection) with shared SectionRow and SectionPill layout components. Add useEventForm hook to centralize form state management. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ♻️(front) refactor EventModal to use extracted sections Simplify EventModal by delegating to section components and useEventForm hook. Replace alert() with addToast() for error feedback, convert useCallback to useMemo for buildSummary in RecurrenceEditor, and add missing organizer dependency in useEventForm useEffect. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * 💄(front) update scheduler styles for new modal design Rework SCSS for EventModal, AttendeesInput, RecurrenceEditor, and Scheduler. Move inline styles to CSS classes. Update globals and frontend dependencies. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 16:30:37 +01:00
"none": "Niet herhalen",
"daily": "Dagelijks",
"weekly": "Wekelijks",
"monthly": "Maandelijks",
"yearly": "Jaarlijks",
"custom": "Aangepast...",
"everyLabel": "Herhaal elke",
"days": "dagen",
"weeks": "weken",
"months": "maanden",
"years": "jaren",
"repeatOn": "Herhaal op",
"repeatOnDay": "Herhaal op dag",
"repeatOnDate": "Herhaal op datum",
"dayOfMonth": "Dag",
"endsLabel": "Eindigt",
"never": "Nooit",
"on": "Op",
"after": "Na",
"occurrences": "keer",
"weekdays": {
"mo": "M",
"tu": "D",
"we": "W",
"th": "D",
"fr": "V",
"sa": "Z",
"su": "Z"
},
"months": {
"january": "Januari",
"february": "Februari",
"march": "Maart",
"april": "April",
"may": "Mei",
"june": "Juni",
"july": "Juli",
"august": "Augustus",
"september": "September",
"october": "Oktober",
"november": "November",
"december": "December"
},
"warnings": {
"februaryMax": "Februari heeft maximaal 29 dagen",
"leapYear": "Deze datum (29 februari) bestaat alleen in schrikkeljaren",
"monthMax30": "Deze maand heeft maximaal 30 dagen",
"dayMax31": "Dag moet tussen 1 en 31 zijn"
}
},
"createCalendar": {
"title": "Agenda aanmaken",
"name": "Naam",
"namePlaceholder": "Agenda naam",
"nameRequired": "Naam is verplicht",
"color": "Kleur",
"description": "Beschrijving",
"descriptionPlaceholder": "Agenda beschrijving (optioneel)",
"cancel": "Annuleren",
"create": "Aanmaken"
},
"editCalendar": {
"title": "Agenda bewerken",
"save": "Opslaan"
},
"deleteCalendar": {
"title": "Agenda verwijderen",
"message": "Weet u zeker dat u de agenda \"{{name}}\" wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.",
"confirm": "Verwijderen"
},
"shareCalendar": {
"title": "Agenda delen",
"emailPlaceholder": "Voer e-mailadres in",
"share": "Delen",
"hint": "De persoon krijgt dezelfde rechten als u (lezen en schrijven).",
"success": "Agenda gedeeld met {{email}}",
"error": "Delen van agenda mislukt",
"invalidEmail": "Voer een geldig e-mailadres in"
},
"attendees": {
"label": "Deelnemers uitnodigen",
"placeholder": "Voer e-mailadres in en druk op Enter",
"add": "Toevoegen",
"remove": "Deelnemer verwijderen",
"invalidEmail": "Voer een geldig e-mailadres in",
"alreadyAdded": "Dit e-mailadres staat al in de lijst",
"cannotAddOrganizer": "U kunt uzelf niet als deelnemer toevoegen",
"participants": "Deelnemers",
"organizer": "Organisator",
"viewProfile": "Profiel bekijken",
"cannotRemoveOrganizer": "Kan organisator niet verwijderen"
}
}
}
}
}