{
  "errors": {
    "http": {
      "get": "Impossible de récupérer les données.",
      "post": "Impossible de créer la ressource.",
      "put": "Impossible de mettre à jour la ressource.",
      "patch": "Impossible de mettre à jour la ressource.",
      "delete": "Impossible de supprimer la ressource."
    },
    "auth": {
      "login": "Identifiants invalides.",
      "logout": "Impossible de se déconnecter.",
      "session": "Session expirée"
    }
  },
  "success": {
    "auth": {
      "login": "Connexion réussie.",
      "logout": "Déconnexion réussie."
    }
  },
  "clients": {
    "created": "Client créé avec succès.",
    "updated": "Client mis à jour avec succès.",
    "deleted": "Client supprimé avec succès.",
    "addClient": "Ajouter un client",
    "editClient": "Modifier un client",
    "deleteConfirmTitle": "Supprimer le client",
    "deleteConfirmMessage": "Êtes-vous sûr de vouloir supprimer le client « {name} » ? Cette action est irréversible."
  },
  "projects": {
    "title": "Projets",
    "created": "Projet créé avec succès.",
    "updated": "Projet mis à jour avec succès.",
    "deleted": "Projet supprimé avec succès.",
    "archived": "Projet archivé avec succès.",
    "unarchived": "Projet désarchivé avec succès.",
    "showArchived": "Voir les projets archivés",
    "hideArchived": "Masquer les projets archivés",
    "noProjects": "Aucun projet trouvé.",
    "noArchivedProjects": "Aucun projet archivé.",
    "addProject": "Ajouter un projet",
    "addProjectShort": "Projet",
    "editProject": "Modifier un projet",
    "deleteConfirmTitle": "Supprimer le projet",
    "deleteConfirmMessage": "Êtes-vous sûr de vouloir supprimer ce projet ? Cette action est irréversible.",
    "cannotDelete": "Impossible de supprimer un projet contenant des tickets."
  },
  "taskStatuses": {
    "created": "Statut créé avec succès.",
    "updated": "Statut mis à jour avec succès.",
    "deleted": "Statut supprimé avec succès.",
    "addStatus": "Ajouter un statut",
    "editStatus": "Modifier un statut",
    "deleteStatus": "Supprimer le statut « {label} »",
    "linkedTasks": "{count} tâche est liée à ce statut. Choisissez où les déplacer :",
    "linkedTasksPlural": "{count} tâches sont liées à ce statut. Choisissez où les déplacer :",
    "moveTo": "Déplacer vers",
    "backlog": "Backlog (sans statut)"
  },
  "workflows": {
    "title": "Workflows",
    "addWorkflow": "Ajouter un workflow",
    "editWorkflow": "Modifier le workflow",
    "name": "Nom",
    "isDefault": "Workflow par défaut",
    "statuses": "Statuts",
    "addStatus": "Ajouter un statut",
    "category": "Catégorie",
    "created": "Workflow créé",
    "updated": "Workflow mis à jour",
    "deleted": "Workflow supprimé",
    "switched": "Workflow du projet changé",
    "switchTitle": "Changer de workflow",
    "switchTargetLabel": "Nouveau workflow",
    "switchMappingTitle": "Mapping des statuts",
    "switchSourceCol": "Statut actuel",
    "switchTargetCol": "Statut cible",
    "switchTaskCountCol": "Tâches",
    "switchToBacklog": "Mapper vers le backlog",
    "switchConfirm": "Confirmer la migration",
    "switchSummary": "{count} tâche(s) migrée(s), projet sur workflow « {name} »",
    "deleteUsedBy": "Workflow utilisé par {count} projet(s) — impossible de supprimer.",
    "categories": {
      "todo": "À faire",
      "in_progress": "En cours",
      "blocked": "Bloqué",
      "review": "En validation",
      "done": "Terminé"
    }
  },
  "taskEfforts": {
    "created": "Effort créé avec succès.",
    "updated": "Effort mis à jour avec succès.",
    "deleted": "Effort supprimé avec succès.",
    "addEffort": "Ajouter un effort",
    "editEffort": "Modifier un effort"
  },
  "taskPriorities": {
    "created": "Priorité créée avec succès.",
    "updated": "Priorité mise à jour avec succès.",
    "deleted": "Priorité supprimée avec succès.",
    "addPriority": "Ajouter une priorité",
    "editPriority": "Modifier une priorité"
  },
  "taskTags": {
    "created": "Tag créé avec succès.",
    "updated": "Tag mis à jour avec succès.",
    "deleted": "Tag supprimé avec succès.",
    "addTag": "Ajouter un tag",
    "editTag": "Modifier un tag"
  },
  "taskGroups": {
    "created": "Groupe créé avec succès.",
    "updated": "Groupe mis à jour avec succès.",
    "deleted": "Groupe supprimé avec succès.",
    "archived": "Groupe archivé avec succès.",
    "unarchived": "Groupe désarchivé avec succès.",
    "addGroup": "Ajouter un groupe",
    "editGroup": "Modifier un groupe"
  },
  "taskDocuments": {
    "title": "Documents",
    "dropzone": "Glisser des fichiers ici ou cliquer pour sélectionner",
    "uploaded": "Document ajouté avec succès.",
    "deleted": "Document supprimé avec succès.",
    "uploadError": "Erreur lors de l'upload du document.",
    "confirmDeleteTitle": "Supprimer le document",
    "confirmDeleteMessage": "Êtes-vous sûr de vouloir supprimer ce document ?",
    "download": "Télécharger",
    "copy": "Copier",
    "copied": "Contenu copié !",
    "maxSizeError": "Le fichier dépasse la taille maximale de 50 Mo.",
    "linkShareButton": "Lier depuis le partage",
    "linkShareTitle": "Lier un fichier du partage",
    "linkShareHint": "Cliquez sur un dossier pour naviguer, sur un fichier pour le lier au ticket.",
    "linkShareSuccess": "Fichier du partage lié au ticket.",
    "linkShareError": "Impossible de lier ce fichier (type non autorisé ou introuvable).",
    "shareLinkBadge": "Lien vers le partage",
    "shareLinkLabel": "Partage"
  },
  "tasks": {
    "created": "Ticket créé avec succès.",
    "updated": "Ticket mis à jour avec succès.",
    "deleted": "Ticket supprimé avec succès.",
    "archived": "Ticket archivé avec succès.",
    "unarchived": "Ticket désarchivé avec succès.",
    "deleteConfirmTitle": "Supprimer le ticket",
    "deleteConfirmMessage": "Êtes-vous sûr de vouloir supprimer ce ticket ? Cette action est irréversible.",
    "addTask": "Ajouter un ticket",
    "editTask": "Modifier un ticket",
    "detailsTab": "Détails",
    "planningTab": "Planification",
    "planning": {
      "dates": "Dates",
      "scheduledStart": "Début planifié",
      "scheduledEnd": "Fin planifiée",
      "deadline": "Deadline",
      "calendar": "Calendrier",
      "syncToCalendar": "Envoyer au calendrier Zimbra",
      "syncOk": "Synchronisé",
      "recurrence": "Récurrence",
      "isRecurring": "Tâche récurrente",
      "type": "Type",
      "daily": "Quotidien",
      "weekly": "Hebdomadaire",
      "monthly": "Mensuel",
      "yearly": "Annuel",
      "interval": "Intervalle",
      "daysOfWeek": "Jours de la semaine",
      "days": {
        "mon": "Lu",
        "tue": "Ma",
        "wed": "Me",
        "thu": "Je",
        "fri": "Ve",
        "sat": "Sa",
        "sun": "Di"
      },
      "dayOfMonth": "Jour du mois",
      "dayOfMonthLabel": "Jour (1-31)",
      "weekOfMonth": "Semaine du mois",
      "weekOfMonthLabel": "Semaine",
      "dayLabel": "Jour",
      "endRecurrence": "Fin de la récurrence",
      "neverEnds": "Jamais",
      "afterOccurrences": "Après X occurrences",
      "occurrences": "Occurrences",
      "onDate": "À une date",
      "endDate": "Date de fin"
    }
  },
  "users": {
    "created": "Utilisateur créé avec succès.",
    "updated": "Utilisateur mis à jour avec succès.",
    "deleted": "Utilisateur supprimé avec succès.",
    "archived": "Utilisateur archivé avec succès.",
    "restored": "Utilisateur restauré avec succès.",
    "addUser": "Ajouter un utilisateur",
    "editUser": "Modifier un utilisateur",
    "archivedBadge": "Archivé",
    "showArchived": "Afficher les utilisateurs archivés",
    "archive": "Archiver",
    "restore": "Restaurer",
    "archiveConfirmTitle": "Archiver l'utilisateur",
    "archiveConfirmMessage": "Êtes-vous sûr de vouloir archiver l'utilisateur « {username} » ? Son compte sera désactivé (il ne pourra plus se connecter), mais ses données et son historique restent conservés. Vous pourrez le restaurer plus tard."
  },
  "admin": {
    "roles": {
      "title": "Rôles",
      "addRole": "Ajouter un rôle",
      "editRole": "Modifier un rôle",
      "empty": "Aucun rôle trouvé.",
      "system": "Système",
      "code": "Code",
      "codeHint": "Identifiant technique en snake_case (immuable).",
      "codeImmutable": "Le code ne peut pas être modifié après création.",
      "codeInvalid": "Code invalide (attendu snake_case : minuscules, chiffres et underscores).",
      "label": "Libellé",
      "labelRequired": "Le libellé est requis.",
      "description": "Description",
      "permissions": "Permissions",
      "noPermissions": "Aucune permission disponible.",
      "created": "Rôle créé avec succès.",
      "updated": "Rôle mis à jour avec succès.",
      "deleted": "Rôle supprimé avec succès."
    },
    "audit": {
      "title": "Audit",
      "empty": "Aucune entrée d'audit trouvée.",
      "date": "Date",
      "performedBy": "Utilisateur",
      "entityType": "Type d'entité",
      "action": "Action",
      "entityId": "Identifiant",
      "filterEntityType": "Type d'entité",
      "filterEntityTypeAll": "Tous les types",
      "filterAction": "Action",
      "filterActionAll": "Toutes les actions",
      "previous": "Précédent",
      "next": "Suivant",
      "page": "Page {page}"
    }
  },
  "audit": {
    "entity": {
      "core": {
        "User": "Utilisateur",
        "Role": "Rôle",
        "Permission": "Permission"
      }
    },
    "action": {
      "create": "Création",
      "update": "Modification",
      "delete": "Suppression"
    }
  },
  "timeEntries": {
    "created": "Temps enregistré",
    "updated": "Temps modifié",
    "deleted": "Temps supprimé",
    "noEntries": "Aucune activité pour cette période",
    "addEntry": "Ajouter une Activité",
    "editEntry": "Modifier un temps",
    "export": "Exporter",
    "exportTitle": "Exporter les temps",
    "exportCurrentMonth": "Mois en cours",
    "exportLastMonth": "Mois dernier",
    "exportCustomPeriod": "Période personnalisée",
    "exportFrom": "Du",
    "exportTo": "Au",
    "exportUsers": "Utilisateurs",
    "exportClient": "Client",
    "exportProjects": "Projets",
    "exportTags": "Tags",
    "exportAllClients": "Tous les clients",
    "exportLoading": "Export en cours...",
    "exportSuccess": "Export terminé !",
    "exportError": "Erreur lors de l'export."
  },
  "archive": {
    "title": "Archives",
    "empty": "Aucun ticket archivé.",
    "archiveButton": "Archiver",
    "unarchiveButton": "Désarchiver",
    "showArchived": "Voir les groupes archivés",
    "hideArchived": "Masquer les groupes archivés",
    "statusFinal": "Statut final",
    "groupArchiveDisabled": "Tous les tickets doivent être en statut final pour archiver le groupe.",
    "groupNonFinalTasks": "Il reste {count} ticket(s) sans statut final dans ce groupe."
  },
  "myTasks": {
    "title": "Mes tâches",
    "viewKanban": "Vue Kanban",
    "viewList": "Vue Liste",
    "allProjects": "Tous les projets",
    "allGroups": "Tous les groupes",
    "allTypes": "Tous les types",
    "allPriorities": "Toutes les priorités",
    "allEfforts": "Tous les efforts",
    "allAssignees": "Tous",
    "noTasks": "Aucune tâche",
    "backlog": "Backlog",
    "createTask": "Créer une tâche",
    "sortBy": "Trier par",
    "sortDefault": "Par défaut",
    "sortDeadline": "Échéance",
    "sortScheduledStart": "Date planifiée",
    "dropRefused": "Aucun statut de cette colonne dans le workflow de ce projet"
  },
  "dashboard": {
    "title": "Tableau de bord",
    "noData": "Aucune donnée",
    "noPriority": "Sans priorité",
    "noProject": "Sans projet",
    "hoursWorked": "Heures travaillées",
    "inProgress": "En cours",
    "done": "Terminé",
    "filters": {
      "period": "Période",
      "project": "Projet",
      "user": "Utilisateur",
      "allProjects": "Tous les projets",
      "allUsers": "Tous les utilisateurs"
    },
    "periods": {
      "thisWeek": "Cette semaine",
      "lastWeek": "Semaine dernière",
      "thisMonth": "Ce mois",
      "lastMonth": "Mois dernier"
    },
    "stats": {
      "hoursPeriod": "Heures sur la période",
      "myActiveTasks": "Mes tâches actives",
      "completed": "terminée(s)",
      "totalTasks": "Tâches totales",
      "unassigned": "non assignée(s)",
      "projects": "Projets",
      "users": "utilisateur(s)"
    },
    "charts": {
      "hoursByDay": "Heures par jour",
      "hoursByProject": "Temps par projet",
      "tasksByStatus": "Tâches par statut",
      "tasksByPriority": "Tâches par priorité",
      "tasksByProject": "Tâches par projet"
    },
    "days": {
      "mon": "Lun",
      "tue": "Mar",
      "wed": "Mer",
      "thu": "Jeu",
      "fri": "Ven",
      "sat": "Sam",
      "sun": "Dim"
    }
  },
  "sidebar": {
    "general": {
      "section": "Général",
      "dashboard": "Tableau de bord",
      "myTasks": "Mes tâches",
      "projects": "Projets",
      "timeTracking": "Suivi de temps",
      "mail": "Messagerie",
      "myAbsences": "Mes absences"
    },
    "tools": {
      "section": "Outils"
    },
    "project": {
      "kanban": "Kanban",
      "groups": "Groupes",
      "archives": "Archives"
    },
    "admin": {
      "section": "Administration",
      "teamAbsences": "Absences équipe",
      "directory": "Répertoire",
      "reporting": "Rapports",
      "administration": "Administration"
    }
  },
  "reporting": {
    "title": "Rapports",
    "export": "Exporter (CSV)",
    "empty": "Aucune donnée pour cette période.",
    "filters": {
      "period": "Période",
      "from": "Du",
      "to": "Au",
      "project": "Projet",
      "allProjects": "Tous les projets",
      "user": "Utilisateur",
      "allUsers": "Tous les utilisateurs"
    },
    "periods": {
      "thisMonth": "Mois courant",
      "lastMonth": "Mois dernier",
      "custom": "Personnalisé"
    },
    "sections": {
      "timePerProject": "Temps par projet",
      "timePerUser": "Temps par utilisateur",
      "tasksByStatus": "Tâches par statut",
      "absencesByType": "Absences par type"
    },
    "columns": {
      "project": "Projet",
      "code": "Code",
      "user": "Utilisateur",
      "status": "Statut",
      "type": "Type",
      "hours": "Heures",
      "entries": "Nb saisies",
      "count": "Nombre",
      "days": "Jours"
    },
    "absenceTypes": {
      "cp": "Congés payés",
      "mariage_pacs": "Mariage / PACS",
      "naissance": "Naissance",
      "conge_parental": "Congé parental",
      "deces": "Décès proche",
      "maladie": "Arrêt maladie"
    }
  },
  "common": {
    "cancel": "Annuler",
    "save": "Enregistrer",
    "edit": "Modifier",
    "delete": "Supprimer",
    "add": "Ajouter",
    "actions": "Action",
    "loading": "Chargement...",
    "archived": "Archivé",
    "noClient": "Aucun client",
    "untitled": "Sans titre",
    "dateFilter": "Date",
    "today": "Aujourd'hui",
    "thisWeek": "Cette semaine",
    "clear": "Effacer",
    "day": "Jour",
    "weekShort": "Sem.",
    "submit": "Soumettre",
    "close": "Fermer",
    "back": "Retour"
  },
  "gitea": {
    "settings": {
      "title": "Configuration Gitea",
      "url": "URL du serveur",
      "urlPlaceholder": "https://git.example.com",
      "token": "Token API",
      "tokenPlaceholder": "Entrez un nouveau token",
      "tokenConfigured": "Token configuré",
      "save": "Enregistrer",
      "saved": "Configuration Gitea sauvegardée.",
      "testConnection": "Tester la connexion",
      "testSuccess": "Connexion réussie.",
      "testFailed": "Connexion échouée."
    },
    "branch": {
      "title": "Git",
      "create": "Créer une branche",
      "created": "Branche créée avec succès.",
      "copy": "Copier le nom",
      "copied": "Nom de branche copié.",
      "type": "Type",
      "baseBranch": "Branche de base",
      "preview": "Aperçu",
      "types": {
        "feature": "feature",
        "fix": "fix",
        "refactor": "refactor",
        "hotfix": "hotfix",
        "chore": "chore"
      },
      "noBranches": "Aucune branche liée.",
      "commits": "Commits",
      "noCommits": "Aucun commit."
    },
    "pr": {
      "title": "Pull Requests",
      "noPrs": "Aucune pull request.",
      "open": "Ouverte",
      "merged": "Mergée",
      "closed": "Fermée",
      "ci": "CI/CD"
    },
    "error": "Erreur de connexion à Gitea.",
    "notConfigured": "Gitea non configuré pour ce projet."
  },
  "notification": {
    "title": "Notifications",
    "markAllRead": "Tout marquer comme lu",
    "empty": "Aucune notification",
    "ticketCreated": "Nouveau ticket client {number}",
    "ticketStatusChanged": "Ticket {number} mis à jour",
    "timeAgo": {
      "now": "À l'instant",
      "minutes": "Il y a {n} min",
      "hours": "Il y a {n}h",
      "days": "Il y a {n}j"
    }
  },
  "profile": {
    "title": "Mon profil",
    "changeAvatar": "Changer l'avatar",
    "removeAvatar": "Supprimer l'avatar",
    "cropAvatar": "Recadrer l'avatar",
    "apiToken": {
      "title": "Token API MCP",
      "help": "Utilisé pour authentifier le serveur MCP HTTP (à coller dans le header Authorization: Bearer …). Ne pas partager.",
      "label": "Token",
      "empty": "Aucun token généré pour le moment.",
      "generate": "Générer un token",
      "regenerate": "Régénérer",
      "copy": "Copier",
      "copied": "Token copié dans le presse-papiers.",
      "copyFailed": "Impossible de copier le token.",
      "regenerated": "Nouveau token généré. L'ancien token est désormais invalide.",
      "confirmTitle": "Régénérer le token MCP ?",
      "confirmMessage": "L'ancien token sera immédiatement invalidé. Tous les clients MCP utilisant ce token devront être reconfigurés."
    }
  },
  "bookstack": {
    "settings": {
      "title": "Configuration BookStack",
      "url": "URL du serveur",
      "urlPlaceholder": "https://wiki.example.com",
      "tokenId": "Token ID",
      "tokenIdPlaceholder": "Entrez le Token ID",
      "tokenSecret": "Token Secret",
      "tokenSecretPlaceholder": "Entrez le Token Secret",
      "tokenConfigured": "Token configuré",
      "save": "Enregistrer",
      "saved": "Configuration BookStack sauvegardée.",
      "testConnection": "Tester la connexion",
      "testSuccess": "Connexion réussie.",
      "testFailed": "Connexion échouée."
    },
    "links": {
      "title": "Documentation",
      "searchPlaceholder": "Rechercher une page ou un livre...",
      "noResults": "Aucun résultat",
      "empty": "Aucun document lié"
    }
  },
  "zimbra": {
    "settings": {
      "title": "Calendrier Zimbra",
      "serverUrl": "URL du serveur CalDAV",
      "serverUrlPlaceholder": "https://mail.ovh.com",
      "username": "Nom d'utilisateur",
      "usernamePlaceholder": "user{'@'}domain.com",
      "calendarPath": "Chemin du calendrier",
      "calendarPathPlaceholder": "/dav/user{'@'}domain.com/Calendar/",
      "password": "Mot de passe",
      "passwordConfigured": "Mot de passe configuré",
      "enabled": "Activer la synchronisation CalDAV",
      "save": "Enregistrer",
      "saved": "Configuration Zimbra enregistrée",
      "testConnection": "Tester la connexion",
      "testSuccess": "Connexion réussie",
      "testFailed": "Connexion échouée"
    }
  },
  "sharedFiles": {
    "title": "Documents",
    "root": "Racine",
    "empty": "Ce dossier est vide.",
    "noResults": "Aucun document ne correspond à votre recherche.",
    "searchPlaceholder": "Rechercher dans tout le partage…",
    "download": "Télécharger",
    "reload": "Recharger",
    "previewError": "Aperçu impossible. Téléchargez le fichier pour l'ouvrir.",
    "colName": "Nom",
    "colSize": "Taille",
    "colModified": "Modifié le",
    "sidebar": {
      "title": "Documents"
    }
  },
  "adminShare": {
    "title": "Partage réseau (SMB)",
    "host": "Serveur",
    "hostPlaceholder": "ex. WIN-SRV ou 192.168.1.10",
    "shareName": "Nom du partage",
    "shareNamePlaceholder": "ex. Documents",
    "basePath": "Sous-dossier racine (optionnel)",
    "basePathPlaceholder": "ex. /Projets",
    "domain": "Domaine / groupe de travail",
    "domainPlaceholder": "WORKGROUP",
    "username": "Identifiant",
    "usernamePlaceholder": "ex. lesstime",
    "password": "Mot de passe",
    "passwordConfigured": "Un mot de passe est déjà enregistré.",
    "enabled": "Activer l'accès au partage",
    "save": "Enregistrer",
    "saved": "Configuration enregistrée.",
    "testConnection": "Tester la connexion",
    "testSuccess": "Connexion réussie.",
    "testFailed": "Échec de la connexion."
  },
  "taskRecurrence": {
    "created": "Récurrence créée",
    "updated": "Récurrence mise à jour",
    "deleted": "Récurrence supprimée"
  },
  "recurrence": {
    "daily": "Quotidien",
    "weekly": "Hebdomadaire",
    "monthly": "Mensuel",
    "yearly": "Annuel"
  },
  "mail": {
    "title": "Messagerie",
    "sidebar": {
      "title": "Messagerie",
      "ariaLabel": "Accès à la messagerie, {count} messages non lus"
    },
    "admin": {
      "title": "Configuration messagerie",
      "protocol": "Protocole",
      "imapSection": "Réception (IMAP)",
      "smtpSection": "Envoi (SMTP)",
      "host": "Serveur",
      "port": "Port",
      "encryption": "Chiffrement",
      "username": "Adresse e-mail",
      "password": "Mot de passe",
      "passwordSet": "Mot de passe déjà configuré — laisser vide pour conserver",
      "sentFolderPath": "Dossier des envois",
      "enabled": "Activer la synchronisation mail",
      "test": "Tester la connexion",
      "testSuccess": "Connexion IMAP réussie",
      "testFailed": "Échec de connexion",
      "save": "Enregistrer",
      "saveSuccess": "Configuration enregistrée",
      "ovhDefaultsHelp": "OVH : ssl0.ovh.net (port 993 IMAP / 465 SMTP)"
    },
    "folders": "Dossiers",
    "messages": "Messages",
    "viewer": "Lecture",
    "empty": {
      "folder": "Aucun dossier disponible.",
      "list": "Aucun message dans ce dossier.",
      "viewer": "Sélectionnez un message pour le lire."
    },
    "preview": {
      "open": "Prévisualiser",
      "close": "Fermer l'aperçu",
      "loading": "Chargement de l'aperçu…",
      "unavailable": "Aperçu indisponible pour ce type de fichier."
    },
    "folderTree": {
      "expand": "Déplier le dossier",
      "collapse": "Replier le dossier"
    },
    "systemFolder": {
      "inbox": "Boîte de réception",
      "sent": "Éléments envoyés",
      "drafts": "Brouillons",
      "archive": "Archives",
      "trash": "Corbeille",
      "junk": "Indésirables"
    },
    "actions": {
      "refresh": "Actualiser",
      "createTask": "Créer une tâche",
      "linkTask": "Lier à une tâche",
      "markRead": "Marquer comme lu",
      "markUnread": "Marquer comme non lu",
      "flag": "Marquer important",
      "unflag": "Retirer l'importance",
      "download": "Télécharger",
      "showImages": "Afficher les images"
    },
    "errors": {
      "syncFailed": "Erreur lors de la synchronisation.",
      "fetchFailed": "Impossible de charger les messages.",
      "notAuthorized": "Vous n'avez pas accès à la messagerie."
    },
    "configuration": {
      "saved": "Configuration mail enregistrée."
    },
    "task": {
      "created": "Tâche créée depuis le mail.",
      "linked": "Mail lié à la tâche.",
      "unlinked": "Lien supprimé."
    },
    "createTaskModal": {
      "title": "Créer une tâche depuis ce mail",
      "submit": "Créer la tâche",
      "projectLabel": "Projet *",
      "projectPlaceholder": "Sélectionner un projet",
      "groupLabel": "Groupe (optionnel)",
      "groupPlaceholder": "Aucun groupe",
      "statusLabel": "Statut",
      "assigneeLabel": "Assigné à",
      "assigneePlaceholder": "Aucun",
      "titleHint": "Le titre sera rempli depuis le sujet du mail.",
      "descriptionHint": "La description sera remplie depuis le corps du mail."
    },
    "linkTaskModal": {
      "title": "Lier à une tâche existante",
      "submit": "Lier la tâche",
      "searchPlaceholder": "Rechercher une tâche par titre…",
      "projectFilter": "Filtrer par projet",
      "projectAll": "Tous les projets",
      "empty": "Aucune tâche correspondante.",
      "loading": "Recherche en cours…"
    },
    "taskTab": {
      "title": "Mails",
      "empty": "Aucun mail lié à cette tâche.",
      "openInMailer": "Ouvrir dans la messagerie",
      "unlinkConfirm": "Délier ce mail ?"
    },
    "sync": {
      "dispatched": "Synchronisation lancée en arrière-plan."
    },
    "attachments": "Pièces jointes",
    "noAttachments": "Aucune pièce jointe.",
    "from": "De",
    "to": "À",
    "cc": "Cc",
    "date": "Date",
    "subject": "Sujet",
    "noSubject": "(Sans objet)",
    "loadMore": "Charger plus",
    "loading": "Chargement…",
    "hasAttachments": "Pièces jointes",
    "unread": "non lu | non lus",
    "remoteImagesBlocked": "Les images distantes sont masquées pour votre sécurité."
  },
  "absences": {
    "title": "Mes absences",
    "teamTitle": "Absences de l'équipe",
    "newRequest": "Nouvelle demande",
    "daySingular": "jour",
    "daysPlural": "jours",
    "noBalance": "Aucun solde à afficher.",
    "noRequests": "Aucune demande.",
    "remaining": "restants",
    "acquired": "acquis",
    "acquiredN1": "Acquis (N-1)",
    "acquiringN": "En cours d'acquisition (N)",
    "acquiringHint": "posables par anticipation",
    "taken": "pris",
    "pending": "en attente",
    "available": "disponible",
    "types": {
      "cp": "Congés payés",
      "mariage_pacs": "Mariage / PACS",
      "naissance": "Naissance",
      "conge_parental": "Congé parental",
      "deces": "Décès proche",
      "maladie": "Arrêt maladie"
    },
    "status": {
      "pending": "En attente",
      "approved": "Approuvée",
      "rejected": "Refusée",
      "cancelled": "Annulée"
    },
    "halfDay": {
      "matin": "Matin",
      "apres_midi": "Après-midi"
    },
    "table": {
      "type": "Type",
      "period": "Période",
      "days": "Jours",
      "status": "Statut",
      "employee": "Salarié",
      "year": "Année",
      "requestedAt": "Demandé le",
      "actions": "Actions"
    },
    "filters": {
      "allStatuses": "Tous les statuts",
      "allTypes": "Tous les types",
      "allYears": "Toutes les années",
      "allEmployees": "Tous les salariés"
    },
    "form": {
      "type": "Type d'absence",
      "startDate": "Date de début",
      "endDate": "Date de fin",
      "startHalfDay": "Demi-journée (début)",
      "endHalfDay": "Demi-journée (fin)",
      "halfDayCheckbox": "Demi-journée",
      "reason": "Motif",
      "reasonPlaceholder": "Précisez le motif si nécessaire…",
      "justification": "Justificatif",
      "computed": "{days} décompté(s)",
      "balanceAfter": "Solde restant après cette demande : {value}",
      "negativeWarning": "Cette demande dépasse votre solde disponible.",
      "noticeWarning": "Le délai de prévenance ({days} jours) n'est pas respecté.",
      "submit": "Soumettre la demande",
      "justificationRequired": "Un justificatif est requis pour ce type d'absence.",
      "fullDay": "Journée entière",
      "balanceAt": "Solde au {date}",
      "balanceAfterValidation": "Solde après validation",
      "duration": "Durée de la demande",
      "commentPlaceholder": "Écrire un commentaire…",
      "serverError": "La demande n'a pas pu être enregistrée.",
      "errors": {
        "typeRequired": "Veuillez choisir un type d'absence.",
        "startRequired": "Veuillez indiquer une date de début.",
        "endRequired": "Veuillez indiquer une date de fin.",
        "endBeforeStart": "La date de fin doit être après la date de début.",
        "zeroDays": "La période sélectionnée ne décompte aucun jour.",
        "justificationRequired": "Un justificatif est obligatoire pour ce type d'absence."
      }
    },
    "detail": {
      "title": "Détail de la demande",
      "timeline": "Historique",
      "created": "Demande créée",
      "reviewed": "Traitée par {name}",
      "rejectionReason": "Motif du refus",
      "downloadJustification": "Télécharger le justificatif",
      "cancel": "Annuler ma demande",
      "cancelConfirm": "Annuler cette demande ?"
    },
    "review": {
      "approve": "Valider",
      "reject": "Refuser",
      "rejectTitle": "Refuser la demande",
      "rejectReasonLabel": "Motif du refus",
      "rejectReasonPlaceholder": "Expliquez la raison du refus…",
      "confirm": "Confirmer"
    },
    "admin": {
      "tabs": {
        "requests": "Demandes",
        "calendar": "Calendrier",
        "balances": "Soldes",
        "employees": "Employés"
      },
      "kpis": {
        "pending": "En attente",
        "todayAbsent": "Absents aujourd'hui",
        "weekAbsent": "Absents cette semaine"
      },
      "balancesTable": {
        "employee": "Salarié",
        "type": "Type",
        "period": "Période",
        "acquired": "Acquis (N-1)",
        "acquiring": "En cours (N)",
        "taken": "Pris",
        "pending": "En attente",
        "available": "Disponible",
        "adjust": "Ajuster"
      },
      "adjust": {
        "title": "Ajuster le solde",
        "acquired": "Acquis (N-1)",
        "acquiring": "En cours d'acquisition (N)",
        "taken": "Pris",
        "save": "Enregistrer"
      },
      "employees": {
        "columns": {
          "name": "Nom",
          "contract": "Contrat",
          "cpTaken": "CP pris",
          "cpRemaining": "CP restants"
        },
        "empty": "Aucun employé. Cochez « Employé » sur un utilisateur dans l'administration.",
        "noContract": "—",
        "drawer": {
          "title": "Informations employé",
          "save": "Enregistrer"
        },
        "fields": {
          "hireDate": "Date d'embauche",
          "endDate": "Date de sortie",
          "contractType": "Type de contrat",
          "workTimeRatio": "Temps de travail (ex : 1.0)",
          "annualLeaveDays": "CP annuels (jours)",
          "referencePeriodStart": "Début période réf. (MM-DD)",
          "initialLeaveBalance": "Solde CP initial"
        },
        "contract": {
          "cdi": "CDI",
          "cdd": "CDD",
          "stage": "Stage",
          "alternance": "Alternance",
          "autre": "Autre"
        }
      }
    },
    "policies": {
      "title": "Politiques d'absence",
      "subtitle": "Réglez les défauts par type d'absence — convention de référence : Syntec (IDCC 1486), à confirmer selon le code APE.",
      "type": "Type",
      "daysPerYear": "Jours / an",
      "daysPerEvent": "Jours / événement",
      "justificationRequired": "Justificatif requis",
      "noticeDays": "Délai prévenance (j)",
      "countWorkingDaysOnly": "Jours ouvrés",
      "active": "Actif",
      "save": "Enregistrer"
    },
    "toast": {
      "created": "Demande d'absence créée.",
      "approved": "Demande validée.",
      "rejected": "Demande refusée.",
      "cancelled": "Demande annulée.",
      "justificationUploaded": "Justificatif ajouté.",
      "balanceAdjusted": "Solde ajusté.",
      "policyUpdated": "Politique mise à jour."
    }
  },
  "prospects": {
    "created": "Prospect créé avec succès.",
    "updated": "Prospect mis à jour avec succès.",
    "deleted": "Prospect supprimé avec succès.",
    "converted": "Prospect converti en client avec succès.",
    "addProspect": "Ajouter un prospect",
    "editProspect": "Modifier un prospect",
    "convert": "Convertir en client",
    "alreadyConverted": "Déjà converti en client",
    "convertConfirmTitle": "Convertir le prospect",
    "convertConfirmMessage": "Êtes-vous sûr de vouloir convertir le prospect « {name} » en client ? Le prospect deviendra un client.",
    "convertConfirm": "Convertir",
    "deleteConfirmTitle": "Supprimer le prospect",
    "deleteConfirmMessage": "Êtes-vous sûr de vouloir supprimer le prospect « {name} » ? Cette action est irréversible.",
    "fields": {
      "name": "Nom",
      "company": "Société",
      "email": "Email",
      "phone": "Téléphone",
      "website": "Site web",
      "street": "Rue",
      "city": "Ville",
      "postalCode": "Code postal",
      "status": "Statut",
      "source": "Source",
      "notes": "Notes"
    },
    "status": {
      "new": "Nouveau",
      "contacted": "Contacté",
      "qualified": "Qualifié",
      "won": "Gagné",
      "lost": "Perdu"
    },
    "validation": {
      "nameRequired": "Le nom est requis",
      "companyRequired": "La société est requise"
    }
  },
  "prestataires": {
    "created": "Prestataire créé avec succès.",
    "updated": "Prestataire mis à jour avec succès.",
    "deleted": "Prestataire supprimé avec succès.",
    "addPrestataire": "Ajouter un prestataire",
    "editPrestataire": "Modifier un prestataire",
    "deleteConfirmTitle": "Supprimer le prestataire",
    "deleteConfirmMessage": "Êtes-vous sûr de vouloir supprimer le prestataire « {name} » ? Cette action est irréversible.",
    "fields": {
      "name": "Nom / Société",
      "email": "Email",
      "phone": "Téléphone",
      "website": "Site web"
    }
  },
  "directory": {
    "title": "Répertoire",
    "tabs": {
      "info": "Informations",
      "clients": "Clients",
      "prospects": "Prospects",
      "prestataires": "Prestataires",
      "contact": "Contact",
      "address": "Adresse",
      "report": "Rapport"
    },
    "info": {
      "fields": {
        "name": "Nom",
        "email": "Email",
        "phone": "Téléphone",
        "website": "Site web"
      }
    },
    "validation": {
      "nameRequired": "Le nom est requis.",
      "subjectRequired": "L'objet est requis.",
      "emailInvalid": "Adresse email invalide.",
      "phoneInvalid": "Numéro de téléphone invalide (ex. 0549200910).",
      "urlInvalid": "URL invalide (ex. https://exemple.fr)."
    },
    "clients": {
      "add": "Ajouter un client",
      "empty": "Aucun client trouvé."
    },
    "prospects": {
      "add": "Ajouter un prospect",
      "empty": "Aucun prospect trouvé.",
      "allStatuses": "Tous les statuts"
    },
    "prestataires": {
      "add": "Ajouter un prestataire",
      "empty": "Aucun prestataire trouvé."
    },
    "contacts": {
      "add": "Nouveau contact",
      "item": "Contact {n}",
      "saved": "Contact enregistré.",
      "deleted": "Contact supprimé.",
      "deleteConfirmTitle": "Supprimer le contact",
      "deleteConfirmMessage": "Êtes-vous sûr de vouloir supprimer ce contact ? Cette action est irréversible.",
      "fields": {
        "lastName": "Nom",
        "firstName": "Prénom",
        "jobTitle": "Fonction",
        "email": "Email",
        "phonePrimary": "Téléphone",
        "phoneSecondary": "Téléphone secondaire"
      }
    },
    "addresses": {
      "add": "Nouvelle adresse",
      "item": "Adresse {n}",
      "saved": "Adresse enregistrée.",
      "deleted": "Adresse supprimée.",
      "deleteConfirmTitle": "Supprimer l'adresse",
      "deleteConfirmMessage": "Êtes-vous sûr de vouloir supprimer cette adresse ? Cette action est irréversible.",
      "streetNotFound": "Aucune adresse trouvée — saisie libre possible.",
      "streetHint": "Renseignez d'abord le code postal et la ville.",
      "autocompleteUnavailable": "Recherche d'adresse indisponible : saisissez l'adresse manuellement.",
      "fields": {
        "label": "Libellé",
        "street": "Rue",
        "streetComplement": "Complément",
        "postalCode": "Code postal",
        "city": "Ville"
      }
    },
    "reports": {
      "add": "Ajouter un compte-rendu",
      "addTitle": "Nouveau compte-rendu",
      "editTitle": "Modifier le compte-rendu",
      "empty": "Aucun compte-rendu",
      "emptyHint": "Consignez vos échanges (appels, rendez-vous, emails) pour garder l'historique de la relation.",
      "count": "{n} compte-rendu | {n} comptes-rendus",
      "documentsLabel": "Documents",
      "saved": "Compte-rendu enregistré.",
      "deleted": "Compte-rendu supprimé.",
      "confirmDeleteTitle": "Supprimer ce compte-rendu ?",
      "confirmDeleteMessage": "Cette action est irréversible. Les documents joints seront également supprimés.",
      "documentDeleteTitle": "Supprimer le document",
      "documentDeleteMessage": "Êtes-vous sûr de vouloir supprimer ce document ? Cette action est irréversible.",
      "fields": {
        "subject": "Objet",
        "type": "Type d'échange",
        "occurredAt": "Date",
        "body": "Compte-rendu"
      },
      "types": {
        "call": "Appel",
        "meeting": "Rendez-vous",
        "email": "Email",
        "note": "Note"
      }
    },
    "documents": {
      "add": "Joindre un document",
      "uploading": "Envoi…",
      "empty": "Aucun document.",
      "deleted": "Document supprimé."
    }
  }
}
