diff --git a/static/i18n.js b/static/i18n.js index c4d03526..4cdd841c 100644 --- a/static/i18n.js +++ b/static/i18n.js @@ -10646,6 +10646,947 @@ const LOCALES = { voice_mode_toggle_active: 'Exit voice mode', // TODO: translate subagent_children: 'Subagent sessions', // TODO: translate }, + + fr: { + offline_title: 'Connexion perdue', + offline_browser_detail: 'Votre navigateur signale que cet appareil est hors ligne.', + offline_network_detail: 'Hermes est actuellement inaccessible depuis ce navigateur.', + offline_autorefresh: 'J\'actualiserai automatiquement cette page lorsqu\'Hermès sera à nouveau joignable.', + offline_check_now: 'Vérifiez maintenant', + offline_checking: 'Vérification…', + offline_stream_waiting: 'Connexion perdue. En attendant de rafraîchir…', + _lang: 'fr', + _label: 'Français', + _speech: 'fr-FR', + cancelling: 'Annulation\u2026', + cancel_failed: 'Échec de l\'annulation :', + mic_denied: 'Accès au microphone refusé. Vérifiez les autorisations du navigateur.', + mic_no_speech: 'Aucune parole détectée. Essayer à nouveau.', + mic_network: 'Reconnaissance vocale indisponible.', + mic_error: 'Erreur de saisie vocale :', + voice_dictate: 'Dicter', + voice_dictate_active: 'Arrêter la dictée', + voice_mode_toggle: 'Mode vocal', + voice_mode_toggle_active: 'Quitter le mode vocal', + voice_listening: 'Écoute…', + voice_speaking: 'Parlant…', + voice_thinking: 'Pensée…', + voice_error: 'Voix non prise en charge dans ce navigateur', + voice_mode_active: 'Mode vocal activé', + voice_mode_off: 'Mode vocal désactivé', + session_imported: 'Session importée', + import_failed: 'Échec de l\'importation :', + import_invalid_json: 'JSON invalide', + image_pasted: 'Image collée :', + edit_message: 'Modifier le message', + regenerate: 'Régénérer la réponse', + copy: 'Copie', + copied: 'Copié!', + copy_failed: 'Échec de la copie', + diff_loading: 'Chargement des différences', + diff_error: 'Impossible de charger le fichier de correctif', + diff_too_large: 'Fichier de correctif trop volumineux pour être affiché en ligne', + tree_view: 'Arbre', + raw_view: 'Brut', + parse_failed_note: 'l\'analyse a échoué', + you: 'Toi', + mcp_servers_title: 'Serveurs MCP', + mcp_servers_desc: 'Affichez les serveurs MCP configurés dans config.yaml.', + mcp_no_servers: 'Aucun serveur MCP configuré.', + mcp_add_server: '+ Ajouter un serveur', + mcp_field_name: 'Nom du serveur', + mcp_transport_label: 'Type de transport', + mcp_field_command: 'Commande', + mcp_field_args: 'Arguments (séparés par des virgules)', + mcp_field_url: 'URL', + mcp_field_timeout: 'Délai d\'expiration (secondes)', + mcp_save: 'Sauvegarder', + mcp_cancel: 'Annuler', + mcp_name_required: 'Le nom du serveur est requis.', + mcp_url_required: 'L\'URL est requise pour le transport HTTP.', + mcp_command_required: 'La commande est requise pour le transport stdio.', + mcp_saved: 'Serveur MCP enregistré.', + mcp_save_failed: 'Échec de l\'enregistrement du serveur MCP.', + mcp_delete_confirm_title: 'Supprimer le serveur MCP', + mcp_delete_confirm_message: 'Supprimer le serveur MCP "{0}" ? Cette action ne peut pas être annulée.', + mcp_deleted: 'Serveur MCP supprimé.', + mcp_delete_failed: 'Échec de la suppression du serveur MCP.', + mcp_load_failed: 'Échec du chargement des serveurs MCP.', + mcp_restart_hint: 'Les modifications apportées au serveur sont en lecture seule ici pour le moment. Modifiez config.yaml et redémarrez Hermes pour que les modifications prennent effet.', + mcp_toggle_followup: 'Les contrôles d\'activation/désactivation sont intentionnellement différés jusqu\'à ce que la sémantique de rechargement MCP soit explicite.', + mcp_status_active: 'Actif', + mcp_status_configured: 'Configuré', + mcp_status_disabled: 'Désactivé', + mcp_status_invalid_config: 'Configuration invalide', + mcp_status_unknown: 'Inconnu', + mcp_tool_count: '{0} outils', + mcp_enabled_yes: 'Activé', + mcp_enabled_no: 'Désactivé', + mcp_tools_title: 'Outils MCP', + mcp_tools_desc: 'Recherchez des outils connus sur les serveurs MCP actifs.', + mcp_tools_search_placeholder: 'Outils de recherche par nom, serveur ou description…', + mcp_tools_no_tools: 'Aucun outil MCP n\'est disponible dans l\'inventaire d\'exécution actif.', + mcp_tools_no_matches: 'Aucun outil MCP ne correspond à votre recherche.', + mcp_tools_load_failed: 'Échec du chargement des outils MCP.', + mcp_tools_schema_empty: 'Aucun paramètre de schéma.', + mcp_tools_runtime_note: 'L\'inventaire des outils utilise uniquement les données d\'exécution MCP actives déjà connues ; le WebUI ne démarre pas et ne sonde pas les serveurs.', + pdf_loading: 'Chargement du PDF {0}…', + pdf_too_large: 'PDF trop volumineux pour un aperçu en ligne', + pdf_no_pages: 'Le PDF n\'a pas de pages', + pdf_error: 'Échec de l\'affichage de l\'aperçu PDF', + pdf_download: 'Télécharger le PDF', + html_loading: 'Chargement de l\'aperçu HTML…', + html_too_large: 'HTML trop volumineux pour l\'aperçu en ligne', + html_error: 'Échec de l\'affichage de l\'aperçu HTML', + html_open_full: 'Ouvrir la page entière', + html_sandbox_label: 'Aperçu HTML (en bac à sable)', + thinking: 'Pensée', + expand_all: 'Tout développer', + collapse_all: 'Tout réduire', + edit_failed: 'Échec de la modification :', + regen_failed: 'Échec de la régénération :', + reconnect_active: 'Une réponse est toujours en cours de génération. Recharger quand vous êtes prêt ?', + reconnect_finished: 'Une réponse était en cours lors de votre dernier départ. Les messages ont peut-être été mis à jour.', + approval_heading: 'Approbation requise', + approval_desc_prefix: 'Commande dangereuse détectée', + approval_btn_once: 'Autoriser une fois', + approval_btn_once_title: 'Autoriser cette commande (Entrée)', + approval_btn_session: 'Autoriser la session', + approval_btn_session_title: 'Autoriser cette session de conversation', + approval_btn_always: 'Toujours autoriser', + approval_btn_always_title: 'Toujours autoriser ce modèle de commande', + approval_btn_deny: 'Refuser', + approval_btn_deny_title: 'Refuser - n\'exécutez pas cette commande', + approval_responding: 'Répondre\u2026', + clarify_heading: 'Des éclaircissements sont nécessaires', + clarify_hint: 'Choisissez un choix ou saisissez votre propre réponse ci-dessous.', + clarify_other: 'Autre', + clarify_send: 'Envoyer', + clarify_input_placeholder: 'Tapez votre réponse…', + clarify_responding: 'Répondre\u2026', + untitled: 'Sans titre', + load_older_messages: '↑ Faites défiler vers le haut ou cliquez pour charger les anciens messages', + session_jump_start: 'Commencer', + session_jump_start_label: 'Aller au début de la session', + session_jump_end: 'Fin', + session_jump_end_label: 'Aller à la fin de la session', + queued_label: 'Envoie après réponse', + queued_cancel: 'Annuler le message en file d\'attente', + model_unavailable: '(indisponible)', + model_unavailable_title: 'Ce modèle ne figure plus dans votre liste de fournisseurs actuelle', + provider_mismatch_label: 'Inadéquation des fournisseurs', + model_not_found_label: 'Modèle introuvable', + model_custom_label: 'ID de modèle personnalisé', + model_custom_placeholder: 'par ex. openai/gpt-5.4', + model_search_placeholder: 'Rechercher des modèles…', + model_search_no_results: 'Aucun modèle trouvé', + model_group_configured: 'Configuré', + ws_search_placeholder: 'Rechercher des espaces de travail…', + ws_no_results: 'Aucun espace de travail trouvé', + workspace_new_worktree_conversation: 'Nouvelle conversation dans l\'arbre de travail', + workspace_new_worktree_conversation_meta: 'Créez un arbre de travail git isolé pour cet espace de travail.', + workspace_worktree_created: 'Conversation Worktree créée', + workspace_worktree_failed: 'La création de l\'arbre de travail a échoué :', + session_worktree_badge: 'Arbre de travail', + model_scope_advisory: 'S\'applique à cette conversation à partir de votre prochain message.', + model_scope_toast: 'S\'applique à cette conversation à partir de votre prochain message.', + cmd_clear: 'Messages de conversation clairs', + cmd_compress: 'Compresser manuellement le contexte de conversation (utilisation : /compress [thème principal])', + ctx_compress_hint: 'Compresser le contexte pour libérer de l\'espace →', + ctx_compress_action: '⚠ Compressez maintenant pour libérer le contexte', + cmd_compact_alias: 'Alias ​​hérité pour /compress', + cmd_model: 'Changer de modèle (par exemple /model gpt-4o)', + cmd_workspace: 'Changer d\'espace de travail par nom', + cmd_terminal: 'Ouvrez le terminal de l\'espace de travail', + cmd_new: 'Démarrer une nouvelle session de discussion', + cmd_usage: 'Activer/désactiver l\'affichage de l\'utilisation du jeton', + cmd_theme: 'Changer d\'apparence (thème : système/dark/light, skin : default/ares/mono/slate/poseidon/sisyphus/charizard)', + cmd_personality: 'Personnalité de l\'agent de commutation', + cmd_skills: 'Lister les compétences Hermès disponibles', + available_commands: 'Commandes disponibles :', + type_slash: 'Tapez / pour voir les commandes', + conversation_cleared: 'Conversation effacée', + command_label: 'Commande', + context_compaction_label: 'Compactage du contexte', + preserved_task_list_label: 'Liste de tâches préservée', + reference_only_label: 'Référence seulement', + model_usage: 'Utilisation : /model ', + no_model_match: 'Aucun modèle correspondant "', + switched_to: 'Passé à', + workspace_usage: 'Utilisation : /espace de travail ', + no_workspace_match: 'Aucun espace de travail correspondant "', + switched_workspace: 'Passé à l\'espace de travail :', + workspace_switch_failed: 'Échec du changement d\'espace de travail :', + new_session: 'Nouvelle session créée', + compressing: 'Demande de compression de contexte...', + compress_running_label: 'Compression', + compress_complete_label: 'Compression terminée', + auto_compress_label: 'Compression automatique', + compress_failed_label: 'Échec de la compression', + focus_label: 'Se concentrer', + token_usage_on: 'Utilisation du jeton sur', + token_usage_off: 'Utilisation des jetons désactivée', + theme_usage: 'Utilisation : /thème', + theme_set: 'Thème:', + no_active_session: 'Aucune session active', + cmd_queue: 'Mettre un message en file d\'attente pour le prochain tour', + cmd_goal: 'Définir ou inspecter un objectif persistant', + goal_evaluating_progress: 'Évaluer la progression des objectifs…', + goal_working_toward: 'Travailler vers l’objectif…', + goal_continuing_toast: 'Continuer vers l’objectif…', + goal_status_none: 'Aucun objectif actif. Définissez-en un avec /goal .', + goal_cleared: 'But dégagé.', + goal_no_goal: 'Aucun objectif actif.', + cmd_interrupt: 'Annuler le tour en cours et envoyer un nouveau message', + cmd_steer: 'Injecter une correction à mi-tour sans interrompre l\'agent', + cmd_queue_no_msg: 'Utilisation : /queue ', + cmd_queue_not_busy: 'Aucune tâche active - envoyez simplement normalement', + cmd_queue_confirm: 'Message en file d\'attente', + cmd_interrupt_no_msg: 'Utilisation : /interruption ', + cmd_interrupt_confirm: 'Interrompu — envoi d\'un nouveau message', + cmd_steer_no_msg: 'Utilisation : /steer ', + cmd_steer_fallback: 'Steer indisponible – mis en file d’attente pour le prochain tour à la place', + cmd_steer_delivered: 'Steer livré - l\'agent le verra sur son prochain résultat d\'outil', + steer_leftover_queued: 'Bœuf en attente pour le prochain tour', + busy_steer_fallback: 'Steer indisponible – en file d’attente pour le prochain tour', + busy_interrupt_confirm: 'Interrompu — envoi d\'un nouveau message', + settings_label_busy_input_mode: 'Mode de saisie occupé', + settings_desc_busy_input_mode: 'Contrôle ce qui se passe lorsque vous envoyez un message pendant l\'exécution de l\'agent. La file d\'attente attend ; L\'interruption s\'annule et recommence ; Steer injecte une correction à mi-tour sans interrompre (revient en file d\'attente lorsque l\'agent ou le flux est indisponible).', + settings_busy_input_mode_queue: 'Suivi de file d\'attente', + settings_busy_input_mode_interrupt: 'Interrompre le tour en cours', + settings_busy_input_mode_steer: 'Direction (correction à mi-virage)', + status_profile: 'Profil', + status_hermes_home: 'Maison Hermès', + status_started: 'Commencé', + status_updated: 'Mis à jour', + status_tokens: 'Jetons', + status_ephemeral: 'Instantané éphémère – non enregistré dans l’historique des transcriptions.', + status_no_tokens: 'Aucun jeton utilisé', + status_unknown: 'Inconnu', + usage_personality_none: 'aucun', + session_toolsets: 'Ensembles d\'outils de session', + session_toolsets_desc: 'Restreindre les outils disponibles pour cette session (vide = utiliser la configuration globale)', + session_toolsets_global: 'Global (par défaut)', + session_toolsets_custom: 'Coutume', + session_toolsets_placeholder: 'outil1, outil2, …', + session_toolsets_apply: 'Appliquer', + session_toolsets_clear: 'Effacer (utiliser global)', + session_toolsets_applied: 'Ensembles d\'outils mis à jour', + session_toolsets_cleared: 'Ensembles d\'outils effacés - à l\'aide de la configuration globale', + session_toolsets_failed: 'Échec de la mise à jour des ensembles d\'outils :', + no_personalities: 'Aucune personnalité trouvée (ajoutez-les à ~/.hermes/personalities/)', + available_personalities: 'Personnalités disponibles :', + personality_switch_hint: '\\n\\nUtilisez `/personality ` pour changer, ou `/personality none` pour effacer.', + personalities_load_failed: 'Échec du chargement des personnalités', + personality_cleared: 'Personnalité effacée', + personality_set: 'Personnalité:', + failed_colon: 'Échoué:', + no_workspace: 'Pas d\'espace de travail', + terminal_open_title: 'Terminal d\'espace de travail ouvert', + terminal_no_workspace_title: 'Sélectionnez un espace de travail pour ouvrir le terminal', + terminal_title: 'Terminal', + terminal_clear: 'Clair', + terminal_copy_output: 'Copier la sortie', + terminal_restart: 'Redémarrage', + terminal_collapse: 'Effondrement', + terminal_expand: 'Développer', + terminal_close: 'Fermer', + terminal_input_placeholder: 'Exécutez une commande...', + terminal_start_failed: 'Échec du démarrage du terminal :', + terminal_input_failed: 'L\'entrée du terminal a échoué :', + terminal_copy_failed: 'Échec de la copie :', + terminal_error: 'Erreur de terminal', + workspace_empty_no_path: 'Aucun espace de travail sélectionné. Définissez un espace de travail dans Paramètres \u2192 Espace de travail pour parcourir les fichiers.', + workspace_empty_dir: 'Cet espace de travail est vide.', + workspace_show_hidden_files: 'Afficher les fichiers cachés', + workspace_show_hidden_files_desc: 'Incluez .DS_Store, .git, node_modules et d\'autres fichiers cachés/système dans l\'arborescence des fichiers.', + workspace_hidden_files_visible: 'caché visible', + workspace_hidden_files_visible_title: 'Les fichiers cachés sont visibles – cliquez pour les options', + workspace_options: 'Options de l\'espace de travail', + dialog_confirm_title: 'Confirmer l\'action', + dialog_prompt_title: 'Entrez une valeur', + dialog_confirm_btn: 'Confirmer', + unsaved_confirm: 'Vous avez des modifications non enregistrées dans l\'aperçu. Supprimer et naviguer ?', + discard: 'Jeter', + save: 'Sauvegarder', + edit: 'Modifier', + clear: 'Clair', + create: 'Créer', + remove: 'Retirer', + save_title: 'Enregistrer les modifications', + edit_title: 'Modifier ce fichier', + saved: 'Enregistré', + save_failed: 'Échec de l\'enregistrement :', + image_load_failed: 'Impossible de charger l\'image', + file_open_failed: 'Impossible d\'ouvrir le fichier', + double_click_rename: 'Double-cliquez pour renommer', + renamed_to: 'Renommé en', + rename_failed: 'Échec du changement de nom :', + delete_title: 'Supprimer', + rename_title: 'Rebaptiser', + rename_prompt: 'Nouveau nom :', + deleted: 'Supprimé', + delete_failed: 'Échec de la suppression :', + reveal_in_finder: 'Révéler dans le gestionnaire de fichiers', + reveal_failed: 'Échec de la révélation :', + copy_file_path: 'Copier le chemin du fichier', + path_copied: 'Chemin du fichier copié dans le presse-papiers', + path_copy_failed: 'Échec de la copie du chemin :', + session_rename: 'Renommer la conversation', + session_rename_desc: 'Modifier le titre de cette conversation', + new_file_prompt: 'Nouveau nom de fichier (par exemple notes.md) :', + project_name_prompt: 'Nom du projet :', + created: 'Créé', + create_failed: 'Échec de la création :', + new_folder_prompt: 'Nouveau nom de dossier :', + folder_created: 'Dossier créé', + folder_create_failed: 'Échec de la création du dossier :', + remove_title: 'Retirer', + empty_dir: '(vide)', + upload_failed: 'Échec du téléchargement :', + session_pin: 'Épingler la conversation', + session_unpin: 'Désépingler la conversation', + session_pin_desc: 'Gardez cette conversation en haut', + session_unpin_desc: 'Supprimer de l\'épinglé', + session_pin_failed: 'Échec de la broche :', + session_move_project: 'Passer au projet', + session_move_project_desc_has: 'Changer le projet pour cette conversation', + session_move_project_desc_none: 'Attribuer un projet à cette conversation', + session_archive: 'Archiver une conversation', + session_restore: 'Restaurer la conversation', + session_archive_desc: 'Masquer cette conversation jusqu\'à ce que l\'archive soit affichée', + session_archive_worktree_desc: 'Cachez cette conversation ; garder son arbre de travail sur le disque', + session_restore_desc: 'Ramenez cette conversation dans la liste principale', + session_archived: 'Séance archivée', + session_archived_worktree: 'Séance archivée. Worktree reste sur le disque.', + session_restored: 'Session restaurée', + session_archive_failed: 'Échec de l\'archivage :', + session_duplicate: 'Conversation en double', + session_duplicate_desc: 'Créer une copie avec le même espace de travail et le même modèle', + session_duplicated: 'Session dupliquée', + session_duplicate_failed: 'Échec de la duplication :', + session_stop_response: 'Arrêter la réponse', + session_stop_response_desc: 'Annuler la réponse en cours pour cette conversation', + session_delete: 'Supprimer la conversation', + session_delete_desc: 'Supprimer définitivement cette conversation', + session_delete_confirm: 'Supprimer cette conversation ?', + session_delete_worktree_desc: 'Supprimez uniquement la conversation WebUI ; garder l\'arbre de travail sur le disque', + session_deleted: 'Conversation supprimée', + session_deleted_worktree: 'Conversation supprimée. Worktree reste sur le disque.', + session_select_mode: 'Sélectionner', + session_select_mode_desc: 'Sélectionnez les conversations à gérer par lots', + session_select_all: 'Tout sélectionner', + session_deselect_all: 'Tout désélectionner', + session_selected_count: '{0} sélectionné', + session_batch_archive: 'Archive', + session_batch_delete: 'Supprimer', + session_batch_move: 'Passer au projet', + session_batch_delete_confirm: 'Supprimer {0} conversations ?', + session_batch_archive_confirm: 'Archiver {0} conversations ?', + session_batch_delete_worktree_confirm: 'Supprimer {0} conversations ? {1} conversations basées sur Worktree laisseront leurs répertoires Worktree sur le disque.', + session_batch_archive_worktree_confirm: 'Archiver {0} conversations ? {1} conversations basées sur un arbre de travail conserveront leurs répertoires d\'arbre de travail sur le disque.', + session_no_selection: 'Aucune conversation sélectionnée', + settings_heading_title: 'Centre de contrôle', + settings_heading_subtitle: 'Préférences, outils de conversation et contrôles système.', + settings_section_conversation_title: 'Conversation', + settings_section_appearance_title: 'Apparence', + settings_section_appearance_meta: 'Thème, couleurs d\'accent et style visuel.', + settings_section_preferences_title: 'Préférences', + settings_section_preferences_meta: 'Paramètres par défaut et comportement de l\'interface utilisateur pour Hermes Web UI.', + settings_section_system_title: 'Système', + settings_section_system_meta: 'Version de l\'instance et contrôles d\'accès.', + settings_check_now: 'Vérifiez maintenant', + settings_checking: 'Vérification\u2026', + settings_up_to_date: 'À jour \u2713', + settings_updates_available: '{count} mises à jour disponibles', + settings_updates_disabled: 'Vérifications de mise à jour désactivées', + settings_update_check_failed: 'La vérification de la mise à jour a échoué', + settings_label_workspace_panel_open: 'Garder le panneau de l\'espace de travail ouvert par défaut', + settings_desc_workspace_panel_open: 'Lorsqu\'il est activé, le panneau de l\'espace de travail/navigateur de fichiers s\'ouvre automatiquement à chaque nouvelle session. Vous pouvez toujours le fermer manuellement à tout moment.', + settings_label_session_jump_buttons: 'Afficher les boutons de saut de session', + settings_desc_session_jump_buttons: 'Affichez les boutons flottants de début et de fin lors de la lecture de longs historiques de session.', + settings_label_session_endless_scroll: 'Charger les anciens messages en faisant défiler vers le haut', + settings_desc_session_endless_scroll: 'Lorsqu\'ils sont activés, les anciens messages se chargent automatiquement lorsque vous faites défiler vers le haut. Lorsqu\'il est désactivé, utilisez le bouton des messages plus anciens.', + open_in_browser: 'Ouvrir dans le navigateur', + settings_dropdown_conversation: 'Conversation', + settings_dropdown_appearance: 'Apparence', + settings_dropdown_preferences: 'Préférences', + settings_dropdown_providers: 'Fournisseurs', + settings_dropdown_system: 'Système', + settings_tab_conversation: 'Conversation', + settings_tab_appearance: 'Apparence', + settings_tab_preferences: 'Préférences', + settings_tab_system: 'Système', + settings_title: 'Paramètres', + settings_save_btn: 'Enregistrer les paramètres', + settings_label_model: 'Modèle par défaut', + settings_desc_model: 'Utilisé pour les nouvelles conversations. Les conversations existantes conservent leur modèle sélectionné.', + settings_label_send_key: 'Envoyer la clé', + settings_label_theme: 'Thème', + settings_label_skin: 'Peau', + settings_label_font_size: 'Taille de la police', + font_size_small: 'Petit', + font_size_default: 'Défaut', + font_size_large: 'Grand', + settings_autosave_saving: 'Économie…', + settings_autosave_saved: 'Enregistré', + settings_autosave_failed: 'Échec de l\'enregistrement', + settings_autosave_retry: 'Réessayer', + settings_label_language: 'Langue', + settings_label_token_usage: 'Afficher l\'utilisation du jeton', + settings_label_sidebar_density: 'Densité de la barre latérale', + cmd_reasoning: 'Basculez la visibilité de la réflexion (afficher/masquer), définir le niveau d\'effort ou vérifier l\'état actuel', + settings_label_external_sessions: 'Afficher les sessions non-WebUI', + settings_label_sync_insights: 'Synchroniser avec les insights', + settings_label_check_updates: 'Vérifier les mises à jour', + settings_label_bot_name: 'Nom de l\'assistant', + settings_label_password: 'Mot de passe d\'accès', + settings_saved: 'Paramètres enregistrés', + settings_save_failed: 'Échec de l\'enregistrement :', + settings_load_failed: 'Échec du chargement des paramètres :', + settings_saved_pw: 'Paramètres enregistrés : protection par mot de passe activée et ce navigateur reste connecté', + settings_saved_pw_updated: 'Paramètres enregistrés – mot de passe mis à jour', + login_title: 'Se connecter', + login_subtitle: 'Entrez votre mot de passe pour continuer', + login_placeholder: 'Mot de passe', + login_btn: 'Se connecter', + login_invalid_pw: 'Mot de passe invalide', + login_conn_failed: 'La connexion a échoué', + dialog_confirm_title: 'Confirmer l\'action', + dialog_prompt_title: 'Entrez une valeur', + dialog_confirm_btn: 'Confirmer', + discard: 'Jeter', + clear: 'Clair', + create: 'Créer', + remove: 'Retirer', + project_name_prompt: 'Nom du projet :', + tab_chat: 'Chat', + tab_tasks: 'Tâches', + tab_skills: 'Compétences', + tab_memory: 'Mémoire', + tab_workspaces: 'Espaces', + tab_profiles: 'Profils', + tab_kanban: 'Kanban', + kanban_board: 'Conseil', + kanban_visible_tasks: '{0} tâches visibles', + kanban_search_tasks: 'Tâches de recherche', + kanban_all_assignees: 'Tous les assignés', + kanban_all_tenants: 'Tous les locataires', + kanban_include_archived: 'Inclure archivé', + kanban_no_matching_tasks: 'Aucune tâche correspondante', + kanban_no_data: 'Aucune donnée Kanban', + kanban_work_queue_hint: 'Il s\'agit de la file d\'attente de travail de l\'agent Hermes. Créez ou triez une tâche, attribuez-la, déplacez-la vers Prêt, puis laissez le répartiteur la réclamer.', + kanban_unavailable: 'Kanban indisponible', + kanban_read_only: 'Vue en lecture seule', + kanban_empty: 'Vide', + kanban_task: 'Tâche', + kanban_no_description: 'Pas de description', + kanban_refresh: 'Rafraîchir', + kanban_status_triage: 'Triage', + kanban_status_todo: 'Faire', + kanban_status_ready: 'Prêt', + kanban_status_running: 'En cours d\'exécution', + kanban_status_blocked: 'Bloqué', + kanban_status_done: 'Fait', + kanban_comments_count: 'Commentaires ({0})', + kanban_events_count: 'Événements ({0})', + kanban_links: 'Links', + kanban_parents: 'Parents', + kanban_children: 'Enfants', + kanban_runs_count: 'Exécutions ({0})', + kanban_no_comments: 'Sans commentaires', + kanban_no_events: 'Aucun événement', + kanban_no_runs: 'Aucune course', + kanban_title: 'Titre', + kanban_description: 'Description', + kanban_description_placeholder: 'Facultatif : ce qui doit se passer, les critères d\'acceptation, les liens', + kanban_status: 'Statut', + kanban_assignee: 'Cessionnaire', + kanban_assignee_placeholder: 'Facultatif – laisser vide pour tout travailleur', + kanban_tenant: 'Locataire', + kanban_tenant_placeholder: 'Facultatif – slug de projet ou d\'équipe', + kanban_priority: 'Priorité', + kanban_priority_hint: 'Les nombres plus élevés sont exécutés en premier. Par défaut 0.', + kanban_title_required: 'Le titre est requis.', + kanban_new_task: 'Nouvelle tâche', + kanban_edit_task: 'Modifier la tâche', + kanban_status_original_hint: 'Statut actuel : {0}. Cette boîte de dialogue prend uniquement en charge les modifications Triage/Todo/Ready.', + kanban_run_dispatcher: 'Exécuter le répartiteur', + kanban_run_dispatcher_confirm: 'Cela réclamera des tâches prêtes sur ce tableau et générera des sous-processus de travail (un par tâche, jusqu\'à 8 par clic). Continuer?', + kanban_assignee_profiles_label: 'Profils Hermès', + kanban_assignee_other_label: 'Autre (voies CLI / profils supprimés)', + kanban_assignee_unassigned: '— Non attribué (ne s\'exécutera pas automatiquement) —', + kanban_ready_needs_assignee: 'Vous avez sélectionné Non attribué + Prêt. Le répartiteur ignorera cette tâche. Soumettez à nouveau pour confirmer ou choisissez un profil.', + kanban_dispatch_preview_prefix: 'Aperçu :', + kanban_dispatch_run_prefix: 'Expédié :', + kanban_dispatch_spawned: 'engendré', + kanban_dispatch_promoted: 'promu', + kanban_dispatch_reclaimed: 'récupéré', + kanban_dispatch_skipped_unassigned: 'ignoré (pas de destinataire)', + kanban_dispatch_skipped_nonspawnable: 'ignoré (profil inconnu)', + kanban_dispatch_auto_blocked: 'auto-bloqué', + kanban_dispatch_timed_out: 'expiré', + kanban_dispatch_crashed: 's\'est écrasé', + kanban_add_comment: 'Ajouter un commentaire', + kanban_status_archived: 'Archivé', + tab_todos: 'Toutes les tâches', + tab_insights: 'Connaissances', + tab_dashboard: 'Tableau de bord Hermès', + dashboard_loopback_warning: 'Le tableau de bord est en boucle uniquement sur le serveur. Naviguez depuis le serveur lui-même ou redémarrez-le avec --host 0.0.0.0 (non sécurisé).', + tab_logs: 'Journaux', + tab_settings: 'Paramètres', + new_conversation: 'Nouvelle conversation', + filter_conversations: 'Filtrer les conversations...', + session_time_unknown: 'Inconnu', + session_time_last_week: '1w', + session_time_bucket_today: 'Aujourd\'hui', + session_time_bucket_yesterday: 'Hier', + session_time_bucket_this_week: 'Cette semaine', + session_time_bucket_last_week: 'La semaine dernière', + session_time_bucket_older: 'Plus vieux', + scheduled_jobs: 'Travaux planifiés', + new_job: 'Nouvel emploi', + loading: 'Chargement...', + search_skills: 'Compétences de recherche...', + new_skill: 'Nouvelle compétence', + personal_memory: 'Mémoire personnelle', + current_task_list: 'Liste de tâches actuelle', + logs_title: 'Journaux', + logs_file: 'Déposer', + logs_tail: 'Queue', + logs_auto_refresh: 'Actualisation automatique (5s)', + logs_wrap: 'Enrouler les lignes', + logs_copy_all: 'Copier tout', + logs_empty: 'Aucune ligne de journal pour l\'instant.', + logs_loading: 'Chargement des journaux…', + logs_load_failed: 'Les journaux n\'ont pas pu être chargés', + logs_status_idle: 'Choisissez un fichier journal pour afficher les lignes récentes.', + logs_no_mtime: 'pas encore écrit', + logs_truncated_hint: 'Afficher la fin d\'un gros fichier journal ; les octets plus anciens ont été ignorés pour limiter la mémoire.', + logs_copied: 'Journaux copiés', + logs_severity: 'Gravité', + logs_severity_all: 'Tous', + logs_severity_errors: 'Erreurs', + logs_severity_warnings: 'Avertissements+', + logs_filter_active: 'affiché (filtre actif)', + insights_title: 'Analyse d\'utilisation', + insights_sessions: 'Séances', + insights_messages: 'Messages', + insights_tokens: 'Jetons', + insights_cost: 'Coût estimé', + insights_no_cost: 'N / A', + insights_models: 'Modèles', + insights_activity_by_day: 'Activité par jour', + insights_activity_by_hour: 'Activité par heure', + insights_peak_hour: 'Pic : {heure}', + insights_token_breakdown: 'Répartition des jetons', + insights_input_tokens: 'Saisir', + insights_output_tokens: 'Sortir', + insights_total: 'Total', + insights_daily_tokens: 'Jetons quotidiens', + insights_model_name: 'Modèle', + insights_model_sessions: 'Séances', + insights_model_tokens: 'Jetons', + insights_model_cost: 'Coût', + insights_model_share: 'Partager', + insights_no_usage_data: 'Aucune donnée d\'utilisation pour l\'instant', + insights_footer: 'Affichage des données des {days} derniers jours', + workspace_desc: 'Ajoutez et changez d\'espace de travail pour vos sessions.', + session_lineage_segment_untitled: 'Segment sans titre', + session_lineage_segment_open: 'Segment de lignée ouverte', + new_profile: 'Nouveau profil', + transcript: 'Transcription', + download_transcript: 'Télécharger en Markdown', + import: 'Importer', + settings_label_sound: 'Son de notification', + settings_desc_sound: 'Jouez un son lorsque l\'assistant termine une réponse.', + tts_listen: 'Écouter', + tts_not_supported: 'La synthèse vocale n\'est pas prise en charge dans ce navigateur.', + settings_label_tts: 'Text-to-Speech pour les réponses', + settings_desc_tts: 'Affichez un bouton haut-parleur sur chaque message de l\'assistant pour le lire à haute voix à l\'aide de la synthèse vocale de votre navigateur.', + settings_label_tts_auto_read: 'Lecture automatique des réponses à haute voix', + settings_desc_tts_auto_read: 'Prononcez automatiquement chaque nouvelle réponse de l\'assistant lorsqu\'elle est terminée. S\'arrête lorsque vous commencez à taper.', + settings_label_voice_mode: 'Bouton du mode vocal mains libres', + settings_desc_voice_mode: 'Affichez le bouton du mode vocal (forme d\'onde audio) à côté du micro de dictée. Vous permet de parler naturellement : Hermes envoie automatiquement après une pause et lit les réponses à haute voix. Nécessite un navigateur prenant en charge à la fois la reconnaissance vocale et TTS.', + settings_label_tts_voice: 'Voix', + settings_desc_tts_voice: 'Voix préférée. Rempli à partir des voix disponibles dans votre navigateur.', + settings_label_tts_rate: 'Taux de parole', + settings_label_tts_pitch: 'Emplacement du discours', + settings_label_notifications: 'Notifications du navigateur', + settings_desc_notifications: 'Afficher une notification système lorsqu\'une réponse est terminée alors que l\'application est en arrière-plan.', + settings_desc_token_usage: 'Affiche le nombre de jetons d’entrée/sortie sous chaque réponse de l’assistant. Également basculé avec /usage.', + settings_label_api_redact: 'Expurger les données sensibles dans les réponses API', + settings_desc_api_redact: 'Les utilisateurs auto-hébergés peuvent désactiver pour des raisons de transparence (non recommandé pour les instances partagées).', + settings_sidebar_density_compact: 'Compact', + settings_sidebar_density_detailed: 'Détaillé', + settings_desc_sidebar_density: 'Contrôle la quantité de métadonnées que la liste des sessions affiche dans la barre latérale gauche.', + settings_label_auto_title_refresh: 'Actualisation adaptative du titre', + settings_auto_title_refresh_off: 'Désactivé', + settings_auto_title_refresh_5: 'Tous les 5 échanges', + settings_auto_title_refresh_10: 'Tous les 10 échanges', + settings_auto_title_refresh_20: 'Tous les 20 échanges', + settings_desc_auto_title_refresh: 'Régénère automatiquement le titre de la session en fonction du dernier échange, le gardant ainsi pertinent à mesure que la conversation évolue. Nécessite la configuration d’un modèle de génération de titres LLM.', + settings_desc_external_sessions: 'Affichez les conversations de CLI, Telegram, Discord, Slack et d\'autres chaînes dans la liste des sessions. Cliquez pour importer et continuer.', + settings_desc_sync_insights: 'Met en miroir l\'utilisation du jeton WebUI dans state.db afin que Hermes /insights inclut les données de session du navigateur. Désactivé par défaut.', + settings_desc_check_updates: 'Afficher une bannière lorsque des versions plus récentes de WebUI ou de l\'agent sont disponibles. Exécute périodiquement une récupération git en arrière-plan.', + settings_desc_bot_name: 'Nom d’affichage de l’assistant dans l’interface utilisateur. Par défaut, Hermès.', + settings_desc_password: 'Saisissez un nouveau mot de passe pour le définir ou le modifier. Laissez vide pour conserver le paramètre actuel.', + password_placeholder: 'Entrez le nouveau mot de passe…', + password_env_var_locked: 'La variable d\'environnement HERMES_WEBUI_PASSWORD est actuellement définie et est prioritaire. Désactivez-le et redémarrez le serveur pour gérer le mot de passe à partir d\'ici.', + password_env_var_locked_placeholder: 'Verrouillé : la variable d\'environnement HERMES_WEBUI_PASSWORD est définie', + disable_auth: 'Désactiver l\'authentification', + sign_out: 'Se déconnecter', + providers_tab_title: 'Fournisseurs', + providers_section_title: 'Fournisseurs', + providers_section_meta: 'Gérez les clés API pour les fournisseurs d\'IA. Les modifications prennent effet immédiatement.', + providers_status_configured: 'Clé API configurée', + providers_status_not_configured: 'Aucune clé API', + providers_status_oauth: 'OAuth', + providers_status_api_key: 'Clé API', + providers_status_not_configured_label: 'Non configuré', + providers_oauth_hint: 'Authentifié via OAuth. Aucune clé API nécessaire.', + providers_oauth_config_yaml_hint: 'Jeton configuré via config.yaml. Pour mettre à jour, modifiez la section des fournisseurs dans votre config.yaml ou exécutez Hermes Auth.', + providers_oauth_not_configured_hint: 'Non authentifié. Exécutez Hermes Auth dans le terminal pour configurer ce fournisseur.', + providers_save: 'Sauvegarder', + providers_remove: 'Retirer', + providers_saving: 'Économie…', + providers_removing: 'Suppression…', + providers_enter_key: 'Veuillez saisir une clé API', + providers_empty: 'Aucun fournisseur configurable trouvé.', + providers_key_updated: 'Clé API enregistrée', + providers_key_removed: 'Clé API supprimée', + providers_key_placeholder_new: 'sk-...', + providers_key_placeholder_replace: 'Entrez une nouvelle clé à remplacer…', + cancel: 'Annuler', + create_job: 'Créer un emploi', + save_skill: 'Enregistrer la compétence', + editing: 'Édition', + empty_title: 'En quoi puis-je aider ?', + empty_subtitle: 'Demandez n\'importe quoi, exécutez des commandes, explorez des fichiers ou gérez vos tâches planifiées.', + suggest_files: 'Quels fichiers se trouvent dans cet espace de travail ?', + suggest_schedule: 'Quel est mon programme aujourd\'hui ?', + suggest_plan: 'Aide-moi à planifier un petit projet.', + onboarding_badge: 'PREMIÈRE EXÉCUTION', + onboarding_title: 'Bienvenue dans l\'interface utilisateur Web Hermès', + onboarding_lead: 'Une configuration guidée rapide vérifiera Hermes, enregistrera une configuration réelle du fournisseur, choisira un espace de travail et un modèle et protégera éventuellement l\'application avec un mot de passe.', + onboarding_back: 'Dos', + onboarding_continue: 'Continuer', + onboarding_skip: 'Ignorer la configuration', + onboarding_skipped: 'Configuration ignorée – en utilisant la configuration existante.', + onboarding_open: 'Hermès ouvert', + onboarding_step_system_title: 'Vérification du système', + onboarding_step_system_desc: 'Vérifiez la visibilité de l\'agent Hermes et de la configuration.', + onboarding_step_setup_title: 'Configuration du fournisseur', + onboarding_step_setup_desc: 'Enregistrez la configuration minimale du fournisseur Hermes.', + onboarding_step_workspace_title: 'Espace de travail + modèle', + onboarding_step_workspace_desc: 'Choisissez les valeurs par défaut pour les nouvelles sessions et le chat.', + onboarding_step_password_title: 'Mot de passe facultatif', + onboarding_step_password_desc: 'Protégez l’interface utilisateur Web avant de la partager.', + onboarding_step_finish_title: 'Finition', + onboarding_step_finish_desc: 'Vérifiez et entrez dans l\'application.', + onboarding_notice_system_ready: 'L\'agent Hermes semble accessible depuis l\'interface utilisateur Web.', + onboarding_notice_system_unavailable: 'Hermes Agent n’est pas encore entièrement disponible. Bootstrap peut l\'installer, mais la configuration du fournisseur peut toujours nécessiter un terminal.', + onboarding_check_agent: 'Agent Hermès', + onboarding_check_agent_ready: 'Détecté et importable', + onboarding_check_agent_missing: 'Manquant ou partiellement importable', + onboarding_check_password: 'Mot de passe', + onboarding_check_password_enabled: 'Déjà activé', + onboarding_check_password_disabled: 'Pas encore activé', + onboarding_check_provider: 'Configuration du fournisseur', + onboarding_check_provider_ready: 'Prêt à discuter', + onboarding_check_provider_partial: 'Enregistré mais incomplet', + onboarding_check_provider_pending: 'Vérification nécessaire', + onboarding_config_file: 'Fichier de configuration :', + onboarding_env_file: 'Fichier .env :', + onboarding_unknown: 'Inconnu', + onboarding_current_provider: 'Configuration actuelle :', + onboarding_missing_imports: 'Importations manquantes :', + onboarding_notice_setup_required: 'Choisissez ici un chemin de fournisseur simple. Les flux OAuth avancés appartiennent toujours à la CLI Hermes pour le moment.', + onboarding_notice_setup_already_ready: 'Une configuration de fournisseur Hermes fonctionnelle est déjà détectée. Vous pouvez le conserver ou le remplacer ici.', + onboarding_oauth_provider_ready_title: 'Fournisseur déjà authentifié', + onboarding_oauth_provider_ready_body: 'Cette instance est configurée pour utiliser un fournisseur OAuth ({provider}) configuré via la CLI Hermes. Aucune clé API n\'est nécessaire ici - cliquez sur Continuer pour terminer la configuration.', + onboarding_oauth_provider_not_ready_title: 'Fournisseur OAuth pas encore authentifié', + onboarding_oauth_provider_not_ready_body: 'Cette instance est configurée pour utiliser {provider}, qui utilise OAuth plutôt qu\'une clé API. Exécutez hermes auth ou hermes model dans un terminal pour vous authentifier, puis rechargez l\'interface utilisateur Web.', + onboarding_oauth_switch_hint: 'Ou choisissez un autre fournisseur ci-dessous pour passer à une configuration par clé API :', + oauth_login_codex: 'Connectez-vous avec Codex (ChatGPT)', + oauth_codex_step1: 'Étape 1 : Visitez cette URL et entrez le code', + oauth_codex_step2: 'Étape 2 : Saisissez ce code sur la page', + oauth_codex_polling: 'En attente d\'autorisation...', + oauth_codex_success: 'Connexion au Codex OAuth réussie !', + oauth_codex_error: 'Échec de la connexion OAuth', + oauth_codex_expired: 'Code expiré, veuillez réessayer', + onboarding_notice_workspace: 'Ces valeurs réutilisent les mêmes API de paramètres que l\'application normale.', + onboarding_workspace_label: 'Espace de travail', + onboarding_workspace_or_path: 'Ou entrez un chemin d\'espace de travail', + onboarding_workspace_placeholder: '/accueil/vous/espace de travail', + onboarding_provider_label: 'Mode configuration', + onboarding_quick_setup_badge: 'configuration rapide', + provider_category_easy_start: 'Démarrage facile', + provider_category_self_hosted: 'Ouvert / auto-hébergé', + provider_category_specialized: 'Spécialisé', + onboarding_api_key_label: 'Clé API', + onboarding_api_key_placeholder: 'Laisser vide pour conserver une clé enregistrée existante', + onboarding_api_key_label_optional: 'Clé API (facultatif)', + onboarding_api_key_placeholder_optional: 'Laisser vide pour les serveurs sans clé', + onboarding_api_key_help_keyless: 'La plupart des installations LM Studio / Ollama / vLLM s\'exécutent sans clé — laissez ce champ vide si votre serveur ne nécessite pas d\'authentification. Utilisez le bouton Tester la connexion pour vérifier.', + onboarding_api_key_help_prefix: 'Enregistré comme secret dans votre fichier Hermes .env en utilisant', + onboarding_base_url_label: 'URL de base', + onboarding_base_url_placeholder: 'https://votre-endpoint.example/v1', + onboarding_base_url_help: 'Utilisez-le pour les routeurs compatibles OpenAI, les serveurs auto-hébergés, LiteLLM, Ollama, LM Studio, vLLM ou des points de terminaison similaires.', + onboarding_model_label: 'Modèle par défaut', + onboarding_workspace_help: 'Choisissez le modèle qu\'Hermes doit utiliser pour les nouvelles discussions une fois la configuration terminée.', + onboarding_custom_model_placeholder: 'votre-nom-de-modèle', + onboarding_custom_model_help: 'Pour les points de terminaison personnalisés, entrez l’ID de modèle exact attendu par votre serveur.', + onboarding_notice_password_enabled: 'Un mot de passe est déjà configuré. Saisissez-en un nouveau uniquement si vous souhaitez le remplacer.', + onboarding_notice_password_recommended: 'Facultatif mais recommandé si vous exposez l\'interface utilisateur au-delà de localhost.', + onboarding_password_label: 'Mot de passe (facultatif)', + onboarding_password_placeholder: 'Laisser vide pour sauter', + onboarding_password_help: 'Les mots de passe sont stockés via l\'API des paramètres existants et hachés côté serveur.', + onboarding_notice_finish: 'Vous pouvez rouvrir les paramètres plus tard pour modifier tout cela.', + onboarding_not_set: 'Non défini', + onboarding_password_will_enable: 'Sera activé', + onboarding_password_will_replace: 'Sera remplacé', + onboarding_password_keep_existing: 'Conserver le mot de passe actuel', + onboarding_password_remains_disabled: 'Restera invalide', + onboarding_password_skipped: 'Ignoré pour l\'instant', + onboarding_finish_help: 'La finition stocke onboarding_completed dans les paramètres et vous amène dans l\'application normale.', + onboarding_error_choose_workspace: 'Choisissez un espace de travail avant de continuer.', + onboarding_error_choose_model: 'Choisissez un modèle avant de continuer.', + onboarding_error_provider_required: 'Choisissez un mode de configuration avant de continuer.', + onboarding_error_base_url_required: 'L\'URL de base est requise pour les points de terminaison personnalisés.', + onboarding_probe_test_button: 'Tester la connexion', + onboarding_probe_probing: 'Test de connexion…', + onboarding_probe_ok: 'Connecté. {n} modèle(s) disponible(s).', + onboarding_probe_error_generic: 'Impossible d\'atteindre l\'URL de base configurée.', + onboarding_probe_error_invalid_url: 'L\'URL de base doit commencer par http:// ou https://.', + onboarding_probe_error_dns: 'Impossible de résoudre l\'hôte. Vérifiez l\'URL ou utilisez l\'adresse IP de l\'hôte.', + onboarding_probe_error_connect_refused: 'Connexion refusée : le serveur ne fonctionne peut-être pas à cette adresse. Depuis Docker, essayez l’adresse IP de l’hôte au lieu de localhost.', + onboarding_probe_error_timeout: 'Le point final n’a pas répondu à temps. Vérifiez que le serveur est en cours d\'exécution et que l\'URL est correcte.', + onboarding_probe_error_http_4xx: 'Le point de terminaison a renvoyé une erreur client. Vérifiez l\'authentification et le chemin de l\'URL (se termine généralement par /v1).', + onboarding_probe_error_http_5xx: 'Le point de terminaison a renvoyé une erreur de serveur. Vérifiez les journaux du serveur LM Studio / Ollama.', + onboarding_probe_error_parse: 'Le point de terminaison n’a pas renvoyé une liste de modèles sous la forme attendue. Vérifiez que l\'URL pointe vers la racine de l\'API compatible OpenAI.', + onboarding_probe_error_unreachable: 'Impossible d\'atteindre l\'URL de base configurée.', + onboarding_error_probe_failed: 'Impossible de valider l\'URL de base configurée.', + onboarding_error_workspace_required: 'Un espace de travail est requis.', + onboarding_error_model_required: 'Un modèle est requis.', + onboarding_complete: 'Intégration terminée', + error_prefix: 'Erreur:', + not_available: 'N / A', + never: 'jamais', + add: 'Ajouter', + add_failed: 'Échec de l\'ajout :', + remove_failed: 'Échec de la suppression :', + switch_failed: 'Échec du changement :', + name_required: 'Le nom est requis', + content_required: 'Le contenu est requis', + view: 'Voir', + dismiss: 'Rejeter', + disable: 'Désactiver', + cron_no_jobs: 'Aucune tâche planifiée trouvée.', + cron_status_off: 'désactivé', + cron_status_paused: 'en pause', + cron_status_error: 'erreur', + cron_status_active: 'actif', + cron_status_running: 'courir\u2026', + cron_status_needs_attention: 'a besoin d\'attention', + cron_attention_desc: 'Cette tâche récurrente n\'a pas de prochaine exécution. Le planificateur n\'a peut-être pas réussi à calculer sa prochaine exécution.', + cron_attention_croniter_hint: 'Il se peut que le package croniter soit manquant dans le runtime Gateway. Redémarrez la passerelle avec la prise en charge de cron, puis reprenez ce travail.', + cron_attention_resume: 'Reprendre et recalculer', + cron_jobs_project: 'Emplois Cron', + cron_attention_run_once: 'Cours une fois maintenant', + cron_attention_copy_diagnostics: 'Copier les diagnostics', + cron_diagnostics_copied: 'Diagnostics Cron copiés', + cron_next: 'Suivant', + cron_last: 'Dernier', + cron_run_now: 'Courez maintenant', + cron_pause: 'Pause', + cron_resume: 'CV', + cron_job_name_placeholder: 'Nom du travail', + cron_schedule_placeholder: 'Calendrier', + cron_prompt_placeholder: 'Rapide', + cron_last_output: 'Dernière sortie', + cron_all_runs: 'Toutes les courses', + cron_hide_runs: 'Masquer les courses', + cron_no_runs_yet: '(pas encore de courses)', + cron_schedule_required_example: 'Un horaire est requis (par exemple "0 9 * * *" ou "toutes les 1h")', + cron_schedule_required: 'Un horaire est requis', + cron_prompt_required: 'Une invite est requise', + cron_job_created: 'Emploi créé', + cron_duplicate: 'Double', + cron_duplicated: 'Tâche dupliquée (en pause)', + cron_job_triggered: 'Tâche déclenchée', + cron_job_paused: 'Tâche suspendue', + cron_job_resumed: 'Travail repris', + cron_job_updated: 'Emploi mis à jour', + cron_delete_confirm_title: 'Supprimer la tâche cron', + cron_delete_confirm_message: 'Cela ne peut pas être annulé.', + cron_job_deleted: 'Travail supprimé', + status_failed: 'échoué', + status_completed: 'complété', + todos_no_active: 'Aucune liste de tâches active dans cette session.', + clear_conversation_title: 'Conversation claire', + clear_conversation_message: 'Effacer tous les messages ? Cela ne peut pas être annulé.', + clear_failed: 'Échec de la suppression :', + skills_no_match: 'Aucune compétence ne correspond.', + linked_files: 'Fichiers liés', + skill_load_failed: 'Impossible de charger la compétence :', + skill_file_load_failed: 'Impossible de charger le fichier :', + skill_name_required: 'Le nom de la compétence est requis', + skill_updated: 'Compétence mise à jour', + skill_created: 'Compétence créée', + skill_deleted: 'Compétence supprimée', + skill_delete_confirm: 'Supprimer la compétence "{0}" ?', + skills_empty_title: 'Sélectionnez une compétence', + skills_empty_sub: 'Choisissez une compétence dans la barre latérale pour afficher son contenu ou créez-en une nouvelle.', + skills_edit: 'Modifier', + skills_delete: 'Supprimer', + skills_back_to: 'Retour à {0}', + tasks_empty_title: 'Sélectionnez une tâche planifiée', + tasks_empty_sub: 'Choisissez une tâche dans la barre latérale pour afficher ses détails et ses exécutions, ou créez-en une nouvelle.', + workspaces_empty_title: 'Sélectionnez un espace', + workspaces_empty_sub: 'Choisissez un espace dans la barre latérale pour afficher ses fichiers et paramètres, ou ajoutez-en un nouveau.', + profiles_empty_title: 'Sélectionnez un profil', + profiles_empty_sub: 'Choisissez un profil d\'agent dans la barre latérale pour afficher et modifier ses paramètres, ou créez-en un nouveau.', + memory_notes_label: 'mémoire (notes)', + memory_saved: 'Mémoire sauvegardée', + my_notes: 'Mes notes', + user_profile: 'Profil utilisateur', + no_notes_yet: 'Aucune note pour l\'instant.', + no_profile_yet: 'Pas encore de profil.', + workspace_choose_path: 'Choisir le chemin de l\'espace de travail', + workspace_choose_path_meta: 'Ajoutez un chemin validé et changez cette conversation', + workspace_manage: 'Gérer les espaces de travail', + workspace_manage_meta: 'Ouvrez le panneau Espaces', + workspace_use_title: 'Utiliser dans la session en cours', + workspace_use: 'Utiliser', + workspace_add_path_placeholder: 'Ajouter un chemin d\'accès à l\'espace de travail (par exemple /home/user/my-project)', + workspace_paths_validated_hint: 'Les chemins sont validés en tant que répertoires existants avant d\'être enregistrés.', + workspace_drag_hint: 'Faites glisser pour réorganiser', + workspace_reorder_failed: 'Échec de la réorganisation', + workspace_added: 'Espace de travail ajouté', + workspace_renamed: 'Espace de travail renommé', + workspace_remove_confirm_title: 'Supprimer l\'espace de travail', + workspace_removed: 'Espace de travail supprimé', + workspace_switch_prompt_title: 'Changer d\'espace de travail', + workspace_switch_prompt_message: 'Entrez un chemin d’accès absolu à l’espace de travail vers lequel ajouter et basculer cette conversation.', + workspace_switch_prompt_confirm: 'Changer', + workspace_switch_prompt_placeholder: '/Utilisateurs/vous/projet', + workspace_not_added: 'L\'espace de travail n\'a pas été ajouté', + workspace_already_saved: 'Espace de travail déjà enregistré : choisissez-le dans la liste', + workspace_busy_switch: 'Impossible de changer d\'espace de travail pendant que l\'agent est en cours d\'exécution', + discard_file_edits_title: 'Supprimer les modifications du fichier ?', + discard_file_edits_message: 'Changer d’espace de travail supprimera les modifications de fichiers non enregistrées dans l’aperçu.', + profiles_no_profiles: 'Aucun profil trouvé.', + profile_api_keys_configured: 'Clés API configurées', + profile_gateway_running: 'Passerelle en cours d\'exécution', + profile_gateway_stopped: 'Passerelle arrêtée', + profile_active: 'ACTIF', + profile_no_configuration: 'Aucune configuration', + profile_use: 'Utiliser', + profile_switch_title: 'Passer à ce profil', + profile_delete_title: 'Supprimer ce profil', + profile_default_label: '(défaut)', + profile_name_placeholder: 'Nom du profil (minuscules, a-z 0-9 tirets)', + profile_clone_label: 'Cloner la configuration du profil actif', + profile_base_url_placeholder: 'URL de base (facultatif, par exemple http://localhost:11434)', + profile_api_key_placeholder: 'Clé API (facultatif)', + manage_profiles: 'Gérer les profils', + profiles_load_failed: 'Échec du chargement des profils', + profile_name_rule: 'Lettres minuscules, chiffres, traits d\'union et traits de soulignement uniquement', + profile_base_url_rule: 'L\'URL de base doit commencer par http:// ou https://', + profile_delete_confirm_message: 'Toutes les sessions, configurations, compétences et mémoire de ce profil seront définitivement supprimées. Cela ne peut pas être annulé.', + active_conversation_none: 'Aucune conversation active sélectionnée.', + settings_unsaved_changes: 'Vous avez des modifications non enregistrées.', + sign_out_failed: 'Échec de la déconnexion :', + disable_auth_confirm_title: 'Désactiver la protection par mot de passe', + disable_auth_confirm_message: 'Tout le monde pourra accéder à cette instance.', + auth_disabled: 'Authentification désactivée – protection par mot de passe supprimée', + disable_auth_failed: 'Échec de la désactivation de l\'authentification :', + skill_name: 'Nom', + skill_category: 'Catégorie', + skill_category_placeholder: 'Facultatif, par ex. développeurs', + skill_content: 'Contenu SKILL.md', + skill_content_placeholder: 'Frontmatter YAML + corps de démarque', + skill_rename_not_supported: 'Renommer une compétence n\'est pas pris en charge. Créez une nouvelle compétence et supprimez l\'ancienne pour la renommer.', + skill_metadata: 'Métadonnées', + cron_name_label: 'Nom', + cron_name_placeholder: 'Facultatif', + cron_schedule_label: 'Calendrier', + cron_schedule_hint: 'Utilisez « toutes les heures » ou une expression cron pour les tâches récurrentes. Les durées nues comme « 30 m » s\'exécutent une fois.', + cron_schedule_once_warning: 'Les formulaires de durée tels que « 30 m » s\'exécutent une fois et sont supprimés après l\'exécution. Utilisez « tous les 30 mois » pour conserver une tâche récurrente.', + cron_prompt_label: 'Rapide', + cron_deliver_label: 'Livrer la sortie à', + cron_deliver_local: 'Local (enregistrer la sortie uniquement)', + cron_profile_label: 'Profil', + cron_profile_server_default: 'serveur par défaut', + cron_profile_server_default_hint: 'Utilise le profil par défaut du serveur WebUI au moment de l\'exécution. Les tâches existantes sans profil conservent ce comportement hérité.', + cron_toast_notifications_label: 'Toasts d’achèvement', + cron_toast_notifications_hint: 'Montrez un toast lorsque ce cron se termine. Le badge Tâches et le marqueur de nouvelle exécution sont toujours mis à jour lorsque cette option est désactivée.', + cron_toast_notifications_enabled: 'Activé', + cron_toast_notifications_disabled: 'Désactivé', + cron_skills_label: 'Compétences', + cron_skills_placeholder: 'Ajouter des compétences (facultatif)…', + cron_skills_edit_hint: 'La liste de compétences n\'est pas modifiable après la création.', + workspace_name_label: 'Nom', + workspace_name_placeholder: 'Nom convivial facultatif', + workspace_path_label: 'Chemin', + workspace_path_required: 'Le chemin est obligatoire', + workspace_path_readonly: 'Le chemin ne peut pas être modifié. Renommer uniquement.', + workspace_new_title: 'Nouvel espace', + profile_name_label: 'Nom', + profile_base_url_label: 'URL de base', + profile_api_key_label: 'Clé API', + cmd_yolo: 'Basculer le mode YOLO (ignorer les approbations)', + yolo_no_session: 'Aucune session active', + yolo_enabled: '⚡ Mode YOLO activé – les approbations ont ignoré cette session', + yolo_disabled: 'Mode YOLO désactivé', + yolo_pill_label: 'YOLO', + yolo_pill_title_active: 'Mode YOLO actif — cliquez pour désactiver', + approval_skip_all: '⚡ Passer toute cette session', + approval_skip_all_title: 'Ignorer toutes les invites d\'approbation pour cette session', + composer_send: 'Envoyer un message', + composer_queue: 'Message de file d\'attente', + composer_interrupt: 'Interrompre et envoyer', + composer_steer: 'Piloter la réponse actuelle', + composer_stop: 'Arrêter la génération', + composer_disabled_clarify: 'Répondre à la demande de précisions', + composer_disabled_compression: 'En attendant la fin de la compression', + composer_disabled_empty: 'Tapez un message à envoyer', + composer_mobile_workspace: 'Espace de travail', + composer_mobile_model: 'Modèle', + composer_mobile_reasoning: 'Raisonnement', + composer_mobile_context: 'Contexte', + media_audio_label: 'Audio', + media_svg_label: 'Diagramme', + media_video_label: 'Vidéo', + csv_loading: 'Chargement du fichier CSV', + csv_too_large: 'Fichier CSV trop volumineux pour le rendu en ligne', + csv_no_data: 'Le fichier CSV ne contient pas suffisamment de données pour être affiché sous forme de tableau', + csv_error: 'Échec du chargement du fichier CSV', + csv_header_note: 'Première ligne affichée comme en-tête du tableau', + excalidraw_loading: 'Diagramme de chargement', + excalidraw_too_large: 'Fichier Excalidraw trop volumineux pour le rendu en ligne', + excalidraw_invalid: 'Format de fichier Excalidraw invalide', + excalidraw_error: 'Échec du chargement du fichier Excalidraw', + excalidraw_label: 'Diagramme', + excalidraw_download: 'Télécharger', + excalidraw_empty: 'Diagramme vide', + excalidraw_render_error: 'Échec du rendu du diagramme', + excalidraw_simplified: 'Aperçu SVG simplifié — pas identique au pixel au canevas Excalidraw', + checkpoint_title: 'Points de contrôle', + checkpoint_empty: 'Aucun point de contrôle trouvé pour cet espace de travail.', + checkpoint_loading: 'Chargement des points de contrôle…', + checkpoint_error: 'Échec du chargement des points de contrôle', + checkpoint_date: 'Date', + checkpoint_message: 'Message', + checkpoint_files: 'Fichiers', + checkpoint_view_diff: 'Voir la différence', + checkpoint_restore: 'Restaurer', + checkpoint_restore_confirm_title: 'Restaurer le point de contrôle ?', + checkpoint_restored: 'Point de contrôle restauré', + checkpoint_diff_title: 'Changements au point de contrôle', + checkpoint_diff_no_changes: 'Aucune différence trouvée entre ce point de contrôle et l\'espace de travail actuel.', + } }; // Active locale — defaults to English; overridden by loadLocale() at boot.