{
  "nav.config": "Configuration",
  "nav.monitoring": "Monitoring",
  "nav.live": "Live",
  "nav.server": "Serveurs",
  "nav.cc_profiles": "Profils CC",
  "nav.skills": "Compétences",
  "nav.mcp_tools": "Outils MCP",
  "nav.tool_eval": "Éval. Outils",
  "nav.pipeline_log": "Journal pipeline",
  "nav.federation": "Fédération",
  "nav.quarantine": "Quarantaine",
  "nav.templates": "Templates",
  "nav.users": "Utilisateurs",
  "nav.user_content": "Contenu",
  "nav.maintenance": "Maintenance",
  "nav.statistics": "Statistiques",
  "lbl.knowledge_snapshot": "Instantané du graphe",
  "lbl.latency_per_node": "p95 latence par nœud",
  "lbl.template_activity": "Utilisation des templates",
  "lbl.healer_history": "Historique du healer",
  "lbl.ontology_runner": "Résolution des lacunes d'ontologie",
  "lbl.node_active": "Nœud actif (permissions utilisateurs visibles)",
  "lbl.floating_routing": "Routage flottant actif",
  "lbl.server_blocked": "Serveur bloqué (bloc dur)",
  "lbl.dedicated_healer": "Healer dédié (boucle permanente)",
  "lbl.dedicated_healer_block": "Bloquer le serveur pour les requêtes normales",
  "lbl.dedicated_healer_template": "Template curateur (nœud)",
  "btn.dedicated_healer_start": "Démarrer la boucle",
  "btn.dedicated_healer_stop": "Arrêter la boucle",
  "msg.dedicated_healer_desc": "Lance une boucle permanente du healer sur un seul nœud. S'exécute jusqu'à l'arrêt manuel — idéal pour un hôte dédié à la guérison.",
  "msg.dedicated_healer_loading": "Chargement serveurs",
  "lbl.cleanup": "Nettoyage & orphelins",
  "lbl.cleanup_manager": "Gestionnaire de nettoyage système",
  "lbl.regeneration": "Régénération auto",
  "btn.trigger_ontology": "Démarrer",
  "btn.cleanup_scan": "Analyser",
  "btn.cleanup_run": "Nettoyer",
  "btn.regen_dashboard": "Régénérer tableau",
  "btn.reload_prometheus": "Recharger Prometheus",
  "msg.ontology_runner_desc": "Lance le healer une fois en arrière-plan. Utilise tous les serveurs avec la case ontologie cochée.",
  "msg.cleanup_desc": "Détecte les artefacts (templates, clés Redis, entités Neo4j, cibles Prometheus) dont le serveur a été supprimé.",
  "msg.cleanup_click_scan": "Cliquez sur « Analyser » pour chercher les orphelins.",
  "msg.regeneration_desc": "Régénère le tableau Grafana et la config Prometheus depuis la liste actuelle des serveurs.",
  "lbl.template_verify": "Vérifier les modèles",
  "btn.template_verify": "Vérifier",
  "btn.template_pull_missing": "Télécharger modèles manquants",
  "msg.template_verify_desc": "Vérifie pour chaque template que le modèle référencé (model@Node) est physiquement présent sur l'endpoint Ollama.",
  "msg.template_verify_click": "Cliquez sur « Vérifier » pour contrôler la disponibilité des modèles.",
  "nav.benchmarks": "Benchmarks",
  "nav.starfleet": "Starfleet",
  "nav.logout": "Déconnexion",
  "btn.save": "Enregistrer & Redémarrer",
  "btn.cancel": "Annuler",
  "btn.edit": "Modifier",
  "btn.copy_profile": "Copier le profil",
  "btn.backup": "Créer une sauvegarde",
  "btn.delete": "Supprimer",
  "btn.activate": "Activer",
  "btn.deactivate": "Désactiver",
  "btn.enable_profile": "Activer",
  "btn.disable_profile": "Désactiver",
  "btn.add_server": "Ajouter un serveur",
  "btn.test_all": "Tout tester",
  "btn.new_profile": "Nouveau profil",
  "btn.new_template": "Nouveau template",
  "btn.new_user": "Nouvel utilisateur",
  "btn.new_skill": "Nouvelle compétence",
  "btn.refresh": "Actualiser",
  "btn.generate_dashboard": "Régénérer le tableau de bord",
  "lbl.ontology_cronjob": "Utiliser pour le cron d'ontologie",
  "lbl.ontology_short": "Onto",
  "tip.ontology_cronjob": "À l'activation, un template curator est généré et un LLM correspondant est téléchargé.",
  "btn.export_json": "Exporter JSON",
  "btn.import_json": "Importer JSON",
  "btn.import_code": "Importer Code",
  "btn.send_reset": "Envoyer le lien",
  "btn.test_smtp": "Envoyer un e-mail test",
  "btn.send_email": "Envoyer un e-mail",
  "btn.send_bulk_email": "Écrire à tous",
  "btn.toggle_theme": "Mode sombre / clair",
  "btn.to_login": "Connexion",
  "btn.back_to_login": "Retour à la connexion",
  "btn.back_to_admin": "Retour Admin",
  "btn.set_password": "Définir le mot de passe",
  "btn.create_user": "Créer l'utilisateur",
  "btn.create_key": "Créer la clé",
  "btn.save_profile": "Enregistrer",
  "btn.import": "Importer",
  "btn.git_pull": "Git Pull",
  "btn.manage_profiles": "Gérer / Créer des profils",
  "btn.first_profile": "Créer le premier profil",
  "btn.copy_template": "Copier comme modèle",
  "btn.first_template": "Créer le premier template",
  "btn.kill": "Arrêter",
  "btn.history_clear": "Effacer l'historique",
  "btn.revoke_selected": "Révoquer la sélection",
  "btn.save_permissions": "Enregistrer les permissions",
  "btn.new_reset_link": "Nouveau lien de réinitialisation",
  "btn.save_settings": "Enregistrer les paramètres",
  "page.dashboard": "Tableau de bord",
  "page.monitoring": "Monitoring système",
  "page.live": "Monitoring en direct",
  "page.servers": "Serveurs d'inférence",
  "page.profiles": "Profils d'intégration Claude Code",
  "page.templates": "Templates expert",
  "page.users": "Gestion des utilisateurs",
  "page.login": "Connexion",
  "page.forgot_pw": "Mot de passe oublié",
  "page.reset_pw": "Réinitialiser le mot de passe",
  "page.change_password": "Changer le mot de passe",
  "page.skills": "Compétences & Commandes",
  "page.mcp_tools": "Outils MCP",
  "page.tool_eval": "Évaluation des outils",
  "page.user_content": "Contenu utilisateur",
  "page.user_dashboard": "Tableau de bord",
  "page.billing": "Facturation",
  "page.usage": "Historique d'utilisation",
  "page.api_keys": "Clés API",
  "page.cc_profiles": "Profils CC",
  "page.profile_pw": "Profil & Mot de passe",
  "lbl.username": "Nom d'utilisateur",
  "lbl.password": "Mot de passe",
  "lbl.email": "E-mail",
  "lbl.email_address": "Adresse e-mail",
  "lbl.display_name": "Nom affiché",
  "lbl.new_password": "Nouveau mot de passe",
  "lbl.confirm_password": "Confirmer le mot de passe",
  "lbl.min_8_chars": "min. 8 caractères",
  "lbl.services": "État des services",
  "lbl.inference": "Serveurs d'inférence",
  "lbl.ollama_servers": "Serveurs Ollama",
  "lbl.last_update": "Mis à jour :",
  "lbl.loading": "Chargement…",
  "lbl.no_data": "Aucune donnée",
  "lbl.models": "Modèles",
  "lbl.profile_name": "Nom du profil",
  "lbl.description": "Description",
  "lbl.category": "Catégorie",
  "lbl.endpoint": "Point de terminaison",
  "lbl.mode": "Mode",
  "lbl.timeout": "Délai d'expiration",
  "lbl.token": "Jeton",
  "lbl.prefix": "Préfixe",
  "lbl.label": "Étiquette",
  "lbl.enabled_profiles": "Profils activés",
  "lbl.fallback_settings": "Paramètres de repli",
  "lbl.or": "ou",
  "lbl.total": "total",
  "lbl.today": "Utilisé aujourd'hui",
  "lbl.this_month": "Ce mois-ci",
  "lbl.total_budget": "Total",
  "lbl.unlimited": "illimité",
  "lbl.tokens": "Jetons",
  "lbl.daily_limit": "Limite quotidienne (jetons)",
  "lbl.monthly_limit": "Limite mensuelle",
  "lbl.total_limit": "Limite totale",
  "lbl.current_usage": "Utilisation actuelle",
  "lbl.api_key_prefix": "Préfixe",
  "lbl.api_key_label": "Étiquette de clé (optionnel)",
  "lbl.last_used": "Dernière utilisation",
  "lbl.never": "jamais",
  "lbl.source": "Source",
  "lbl.body": "Corps (contenu du prompt)",
  "lbl.name": "Nom",
  "lbl.role": "Rôle",
  "lbl.server_default": "Défaut du serveur",
  "lbl.inference_changes": "Les modifications sont enregistrées dans INFERENCE_SERVERS",
  "lbl.inference_url_col": "URL (/v1)",
  "lbl.smtp_ssl": "SSL/TLS (Port 465)",
  "lbl.smtp_host": "Hôte SMTP",
  "lbl.smtp_port": "Port",
  "lbl.smtp_user": "Nom d'utilisateur",
  "lbl.smtp_pass": "Mot de passe",
  "lbl.smtp_from": "Expéditeur (De)",
  "lbl.smtp_test_recipient": "Destinataire de test",
  "lbl.public_urls": "URLs publiques",
  "lbl.public_urls_note": "Affichées dans le portail et utilisées dans les e-mails",
  "lbl.user_portal_url": "Portail utilisateur",
  "lbl.admin_url": "Backend Admin",
  "lbl.public_api_url": "API publique",
  "lbl.log_url": "URL visionneuse de logs (externe)",
  "lbl.log_url_help": "URL externe de la visionneuse de logs Dozzle (terminée par le proxy Nginx)",
  "lbl.prometheus_url_public": "URL Prometheus (externe)",
  "lbl.prometheus_url_public_help": "URL externe pour l'accès Prometheus (terminée par le proxy Nginx)",
  "lbl.not_set": "non configuré",
  "lbl.sso_url": "URL Authentik (URL de base SSO)",
  "lbl.oidc_client_id": "ID Client",
  "lbl.oidc_client_secret": "Secret Client",
  "lbl.oidc_redirect_uri": "URI de redirection (callback)",
  "lbl.oidc_jwks_url": "URL JWKS (validation JWT backend)",
  "lbl.oidc_issuer": "URL de l'émetteur",
  "lbl.oidc_end_session_url": "URL de fin de session (redirection déconnexion)",
  "lbl.oidc_end_session_hint": "Redirection après déconnexion. Vide = retour à la page de connexion.",
  "lbl.public_sso_url": "URL Authentik publique (redirection navigateur)",
  "lbl.public_sso_url_hint": "Optionnel. Si Authentik n'est accessible qu'en interne via le nom du conteneur, entrez ici l'URL DNS publique (ex. https://authentik.example.com). Le bouton de connexion utilisera cette URL. Laisser vide si AUTHENTIK_URL est déjà accessible publiquement.",
  "lbl.first_name": "Prénom",
  "lbl.last_name": "Nom de famille",
  "lbl.street_address": "Adresse",
  "lbl.street_address_hint": "ex. 12 rue Exemple",
  "lbl.postal_code": "Code postal",
  "lbl.city": "Ville",
  "lbl.country": "Pays",
  "lbl.date_of_birth": "Date de naissance",
  "lbl.gender": "Genre",
  "lbl.gender_m": "Homme (M)",
  "lbl.gender_w": "Femme (W)",
  "lbl.gender_d": "Non-binaire (D)",
  "section.personal_data": "Données personnelles",
  "msg.required_fields_missing": "Veuillez remplir tous les champs obligatoires.",
  "lbl.email_subject": "Objet",
  "lbl.email_body": "Message",
  "lbl.email_recipient": "Destinataire",
  "lbl.all_active_users": "Tous les utilisateurs actifs",
  "lbl.token_price": "Prix du jeton (€ / jeton)",
  "lbl.log_level": "Niveau de log",
  "lbl.ollama_api_key": "Clé API Ollama",
  "lbl.judge_model": "Modèle juge (Fusion / Critique)",
  "lbl.planner_model": "Modèle planificateur",
  "lbl.tool_model": "Modèle outil",
  "lbl.reasoning_model": "Modèle de raisonnement",
  "lbl.claude_models": "IDs de modèles Claude acceptés",
  "lbl.searxng_url": "URL SearXNG (recherche web)",
  "hint.searxng_primary": "moteur de recherche principal — SearXNG recommandé",
  "lbl.ddg_fallback": "Activer le repli DuckDuckGo",
  "hint.ddg_fallback": "repli automatique sur l'API publique DuckDuckGo si le moteur principal ne retourne aucun résultat (aucune clé API requise)",
  "lbl.admin_preview": "Aperçu admin",
  "lbl.impersonate_exit": "Retour Admin",
  "status.running": "en cours",
  "status.active": "Actif",
  "status.inactive": "Inactif",
  "status.locked": "Bloqué",
  "status.required": "Obligatoire",
  "status.optional": "Optionnel",
  "status.role_primary": "Primaire (s'exécute en premier)",
  "status.role_fallback": "Repli (si confiance Primaire faible)",
  "status.role_always": "Toujours (toujours exécuté, ensemble)",
  "status.online": "En ligne",
  "status.offline": "Hors ligne",
  "status.idle": "Inactif",
  "status.enabled": "Activé",
  "status.disabled": "Désactivé",
  "status.imported": "✓ Importé",
  "status.on": "activé",
  "status.off": "désactivé",
  "msg.config_saved": "Configuration enregistrée. Redémarrage de l'orchestrateur…",
  "msg.invalid_json": "JSON invalide : {error}",
  "msg.invalid_expert_models": "Erreur : modèles experts invalides — {error}",
  "msg.invalid_servers": "Erreur : configuration des serveurs invalide — {error}",
  "msg.login_failed": "Identifiants invalides",
  "msg.csrf_failed": "Échec de la vérification de sécurité. Veuillez réessayer.",
  "msg.oidc_error": "Erreur OIDC lors de la connexion.",
  "msg.profile_deleted": "Profil supprimé.",
  "msg.template_deleted": "Template supprimé.",
  "msg.skill_deleted": "Compétence supprimée.",
  "msg.import_done": "Import terminé : {imported} importé(s), {skipped} ignoré(s)",
  "msg.import_failed": "Échec de l'import : {error}",
  "msg.pw_changed": "Votre mot de passe a été modifié avec succès.",
  "msg.pw_mismatch": "Les mots de passe ne correspondent pas.",
  "msg.pw_too_short": "Le mot de passe doit comporter au moins 8 caractères.",
  "msg.reset_sent": "Si un compte avec cet e-mail existe, un lien de réinitialisation a été envoyé.",
  "msg.admin_reset_sent": "Lien de réinitialisation envoyé à {email}.",
  "msg.smtp_test_ok": "E-mail test envoyé avec succès à {to}.",
  "msg.smtp_test_fail": "Échec de l'envoi : {error}",
  "msg.email_sent": "{n} e-mail(s) envoyé(s).",
  "msg.email_fields_required": "L'objet et le message sont requis.",
  "msg.confirm_reset": "Envoyer le lien de réinitialisation à {user} ({email}) ?",
  "msg.reset_link_invalid": "Ce lien de réinitialisation est invalide ou expiré.",
  "msg.profile_enabled": "Profil activé. L'orchestrateur redémarre...",
  "msg.profile_disabled": "Profil désactivé. L'orchestrateur redémarre...",
  "msg.profile_sync_hint": "Profil enregistré. Les modifications seront actives dans 60 secondes. Pour un effet immédiat, basculez le profil ou redémarrez l'orchestrateur.",
  "msg.user_created": "Utilisateur créé.",
  "msg.user_updated": "Utilisateur mis à jour.",
  "msg.user_deleted": "Utilisateur supprimé.",
  "msg.key_created": "Clé API créée.",
  "msg.key_deleted": "Clé API supprimée.",
  "msg.permissions_saved": "Permissions enregistrées.",
  "msg.settings_saved": "Paramètres enregistrés.",
  "msg.not_found": "Non trouvé.",
  "msg.unknown_error": "Erreur inconnue",
  "msg.load_error": "Erreur de chargement",
  "msg.kill_failed": "Arrêt échoué",
  "dialog.confirm_delete": "Supprimer vraiment ?",
  "dialog.confirm_profile_delete": "Supprimer ce profil ?",
  "dialog.confirm_skill_delete": "Supprimer la compétence '{name}' ?",
  "dialog.import_overwrite": "Écraser les profils existants ? OK = Remplacer | Annuler = Nouveaux seulement",
  "dialog.confirm_kill": "Supprimer le processus {pid} du monitoring ?",
  "dialog.confirm_user_delete": "Supprimer cet utilisateur ?",
  "dialog.confirm_template_delete": "Supprimer ce template ?",
  "dialog.confirm_cc_profile_delete": "Supprimer ce profil CC ?",
  "js.select_placeholder": "Sélectionner…",
  "js.search_placeholder": "Rechercher…",
  "js.no_options": "Aucune option disponible",
  "js.loading_models": "Chargement des modèles…",
  "js.loading": "Chargement…",
  "js.error": "Erreur",
  "js.paste_json": "Veuillez coller le code JSON.",
  "js.give_name": "Veuillez donner un nom au profil.",
  "js.give_skill_name": "Veuillez donner un nom à la compétence.",
  "js.invalid_json": "JSON invalide",
  "js.export_failed": "Échec de l'export",
  "js.import_done": "Import terminé",
  "js.imported": "importé(s)",
  "js.skipped": "ignoré(s)",
  "js.skill_activated": "Compétence '/{name}' activée",
  "js.skill_deactivated": "Compétence '/{name}' désactivée",
  "js.skill_updated": "Compétence '/{name}' importée",
  "js.git_pull_failed": "git pull échoué",
  "js.tool_toggled": "Outil {name} {state}",
  "js.server_not_reachable": "Serveur MCP inaccessible.",
  "table.username": "Nom d'utilisateur",
  "table.email": "E-mail",
  "table.status": "Statut",
  "table.role": "Rôle",
  "table.budget": "Budget (quot. / mens. / total)",
  "table.created": "Créé",
  "table.model": "Modèle",
  "table.duration": "Durée",
  "table.user": "Utilisateur",
  "table.mode": "Mode",
  "table.template": "Template",
  "table.type": "Type",
  "table.client_ip": "IP client",
  "table.request_id": "ID de requête",
  "table.started": "Démarré",
  "table.ended": "Terminé",
  "table.last_seen": "Vu en dernier",
  "table.actions": "Actions",
  "table.name": "Nom",
  "table.description": "Description",
  "table.category": "Catégorie",
  "table.llms": "LLMs",
  "table.system_prompt": "Prompt système",
  "table.prefix": "Préfixe",
  "table.label": "Étiquette",
  "table.latency": "Latence (ms)",
  "table.gpus": "GPUs",
  "table.factor": "Facteur",
  "table.tool_name": "Nom de l'outil",
  "table.input_type": "Type d'entrée",
  "table.tools_avail": "Outils disp.",
  "table.output": "Sortie",
  "table.latency_ms": "Latence",
  "table.tokens": "Jetons",
  "table.choice": "Choix",
  "table.time": "Heure",
  "table.resource": "Ressource",
  "table.quota": "Jetons restants",
  "table.reset": "Réinitialisation",
  "table.quant": "Quant.",
  "table.family": "Famille",
  "table.expires": "Expire",
  "table.param": "Paramètre",
  "modal.new_profile": "Nouveau profil",
  "modal.edit_profile": "Modifier le profil",
  "modal.new_template": "Nouveau template expert",
  "modal.edit_template": "Modifier le template",
  "modal.new_user": "Créer un utilisateur",
  "modal.edit_user": "Détails utilisateur",
  "modal.new_skill": "Nouvelle compétence",
  "modal.send_email_title": "Envoyer un e-mail",
  "modal.edit_skill": "Modifier la compétence",
  "modal.import_profiles": "Importer des profils – code JSON",
  "modal.import_templates": "Importer des templates – code JSON",
  "modal.budget_tab": "Budget",
  "modal.permissions_tab": "Permissions",
  "modal.api_keys_tab": "Clés API",
  "modal.usage_tab": "Utilisation",
  "modal.usage_30days": "Détails JSON (30 jours)",
  "modal.import_mode": "Mode",
  "modal.merge": "Fusion – importer seulement les nouveaux",
  "modal.replace": "Remplacement – écraser les existants",
  "modal.json_code": "Coller le code JSON",
  "section.models": "Modèles",
  "section.cc_integration": "Intégration Claude Code",
  "section.system": "Système",
  "section.smtp": "E-mail / SMTP",
  "section.sso": "SSO / OIDC (Authentik)",
  "section.public_urls": "URLs publiques",
  "section.expert_models": "Modèles experts",
  "section.graph_rag": "GraphRAG / Neo4j",
  "section.provider_limits": "Limites de jetons fournisseur",
  "section.token_usage": "Utilisation des jetons par modèle",
  "section.cache_perf": "Performance du cache",
  "section.expert_calls_cat": "Appels experts par catégorie",
  "section.expert_calls_mdl": "Appels experts par modèle",
  "section.expert_calls_node": "Appels experts par modèle & nœud",
  "section.req_by_mode": "Requêtes par mode",
  "section.confidence": "Distribution de confiance",
  "section.latency": "Latence & évaluations",
  "section.active_procs": "Processus actifs",
  "section.llm_instances": "Instances LLM",
  "section.api_requests": "Requêtes API en cours",
  "section.background_jobs": "Maintenance et tâches d'arrière-plan",
  "info.maintenance_jobs": "Réparateur d'ontologie, cronjobs, provisionnement",
  "table.job": "Tâche",
  "table.progress": "Progression",
  "section.rl_flywheel": "RL Flywheel & Fenêtre de contexte",
  "section.compression": "Compression d'historique",
  "section.corrections": "Mémoire de corrections",
  "section.expert_failures": "Erreurs d'experts",
  "metric.compressed": "compressés",
  "metric.unlimited": "sans limite",
  "metric.refinements": "raffinements",
  "label.force_think": "Chaîne de pensée",
  "section.context_window": "Fenêtre de contexte & compression",
  "label.graphrag_max_chars": "Budget GraphRAG (chars)",
  "label.history_max_turns": "Historique max tours",
  "label.history_max_chars": "Historique max chars",
  "label.unlimited": "illimité",
  "label.fixed_chars": "nombre fixe de caractères",
  "tip.graphrag_max_chars": "0 = auto depuis la fenêtre du modèle, >0 = limite fixe",
  "tip.history_max_turns": "0 = défaut global, -1 = illimité (pas de compression)",
  "tip.history_max_chars": "0 = défaut global, -1 = illimité (pas de compression)",
  "label.compression_enabled": "Compression d'historique",
  "tip.compression_toggle": "Activé: les anciens tours sont compressés. Désactivé: l'historique complet est transmis.",
  "label.global_default": "défaut global",
  "section.proc_history": "Historique des processus",
  "section.permissions": "Permissions actives",
  "section.llm_server_status": "Statut des serveurs LLM",
  "metric.hit_rate": "Taux de succès",
  "metric.hits": "Succès",
  "metric.misses": "Échecs",
  "metric.p50": "Temps de réponse P50",
  "metric.p95": "Temps de réponse P95",
  "metric.self_rating": "Auto-évaluation (moy.)",
  "metric.user_rating": "Feedback utilisateur (moy.)",
  "metric.of_5": "sur 5 points possibles",
  "metric.tool_call_rate": "Taux d'appel d'outils",
  "metric.rows_shown": "Entrées affichées",
  "metric.total_rows": "Lignes totales",
  "metric.total_reqs": "Requêtes totales",
  "metric.avg_req": "Moy. / requête",
  "metric.in": "↑ Entrée",
  "metric.out": "↓ Sortie",
  "metric.in_work": "en traitement",
  "metric.waiting": "en attente",
  "metric.loaded": "chargé",
  "metric.avail_models": "Modèles disponibles",
  "metric.loaded_models": "Modèles chargés",
  "metric.no_model": "Aucun modèle chargé (inactif)",
  "metric.ollama_metrics": "Métriques Ollama",
  "metric.chromadb_docs": "Documents ChromaDB",
  "metric.neo4j_entities": "Entités Neo4j",
  "metric.neo4j_relations": "Relations Neo4j",
  "metric.ontology_entities": "Entités d'ontologie",
  "metric.planner_patterns": "Modèles du planificateur",
  "metric.ontology_gaps": "Lacunes d'ontologie",
  "tip.factor": "Multiplicateur de coût pour le budget (1.0 = pas de majoration)",
  "tip.tier": "",
  "tip.timeout": "Délai API par serveur en secondes",
  "tip.active_toggle": "Activer ou désactiver le serveur",
  "tip.tool_model": "Le LLM local qui exécute les appels d'outils",
  "tip.mode": "Comment les prompts texte sont traités.",
  "mode.native": "Natif — Prompt direct au modèle outil",
  "mode.moe_reasoning": "MoE Raisonnement — via expert raisonnement",
  "mode.moe_orchestrated": "MoE Orchestré — Pipeline complète",
  "mode.native_short": "natif — Direct au modèle outil",
  "mode.moe_reasoning_short": "moe_reasoning — Expert raisonnement",
  "mode.moe_orchestrated_short": "moe_orchestrated — Pipeline complète",
  "role.user": "Utilisateur",
  "role.subscriber": "Abonné",
  "role.expert": "Expert",
  "role.admin": "Administrateur",
  "perm.expert_template": "Template expert",
  "perm.cc_profile": "Profil Claude Code",
  "perm.native_llm": "LLMs natifs",
  "perm.skills": "Compétences",
  "perm.mcp_tools": "Outils MCP",
  "perm.all_skills": "Toutes les compétences",
  "perm.all_mcp": "Tous les outils MCP",
  "perm.advanced": "Permissions avancées (moe_mode)",
  "perm.reset": "Réinitialiser",
  "empty.no_users": "Aucun utilisateur créé.",
  "empty.no_profiles": "Aucun profil. Cliquez 'Nouveau profil' pour commencer.",
  "empty.no_templates": "Aucun template créé.",
  "empty.no_skills": "Aucune compétence. Créez-en une ou importez depuis l'onglet Amont.",
  "empty.no_requests": "Aucune requête active",
  "empty.no_procs": "Aucun processus terminé",
  "empty.no_upstream": "Aucune compétence amont",
  "empty.no_tools": "Aucun outil trouvé",
  "empty.no_servers": "Aucun serveur configuré",
  "empty.no_templates_user": "Aucun template disponible",
  "empty.no_cc_profiles_user": "Aucun profil CC disponible",
  "empty.click_tab": "Cliquez l'onglet pour charger les compétences amont…",
  "info.templates_desc": "Les templates experts définissent quels LLMs sont utilisés par catégorie d'expert",
  "info.templates_tiers": "Primaire = premier niveau. Repli = seulement si confiance faible. Toujours = ensemble forcé.",
  "info.templates_perm": "Les templates peuvent être assignés dans les permissions utilisateur",
  "info.skills_desc": "Indépendant du client — résolu côté serveur pour Claude Code, Continue.dev, etc.",
  "info.skills_resolve": "Résolution côté serveur",
  "info.skills_how": "Chaque client peut envoyer /nom-compétence [args]",
  "info.skills_tokens": "Les jetons ne sont consommés qu'à l'appel réel",
  "info.skills_upstream": "Importez les compétences pour les rendre disponibles localement",
  "info.skill_arguments": "Utilisez $ARGUMENTS comme espace réservé pour les arguments",
  "info.skill_name_hint": "Lettres minuscules, chiffres et tirets uniquement. Devient /nom",
  "info.mcp_desc": "Activer/désactiver les outils du conteneur mcp-precision",
  "info.pipeline_log_desc": "Transparence du routage — experts sollicités, niveaux de complexité, latences et rounds agentiques par requête.",
  "info.tool_eval_desc": "Derniers appels d'outils — quels modèles appellent des outils vs. écrivent de la prose ?",
  "info.color_coding": "Code couleur : ≤30s · ≤120s · >120s (délai suspecté)",
  "info.no_profiles_enabled": "Aucun profil activé — les paramètres de secours s'appliquent.",
  "info.forgot_pw_hint": "Saisissez votre adresse e-mail. Vous recevrez un lien de réinitialisation (valable 1 heure).",
  "info.reset_sent": "Si un compte avec cet e-mail existe, un e-mail de réinitialisation a été envoyé.",
  "info.tool_calls_always": "Les appels d'outils passent toujours par le modèle outil, quel que soit le mode.",
  "info.think_stream": "(affiche la progression du pipeline : 📋 Planificateur analyse…)",
  "info.claude_models_hint": "Les IDs de modèles envoyés par Claude Code via ANTHROPIC_MODEL=...",
  "info.reasoning_model_hint": "vide = depuis les modèles experts",
  "info.upstream_source": "github.com/anthropics/skills",
  "info.ref_files": "Fichier(s) de référence",
  "info.no_desc": "Aucune description",
  "info.auto_refresh": "Actualisation auto (10s)",
  "info.auto_5s": "Auto 5s",
  "info.updating": "Mise à jour…",
  "portal.login_header": "Connexion au portail MoE",
  "portal.forgot_header": "Réinitialiser le mot de passe",
  "portal.reset_header": "Définir un nouveau mot de passe",
  "portal.forgot_link": "Mot de passe oublié ?",
  "portal.pw_change_required": "Changement de mot de passe requis",
  "portal.pw_change_hint": "Pour des raisons de sécurité, vous devez changer votre mot de passe initial avant de continuer.",
  "portal.sso_login": "Se connecter avec Authentik (SSO)",
  "portal.sidebar.dashboard": "Tableau de bord",
  "portal.sidebar.billing": "Facturation",
  "portal.sidebar.usage": "Historique",
  "portal.sidebar.api_keys": "Clés API",
  "portal.sidebar.templates": "Mes templates",
  "portal.sidebar.cc_profiles": "Profils CC",
  "portal.sidebar.profile": "Profil & Mot de passe",
  "portal.from_tokens": "sur {n} jetons",
  "portal.remaining": "{n} restants",
  "portal.chart_14d": "Utilisation des jetons (14 jours)",
  "portal.active_keys": "Clés API actives",
  "portal.manage": "Gérer",
  "portal.no_keys_hint": "Aucune clé. <a href='/user/keys'>Créer maintenant</a>.",
  "portal.my_expert_config": "Ma configuration expert",
  "portal.category_col": "Catégorie",
  "portal.models_col": "Modèles",
  "portal.no_experts": "Aucun expert configuré.",
  "portal.no_template_assigned": "Aucun template expert assigné. La configuration par défaut sera utilisée.",
  "portal.expert_tools_header": "Vos outils expert",
  "portal.expert_tools_desc": "Vous avez le rôle <strong>Expert</strong> – créez vos propres templates et profils CC.",
  "portal.my_templates_link": "Mes templates",
  "portal.cc_profiles_link": "Profils CC",
  "portal.budget_updated": "Mis à jour",
  "portal.budget_status": "Statut du budget",
  "portal.period_col": "Période",
  "portal.total_col": "Total",
  "portal.limit_col": "Limite",
  "portal.remaining_col": "Restant",
  "portal.progress_col": "Progression",
  "portal.reset_col": "Réinitialisation",
  "portal.period_daily": "Quotidien",
  "portal.period_monthly": "Mensuel",
  "portal.period_total": "Total",
  "portal.no_reset": "pas de réinitialisation",
  "portal.usage_by_model": "Utilisation par modèle (30 jours)",
  "portal.requests_col": "Requêtes",
  "portal.total_requests": "Requêtes totales",
  "portal.total_tokens_card": "Jetons totaux",
  "portal.month_tokens": "Jetons ce mois",
  "portal.days_7": "7 jours",
  "portal.days_30": "30 jours",
  "portal.days_90": "90 jours",
  "portal.filter_token": "Nom du jeton",
  "portal.filter_mode": "Mode",
  "portal.filter_status": "Statut",
  "portal.filter_from": "Du",
  "portal.filter_to": "Au",
  "portal.all_modes": "Tous les modes",
  "portal.all": "Tous",
  "portal.errors": "Erreurs",
  "portal.col_timestamp": "Horodatage",
  "portal.col_session": "ID session",
  "portal.col_model": "Modèle / Template",
  "portal.col_api_key": "Clé API",
  "portal.col_prompt": "Prompt",
  "portal.col_completion": "Complétion",
  "portal.no_entries": "Aucune entrée dans la période sélectionnée.",
  "portal.note_title": "Note de transaction",
  "portal.note_placeholder": "Votre note, comparaison, observation…",
  "portal.note_edit": "Modifier la note",
  "portal.filter_reset_tip": "Réinitialiser les filtres",
  "portal.entries_shown": "{visible} sur {all} entrées",
  "portal.new_key_banner": "Nouvelle clé API (visible une seule fois — sauvegardez-la !)",
  "portal.my_api_keys": "Mes clés API",
  "portal.col_created": "Créé",
  "portal.user_default": "(Défaut utilisateur)",
  "portal.revoke_confirm": "Révoquer cette clé ?",
  "portal.revoke_key": "Révoquer",
  "portal.no_api_keys": "Aucune clé API.",
  "portal.label_edit_title": "Modifier l'étiquette du jeton",
  "portal.create_key_title": "Créer une nouvelle clé API",
  "portal.key_label_optional": "Étiquette (optionnel)",
  "portal.key_label_hint": "ex. Claude Code Laptop",
  "portal.api_usage_title": "Utilisation de l'API",
  "portal.api_bearer_desc": "Utilisez votre clé API comme jeton Bearer :",
  "portal.api_x_key_desc": "Ou comme en-tête <code>x-api-key</code> (compatible Anthropic) :",
  "portal.save_error": "Erreur lors de l'enregistrement",
  "portal.my_data": "Mes données",
  "portal.username_readonly": "Nom d'utilisateur (non modifiable)",
  "portal.change_pw_hint": "Changer le mot de passe (laisser vide = inchangé)",
  "portal.pw_placeholder": "Min. 8 caractères",
  "portal.timezone_header": "Fuseau horaire",
  "portal.timezone_desc": "Le serveur stocke toutes les heures en UTC. Définissez votre décalage local pour que les horodatages correspondent à votre heure locale.",
  "portal.saved": "Enregistré",
  "portal.alerts_header": "Notifications de limite de jetons",
  "portal.alerts_enable": "Activer les notifications",
  "portal.threshold_label": "Seuil d'alerte :",
  "portal.alert_email_label": "E-mail de notification",
  "portal.alert_email_hint": "Laisser vide = utiliser l'e-mail du profil.",
  "portal.memory_header": "Mémoire conversationnelle",
  "portal.memory_desc": "Contrôlez comment le système utilise vos conversations passées.",
  "portal.memory_prefer_fresh": "Nouvelle session à chaque fois (Fresh Start)",
  "portal.memory_prefer_fresh_hint": "Chaque conversation démarre sans accès aux sessions précédentes. Recommandé pour les sujets sensibles.",
  "portal.memory_share_with_team": "Partager le contexte avec l'équipe",
  "portal.memory_share_with_team_hint": "Vos tours sont stockés pour que les membres de l'équipe puissent les récupérer. Actif uniquement si le template a activé la mémoire inter-sessions.",
  "portal.my_templates_title": "Mes templates experts",
  "portal.my_templates_desc": "Créez vos propres configurations experts pour les serveurs d'inférence débloqués.",
  "portal.admin_templates": "Templates partagés par l'admin",
  "portal.admin_read_only": "Lecture seule — copier pour personnaliser",
  "portal.own_count": "{n} template(s) personnel(s)",
  "portal.copy_btn": "Copier",
  "portal.no_user_templates": "Aucun template créé.",
  "portal.deactivated": "Désactivé",
  "portal.my_cc_profiles": "Mes profils CC",
  "portal.no_cc_profiles": "Aucun profil CC.",
  "portal.no_data_admin_hint": "Aucune donnée d'utilisation pour ce compte. Admins : consultez d'autres utilisateurs via 'Gestion des utilisateurs → Imiter'.",
  "portal.key_note": "Un token n'est affiché qu'une seule fois à la création. Assurez-vous de le copier.",
  "portal.display_name_hint": "Comment vous appeler ?",
  "portal.cc_profiles_desc": "Créez vos propres profils Claude Code basés sur vos serveurs d'inférence débloqués. Chaque profil est disponible immédiatement via votre clé API.",
  "portal.btn_new_cc_profile": "Nouveau profil CC",
  "portal.cc_default_badge": "Par défaut",
  "portal.cc_granted_badge": "Partagé",
  "portal.cc_edit_title": "Modifier le profil CC",
  "portal.cc_name_placeholder": "Mon profil CC",
  "portal.tmpl_edit_title": "Modifier le template",
  "portal.tmpl_name_lbl": "Nom",
  "portal.tmpl_name_placeholder": "Mon template",
  "portal.tmpl_desc_lbl": "Description",
  "portal.tmpl_desc_placeholder": "Description courte",
  "portal.tmpl_overrides_lbl": "Remplacements de modèles optionnels",
  "portal.tmpl_overrides_hint": "vide = modèles par défaut globaux",
  "portal.tmpl_judge_model": "Modèle Judge",
  "portal.tmpl_planner_model": "Modèle Planner",
  "portal.tmpl_empty_default": "vide = par défaut",
  "portal.tmpl_default": "Défaut",
  "portal.tmpl_judge_prompt": "Prompt Judge",
  "portal.tmpl_planner_prompt": "Prompt Planner",
  "portal.tmpl_judge_prompt_ph": "Prompt système optionnel pour le Judge/Merger…",
  "portal.tmpl_planner_prompt_ph": "Prompt système optionnel pour le Planner…",
  "portal.tmpl_expert_cats": "Catégories d'experts",
  "portal.tmpl_custom_cat": "Catégorie personnalisée",
  "warn.medical_legal.title": "Expert médical / juridique actif",
  "warn.medical_legal.body": "Un ou plusieurs experts de ce modèle traitent des requêtes médicales ou juridiques. Les réponses générées par l'IA dans ces domaines ne constituent PAS un avis professionnel. Veillez à mettre en place des contrôles d'accès appropriés et des durées de conservation minimales. Une analyse d'impact relative à la protection des données (AIPD) peut être requise.",
  "footer.text": "Sovereign MoE Orchestrator — Interface Admin",
  "footer.portal": "Portail Sovereign MoE",
  "wizard.title": "Configuration initiale",
  "wizard.done.flash": "Configuration terminée — votre instance MoE Sovereign est prête.",
  "wizard.step1.title": "Bienvenue sur MoE Sovereign",
  "wizard.step1.body": "Avant de pouvoir utiliser le système, au moins un serveur d'inférence LLM doit être configuré. Cet assistant vous guidera à travers la configuration minimale en quelques étapes.",
  "wizard.step2.title": "Serveurs d'inférence",
  "wizard.step2.hint": "Ajoutez votre point de terminaison Ollama, compatible OpenAI, LiteLLM ou vLLM. Vous pouvez en ajouter d'autres ultérieurement via la Configuration.",
  "wizard.step3.title": "Modèles principaux",
  "wizard.step3.hint": "Sélectionnez le modèle Judge (synthétiseur) et éventuellement un modèle Planner séparé parmi vos serveurs configurés.",
  "wizard.step4.title": "URLs d'accès public",
  "wizard.step4.hint": "Optionnel — définissez votre domaine public si vous exposez MoE Sovereign via un proxy inverse. Laisser vide pour un usage local.",
  "wizard.btn.next": "Continuer",
  "wizard.btn.finish": "Ouvrir le tableau de bord",
  "wizard.btn.skip": "Ignorer",
  "quarantine.title": "Quarantaine du graphe de connaissances",
  "quarantine.desc": "Les triples à fort rayon d'impact attendent une validation manuelle avant insertion dans Neo4j.",
  "quarantine.subject": "Sujet",
  "quarantine.relation": "Relation",
  "quarantine.object": "Objet",
  "quarantine.reach": "Portée",
  "quarantine.source": "Modèle source",
  "quarantine.confidence": "Confiance",
  "quarantine.timestamp": "Horodatage",
  "quarantine.actions": "Actions",
  "quarantine.empty": "Aucun triple en quarantaine. Tout est en ordre !",
  "perm.graph_tenant": "Locataire graphe",
  "perm.graph_tenant.help": "Contrôle quelle partition du graphe Neo4j l'utilisateur peut voir et écrire.",
  "tmpl.categories": "catégories",
  "tmpl.privacy.local": "Local uniquement",
  "tmpl.privacy.mixed": "Mixte (APIs externes)",
  "tmpl.privacy.external": "Externe",
  "nav.teams": "Teams & Mandanten",
  "info.teams_desc": "Wissen hierarchisch organisieren: User → Team → Mandant → Global",
  "tab.teams": "Teams",
  "tab.tenants": "Mandanten",
  "tab.promote_knowledge": "Wissen promoten",
  "info.promote_desc": "Wissen aus einem Namespace in einen übergeordneten Namespace übertragen.",
  "label.from_namespace": "Von Namespace",
  "label.to_namespace": "Zu Namespace",
  "label.entity_filter": "Entitäten-Filter",
  "hint.optional_comma_sep": "kommagetrennt, optional",
  "btn.promote": "Promoten",
  "btn.create_team": "Team erstellen",
  "btn.create_tenant": "Mandant erstellen",
  "btn.add_member": "Mitglied hinzufügen",
  "btn.show_members": "Mitglieder anzeigen",
  "btn.budget": "Budget",
  "label.team_name": "Team-Name",
  "label.tenant_name": "Mandant-Name",
  "label.tenant_optional": "Mandant (optional)",
  "label.role": "Rolle",
  "opt.no_tenant": "Kein Mandant",
  "col.member": "Mitglied",
  "col.role": "Rolle",
  "empty.no_teams": "Noch keine Teams angelegt.",
  "empty.no_tenants": "Noch keine Mandanten angelegt.",
  "empty.no_members": "Keine Mitglieder",
  "state.loading": "Chargement...",
  "title.maintenance": "Maintenance — MoE Admin",
  "title.benchmarks": "Benchmarks — MoE Admin",
  "js.active_servers": "serveurs actifs",
  "js.no_ontology_servers": "Aucun serveur d'ontologie configuré",
  "js.loading_error": "Erreur de chargement",
  "js.no_output_since": "pas de sortie depuis 5 min",
  "js.select_template_first": "Veuillez sélectionner un template.",
  "js.start_failed": "Échec du démarrage",
  "js.start_error": "Erreur au démarrage",
  "js.healer_started_unverified": "Le healer a démarré, mais aucune requête active n'était visible dans le monitoring en direct dans les 15 s.\nVérifiez les logs de l'orchestrateur et la configuration du template.",
  "js.confirm_stop_healer": "Arrêter le Dedicated Healer ?",
  "js.could_not_start": "Impossible de démarrer",
  "js.no_orphans_found": "Aucun orphelin trouvé. Système propre.",
  "js.active_servers_label": "Serveurs actifs :",
  "js.scanning": "Analyse…",
  "js.cleaning": "Nettoyage…",
  "js.confirm_cleanup": "Exécuter le nettoyage ? Les templates avec DeadNode-Pins seront réaffectés au nœud de secours, les templates curateurs orphelins supprimés, les entités Neo4j marquées comme obsolètes.",
  "js.checking": "Vérification…",
  "js.regenerating_dashboard": "Régénération du tableau de bord…",
  "btn.save_short": "Enregistrer",
  "btn.now": "Maintenant",
  "js.never": "Jamais",
  "lbl.checkpoint_archive": "Archive de points de contrôle",
  "lbl.last_run": "Dernière exécution",
  "lbl.duration": "Durée",
  "lbl.freed": "Libéré",
  "lbl.total_runs": "Exécutions totales",
  "lbl.job_active": "Tâche active",
  "js.config_saved": "Configuration enregistrée",
  "lbl.live_db_rows": "Lignes live DB à conserver",
  "lbl.archive_retention": "Rétention archive (jours)",
  "lbl.max_file_size": "Taille max fichier (Mo)",
  "lbl.backup_files": "Fichiers de sauvegarde",
  "lbl.max_storage": "Stockage max (Mo)",
  "lbl.retention_days": "Rétention (jours)",
  "msg.prometheus_restart_note": "Redémarrage Prometheus requis après modification.",
  "btn.konfig": "Config",
  "js.job_started": "Tâche démarrée",
  "lbl.entries": "entrées",
  "js.orphan_curator_templates": "Templates curateurs orphelins",
  "js.templates_deadnode_pin": "Templates avec @DeadNode pin",
  "js.user_templates_deadnode": "Templates utilisateur avec DeadNode",
  "js.user_cc_profiles_deadnode": "Profils CC utilisateur avec DeadNode",
  "js.valkey_keys": "Clés Valkey",
  "js.neo4j_curator_entities": "Entités curateur Neo4j",
  "js.pieces": "entrées",
  "js.prometheus_stale_targets": "Cibles Prometheus périmées",
  "js.cleanup_done": "Nettoyage terminé",
  "js.warnings": "Avertissements",
  "js.all_templates_ok_prefix": "Tous les",
  "js.all_templates_ok_suffix": "templates ok — tous les modèles physiquement disponibles.",
  "js.verified_prefix": "Vérifié",
  "js.with_issues": "avec problèmes",
  "js.problem": "Problème",
  "js.model_missing": "manquant",
  "js.node_not_exist": "Le nœud n'existe pas",
  "js.node_unreachable": "Nœud inaccessible",
  "js.confirm_pull_missing": "Télécharger les modèles manquants via Ollama ? Cela peut prendre plusieurs minutes par modèle.",
  "js.pull_done": "Téléchargement terminé",
  "js.dashboard_updated": "Tableau de bord mis à jour.",
  "js.bench_running": "Benchmark en cours",
  "js.bench_system_locked": "Le système est verrouillé pour les utilisateurs API réguliers.",
  "js.bench_start": "Démarrer benchmark",
  "js.overnight_runs": "Exécutions nocturnes",
  "js.single_runs": "Exécutions uniques",
  "js.runner_log": "Journal du runner",
  "js.waiting_for_log": "En attente des données de journal…",
  "js.result": "Résultat",
  "js.preflight_not_checked": "Pas encore vérifié. Cliquez sur « Vérifier » avant de démarrer.",
  "js.bench_template_placeholder": "ex. moe-m10-gremium-deep",
  "js.epochs": "Époques",
  "js.bench_info": "Le benchmark s'exécute en arrière-plan. Pendant son exécution, le système est verrouillé pour les utilisateurs API réguliers. Effectuez le pré-vol avant de démarrer.",
  "js.start_now": "Démarrer maintenant",
  "js.no_log_available": "Pas de journal disponible.",
  "js.load_error": "Erreur",
  "js.no_overnight_runs": "Aucune exécution nocturne trouvée.",
  "js.no_single_runs": "Aucune exécution unique trouvée.",
  "js.no_bench_active": "Aucun benchmark actif",
  "js.last_overnight_run": "Dernière exécution nocturne",
  "js.bench_is_running": "En cours",
  "js.clear_lock_manual": "Supprimer le verrou manuellement",
  "js.epochs_summary": "Époques (données eval)",
  "js.no_eval_data": "Pas encore de données eval disponibles.",
  "js.no_data": "Pas de données.",
  "js.no_test_entries": "Aucune entrée de test trouvée.",
  "js.total_duration": "Durée totale",
  "js.tests": "Tests",
  "js.avg_score": "Score moyen",
  "js.test_id": "ID test",
  "js.score": "Score",
  "js.status_error": "Erreur",
  "js.status_timeout": "Timeout",
  "js.run_id": "Run ID",
  "js.eval_file": "Fichier eval",
  "js.confirm_delete_run": "Vraiment supprimer l'exécution ?",
  "js.deleted": "Supprimé",
  "js.confirm_clear_lock": "Vraiment supprimer le verrou manuellement ? Seulement si le processus est déjà terminé.",
  "js.lock_cleared": "Verrou supprimé.",
  "js.bench_started": "Benchmark démarré",
  "js.trigger_written": "Fichier déclencheur écrit — le surveillant hôte démarrera le benchmark.",
  "js.fill_all_fields": "Veuillez remplir tous les champs.",
  "js.starting": "Démarrage",
  "js.preflight_ready": "Système prêt — le benchmark peut être démarré.",
  "js.preflight_fail": "Tous les contrôles n'ont pas réussi. Veuillez vérifier.",
  "js.score_details": "Détails du score",
  "js.turn": "Tour",
  "js.report": "Rapport",
  "js.epoch": "Époque",
  "js.epochs_overview": "Vue d'ensemble des époques",
  "js.graph_entities_delta": "Entités graphe Δ",
  "js.cache_hit_rate": "Taux de cache",
  "js.compressions": "Compressions",
  "js.lock_detail": "Détail du verrou",
  "js.team_deleted": "Équipe \"{name}\" supprimée",
  "js.delete_error": "Erreur de suppression",
  "js.tenant_deleted": "Mandataire \"{name}\" supprimé",
  "js.confirm_delete_team": "Vraiment supprimer l'équipe \"{name}\" ?",
  "js.confirm_delete_tenant": "Vraiment supprimer le mandataire \"{name}\" ?",
  "lbl.daily_token_limit": "Limite journalière (tokens, vide = pas de limite)",
  "js.member_added": "Membre ajouté",
  "js.scope_global": "→ Global (public)",
  "js.n_entities": "{n} entités",
  "js.entities_all": "toutes",
  "js.entities_promoted": "entités promues :",
  "js.confirm_block_server": "Bloquer complètement le serveur \"{name}\" ?\n\nLe serveur sera retiré de tous les pools de routage. Aucun LLM ne sera chargé.\nLe blocage est immédiat et persiste après redémarrage du conteneur.",
  "js.models_available": "modèles disponibles",
  "js.mcp_server_unavail": "Serveur MCP inaccessible. Le conteneur mcp-precision est-il en cours d'exécution ?",
  "js.mcp_calls_log_note": "Les appels MCP seront journalisés après le prochain redémarrage du conteneur.",
  "js.entries_shown": "{shown} entrées affichées, {total} lignes au total dans tool_eval.jsonl",
  "js.confirm_delete_template": "Vraiment supprimer le template \"{name}\" ?",
  "js.confirm_delete_cc_profile": "Vraiment supprimer le profil CC \"{name}\" ?",
  "btn.close": "Fermer",
  "js.prometheus_reloading": "Rechargement de Prometheus…",
  "js.prometheus_reloaded": "Prometheus rechargé.",
  "js.gaia_runs": "Exécutions GAIA",
  "js.no_gaia_runs": "Aucune exécution GAIA trouvée.",
  "js.gaia_started": "Benchmark GAIA démarré",
  "js.bench_type": "Type de benchmark",
  "js.bench_type_overnight": "Nuit (multi-époque)",
  "js.bench_type_gaia": "GAIA (HuggingFace)",
  "js.gaia_levels": "Niveaux",
  "js.gaia_max_per_level": "Max questions par niveau",
  "js.gaia_question": "Question",
  "js.gaia_expected": "Attendu",
  "js.gaia_answer": "Réponse",
  "js.gaia_correct": "Correct",
  "js.gaia_level": "Niveau",
  "js.overall": "Global",
  "js.correct_of": "sur",
  "js.longmemeval_runs": "Exécutions LongMemEval",
  "js.no_longmemeval_runs": "Aucune exécution LongMemEval trouvée.",
  "js.longmemeval_started": "Benchmark LongMemEval démarré",
  "js.bench_type_longmemeval": "LongMemEval (Mémoire)",
  "js.longmemeval_max_q": "Max questions",
  "lbl.sa_benchmarks": "Compte de service — Benchmarks & Gap Healer",
  "msg.sa_benchmarks_desc": "Permissions de templates pour la clé API de",
  "msg.sa_benchmarks_note": "Seuls les templates listés ici peuvent être utilisés par le runner GAIA et le Gap Healer.",
  "lbl.sa_add_template": "— Ajouter un template —",
  "portal.sidebar.connections": "Mes Connexions",
  "portal.my_connections_title": "Mes connexions API",
  "portal.my_connections_desc": "Ajoutez des points de terminaison privés (compatible OpenAI ou Ollama). Utilisez le nom de connexion comme endpoint dans vos templates ou comme <code>model@name</code> en mode natif.",
  "portal.btn_new_connection": "Nouvelle connexion",
  "portal.conn_name_lbl": "Nom (handle)",
  "portal.conn_name_hint": "Identifiant court, 1–32 caractères : lettres, chiffres, _ ou -. Immuable après création.",
  "portal.conn_display_name_lbl": "Nom affiché",
  "portal.conn_url_lbl": "URL de base de l'API",
  "portal.conn_api_type_lbl": "Type d'API",
  "portal.conn_api_key_lbl": "Clé API",
  "portal.conn_api_key_hint": "Laisser vide pour conserver la clé existante",
  "portal.conn_type_openai": "Compatible OpenAI",
  "portal.conn_type_ollama": "Ollama",
  "portal.conn_show_models": "Modèles",
  "portal.conn_models_count": "modèles en cache",
  "portal.conn_col_model": "Modèle",
  "portal.conn_col_context": "Contexte",
  "portal.conn_col_size": "Taille",
  "portal.conn_no_models": "Aucun modèle en cache — cliquer Actualiser",
  "portal.conn_usage_hint": "Dans les templates : endpoint = <code>{name}</code> &nbsp;|&nbsp; Mode natif : <code>model@{name}</code>",
  "portal.btn_test_conn": "Tester",
  "portal.btn_refresh_models": "Actualiser les modèles",
  "portal.conn_test_ok": "Connecté",
  "portal.conn_test_fail": "Connexion échouée",
  "portal.conn_name_conflict": "Ce nom entre en conflit avec un serveur global",
  "js.confirm_delete_connection": "Supprimer cette connexion ?",
  "btn.audit": "Audit",
  "btn.refresh_ext_audits": "Actualiser les audits externes",
  "info.skillssh_audit": "Évaluation skills.sh",
  "js.audit_complete": "Audit terminé : {verdict}",
  "js.audit_required": "Veuillez d'abord effectuer un audit",
  "section.endpoint_availability": "Disponibilité des points de terminaison (24h)",
  "section.endpoint_budget": "Budget des points de terminaison API",
  "info.backup_before_import": "Sauvegarder tous les modèles actuels en JSON",
  "dialog.import_mode_question": "Que faire si un nom existe déjà ?",
  "dialog.import_merge_title": "Ajouter les nouveaux seulement",
  "dialog.import_merge_desc": "Les entrées existantes restent inchangées",
  "dialog.import_replace_title": "Écraser les existants",
  "dialog.import_replace_desc": "Les entrées portant le même nom seront remplacées",
  "lbl.pipeline_log": "Journal Pipeline",
  "lbl.complexity": "Complexité",
  "lbl.from": "De",
  "lbl.to": "À",
  "lbl.limit": "Limite",
  "lbl.requested_at": "Horodatage",
  "lbl.last_24h": "Dernières 24 heures",
  "starfleet_features": "Fonctionnalités Starfleet",
  "feature": "Fonctionnalité",
  "source": "Source",
  "action": "Action",
  "enable": "Activer",
  "disable": "Désactiver",
  "feat_watchdog": "Surveillance proactive",
  "feat_mission_context": "Contexte de mission",
  "feat_adaptive_ui": "Tableau de bord adaptatif",
  "feat_infra_mcp": "Outils MCP infra",
  "mission_context": "Contexte de mission",
  "open_tasks": "Tâches ouvertes",
  "recent_decisions": "Décisions récentes",
  "watchdog_alerts": "Alertes Watchdog",
  "nominal": "Nominal",
  "no_alerts": "Aucune alerte — système nominal",
  "watchdog_config": "Configuration Watchdog",
  "loading": "Chargement",
  "down_threshold": "Seuil panne (cycles)",
  "down_threshold_hint": "Cycles manqués consécutifs avant l'alerte NODE_DOWN",
  "vram_threshold_pct": "Seuil VRAM (%)",
  "vram_threshold_hint": "Utilisation VRAM déclenchant une alerte VRAM_HIGH",
  "stuck_minutes": "Limite blocage (min)",
  "stuck_minutes_hint": "Requêtes actives bloquées au-delà de cette durée",
  "email_escalation": "Escalade par e-mail",
  "email_escalation_enabled": "Activer les e-mails d'escalade",
  "escalation_to": "Adresse destinataire",
  "escalation_cooldown": "Délai de refroidissement (min)",
  "cooldown_hint": "Délai minimum entre deux e-mails pour le même type d'alerte",
  "escalation_severities": "Niveaux à escalader",
  "save": "Enregistrer",
  "send_test_mail": "Envoyer e-mail test",
  "btn.open": "Ouvrir",
  "nav.codex": "MoE Codex ↗",
  "nav.enterprise": "Codex",
  "nav.codex_platform":     "Plateforme",
  "nav.codex_bi":           "BI & Analytique",
  "nav.codex_investigation":"Investigation",
  "nav.codex_pipelines":    "Pipelines & Contenus",
  "nav.codex_security":     "Sécurité",
  "page.enterprise": "Codex",
  "section.lineage_runs": "Exécutions Lineage récentes (Marquez)",
  "status.healthy": "Sain",
  "status.degraded": "Dégradé",
  "status.down": "Indisponible",
  "lbl.url": "URL",
  "lbl.latency": "Latence",
  "lbl.reachable": "Joignable",
  "lbl.job": "Tâche",
  "lbl.run_id": "ID d'exécution",
  "lbl.state": "État",
  "lbl.started_at": "Démarré",
  "lbl.enterprise_not_configured": "moe-codex n'est pas connecté — définir CODEX_URL dans .env et déployer moe-codex.",
  "lbl.marquez_not_configured": "Aucune exécution de pipeline enregistrée — déclencher un pipeline pour émettre des événements OpenLineage.",
  "lbl.lakefs_not_configured": "Aucune version de bundle disponible — effectuer un import de connaissances via moe-codex.",
  "section.bundle_versions": "Versions des bundles de connaissances (lakeFS)",
  "lbl.commit": "Commit",
  "lbl.message": "Message",
  "lbl.author": "Auteur",
  "lbl.committed_at": "Validé le",
  "section.etl_pipeline": "Pipeline ETL (NiFi)",
  "lbl.version": "Version",
  "lbl.uptime": "Temps de fonctionnement",
  "lbl.threads": "Threads",
  "lbl.heap": "Tas",
  "lbl.ingest": "Ingestion",
  "nav.catalog": "Catalogue",
  "page.catalog": "Catalogue de données",
  "lbl.search_filter": "Filtrer par nom, type ou domaine...",
  "lbl.all_sources": "Toutes les sources",
  "lbl.type": "Type",
  "lbl.size": "Taille",
  "lbl.domain": "Domaine",
  "nav.approval": "Validations",
  "page.approval": "Validation des bundles de connaissance",
  "lbl.approval_intro": "Bundles en attente sur des branches lakeFS. Vérifiez le tag source et le nombre d'entités avant fusion dans le graphe.",
  "lbl.branch": "Branche",
  "lbl.source_tag": "Tag source",
  "lbl.entities": "Entités",
  "lbl.submitted_at": "Soumis",
  "lbl.actions": "Actions",
  "btn.approve": "Valider",
  "btn.reject": "Rejeter",
  "lbl.no_pending": "Aucun bundle en attente.",
  "lbl.confirm_approve": "Valider et fusionner ce bundle dans le graphe ?",
  "lbl.confirm_reject": "Rejeter et supprimer cette branche ?",
  "lbl.approving": "Validation en cours",
  "lbl.rejecting": "Rejet en cours",
  "lbl.rejected": "rejetée",
  "section.data_health": "Santé des données (dérives)",
  "lbl.severity": "Sévérité",
  "lbl.declared_entities": "Déclaré",
  "lbl.delta_entities": "Δ entités",
  "lbl.delta_relations": "Δ relations",
  "lbl.flags": "Indicateurs",
  "nav.explorer": "Explorateur",
  "page.explorer": "Explorateur d'objets",
  "lbl.open_neo4j_browser": "Ouvrir le navigateur Neo4j",
  "lbl.explorer_readonly_notice": "Endpoint Cypher en lecture seule. Les mots-clés d'écriture (CREATE / DELETE / SET / MERGE / REMOVE / DROP) sont rejetés.",
  "lbl.cypher_query": "Requête Cypher",
  "lbl.preset_select": "— Preset —",
  "lbl.preset_top_entities": "Entités les plus fiables",
  "lbl.preset_domains": "Répartition des domaines",
  "lbl.preset_schema": "Visualisation du schéma",
  "lbl.preset_recent": "Entités récentes",
  "btn.run_query": "Exécuter",
  "lbl.no_query_run": "Aucune requête exécutée",
  "lbl.running": "exécution",
  "lbl.error": "Erreur",
  "lbl.row": "ligne",
  "lbl.rows": "lignes",
  "lbl.limit_reached": "limite atteinte",
  "nav.notebook": "Notebook",
  "page.notebook": "Notebook (JupyterLab)",
  "page.link_analysis": "Analyse de réseau",
  "page.timeline": "Chronologie",
  "page.kestra": "Pipeline Builder",
  "page.forms": "Formulaires dynamiques",
  "page.search": "Recherche fédérée",
  "page.charts": "Graphiques & Pivot",
  "page.superset": "Analytique / BI",
  "page.compliance": "Conformité",
  "page.geo":        "Géospatial",
  "page.timeseries": "Séries temporelles",
  "page.notes":      "Notes & Rapports",
  "page.workshop":   "Atelier",
  "page.dossier":    "Dossier",
  "lbl.notebook_intro": "JupyterLab tourne comme un container serveur avec un kernel Python complet et tous les packages data science. Utilisez les snippets ci-dessous pour appeler l'API depuis une cellule.",
  "lbl.snippets": "Snippets",
  "lbl.copy_paste_snippets": "Snippets prêts à copier-coller",
  "lbl.snippet_export": "Export",
  "lbl.snippet_import": "Import (en attente)",
  "lbl.snippet_search": "Recherche",
  "lbl.snippet_cypher": "Cypher",
  "lbl.snippet_runs": "Exécutions",
  "lbl.open_full_window": "Ouvrir dans un nouvel onglet",
  "nav.token_timeline": "Token Timeline",
  "lbl.tt_session": "Session",
  "lbl.tt_tokens": "Tokens",
  "lbl.tt_template": "Template",
  "lbl.tt_no_data": "Aucune donnée",
  "lbl.tt_1d": "Dernières 24 h",
  "lbl.tt_7d": "Derniers 7 jours",
  "lbl.tt_30d": "Derniers 30 jours",
  "lbl.tt_90d": "Derniers 90 jours",
  "lbl.perm_cleanup": "Nettoyage des permissions",
  "msg.perm_cleanup_desc": "Analyse et supprime les permissions model_endpoint qui référencent des serveurs d'inférence qui n'existent plus dans la configuration.",
  "btn.perm_cleanup_run": "Nettoyer les permissions",
  "msg.perm_cleanup_click_scan": "Cliquez sur « Scanner » pour détecter les entrées obsolètes.",
  "js.no_stale_permissions": "Aucune permission obsolète trouvée. Système propre.",
  "js.stale_permissions_found": "permission(s) obsolète(s) détectée(s)",
  "js.confirm_perm_cleanup": "Supprimer toutes les permissions model_endpoint obsolètes ? Cette action est irréversible.",
  "js.perm_cleanup_done": "Permissions supprimées",
  "lbl.template_ref_cleanup": "Nettoyage des références de templates",
  "msg.template_ref_cleanup_desc": "Analyse tous les profils CC à la recherche de références expert_template_id obsolètes pointant vers des templates admin ou utilisateur inexistants, et les supprime.",
  "btn.template_ref_scan": "Scanner les références",
  "btn.template_ref_cleanup": "Supprimer les obsolètes",
  "msg.template_ref_click": "Cliquez sur « Scanner les références » pour trouver les références de templates obsolètes.",
  "js.no_stale_template_refs": "Aucune référence de template obsolète trouvée. Système propre.",
  "js.stale_template_refs_found": "référence(s) de template obsolète(s) trouvée(s)",
  "js.confirm_template_ref_cleanup": "Supprimer les entrées expert_template_id obsolètes des profils CC et invalider les caches utilisateurs. Continuer ?",
  "js.template_ref_cleanup_done": "Références de templates nettoyées",

  "portal.sidebar.audit_log": "Journal d'audit",
  "portal.audit_log.title": "Mon journal d'audit",
  "portal.audit_log.subtitle": "Historique de vos requêtes et réponses",
  "portal.audit_log.col_time": "Heure",
  "portal.audit_log.col_model": "Modèle",
  "portal.audit_log.col_mode": "Mode",
  "portal.audit_log.col_prompt": "Requête",
  "portal.audit_log.col_tokens": "Tokens",
  "portal.audit_log.col_latency": "Latence",
  "portal.audit_log.empty": "Aucune entrée pour l'instant. Les requêtes seront journalisées ici dès que vous utiliserez l'API.",
  "portal.audit_log.search_placeholder": "Rechercher dans les requêtes et réponses…",
  "portal.audit_log.date_from": "Du",
  "portal.audit_log.date_to": "Au",
  "portal.audit_log.btn_reset": "Réinitialiser",
  "portal.audit_log.btn_export_csv": "Export CSV",
  "portal.audit_log.btn_export_json": "Export JSON",
  "portal.audit_log.modal_prompt": "Requête",
  "portal.audit_log.modal_response": "Réponse",
  "portal.audit_log.modal_meta": "Métadonnées",
  "portal.audit_log.btn_copy": "Copier",
  "portal.audit_log.retention_title": "Durée de conservation",
  "portal.audit_log.retention_label": "Conserver les journaux pendant",
  "portal.audit_log.retention_days": "jours",
  "portal.audit_log.retention_save": "Enregistrer",
  "portal.audit_log.retention_hint": "Conservation maximale : {max} jours. Les fichiers plus anciens sont supprimés quotidiennement.",
  "portal.audit_log.disabled": "La journalisation d'audit est désactivée.",
  "skill.detect.xlsx": "excel,tableau,spreadsheet,calcul,xlsx,xls,document tableur,créer tableau,générer tableur,fichier excel",
  "skill.detect.docx": "word,document,docx,document word,fichier word,lettre,rapport,document texte",
  "skill.detect.pptx": "powerpoint,présentation,diapositives,slides,pptx,diaporama,créer présentation,faire des slides",
  "skill.detect.web": "créer site web,construire site,page html,application web,jeu navigateur,créer html,webapp,page de destination",
  "skill.detect.pdf": "créer pdf,générer pdf,exporter en pdf,sortie pdf,fichier pdf,enregistrer en pdf"
}