{
  "common": {
    "save": "Enregistrer",
    "cancel": "Annuler",
    "delete": "Supprimer",
    "edit": "Modifier",
    "add": "Ajouter",
    "create": "Créer",
    "update": "Mettre à jour",
    "close": "Fermer",
    "confirm": "Confirmer",
    "back": "Retour",
    "next": "Suivant",
    "loading": "Chargement...",
    "error": "Erreur",
    "success": "Succès",
    "warning": "Avertissement",
    "info": "Information",
    "yes": "Oui",
    "no": "Non",
    "enabled": "Activé",
    "disabled": "Désactivé",
    "name": "Nom",
    "description": "Description",
    "actions": "Actions",
    "status": "Statut",
    "search": "Rechercher",
    "filter": "Filtrer",
    "settings": "Paramètres",
    "language": "Langue",
    "configure": "Configurer",
    "test": "Tester",
    "docs": "Documentation",
    "upload": "Téléverser",
    "active": "Actif",
    "type": "Type",
    "rules": "Règles",
    "allow": "Autoriser",
    "deny": "Refuser",
    "saveConfiguration": "Enregistrer la configuration",
    "enabledCount": "{{count}} activé",
    "validCount": "{{count}} valide",
    "activeCount": "{{count}} actif",
    "noHistoryAvailable": "Aucun historique disponible",
    "autoRefreshing": "Actualisation automatique toutes les {{seconds}}s",
    "score": "Score"
  },
  "navigation": {
    "dashboard": "Tableau de bord",
    "proxyHosts": "Hôtes Proxy",
    "remoteServers": "Serveurs Distants",
    "domains": "Domaines",
    "certificates": "Certificats",
    "dns": "DNS",
    "dnsProviders": "Fournisseurs DNS",
    "plugins": "Plugins",
    "security": "Sécurité",
    "accessLists": "Listes d'Accès",
    "crowdsec": "CrowdSec",
    "rateLimiting": "Limitation de Débit",
    "waf": "WAF",
    "uptime": "Disponibilité",
    "notifications": "Notifications",
    "users": "Utilisateurs",
    "tasks": "Tâches",
    "settings": "Paramètres",
    "system": "Système",
    "email": "Email (SMTP)",
    "import": "Importer",
    "caddyfile": "Caddyfile",
    "backups": "Sauvegardes",
    "logs": "Journaux",
    "securityHeaders": "En-têtes de Sécurité",
    "expandSidebar": "Développer la barre latérale",
    "collapseSidebar": "Réduire la barre latérale"
  },
  "settings": {
    "title": "Paramètres",
    "description": "Configurez votre instance Charon",
    "system": "Système",
    "smtp": "Email (SMTP)",
    "account": "Compte",
    "language": "Langue",
    "languageDescription": "Sélectionnez votre langue préférée",
    "theme": "Thème",
    "themeDescription": "Choisissez le thème clair ou sombre"
  },
  "proxyHosts": {
    "title": "Hôtes Proxy",
    "description": "Gérez vos configurations de proxy inverse",
    "addHost": "Ajouter un Hôte Proxy",
    "editHost": "Modifier l'Hôte Proxy",
    "deleteHost": "Supprimer l'Hôte Proxy",
    "domainNames": "Noms de Domaine",
    "forwardHost": "Hôte de Transfert",
    "forwardPort": "Port de Transfert",
    "sslEnabled": "SSL Activé",
    "sslForced": "Forcer SSL",
    "columnName": "Nom",
    "columnDomain": "Domaine",
    "columnForwardTo": "Transférer vers",
    "columnSSL": "SSL",
    "columnFeatures": "Fonctionnalités",
    "columnStatus": "Statut",
    "columnActions": "Actions",
    "unnamed": "Sans nom",
    "staging": "Test",
    "websocket": "WS",
    "acl": "ACL",
    "noHosts": "Aucun hôte proxy",
    "noHostsDescription": "Créez votre premier hôte proxy pour commencer à acheminer le trafic vers vos services.",
    "selectedCount": "{{count}} hôte(s) sélectionné(s)",
    "selectedCountAll": "(tous)",
    "bulkApply": "Application groupée",
    "manageACL": "Gérer ACL",
    "deleteConfirmTitle": "Supprimer l'Hôte Proxy ?",
    "deleteConfirmMessage": "Êtes-vous sûr de vouloir supprimer <strong>{{name}}</strong> ? Cette action est irréversible.",
    "bulkApplyTitle": "Application Groupée des Paramètres",
    "bulkApplyDescription": "Application des paramètres à <strong>{{count}}</strong> hôte(s) sélectionné(s)",
    "applyACLTitle": "Appliquer la Liste d'Accès",
    "applyACLDescription": "Application à <strong>{{count}}</strong> hôte(s) sélectionné(s). Chaque hôte proxy peut avoir une seule Liste de Contrôle d'Accès appliquée.",
    "applyACL": "Appliquer ACL",
    "removeACL": "Supprimer ACL",
    "selectedACLCount": "{{selected}} sur {{total}} sélectionnés",
    "selectAll": "Tout sélectionner",
    "clear": "Effacer",
    "noEnabledACLs": "Aucune liste d'accès activée disponible",
    "removeACLWarning": "Cela supprimera la liste d'accès de tous les {{count}} hôte(s) sélectionné(s).",
    "publicAccessWarning": "Les hôtes deviendront accessibles publiquement.",
    "applyingACLs": "Application des ACLs... ({{current}}/{{total}})",
    "bulkDeleteTitle": "Supprimer {{count}} Hôte(s) Proxy ?",
    "bulkDeleteDescription": "Cette action est irréversible. Une sauvegarde sera créée automatiquement avant la suppression.",
    "hostsToDelete": "Hôtes à supprimer :",
    "backupInfo": "Une sauvegarde automatique sera créée avant la suppression. Vous pouvez restaurer depuis la page Sauvegardes si nécessaire.",
    "creatingBackup": "Création de la sauvegarde...",
    "deletePermanently": "Supprimer définitivement",
    "ferryingNewHost": "Transport du nouvel hôte...",
    "ferryingNewHostSub": "Charon traverse le Styx",
    "guidingChanges": "Guidage des modifications...",
    "guidingChangesSub": "Configuration en transit",
    "returningToShore": "Retour à la rive...",
    "returningToShoreSub": "Départ de l'hôte en cours",
    "ferryingSouls": "Transport de {{count}} âmes...",
    "ferryingSoulsSub": "Opération groupée traversant la rivière",
    "ferryingConfig": "Transport de la configuration...",
    "sslForce": "Forcer SSL",
    "http2Support": "Support HTTP/2",
    "hstsEnabled": "HSTS Activé",
    "hstsSubdomains": "HSTS Sous-domaines",
    "blockExploits": "Bloquer Exploits",
    "websocketSupport": "Support WebSocket",
    "apply": "Appliquer",
    "applyCount": "Appliquer ({{count}})",
    "bulkApplySecurityHeaders": "Profil d'En-têtes de Sécurité",
    "bulkApplySecurityHeadersHelp": "Appliquer un profil d'en-têtes de sécurité à tous les hôtes sélectionnés",
    "noSecurityProfile": "Aucun (Supprimer le Profil)",
    "removeSecurityHeadersWarning": "Cela supprimera le profil d'en-têtes de sécurité de tous les hôtes sélectionnés, ce qui pourrait réduire leur posture de sécurité."
  },
  "certificates": {
    "title": "Certificats SSL",
    "description": "Gérer les certificats SSL/TLS pour vos hôtes proxy",
    "addCertificate": "Ajouter un Certificat",
    "uploadCertificate": "Téléverser un Certificat",
    "domain": "Domaine",
    "status": "Statut",
    "expiresAt": "Expire le",
    "valid": "Valide",
    "pending": "En attente",
    "expired": "Expiré",
    "friendlyName": "Nom convivial",
    "certificatePem": "Certificat (PEM)",
    "privateKeyPem": "Clé Privée (PEM)",
    "uploadSuccess": "Certificat téléversé avec succès",
    "uploadFailed": "Échec du téléversement du certificat",
    "note": "Note",
    "noteText": "Vous pouvez supprimer les certificats personnalisés, les certificats de staging et les certificats de production expirés ou arrivant à expiration qui ne sont associés à aucun hôte proxy. Les certificats de production actifs sont renouvelés automatiquement par Caddy.",
    "provider": "Provider",
    "deleteTitle": "Delete Certificate",
    "deleteConfirmCustom": "This will permanently delete this certificate. A backup will be created first.",
    "deleteConfirmStaging": "This staging certificate will be removed. It will be regenerated on next request.",
    "deleteConfirmExpired": "This expired certificate is no longer active and will be permanently removed.",
    "deleteConfirmExpiring": "This certificate is expiring soon. It will be permanently removed and will not be auto-renewed.",
    "deleteSuccess": "Certificate deleted",
    "deleteFailed": "Failed to delete certificate",
    "deleteInUse": "Cannot delete — certificate is attached to a proxy host",
    "deleteButton": "Delete",
    "bulkSelectAll": "Sélectionner tous les certificats supprimables",
    "selectCert": "Sélectionner le certificat {{name}}",
    "bulkSelectedCount": "{{count}} certificat(s) sélectionné(s)",
    "bulkDeleteTitle": "Supprimer {{count}} Certificat(s)",
    "bulkDeleteDescription": "Supprimer {{count}} certificat(s)",
    "bulkDeleteConfirm": "Les certificats suivants seront définitivement supprimés. Le serveur crée une sauvegarde avant chaque suppression.",
    "bulkDeleteListAriaLabel": "Certificats à supprimer",
    "bulkDeleteButton": "Supprimer {{count}} Certificat(s)",
    "bulkDeleteSuccess": "{{count}} certificat(s) supprimé(s)",
    "bulkDeletePartial": "{{deleted}} supprimé(s), {{failed}} échoué(s)",
    "bulkDeleteFailed": "Impossible de supprimer les certificats",
    "providerStaging": "Test",
    "providerCustom": "Personnalisé",
    "providerExpiredLE": "LE Expiré",
    "providerExpiringLE": "LE Expirant"
  },
  "auth": {
    "login": "Connexion",
    "logout": "Déconnexion",
    "email": "Email",
    "password": "Mot de passe",
    "username": "Nom d'utilisateur",
    "signIn": "Se connecter",
    "signOut": "Se déconnecter",
    "forgotPassword": "Mot de passe oublié?",
    "rememberMe": "Se souvenir de moi",
    "checkingSetup": "Vérification de l'état de configuration...",
    "loggingIn": "Payant le passeur...",
    "loggingInSub": "Votre obole accorde le passage",
    "loginSuccess": "Connexion réussie",
    "loginFailed": "Échec de la connexion",
    "resetPasswordTitle": "Pour réinitialiser votre mot de passe:",
    "resetPasswordInstructions": "Exécutez cette commande sur votre serveur:"
  },
  "errors": {
    "required": "Ce champ est obligatoire",
    "invalidEmail": "Adresse email invalide",
    "passwordTooShort": "Le mot de passe doit contenir au moins 8 caractères",
    "genericError": "Une erreur s'est produite. Veuillez réessayer.",
    "networkError": "Erreur réseau. Veuillez vérifier votre connexion.",
    "unauthorized": "Non autorisé. Veuillez vous reconnecter.",
    "notFound": "Ressource non trouvée",
    "serverError": "Erreur serveur. Veuillez réessayer plus tard."
  },
  "notifications": {
    "saveSuccess": "Modifications enregistrées avec succès",
    "deleteSuccess": "Supprimé avec succès",
    "createSuccess": "Créé avec succès",
    "updateSuccess": "Mis à jour avec succès",
    "saveFailed": "Échec de l'enregistrement des modifications",
    "deleteFailed": "Échec de la suppression",
    "createFailed": "Échec de la création",
    "updateFailed": "Échec de la mise à jour",
    "partialFailed": "Terminé avec {{count}} erreur(s)"
  },
  "security": {
    "title": "Sécurité",
    "description": "Configurer les couches de sécurité pour votre proxy inverse",
    "cerberusDashboard": "Tableau de bord Cerberus",
    "cerberusActive": "Actif",
    "cerberusDisabled": "Désactivé",
    "cerberusReadyMessage": "Toutes les têtes de sécurité sont prêtes pour la configuration",
    "cerberusDisabledMessage": "Activez Cerberus dans les Paramètres Système pour activer les fonctionnalités de sécurité",
    "featuresUnavailable": "Fonctionnalités de Sécurité Non Disponibles",
    "featuresUnavailableMessage": "Cerberus alimente CrowdSec, Coraza WAF, le Contrôle d'Accès et la Limitation de Débit. Activez l'interrupteur Cerberus dans les Paramètres Système pour activer ces fonctionnalités.",
    "learnMore": "En savoir plus",
    "adminWhitelist": "Liste Blanche Admin",
    "adminWhitelistDescription": "Configurer les adresses IP qui contournent les vérifications de sécurité",
    "commaSeparatedCIDR": "CIDR/IPs séparés par des virgules",
    "generateToken": "Générer un Jeton",
    "generateTokenTooltip": "Générer un jeton d'urgence pour un accès d'urgence",
    "enableCerberusFirst": "Activez d'abord Cerberus",
    "layer": "Couche",
    "crowdsec": {
      "title": "CrowdSec",
      "subtitle": "Réputation IP et Renseignements sur les Menaces",
      "badge": "IDS",
      "enabledDescription": "Protège contre: Attaquants connus, botnets, force brute",
      "disabledDescription": "Système de Prévention des Intrusions alimenté par le renseignement communautaire sur les menaces",
      "processRunning": "En cours d'exécution (PID {{pid}})",
      "processStopped": "Processus arrêté",
      "starting": "Démarrage...",
      "toggleTooltip": "Basculer la protection CrowdSec",
      "copyFailed": "Échec de la copie de la clé API",
      "keyWarning": {
        "title": "Clé API CrowdSec Mise à Jour",
        "description": "Votre clé API configurée a été rejetée par CrowdSec LAPI. Une nouvelle clé a été automatiquement générée pour restaurer la protection.",
        "instructions": "Mettez à jour votre docker-compose.yml avec la nouvelle clé pour éviter une ré-inscription au redémarrage du conteneur :",
        "copyButton": "Copier",
        "copied": "Clé copiée dans le presse-papiers",
        "restartNote": "Après avoir mis à jour docker-compose.yml, redémarrez le conteneur pour que le changement prenne effet."
      },
      "tabs": {
        "config": "Configuration",
        "dashboard": "Tableau de bord"
      },
      "dashboard": {
        "totalDecisions": "Décisions Totales",
        "activeDecisions": "Décisions Actives",
        "uniqueIPs": "IPs Uniques",
        "topScenario": "Scénario Principal",
        "lapiUnavailable": "LAPI indisponible",
        "currentlyEnforced": "Actuellement appliquées",
        "distinctAttackers": "Attaquants distincts",
        "noData": "Aucune donnée",
        "summaryError": "Échec du chargement des données récapitulatives.",
        "decisionTimeline": "Chronologie des Décisions",
        "timelineChartLabel": "Graphique en aires montrant les bannissements et captchas au fil du temps",
        "timelineError": "Échec du chargement des données de chronologie.",
        "noTimelineData": "Aucune donnée de décision pour la période sélectionnée.",
        "bans": "Bannissements",
        "captchas": "Captchas",
        "topAttackingIPs": "IPs Attaquantes Principales",
        "topIPsChartLabel": "Graphique à barres horizontal montrant les IPs attaquantes principales par nombre de décisions",
        "topIPsError": "Échec du chargement des données des IPs principales.",
        "noTopIPs": "Aucune IP attaquante dans la période sélectionnée.",
        "decisions": "Décisions",
        "scenarioBreakdown": "Répartition des Scénarios",
        "scenarioChartLabel": "Graphique en anneau montrant la distribution des scénarios par nombre de décisions",
        "scenariosError": "Échec du chargement des données de scénarios.",
        "noScenarios": "Aucune donnée de scénario pour la période sélectionnée.",
        "scenarioLegend": "Légende des scénarios",
        "activeDecisionsTable": "Décisions Actives",
        "decisionsError": "Échec du chargement des décisions.",
        "noDecisions": "Aucune décision active.",
        "colIP": "IP",
        "colScenario": "Scénario",
        "colDuration": "Durée",
        "colType": "Type",
        "colOrigin": "Origine",
        "colRemaining": "Restant",
        "sortBy": "Trier par",
        "refresh": "Actualiser",
        "recentAlerts": "Alertes Récentes",
        "alertsCount": "{{count}} au total",
        "alertsError": "Échec du chargement des alertes.",
        "noAlerts": "Aucune alerte pour la période sélectionnée.",
        "colTime": "Heure",
        "colEvents": "Événements",
        "alertsPagination": "Pagination des alertes",
        "pageInfo": "Page {{current}} sur {{total}}",
        "previousPage": "Page précédente",
        "nextPage": "Page suivante",
        "previous": "Précédent",
        "next": "Suivant",
        "export": "Exporter",
        "exportDecisions": "Exporter les décisions",
        "exportFormat": "Format d'export",
        "exportCSV": "Exporter en CSV",
        "exportJSON": "Exporter en JSON",
        "exportError": "Échec de l'export. Veuillez réessayer.",
        "timeRange": {
          "1h": "1h",
          "6h": "6h",
          "24h": "24h",
          "7d": "7d",
          "30d": "30d"
        }
      }
    },
    "acl": {
      "title": "Contrôle d'Accès",
      "subtitle": "Filtrage basé sur l'IP et la géolocalisation",
      "badge": "ACL",
      "description": "Protège contre: IPs non autorisées, attaques géo-basées, menaces internes",
      "manageLists": "Gérer les Listes",
      "toggleTooltip": "Basculer le Contrôle d'Accès"
    },
    "waf": {
      "title": "Coraza WAF",
      "subtitle": "Inspection et filtrage des requêtes",
      "badge": "WAF",
      "enabledDescription": "Protège contre: Injection SQL, XSS, RCE, exploits zero-day*",
      "disabledDescription": "Pare-feu d'Application Web avec OWASP Core Rule Set",
      "toggleTooltip": "Basculer Coraza WAF"
    },
    "rateLimit": {
      "title": "Limitation de Débit",
      "subtitle": "Contrôle du volume de requêtes",
      "badge": "Rate",
      "description": "Protège contre: Attaques DDoS, bourrage de credentials, abus d'API",
      "toggleTooltip": "Basculer la Limitation de Débit"
    },
    "notifications": "Notifications",
    "threeHeadsTurn": "Trois têtes se tournent...",
    "cerberusConfigUpdating": "Configuration de Cerberus en cours de mise à jour",
    "summoningGuardian": "Invocation du gardien...",
    "crowdsecStarting": "CrowdSec démarre",
    "guardianRests": "Le gardien se repose...",
    "crowdsecStopping": "CrowdSec s'arrête",
    "strengtheningGuard": "Renforcement de la garde...",
    "wardsActivating": "Protections en cours d'activation"
  },
  "accessLists": {
    "title": "Listes d'Accès",
    "description": "Gérer le contrôle d'accès basé sur l'IP",
    "createAccessList": "Créer une Liste d'Accès",
    "editAccessList": "Modifier la Liste d'Accès",
    "deleteAccessList": "Supprimer la Liste d'Accès",
    "deleteSelected": "Supprimer ({{count}})",
    "bestPractices": "Meilleures Pratiques",
    "testIP": "Tester IP",
    "testIPAddress": "Tester l'Adresse IP",
    "ipAddress": "Adresse IP",
    "accessList": "Liste d'Accès",
    "rfc1918Only": "RFC1918 Uniquement",
    "cgnatWarning": {
      "title": "Avertissement CGNAT et Réseau Mobile",
      "message": "Si vous utilisez T-Mobile 5G Home Internet, Starlink ou d'autres connexions CGNAT, le blocage géographique peut ne pas fonctionner comme prévu. Votre IP peut sembler provenir d'un centre de données, pas de votre emplacement physique.",
      "solutionsTitle": "Solutions si vous êtes bloqué:",
      "solution1": "Accédez via l'IP du réseau local (192.168.x.x) - Les ACLs ne s'appliquent pas aux IPs locales",
      "solution2": "Ajoutez votre IP actuelle à une ACL de liste blanche",
      "solution3": "Utilisez \"Tester IP\" ci-dessous pour vérifier quelle IP le serveur voit",
      "solution4": "Désactivez temporairement l'ACL pour regagner l'accès",
      "solution5": "Connectez-vous via VPN avec une adresse IP connue"
    },
    "deleteConfirmTitle": "Supprimer la Liste d'Accès",
    "deleteConfirmMessage": "Êtes-vous sûr de vouloir supprimer \"{{name}}\"? Une sauvegarde sera créée avant la suppression.",
    "bulkDeleteConfirmTitle": "Supprimer les Listes d'Accès Sélectionnées",
    "bulkDeleteConfirmMessage": "Êtes-vous sûr de vouloir supprimer {{count}} liste(s) d'accès? Une sauvegarde sera créée avant la suppression.",
    "deleteItems": "Supprimer {{count}} Éléments",
    "deleting": "Suppression...",
    "noAccessLists": "Aucune Liste d'Accès",
    "noAccessListsDescription": "Créez votre première liste d'accès pour contrôler qui peut accéder à vos services"
  },
  "rateLimiting": {
    "title": "Configuration de la Limitation de Débit",
    "description": "Contrôlez les taux de requêtes pour protéger vos services contre les abus",
    "aboutTitle": "À Propos de la Limitation de Débit",
    "aboutDescription": "La limitation de débit aide à protéger vos services contre les abus, les attaques par force brute et la consommation excessive de ressources. Configurez des limites par adresse IP client.",
    "currentlyActive": "Actuellement Actif",
    "currentConfig": "{{requests}} requêtes/sec • Rafale: {{burst}} • Fenêtre: {{window}}s",
    "enableRateLimiting": "Activer la Limitation de Débit",
    "enabledMessage": "La limitation de débit est active et protège vos services",
    "disabledMessage": "Activez pour commencer à limiter les taux de requêtes",
    "configuration": "Configuration",
    "requestsPerSecond": "Requêtes par Seconde",
    "requestsPerSecondHelper": "Maximum de requêtes autorisées par seconde par client",
    "burst": "Rafale",
    "burstHelper": "Autoriser de courtes rafales au-dessus de la limite de débit",
    "windowSeconds": "Fenêtre (secondes)",
    "windowHelper": "Fenêtre de temps pour les calculs de taux",
    "rateLimitingDisabled": "Limitation de Débit Désactivée",
    "enableToConfigureMessage": "Activez la limitation de débit pour configurer les limites de requêtes et protéger vos services",
    "adjustingGates": "Ajustement des portes...",
    "configurationUpdating": "Configuration de la limitation de débit en cours de mise à jour"
  },
  "wafConfig": {
    "title": "Configuration WAF",
    "description": "Gérer les ensembles de règles du Pare-feu d'Application Web Coraza",
    "addRuleSet": "Ajouter un Ensemble de Règles",
    "createRuleSet": "Créer un Ensemble de Règles",
    "editRuleSet": "Modifier l'Ensemble de Règles",
    "updateRuleSet": "Mettre à jour l'Ensemble de Règles",
    "deleteRuleSet": "Supprimer l'Ensemble de Règles",
    "ruleSyntax": "Syntaxe des Règles",
    "aboutTitle": "À Propos des Ensembles de Règles WAF",
    "aboutDescription": "Les ensembles de règles définissent des règles ModSecurity/Coraza qui inspectent et filtrent les requêtes HTTP. Le WAF active automatiquement SecRuleEngine On et SecRequestBodyAccess On pour vos règles.",
    "deleteConfirmTitle": "Supprimer l'Ensemble de Règles",
    "deleteConfirmMessage": "Êtes-vous sûr de vouloir supprimer \"{{name}}\"? Cette action est irréversible.",
    "noRuleSets": "Aucun Ensemble de Règles",
    "noRuleSetsDescription": "Créez votre premier ensemble de règles WAF pour protéger vos services contre les attaques web",
    "ruleSetName": "Nom de l'Ensemble de Règles",
    "mode": "Mode",
    "blocking": "Blocage",
    "detection": "Détection",
    "detectionOnly": "Détection Uniquement",
    "blockingDescription": "Les requêtes malveillantes seront bloquées avec HTTP 403",
    "detectionDescription": "Les requêtes malveillantes seront journalisées mais non bloquées",
    "sourceUrl": "URL Source (optionnel)",
    "sourceUrlHelper": "URL pour récupérer les règles. Laissez vide pour utiliser le contenu en ligne.",
    "ruleContent": "Contenu des Règles",
    "ruleContentHelper": "Syntaxe de règles ModSecurity/Coraza. Chaque SecRule doit être sur sa propre ligne.",
    "source": "Source",
    "url": "URL",
    "inline": "En ligne",
    "lastUpdated": "Dernière Mise à Jour",
    "rulesCount": "{{count}} règle(s)",
    "quickStartPreset": "Démarrage Rapide avec Préréglage",
    "choosePreset": "Choisir un préréglage...",
    "cerberusAwakens": "Cerberus s'éveille...",
    "guardianWatches": "Le gardien des portes monte la garde",
    "forgingDefenses": "Forge de nouvelles défenses...",
    "rulesInscribing": "Règles de sécurité en cours d'inscription",
    "loweringBarrier": "Abaissement d'une barrière...",
    "defenseRemoved": "Couche de défense supprimée",
    "loadingWaf": "Chargement de la configuration WAF...",
    "loadingFailed": "Échec du chargement de la configuration WAF"
  },
  "uptime": {
    "title": "Surveillance de la Disponibilité",
    "description": "Surveillez la santé et la disponibilité de vos services",
    "autoRefresh": "Actualisation automatique toutes les 30s",
    "noMonitors": "Aucun moniteur trouvé. Ajoutez un Hôte Proxy ou un Serveur Distant pour commencer la surveillance.",
    "proxyHosts": "Hôtes Proxy",
    "remoteServers": "Serveurs Distants",
    "otherMonitors": "Autres Moniteurs",
    "configureMonitor": "Configurer le Moniteur",
    "monitorName": "Nom",
    "maxRetries": "Tentatives Maximum",
    "maxRetriesHelper": "Nombre d'échecs consécutifs avant d'envoyer une alerte.",
    "checkInterval": "Intervalle de Vérification (secondes)",
    "saveChanges": "Enregistrer les Modifications",
    "saving": "Enregistrement...",
    "latency": "Latence",
    "lastCheck": "Dernière Vérification",
    "never": "Jamais",
    "paused": "EN PAUSE",
    "pause": "Mettre en Pause",
    "unpause": "Reprendre",
    "triggerCheck": "Déclencher une vérification de santé immédiate",
    "healthCheckTriggered": "Vérification de santé déclenchée",
    "monitorDeleted": "Moniteur supprimé",
    "deleteConfirm": "Supprimer ce moniteur? Cette action est irréversible.",
    "pending": "VÉRIFICATION...",
    "pendingFirstCheck": "En attente de la première vérification...",
    "urlPlaceholder": "https://example.com",
    "urlPlaceholderHttp": "https://example.com",
    "urlPlaceholderTcp": "192.168.1.1:8080",
    "urlHelperHttp": "Saisissez l'URL complète avec le schéma (ex. https://example.com)",
    "urlHelperTcp": "Saisissez sous la forme hôte:port sans préfixe de schéma (ex. 192.168.1.1:8080 ou nom-d-hôte:22)",
    "invalidTcpFormat": "Les moniteurs TCP nécessitent le format hôte:port. Supprimez le préfixe de schéma (ex. 192.168.1.1:8080 et non tcp://192.168.1.1:8080)."
  },
  "domains": {
    "title": "Domaines",
    "description": "Gérez vos domaines",
    "addDomain": "Ajouter un Domaine",
    "deleteDomain": "Supprimer le Domaine",
    "domainName": "Nom de Domaine",
    "placeholder": "exemple.com",
    "adding": "Ajout en cours...",
    "added": "Ajouté le {{date}}",
    "deleteConfirm": "Êtes-vous sûr de vouloir supprimer ce domaine?",
    "createFailed": "Échec de la création du domaine",
    "deleteFailed": "Échec de la suppression du domaine",
    "loadError": "Erreur lors du chargement des domaines"
  },
  "remoteServers": {
    "title": "Serveurs Distants",
    "description": "Gérez les serveurs backend pour vos hôtes proxy",
    "addServer": "Ajouter un Serveur",
    "editServer": "Modifier le Serveur",
    "deleteServer": "Supprimer le Serveur Distant",
    "noServers": "Aucun Serveur Distant",
    "noServersDescription": "Ajoutez des serveurs pour sélectionner rapidement les backends lors de la création d'hôtes proxy",
    "columnName": "Nom",
    "columnProvider": "Fournisseur",
    "columnHost": "Hôte",
    "columnPort": "Port",
    "host": "Hôte",
    "port": "Port",
    "user": "Utilisateur",
    "gridView": "Vue en grille",
    "listView": "Vue en liste",
    "deleteConfirm": "Êtes-vous sûr de vouloir supprimer \"{{name}}\"? Cette action est irréversible.",
    "deleting": "Suppression..."
  },
  "notificationProviders": {
    "title": "Fournisseurs de Notifications",
    "description": "Gérez les fournisseurs de notifications et les modèles",
    "addProvider": "Ajouter un Fournisseur",
    "addNewProvider": "Ajouter un Nouveau Fournisseur",
    "providerName": "Nom",
    "urlWebhook": "URL / Webhook",
    "urlRequired": "L'URL est requise",
    "invalidUrl": "Veuillez entrer une URL valide commençant par http:// ou https://",
    "genericWebhook": "Webhook Générique",
    "customWebhook": "Webhook Personnalisé (JSON)",
    "jsonPayloadTemplate": "Modèle de Charge JSON",
    "minimalTemplate": "Modèle Minimal",
    "detailedTemplate": "Modèle Détaillé",
    "customTemplate": "Personnalisé",
    "template": "Modèle",
    "availableVariables": "Variables disponibles : .Title, .Message, .Status, .Name, .Latency, .Time. Charge utile Discord uniquement pour ce déploiement.",
    "notificationEvents": "Événements de Notification",
    "proxyHosts": "Hôtes Proxy",
    "remoteServers": "Serveurs Distants",
    "domainsNotify": "Domaines",
    "certificates": "Certificats",
    "uptime": "Disponibilité",
    "preview": "Aperçu",
    "previewError": "Erreur d'Aperçu",
    "previewResult": "Résultat de l'Aperçu",
    "externalTemplates": "Modèles Externes",
    "manageTemplates": "Gérer les Modèles",
    "hideTemplates": "Masquer",
    "newTemplate": "Nouveau Modèle",
    "createTemplate": "Créer un Modèle",
    "templateType": "Type de Modèle",
    "minimal": "Minimal",
    "detailed": "Détaillé",
    "custom": "Personnalisé",
    "configJson": "Config (JSON/modèle)",
    "noExternalTemplates": "Aucun modèle externe. Utilisez le formulaire ci-dessus pour en créer un.",
    "deleteTemplateConfirm": "Supprimer le modèle?",
    "sendTest": "Envoyer une Notification de Test",
    "testSent": "Notification de test envoyée!",
    "testFailed": "Échec de l'envoi du test",
    "deleteConfirm": "Êtes-vous sûr?",
    "noProviders": "Aucun fournisseur de notifications configuré.",
    "deprecatedReadOnly": "Obsolète (lecture seule)",
    "nonDispatch": "Non diffusé",
    "deprecatedProviderMessage": "Ce type de fournisseur hérité est obsolète pour ce déploiement. Il reste visible pour l’audit, ne peut pas être modifié et n’enverra pas de notifications.",
    "securityEventSubscriptions": "Security Event Subscriptions",
    "securityEventSubscriptionsHelp": "Select security events for each provider in this form.",
    "wafBlocks": "WAF Blocks",
    "wafBlocksHelp": "When the Web Application Firewall blocks a request.",
    "aclDenials": "ACL Denials",
    "aclDenialsHelp": "When an IP is denied by Access Control Lists.",
    "rateLimitHits": "Rate Limit Hits",
    "rateLimitHitsHelp": "When a client exceeds rate limiting thresholds.",
    "webhookUrl": "Webhook URL (Optional)",
    "webhookUrlHelp": "POST requests will be sent to this URL when security events occur.",
    "emailRecipients": "Email Recipients (Optional)",
    "emailRecipientsHelp": "Comma-separated email addresses.",
    "ntfy": "Ntfy",
    "ntfyTopicUrl": "Topic URL",
    "ntfyAccessToken": "Access Token (optional)",
    "ntfyAccessTokenPlaceholder": "Enter your Ntfy access token",
    "ntfyAccessTokenHelp": "Your Ntfy access token for authenticated topics. Required for password-protected topics on self-hosted instances. The token is stored securely and separately."
  },
  "users": {
    "title": "Gestion des Utilisateurs",
    "inviteUser": "Inviter un Utilisateur",
    "inviteSent": "Email d'invitation envoyé",
    "inviteCreated": "Utilisateur invité - copiez le lien d'invitation ci-dessous",
    "inviteFailed": "Échec de l'invitation de l'utilisateur",
    "inviteLinkCopied": "Lien d'invitation copié dans le presse-papiers",
    "inviteSuccess": "Utilisateur Invité avec Succès",
    "inviteEmailSent": "Un email d'invitation a été envoyé à l'utilisateur.",
    "inviteEmailNotSent": "L'email n'a pas été envoyé. Partagez le lien d'invitation manuellement.",
    "inviteLink": "Lien d'Invitation",
    "copyInviteLink": "Copier le lien d'invitation",
    "expires": "Expire",
    "done": "Terminé",
    "emailAddress": "Adresse Email",
    "role": "Rôle",
    "roleUser": "Utilisateur",
    "roleAdmin": "Administrateur",
    "rolePassthrough": "Passthrough",
    "roleUserDescription": "Peut accéder uniquement aux hôtes proxy autorisés.",
    "roleAdminDescription": "Accès complet à toutes les fonctionnalités et paramètres.",
    "rolePassthroughDescription": "Accès proxy uniquement — aucune interface de gestion.",
    "permissionMode": "Mode de Permission",
    "allowAllBlacklist": "Tout Autoriser (Liste Noire)",
    "denyAllWhitelist": "Tout Refuser (Liste Blanche)",
    "allowAllDescription": "L'utilisateur peut accéder à tous les hôtes SAUF ceux sélectionnés ci-dessous",
    "denyAllDescription": "L'utilisateur peut UNIQUEMENT accéder aux hôtes sélectionnés ci-dessous",
    "blockedHosts": "Hôtes Bloqués",
    "allowedHosts": "Hôtes Autorisés",
    "noProxyHosts": "Aucun hôte proxy configuré",
    "sendInvite": "Envoyer l'Invitation",
    "editPermissions": "Modifier les Permissions",
    "permissionsUpdated": "Permissions mises à jour",
    "permissionsUpdateFailed": "Échec de la mise à jour des permissions",
    "savePermissions": "Enregistrer les Permissions",
    "userUpdated": "Utilisateur mis à jour",
    "userUpdateFailed": "Échec de la mise à jour de l'utilisateur",
    "userDeleted": "Utilisateur supprimé",
    "userDeleteFailed": "Échec de la suppression de l'utilisateur",
    "columnUser": "Utilisateur",
    "columnRole": "Rôle",
    "columnPermissions": "Permissions",
    "noName": "(Sans nom)",
    "pendingInvite": "Invitation en Attente",
    "inviteExpired": "Invitation Expirée",
    "whitelist": "Liste Blanche",
    "blacklist": "Liste Noire",
    "deleteConfirm": "Êtes-vous sûr de vouloir supprimer cet utilisateur?",
    "deleteUser": "Supprimer l'utilisateur",
    "inviteUrlPreview": "Aperçu du lien d'invitation",
    "inviteUrlWarning": "L'URL de l'application n'est pas configurée. Ce lien peut ne pas fonctionner pour les utilisateurs externes.",
    "configureApplicationUrl": "Configurer l'URL de l'application",
    "resendInvite": "Renvoyer l'invitation",
    "inviteResent": "Invitation renvoyée avec succès",
    "inviteCreatedNoEmail": "Nouvelle invitation créée. L'e-mail n'a pas pu être envoyé.",
    "resendFailed": "Échec du renvoi de l'invitation",
    "myProfile": "Mon Profil",
    "editUser": "Modifier l'utilisateur",
    "changePassword": "Changer le mot de passe",
    "currentPassword": "Mot de passe actuel",
    "newPassword": "Nouveau mot de passe",
    "confirmPassword": "Confirmer le mot de passe",
    "passwordChanged": "Mot de passe changé avec succès",
    "passwordChangeFailed": "Échec du changement de mot de passe",
    "passwordMismatch": "Les mots de passe ne correspondent pas",
    "apiKey": "Clé API",
    "regenerateApiKey": "Régénérer la clé API",
    "apiKeyRegenerated": "Clé API régénérée",
    "apiKeyRegenerateFailed": "Échec de la régénération de la clé API",
    "apiKeyConfirm": "Êtes-vous sûr ? La clé API actuelle sera invalidée.",
    "profileUpdated": "Profil mis à jour avec succès",
    "profileUpdateFailed": "Échec de la mise à jour du profil"
  },
  "dashboard": {
    "title": "Tableau de bord",
    "description": "Vue d'ensemble de votre proxy inverse Charon",
    "proxyHosts": "Hôtes Proxy",
    "remoteServers": "Serveurs Distants",
    "certificates": "Certificats",
    "certificateStatus": "État des Certificats",
    "accessLists": "Listes d'Accès",
    "systemStatus": "État du Système",
    "healthy": "En bonne santé",
    "unhealthy": "Pas en bonne santé",
    "pendingCertificates": "Certificats en attente",
    "allCertificatesValid": "Tous les certificats sont valides",
    "activeHosts": "{{count}} actif",
    "activeServers": "{{count}} actif",
    "activeLists": "{{count}} actif",
    "validCerts": "{{count}} valide"
  },
  "setup": {
    "welcomeTitle": "Bienvenue sur Charon",
    "welcomeDescription": "Créez votre compte administrateur pour commencer.",
    "nameLabel": "Nom",
    "namePlaceholder": "Utilisateur Admin",
    "emailLabel": "Adresse Email",
    "emailPlaceholder": "admin@exemple.com",
    "invalidEmail": "Veuillez entrer une adresse email valide",
    "passwordLabel": "Mot de passe",
    "createAdminButton": "Créer le Compte Admin",
    "setupFailed": "Échec de la configuration"
  },
  "acceptInvite": {
    "title": "Accepter l'invitation",
    "invalidLink": "Lien invalide",
    "invalidLinkMessage": "Ce lien d'invitation est invalide ou incomplet.",
    "goToLogin": "Aller à la connexion",
    "validating": "Validation de l'invitation...",
    "invitationInvalid": "Invitation invalide",
    "expiredOrInvalid": "Cette invitation a expiré ou est invalide.",
    "accountCreated": "Compte créé !",
    "accountCreatedMessage": "Votre compte a été configuré avec succès. Redirection vers la connexion...",
    "youveBeenInvited": "Vous avez été invité !",
    "completeSetup": "Complétez la configuration de votre compte pour",
    "yourName": "Votre nom",
    "namePlaceholder": "Jean Dupont",
    "confirmPassword": "Confirmer le mot de passe",
    "passwordsDoNotMatch": "Les mots de passe ne correspondent pas",
    "createAccount": "Créer un compte",
    "welcomeMessage": "Bienvenue, {{email}} ! Vous pouvez maintenant vous connecter.",
    "acceptFailed": "Échec de l'acceptation de l'invitation"
  },
  "tasks": {
    "title": "Tâches",
    "description": "Gérer les tâches système et voir les journaux"
  },
  "backups": {
    "title": "Sauvegardes",
    "description": "Gérer les sauvegardes de la base de données",
    "configuration": "Configuration",
    "intervalDays": "Intervalle de Sauvegarde (Jours)",
    "retentionDays": "Période de Rétention (Jours)",
    "saveSettings": "Enregistrer les Paramètres",
    "settingsSaved": "Paramètres de sauvegarde enregistrés",
    "settingsFailed": "Échec de l'enregistrement des paramètres: {{error}}",
    "createBackup": "Créer une Sauvegarde",
    "createSuccess": "Sauvegarde créée avec succès",
    "createFailed": "Échec de la création de la sauvegarde: {{error}}",
    "restoreBackup": "Restaurer la Sauvegarde",
    "restore": "Restaurer",
    "restoreSuccess": "Sauvegarde restaurée avec succès. Veuillez redémarrer le conteneur.",
    "restoreFailed": "Échec de la restauration de la sauvegarde: {{error}}",
    "restoreConfirmMessage": "Êtes-vous sûr de vouloir restaurer cette sauvegarde? Les données actuelles seront écrasées. Vous devrez redémarrer le conteneur après la restauration.",
    "deleteBackup": "Supprimer la Sauvegarde",
    "deleteSuccess": "Sauvegarde supprimée avec succès",
    "deleteFailed": "Échec de la suppression de la sauvegarde: {{error}}",
    "deleteConfirmMessage": "Êtes-vous sûr de vouloir supprimer \"{{filename}}\"? Cette action est irréversible.",
    "download": "Télécharger",
    "filename": "Nom du Fichier",
    "size": "Taille",
    "createdAt": "Créé le",
    "auto": "Auto",
    "manual": "Manuel",
    "noBackups": "Aucune Sauvegarde",
    "noBackupsDescription": "Créez votre première sauvegarde pour protéger votre configuration"
  },
  "logs": {
    "title": "Journaux",
    "description": "Voir les journaux système et d'accès",
    "logFiles": "Fichiers Journaux",
    "noLogFiles": "Aucun fichier journal trouvé",
    "noLogSelected": "Aucun Journal Sélectionné",
    "selectLogDescription": "Sélectionnez un fichier journal dans la liste pour voir son contenu",
    "showingEntries": "Affichage de {{from}} à {{to}} sur {{total}} entrées",
    "pageOf": "Page {{current}} sur {{total}}"
  },
  "account": {
    "title": "Paramètres du Compte",
    "profile": "Profil",
    "profileDescription": "Mettez à jour vos informations personnelles.",
    "saveProfile": "Enregistrer le Profil",
    "profileUpdated": "Profil mis à jour avec succès",
    "profileUpdateFailed": "Échec de la mise à jour du profil: {{error}}",
    "certificateEmail": "Email du Certificat",
    "certificateEmailDescription": "Cet email est utilisé pour les notifications et la récupération Let's Encrypt.",
    "useAccountEmail": "Utiliser mon email de compte ({{email}})",
    "customEmail": "Email Personnalisé",
    "saveCertificateEmail": "Enregistrer l'Email du Certificat",
    "certEmailUpdated": "Email du certificat mis à jour",
    "certEmailUpdateFailed": "Échec de la mise à jour de l'email du certificat: {{error}}",
    "changePassword": "Changer le Mot de Passe",
    "changePasswordDescription": "Mettez à jour le mot de passe de votre compte pour plus de sécurité.",
    "currentPassword": "Mot de Passe Actuel",
    "newPassword": "Nouveau Mot de Passe",
    "confirmNewPassword": "Confirmer le Nouveau Mot de Passe",
    "updatePassword": "Mettre à Jour le Mot de Passe",
    "passwordsDoNotMatch": "Les mots de passe ne correspondent pas",
    "passwordUpdated": "Mot de passe mis à jour avec succès",
    "passwordUpdateFailed": "Échec de la mise à jour du mot de passe",
    "apiKey": "Clé API",
    "apiKeyDescription": "Utilisez cette clé pour vous authentifier avec l'API de manière programmatique. Gardez-la secrète!",
    "copyToClipboard": "Copier dans le presse-papiers",
    "regenerateApiKey": "Régénérer la Clé API",
    "apiKeyCopied": "Clé API copiée dans le presse-papiers",
    "apiKeyRegenerated": "Clé API régénérée avec succès",
    "apiKeyRegenerateFailed": "Échec de la régénération de la clé API: {{error}}",
    "securityNotice": "Avis de Sécurité",
    "securityNoticeMessage": "Ne partagez jamais votre clé API ou votre mot de passe avec qui que ce soit. Si vous pensez que vos identifiants ont été compromis, régénérez immédiatement votre clé API.",
    "confirmPassword": "Confirmer le Mot de Passe",
    "confirmPasswordDescription": "Veuillez entrer votre mot de passe actuel pour confirmer ces modifications.",
    "enterPassword": "Entrez votre mot de passe",
    "confirmAndUpdate": "Confirmer et Mettre à Jour",
    "updateCertEmailTitle": "Mettre à Jour l'Email du Certificat?",
    "updateCertEmailDescription": "Vous changez votre email de compte en {{email}}. Voulez-vous également utiliser ce nouvel email pour les certificats SSL?",
    "yesUpdateCertEmail": "Oui, mettre à jour l'email du certificat aussi",
    "noKeepEmail": "Non, continuer à utiliser {{email}}"
  },
  "importCaddy": {
    "title": "Importer un Caddyfile",
    "enterCaddyfileContent": "Veuillez entrer le contenu du Caddyfile",
    "cancelConfirm": "Êtes-vous sûr de vouloir annuler cette importation ?",
    "noDomainsFound": "Aucun domaine trouvé dans le Caddyfile",
    "emptyFileWarning": "Le fichier importé semble être vide ou ne contient aucune directive reverse_proxy valide. Veuillez vérifier le contenu du fichier ci-dessous.",
    "uploadOrPaste": "Téléverser ou coller un Caddyfile",
    "description": "Importez un Caddyfile existant pour créer automatiquement des configurations d'hôte proxy. Le système détectera les conflits et vous permettra de réviser les modifications avant de valider.",
    "uploadCaddyfile": "Téléverser un Caddyfile",
    "orPasteContent": "ou coller le contenu",
    "caddyfileContent": "Contenu du Caddyfile",
    "processing": "Traitement en cours...",
    "parseAndReview": "Analyser et réviser",
    "multiSiteImport": "Importation multi-site"
  },
  "importCrowdSec": {
    "title": "Paquets de Configuration CrowdSec",
    "description": "Téléversez un paquet tar.gz ou zip. Une sauvegarde est créée avant l'importation pour vous permettre de revenir en arrière si nécessaire. Exportez le paquet actuel depuis le tableau de bord Cerberus ou la page de configuration CrowdSec.",
    "import": "Importer",
    "configImported": "Configuration CrowdSec importée",
    "importFailed": "Échec de l'importation : {{error}}",
    "creatingBackup": "Création de la sauvegarde...",
    "importing": "Importation de CrowdSec..."
  },
  "systemSettings": {
    "title": "Paramètres Système",
    "settingsSaved": "Paramètres système enregistrés",
    "settingsFailed": "Échec de l'enregistrement des paramètres : {{error}}",
    "featureFlagUpdated": "Flag de fonctionnalité mis à jour",
    "featureFlagFailed": "Échec de la mise à jour du flag : {{error}}",
    "updatingFeatures": "Mise à jour des fonctionnalités...",
    "applyingChanges": "Application des modifications de configuration",
    "pleaseWait": "Veuillez patienter",
    "saveSettings": "Enregistrer les Paramètres",
    "features": {
      "title": "Fonctionnalités",
      "description": "Activer ou désactiver les fonctionnalités optionnelles pour votre instance Charon.",
      "cerberus": "Suite de Sécurité Cerberus",
      "cerberusTooltip": "Fonctionnalités de sécurité avancées incluant WAF, Listes d'Accès, Limitation de Débit et CrowdSec.",
      "crowdsecConsole": "Inscription Console CrowdSec",
      "crowdsecConsoleTooltip": "Permettre l'inscription de ce nœud avec la Console CrowdSec pour la gestion centralisée de flotte.",
      "uptimeMonitoring": "Surveillance de Disponibilité",
      "uptimeMonitoringTooltip": "Surveiller la disponibilité de vos hôtes proxy et serveurs distants."
    },
    "general": {
      "title": "Configuration Générale",
      "description": "Configurer les préférences de Caddy et de l'interface.",
      "caddyAdminApi": "Point d'Accès API Admin Caddy",
      "caddyAdminApiHelper": "URL vers l'API admin de Caddy (généralement sur le port 2019)",
      "sslProvider": "Fournisseur SSL",
      "selectSslProvider": "Sélectionner le fournisseur SSL",
      "sslAuto": "Auto (Recommandé)",
      "sslLetsEncryptProd": "Let's Encrypt (Production)",
      "sslLetsEncryptStaging": "Let's Encrypt (Test)",
      "sslZeroSSL": "ZeroSSL",
      "sslProviderHelper": "Choisissez l'Autorité de Certification. 'Auto' utilise Let's Encrypt avec ZeroSSL en secours.",
      "domainLinkBehavior": "Comportement des Liens de Domaine",
      "selectLinkBehavior": "Sélectionner le comportement du lien",
      "sameTab": "Même Onglet",
      "newTab": "Nouvel Onglet (Par défaut)",
      "newWindow": "Nouvelle Fenêtre",
      "domainLinkBehaviorHelper": "Contrôle comment les liens de domaine s'ouvrent dans la liste des Hôtes Proxy.",
      "keepaliveIdle": "Keepalive Idle (Optionnel)",
      "keepaliveIdleHelper": "Durée Caddy optionnelle (ex. 2m, 30s). Laissez vide pour conserver les valeurs par défaut du backend.",
      "keepaliveIdleError": "Entrez une durée valide (par exemple : 30s, 2m, 1h).",
      "keepaliveCount": "Keepalive Count (Optionnel)",
      "keepaliveCountHelper": "Nombre maximal optionnel de sondes keepalive (1-1000). Laissez vide pour conserver les valeurs par défaut du backend.",
      "keepaliveCountError": "Entrez un nombre entier entre 1 et 1000.",
      "keepaliveValidationFailed": "Les paramètres keepalive contiennent des valeurs invalides.",
      "languageHelper": "Sélectionnez votre langue préférée. Les modifications prennent effet immédiatement."
    },    "applicationUrl": {
      "title": "URL de l'application",
      "description": "Configurez l'URL publique utilisée pour les liens et les e-mails destinés aux utilisateurs.",
      "label": "URL de l'application",
      "helper": "L'URL publique où les utilisateurs accèdent à Charon (par exemple, https://charon.example.com). Utilisée dans les e-mails d'invitation et les liens de réinitialisation de mot de passe.",
      "infoMessage": "Cette URL est utilisée lors de l'envoi d'e-mails d'invitation. Si elle n'est pas configurée, Charon utilisera l'URL de la requête actuelle du navigateur, qui peut ne pas être accessible depuis les réseaux externes.",
      "invalidUrl": "Veuillez entrer une URL valide commençant par http:// ou https://",
      "notConfiguredWarning": "L'URL de l'application n'est pas configurée. Les e-mails d'invitation utiliseront l'URL actuelle du navigateur, qui peut ne pas être accessible depuis les réseaux externes.",
      "testButton": "Tester l'URL",
      "testSuccess": "URL ouvert avec succès",
      "testFailed": "Échec de l'ouverture de l'URL"
    },    "systemStatus": {
      "title": "État du Système",
      "service": "Service",
      "version": "Version",
      "buildTime": "Date de Compilation",
      "gitCommit": "Commit Git",
      "notAvailable": "N/D",
      "fetchError": "Impossible de récupérer l'état du système. Veuillez vérifier votre connexion."
    },
    "updates": {
      "title": "Mises à Jour Logicielles",
      "description": "Vérifier les nouvelles versions de Charon.",
      "currentVersion": "Version Actuelle",
      "latestVersion": "Dernière Version",
      "updateAvailable": "Mise à Jour Disponible",
      "newVersionAvailable": "Une nouvelle version de Charon est disponible !",
      "viewReleaseNotes": "Voir les Notes de Version",
      "upToDate": "À Jour",
      "runningLatest": "Vous utilisez la dernière version de Charon.",
      "checkForUpdates": "Vérifier les Mises à Jour"
    }
  },
  "crowdsecConfig": {
    "title": "Configuration CrowdSec",
    "loading": "Chargement de la configuration CrowdSec...",
    "loadError": "Erreur lors du chargement du statut CrowdSec",
    "noStatus": "Statut CrowdSec non disponible",
    "note": "Les mises à jour automatiques et la gestion des préréglages sont alimentées par Cerberus. Certaines fonctionnalités peuvent être limitées si Cerberus est désactivé.",
    "consoleEnrollment": {
      "title": "Inscription à la Console",
      "status": "Statut",
      "notEnrolled": "Non inscrit",
      "enrolled": "Inscrit",
      "pending": "En attente",
      "enrolling": "Inscription...",
      "pendingAcceptance": "En attente d'acceptation",
      "unknown": "Inconnu",
      "lapiNotReady": "LAPI n'est pas encore prêt. CrowdSec est peut-être en cours de démarrage.",
      "checkLapiStatus": "Vérifier le statut LAPI",
      "startCrowdSec": "Démarrer CrowdSec",
      "goToSecurity": "Aller au tableau de bord de sécurité",
      "enrollmentToken": "Jeton d'inscription",
      "tokenPlaceholder": "Collez votre jeton d'inscription de la Console CrowdSec",
      "agentName": "Nom de l'agent (optionnel)",
      "agentPlaceholder": "mon-instance-charon",
      "tenant": "Locataire/Organisation (optionnel)",
      "tenantPlaceholder": "id-org-de-console",
      "acknowledge": "Je reconnais que cela fera tourner les identifiants si déjà inscrit",
      "enroll": "Inscrire",
      "rotateKey": "Faire tourner la clé",
      "retryEnrollment": "Réessayer l'inscription",
      "lapiMustBeReady": "LAPI doit être prêt pour s'inscrire",
      "lapiMustBeReadyRotate": "LAPI doit être prêt pour faire tourner la clé",
      "lapiMustBeReadyRetry": "LAPI doit être prêt pour réessayer l'inscription",
      "tokenRequired": "Le jeton d'inscription est requis",
      "actionRequired": "Action requise",
      "pendingAcceptanceText": "Votre demande d'inscription a été soumise. Veuillez accepter cette machine dans la Console CrowdSec à",
      "pendingAcceptanceNote": " Une fois accepté, le statut sera mis à jour automatiquement.",
      "agent": "Agent",
      "tenantLabel": "Locataire",
      "lastAttempt": "Dernière tentative",
      "enrolledAt": "Inscrit",
      "correlationId": "ID de corrélation"
    },
    "reenroll": {
      "title": "Options de réinscription",
      "description": "Besoin de changer de clés d'inscription ou de passer à une autre organisation ?",
      "getNewKey": "Obtenir une nouvelle clé d'inscription de la Console",
      "withNewKey": "Réinscrire avec une nouvelle clé",
      "newEnrollmentKey": "Nouvelle clé d'inscription",
      "keyPlaceholder": "Collez la nouvelle clé d'inscription",
      "agentPlaceholder": "Laisser vide pour conserver le nom actuel",
      "tenantOptional": "Locataire/Organisation (optionnel)",
      "orgPlaceholder": "Laisser vide pour conserver l'actuel",
      "reenroll": "Réinscrire",
      "reenrolling": "Réinscription...",
      "clearState": "Effacer l'état d'inscription",
      "clearing": "Effacement...",
      "clearConfirm": "Cela effacera l'état d'inscription local. Vous devrez peut-être vous réinscrire. Continuer ?"
    },
    "packages": {
      "title": "Paquets de configuration",
      "description": "Exportez ou importez des paquets de configuration CrowdSec (tar.gz/zip). Une sauvegarde est créée avant l'importation.",
      "export": "Exporter",
      "import": "Importer",
      "importing": "Importation..."
    },
    "presets": {
      "title": "Préréglages",
      "description": "Appliquez des préréglages de configuration curés ou du hub.",
      "searchPlaceholder": "Rechercher des préréglages...",
      "sortAlpha": "Trier : A-Z",
      "sortSource": "Trier : Source",
      "curated": "Curé",
      "hub": "Hub",
      "noResults": "Aucun préréglage ne correspond à \"{{query}}\"",
      "pullPreview": "Récupérer l'aperçu",
      "applyPreset": "Appliquer le préréglage",
      "hubUnreachable": "Hub CrowdSec inaccessible. Les préréglages du hub peuvent ne pas fonctionner.",
      "retry": "Réessayer",
      "useCached": "Utiliser le cache",
      "targetFile": "Fichier cible",
      "selectFileBelow": "(sélectionnez un fichier de configuration ci-dessous)",
      "cacheKey": "Clé de cache",
      "etag": "ETag",
      "source": "Source",
      "fetched": "Récupéré",
      "previewYaml": "Aperçu (YAML) :",
      "previewUnavailable": "Aperçu non disponible",
      "applied": "Appliqué",
      "backup": "Sauvegarde",
      "reload": "Recharger",
      "required": "Requis",
      "method": "Méthode",
      "filesystem": "Système de fichiers",
      "loadCached": "Charger l'aperçu en cache",
      "applyDisabled": "Application désactivée tant que le hub est hors ligne.",
      "noPresets": "Aucun préréglage disponible. Assurez-vous que Cerberus est activé."
    },
    "files": {
      "title": "Modifier les fichiers de configuration",
      "selectFile": "Sélectionner un fichier...",
      "refresh": "Actualiser"
    },
    "bannedIps": {
      "title": "IPs bannies",
      "banIp": "Bannir IP",
      "enableFirst": "Activez CrowdSec pour gérer les IPs bannies",
      "loading": "Chargement des IPs bannies...",
      "loadFailed": "Échec du chargement des IPs bannies",
      "none": "Aucune IP bannie",
      "ip": "IP",
      "reason": "Raison",
      "duration": "Durée",
      "bannedAt": "Banni le",
      "source": "Source",
      "actions": "Actions",
      "unban": "Débannir"
    },
    "banModal": {
      "title": "Bannir une adresse IP",
      "ipLabel": "Adresse IP",
      "durationLabel": "Durée",
      "duration1h": "1 heure",
      "duration4h": "4 heures",
      "duration24h": "24 heures",
      "duration7d": "7 jours",
      "duration30d": "30 jours",
      "durationPermanent": "Permanent",
      "reasonLabel": "Raison",
      "reasonPlaceholder": "Raison du bannissement de cette IP...",
      "submit": "Bannir IP"
    },
    "unbanModal": {
      "title": "Confirmer le débannissement",
      "confirm": "Êtes-vous sûr de vouloir débannir",
      "submit": "Débannir"
    }
  },
  "smtp": {
    "title": "Paramètres Email (SMTP)",
    "description": "Configurez les paramètres SMTP pour activer les notifications par email et les invitations d'utilisateurs.",
    "configuration": "Configuration SMTP",
    "configDescription": "Entrez les détails de votre serveur SMTP pour activer la fonctionnalité email.",
    "host": "Hôte SMTP",
    "port": "Port",
    "username": "Nom d'utilisateur",
    "password": "Mot de passe",
    "passwordHelper": "Utilisez un mot de passe spécifique à l'application pour Gmail",
    "fromAddress": "Adresse d'expédition",
    "encryption": "Chiffrement",
    "selectEncryption": "Sélectionner le chiffrement",
    "starttls": "STARTTLS (Recommandé)",
    "sslTls": "SSL/TLS",
    "none": "Aucun",
    "testConnection": "Tester la connexion",
    "saveSettings": "Enregistrer les paramètres",
    "settingsSaved": "Paramètres SMTP enregistrés avec succès",
    "saveFailed": "Échec de l'enregistrement des paramètres SMTP",
    "connectionSuccess": "Connexion SMTP réussie",
    "connectionFailed": "Échec de la connexion SMTP",
    "testFailed": "Échec du test de connexion SMTP",
    "configured": "SMTP configuré",
    "notConfigured": "SMTP non configuré",
    "active": "Actif",
    "inactive": "Inactif",
    "sendTestEmail": "Envoyer un email de test",
    "testEmailDescription": "Envoyez un email de test pour vérifier que votre configuration SMTP fonctionne correctement.",
    "sendTest": "Envoyer le test",
    "testEmailSent": "Email de test envoyé avec succès",
    "testEmailFailed": "Échec de l'envoi de l'email de test",
    "needHelp": "Besoin d'aide ?",
    "helpText": "Si vous utilisez Gmail, vous devrez activer l'authentification à 2 facteurs et créer un mot de passe spécifique à l'application. Pour les autres fournisseurs, consultez leur documentation SMTP pour les paramètres corrects."
  },
  "securityHeaders": {
    "title": "En-têtes de Sécurité",
    "description": "Configurer les en-têtes de sécurité HTTP pour vos hôtes proxy",
    "createProfile": "Créer un Profil",
    "alertTitle": "Sécurisez vos Applications",
    "alertDescription": "Les en-têtes de sécurité protègent contre les vulnérabilités web courantes. Utilisez des modèles pour une configuration rapide ou créez des profils personnalisés pour un contrôle précis.",
    "systemProfiles": "Profils Système (Lecture Seule)",
    "systemProfilesDescription": "Profils de sécurité préconfigurés que vous pouvez attribuer aux hôtes proxy. Clonez pour personnaliser.",
    "customProfiles": "Profils Personnalisés",
    "noCustomProfiles": "Pas encore de profils personnalisés",
    "noCustomProfilesDescription": "Créez un profil d'en-têtes de sécurité personnalisé ou appliquez un modèle pour commencer",
    "view": "Voir",
    "clone": "Cloner",
    "updated": "Mis à jour",
    "viewProfile": "Voir le Profil d'En-têtes de Sécurité",
    "editProfile": "Modifier le Profil d'En-têtes de Sécurité",
    "createProfileTitle": "Créer un Profil d'En-têtes de Sécurité",
    "confirmDeletion": "Confirmer la Suppression",
    "deleteConfirmMessage": "Êtes-vous sûr de vouloir supprimer \"{{name}}\" ? Une sauvegarde sera créée avant la suppression.",
    "deleting": "Suppression...",
    "creatingBackup": "Création de la sauvegarde avant suppression...",
    "backupCreated": "Sauvegarde créée",
    "backupFailed": "Échec de la création de la sauvegarde",
    "deleteSuccess": "\"{{name}}\" supprimé. Une sauvegarde a été créée avant la suppression.",
    "deleteFailed": "Échec de la suppression : {{error}}",
    "presets": {
      "basic": "En-têtes de sécurité minimaux pour une compatibilité maximale.\n✓ Idéal pour : Tests, développement, sites web simples.\n✓ Compatible avec toutes les applications et apps mobiles.",
      "apiFriendly": "Optimisé pour les apps mobiles et clients API.\n✓ Idéal pour : Radarr, Sonarr, Plex, Jellyfin, Home Assistant, Vaultwarden.\n✓ Forte sécurité de transport, permet l'accès cross-origin.\nRecommandé pour les services accessibles via apps mobiles.",
      "strict": "Sécurité renforcée pour les applications web.\n✓ Idéal pour : Tableaux de bord web uniquement, panneaux d'administration.\n⚠ Peut affecter les apps mobiles et clients API.\nNon recommandé pour Radarr, Plex ou services avec apps companion.",
      "paranoid": "Sécurité maximale pour les applications à haut risque.\n✓ Idéal pour : Banque, santé, apps critiques de conformité.\n⚠ AFFECTERA les apps mobiles, clients API et flux OAuth.\nUtilisez uniquement si vous comprenez et pouvez personnaliser chaque en-tête."
    }
  },
  "dns": {
    "title": "Gestion DNS",
    "description": "Gérer les fournisseurs DNS et les plugins pour l'automatisation des certificats"
  },
  "passthrough": {
    "title": "Bienvenue",
    "description": "Votre compte a un accès passthrough. Vous pouvez accéder directement à vos services assignés — aucune interface de gestion n'est disponible.",
    "noAccessToManagement": "Vous n'avez pas accès à l'interface de gestion."
  }
}
