# Hermes static-message catalog -- French (français) # See locales/en.yaml for the source of truth; keep keys in sync. approval: dangerous_header: "⚠️ COMMANDE DANGEREUSE : {description}" choose_long: " [o]ne fois | [s]ession | [t]oujours | [r]efuser" choose_short: " [o]ne fois | [s]ession | [r]efuser" prompt_long: " Choix [o/s/t/R] : " prompt_short: " Choix [o/s/R] : " timeout: " ⏱ Délai dépassé — commande refusée" allowed_once: " ✓ Autorisé une fois" allowed_session: " ✓ Autorisé pour cette session" allowed_always: " ✓ Ajouté à la liste d'autorisation permanente" denied: " ✗ Refusé" cancelled: " ✗ Annulé" blocklist_message: "Cette commande est sur la liste de blocage inconditionnel et ne peut pas être approuvée." gateway: approval_expired: "⚠️ Approbation expirée (l'agent n'attend plus). Demandez à l'agent de réessayer." draining: "⏳ Vidage de {count} agent(s) actif(s) avant redémarrage..." goal_cleared: "✓ Objectif effacé." no_active_goal: "Aucun objectif actif." config_read_failed: "⚠️ Impossible de lire config.yaml : {error}" config_save_failed: "⚠️ Impossible de sauvegarder la configuration : {error}" model: error_prefix: "Erreur : {error}" switched: "Modèle changé pour `{model}`" provider_label: "Fournisseur : {provider}" context_label: "Contexte : {tokens} tokens" max_output_label: "Sortie max. : {tokens} tokens" cost_label: "Coût : {cost}" capabilities_label: "Capacités : {capabilities}" prompt_caching_enabled: "Cache de prompts : activé" warning_prefix: "Avertissement : {warning}" saved_global: "Enregistré dans config.yaml (`--global`)" session_only_hint: "_(session uniquement — ajoutez `--global` pour conserver)_" current_label: "Actuel : `{model}` chez {provider}" current_tag: " (actuel)" more_models_suffix: " (+{count} autres)" usage_switch_model: "`/model ` — changer de modèle" usage_switch_provider: "`/model --provider ` — changer de fournisseur" usage_persist: "`/model --global` — conserver" agents: header: "🤖 **Agents et tâches actifs**" active_agents: "**Agents actifs :** {count}" this_chat: " · ce chat" more: "... et {count} de plus" running_processes: "**Processus d'arrière-plan en cours :** {count}" async_jobs: "**Tâches asynchrones du gateway :** {count}" none: "Aucun agent actif ni tâche en cours." state_starting: "démarrage" state_running: "en cours" approve: no_pending: "Aucune commande en attente d'approbation." once_singular: "✅ Commande approuvée. L'agent reprend..." once_plural: "✅ Commandes approuvées ({count} commandes). L'agent reprend..." session_singular: "✅ Commande approuvée (modèle approuvé pour cette session). L'agent reprend..." session_plural: "✅ Commandes approuvées (modèle approuvé pour cette session) ({count} commandes). L'agent reprend..." always_singular: "✅ Commande approuvée (modèle approuvé de manière permanente). L'agent reprend..." always_plural: "✅ Commandes approuvées (modèle approuvé de manière permanente) ({count} commandes). L'agent reprend..." background: usage: "Usage : /background \nExemple : /background Résume les meilleures histoires HN d'aujourd'hui\n\nExécute le prompt dans une session séparée. Vous pouvez continuer à discuter — le résultat apparaîtra ici une fois terminé." started: "🔄 Tâche d'arrière-plan démarrée : « {preview} »\nID de tâche : {task_id}\nVous pouvez continuer à discuter — les résultats apparaîtront ici une fois terminés." branch: db_unavailable: "Base de données des sessions indisponible." no_conversation: "Aucune conversation à brancher — envoyez d'abord un message." create_failed: "Échec de la création de la branche : {error}" switch_failed: "Branche créée mais impossible de basculer dessus." branched_one: "⑂ Branche **{title}** créée ({count} message copié)\nOriginal : `{parent}`\nBranche : `{new}`\nUtilisez `/resume` pour revenir à l'original." branched_many: "⑂ Branche **{title}** créée ({count} messages copiés)\nOriginal : `{parent}`\nBranche : `{new}`\nUtilisez `/resume` pour revenir à l'original." commands: usage: "Utilisation : `/commands [page]`" skill_header: "⚡ **Commandes de skill** :" default_desc: "Commande de skill" none: "Aucune commande disponible." header: "📚 **Commandes** ({total} au total, page {page}/{total_pages})" nav_prev: "`/commands {page}` ← précédent" nav_next: "suivant → `/commands {page}`" out_of_range: "_(La page demandée {requested} était hors limites, affichage de la page {page}.)_" compress: not_enough: "Conversation insuffisante pour la compression (au moins 4 messages nécessaires)." no_provider: "Aucun fournisseur configuré — compression impossible." nothing_to_do: "Rien à compresser pour l'instant (la transcription est encore entièrement du contexte protégé)." focus_line: "Focus : \"{topic}\"" summary_failed: "⚠️ Échec de la génération du résumé ({error}). {count} message(s) historique(s) ont été supprimés et remplacés par un espace réservé ; le contexte antérieur n'est plus récupérable. Vérifiez la configuration du modèle auxiliary.compression." aux_failed: "ℹ️ Le modèle de compression configuré `{model}` a échoué ({error}). Récupéré avec votre modèle principal — le contexte est intact — mais vous pouvez vérifier `auxiliary.compression.model` dans config.yaml." failed: "Échec de la compression : {error}" debug: upload_failed: "✗ Échec de l'envoi du rapport de débogage : {error}" header: "**Rapport de débogage envoyé :**" auto_delete: "⏱ Les pastes s'effaceront automatiquement dans 6 heures." full_logs_hint: "Pour envoyer les journaux complets, utilisez `hermes debug share` depuis la CLI." share_hint: "Partagez ces liens avec l'équipe Hermes pour obtenir de l'aide." deny: stale: "❌ Commande refusée (l'approbation était périmée)." no_pending: "Aucune commande en attente de refus." denied_singular: "❌ Commande refusée." denied_plural: "❌ Commandes refusées ({count} commandes)." fast: not_supported: "⚡ /fast n'est disponible que pour les modèles OpenAI qui prennent en charge Priority Processing." status: "⚡ Priority Processing\n\nMode actuel : `{mode}`\n\n_Usage :_ `/fast `" unknown_arg: "⚠️ Argument inconnu : `{arg}`\n\n**Options valides :** normal, fast, status" saved: "⚡ ✓ Priority Processing : **{label}** (enregistré dans la configuration)\n_(prend effet au prochain message)_" session_only: "⚡ ✓ Priority Processing : **{label}** (cette session uniquement)" label_fast: "FAST" label_normal: "NORMAL" status_fast: "fast" status_normal: "normal" footer: status: "📎 Pied de page d'exécution : **{state}**\nChamps : `{fields}`\nPlateforme : `{platform}`" usage: "Usage : `/footer [on|off|status]`" saved: "📎 Pied de page d'exécution : **{state}**{example}\n_(enregistré globalement — prend effet au prochain message)_" example_line: "\nExemple : `{preview}`" state_on: "ON" state_off: "OFF" goal: unavailable: "Les objectifs ne sont pas disponibles dans cette session." no_goal_set: "Aucun objectif défini." paused: "⏸ Objectif en pause : {goal}" no_resume: "Aucun objectif à reprendre." resumed: "▶ Objectif repris : {goal}\nEnvoyez un message pour continuer, ou attendez — je passerai à l'étape suivante au prochain tour." invalid: "Objectif invalide : {error}" set: "⊙ Objectif défini (budget de {budget} tours) : {goal}\nJe continuerai jusqu'à ce que l'objectif soit terminé, que vous le mettiez en pause/effaciez, ou que le budget soit épuisé.\nContrôles : /goal status · /goal pause · /goal resume · /goal clear" help: header: "📖 **Commandes Hermes**\n" skill_header: "\n⚡ **Commandes de skill** ({count} actives) :" more_use_commands: "\n... et {count} de plus. Utilisez `/commands` pour la liste paginée complète." insights: invalid_days: "Valeur --days invalide : {value}" error: "Erreur lors de la génération des analyses : {error}" kanban: error_prefix: "⚠ erreur kanban : {error}" subscribed_suffix: "(abonné — vous serez notifié lorsque {task_id} se terminera ou sera bloqué)" truncated_suffix: "… (tronqué ; utilisez `hermes kanban …` dans votre terminal pour la sortie complète)" no_output: "(aucune sortie)" personality: none_configured: "Aucune personnalité configurée dans `{path}/config.yaml`" header: "🎭 **Personnalités disponibles**\n" none_option: "• `none` — (aucune superposition de personnalité)" item: "• `{name}` — {preview}" usage: "\nUtilisation : `/personality `" save_failed: "⚠️ Échec de l'enregistrement du changement de personnalité : {error}" cleared: "🎭 Personnalité effacée — comportement de base de l'agent utilisé.\n_(prend effet au prochain message)_" set_to: "🎭 Personnalité définie sur **{name}**\n_(prend effet au prochain message)_" unknown: "Personnalité inconnue : `{name}`\n\nDisponibles : {available}" profile: header: "👤 **Profil :** `{profile}`" home: "📂 **Dossier personnel :** `{home}`" reasoning: level_default: "medium (par défaut)" level_disabled: "none (désactivé)" scope_session: "remplacement de session" scope_global: "configuration globale" status: "🧠 **Paramètres de raisonnement**\n\n**Effort :** `{level}`\n**Portée :** {scope}\n**Affichage :** {display}\n\n_Usage :_ `/reasoning [--global]`" display_on: "activé ✓" display_off: "désactivé" display_set_on: "🧠 ✓ Affichage du raisonnement : **ACTIVÉ**\nLa réflexion du modèle sera affichée avant chaque réponse sur **{platform}**." display_set_off: "🧠 ✓ Affichage du raisonnement : **DÉSACTIVÉ** pour **{platform}**" reset_global_unsupported: "⚠️ `/reasoning reset --global` n'est pas pris en charge. Utilisez `/reasoning --global` pour modifier la valeur globale par défaut." reset_done: "🧠 ✓ Remplacement de raisonnement de la session effacé ; retour à la configuration globale." unknown_arg: "⚠️ Argument inconnu : `{arg}`\n\n**Niveaux valides :** none, minimal, low, medium, high, xhigh\n**Affichage :** show, hide\n**Persister :** ajoutez `--global` pour enregistrer au-delà de cette session" set_global: "🧠 ✓ Effort de raisonnement défini sur `{effort}` (enregistré dans la configuration)\n_(prend effet au prochain message)_" set_global_save_failed: "🧠 ✓ Effort de raisonnement défini sur `{effort}` (session uniquement — échec de l'enregistrement de la configuration)\n_(prend effet au prochain message)_" set_session: "🧠 ✓ Effort de raisonnement défini sur `{effort}` (session uniquement — ajoutez `--global` pour persister)\n_(prend effet au prochain message)_" reload_mcp: cancelled: "🟡 /reload-mcp annulé. Outils MCP inchangés." always_followup: "ℹ️ Les prochains appels `/reload-mcp` s'exécuteront sans confirmation. Réactivez via `approvals.mcp_reload_confirm: true` dans `config.yaml`." confirm_prompt: "⚠️ **Confirmer /reload-mcp**\n\nRecharger les serveurs MCP reconstruit l'ensemble d'outils de cette session et **invalide le cache de prompt du fournisseur** — le prochain message renverra l'intégralité des jetons d'entrée. Sur les modèles à long contexte ou à raisonnement élevé, cela peut être coûteux.\n\nChoisissez :\n• **Approuver une fois** — recharger maintenant\n• **Toujours approuver** — recharger maintenant et masquer cette confirmation définitivement\n• **Annuler** — laisser les outils MCP inchangés\n\n_Alternative texte : répondez `/approve`, `/always` ou `/cancel`._" header: "🔄 **Serveurs MCP rechargés**\n" reconnected: "♻️ Reconnectés : {names}" added: "➕ Ajoutés : {names}" removed: "➖ Supprimés : {names}" none_connected: "Aucun serveur MCP connecté." tools_available: "\n🔧 {tools} outil(s) disponible(s) sur {servers} serveur(s)" failed: "❌ Échec du rechargement MCP : {error}" reload_skills: header: "🔄 **Skills rechargées**\n" no_new: "Aucune nouvelle skill détectée." total: "\n📚 {count} skill(s) disponible(s)" added_header: "➕ **Skills ajoutées :**" removed_header: "➖ **Skills supprimées :**" item_with_desc: " - {name} : {desc}" item_no_desc: " - {name}" failed: "❌ Échec du rechargement des skills : {error}" reset: header_default: "✨ Session réinitialisée ! Nouveau départ." header_new: "✨ Nouvelle session démarrée !" header_titled: "✨ Nouvelle session démarrée : {title}" title_rejected: "\n⚠️ Titre refusé : {error}" title_error_untitled: "\n⚠️ {error} — session démarrée sans titre." title_empty_untitled: "\n⚠️ Le titre est vide après nettoyage — session démarrée sans titre." tip: "\n✦ Astuce : {tip}" restart: in_progress: "⏳ Redémarrage du gateway déjà en cours..." restarting: "♻ Redémarrage du gateway. Si vous n'êtes pas notifié dans les 60 secondes, redémarrez depuis la console avec `hermes gateway restart`." resume: db_unavailable: "Base de données des sessions indisponible." no_named_sessions: "Aucune session nommée trouvée.\nUtilisez `/title Ma session` pour nommer la session actuelle, puis `/resume Ma session` pour y revenir plus tard." list_header: "📋 **Sessions nommées**\n" list_item: "• **{title}**{preview_part}" list_preview_suffix: " — _{preview}_" list_footer: "\nUsage : `/resume `" list_failed: "Impossible de lister les sessions : {error}" not_found: "Aucune session correspondant à '**{name}**' trouvée.\nUtilisez `/resume` sans argument pour voir les sessions disponibles." already_on: "📌 Déjà sur la session **{name}**." switch_failed: "Échec du changement de session." resumed_one: "↻ Session **{title}** reprise ({count} message). Conversation restaurée." resumed_many: "↻ Session **{title}** reprise ({count} messages). Conversation restaurée." resumed_no_count: "↻ Session **{title}** reprise. Conversation restaurée." retry: no_previous: "Aucun message précédent à réessayer." rollback: not_enabled: "Les points de contrôle ne sont pas activés.\nActivez-les dans config.yaml :\n```\ncheckpoints:\n enabled: true\n```" none_found: "Aucun point de contrôle trouvé pour {cwd}" invalid_number: "Numéro de point de contrôle invalide. Utilisez 1-{max}." restored: "✅ Restauré au point de contrôle {hash} : {reason}\nUn instantané pré-rollback a été enregistré automatiquement." restore_failed: "❌ {error}" set_home: save_failed: "Impossible d'enregistrer le canal principal : {error}" success: "✅ Canal principal défini sur **{name}** (ID : {chat_id}).\nLes tâches cron et les messages multi-plateformes seront livrés ici." status: header: "📊 **État de Hermes Gateway**" session_id: "**ID de session :** `{session_id}`" title: "**Titre :** {title}" created: "**Créé :** {timestamp}" last_activity: "**Dernière activité :** {timestamp}" tokens: "**Jetons :** {tokens}" agent_running: "**Agent en cours :** {state}" state_yes: "Oui ⚡" state_no: "Non" queued: "**Suivis en file :** {count}" platforms: "**Plateformes connectées :** {platforms}" stop: stopped_pending: "⚡ Arrêté. L'agent n'avait pas encore commencé — vous pouvez continuer cette session." stopped: "⚡ Arrêté. Vous pouvez continuer cette session." no_active: "Aucune tâche active à arrêter." title: db_unavailable: "Base de données des sessions indisponible." warn_prefix: "⚠️ {error}" empty_after_clean: "⚠️ Le titre est vide après nettoyage. Utilisez des caractères imprimables." set_to: "✏️ Titre de session défini : **{title}**" not_found: "Session introuvable dans la base de données." current_with_title: "📌 Session : `{session_id}`\nTitre : **{title}**" current_no_title: "📌 Session : `{session_id}`\nAucun titre défini. Usage : `/title Mon nom de session`" topic: not_telegram_dm: "La commande /topic n'est disponible que dans les chats privés Telegram." no_session_db: "Base de données de sessions non disponible." unauthorized: "Vous n'êtes pas autorisé à utiliser /topic sur ce bot." restore_needs_topic: "Pour restaurer une session, créez ou ouvrez d'abord un topic Telegram, puis envoyez /topic dans ce topic. Pour créer un nouveau topic, ouvrez All Messages et envoyez-y n'importe quel message." topics_disabled: "Les topics Telegram ne sont pas encore activés pour ce bot.\n\nComment les activer :\n1. Ouvrez @BotFather.\n2. Choisissez votre bot.\n3. Ouvrez Bot Settings → Threads Settings.\n4. Activez Threaded Mode et assurez-vous que les utilisateurs sont autorisés à créer de nouveaux threads.\n\nPuis envoyez /topic à nouveau." topics_user_disallowed: "Les topics Telegram sont activés, mais les utilisateurs ne peuvent pas en créer.\n\nOuvrez @BotFather → choisissez votre bot → Bot Settings → Threads Settings, puis désactivez 'Disallow users to create new threads'.\n\nPuis envoyez /topic à nouveau." enable_failed: "Échec de l'activation du mode topic Telegram : {error}" bound_status: "Ce topic est lié à :\nSession : {label}\nID : {session_id}\n\nUtilisez /new pour remplacer ce topic par une nouvelle session.\nPour un travail parallèle, ouvrez All Messages et envoyez-y un message pour créer un autre topic." thread_ready: "Les topics multi-sessions Telegram sont activés.\n\nCe topic sera utilisé comme session Hermes indépendante. Utilisez /new pour remplacer la session actuelle de ce topic. Pour un travail parallèle, ouvrez All Messages et envoyez-y un message pour créer un autre topic." untitled_session: "Session sans titre" undo: nothing: "Rien à annuler." removed: "↩️ {count} message(s) annulé(s).\nSupprimé : « {preview} »" update: platform_not_messaging: "✗ /update n'est disponible que depuis les plateformes de messagerie. Exécutez `hermes update` depuis le terminal." not_git_repo: "✗ Pas un dépôt git — impossible de mettre à jour." hermes_cmd_not_found: "✗ Impossible de localiser la commande `hermes`. Hermes est en cours d'exécution, mais la commande de mise à jour n'a pas pu trouver l'exécutable dans le PATH ni via l'interpréteur Python actuel. Essayez d'exécuter `hermes update` manuellement dans votre terminal." start_failed: "✗ Échec du démarrage de la mise à jour : {error}" starting: "⚕ Démarrage de la mise à jour Hermes… Je diffuserai la progression ici." usage: rate_limits: "⏱️ **Limites de débit :** {state}" header_session: "📊 **Utilisation des jetons de session**" label_model: "Modèle : `{model}`" label_input_tokens: "Jetons d'entrée : {count}" label_cache_read: "Jetons de lecture du cache : {count}" label_cache_write: "Jetons d'écriture du cache : {count}" label_output_tokens: "Jetons de sortie : {count}" label_total: "Total : {count}" label_api_calls: "Appels API : {count}" label_cost: "Coût : {prefix}${amount}" label_cost_included: "Coût : inclus" label_context: "Contexte : {used} / {total} ({pct}%)" label_compressions: "Compressions : {count}" header_session_info: "📊 **Infos de session**" label_messages: "Messages : {count}" label_estimated_context: "Contexte estimé : ~{count} jetons" detailed_after_first: "_(Utilisation détaillée disponible après la première réponse de l'agent)_" no_data: "Aucune donnée d'utilisation disponible pour cette session." verbose: not_enabled: "La commande `/verbose` n'est pas activée pour les plateformes de messagerie.\n\nActivez-la dans `config.yaml` :\n```yaml\ndisplay:\n tool_progress_command: true\n```" mode_off: "⚙️ Progression des outils : **OFF** — aucune activité d'outil affichée." mode_new: "⚙️ Progression des outils : **NEW** — affichée lors d'un changement d'outil (longueur d'aperçu : `display.tool_preview_length`, par défaut 40)." mode_all: "⚙️ Progression des outils : **ALL** — chaque appel d'outil est affiché (longueur d'aperçu : `display.tool_preview_length`, par défaut 40)." mode_verbose: "⚙️ Progression des outils : **VERBOSE** — chaque appel d'outil avec ses arguments complets." saved_suffix: "_(enregistré pour **{platform}** — prend effet au prochain message)_" save_failed: "_(impossible d'enregistrer dans la configuration : {error})_" voice: enabled_voice_only: "Mode vocal activé.\nJe répondrai en vocal quand vous envoyez des messages vocaux.\nUtilisez /voice tts pour obtenir des réponses vocales à tous les messages." disabled_text: "Mode vocal désactivé. Réponses uniquement textuelles." tts_enabled: "TTS automatique activé.\nToutes les réponses incluront un message vocal." status_mode: "Mode vocal : {label}" status_channel: "Canal vocal : #{channel}" status_participants: "Participants : {count}" status_member: " - {name}{status}" speaking: " (parle)" enabled_short: "Mode vocal activé." disabled_short: "Mode vocal désactivé." label_off: "Désactivé (texte seulement)" label_voice_only: "Activé (réponse vocale aux messages vocaux)" label_all: "TTS (réponse vocale à tous les messages)" yolo: disabled: "⚠️ Mode YOLO **DÉSACTIVÉ** pour cette session — les commandes dangereuses nécessiteront une approbation." enabled: "⚡ Mode YOLO **ACTIVÉ** pour cette session — toutes les commandes sont auto-approuvées. À utiliser avec prudence." shared: session_db_unavailable: "Base de données de sessions indisponible." session_db_unavailable_prefix: "Base de données de sessions indisponible" session_not_found: "Session introuvable dans la base de données." warn_passthrough: "⚠️ {error}"