{
  "common": {
    "appName": "temetro",
    "email": "E-mail",
    "password": "Mot de passe",
    "signIn": "Se connecter",
    "signUp": "S'inscrire",
    "backToSignIn": "Retour à la connexion",
    "addedByAi": "Ajouté par l'IA",
    "pagination": {
      "label": "Pages",
      "previous": "Précédent",
      "next": "Suivant",
      "page": "Page {{page}}",
      "summary": "Affichage de {{from}} à {{to}} sur {{total}}"
    }
  },
  "auth": {
    "login": {
      "title": "Bon retour",
      "subtitle": "Connectez-vous à votre compte clinicien",
      "tabEmail": "E-mail",
      "tabUsername": "Nom d'utilisateur",
      "emailLabel": "E-mail",
      "emailPlaceholder": "vous@clinique.org",
      "usernameLabel": "Nom d'utilisateur",
      "usernamePlaceholder": "jdupont",
      "passwordLabel": "Mot de passe",
      "forgotPassword": "Mot de passe oublié ?",
      "submit": "Se connecter",
      "submitting": "Connexion…",
      "noAccount": "Vous n'avez pas de compte ?",
      "signUpLink": "S'inscrire",
      "error": "Connexion impossible. Vérifiez votre e-mail et votre mot de passe, puis réessayez.",
      "errorTitle": "Échec de la connexion",
      "welcomeBack": "Bon retour"
    },
    "signup": {
      "title": "Créez votre compte",
      "subtitle": "Commencez à utiliser temetro dans votre clinique",
      "nameLabel": "Nom complet",
      "namePlaceholder": "Dr Jane Okafor",
      "emailLabel": "E-mail",
      "emailPlaceholder": "vous@clinique.org",
      "passwordLabel": "Mot de passe",
      "confirmPasswordLabel": "Confirmer le mot de passe",
      "passwordHint": "Doit comporter au moins {{count}} caractères.",
      "passwordTooShort": "Le mot de passe doit comporter au moins {{count}} caractères.",
      "passwordMismatch": "Les mots de passe ne correspondent pas.",
      "submit": "Créer le compte",
      "submitting": "Création du compte…",
      "haveAccount": "Vous avez déjà un compte ?",
      "signInLink": "Se connecter",
      "error": "Impossible de créer votre compte.",
      "errorTitle": "Échec de l'inscription",
      "created": "Compte créé",
      "createdHint": "Configurez votre clinique pour commencer."
    },
    "verifyEmail": {
      "title": "Vérifiez votre boîte de réception",
      "subtitle": "Nous avons envoyé un lien de vérification à {{email}}. Ouvrez-le pour activer votre compte.",
      "subtitleNoEmail": "Ouvrez le lien de vérification que nous vous avons envoyé pour activer votre compte.",
      "continue": "J'ai vérifié — continuer",
      "resend": "Renvoyer l'e-mail",
      "resending": "Envoi…",
      "resent": "E-mail de vérification envoyé. Vérifiez votre boîte de réception.",
      "resendError": "Impossible de renvoyer l'e-mail de vérification."
    },
    "forgotPassword": {
      "title": "Réinitialiser votre mot de passe",
      "subtitle": "Nous vous enverrons un lien pour réinitialiser votre mot de passe",
      "modeEmail": "E-mail",
      "modeUsername": "Nom d'utilisateur",
      "emailLabel": "E-mail",
      "emailPlaceholder": "vous@clinique.org",
      "usernameLabel": "Nom d'utilisateur",
      "usernamePlaceholder": "votre nom d'utilisateur",
      "submit": "Envoyer le lien de réinitialisation",
      "submitting": "Envoi…",
      "sent": "Si un compte existe pour {{email}}, un lien de réinitialisation est en route. Vérifiez votre boîte de réception.",
      "sentUsername": "Si ce nom d'utilisateur existe, un lien de réinitialisation est en route. Si vous n'avez pas de boîte de réception, l'administrateur de votre clinique a été informé pour définir un nouveau mot de passe pour vous.",
      "error": "Impossible d'envoyer l'e-mail de réinitialisation.",
      "failedToastTitle": "Impossible d'envoyer le lien de réinitialisation",
      "sentToastTitle": "Lien de réinitialisation envoyé",
      "sentToastBody": "Vérifiez le lien dans votre boîte de réception."
    },
    "resetPassword": {
      "title": "Définir un nouveau mot de passe",
      "subtitle": "Choisissez un nouveau mot de passe pour votre compte",
      "passwordLabel": "Nouveau mot de passe",
      "confirmLabel": "Confirmer le nouveau mot de passe",
      "passwordHint": "Au moins {{count}} caractères.",
      "submit": "Réinitialiser le mot de passe",
      "submitting": "Enregistrement…",
      "done": "Votre mot de passe a été réinitialisé. Redirection vers la connexion…",
      "invalidToken": "Ce lien de réinitialisation est invalide ou a expiré.",
      "tooShort": "Le mot de passe doit comporter au moins {{count}} caractères.",
      "mismatch": "Les mots de passe ne correspondent pas.",
      "error": "Impossible de réinitialiser votre mot de passe.",
      "failedToastTitle": "Impossible de réinitialiser le mot de passe",
      "successToastTitle": "Mot de passe mis à jour",
      "successToastBody": "Redirection vers la connexion…"
    },
    "acceptInvite": {
      "notFoundTitle": "Invitation introuvable",
      "notFoundBody": "Ce lien d'invitation est manquant ou invalide.",
      "invitedTitle": "Vous avez été invité",
      "invitedSubtitle": "Connectez-vous avec l'e-mail auquel cette invitation a été envoyée, puis revenez à ce lien pour l'accepter.",
      "signIn": "Se connecter",
      "createAccount": "Créer un compte",
      "reopenPrefix": "Après vous être connecté, rouvrez",
      "reopenLink": "ce lien d'invitation",
      "acceptTitle": "Accepter votre invitation",
      "acceptSubtitle": "Rejoignez la clinique à laquelle vous avez été invité sur temetro.",
      "accept": "Accepter l'invitation",
      "accepting": "Adhésion…",
      "error": "Cette invitation est invalide ou a expiré."
    },
    "onboarding": {
      "title": "Configurez votre clinique",
      "subtitle": "Créez votre clinique pour commencer à organiser les dossiers patients"
    }
  },
  "nav": {
    "newChat": "Demander à temetro",
    "patients": "Patients",
    "appointments": "Rendez-vous",
    "invoices": "Factures",
    "prescriptions": "Ordonnances",
    "analysis": "Analyse",
    "pharmacy": "Pharmacie",
    "inventory": "Inventaire",
    "lab": "Laboratoire",
    "notes": "Notes",
    "messages": "Messages",
    "inbox": "Boîte de réception",
    "meetings": "Réunions",
    "tasks": "Tâches",
    "activity": "Activité",
    "settings": "Paramètres",
    "openSidebar": "Ouvrir le menu",
    "notifications": "Notifications",
    "notificationsEmpty": "Vous êtes à jour.",
    "quickNav": "Navigation rapide",
    "commandGroup": "Aller à",
    "commandPlaceholder": "Rechercher des pages…",
    "commandEmpty": "Aucun résultat.",
    "commandNavigate": "Naviguer",
    "commandOpen": "Ouvrir",
    "commandClose": "Fermer"
  },
  "userMenu": {
    "defaultName": "Clinicien",
    "selectClinic": "Sélectionner une clinique",
    "settings": "Paramètres",
    "docs": "Docs & GitHub",
    "theme": "Thème",
    "dark": "Sombre",
    "light": "Clair",
    "search": "Rechercher",
    "noClinic": "Aucune clinique sélectionnée",
    "clinicCount_one": "{{count}} clinique",
    "clinicCount_other": "{{count}} cliniques",
    "switchClinic": "Changer de clinique",
    "createClinic": "Créer une clinique",
    "logout": "Se déconnecter",
    "createDialogTitle": "Créer une clinique",
    "createDialogDescription": "Ajoutez une nouvelle clinique et passez-y.",
    "signOutFailed": "Échec de la déconnexion",
    "tryAgain": "Veuillez réessayer.",
    "signedOut": "Déconnecté"
  },
  "clinic": {
    "create": "Créer une clinique",
    "creating": "Création de la clinique…",
    "nameLabel": "Nom de la clinique",
    "namePlaceholder": "Cabinet familial du Nord",
    "slugLabel": "Identifiant d'URL de la clinique",
    "slugPlaceholder": "cabinet-familial-du-nord",
    "slugHint": "Utilisé dans les liens et les invitations. Lettres minuscules, chiffres et tirets.",
    "createError": "Impossible de créer la clinique.",
    "createFailedTitle": "Impossible de créer la clinique",
    "createdTitle": "Clinique créée",
    "createdBody": "{{name}} est prête."
  },
  "patients": {
    "title": "Patients",
    "searchPlaceholder": "Rechercher un nom ou un n° de dossier",
    "add": "Ajouter un patient",
    "newPatient": "Nouveau patient",
    "importFromApp": "Importer depuis une application patient",
    "tempBadge": "Temporaire",
    "importApp": {
      "title": "Importer depuis une application patient",
      "description": "Saisissez le numéro de portefeuille du patient. Il recevra une demande sur son téléphone pour approuver le partage de son dossier avec cette clinique.",
      "tabNumber": "Par numéro",
      "tabQr": "Afficher le QR",
      "qrHint": "Générez un code QR, puis demandez au patient de le scanner dans son application portefeuille pour partager son dossier.",
      "qrCaption": "Scannez ceci dans l'application patient",
      "generateQr": "Afficher le code QR",
      "walletLabel": "Numéro de portefeuille du patient",
      "walletPlaceholder": "tmw_…",
      "tempLabel": "Partager temporairement",
      "tempHint": "Le dossier est automatiquement supprimé de cette clinique à la fin de la période de partage.",
      "durationLabel": "Partager pendant",
      "hours": "{{count}} heure",
      "hours_other": "{{count}} heures",
      "days": "{{count}} jour",
      "days_other": "{{count}} jours",
      "request": "Envoyer la demande",
      "requesting": "Envoi…",
      "waitingTitle": "En attente du patient",
      "waitingBody": "Nous avons envoyé une demande au portefeuille. Approuvez-la sur l'appareil du patient pour continuer.",
      "approvedTitle": "Patient a approuvé",
      "approvedBody": "Examinez le dossier partagé, puis enregistrez-le dans cette clinique.",
      "review": "Examiner le dossier",
      "deniedTitle": "Demande refusée",
      "deniedBody": "Le patient a refusé de partager son dossier.",
      "expiredTitle": "Demande expirée",
      "expiredBody": "La demande a expiré avant que le patient ne réponde.",
      "invalidWallet": "Cela ne ressemble pas à un numéro de portefeuille valide.",
      "errorTitle": "Impossible de joindre le portefeuille",
      "error": "Veuillez vérifier le numéro de portefeuille et réessayer.",
      "savedTitle": "Patient importé",
      "savedBody": "{{name}} a été ajouté à cette clinique.",
      "cancel": "Annuler",
      "close": "Fermer"
    },
    "loading": "Chargement des patients…",
    "empty": "Aucun patient trouvé.",
    "loadError": "Échec du chargement des patients.",
    "columns": {
      "name": "Nom",
      "mrn": "N° de dossier",
      "ageSex": "Âge · Sexe",
      "status": "Statut",
      "lastSeen": "Dernière visite",
      "allergies": "Allergies"
    },
    "status": {
      "active": "Actif",
      "inpatient": "Hospitalisé",
      "discharged": "Sorti"
    },
    "detail": {
      "notFound": "Patient introuvable",
      "loading": "Chargement du patient…",
      "noPatientForFile": "Aucun patient trouvé pour le dossier n° {{number}}."
    },
    "transfer": {
      "action": "Transférer",
      "title": "Transférer le patient",
      "description": "Réaffectez {{name}} à un autre clinicien. Il devient le praticien référent de ce patient.",
      "providerLabel": "Nouveau praticien référent",
      "choose": "Choisir un praticien…",
      "cancel": "Annuler",
      "confirm": "Transférer le patient",
      "transferring": "Transfert…",
      "successTitle": "Patient transféré",
      "successBody": "{{name}} est désormais suivi par {{provider}}.",
      "errorTitle": "Impossible de transférer le patient",
      "error": "Veuillez réessayer."
    },
    "delete": {
      "action": "Supprimer le patient",
      "title": "Supprimer le patient ?",
      "body": "Supprimer définitivement le dossier de {{name}} et tous ses enregistrements. Cette action est irréversible.",
      "confirm": "Supprimer le patient",
      "cancel": "Annuler",
      "doneTitle": "Patient supprimé",
      "failedTitle": "Impossible de supprimer le patient",
      "failedBody": "Veuillez réessayer."
    }
  },
  "appointments": {
    "title": "Rendez-vous & Planning",
    "subtitle": "Le planning du jour de la clinique et ce qui arrive.",
    "searchPlaceholder": "Rechercher un patient, un type, un praticien",
    "calendar": "Calendrier",
    "add": "Ajouter",
    "noMatches": "Aucun rendez-vous correspondant.",
    "today": "Aujourd'hui",
    "nothingToday": "Rien de prévu aujourd'hui.",
    "addFailedTitle": "Impossible d'ajouter le rendez-vous",
    "addFailedBody": "Veuillez réessayer.",
    "kpi": {
      "today": "Aujourd'hui",
      "thisWeek": "Cette semaine",
      "checkedIn": "Enregistrés",
      "completed": "Terminés"
    },
    "status": {
      "confirmed": "Confirmé",
      "checked-in": "Enregistré",
      "completed": "Terminé",
      "cancelled": "Annulé"
    },
    "dialog": {
      "title": "Nouveau rendez-vous",
      "description": "Recherchez un patient par nom ou numéro de dossier, puis définissez le créneau.",
      "patient": "Patient",
      "fileNumber": "Dossier n° {{number}}",
      "change": "Changer",
      "searchPlaceholder": "Rechercher un nom ou un numéro de dossier",
      "noPatients": "Aucun patient trouvé.",
      "noProviders": "Aucun médecin trouvé.",
      "date": "Date",
      "time": "Heure",
      "type": "Type",
      "provider": "Praticien",
      "providerPlaceholder": "ex. Dr Okafor",
      "cancel": "Annuler",
      "submit": "Ajouter le rendez-vous",
      "pickPatientTitle": "Choisissez un patient",
      "pickPatientBody": "Recherchez et sélectionnez d'abord un patient.",
      "addedTitle": "Rendez-vous ajouté"
    },
    "sheet": {
      "title": "Rendez-vous",
      "editHint": "Cliquez sur un rendez-vous pour le modifier — c'est activé.",
      "date": "Date",
      "time": "Heure",
      "type": "Type",
      "provider": "Praticien",
      "status": "Statut",
      "save": "Enregistrer les modifications",
      "saving": "Enregistrement…",
      "delete": "Supprimer",
      "savedTitle": "Rendez-vous mis à jour",
      "savedBody": "Vos modifications ont été enregistrées.",
      "saveFailedTitle": "Impossible d'enregistrer",
      "saveFailedBody": "Veuillez réessayer.",
      "deletedTitle": "Rendez-vous supprimé",
      "deleteFailedTitle": "Impossible de supprimer",
      "deleteFailedBody": "Veuillez réessayer."
    },
    "calendarDialog": {
      "today": "Aujourd'hui",
      "appointmentCount_one": "{{count}} rendez-vous",
      "appointmentCount_other": "{{count}} rendez-vous",
      "none": "Aucun rendez-vous ce jour-là."
    }
  },
  "invoices": {
    "title": "Factures",
    "subtitle": "Facturation des patients — créez, fractionnez et exportez des factures.",
    "searchPlaceholder": "Rechercher un patient, un numéro, un statut",
    "new": "Nouvelle facture",
    "empty": "Aucune facture pour le moment.",
    "noMatches": "Aucune facture ne correspond à votre recherche.",
    "loadError": "Impossible de charger les factures.",
    "recent": "Factures",
    "recentDescription": "Les plus récentes d'abord",
    "addFailedTitle": "Impossible d'enregistrer la facture",
    "addFailedBody": "Veuillez réessayer.",
    "kpi": {
      "outstanding": "En souffrance",
      "paid": "Payé",
      "drafts": "Brouillons"
    },
    "status": {
      "draft": "Brouillon",
      "sent": "Envoyée",
      "paid": "Payée",
      "void": "Annulée"
    },
    "dialog": {
      "createTitle": "Nouvelle facture",
      "editTitle": "Modifier la facture",
      "description": "Choisissez un patient et ajoutez des lignes.",
      "patient": "Patient",
      "searchPlaceholder": "Rechercher un nom ou un numéro de dossier",
      "noPatients": "Aucun patient trouvé.",
      "fileNumber": "Dossier n° {{number}}",
      "change": "Changer",
      "issued": "Émise",
      "due": "Date d'échéance",
      "status": "Statut",
      "notes": "Notes",
      "notesPlaceholder": "Notes facultatives…",
      "lineItems": "Lignes",
      "lineDescription": "Description",
      "lineDescriptionPlaceholder": "ex. Consultation",
      "qty": "Qté",
      "unitPrice": "Prix unitaire",
      "addLine": "Ajouter une ligne",
      "total": "Total",
      "cancel": "Annuler",
      "create": "Créer la facture",
      "save": "Enregistrer les modifications",
      "saving": "Enregistrement…",
      "pickPatientTitle": "Choisissez un patient",
      "pickPatientBody": "Recherchez et sélectionnez d'abord un patient."
    },
    "sheet": {
      "fallbackTitle": "Facture",
      "issued": "Émise",
      "due": "Échéance",
      "status": "Statut",
      "total": "Total",
      "lineItems": "Lignes",
      "installments": "Échéances",
      "noInstallments": "Non fractionnée en échéances.",
      "split": "Fractionner en échéances",
      "splitTitle": "Fractionner la facture",
      "splitBody": "Divisez le total en échéances mensuelles égales.",
      "splitCount": "Échéances",
      "splitConfirm": "Fractionner",
      "download": "Télécharger le PDF",
      "edit": "Modifier",
      "delete": "Supprimer",
      "deletedTitle": "Facture supprimée",
      "splitFailedTitle": "Impossible de fractionner la facture",
      "splitFailedBody": "Veuillez réessayer.",
      "deleteFailedTitle": "Impossible de supprimer la facture",
      "deleteFailedBody": "Veuillez réessayer.",
      "paid": "Payée",
      "unpaid": "Impayée",
      "markPaid": "Marquer payée",
      "paidTitle": "Facture marquée payée",
      "payFailedTitle": "Impossible d'enregistrer le paiement",
      "payFailedBody": "Veuillez réessayer.",
      "payInstallment": "Payer",
      "installmentPaid": "Payée",
      "installmentPaidTitle": "Échéance payée",
      "overdue": "En retard",
      "timeframe": "{{count}} paiements · échéance jusqu'au {{date}}"
    }
  },
  "prescriptions": {
    "title": "Ordonnances",
    "subtitle": "Médicaments prescrits dans toute la clinique.",
    "new": "Nouvelle ordonnance",
    "recent": "Ordonnances récentes",
    "recentDescription": "Les plus récentes d'abord",
    "searchPlaceholder": "Rechercher un patient, un médicament, un prescripteur",
    "noMatches": "Aucune ordonnance ne correspond à votre recherche.",
    "emptyList": "Aucune ordonnance pour le moment.",
    "addFailedTitle": "Impossible d'ajouter l'ordonnance",
    "addFailedBody": "Veuillez réessayer.",
    "kpi": {
      "active": "Actives",
      "completed": "Terminées",
      "expired": "Expirées"
    },
    "status": {
      "active": "Active",
      "completed": "Terminée",
      "expired": "Expirée"
    },
    "detail": {
      "fallbackTitle": "Ordonnance",
      "fileNumber": "Dossier n° {{number}}",
      "medication": "Médicament",
      "dose": "Dose",
      "frequency": "Fréquence",
      "duration": "Durée",
      "prescriber": "Prescripteur",
      "date": "Date",
      "status": "Statut",
      "notes": "Notes",
      "courseDates": "Traitement",
      "delete": "Supprimer l'ordonnance"
    },
    "delete": {
      "title": "Supprimer l'ordonnance ?",
      "body": "Supprimer définitivement l'ordonnance de {{medication}} pour {{name}}. Cette action est irréversible.",
      "confirm": "Supprimer",
      "cancel": "Annuler",
      "doneTitle": "Ordonnance supprimée",
      "failedTitle": "Impossible de supprimer l'ordonnance",
      "failedBody": "Veuillez réessayer."
    },
    "dialog": {
      "title": "Nouvelle ordonnance",
      "description": "Recherchez un patient par nom ou numéro de dossier, puis définissez le médicament.",
      "patient": "Patient",
      "fileNumber": "Dossier n° {{number}}",
      "change": "Changer",
      "searchPlaceholder": "Rechercher un nom ou un numéro de dossier",
      "noPatients": "Aucun patient trouvé.",
      "medication": "Médicament",
      "medicationPlaceholder": "ex. Amoxicilline",
      "dose": "Dose",
      "dosePlaceholder": "ex. 500 mg",
      "frequency": "Fréquence",
      "duration": "Durée",
      "durationOtherPlaceholder": "ex. 21 jours",
      "notes": "Notes",
      "notesPlaceholder": "Instructions, ex. prendre avec de la nourriture le matin",
      "interactionTitle": "Interaction possible",
      "cancel": "Annuler",
      "submit": "Ajouter l'ordonnance",
      "pickPatientTitle": "Choisissez un patient",
      "pickPatientBody": "Recherchez et sélectionnez d'abord un patient.",
      "needMedTitle": "Ajoutez un médicament",
      "needMedBody": "Saisissez le nom du médicament.",
      "needDurationTitle": "Ajoutez une durée",
      "needDurationBody": "Saisissez la durée personnalisée.",
      "addedTitle": "Ordonnance ajoutée",
      "badDatesTitle": "Vérifiez les dates",
      "badDatesBody": "La date de fin ne peut pas être antérieure à la date de début.",
      "outOfStock": "En rupture de stock",
      "inStock": "{{count}} en stock",
      "courseDates": "Dates du traitement",
      "removeDates": "Retirer",
      "startDate": "Date de début",
      "endDate": "Date de fin",
      "addDates": "Ajouter les dates de début/fin"
    }
  },
  "pharmacy": {
    "title": "Pharmacie",
    "subtitle": "File de délivrance des ordonnances de la clinique.",
    "searchPlaceholder": "Rechercher des ordonnances",
    "kpi": {
      "active": "Ordonnances actives",
      "expiring": "Expirent bientôt",
      "patients": "Patients sous traitement"
    },
    "queue": {
      "title": "File de délivrance",
      "description": "Ordonnances actives, les plus anciennes d'abord. Marquez un traitement terminé une fois délivré.",
      "empty": "Aucune ordonnance active.",
      "noMatches": "Aucune ordonnance ne correspond à votre recherche."
    },
    "expiringBadge": "Expire",
    "markCompleted": "Marquer terminée",
    "completedTitle": "Ordonnance terminée",
    "completedBody": "{{medication}} pour {{name}} marquée comme terminée.",
    "completeFailedTitle": "Impossible de mettre à jour l'ordonnance",
    "completeFailedBody": "Veuillez réessayer.",
    "dispense": "Délivrer",
    "dispensedTitle": "Délivré",
    "dispensedBody": "{{medication}} délivré à {{name}}.",
    "dispensed": {
      "title": "Délivrés récemment",
      "description": "Médicaments remis aux patients à la pharmacie.",
      "empty": "Rien de délivré pour le moment.",
      "delete": "Supprimer l'enregistrement",
      "deleteTitle": "Supprimer l'enregistrement de délivrance ?",
      "deleteBody": "Supprimer l'enregistrement de délivrance de {{medication}} pour {{name}}. Cela ne fait que corriger le registre.",
      "deleteConfirm": "Supprimer",
      "deleteCancel": "Annuler",
      "deletedTitle": "Enregistrement de délivrance supprimé",
      "deleteFailedTitle": "Impossible de supprimer l'enregistrement",
      "deleteFailedBody": "Veuillez réessayer."
    }
  },
  "inventory": {
    "title": "Inventaire",
    "subtitle": "Recherchez le stock de médicaments de la pharmacie et vérifiez la disponibilité.",
    "searchPlaceholder": "Rechercher des médicaments",
    "kpi": {
      "total": "Médicaments en stock",
      "low": "Stock faible",
      "out": "En rupture de stock"
    },
    "list": {
      "title": "Médicaments",
      "description": "Niveaux de stock actuels dans toute la pharmacie. Les articles au niveau de réapprovisionnement ou en dessous sont signalés.",
      "empty": "Aucun médicament dans l'inventaire pour le moment.",
      "noMatches": "Aucun médicament ne correspond à votre recherche."
    },
    "stock": "{{count}} {{unit}}",
    "reorderAt": "Réapprovisionner à {{count}}",
    "location": "Étagère {{location}}",
    "availability": {
      "in-stock": "En stock",
      "low": "Stock faible",
      "out": "En rupture de stock"
    },
    "addItem": "Ajouter un article",
    "dialog": {
      "title": "Ajouter un article à l'inventaire",
      "description": "Ajoutez un médicament au stock de la pharmacie. Seul le nom est obligatoire.",
      "name": "Médicament",
      "namePlaceholder": "ex. Amoxicilline",
      "form": "Forme",
      "formPlaceholder": "ex. Comprimé",
      "strength": "Dosage",
      "strengthPlaceholder": "ex. 500 mg",
      "stock": "En stock",
      "unit": "Unité",
      "unitPlaceholder": "ex. comprimés",
      "reorder": "Réapprovisionner à",
      "location": "Emplacement",
      "locationPlaceholder": "ex. A3",
      "expires": "Expire le",
      "cancel": "Annuler",
      "submit": "Ajouter l'article",
      "nameRequiredTitle": "Nom du médicament requis",
      "nameRequiredBody": "Saisissez un nom de médicament avant d'ajouter l'article.",
      "addedTitle": "Article ajouté",
      "failedTitle": "Impossible d'ajouter l'article",
      "failedBody": "Une erreur s'est produite. Veuillez réessayer."
    },
    "detail": {
      "description": "Article en stock",
      "notes": "Notes",
      "close": "Fermer",
      "delete": "Supprimer l'article"
    },
    "delete": {
      "title": "Supprimer l'article de l'inventaire ?",
      "body": "Supprimer définitivement {{name}} de l'inventaire. Cette action est irréversible.",
      "confirm": "Supprimer",
      "cancel": "Annuler",
      "doneTitle": "Article supprimé",
      "failedTitle": "Impossible de supprimer l'article",
      "failedBody": "Veuillez réessayer."
    }
  },
  "lab": {
    "title": "Laboratoire",
    "subtitle": "La file de travail du laboratoire et les résultats d'analyses.",
    "queue": {
      "title": "File de travail",
      "description": "Tâches affectées au service du laboratoire.",
      "empty": "Aucune tâche de laboratoire pour le moment.",
      "noNotes": "Aucun détail fourni.",
      "meta": {
        "status": "Statut",
        "patient": "Patient",
        "assignee": "Responsable",
        "createdBy": "Créé par"
      }
    },
    "addResult": {
      "button": "Ajouter un résultat",
      "title": "Ajouter un résultat d'analyse",
      "description": "Enregistrez une analyse réalisée au laboratoire dans le dossier d'un patient.",
      "patient": "Patient",
      "patientPlaceholder": "Rechercher par nom ou numéro de dossier",
      "noPatients": "Aucun patient ne correspond à votre recherche.",
      "changePatient": "Changer",
      "test": "Analyse",
      "testPlaceholder": "ex. Hémoglobine",
      "value": "Valeur",
      "valuePlaceholder": "ex. 14,2 g/dL",
      "valueUnitPlaceholder": "ex. valeur en {{unit}}",
      "flag": "Indicateur",
      "takenAt": "Date",
      "advanced": "Avancé",
      "advancedHint": "Enregistrez une analyse personnalisée avec une plage de référence.",
      "refRange": "Plage de référence",
      "refRangePlaceholder": "ex. 13,0–17,0 g/dL",
      "files": "Fichiers d'analyse",
      "cancel": "Annuler",
      "submit": "Ajouter le résultat",
      "needPatientTitle": "Choisissez un patient",
      "needPatientBody": "Recherchez et sélectionnez d'abord un patient.",
      "needFieldsTitle": "Détails manquants",
      "needFieldsBody": "Saisissez le nom de l'analyse et sa valeur.",
      "addedTitle": "Résultat ajouté",
      "addedBody": "{{test}} ajouté au dossier de {{name}}.",
      "failedTitle": "Impossible d'ajouter le résultat",
      "failedBody": "Veuillez réessayer."
    },
    "recent": {
      "title": "Résultats récents",
      "description": "Analyses enregistrées dans les dossiers patients, les plus récentes d'abord.",
      "empty": "Aucun résultat enregistré pour le moment.",
      "delete": "Supprimer le résultat",
      "deleteTitle": "Supprimer le résultat d'analyse ?",
      "deleteBody": "Retirer le résultat de {{test}} du dossier de {{name}}. Cette action est irréversible.",
      "deleteConfirm": "Supprimer",
      "deleteCancel": "Annuler",
      "deletedTitle": "Résultat supprimé",
      "deletedBody": "{{test}} retiré du dossier de {{name}}.",
      "deleteFailedTitle": "Impossible de supprimer le résultat",
      "deleteFailedBody": "Veuillez réessayer."
    },
    "toast": {
      "updateFailedTitle": "Impossible de mettre à jour la tâche",
      "updateFailedBody": "Veuillez réessayer."
    }
  },
  "tasks": {
    "title": "Tâches",
    "subtitle": "Les tâches de l'équipe soignante. Cliquez sur une tâche pour voir ses détails.",
    "new": "Nouvelle tâche",
    "empty": "Aucune tâche ici.",
    "markDone": "Marquer comme terminée",
    "markNotDone": "Marquer comme non terminée",
    "status": {
      "todo": "À faire",
      "in_progress": "En cours",
      "done": "Terminée"
    },
    "board": {
      "addTask": "Ajouter une tâche",
      "moveTo": "Déplacer vers",
      "emptyColumn": "Aucune tâche.",
      "newTask": "Nouvelle tâche"
    },
    "filters": {
      "all": "Toutes",
      "open": "Ouvertes",
      "done": "Terminées"
    },
    "priority": {
      "high": "Élevée",
      "medium": "Moyenne",
      "low": "Faible"
    },
    "dialog": {
      "title": "Nouvelle tâche",
      "description": "Affectez un suivi à l'équipe soignante.",
      "subject": "Objet",
      "subjectPlaceholder": "ex. Examiner les résultats de laboratoire",
      "details": "Détails — ce qui doit être fait",
      "detailsPlaceholder": "Décrivez ce qui doit se passer, le contexte, les liens…",
      "assignee": "Responsable",
      "assigneeSelf": "Moi-même",
      "assigneeOther": "Autre",
      "department": "Service",
      "due": "Échéance",
      "duePlaceholder": "ex. Aujourd'hui",
      "priorityLabel": "Priorité",
      "statusLabel": "Statut",
      "cancel": "Annuler",
      "add": "Ajouter la tâche",
      "assigneeDepartment": "Service",
      "assigneePerson": "Personne",
      "person": "Membre de l'équipe",
      "personEmpty": "Aucun clinicien disponible à affecter."
    },
    "list": {
      "forDept": "Pour {{dept}}",
      "personal": "Personnelle",
      "byCreator": "par {{name}}",
      "forPerson": "Pour {{name}}"
    },
    "detail": {
      "fallbackTitle": "Tâche",
      "priorityBadge": "Priorité {{priority}}",
      "status": "Statut",
      "completed": "Terminée",
      "open": "Ouverte",
      "assignedTo": "Affectée à",
      "createdBy": "Créée par",
      "deptTeam": "Équipe {{dept}}",
      "personal": "Tâche personnelle",
      "due": "Échéance",
      "patient": "Patient",
      "details": "Détails",
      "reopen": "Rouvrir la tâche",
      "complete": "Marquer terminée",
      "moveTo": "Déplacer vers",
      "delete": "Supprimer la tâche"
    },
    "delete": {
      "title": "Supprimer la tâche ?",
      "body": "Supprimer définitivement « {{title}} ». Cette action est irréversible.",
      "confirm": "Supprimer",
      "cancel": "Annuler",
      "doneTitle": "Tâche supprimée",
      "failedTitle": "Impossible de supprimer la tâche",
      "failedBody": "Veuillez réessayer."
    },
    "toast": {
      "needSubjectTitle": "Ajoutez un objet",
      "needSubjectBody": "Décrivez d'abord la tâche.",
      "addedTitle": "Tâche ajoutée",
      "addFailedTitle": "Impossible d'ajouter la tâche",
      "addFailedBody": "Veuillez réessayer.",
      "updateFailedTitle": "Impossible de mettre à jour la tâche",
      "updateFailedBody": "Veuillez réessayer.",
      "needPersonTitle": "Choisissez un membre de l'équipe",
      "needPersonBody": "Choisissez à qui cette tâche est destinée."
    }
  },
  "meetings": {
    "rooms": "Salles",
    "newRoom": "Nouvelle salle",
    "newRoomDescription": "Créez une salle audio/vidéo que votre équipe peut rejoindre.",
    "roomNameLabel": "Nom de la salle",
    "roomNamePlaceholder": "ex. Point du matin",
    "noRooms": "Aucune salle pour le moment. Créez-en une pour démarrer un appel.",
    "create": "Créer",
    "creating": "Création…",
    "cancel": "Annuler",
    "createFailedTitle": "Impossible de créer la salle",
    "createFailedBody": "Veuillez réessayer.",
    "deleteRoom": "Supprimer la salle",
    "deleting": "Suppression…",
    "deleteRoomConfirmTitle": "Supprimer cette salle ?",
    "deleteRoomConfirmBody": "« {{name}} » sera supprimée pour tout le monde. Toute personne actuellement dans l'appel sera déconnectée.",
    "deleteFailedTitle": "Impossible de supprimer la salle",
    "deleteFailedBody": "Veuillez réessayer.",
    "emptyTitle": "Aucune salle sélectionnée",
    "emptyDescription": "Choisissez une salle pour rejoindre l'appel, ou créez-en une nouvelle.",
    "you": "Vous",
    "guest": "Invité",
    "inCall": "{{count}} en appel",
    "connecting": "Connexion…",
    "roomFull": "La salle est pleine (max {{max}}).",
    "callError": "Impossible de démarrer l'appel. Vérifiez les autorisations caméra/micro.",
    "muteMic": "Couper le microphone",
    "unmuteMic": "Activer le microphone",
    "startVideo": "Démarrer la vidéo",
    "stopVideo": "Arrêter la vidéo",
    "shareScreen": "Partager l'écran",
    "leave": "Quitter l'appel",
    "calendar": "Calendrier",
    "calendarEmpty": "Aucune réunion ce jour-là.",
    "invite": {
      "add": "Ajouter des personnes",
      "title": "Inviter à l'appel",
      "description": "Appelez un membre de l'équipe dans {{room}}.",
      "search": "Rechercher dans l'équipe…",
      "noMembers": "Aucun autre membre.",
      "ring": "Appeler",
      "invited": "Invité",
      "join": "Rejoindre",
      "toastTitle": "{{name}} vous a invité à un appel",
      "accept": "Accepter",
      "decline": "Refuser"
    },
    "schedule": {
      "cta": "Planifier une réunion",
      "title": "Planifier une réunion",
      "description": "Planifiez une réunion et invitez votre équipe.",
      "titleLabel": "Titre",
      "titlePlaceholder": "ex. Synchro hebdomadaire",
      "date": "Date",
      "time": "Heure",
      "participants": "Participants",
      "save": "Planifier",
      "saving": "Planification…",
      "failedTitle": "Impossible de planifier la réunion",
      "failedBody": "Veuillez réessayer."
    },
    "calendarEmptyHint": "Planifiez une réunion pour la voir ce jour-là.",
    "upcoming": {
      "title": "À venir",
      "empty": "Aucune réunion à venir."
    }
  },
  "messages": {
    "inbox": "Boîte de réception",
    "unread": "Non lus · {{count}}",
    "newMessage": "Nouveau message",
    "searchPlaceholder": "Rechercher des conversations",
    "noMatches": "Aucune conversation ne correspond à votre recherche.",
    "noUnread": "Aucun message non lu.",
    "noConversations": "Aucune conversation pour le moment.",
    "you": "Vous : ",
    "directMessage": "Message direct",
    "peopleCount": "{{count}} personnes",
    "messagePlaceholder": "Message à {{name}}…",
    "send": "Envoyer",
    "emptyTitle": "Aucune conversation sélectionnée",
    "emptyDescription": "Choisissez une conversation dans la boîte de réception, ou démarrez-en une nouvelle.",
    "startConversation": "Démarrer une conversation",
    "today": "Aujourd'hui",
    "yesterday": "Hier",
    "compose": {
      "title": "Nouveau message",
      "description": "Démarrez une conversation avec un membre de votre clinique.",
      "searchPlaceholder": "Rechercher des personnes",
      "noMatches": "Aucune personne ne correspond à votre recherche.",
      "noMembers": "Aucun autre membre de la clinique pour le moment. Invitez des collègues depuis Paramètres → Équipe soignante."
    },
    "startFailedTitle": "Impossible de démarrer la conversation",
    "startFailedBody": "Veuillez réessayer.",
    "attach": {
      "menu": "Joindre",
      "file": "Fichiers",
      "appointment": "Rendez-vous",
      "remove": "Retirer",
      "uploading": "Téléversement…",
      "uploadFailedTitle": "Impossible de joindre le fichier",
      "uploadFailedBody": "Le fichier est peut-être trop volumineux (max 10 Mo). Veuillez réessayer.",
      "tooLargeTitle": "Fichier trop volumineux",
      "tooLargeBody": "Les pièces jointes sont limitées à 10 Mo.",
      "download": "Télécharger",
      "apptDialogTitle": "Partager un rendez-vous",
      "apptDialogDescription": "Recherchez par nom de patient, puis choisissez un rendez-vous à joindre.",
      "apptSearchPlaceholder": "Nom du patient…",
      "apptNoMatches": "Aucun rendez-vous correspondant.",
      "apptEmpty": "Aucun rendez-vous pour le moment.",
      "apptCardLabel": "Rendez-vous",
      "apptDetailTitle": "Détails du rendez-vous",
      "apptWhen": "Quand",
      "apptType": "Type",
      "apptProvider": "Praticien",
      "apptPatient": "Patient",
      "apptStatus": "Statut"
    },
    "startCall": "Démarrer un appel avec {{name}}",
    "system": {
      "label": "Message système",
      "tag": "Système",
      "readOnly": "Ceci est un avis système automatisé — vous ne pouvez pas répondre ici.",
      "passwordResetTitle": "Réinitialisation du mot de passe demandée",
      "passwordResetBody": "{{name}} a oublié son mot de passe. Touchez pour ouvrir ses paramètres et en définir un nouveau."
    }
  },
  "analysis": {
    "title": "Aperçu",
    "subtitle": "Les performances de la clinique en un coup d'œil, calculées à partir des données de votre clinique.",
    "customize": "Personnaliser",
    "customizeTitle": "Afficher les sections",
    "range": {
      "all": "Tout",
      "12m": "12 m",
      "3m": "3 m",
      "30d": "30 j",
      "today": "Aujourd'hui"
    },
    "section": {
      "visits": "Visites des patients",
      "patients": "Volume de patients",
      "trends": "Tendances",
      "earnings": "Recettes",
      "appointments": "Rendez-vous",
      "prescriptions": "Ordonnances"
    },
    "area": {
      "title": "Visites des patients",
      "subtitle": "Volume de visites sur les six derniers mois.",
      "label": "Total des visites"
    },
    "patientVolume": {
      "title": "Volume de patients",
      "description": "Patients nouveaux, actifs et au total",
      "total": "Total des patients",
      "newThisMonth": "Nouveaux ce mois-ci",
      "active": "Patients actifs"
    },
    "earnings": {
      "title": "Recettes",
      "description": "Facturé, payé et en souffrance — à partir des factures",
      "billed": "Total facturé",
      "paid": "Total payé",
      "outstanding": "En souffrance",
      "byMonth": "Facturé vs payé, par mois"
    },
    "appointments": {
      "title": "Rendez-vous & planning",
      "description": "Réservations, présence et ce qui arrive",
      "thisWeek": "Cette semaine",
      "upcoming": "À venir",
      "completed": "Terminés",
      "cancelled": "Annulés"
    },
    "prescriptions": {
      "title": "Ordonnances",
      "description": "Médicaments prescrits",
      "total": "Total émis",
      "active": "Actives"
    },
    "tasks": {
      "title": "Tâches",
      "description": "Charge de travail de l'équipe soignante",
      "open": "Ouvertes",
      "completed": "Terminées"
    },
    "charts": {
      "title": "Tendances",
      "subtitle": "Croissance des patients et volume hebdomadaire de rendez-vous.",
      "viewDetails": "Touchez pour les détails",
      "patientGrowthTitle": "Nouveaux patients",
      "patientGrowthDescription": "Nouveaux patients par mois sur les 6 derniers mois",
      "weeklyAppointmentsTitle": "Rendez-vous cette semaine",
      "weeklyAppointmentsDescription": "Réservations par jour pour la semaine en cours",
      "empty": "Aucune donnée pour le moment"
    }
  },
  "activity": {
    "title": "Activité",
    "subtitle": "Un journal d'audit des modifications de dossiers dans toute la clinique.",
    "changesToday": "Modifications aujourd'hui",
    "thisWeek": "Cette semaine",
    "totalRecorded": "Total enregistré",
    "empty": "Aucune activité pour le moment. Les modifications des patients, notes, rendez-vous, ordonnances et tâches apparaîtront ici.",
    "detail": {
      "title": "Détail de l'activité",
      "person": "Effectué par",
      "record": "Type de dossier",
      "patient": "Patient",
      "reference": "Référence",
      "time": "Heure",
      "close": "Fermer",
      "entityTypes": {
        "patient": "Patient",
        "note": "Note",
        "appointment": "Rendez-vous",
        "prescription": "Ordonnance",
        "task": "Tâche"
      }
    }
  },
  "notes": {
    "title": "Notes",
    "subtitle": "Notes cliniques. Cliquez sur une note pour l'ouvrir.",
    "new": "Nouvelle note",
    "editNote": "Modifier la note",
    "loading": "Chargement…",
    "emptyTitle": "Aucune note pour le moment",
    "emptyDescription": "Créez une note pour commencer à écrire.",
    "untitled": "Note sans titre",
    "updated": "Mis à jour {{date}}",
    "tryAgain": "Veuillez réessayer.",
    "loadFailed": "Impossible de charger les notes",
    "saved": "Note enregistrée",
    "saveFailed": "Impossible d'enregistrer la note",
    "deleted": "Note supprimée",
    "deleteFailed": "Impossible de supprimer la note",
    "editor": {
      "placeholder": "Rédigez votre note…",
      "titlePlaceholder": "Titre de la note",
      "delete": "Supprimer la note",
      "save": "Enregistrer",
      "saving": "Enregistrement…",
      "bold": "Gras",
      "italic": "Italique",
      "underline": "Souligné",
      "heading1": "Titre 1",
      "heading2": "Titre 2",
      "bulletList": "Liste à puces",
      "numberedList": "Liste numérotée",
      "undo": "Annuler",
      "redo": "Rétablir",
      "confirmTitle": "Supprimer cette note ?",
      "confirmDescription": "« {{name}} » sera définitivement supprimée. Cette action est irréversible.",
      "confirmLabel": "Supprimer la note"
    }
  },
  "chat": {
    "heading": "Quel patient souhaitez-vous consulter ?",
    "setupNotice": {
      "title": "Connectez un modèle d'IA pour commencer",
      "body": "Aucun fournisseur d'IA n'est encore configuré. Ajoutez une clé API ou pointez temetro vers un modèle Ollama local pour que l'assistant puisse répondre.",
      "action": "Ouvrir les paramètres d'IA",
      "dismiss": "Ignorer"
    },
    "input": {
      "placeholder": "Demandez n'importe quoi, ou tapez /patient 10293",
      "message": "Message",
      "addPatient": "Ajouter un patient",
      "attachFile": "Joindre un fichier",
      "attachFiles": "Joindre des fichiers",
      "removeFile": "Retirer {{name}}",
      "dictate": "Dicter",
      "dictateStop": "Arrêter la dictée",
      "dictateUnsupported": "La dictée vocale n'est pas prise en charge dans ce navigateur",
      "send": "Envoyer",
      "stop": "Arrêter",
      "model": "Modèle",
      "mode": "Mode",
      "modes": {
        "chat": {
          "label": "Chat",
          "description": "Demandez et récupérez des informations sur les patients."
        },
        "analysis": {
          "label": "Analyse",
          "description": "Interprétez les tendances dans l'historique d'un patient."
        },
        "graph": {
          "label": "Graphe",
          "description": "Voyez comment les problèmes et les visites sont liés."
        }
      },
      "moreModels": "Plus de modèles",
      "effort": "Effort",
      "effortOptions": {
        "low": "Faible",
        "medium": "Moyen",
        "high": "Élevé"
      },
      "models": {
        "opus48": "Pour le raisonnement clinique complexe",
        "sonnet46": "Équilibré pour les tâches quotidiennes",
        "haiku45": "Le plus rapide pour des réponses rapides",
        "gemini25Pro": "Le modèle le plus performant de Google",
        "gemini25Flash": "Modèle Google rapide",
        "gemini20Flash": "Modèle Google léger",
        "gpt4o": "Le fleuron multimodal d'OpenAI",
        "gpt4oMini": "Modèle OpenAI rapide et économique",
        "ollama": "S'exécute localement sur votre infrastructure"
      }
    },
    "patientNotFound": "Je n'ai trouvé aucun patient avec le numéro de dossier {{fileNumber}}.",
    "thinking": "Réflexion…",
    "steps": "Étapes",
    "reasoning": "Raisonnement",
    "sources": {
      "title": "Sources",
      "kind": {
        "patient": "Dossier patient",
        "lab": "Résultats de laboratoire",
        "appointments": "Planning",
        "tasks": "Tâches",
        "prescriptions": "Ordonnances",
        "clinic": "Clinique",
        "analytics": "Analytique",
        "inventory": "Inventaire"
      }
    },
    "graphCard": {
      "label": "Graphe du dossier"
    },
    "history": {
      "title": "Discussions",
      "untitled": "Nouvelle discussion",
      "empty": "Aucune discussion enregistrée pour le moment.",
      "delete": "Supprimer la discussion",
      "open": "Historique des discussions",
      "search": "Rechercher des discussions",
      "startNew": "Démarrer une nouvelle discussion"
    },
    "suggestions": {
      "schedule": "Afficher le planning d'aujourd'hui",
      "tasks": "Lister les tâches ouvertes",
      "prescriptions": "Afficher les ordonnances récentes",
      "import": "Importer une base de données patients"
    },
    "queue": {
      "label": "En file · {{count}}",
      "remove": "Retirer de la file",
      "attachmentsOnly": "{{count}} pièce(s) jointe(s)"
    },
    "veil": {
      "title": "Veil",
      "body": "Ce message sera traité par {{provider}}, un fournisseur externe. Veil dé-identifie les informations des patients (noms, n° de dossier, praticiens) avant qu'elles ne quittent votre infrastructure, et les restaure dans la réponse.",
      "cancel": "Annuler",
      "useLocal": "Utiliser un modèle local",
      "confirm": "Dé-identifier & envoyer",
      "activeChip": "Veil actif · {{provider}}"
    },
    "actionCard": {
      "title": {
        "appointment": "Rendez-vous proposé",
        "task": "Tâche proposée",
        "prescription": "Ordonnance proposée",
        "invoice": "Facture proposée",
        "inventory": "Inventaire proposé"
      },
      "kind": {
        "appointment": "Rendez-vous ajouté.",
        "task": "Tâche ajoutée.",
        "prescription": "Ordonnance ajoutée.",
        "invoice": "Facture ajoutée.",
        "inventory": "Inventaire mis à jour."
      },
      "inventoryItems": "{{count}} article(s)",
      "itemCount": "{{count}} article(s)",
      "total": "Total",
      "editButton": "Modifier",
      "edit": {
        "title": "Modifier le dossier proposé",
        "save": "Enregistrer les modifications",
        "cancel": "Annuler",
        "addRow": "Ajouter",
        "removeRow": "Supprimer la ligne"
      },
      "fields": {
        "name": "Nom du patient",
        "date": "Date",
        "time": "Heure",
        "type": "Type",
        "provider": "Praticien",
        "title": "Titre",
        "assignee": "Responsable",
        "due": "Échéance",
        "priority": "Priorité",
        "patient": "Patient",
        "medication": "Médicament",
        "dose": "Dose",
        "frequency": "Fréquence",
        "duration": "Durée",
        "lineItems": "Lignes",
        "description": "Description",
        "quantity": "Qté",
        "unitPrice": "Prix unitaire",
        "items": "Articles",
        "itemName": "Nom",
        "strength": "Dosage",
        "stockQuantity": "Quantité"
      },
      "approve": "Ajouter",
      "adding": "Ajout…",
      "discard": "Abandonner",
      "added": "Ajouté.",
      "discarded": "Abandonné — rien n'a été enregistré.",
      "addedTitle": "Ajouté",
      "failedTitle": "Impossible d'ajouter",
      "failedBody": "Une erreur s'est produite, ou vous n'avez pas l'autorisation. Veuillez réessayer.",
      "batch": {
        "title": "{{count}} dossiers proposés",
        "review": "Examiner & ajouter",
        "dialogTitle": "Examiner les dossiers proposés",
        "dialogDescription": "Ajoutez-les tous d'un coup, ou retirez ceux que vous ne voulez pas.",
        "addAll": "Tout ajouter",
        "adding": "Ajout…",
        "discardAll": "Tout abandonner",
        "newPatient": "Un nouveau patient sera créé",
        "edited": "Modifié",
        "remove": "Retirer",
        "done": "{{added}} sur {{total}} ajoutés.",
        "alreadyAdded": "Ajouté.",
        "failedCount": "{{count}} échoués",
        "discarded": "Abandonné — rien n'a été enregistré."
      }
    },
    "lists": {
      "appointments": "Rendez-vous",
      "tasks": "Tâches",
      "prescriptions": "Ordonnances",
      "done": "Terminé",
      "noAppointments": "Aucun rendez-vous.",
      "noTasks": "Aucune tâche.",
      "noPrescriptions": "Aucune ordonnance.",
      "inventory": "Inventaire",
      "noInventory": "Aucun article en inventaire.",
      "moreAppointments": "+{{count}} de plus",
      "viewInCalendar": "Voir dans le calendrier"
    },
    "clinicCard": {
      "title": "Clinique",
      "since": "Depuis {{date}}"
    },
    "analyticsCard": {
      "title": "Analytique de la clinique",
      "patients": "Patients",
      "appointmentsThisWeek": "RDV cette semaine",
      "activePrescriptions": "Ordonnances actives",
      "openTasks": "Tâches ouvertes",
      "billed": "Facturé",
      "paid": "Payé",
      "outstanding": "En souffrance",
      "byMonth": "Facturé vs payé, par mois"
    },
    "labCard": {
      "flags": {
        "low": "Bas",
        "high": "Élevé",
        "critical": "Critique",
        "normal": "Normal"
      }
    },
    "importCard": {
      "title": "Importer des dossiers patients",
      "ready": "Prêts à importer",
      "skipped": "Ignorés",
      "total": "Analysés",
      "row": "Ligne {{index}}",
      "more": "+{{count}} de plus",
      "approve": "Importer {{count}} dossier(s)",
      "approve_one": "Importer 1 dossier",
      "reject": "Abandonner",
      "reviewEdit": "Examiner & modifier",
      "reviewTitle": "Examiner les dossiers",
      "reviewDescription": "Ouvrez un dossier pour le modifier avant l'import. Corrigez ceux ignorés pour les inclure.",
      "reviewClose": "Fermer",
      "fixHint": "Ouvrez Examiner & modifier pour corriger les lignes ignorées, ou importez celles qui sont prêtes.",
      "rowReady": "Prêt à importer",
      "needsFix": "À corriger",
      "unnamed": "Dossier sans nom",
      "importing": "Importation…",
      "rejectedNote": "Import abandonné. Rien n'a été écrit.",
      "importedTitle": "Dossiers importés",
      "importedBody": "{{count}} dossier(s) patient importé(s).",
      "alreadyImported": "Importé.",
      "failedCount": "{{count}} échoués",
      "failedTitle": "Échec de l'import",
      "failedBody": "Les dossiers n'ont pas pu être importés. Veuillez réessayer."
    },
    "error": {
      "title": "Échec de la requête IA",
      "body": "Une erreur s'est produite lors de l'accès à l'IA. Vérifiez votre fournisseur et votre clé API dans Paramètres → IA.",
      "dismiss": "Ignorer"
    }
  },
  "patientFiles": {
    "title": "Fichiers",
    "add": "Ajouter des fichiers",
    "empty": "Aucun fichier téléversé.",
    "remove": "Retirer",
    "open": "Ouvrir",
    "close": "Fermer",
    "noPreview": "Aucun aperçu disponible pour ce type de fichier.",
    "deletedTitle": "Fichier retiré",
    "deleteFailedTitle": "Impossible de retirer le fichier",
    "deleteFailedBody": "Une erreur s'est produite, ou vous n'avez pas l'autorisation. Veuillez réessayer.",
    "uploadFailedTitle": "Certains fichiers n'ont pas été téléversés",
    "uploadFailedBody": "Le dossier a été enregistré, mais un ou plusieurs fichiers n'ont pas pu être téléversés. Réessayez de les ajouter depuis le dossier."
  },
  "integrations": {
    "fhir": {
      "cardTitle": "Système de laboratoire (HL7/FHIR)",
      "disabledHint": "Non activé. Un propriétaire ou un administrateur peut connecter un système de laboratoire dans Paramètres → Intégrations.",
      "searchPlaceholder": "Rechercher un patient pour récupérer les résultats…",
      "change": "Changer",
      "sync": "Synchroniser les résultats",
      "syncing": "Synchronisation…",
      "syncedTitle": "Résultats synchronisés",
      "syncedBody": "{{count}} résultat(s) importé(s) pour {{name}}.",
      "failedTitle": "Échec de la synchronisation",
      "failedBody": "Impossible de joindre le système de laboratoire. Veuillez réessayer."
    },
    "eRx": {
      "send": "Envoyer à la pharmacie",
      "sending": "Envoi…",
      "sentTitle": "Ordonnance envoyée",
      "sentBody": "Transmise à la pharmacie sous forme de NCPDP SCRIPT NewRx.",
      "failedTitle": "Impossible d'envoyer",
      "failedBody": "La passerelle de la pharmacie a rejeté le message ou est injoignable."
    },
    "claims": {
      "submit": "Soumettre la demande",
      "submitting": "Soumission…",
      "submittedTitle": "Demande soumise",
      "submittedBody": "Statut de la chambre de compensation : {{status}}.",
      "failedTitle": "Impossible de soumettre la demande",
      "failedBody": "La chambre de compensation a rejeté la demande ou est injoignable."
    }
  },
  "patientCard": {
    "notFound": "Aucun patient trouvé pour le dossier n° {{number}}.",
    "overview": "Aperçu",
    "edit": "Modifier",
    "exportPdf": "Télécharger le résumé",
    "clickForMore": "Cliquez pour plus",
    "pdf": {
      "title": "Résumé clinique",
      "mrn": "N° de dossier",
      "generated": "Généré {{date}}"
    },
    "history": {
      "title": "Historique du dossier",
      "empty": "Aucune modification enregistrée pour le moment.",
      "loadError": "Impossible de charger l'historique du dossier."
    },
    "sex": {
      "F": "Femme",
      "M": "Homme"
    },
    "summary": {
      "fullName": "Nom complet",
      "mrn": "N° de dossier",
      "age": "Âge",
      "sex": "Sexe",
      "primaryCare": "Praticien référent",
      "status": "Statut",
      "lastSeen": "Dernière visite",
      "allergies": "Allergies",
      "activeMeds": "Médicaments actifs",
      "openProblems": "Problèmes ouverts",
      "none": "Aucun",
      "editRecord": "Modifier le dossier"
    },
    "vitals": {
      "title": "Signes vitaux",
      "taken": "Pris {{at}}",
      "bp": "TA",
      "hr": "FC",
      "temp": "Temp",
      "spo2": "SpO₂"
    },
    "labs": {
      "title": "Analyses",
      "asOf": "À la date du {{at}}",
      "empty": "Aucune analyse au dossier."
    },
    "medications": {
      "title": "Médicaments",
      "active": "{{count}} actifs",
      "empty": "Aucun médicament actif."
    },
    "problems": {
      "title": "Problèmes",
      "active": "{{count}} actifs",
      "empty": "Aucun problème actif.",
      "since": "depuis {{date}}"
    },
    "allergies": {
      "title": "Allergies & alertes",
      "sectionLabel": "Allergies",
      "none": "Aucune allergie connue.",
      "count": "{{count}} enregistrées"
    },
    "visits": {
      "title": "Visites récentes",
      "recent": "{{count}} récentes",
      "empty": "Aucune visite pour le moment."
    },
    "graph": {
      "title": "Graphe du dossier",
      "hint": "Survolez un nœud pour mettre en évidence ses connexions. Faites défiler pour vous déplacer, pincez pour zoomer.",
      "empty": "Pas assez de données pour générer le graphe.",
      "open": "Ouvrir le graphe",
      "close": "Fermer",
      "kind": {
        "problem": "Problème",
        "visit": "Visite"
      },
      "fields": {
        "since": "Depuis",
        "date": "Date",
        "provider": "Praticien",
        "summary": "Résumé"
      }
    },
    "appointments": {
      "title": "Rendez-vous",
      "empty": "Aucun rendez-vous au dossier."
    },
    "prescriptions": {
      "title": "Ordonnances",
      "empty": "Aucune ordonnance au dossier."
    },
    "invoices": {
      "title": "Factures",
      "empty": "Aucune facture au dossier."
    },
    "trend": {
      "empty": "Aucune donnée de tendance pour le moment.",
      "last": "{{label}} · {{count}} dernières",
      "lastReadings": "{{label}} · {{count}} dernières mesures",
      "latest": "Dernière",
      "min": "Min",
      "max": "Max"
    },
    "labFlag": {
      "normal": "Normal",
      "low": "Bas",
      "high": "Élevé",
      "critical": "Critique"
    },
    "severity": {
      "mild": "Légère",
      "moderate": "Modérée",
      "severe": "Sévère"
    }
  },
  "patientForm": {
    "editTitle": "Modifier le dossier",
    "createTitle": "Ajouter un patient",
    "editDescription": "Mettez à jour le dossier de {{name}} et ajoutez de nouvelles données.",
    "createDescription": "Créez un nouveau dossier. Un numéro de dossier a été généré pour vous.",
    "fileNumber": "Numéro de dossier",
    "regenerate": "Régénérer le numéro de dossier",
    "fullName": "Nom complet",
    "fullNamePlaceholder": "ex. Jordan Pierce",
    "age": "Âge",
    "sex": "Sexe",
    "status": "Statut",
    "primaryCare": "Praticien référent",
    "primaryCarePlaceholder": "ex. Dr Lena Ortiz",
    "primaryCareUnassigned": "Non attribué",
    "currentVitals": "Signes vitaux actuels",
    "bp": "Tension artérielle",
    "hr": "Fréquence cardiaque",
    "temp": "Température",
    "spo2": "Saturation en oxygène",
    "allergies": "Allergies",
    "medications": "Médicaments",
    "problems": "Problèmes",
    "labs": "Analyses",
    "visits": "Visites",
    "add": "Ajouter",
    "removeRow": "Supprimer la ligne {{label}}",
    "pickDate": "Choisir une date",
    "substance": "Substance",
    "reaction": "Réaction",
    "severityAria": "Sévérité",
    "medNameAria": "Nom du médicament",
    "medName": "Nom",
    "dose": "Dose",
    "frequency": "Fréquence",
    "problemAria": "Problème",
    "diagnosis": "Diagnostic",
    "sinceAria": "Depuis",
    "labNameAria": "Nom de l'analyse",
    "test": "Analyse",
    "valueAria": "Valeur",
    "value": "Valeur",
    "flagAria": "Indicateur",
    "visitTypeAria": "Type de visite",
    "visitType": "Type",
    "visitDateAria": "Date de visite",
    "visitDate": "Date",
    "providerAria": "Praticien",
    "provider": "Praticien",
    "summaryAria": "Résumé",
    "summary": "Résumé",
    "cancel": "Annuler",
    "saving": "Enregistrement…",
    "saveChanges": "Enregistrer les modifications",
    "savePatient": "Enregistrer le patient",
    "saveDraft": "Enregistrer les modifications",
    "reviewTitle": "Examiner le dossier avant l'import",
    "reviewDescription": "Modifiez n'importe quel champ, puis enregistrez pour mettre à jour ce dossier dans l'import. Rien n'est écrit tant que vous n'importez pas.",
    "saveError": "Impossible d'enregistrer le patient.",
    "updatedTitle": "Dossier mis à jour",
    "updatedBody": "Le dossier de {{name}} a été enregistré.",
    "addedTitle": "Patient ajouté",
    "addedBody": "{{name}} ({{fileNumber}}).",
    "saveFailedTitle": "Impossible d'enregistrer le patient"
  },
  "settings": {
    "tabs": {
      "profile": "Profil",
      "ai": "IA",
      "records": "Dossiers",
      "signing": "Signature",
      "careTeam": "Équipe soignante",
      "integrations": "Intégrations",
      "developers": "Développeurs",
      "version": "À propos & mises à jour"
    },
    "version": {
      "title": "Version",
      "description": "La version de temetro exécutée sur ce serveur, et si une version plus récente est disponible.",
      "current": "Version actuelle",
      "latest": "Dernière version",
      "checking": "Recherche de mises à jour…",
      "checkNow": "Rechercher des mises à jour",
      "upToDate": "À jour",
      "updateAvailable": "Mise à jour disponible",
      "offline": "Impossible de joindre le serveur de mise à jour",
      "updateTitle": "Comment mettre à jour",
      "updateDescription": "temetro est auto-hébergé avec Docker. Pour mettre à jour, récupérez les nouvelles images et redémarrez sur la machine serveur.",
      "updateCommandLabel": "Commande de mise à jour",
      "viewRelease": "Voir les notes de version",
      "networkTitle": "Accès réseau",
      "networkDescription": "Permettez aux autres services d'ouvrir temetro depuis leurs propres ordinateurs sur le réseau de l'hôpital en utilisant cette adresse.",
      "networkUrlLabel": "Adresse réseau",
      "networkLocalHint": "Vous consultez temetro en local. Pour le partager, ouvrez l'application sur la machine serveur en utilisant son adresse IP réseau (ex. via ipconfig / ifconfig), puis partagez cette URL.",
      "networkFirewallHint": "Le pare-feu du serveur doit autoriser le port pour que d'autres appareils puissent se connecter.",
      "banner": "Une nouvelle version de temetro ({{version}}) est disponible.",
      "bannerUpdate": "Voir comment mettre à jour",
      "bannerDismiss": "Plus tard"
    },
    "integrations": {
      "loading": "Chargement des intégrations…",
      "intro": "Connectez temetro à des systèmes de santé externes. Pointez chaque intégration vers le point de terminaison sandbox ou production de votre fournisseur et fournissez ses identifiants.",
      "endpoint": "URL du point de terminaison",
      "credentials": "Identifiants",
      "credentialsSet": "•••••••• (enregistré — saisissez pour remplacer)",
      "enable": "Activer l'intégration",
      "enableHint": "Lorsqu'elle est activée, ses actions apparaissent sur les pages concernées.",
      "save": "Enregistrer",
      "saving": "Enregistrement…",
      "test": "Tester la connexion",
      "testing": "Test…",
      "savedTitle": "Intégration enregistrée",
      "saveFailedTitle": "Impossible d'enregistrer",
      "saveFailedBody": "Une erreur s'est produite, ou vous n'avez pas l'autorisation. Veuillez réessayer.",
      "testOk": "Connexion réussie",
      "testFailed": "Échec de la connexion",
      "testError": "Impossible de joindre le point de terminaison.",
      "lastSync": "Dernière activité {{when}}",
      "status": {
        "connected": "Connecté",
        "error": "Erreur",
        "unconfigured": "Non configuré"
      },
      "fhir": {
        "title": "Système de laboratoire (HL7/FHIR)",
        "description": "Lisez les résultats de laboratoire depuis un serveur FHIR R4 ou un flux HL7 v2 (ex. un sandbox HAPI FHIR / SMART Health IT, ou la passerelle de votre laboratoire).",
        "endpointPlaceholder": "https://hapi.fhir.org/baseR4",
        "credentialsPlaceholder": "Jeton Bearer (facultatif pour les sandbox ouverts)",
        "credentialsHint": "Envoyé en tant que jeton Bearer, ou JSON {\"token\":\"…\"}. Laissez vide pour les sandbox publics."
      },
      "eprescribe": {
        "title": "e-Prescription (NCPDP SCRIPT)",
        "description": "Transmettez les ordonnances aux pharmacies sous forme de messages NCPDP SCRIPT NewRx. Le routage en production nécessite votre compte Surescripts (ou sandbox).",
        "endpointPlaceholder": "https://votre-passerelle-pharmacie.example/script",
        "credentialsPlaceholder": "JSON : {\"token\":\"…\",\"senderId\":\"…\"}",
        "credentialsHint": "JSON avec le jeton de votre passerelle et l'identifiant de l'expéditeur."
      },
      "claims": {
        "title": "Demandes d'assurance (X12 837/835)",
        "description": "Soumettez des demandes professionnelles (837P) à une chambre de compensation et lisez les remises (835). La production nécessite votre compte de chambre de compensation.",
        "endpointPlaceholder": "https://votre-chambre-compensation.example/claims",
        "credentialsPlaceholder": "JSON : {\"token\":\"…\",\"submitterId\":\"…\",\"receiverId\":\"…\"}",
        "credentialsHint": "JSON avec le jeton de votre chambre de compensation et les identifiants d'expéditeur/destinataire."
      }
    },
    "empty": "Rien ici pour le moment.",
    "copy": "Copier",
    "copied": "Copié",
    "records": {
      "description": "Comment les dossiers patients sont sourcés, stockés et affichés",
      "comingSoon": "Bientôt disponible",
      "connected": "Connecté",
      "sourcesTitle": "Sources de données",
      "sourcesDescription": "D'où proviennent les dossiers patients affichés dans temetro",
      "clinicDb": "Base de données de la clinique",
      "clinicDbDesc": "Les dossiers patients sont stockés dans la propre base de données de votre clinique et limités à cette clinique.",
      "patientStorage": "Stockage appartenant au patient",
      "patientStorageDesc": "Lisez et écrivez des dossiers directement sur l'appareil du patient une fois l'application compagnon disponible.",
      "importExportTitle": "Import & export",
      "importExportDescription": "Déplacez des dossiers vers et hors de temetro",
      "export": "Exporter les dossiers",
      "exportDesc": "Téléchargez tous les dossiers patients de cette clinique dans une seule archive.",
      "import": "Importer une base de données existante",
      "importDesc": "Connectez une base de données patients existante et parcourez-la dans la même interface à cartes.",
      "retentionTitle": "Conservation",
      "retentionDescription": "Durée de conservation des dossiers",
      "retentionBody": "Les dossiers sont conservés aussi longtemps que votre clinique existe. Supprimer un patient retire définitivement son dossier de la base de données de la clinique, et le journal d'activité conserve une piste d'audit de chaque modification — qui l'a faite et quand.",
      "exporting": "Exportation…",
      "exportDoneTitle": "Dossiers exportés",
      "exportDoneBody": "{{count}} dossier(s) patient téléchargé(s).",
      "exportFailedTitle": "Échec de l'export",
      "exportFailedBody": "Impossible d'exporter les dossiers. Veuillez réessayer.",
      "importTemetro": "Importer une archive temetro",
      "importTemetroDesc": "Chargez des patients depuis un fichier d'export temetro. Les numéros de dossier existants sont ignorés.",
      "importChoose": "Choisir un fichier",
      "importPreview": "{{count}} dossier(s) patient prêt(s) à importer.",
      "importCancel": "Annuler",
      "importApply": "Importer",
      "importing": "Importation…",
      "importInvalidTitle": "Fichier invalide",
      "importInvalidBody": "Cela ne ressemble pas à un export temetro.",
      "importDoneTitle": "Import terminé",
      "importDoneBody": "{{created}} créés, {{skipped}} ignorés.",
      "importFailedTitle": "Échec de l'import",
      "importFailedBody": "Impossible d'importer les dossiers. Veuillez réessayer."
    },
    "developers": {
      "description": "Jetons d'accès à l'API temetro",
      "comingSoon": "Bientôt disponible",
      "apiTitle": "Accès API",
      "apiDescription": "Développez sur la même API REST que l'application temetro utilise",
      "baseUrlLabel": "URL de base de l'API",
      "baseUrlDescription": "Tous les points de terminaison vivent sous cette origine (ex. /api/patients)",
      "authLabel": "Authentification",
      "authDescription": "Les requêtes s'authentifient avec votre cookie de session temetro. Des jetons d'accès personnels limités pour un usage serveur à serveur sont prévus.",
      "tokensTitle": "Jetons d'accès personnels",
      "tokensDescription": "Jetons à longue durée de vie pour les scripts et les intégrations",
      "noTokens": "Aucun jeton pour le moment.",
      "generateToken": "Générer un jeton",
      "resourcesTitle": "Ressources",
      "resourcesDescription": "Où en savoir plus",
      "resourcesBody": "La référence de l'API — couvrant patients, rendez-vous, ordonnances, tâches, messagerie, activité et analytique — se trouve dans la documentation du projet sous docs/api. temetro est open source, donc les gestionnaires de routes dans backend/src/routes constituent la spécification de référence.",
      "email": {
        "title": "Fournisseur d'e-mail",
        "description": "Comment temetro envoie les e-mails de vérification, de réinitialisation de mot de passe et d'invitation. Il s'agit d'un paramètre à l'échelle du déploiement.",
        "provider": "Fournisseur",
        "providers": {
          "none": "Non configuré",
          "smtp": "SMTP",
          "resend": "Resend",
          "postmark": "Postmark",
          "sendgrid": "SendGrid"
        },
        "from": "Adresse d'expéditeur",
        "apiKey": "Clé API",
        "apiKeySet": "•••••••• (enregistrée — laissez vide pour conserver)",
        "apiKeyPlaceholder": "Collez la clé API de votre fournisseur",
        "smtpHint": "SMTP utilise les variables d'environnement SMTP_HOST/PORT/USER/PASS sur le serveur.",
        "save": "Enregistrer",
        "saving": "Enregistrement…",
        "savedTitle": "Paramètres d'e-mail enregistrés",
        "savedFailed": "Impossible d'enregistrer les paramètres d'e-mail.",
        "test": "Envoyer un test",
        "testing": "Envoi…",
        "testSentTitle": "E-mail de test envoyé",
        "testSentBody": "E-mail de test envoyé à {{to}}.",
        "testFailed": "Impossible d'envoyer l'e-mail de test."
      }
    },
    "profile": {
      "sectionTitle": "Profil du clinicien",
      "clinicianIdLabel": "Identifiant clinicien",
      "clinicianIdDescription": "Votre identifiant clinicien unique, utilisé lors de la signature des dossiers",
      "handleLabel": "Identifiant public",
      "handleDescription": "Utilisé dans votre profil public et le portail patient",
      "avatar": "Avatar",
      "displayName": "Nom affiché",
      "specialty": "Spécialité",
      "selectSpecialty": "Sélectionner une spécialité",
      "clinic": "Clinique / cabinet",
      "clinicPlaceholder": "ex. Hôpital principal",
      "contactEmail": "E-mail de contact",
      "contactEmailPlaceholder": "clinicien@example.org",
      "professionalLinks": "Liens professionnels",
      "professionalLinksHint": "Profils de registre ou institutionnels utilisés pour vérifier votre identité. Ils ne sont jamais montrés aux patients.",
      "addLink": "Ajouter un lien",
      "language": {
        "title": "Langue",
        "description": "La langue dans laquelle l'interface de temetro s'affiche sur cet appareil.",
        "label": "Langue d'affichage",
        "en": "English",
        "fr": "Français",
        "so": "Soomaali",
        "ar": "العربية",
        "de": "Deutsch",
        "confirmTitle": "Changer la langue d'affichage ?",
        "confirmBody": "Basculer l'interface en {{language}} ? L'application rechargera ses textes dans la nouvelle langue.",
        "confirmCta": "Changer la langue",
        "cancel": "Annuler"
      },
      "patientNotifications": "Notifications patients",
      "patientNotificationsDescription": "E-mails envoyés aux patients à propos de leurs dossiers, résultats et approbations en attente",
      "accountNotifications": "Notifications du compte",
      "accountNotificationsDescription": "Notifications qui vous sont envoyées à propos de vos patients et de l'équipe soignante",
      "features": "Fonctionnalités",
      "featuresDescription": "Gérez les fonctionnalités alpha & bêta de votre compte",
      "dangerZone": "Zone de danger",
      "dangerZoneDescription": "Actions irréversibles pour votre compte",
      "deleteAccount": "Supprimer le compte",
      "deleteAccountDescription": "Supprimer définitivement votre compte temetro et toutes les clés de signature stockées localement. Cette action est irréversible.",
      "delete": "Supprimer",
      "unsavedChanges": "Vous avez des modifications non enregistrées",
      "saveChanges": "Enregistrer les modifications",
      "saving": "Enregistrement…",
      "savedTitle": "Paramètres enregistrés",
      "savedBody": "Vos préférences sont à jour.",
      "saveFailedTitle": "Impossible d'enregistrer les paramètres",
      "saveFailedBody": "Veuillez réessayer.",
      "deleteDialog": {
        "title": "Supprimer votre compte ?",
        "description": "Ceci supprime définitivement votre compte, vous retire de vos cliniques, et ne peut pas être annulé.",
        "passwordLabel": "Confirmez votre mot de passe",
        "passwordPlaceholder": "Votre mot de passe",
        "cancel": "Annuler",
        "confirm": "Supprimer le compte",
        "deleting": "Suppression…",
        "failed": "Impossible de supprimer le compte. Vérifiez votre mot de passe et réessayez."
      },
      "notif": {
        "newLab": "Nouveau résultat de laboratoire",
        "newLabDesc": "Envoyé lorsqu'un nouveau résultat de laboratoire est disponible dans le dossier d'un patient",
        "recordUpdated": "Dossier mis à jour",
        "recordUpdatedDesc": "Envoyé lorsque le dossier d'un patient est mis à jour par un membre de l'équipe soignante",
        "approvalRequested": "Approbation demandée",
        "approvalRequestedDesc": "Envoyé lorsqu'une modification signée attend l'approbation du patient",
        "changeApproved": "Modification approuvée",
        "changeApprovedDesc": "Envoyé lorsqu'un patient approuve une modification en attente de son dossier",
        "newMessage": "Nouveau message",
        "newMessageDesc": "Envoyé lorsqu'un patient ou un autre clinicien envoie un message",
        "visitScheduled": "Visite planifiée",
        "visitScheduledDesc": "Envoyé lorsqu'une prochaine visite est ajoutée au dossier d'un patient",
        "pendingApprovals": "Approbations en attente",
        "pendingApprovalsDesc": "Me notifier lorsqu'un patient approuve ou rejette une modification en attente",
        "recordsShared": "Dossiers partagés avec moi",
        "recordsSharedDesc": "Me notifier lorsqu'un patient partage un dossier avec moi",
        "patientStorage": "Stockage appartenant au patient (bêta)",
        "patientStorageDesc": "Écrivez les dossiers sur l'appareil du patient plutôt que dans votre base de données",
        "requireSigned": "Exiger des dossiers signés",
        "requireSignedDesc": "Exiger une signature sur chaque modification que vous apportez à un dossier patient"
      }
    },
    "careTeam": {
      "title": "Équipe soignante",
      "description": "Le personnel ayant accès à cette clinique",
      "loadError": "Impossible de charger l'équipe soignante.",
      "loading": "Chargement de l'équipe soignante…",
      "you": "(vous)",
      "clickHint": "Astuce : cliquez sur un membre de l'équipe pour voir ses autorisations et gérer son rôle.",
      "addMember": "Ajouter un membre",
      "removeMember": "Retirer le membre",
      "specialties": {
        "general": "Médecin généraliste",
        "orthopedics": "Orthopédiste",
        "dentistry": "Dentiste",
        "cardiology": "Cardiologue",
        "pediatrics": "Pédiatre",
        "dermatology": "Dermatologue",
        "neurology": "Neurologue",
        "obgyn": "Gynécologue-obstétricien",
        "ophthalmology": "Ophtalmologue",
        "ent": "ORL",
        "psychiatry": "Psychiatre",
        "radiology": "Radiologue",
        "anesthesiology": "Anesthésiste",
        "surgery": "Chirurgien"
      },
      "employee": {
        "title": "Membre de l'équipe",
        "description": "Consultez l'accès de ce membre, changez son rôle, ou retirez-le.",
        "permissions": "Autorisations",
        "noAccess": "Aucun accès",
        "changeRole": "Changer de rôle",
        "save": "Enregistrer",
        "saving": "Enregistrement…",
        "remove": "Retirer l'employé",
        "close": "Fermer",
        "roleUpdatedTitle": "Rôle mis à jour",
        "roleUpdatedBody": "{{name}} est désormais {{role}}.",
        "roleFailedTitle": "Impossible de mettre à jour le rôle",
        "roleFailedBody": "Veuillez réessayer.",
        "specialty": "Spécialité",
        "noSpecialty": "Aucune spécialité",
        "specialtyUpdatedTitle": "Spécialité mise à jour",
        "specialtyUpdatedBody": "Spécialité de {{name}} mise à jour.",
        "specialtyFailedTitle": "Impossible de mettre à jour la spécialité",
        "specialtyFailedBody": "Veuillez réessayer.",
        "resources": {
          "patient": "Patients",
          "appointment": "Rendez-vous",
          "prescription": "Ordonnances",
          "task": "Tâches",
          "lab": "Résultats de laboratoire"
        },
        "actions": {
          "read": "Consulter",
          "write": "Modifier",
          "delete": "Supprimer"
        },
        "resetPassword": "Réinitialiser le mot de passe",
        "resetPasswordHint": "Définissez un nouveau mot de passe pour cet employé (ex. il a oublié le sien et aucun fournisseur d'e-mail n'est configuré).",
        "newPassword": "Nouveau mot de passe (min 12 caractères)",
        "confirmPassword": "Confirmer le mot de passe",
        "setPassword": "Définir le mot de passe",
        "pwTooShortTitle": "Mot de passe trop court",
        "pwTooShortBody": "Utilisez au moins 12 caractères.",
        "pwMismatchTitle": "Les mots de passe ne correspondent pas",
        "pwMismatchBody": "Saisissez le même mot de passe dans les deux champs.",
        "pwUpdatedTitle": "Mot de passe mis à jour",
        "pwUpdatedBody": "{{name}} peut désormais se connecter avec le nouveau mot de passe.",
        "pwFailedTitle": "Impossible de définir le mot de passe",
        "pwFailedBody": "Veuillez réessayer."
      },
      "remove": {
        "title": "Retirer le membre de l'équipe ?",
        "description": "{{name}} perdra l'accès à cette clinique. Cette action est irréversible.",
        "thisMember": "Ce membre",
        "cancel": "Annuler",
        "confirm": "Retirer",
        "removing": "Retrait…",
        "removedTitle": "Membre retiré",
        "removedBody": "{{name}} n'a plus accès.",
        "failedTitle": "Impossible de retirer le membre",
        "failedBody": "Veuillez réessayer."
      },
      "add": {
        "title": "Ajouter un membre",
        "step1Description": "Qui ajoutez-vous, et que peut-il faire ?",
        "step2Description": "Définissez le nom d'utilisateur et le mot de passe avec lesquels il se connectera.",
        "nameLabel": "Nom complet",
        "namePlaceholder": "Jane Okafor",
        "nameRequired": "Saisissez le nom de la personne.",
        "roleLabel": "Rôle",
        "usernameLabel": "Nom d'utilisateur",
        "usernamePlaceholder": "jokafor",
        "usernameHint": "Lettres, chiffres, points et tirets bas — pas d'espaces.",
        "usernameTooShort": "Le nom d'utilisateur doit comporter au moins {{count}} caractères.",
        "usernameInvalid": "Le nom d'utilisateur ne peut pas contenir d'espaces. Utilisez des lettres, des chiffres, des points ou des tirets bas.",
        "passwordLabel": "Mot de passe",
        "passwordHint": "Doit comporter au moins {{count}} caractères.",
        "passwordTooShort": "Le mot de passe doit comporter au moins {{count}} caractères.",
        "back": "Retour",
        "cancel": "Annuler",
        "next": "Suivant",
        "create": "Créer le compte",
        "creating": "Création…",
        "createdTitle": "Compte créé",
        "createdBody": "{{name}} peut désormais se connecter avec le nom d'utilisateur {{username}}.",
        "error": "Impossible de créer le compte.",
        "errorTitle": "Impossible d'ajouter le membre"
      }
    },
    "signing": {
      "keyTitle": "Clé de signature",
      "active": "Active",
      "keyDescription": "Chaque modification que vous apportez à un dossier patient est signée avec cette clé, afin que les patients puissent vérifier qu'elle vient de vous avant de l'approuver.",
      "rotateKey": "Renouveler la clé",
      "rotating": "Renouvellement…",
      "rotateSuccessTitle": "Clé de signature renouvelée",
      "rotateSuccessBody": "Une nouvelle clé Ed25519 est désormais active pour cette clinique.",
      "rotateErrorTitle": "Impossible de renouveler la clé",
      "rotateError": "Veuillez réessayer.",
      "loadError": "Impossible de charger la clé de signature.",
      "loading": "Chargement de la clé de signature…",
      "createdAt": "Créée le 28 mai 2026",
      "createdAtLabel": "Créée le {{date}}",
      "rotatedAtLabel": "Renouvelée le {{date}}",
      "records": {
        "permanent": "Permanent",
        "temporary": "Temporaire",
        "expires": "Expire le {{date}}",
        "statusPending": "En attente d'approbation",
        "statusApproved": "Partagé",
        "statusDenied": "Refusé",
        "statusExpired": "Expiré"
      },
      "identityTitle": "Identité de signature",
      "identityDescription": "La clé publique que les patients utilisent pour vérifier vos signatures",
      "fingerprintLabel": "Empreinte de la clé publique",
      "fingerprintDescription": "Partagez ou publiez cette empreinte pour que les patients puissent faire confiance à vos modifications",
      "signedRecordsTitle": "Dossiers signés",
      "signedRecordsDescription": "Les modifications que vous avez signées et qui attendent l'approbation du patient",
      "noPending": "Aucune signature en attente",
      "comingSoon": "Bientôt disponible",
      "howItWorksTitle": "Comment fonctionne la signature",
      "howItWorksDescription": "Le déroulement derrière les dossiers approuvés par le patient",
      "steps": {
        "sign": "Vous signez chaque modification",
        "signDesc": "Chaque modification que vous apportez à un dossier patient est signée avec votre clé privée avant d'être écrite.",
        "approve": "Le patient l'approuve",
        "approveDesc": "Les modifications signées restent en attente jusqu'à ce que le patient les accepte dans l'application compagnon.",
        "verify": "N'importe qui peut vérifier",
        "verifyDesc": "L'empreinte de votre clé publique permet aux patients et aux autres cliniques de vérifier qu'une modification vient bien de vous."
      },
      "backupTitle": "Clé de sauvegarde",
      "backupDescription": "Récupérez votre identité de signature si vous perdez cet appareil",
      "backupLabel": "Phrase de récupération",
      "backupDesc": "Exportez une sauvegarde chiffrée de votre clé de signature pour la restaurer sur un nouvel appareil."
    },
    "ai": {
      "availability": {
        "title": "Disponibilité",
        "description": "Contrôlez qui, dans votre clinique, peut utiliser l'assistant IA. Lorsqu'il est désactivé, chaque surface IA — Nouvelle discussion, Analyse et l'historique des discussions — est masquée et inaccessible.",
        "enabled": "Activer l'assistant IA",
        "enabledHint": "Interrupteur principal. Le désactiver masque et désactive l'IA pour tout le monde dans la clinique — y compris les propriétaires et administrateurs.",
        "employeesOnly": "Désactiver pour les employés uniquement",
        "employeesOnlyHint": "Conservez l'IA pour les propriétaires et administrateurs, mais masquez-la pour tout le reste du personnel.",
        "savedTitle": "Disponibilité de l'IA mise à jour",
        "savedBody": "La modification s'applique à toute votre clinique.",
        "readonlyEnabled": "L'assistant IA est activé pour votre clinique.",
        "readonlyEmployeesOnly": "L'assistant IA est réservé aux propriétaires et administrateurs.",
        "readonlyDisabled": "L'assistant IA est désactivé pour votre clinique."
      },
      "modeTitle": "Mode d'inférence",
      "modeDescription": "Choisissez comment temetro exécute l'IA. Une clé API cloud envoie des données hors de votre infrastructure ; un modèle local garde tout sur votre machine.",
      "mode": "Mode",
      "modeApi": "Clé API cloud",
      "modeLocal": "Modèle local (Ollama)",
      "modeApiHint": "Les requêtes vont vers le fournisseur que vous avez choisi. Les identifiants des patients sont dé-identifiés par Veil avant leur départ.",
      "modeLocalHint": "Les requêtes s'exécutent sur un modèle de votre propre infrastructure. Aucune donnée patient ne quitte la clinique.",
      "providerTitle": "Fournisseur & clé API",
      "providerDescription": "Votre clé est chiffrée au repos et n'est plus jamais affichée. Vous pouvez stocker une clé par fournisseur et basculer entre elles.",
      "provider": "Fournisseur",
      "providers": {
        "openai": "OpenAI",
        "anthropic": "Anthropic",
        "gemini": "Google Gemini"
      },
      "apiKey": "Clé API",
      "apiKeyPlaceholder": "Collez votre clé API",
      "apiKeySet": "•••••••••• (clé définie)",
      "apiKeyHint": "La clé est chiffrée avant stockage et utilisée uniquement pour appeler le fournisseur.",
      "apiKeyStored": "Une clé est stockée pour {{provider}}.",
      "defaultModel": "Modèle par défaut",
      "selectModel": "Sélectionner un modèle",
      "defaultEffort": "Effort par défaut",
      "localTitle": "Modèle local (Ollama)",
      "localDescription": "Pointez temetro vers votre serveur Ollama. Le modèle s'exécute sur votre infrastructure, donc les données patient ne quittent jamais la clinique.",
      "ollamaBaseUrl": "URL de base d'Ollama",
      "ollamaModel": "Nom du modèle",
      "testConnection": "Tester la connexion",
      "testing": "Test…",
      "testOk": "Connexion réussie",
      "testFailed": "Échec de la connexion",
      "testError": "Impossible d'exécuter le test.",
      "veilTitle": "Veil — protections des données de santé",
      "veilDescription": "Veil dé-identifie les informations des patients avant qu'elles ne soient envoyées à un modèle externe, puis les restaure dans la réponse.",
      "veilLevel": "Niveau de dé-identification",
      "veilLevels": {
        "full": "Complet — noms, n° de dossier, praticiens & texte libre",
        "names": "Noms uniquement — identifiants directs",
        "off": "Désactivé — envoyer les données telles quelles (non recommandé)"
      },
      "veilApiNote": "Veil s'applique à chaque requête externe. Les identifiants sont remplacés par des jetons que le modèle ne voit jamais, et réinsérés avant que vous ne lisiez la réponse.",
      "veilLocalNote": "Vous êtes en mode local, donc les données patient ne quittent jamais votre infrastructure et Veil n'est pas nécessaire.",
      "unsavedChanges": "Vous avez des paramètres d'IA non enregistrés.",
      "saveChanges": "Enregistrer les modifications",
      "saving": "Enregistrement…",
      "savedTitle": "Paramètres d'IA enregistrés",
      "savedBody": "Votre configuration d'IA a été mise à jour.",
      "saveFailedTitle": "Impossible d'enregistrer",
      "saveFailedBody": "L'enregistrement de vos paramètres d'IA a échoué. Veuillez réessayer."
    }
  },
  "portal": {
    "kicker": "Portail patient",
    "back": "Retour",
    "done": "Terminé",
    "notFoundTitle": "Clinique introuvable",
    "notFoundBody": "Ce lien de portail n'est pas valide. Veuillez demander de l'aide à l'accueil.",
    "choose": {
      "bookTitle": "Prendre un rendez-vous",
      "bookDesc": "Planifiez une visite avec votre équipe soignante.",
      "resultsTitle": "Voir mes résultats",
      "resultsDesc": "Consultez les prochaines visites et si les résultats sont prêts."
    },
    "field": {
      "name": "Nom complet",
      "fileNumber": "Numéro de dossier",
      "date": "Date",
      "time": "Heure",
      "reason": "Motif de la visite (facultatif)",
      "reasonPlaceholder": "ex. Suivi, contrôle",
      "sex": "Sexe",
      "sexMale": "Homme",
      "sexFemale": "Femme",
      "age": "Âge"
    },
    "book": {
      "title": "Prendre un rendez-vous",
      "submit": "Demander un rendez-vous",
      "successTitle": "Vous êtes inscrit",
      "successBody": "Votre rendez-vous est fixé au {{date}} à {{time}}. Veuillez vous présenter à l'accueil.",
      "errorGeneric": "Impossible de prendre le rendez-vous. Veuillez réessayer ou demander à l'accueil.",
      "mode": {
        "returning": "Patient déjà connu",
        "new": "Nouveau patient"
      },
      "newFileNote": "Votre nouveau numéro de dossier est {{file}} — conservez-le pour la prochaine fois.",
      "slotTaken": "Ce créneau est déjà pris. Veuillez en choisir un autre."
    },
    "results": {
      "title": "Voir mes résultats",
      "subtitle": "Saisissez votre nom et votre numéro de dossier pour continuer.",
      "submit": "Rechercher",
      "greeting": "Bonjour {{name}}",
      "upcoming": "Prochains rendez-vous",
      "noUpcoming": "Aucun rendez-vous à venir.",
      "resultsLabel": "Résultats",
      "ready": "{{count}} résultat(s) au dossier.",
      "none": "Aucun résultat au dossier pour le moment.",
      "askStaff": "Veuillez demander à un membre du personnel d'examiner vos résultats avec vous.",
      "lookupAnother": "Rechercher un autre",
      "errorGeneric": "Impossible de trouver votre dossier. Veuillez vérifier vos informations ou demander à l'accueil."
    }
  }
}
