<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="fr_FR">
<context>
    <name>BottomBar</name>
    <message>
        <location filename="../../ChatView/qml/controls/BottomBar.qml" line="50"/>
        <source>Attach file to message</source>
        <translation>Joindre un fichier au message</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/BottomBar.qml" line="63"/>
        <source>Attach image to message</source>
        <translation>Joindre une image au message</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/BottomBar.qml" line="76"/>
        <source>Link file to context</source>
        <translation>Lier un fichier au contexte</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/BottomBar.qml" line="82"/>
        <source>Sync open files</source>
        <translation>Synchroniser les fichiers ouverts</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/BottomBar.qml" line="85"/>
        <source>Automatically synchronize currently opened files with the model context</source>
        <translation>Synchroniser automatiquement les fichiers actuellement ouverts avec le contexte du modèle</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/BottomBar.qml" line="108"/>
        <source>Compressing...</source>
        <translation>Compression…</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/BottomBar.qml" line="118"/>
        <source>Cancel</source>
        <translation>Annuler</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/BottomBar.qml" line="122"/>
        <source>Cancel compression</source>
        <translation>Annuler la compression</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/BottomBar.qml" line="130"/>
        <source>Compress</source>
        <translation>Compresser</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/BottomBar.qml" line="139"/>
        <source>Compress chat (create summarized copy using LLM)</source>
        <translation>Compresser la discussion (créer une copie résumée via LLM)</translation>
    </message>
</context>
<context>
    <name>ChatItem</name>
    <message>
        <location filename="../../ChatView/qml/chatparts/ChatItem.qml" line="159"/>
        <source>↑ %1 (cached %2)</source>
        <translation>↑ %1 (en cache %2)</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/chatparts/ChatItem.qml" line="160"/>
        <source>↑ %1</source>
        <translation>↑ %1</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/chatparts/ChatItem.qml" line="166"/>
        <source>↓ %1 (reasoning %2)</source>
        <translation>↓ %1 (raisonnement %2)</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/chatparts/ChatItem.qml" line="167"/>
        <source>↓ %1</source>
        <translation>↓ %1</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/chatparts/ChatItem.qml" line="172"/>
        <source>Σ %1</source>
        <translation>Σ %1</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/chatparts/ChatItem.qml" line="210"/>
        <source>Reset chat to this message and edit</source>
        <translation>Réinitialiser la discussion à ce message et éditer</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/chatparts/ChatItem.qml" line="310"/>
        <location filename="../../ChatView/qml/chatparts/ChatItem.qml" line="402"/>
        <source>Click: Open in Qt Creator
Shift+Click: Open in System Editor</source>
        <translation>Clic : ouvrir dans Qt Creator
Maj+Clic : ouvrir dans l&apos;éditeur système</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/chatparts/ChatItem.qml" line="366"/>
        <source>Failed to load image</source>
        <translation>Échec du chargement de l&apos;image</translation>
    </message>
</context>
<context>
    <name>CodeBlock</name>
    <message>
        <location filename="../../ChatView/qml/chatparts/CodeBlock.qml" line="62"/>
        <source>Code (%1)</source>
        <translation>Code (%1)</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/chatparts/CodeBlock.qml" line="63"/>
        <source>Code</source>
        <translation>Code</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/chatparts/CodeBlock.qml" line="105"/>
        <location filename="../../ChatView/qml/chatparts/CodeBlock.qml" line="136"/>
        <location filename="../../ChatView/qml/chatparts/CodeBlock.qml" line="147"/>
        <source>Copy</source>
        <translation>Copier</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/chatparts/CodeBlock.qml" line="115"/>
        <source>Collapse</source>
        <translation>Réduire</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/chatparts/CodeBlock.qml" line="115"/>
        <source>Expand</source>
        <translation>Développer</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/chatparts/CodeBlock.qml" line="140"/>
        <source>Copied</source>
        <translation>Copié</translation>
    </message>
</context>
<context>
    <name>ContextViewer</name>
    <message>
        <location filename="../../ChatView/qml/controls/ContextViewer.qml" line="54"/>
        <source>Chat Context</source>
        <translation>Contexte de la discussion</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/ContextViewer.qml" line="62"/>
        <source>Refresh</source>
        <translation>Actualiser</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/ContextViewer.qml" line="67"/>
        <source>Close</source>
        <translation>Fermer</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/ContextViewer.qml" line="97"/>
        <source>Base System Prompt</source>
        <translation>Invite système de base</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/ContextViewer.qml" line="98"/>
        <source>Active</source>
        <translation>Actif</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/ContextViewer.qml" line="98"/>
        <source>Empty</source>
        <translation>Vide</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/ContextViewer.qml" line="125"/>
        <source>No system prompt configured</source>
        <translation>Aucune invite système configurée</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/ContextViewer.qml" line="146"/>
        <location filename="../../ChatView/qml/controls/ContextViewer.qml" line="235"/>
        <location filename="../../ChatView/qml/controls/ContextViewer.qml" line="377"/>
        <source>Copy</source>
        <translation>Copier</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/ContextViewer.qml" line="152"/>
        <source>Edit in Settings</source>
        <translation>Modifier dans les paramètres</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/ContextViewer.qml" line="166"/>
        <source>Agent Role</source>
        <translation>Rôle de l&apos;agent</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/ContextViewer.qml" line="221"/>
        <source>No role selected. Using base system prompt only.</source>
        <translation>Aucun rôle sélectionné. Utilisation de l&apos;invite système de base uniquement.</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/ContextViewer.qml" line="241"/>
        <source>Manage Roles</source>
        <translation>Gérer les rôles</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/ContextViewer.qml" line="255"/>
        <source>Project Rules</source>
        <translation>Règles du projet</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/ContextViewer.qml" line="256"/>
        <source>%1 active</source>
        <translation>%1 actif</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/ContextViewer.qml" line="256"/>
        <source>None</source>
        <translation>Aucun</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/ContextViewer.qml" line="282"/>
        <source>Rules (%1)</source>
        <translation>Règles (%1)</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/ContextViewer.qml" line="369"/>
        <source>Content</source>
        <translation>Contenu</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/ContextViewer.qml" line="415"/>
        <source>No project rules found.
Create .md files in .qodeassist/rules/common/ or .qodeassist/rules/chat/</source>
        <translation>Aucune règle de projet trouvée.
Créez des fichiers .md dans .qodeassist/rules/common/ ou .qodeassist/rules/chat/</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/ContextViewer.qml" line="430"/>
        <source>Open Rules Folder</source>
        <translation>Ouvrir le dossier des règles</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/ContextViewer.qml" line="450"/>
        <source>Final prompt: Base System Prompt + Agent Role + Project Info + Project Rules + Linked Files</source>
        <translation>Invite finale : invite système de base + rôle de l&apos;agent + infos du projet + règles du projet + fichiers liés</translation>
    </message>
</context>
<context>
    <name>DiffStatistics</name>
    <message>
        <location filename="../../widgets/DiffStatistics.hpp" line="40"/>
        <source>+%1 lines, -%2 lines</source>
        <translation>+%1 lignes, -%2 lignes</translation>
    </message>
    <message>
        <location filename="../../widgets/DiffStatistics.hpp" line="42"/>
        <source>+%1 lines</source>
        <translation>+%1 lignes</translation>
    </message>
    <message>
        <location filename="../../widgets/DiffStatistics.hpp" line="44"/>
        <source>-%1 lines</source>
        <translation>-%1 lignes</translation>
    </message>
    <message>
        <location filename="../../widgets/DiffStatistics.hpp" line="46"/>
        <source>No changes</source>
        <translation>Aucune modification</translation>
    </message>
</context>
<context>
    <name>FileEditBlock</name>
    <message>
        <location filename="../../ChatView/qml/chatparts/FileEditBlock.qml" line="76"/>
        <source>ARCHIVED</source>
        <translation>ARCHIVÉ</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/chatparts/FileEditBlock.qml" line="77"/>
        <source>APPLIED</source>
        <translation>APPLIQUÉ</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/chatparts/FileEditBlock.qml" line="78"/>
        <source>REJECTED</source>
        <translation>REJETÉ</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/chatparts/FileEditBlock.qml" line="79"/>
        <source>PENDING</source>
        <translation>EN ATTENTE</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/chatparts/FileEditBlock.qml" line="200"/>
        <source>Replace</source>
        <translation>Remplacer</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/chatparts/FileEditBlock.qml" line="200"/>
        <source>Append</source>
        <translation>Ajouter</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/chatparts/FileEditBlock.qml" line="202"/>
        <source>%1: %2 (+%3 -%4)</source>
        <translation>%1 : %2 (+%3 -%4)</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/chatparts/FileEditBlock.qml" line="208"/>
        <source>%1: %2 (+%3)</source>
        <translation>%1 : %2 (+%3)</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/chatparts/FileEditBlock.qml" line="264"/>
        <source>Open file in editor and navigate to changes</source>
        <translation>Ouvrir le fichier dans l&apos;éditeur et accéder aux modifications</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/chatparts/FileEditBlock.qml" line="364"/>
        <location filename="../../ChatView/qml/chatparts/FileEditBlock.qml" line="423"/>
        <source>Copy</source>
        <translation>Copier</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/chatparts/FileEditBlock.qml" line="374"/>
        <location filename="../../ChatView/qml/chatparts/FileEditBlock.qml" line="433"/>
        <source>Collapse</source>
        <translation>Réduire</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/chatparts/FileEditBlock.qml" line="374"/>
        <location filename="../../ChatView/qml/chatparts/FileEditBlock.qml" line="433"/>
        <source>Expand</source>
        <translation>Développer</translation>
    </message>
</context>
<context>
    <name>FileEditsActionBar</name>
    <message>
        <location filename="../../ChatView/qml/controls/FileEditsActionBar.qml" line="81"/>
        <source>File Edit in Current Message</source>
        <translation>Modification de fichier dans le message actuel</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/FileEditsActionBar.qml" line="82"/>
        <source>%1 File Edits in Current Message</source>
        <translation>%1 modifications de fichier dans le message actuel</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/FileEditsActionBar.qml" line="93"/>
        <source>%1 applied</source>
        <translation>%1 appliqué(s)</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/FileEditsActionBar.qml" line="96"/>
        <source>%1 pending</source>
        <translation>%1 en attente</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/FileEditsActionBar.qml" line="99"/>
        <source>%1 rejected</source>
        <translation>%1 rejeté(s)</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/FileEditsActionBar.qml" line="118"/>
        <source>Apply All (%1)</source>
        <translation>Tout appliquer (%1)</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/FileEditsActionBar.qml" line="119"/>
        <source>Reapply All (%1)</source>
        <translation>Tout réappliquer (%1)</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/FileEditsActionBar.qml" line="124"/>
        <source>Apply all pending and rejected edits in this message</source>
        <translation>Appliquer toutes les modifications en attente et rejetées de ce message</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/FileEditsActionBar.qml" line="125"/>
        <source>Reapply all rejected edits in this message</source>
        <translation>Réappliquer toutes les modifications rejetées de ce message</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/FileEditsActionBar.qml" line="135"/>
        <source>Undo All (%1)</source>
        <translation>Tout annuler (%1)</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/FileEditsActionBar.qml" line="139"/>
        <source>Undo all applied edits in this message</source>
        <translation>Annuler toutes les modifications appliquées dans ce message</translation>
    </message>
</context>
<context>
    <name>QObject</name>
    <message>
        <location filename="../../pluginllmcore/PromptTemplateManager.cpp" line="62"/>
        <location filename="../../pluginllmcore/PromptTemplateManager.cpp" line="75"/>
        <source>Template Not Found</source>
        <translation>Modèle introuvable</translation>
    </message>
    <message>
        <location filename="../../pluginllmcore/PromptTemplateManager.cpp" line="63"/>
        <location filename="../../pluginllmcore/PromptTemplateManager.cpp" line="76"/>
        <source>Template &apos;%1&apos; was not found or has been updated. Please re-set new one.</source>
        <translation>Le modèle &apos;%1&apos; est introuvable ou a été mis à jour. Veuillez en redéfinir un nouveau.</translation>
    </message>
    <message>
        <location filename="../../settings/ProvidersSettingsPage.cpp" line="595"/>
        <source>Providers</source>
        <translation>Fournisseurs</translation>
    </message>
    <message>
        <location filename="../../settings/AgentsSettingsPage.cpp" line="262"/>
        <source>Agents</source>
        <translation>Agents</translation>
    </message>
    <message>
        <location filename="../../ChatView/ChatConfigurationController.cpp" line="58"/>
        <location filename="../../ChatView/ChatConfigurationController.cpp" line="71"/>
        <source>Current Settings</source>
        <translation>Paramètres actuels</translation>
    </message>
</context>
<context>
    <name>QodeAssist::Chat::ChatCompressor</name>
    <message>
        <location filename="../../ChatView/ChatCompressor.cpp" line="30"/>
        <source>Compression already in progress</source>
        <translation>Compression déjà en cours</translation>
    </message>
    <message>
        <location filename="../../ChatView/ChatCompressor.cpp" line="35"/>
        <source>No chat file to compress</source>
        <translation>Aucun fichier de discussion à compresser</translation>
    </message>
    <message>
        <location filename="../../ChatView/ChatCompressor.cpp" line="40"/>
        <source>Chat is empty, nothing to compress</source>
        <translation>La discussion est vide, rien à compresser</translation>
    </message>
    <message>
        <location filename="../../ChatView/ChatCompressor.cpp" line="48"/>
        <source>No provider available</source>
        <translation>Aucun fournisseur disponible</translation>
    </message>
    <message>
        <location filename="../../ChatView/ChatCompressor.cpp" line="57"/>
        <source>No template available</source>
        <translation>Aucun modèle disponible</translation>
    </message>
    <message>
        <location filename="../../ChatView/ChatCompressor.cpp" line="99"/>
        <source>Compression cancelled</source>
        <translation>Compression annulée</translation>
    </message>
    <message>
        <location filename="../../ChatView/ChatCompressor.cpp" line="122"/>
        <source>Failed to save compressed chat</source>
        <translation>Échec de l&apos;enregistrement de la discussion compressée</translation>
    </message>
    <message>
        <location filename="../../ChatView/ChatCompressor.cpp" line="137"/>
        <source>Compression failed: %1</source>
        <translation>Échec de la compression : %1</translation>
    </message>
</context>
<context>
    <name>QodeAssist::Chat::ChatFileManager</name>
    <message>
        <location filename="../../ChatView/ChatFileManager.cpp" line="33"/>
        <source>File is not accessible: %1</source>
        <translation>Fichier inaccessible : %1</translation>
    </message>
    <message>
        <location filename="../../ChatView/ChatFileManager.cpp" line="45"/>
        <source>Failed to copy file: %1</source>
        <translation>Échec de la copie du fichier : %1</translation>
    </message>
</context>
<context>
    <name>QodeAssist::Chat::ChatHistoryStore</name>
    <message>
        <location filename="../../ChatView/ChatHistoryStore.cpp" line="121"/>
        <source>Save Chat History</source>
        <translation>Enregistrer l&apos;historique de discussion</translation>
    </message>
    <message>
        <location filename="../../ChatView/ChatHistoryStore.cpp" line="124"/>
        <location filename="../../ChatView/ChatHistoryStore.cpp" line="151"/>
        <source>JSON files (*.json)</source>
        <translation>Fichiers JSON (*.json)</translation>
    </message>
    <message>
        <location filename="../../ChatView/ChatHistoryStore.cpp" line="148"/>
        <source>Load Chat History</source>
        <translation>Charger l&apos;historique de discussion</translation>
    </message>
</context>
<context>
    <name>QodeAssist::Chat::ChatRootView</name>
    <message>
        <location filename="../../ChatView/ChatRootView.cpp" line="285"/>
        <source>Chat compressed successfully!</source>
        <translation>Discussion compressée avec succès !</translation>
    </message>
    <message>
        <location filename="../../ChatView/ChatRootView.cpp" line="508"/>
        <source>This chat file is already in use by another QodeAssist chat session.</source>
        <translation>Ce fichier de discussion est déjà utilisé par une autre session de discussion QodeAssist.</translation>
    </message>
    <message>
        <location filename="../../ChatView/ChatRootView.cpp" line="527"/>
        <source>This chat is already open in another QodeAssist chat session.</source>
        <translation>Cette discussion est déjà ouverte dans une autre session de discussion QodeAssist.</translation>
    </message>
    <message>
        <location filename="../../ChatView/ChatRootView.cpp" line="605"/>
        <location filename="../../ChatView/ChatRootView.cpp" line="653"/>
        <source>Select Files to Attach</source>
        <translation>Sélectionner les fichiers à joindre</translation>
    </message>
    <message numerus="yes">
        <location filename="../../ChatView/ChatRootView.cpp" line="689"/>
        <source>Images automatically moved to Attach zone (%n file(s))</source>
        <translation>
            <numerusform>Images automatiquement déplacées vers la zone de pièces jointes (%n fichier(s))</numerusform>
            <numerusform>Images automatiquement déplacées vers la zone de pièces jointes (%n fichier(s))</numerusform>
        </translation>
    </message>
    <message>
        <location filename="../../ChatView/ChatRootView.cpp" line="713"/>
        <source>Select Images to Attach</source>
        <translation>Sélectionner les images à joindre</translation>
    </message>
    <message>
        <location filename="../../ChatView/ChatRootView.cpp" line="715"/>
        <source>Images (*.png *.jpg *.jpeg *.gif *.bmp *.webp)</source>
        <translation>Images (*.png *.jpg *.jpeg *.gif *.bmp *.webp)</translation>
    </message>
    <message>
        <location filename="../../ChatView/ChatRootView.cpp" line="1280"/>
        <source>Compression is already in progress</source>
        <translation>Une compression est déjà en cours</translation>
    </message>
    <message>
        <location filename="../../ChatView/ChatRootView.cpp" line="1286"/>
        <source>No chat file to compress. Please save the chat first.</source>
        <translation>Aucun fichier de discussion à compresser. Veuillez d&apos;abord enregistrer la discussion.</translation>
    </message>
</context>
<context>
    <name>QodeAssist::Chat::NavigationPanel</name>
    <message>
        <location filename="../../chat/NavigationPanel.cpp" line="21"/>
        <source>QodeAssist Chat</source>
        <translation>Discussion QodeAssist</translation>
    </message>
</context>
<context>
    <name>QodeAssist::EditorChatButton</name>
    <message>
        <location filename="../../widgets/EditorChatButton.cpp" line="48"/>
        <source>Open QodeAssist Chat</source>
        <translation>Ouvrir la discussion QodeAssist</translation>
    </message>
</context>
<context>
    <name>QodeAssist::Mcp::McpServerManager</name>
    <message>
        <location filename="../../mcp/McpServerManager.cpp" line="80"/>
        <source>QodeAssist MCP server exposing Qt Creator project tools.</source>
        <translation>Serveur MCP QodeAssist exposant les outils de projet Qt Creator.</translation>
    </message>
</context>
<context>
    <name>QodeAssist::QodeAssistClient</name>
    <message>
        <location filename="../../QodeAssistClient.cpp" line="379"/>
        <source>Code completion failed: %1</source>
        <translation>Échec de la complétion de code : %1</translation>
    </message>
    <message>
        <location filename="../../QodeAssistClient.cpp" line="523"/>
        <source>Quick refactor failed</source>
        <translation>Échec du refactoring rapide</translation>
    </message>
    <message>
        <location filename="../../QodeAssistClient.cpp" line="524"/>
        <source>Quick refactor failed: %1</source>
        <translation>Échec du refactoring rapide : %1</translation>
    </message>
</context>
<context>
    <name>QodeAssist::RefactorWidget</name>
    <message>
        <location filename="../../widgets/RefactorWidget.cpp" line="176"/>
        <source>◄ Original</source>
        <translation>◄ Original</translation>
    </message>
    <message>
        <location filename="../../widgets/RefactorWidget.cpp" line="186"/>
        <source>Refactored ►</source>
        <translation>Refactorisé ►</translation>
    </message>
    <message>
        <location filename="../../widgets/RefactorWidget.cpp" line="215"/>
        <source>✓ Apply (⌘+Enter)</source>
        <translation>✓ Appliquer (⌘+Entrée)</translation>
    </message>
    <message>
        <location filename="../../widgets/RefactorWidget.cpp" line="217"/>
        <source>✓ Apply (Ctrl+Enter)</source>
        <translation>✓ Appliquer (Ctrl+Entrée)</translation>
    </message>
    <message>
        <location filename="../../widgets/RefactorWidget.cpp" line="223"/>
        <source>✗ Decline (Esc)</source>
        <translation>✗ Refuser (Échap)</translation>
    </message>
</context>
<context>
    <name>QodeAssist::Settings::AgentDetailPane</name>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="84"/>
        <source>Open in editor</source>
        <translation>Ouvrir dans l&apos;éditeur</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="85"/>
        <source>Duplicate…</source>
        <translation>Dupliquer…</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="86"/>
        <source>Delete</source>
        <translation>Supprimer</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="127"/>
        <source>Identity</source>
        <translation>Identité</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="129"/>
        <source>Extends:</source>
        <translation>Étend :</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="143"/>
        <source>Name:</source>
        <translation>Nom :</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="153"/>
        <source>Description:</source>
        <translation>Description :</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="154"/>
        <source>Tags:</source>
        <translation>Étiquettes :</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="155"/>
        <source>Comma-separated. Free-form — used to filter and group the agent list.</source>
        <translation>Séparées par des virgules. Format libre — utilisé pour filtrer et regrouper la liste des agents.</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="159"/>
        <source>System role</source>
        <translation>Rôle système</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="161"/>
        <source>Prepended to every request as the system message.</source>
        <translation>Ajouté au début de chaque requête comme message système.</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="168"/>
        <source>Context</source>
        <translation>Contexte</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="170"/>
        <source>Jinja2 template rendered with ContextManager bindings into the agent.context system-prompt layer. Empty = no context block.</source>
        <translation>Modèle Jinja2 rendu avec les liaisons ContextManager dans la couche d&apos;invite système agent.context. Vide = aucun bloc de contexte.</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="179"/>
        <source>Connection</source>
        <translation>Connexion</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="191"/>
        <source>Provider:</source>
        <translation>Fournisseur :</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="192"/>
        <source>The provider instance this agent uses. URL is inherited from the instance.</source>
        <translation>L&apos;instance de fournisseur utilisée par cet agent. L&apos;URL est héritée de l&apos;instance.</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="194"/>
        <source>Endpoint:</source>
        <translation>Point de terminaison :</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="195"/>
        <source>Appended to the provider&apos;s URL. Blank uses the provider default.</source>
        <translation>Ajouté à l&apos;URL du fournisseur. Vide utilise la valeur par défaut du fournisseur.</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="197"/>
        <source>Model:</source>
        <translation>Modèle :</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="208"/>
        <source>Match</source>
        <translation>Correspondance</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="210"/>
        <source>When a feature slot has multiple bound agents, the first whose match rules satisfy the current context wins.</source>
        <translation>Quand un emplacement de fonctionnalité a plusieurs agents liés, le premier dont les règles de correspondance satisfont le contexte actuel l&apos;emporte.</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="217"/>
        <source>File patterns:</source>
        <translation>Motifs de fichiers :</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="218"/>
        <source>Globs, comma-separated. Empty matches every file.</source>
        <translation>Motifs glob, séparés par des virgules. Vide correspond à tous les fichiers.</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="222"/>
        <source>Template</source>
        <translation>Modèle</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="224"/>
        <source>Jinja2 template (via inja) rendered to the request body. Built-in context: ctx.prefix, ctx.suffix, ctx.history, ctx.system_prompt, agent.model.</source>
        <translation>Modèle Jinja2 (via inja) rendu dans le corps de la requête. Contexte intégré : ctx.prefix, ctx.suffix, ctx.history, ctx.system_prompt, agent.model.</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="233"/>
        <source>message_format:</source>
        <translation>message_format :</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="237"/>
        <source>Load errors</source>
        <translation>Erreurs de chargement</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="246"/>
        <location filename="../../settings/AgentDetailPane.cpp" line="257"/>
        <source>▸ Show raw TOML</source>
        <translation>▸ Afficher le TOML brut</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="257"/>
        <source>▾ Hide raw TOML</source>
        <translation>▾ Masquer le TOML brut</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="312"/>
        <source>No description provided.</source>
        <translation>Aucune description fournie.</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="344"/>
        <source>%1  (missing — not in provider library)</source>
        <translation>%1  (manquant — absent de la bibliothèque du fournisseur)</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="352"/>
        <source>(provider default)</source>
        <translation>(par défaut du fournisseur)</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="358"/>
        <source># effective request line
(unknown — provider instance not found)</source>
        <translation># ligne de requête effective
(inconnu — instance de fournisseur introuvable)</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="360"/>
        <source>effective request line</source>
        <translation>ligne de requête effective</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="363"/>
        <source>(no system role set)</source>
        <translation>(aucun rôle système défini)</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="365"/>
        <source>(no context block)</source>
        <translation>(aucun bloc de contexte)</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="368"/>
        <source>(matches every file)</source>
        <translation>(correspond à tous les fichiers)</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="371"/>
        <source>(inherited from parent / none)</source>
        <translation>(hérité du parent / aucun)</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="382"/>
        <source>(truncated at %1 bytes)</source>
        <translation>(tronqué à %1 octets)</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="385"/>
        <source>(source file is empty)</source>
        <translation>(le fichier source est vide)</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="388"/>
        <source>(source file unavailable: %1)</source>
        <translation>(fichier source indisponible : %1)</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="394"/>
        <source>Bundled agents are read-only — duplicate to edit.</source>
        <translation>Les agents intégrés sont en lecture seule — dupliquez pour les modifier.</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="398"/>
        <source>Bundled agents cannot be deleted.</source>
        <translation>Les agents intégrés ne peuvent pas être supprimés.</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="407"/>
        <source>Select an agent</source>
        <translation>Sélectionner un agent</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="409"/>
        <source>Pick an agent from the list to see its details.</source>
        <translation>Choisissez un agent dans la liste pour voir ses détails.</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="437"/>
        <source>error: %1</source>
        <translation>erreur : %1</translation>
    </message>
    <message>
        <location filename="../../settings/AgentDetailPane.cpp" line="439"/>
        <source>warning: %1</source>
        <translation>avertissement : %1</translation>
    </message>
</context>
<context>
    <name>QodeAssist::Settings::AgentListPane</name>
    <message>
        <location filename="../../settings/AgentListPane.cpp" line="35"/>
        <source>Filter agents…</source>
        <translation>Filtrer les agents…</translation>
    </message>
    <message>
        <location filename="../../settings/AgentListPane.cpp" line="186"/>
        <source>User</source>
        <translation>Utilisateur</translation>
    </message>
    <message>
        <location filename="../../settings/AgentListPane.cpp" line="190"/>
        <source>Bundled</source>
        <translation>Intégré</translation>
    </message>
    <message>
        <location filename="../../settings/AgentListPane.cpp" line="194"/>
        <source>No agents match these filters.</source>
        <translation>Aucun agent ne correspond à ces filtres.</translation>
    </message>
</context>
<context>
    <name>QodeAssist::Settings::AgentRoleDialog</name>
    <message>
        <location filename="../../settings/AgentRoleDialog.cpp" line="24"/>
        <source>Add Agent Role</source>
        <translation>Ajouter un rôle d&apos;agent</translation>
    </message>
    <message>
        <location filename="../../settings/AgentRoleDialog.cpp" line="26"/>
        <source>Duplicate Agent Role</source>
        <translation>Dupliquer un rôle d&apos;agent</translation>
    </message>
    <message>
        <location filename="../../settings/AgentRoleDialog.cpp" line="28"/>
        <source>Edit Agent Role</source>
        <translation>Modifier un rôle d&apos;agent</translation>
    </message>
    <message>
        <location filename="../../settings/AgentRoleDialog.cpp" line="42"/>
        <source>e.g., Developer, Code Reviewer</source>
        <translation>ex. : Développeur, Relecteur de code</translation>
    </message>
    <message>
        <location filename="../../settings/AgentRoleDialog.cpp" line="43"/>
        <source>Name:</source>
        <translation>Nom :</translation>
    </message>
    <message>
        <location filename="../../settings/AgentRoleDialog.cpp" line="46"/>
        <source>e.g., developer, code_reviewer</source>
        <translation>ex. : developer, code_reviewer</translation>
    </message>
    <message>
        <location filename="../../settings/AgentRoleDialog.cpp" line="47"/>
        <source>ID:</source>
        <translation>ID :</translation>
    </message>
    <message>
        <location filename="../../settings/AgentRoleDialog.cpp" line="50"/>
        <source>Brief description of this role...</source>
        <translation>Brève description de ce rôle…</translation>
    </message>
    <message>
        <location filename="../../settings/AgentRoleDialog.cpp" line="52"/>
        <source>Description:</source>
        <translation>Description :</translation>
    </message>
    <message>
        <location filename="../../settings/AgentRoleDialog.cpp" line="56"/>
        <source>System Prompt:</source>
        <translation>Invite système :</translation>
    </message>
    <message>
        <location filename="../../settings/AgentRoleDialog.cpp" line="61"/>
        <source>You are an expert in...

Your role is to:
- Task 1
- Task 2
- Task 3</source>
        <translation>Vous êtes un expert en…

Votre rôle est de :
- Tâche 1
- Tâche 2
- Tâche 3</translation>
    </message>
    <message>
        <location filename="../../settings/AgentRoleDialog.cpp" line="75"/>
        <source>ID cannot be changed for existing roles</source>
        <translation>L&apos;ID ne peut pas être modifié pour les rôles existants</translation>
    </message>
</context>
<context>
    <name>QodeAssist::Settings::AgentsWidget</name>
    <message>
        <location filename="../../settings/AgentsSettingsPage.cpp" line="69"/>
        <source>Agents</source>
        <translation>Agents</translation>
    </message>
    <message>
        <location filename="../../settings/AgentsSettingsPage.cpp" line="75"/>
        <source>Reload from disk</source>
        <translation>Recharger depuis le disque</translation>
    </message>
    <message>
        <location filename="../../settings/AgentsSettingsPage.cpp" line="76"/>
        <source>Open agents folder</source>
        <translation>Ouvrir le dossier des agents</translation>
    </message>
    <message>
        <location filename="../../settings/AgentsSettingsPage.cpp" line="189"/>
        <location filename="../../settings/AgentsSettingsPage.cpp" line="197"/>
        <location filename="../../settings/AgentsSettingsPage.cpp" line="203"/>
        <source>Open agent</source>
        <translation>Ouvrir l&apos;agent</translation>
    </message>
    <message>
        <location filename="../../settings/AgentsSettingsPage.cpp" line="190"/>
        <source>&apos;%1&apos; is bundled with the plugin and read-only.
Use Duplicate to create an editable user copy.</source>
        <translation>&apos;%1&apos; est intégré au plugin et en lecture seule.
Utilisez Dupliquer pour créer une copie utilisateur modifiable.</translation>
    </message>
    <message>
        <location filename="../../settings/AgentsSettingsPage.cpp" line="198"/>
        <source>Agent &apos;%1&apos; has no editable source file.</source>
        <translation>L&apos;agent &apos;%1&apos; n&apos;a aucun fichier source modifiable.</translation>
    </message>
    <message>
        <location filename="../../settings/AgentsSettingsPage.cpp" line="204"/>
        <source>Could not open %1.</source>
        <translation>Impossible d&apos;ouvrir %1.</translation>
    </message>
    <message>
        <location filename="../../settings/AgentsSettingsPage.cpp" line="212"/>
        <source>Duplicate</source>
        <translation>Dupliquer</translation>
    </message>
    <message>
        <location filename="../../settings/AgentsSettingsPage.cpp" line="228"/>
        <location filename="../../settings/AgentsSettingsPage.cpp" line="236"/>
        <source>Delete Agent</source>
        <translation>Supprimer l&apos;agent</translation>
    </message>
    <message>
        <location filename="../../settings/AgentsSettingsPage.cpp" line="229"/>
        <source>Delete agent &apos;%1&apos;?

This will remove the file:
%2</source>
        <translation>Supprimer l&apos;agent &apos;%1&apos; ?

Cela supprimera le fichier :
%2</translation>
    </message>
    <message>
        <location filename="../../settings/AgentsSettingsPage.cpp" line="237"/>
        <source>Could not delete the agent file:
%1</source>
        <translation>Impossible de supprimer le fichier de l&apos;agent :
%1</translation>
    </message>
</context>
<context>
    <name>QodeAssist::Settings::McpClientsListAspect</name>
    <message>
        <location filename="../../settings/McpClientsListAspect.cpp" line="72"/>
        <source>Connected.</source>
        <translation>Connecté.</translation>
    </message>
    <message>
        <location filename="../../settings/McpClientsListAspect.cpp" line="74"/>
        <source>Connecting…</source>
        <translation>Connexion…</translation>
    </message>
    <message>
        <location filename="../../settings/McpClientsListAspect.cpp" line="76"/>
        <source>Failed.</source>
        <translation>Échec.</translation>
    </message>
    <message>
        <location filename="../../settings/McpClientsListAspect.cpp" line="77"/>
        <source>Failed: %1</source>
        <translation>Échec : %1</translation>
    </message>
    <message>
        <location filename="../../settings/McpClientsListAspect.cpp" line="81"/>
        <source>Disabled.</source>
        <translation>Désactivé.</translation>
    </message>
    <message>
        <location filename="../../settings/McpClientsListAspect.cpp" line="129"/>
        <source>everything (reference test server)</source>
        <translation>everything (serveur de test de référence)</translation>
    </message>
    <message>
        <location filename="../../settings/McpClientsListAspect.cpp" line="138"/>
        <source>filesystem (local files)</source>
        <translation>filesystem (fichiers locaux)</translation>
    </message>
    <message>
        <location filename="../../settings/McpClientsListAspect.cpp" line="149"/>
        <source>memory (in-memory key-value)</source>
        <translation>memory (clé-valeur en mémoire)</translation>
    </message>
    <message>
        <location filename="../../settings/McpClientsListAspect.cpp" line="158"/>
        <source>git (local git ops)</source>
        <translation>git (opérations git locales)</translation>
    </message>
    <message>
        <location filename="../../settings/McpClientsListAspect.cpp" line="167"/>
        <source>time (system clock)</source>
        <translation>time (horloge système)</translation>
    </message>
    <message>
        <location filename="../../settings/McpClientsListAspect.cpp" line="176"/>
        <source>qtcreator (Qt Creator&apos;s built-in MCP server)</source>
        <translation>qtcreator (serveur MCP intégré à Qt Creator)</translation>
    </message>
    <message>
        <location filename="../../settings/McpClientsListAspect.cpp" line="185"/>
        <source>qt-docs (Qt documentation)</source>
        <translation>qt-docs (documentation Qt)</translation>
    </message>
    <message>
        <location filename="../../settings/McpClientsListAspect.cpp" line="193"/>
        <source>remote (SSE / HTTP)</source>
        <translation>remote (SSE / HTTP)</translation>
    </message>
    <message>
        <location filename="../../settings/McpClientsListAspect.cpp" line="232"/>
        <source>Server reports no tools.</source>
        <translation>Le serveur ne signale aucun outil.</translation>
    </message>
    <message>
        <location filename="../../settings/McpClientsListAspect.cpp" line="245"/>
        <source>Tools</source>
        <translation>Outils</translation>
    </message>
    <message>
        <location filename="../../settings/McpClientsListAspect.cpp" line="271"/>
        <source>Enable / disable this MCP server</source>
        <translation>Activer / désactiver ce serveur MCP</translation>
    </message>
    <message>
        <location filename="../../settings/McpClientsListAspect.cpp" line="285"/>
        <source>Remove this server from the config.</source>
        <translation>Supprimer ce serveur de la configuration.</translation>
    </message>
    <message>
        <location filename="../../settings/McpClientsListAspect.cpp" line="313"/>
        <source>Remove server</source>
        <translation>Supprimer le serveur</translation>
    </message>
    <message>
        <location filename="../../settings/McpClientsListAspect.cpp" line="314"/>
        <source>Remove server &apos;%1&apos; from the config?</source>
        <translation>Supprimer le serveur &apos;%1&apos; de la configuration ?</translation>
    </message>
    <message>
        <location filename="../../settings/McpClientsListAspect.cpp" line="346"/>
        <source>Open Config</source>
        <translation>Ouvrir la configuration</translation>
    </message>
    <message>
        <location filename="../../settings/McpClientsListAspect.cpp" line="348"/>
        <source>Refresh MCP List</source>
        <translation>Actualiser la liste MCP</translation>
    </message>
    <message>
        <location filename="../../settings/McpClientsListAspect.cpp" line="359"/>
        <source>Note: restart Qt Creator to apply MCP changes to already-opened chats and running sessions.</source>
        <translation>Remarque : redémarrez Qt Creator pour appliquer les modifications MCP aux discussions déjà ouvertes et aux sessions en cours.</translation>
    </message>
    <message>
        <location filename="../../settings/McpClientsListAspect.cpp" line="376"/>
        <source>Quick Setup</source>
        <translation>Configuration rapide</translation>
    </message>
    <message>
        <location filename="../../settings/McpClientsListAspect.cpp" line="379"/>
        <source>Pick a preset to append a ready-made server entry to the config (auto-suffixed if the name is taken).</source>
        <translation>Choisissez un préréglage pour ajouter une entrée de serveur prête à l&apos;emploi à la configuration (suffixée automatiquement si le nom est pris).</translation>
    </message>
    <message>
        <location filename="../../settings/McpClientsListAspect.cpp" line="382"/>
        <source>-- Select Preset --</source>
        <translation>-- Sélectionner un préréglage --</translation>
    </message>
    <message>
        <location filename="../../settings/McpClientsListAspect.cpp" line="410"/>
        <source>No servers configured. Add a preset below or edit the JSON.</source>
        <translation>Aucun serveur configuré. Ajoutez un préréglage ci-dessous ou modifiez le JSON.</translation>
    </message>
    <message>
        <location filename="../../settings/McpClientsListAspect.cpp" line="415"/>
        <source>0 server(s) defined.</source>
        <translation>0 serveur(s) défini(s).</translation>
    </message>
    <message>
        <location filename="../../settings/McpClientsListAspect.cpp" line="429"/>
        <source>%1 server(s) defined, %2 enabled.</source>
        <translation>%1 serveur(s) défini(s), %2 activé(s).</translation>
    </message>
    <message>
        <location filename="../../settings/McpClientsListAspect.cpp" line="475"/>
        <source>MCP configuration</source>
        <translation>Configuration MCP</translation>
    </message>
    <message>
        <location filename="../../settings/McpClientsListAspect.cpp" line="476"/>
        <source>Failed to write %1:
%2</source>
        <translation>Échec de l&apos;écriture de %1 :
%2</translation>
    </message>
</context>
<context>
    <name>QodeAssist::Settings::ProviderDetailPane</name>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="42"/>
        <source>Edit…</source>
        <translation>Modifier…</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="44"/>
        <source>Open in editor</source>
        <translation>Ouvrir dans l&apos;éditeur</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="46"/>
        <source>Open this provider&apos;s TOML file in Qt Creator. Bundled providers are read-only — duplicate first.</source>
        <translation>Ouvrir le fichier TOML de ce fournisseur dans Qt Creator. Les fournisseurs intégrés sont en lecture seule — dupliquez d&apos;abord.</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="48"/>
        <source>Duplicate…</source>
        <translation>Dupliquer…</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="49"/>
        <source>Delete</source>
        <translation>Supprimer</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="50"/>
        <source>Cancel</source>
        <translation>Annuler</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="51"/>
        <source>Save</source>
        <translation>Enregistrer</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="105"/>
        <source>Identity</source>
        <translation>Identité</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="117"/>
        <source>Name:</source>
        <translation>Nom :</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="118"/>
        <source>Client API:</source>
        <translation>API client :</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="119"/>
        <source>The client API this provider speaks. Cannot be changed after creation.</source>
        <translation>L&apos;API client utilisée par ce fournisseur. Ne peut pas être modifiée après création.</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="121"/>
        <source>Description:</source>
        <translation>Description :</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="124"/>
        <source>Endpoint</source>
        <translation>Point de terminaison</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="131"/>
        <source>URL:</source>
        <translation>URL :</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="132"/>
        <source>Base URL. Agents append their endpoint path (e.g. /chat/completions) to this.</source>
        <translation>URL de base. Les agents y ajoutent le chemin de leur point de terminaison (ex. /chat/completions).</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="144"/>
        <source>Credentials</source>
        <translation>Identifiants</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="147"/>
        <location filename="../../settings/ProviderDetailPane.cpp" line="316"/>
        <location filename="../../settings/ProviderDetailPane.cpp" line="370"/>
        <source>Enter API key…</source>
        <translation>Saisir la clé API…</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="151"/>
        <source>Show / hide API key</source>
        <translation>Afficher / masquer la clé API</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="155"/>
        <source>Save key</source>
        <translation>Enregistrer la clé</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="157"/>
        <source>Clear</source>
        <translation>Effacer</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="158"/>
        <source>Erase the stored API key for this provider</source>
        <translation>Effacer la clé API enregistrée pour ce fournisseur</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="190"/>
        <source>API key:</source>
        <translation>Clé API :</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="194"/>
        <source>Launch</source>
        <translation>Lancement</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="204"/>
        <location filename="../../settings/ProviderDetailPane.cpp" line="410"/>
        <source>idle</source>
        <translation>inactif</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="205"/>
        <source>Start</source>
        <translation>Démarrer</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="206"/>
        <source>Stop</source>
        <translation>Arrêter</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="207"/>
        <source>Restart</source>
        <translation>Redémarrer</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="224"/>
        <location filename="../../settings/ProviderDetailPane.cpp" line="243"/>
        <source>▸ Show launch terminal</source>
        <translation>▸ Afficher le terminal de lancement</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="243"/>
        <source>▾ Hide launch terminal</source>
        <translation>▾ Masquer le terminal de lancement</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="253"/>
        <location filename="../../settings/ProviderDetailPane.cpp" line="264"/>
        <source>▸ Show raw TOML</source>
        <translation>▸ Afficher le TOML brut</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="264"/>
        <source>▾ Hide raw TOML</source>
        <translation>▾ Masquer le TOML brut</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="295"/>
        <source>No description provided.</source>
        <translation>Aucune description fournie.</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="309"/>
        <source>— not required (local provider)</source>
        <translation>— non requis (fournisseur local)</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="310"/>
        <source>This provider type does not use a key.</source>
        <translation>Ce type de fournisseur n&apos;utilise pas de clé.</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="312"/>
        <location filename="../../settings/ProviderDetailPane.cpp" line="366"/>
        <source>Stored — enter a new key to replace it.</source>
        <translation>Enregistrée — saisissez une nouvelle clé pour la remplacer.</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="313"/>
        <location filename="../../settings/ProviderDetailPane.cpp" line="367"/>
        <source>A key is stored. Type a new key and press Save key to replace it, or Clear to erase it.</source>
        <translation>Une clé est enregistrée. Saisissez une nouvelle clé et appuyez sur Enregistrer la clé pour la remplacer, ou sur Effacer pour la supprimer.</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="317"/>
        <location filename="../../settings/ProviderDetailPane.cpp" line="371"/>
        <source>No key stored yet. Type a key and press Save key.</source>
        <translation>Aucune clé enregistrée pour le moment. Saisissez une clé et appuyez sur Enregistrer la clé.</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="338"/>
        <source>Select a provider</source>
        <translation>Sélectionner un fournisseur</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="389"/>
        <source>No [launch] block. This provider is treated as external — the plugin will not spawn or supervise any process. Add a [launch] block to the TOML to have the plugin manage a local server here.</source>
        <translation>Aucun bloc [launch]. Ce fournisseur est traité comme externe — le plugin ne lancera ni ne supervisera aucun processus. Ajoutez un bloc [launch] au TOML pour que le plugin gère un serveur local ici.</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="400"/>
        <source> &lt;span style=&apos;color:gray&apos;&gt;(detached — survives Qt Creator restart)&lt;/span&gt;</source>
        <translation> &lt;span style=&apos;color:gray&apos;&gt;(détaché — survit au redémarrage de Qt Creator)&lt;/span&gt;</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="411"/>
        <source>starting…</source>
        <translation>démarrage…</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="412"/>
        <source>probing…</source>
        <translation>sondage…</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="413"/>
        <source>ready</source>
        <translation>prêt</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="414"/>
        <source>stopping…</source>
        <translation>arrêt…</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="416"/>
        <source>failed</source>
        <translation>échec</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderDetailPane.cpp" line="417"/>
        <source>failed — %1</source>
        <translation>échec — %1</translation>
    </message>
</context>
<context>
    <name>QodeAssist::Settings::ProvidersPageWidget</name>
    <message>
        <location filename="../../settings/ProvidersSettingsPage.cpp" line="76"/>
        <source>Providers</source>
        <translation>Fournisseurs</translation>
    </message>
    <message>
        <location filename="../../settings/ProvidersSettingsPage.cpp" line="92"/>
        <source>Filter providers…</source>
        <translation>Filtrer les fournisseurs…</translation>
    </message>
    <message>
        <location filename="../../settings/ProvidersSettingsPage.cpp" line="136"/>
        <source>Open in editor</source>
        <translation>Ouvrir dans l&apos;éditeur</translation>
    </message>
    <message>
        <location filename="../../settings/ProvidersSettingsPage.cpp" line="137"/>
        <source>Bundled providers are read-only. Use Duplicate to create an editable user copy first.</source>
        <translation>Les fournisseurs intégrés sont en lecture seule. Utilisez Dupliquer pour créer d&apos;abord une copie utilisateur modifiable.</translation>
    </message>
    <message>
        <location filename="../../settings/ProvidersSettingsPage.cpp" line="278"/>
        <source>No user instances yet.</source>
        <translation>Aucune instance utilisateur pour le moment.</translation>
    </message>
    <message>
        <location filename="../../settings/ProvidersSettingsPage.cpp" line="279"/>
        <source>No bundled instances loaded.</source>
        <translation>Aucune instance intégrée chargée.</translation>
    </message>
    <message>
        <location filename="../../settings/ProvidersSettingsPage.cpp" line="289"/>
        <source>User</source>
        <translation>Utilisateur</translation>
    </message>
    <message>
        <location filename="../../settings/ProvidersSettingsPage.cpp" line="290"/>
        <source>Bundled</source>
        <translation>Intégré</translation>
    </message>
    <message>
        <location filename="../../settings/ProvidersSettingsPage.cpp" line="325"/>
        <location filename="../../settings/ProvidersSettingsPage.cpp" line="331"/>
        <location filename="../../settings/ProvidersSettingsPage.cpp" line="343"/>
        <source>Duplicate provider</source>
        <translation>Dupliquer le fournisseur</translation>
    </message>
    <message>
        <location filename="../../settings/ProvidersSettingsPage.cpp" line="326"/>
        <source>Name for the new provider:</source>
        <translation>Nom du nouveau fournisseur :</translation>
    </message>
    <message>
        <location filename="../../settings/ProvidersSettingsPage.cpp" line="332"/>
        <location filename="../../settings/ProvidersSettingsPage.cpp" line="402"/>
        <source>An instance named &apos;%1&apos; already exists.</source>
        <translation>Une instance nommée &apos;%1&apos; existe déjà.</translation>
    </message>
    <message>
        <location filename="../../settings/ProvidersSettingsPage.cpp" line="362"/>
        <location filename="../../settings/ProvidersSettingsPage.cpp" line="367"/>
        <source>Delete provider</source>
        <translation>Supprimer le fournisseur</translation>
    </message>
    <message>
        <location filename="../../settings/ProvidersSettingsPage.cpp" line="363"/>
        <source>Delete user provider &apos;%1&apos;?

File: %2</source>
        <translation>Supprimer le fournisseur utilisateur &apos;%1&apos; ?

Fichier : %2</translation>
    </message>
    <message>
        <location filename="../../settings/ProvidersSettingsPage.cpp" line="368"/>
        <source>Failed to delete file:
%1</source>
        <translation>Échec de la suppression du fichier :
%1</translation>
    </message>
    <message>
        <location filename="../../settings/ProvidersSettingsPage.cpp" line="382"/>
        <location filename="../../settings/ProvidersSettingsPage.cpp" line="395"/>
        <location filename="../../settings/ProvidersSettingsPage.cpp" line="401"/>
        <location filename="../../settings/ProvidersSettingsPage.cpp" line="408"/>
        <location filename="../../settings/ProvidersSettingsPage.cpp" line="423"/>
        <location filename="../../settings/ProvidersSettingsPage.cpp" line="431"/>
        <source>Save</source>
        <translation>Enregistrer</translation>
    </message>
    <message>
        <location filename="../../settings/ProvidersSettingsPage.cpp" line="382"/>
        <source>Name cannot be empty.</source>
        <translation>Le nom ne peut pas être vide.</translation>
    </message>
    <message>
        <location filename="../../settings/ProvidersSettingsPage.cpp" line="410"/>
        <source>Save anyway?</source>
        <translation>Enregistrer quand même ?</translation>
    </message>
    <message>
        <location filename="../../settings/ProvidersSettingsPage.cpp" line="432"/>
        <source>Saved to:
%1

but could not remove the old file:
%2

Two provider files now describe this instance — delete the old file manually to avoid a duplicate-name error.</source>
        <translation>Enregistré dans :
%1

mais impossible de supprimer l&apos;ancien fichier :
%2

Deux fichiers de fournisseur décrivent maintenant cette instance — supprimez l&apos;ancien fichier manuellement pour éviter une erreur de nom en double.</translation>
    </message>
    <message>
        <location filename="../../settings/ProvidersSettingsPage.cpp" line="471"/>
        <source>Clear API key</source>
        <translation>Effacer la clé API</translation>
    </message>
    <message>
        <location filename="../../settings/ProvidersSettingsPage.cpp" line="472"/>
        <source>Erase the stored API key for &apos;%1&apos;?</source>
        <translation>Effacer la clé API enregistrée pour &apos;%1&apos; ?</translation>
    </message>
</context>
<context>
    <name>QodeAssist::Settings::TagFilterStrip</name>
    <message>
        <location filename="../../settings/TagFilterStrip.cpp" line="115"/>
        <source>FILTER BY TAG</source>
        <translation>FILTRER PAR ÉTIQUETTE</translation>
    </message>
    <message>
        <location filename="../../settings/TagFilterStrip.cpp" line="120"/>
        <source>clear</source>
        <translation>effacer</translation>
    </message>
</context>
<context>
    <name>QodeAssist::Tools::TodoTool</name>
    <message>
        <location filename="../../tools/TodoTool.cpp" line="100"/>
        <source>Error: &apos;tasks&apos; parameter (array) is required for &apos;add&apos; operation. Example: {&quot;operation&quot;: &quot;add&quot;, &quot;tasks&quot;: [&quot;Task 1&quot;, &quot;Task 2&quot;]}</source>
        <translation>Erreur : le paramètre &apos;tasks&apos; (tableau) est requis pour l&apos;opération &apos;add&apos;. Exemple : {&quot;operation&quot;: &quot;add&quot;, &quot;tasks&quot;: [&quot;Task 1&quot;, &quot;Task 2&quot;]}</translation>
    </message>
    <message>
        <location filename="../../tools/TodoTool.cpp" line="107"/>
        <source>Error: &apos;tasks&apos; array cannot be empty. Provide at least one task.</source>
        <translation>Erreur : le tableau &apos;tasks&apos; ne peut pas être vide. Fournissez au moins une tâche.</translation>
    </message>
    <message>
        <location filename="../../tools/TodoTool.cpp" line="120"/>
        <source>Error: All tasks in &apos;tasks&apos; array are empty strings.</source>
        <translation>Erreur : toutes les tâches du tableau &apos;tasks&apos; sont des chaînes vides.</translation>
    </message>
    <message>
        <location filename="../../tools/TodoTool.cpp" line="128"/>
        <source>Error: &apos;todo_ids&apos; parameter (array) is required for &apos;complete&apos; operation. Example: {&quot;operation&quot;: &quot;complete&quot;, &quot;todo_ids&quot;: [1, 2, 3]}</source>
        <translation>Erreur : le paramètre &apos;todo_ids&apos; (tableau) est requis pour l&apos;opération &apos;complete&apos;. Exemple : {&quot;operation&quot;: &quot;complete&quot;, &quot;todo_ids&quot;: [1, 2, 3]}</translation>
    </message>
    <message>
        <location filename="../../tools/TodoTool.cpp" line="135"/>
        <source>Error: &apos;todo_ids&apos; array cannot be empty. Provide at least one ID.</source>
        <translation>Erreur : le tableau &apos;todo_ids&apos; ne peut pas être vide. Fournissez au moins un ID.</translation>
    </message>
    <message>
        <location filename="../../tools/TodoTool.cpp" line="148"/>
        <source>Error: All IDs in &apos;todo_ids&apos; array are invalid. IDs must be positive integers.</source>
        <translation>Erreur : tous les ID du tableau &apos;todo_ids&apos; sont invalides. Les ID doivent être des entiers positifs.</translation>
    </message>
    <message>
        <location filename="../../tools/TodoTool.cpp" line="159"/>
        <source>Error: Unknown operation &apos;%1&apos;. Valid operations: &apos;add&apos;, &apos;complete&apos;, &apos;list&apos;</source>
        <translation>Erreur : opération inconnue &apos;%1&apos;. Opérations valides : &apos;add&apos;, &apos;complete&apos;, &apos;list&apos;</translation>
    </message>
    <message>
        <location filename="../../tools/TodoTool.cpp" line="192"/>
        <source>✓ Added 1 new task</source>
        <translation>✓ 1 nouvelle tâche ajoutée</translation>
    </message>
    <message>
        <location filename="../../tools/TodoTool.cpp" line="193"/>
        <source>✓ Added %1 new tasks</source>
        <translation>✓ %1 nouvelles tâches ajoutées</translation>
    </message>
    <message>
        <location filename="../../tools/TodoTool.cpp" line="203"/>
        <source>Error: No todos found in this session</source>
        <translation>Erreur : aucune tâche trouvée dans cette session</translation>
    </message>
    <message>
        <location filename="../../tools/TodoTool.cpp" line="228"/>
        <source>✓ Marked 1 task as completed</source>
        <translation>✓ 1 tâche marquée comme terminée</translation>
    </message>
    <message>
        <location filename="../../tools/TodoTool.cpp" line="229"/>
        <source>✓ Marked %1 tasks as completed</source>
        <translation>✓ %1 tâches marquées comme terminées</translation>
    </message>
    <message>
        <location filename="../../tools/TodoTool.cpp" line="234"/>
        <source>⚠ %1 already completed</source>
        <translation>⚠ %1 déjà terminée(s)</translation>
    </message>
    <message>
        <location filename="../../tools/TodoTool.cpp" line="238"/>
        <source>❌ Not found: %1</source>
        <translation>❌ Introuvable : %1</translation>
    </message>
    <message>
        <location filename="../../tools/TodoTool.cpp" line="255"/>
        <source>📋 TODO List: (empty)</source>
        <translation>📋 Liste TODO : (vide)</translation>
    </message>
    <message>
        <location filename="../../tools/TodoTool.cpp" line="264"/>
        <source>📋 TODO List:</source>
        <translation>📋 Liste TODO :</translation>
    </message>
    <message>
        <location filename="../../tools/TodoTool.cpp" line="287"/>
        <location filename="../../tools/TodoTool.cpp" line="329"/>
        <source>Progress: %1/%2 completed (%3%)</source>
        <translation>Progression : %1/%2 terminé(s) (%3 %)</translation>
    </message>
    <message>
        <location filename="../../tools/TodoTool.cpp" line="296"/>
        <location filename="../../tools/TodoTool.cpp" line="316"/>
        <source>📋 All tasks completed! 🎉</source>
        <translation>📋 Toutes les tâches sont terminées ! 🎉</translation>
    </message>
    <message>
        <location filename="../../tools/TodoTool.cpp" line="321"/>
        <source>📋 Remaining tasks:</source>
        <translation>📋 Tâches restantes :</translation>
    </message>
</context>
<context>
    <name>QodeAssist::UpdateDialog</name>
    <message>
        <location filename="../../settings/UpdateDialog.cpp" line="19"/>
        <source>QodeAssist Update</source>
        <translation>Mise à jour QodeAssist</translation>
    </message>
    <message>
        <location filename="../../settings/UpdateDialog.cpp" line="27"/>
        <source>QodeAssist is an open-source project that helps
developers write better code. If you find it useful, please</source>
        <translation>QodeAssist est un projet open source qui aide
les développeurs à écrire du meilleur code. Si vous le trouvez utile, veuillez</translation>
    </message>
    <message>
        <location filename="../../settings/UpdateDialog.cpp" line="54"/>
        <source>QodeAssistUpdater - convenient tool for plugin installation and updates</source>
        <translation>QodeAssistUpdater - outil pratique pour l&apos;installation et la mise à jour du plugin</translation>
    </message>
    <message>
        <location filename="../../settings/UpdateDialog.cpp" line="60"/>
        <source>Download QodeAssistUpdater</source>
        <translation>Télécharger QodeAssistUpdater</translation>
    </message>
    <message>
        <location filename="../../settings/UpdateDialog.cpp" line="70"/>
        <location filename="../../settings/UpdateDialog.cpp" line="127"/>
        <source>A new version of QodeAssist is available!</source>
        <translation>Une nouvelle version de QodeAssist est disponible !</translation>
    </message>
    <message>
        <location filename="../../settings/UpdateDialog.cpp" line="76"/>
        <location filename="../../settings/UpdateDialog.cpp" line="128"/>
        <source>Version %1 is now available - you have %2</source>
        <translation>La version %1 est maintenant disponible - vous avez %2</translation>
    </message>
    <message>
        <location filename="../../settings/UpdateDialog.cpp" line="80"/>
        <source>Release Notes:</source>
        <translation>Notes de version :</translation>
    </message>
    <message>
        <location filename="../../settings/UpdateDialog.cpp" line="89"/>
        <source>Open Release Page</source>
        <translation>Ouvrir la page de version</translation>
    </message>
    <message>
        <location filename="../../settings/UpdateDialog.cpp" line="92"/>
        <source>Open Plugin Folder</source>
        <translation>Ouvrir le dossier du plugin</translation>
    </message>
    <message>
        <location filename="../../settings/UpdateDialog.cpp" line="95"/>
        <source>Close</source>
        <translation>Fermer</translation>
    </message>
    <message>
        <location filename="../../settings/UpdateDialog.cpp" line="121"/>
        <source>QodeAssist is up to date</source>
        <translation>QodeAssist est à jour</translation>
    </message>
    <message>
        <location filename="../../settings/UpdateDialog.cpp" line="123"/>
        <source>You are using the latest version: %1</source>
        <translation>Vous utilisez la dernière version : %1</translation>
    </message>
    <message>
        <location filename="../../settings/UpdateDialog.cpp" line="135"/>
        <source>No release notes available. Check the release page for more information.</source>
        <translation>Aucune note de version disponible. Consultez la page de version pour plus d&apos;informations.</translation>
    </message>
</context>
<context>
    <name>QodeAssist::UpdateStatusWidget</name>
    <message>
        <location filename="../../UpdateStatusWidget.cpp" line="28"/>
        <source>Update</source>
        <translation>Mettre à jour</translation>
    </message>
    <message>
        <location filename="../../UpdateStatusWidget.cpp" line="45"/>
        <source>New version: v%1</source>
        <translation>Nouvelle version : v%1</translation>
    </message>
    <message>
        <location filename="../../UpdateStatusWidget.cpp" line="48"/>
        <source>Check update information</source>
        <translation>Vérifier les informations de mise à jour</translation>
    </message>
</context>
<context>
    <name>QtC::QodeAssist</name>
    <message>
        <location filename="../../sources/providersConfig/ProviderInstanceWriter.cpp" line="141"/>
        <source>Cannot create user provider folder:
%1</source>
        <translation>Impossible de créer le dossier du fournisseur utilisateur :
%1</translation>
    </message>
    <message>
        <location filename="../../sources/providersConfig/ProviderInstanceWriter.cpp" line="147"/>
        <source>Cannot pick a free filename in:
%1</source>
        <translation>Impossible de choisir un nom de fichier libre dans :
%1</translation>
    </message>
    <message>
        <location filename="../../sources/providersConfig/ProviderInstanceWriter.cpp" line="153"/>
        <source>Cannot write %1:
%2</source>
        <translation>Impossible d&apos;écrire %1 :
%2</translation>
    </message>
    <message>
        <location filename="../../sources/providersConfig/ProviderInstanceWriter.cpp" line="159"/>
        <source>Write failed for %1:
%2</source>
        <translation>Échec de l&apos;écriture pour %1 :
%2</translation>
    </message>
    <message>
        <location filename="../../settings/GeneralSettings.cpp" line="79"/>
        <location filename="../../settings/GeneralSettings.cpp" line="86"/>
        <location filename="../../settings/GeneralSettings.cpp" line="93"/>
        <source>Quick Setup</source>
        <translation>Configuration rapide</translation>
    </message>
    <message>
        <location filename="../../settings/GeneralSettings.cpp" line="82"/>
        <location filename="../../settings/GeneralSettings.cpp" line="89"/>
        <location filename="../../settings/GeneralSettings.cpp" line="96"/>
        <location filename="../../settings/SettingsTr.hpp" line="81"/>
        <source>Configure API Key</source>
        <translation>Configurer la clé API</translation>
    </message>
    <message>
        <location filename="../../settings/GeneralSettings.cpp" line="83"/>
        <location filename="../../settings/GeneralSettings.cpp" line="90"/>
        <location filename="../../settings/GeneralSettings.cpp" line="97"/>
        <source>Open Provider Settings to configure API keys</source>
        <translation>Ouvrir les paramètres du fournisseur pour configurer les clés API</translation>
    </message>
    <message>
        <location filename="../../settings/GeneralSettings.cpp" line="129"/>
        <location filename="../../settings/GeneralSettings.cpp" line="208"/>
        <location filename="../../settings/GeneralSettings.cpp" line="245"/>
        <source>Load configuration (includes predefined cloud models)</source>
        <translation>Charger la configuration (inclut les modèles cloud prédéfinis)</translation>
    </message>
    <message>
        <location filename="../../settings/GeneralSettings.cpp" line="251"/>
        <location filename="../../settings/GeneralSettings.cpp" line="255"/>
        <location filename="../../settings/GeneralSettings.cpp" line="259"/>
        <source>Show template information</source>
        <translation>Afficher les informations du modèle</translation>
    </message>
    <message>
        <location filename="../../settings/GeneralSettings.cpp" line="522"/>
        <source>Template Information</source>
        <translation>Informations du modèle</translation>
    </message>
    <message>
        <location filename="../../settings/GeneralSettings.cpp" line="523"/>
        <source>Template</source>
        <translation>Modèle</translation>
    </message>
    <message>
        <location filename="../../settings/GeneralSettings.cpp" line="526"/>
        <source>Description:</source>
        <translation>Description :</translation>
    </message>
    <message>
        <location filename="../../settings/GeneralSettings.cpp" line="744"/>
        <source>Failed to save configuration. Check logs for details.</source>
        <translation>Échec de l&apos;enregistrement de la configuration. Consultez les journaux pour plus de détails.</translation>
    </message>
    <message>
        <location filename="../../settings/GeneralSettings.cpp" line="785"/>
        <source>[Preset] configurations are predefined cloud models ready to use.</source>
        <translation>Les configurations [Preset] sont des modèles cloud prédéfinis prêts à l&apos;emploi.</translation>
    </message>
    <message>
        <location filename="../../settings/GeneralSettings.cpp" line="832"/>
        <source>Predefined configurations cannot be deleted.</source>
        <translation>Les configurations prédéfinies ne peuvent pas être supprimées.</translation>
    </message>
    <message>
        <location filename="../../settings/GeneralSettings.cpp" line="850"/>
        <source>Failed to delete configuration.</source>
        <translation>Échec de la suppression de la configuration.</translation>
    </message>
    <message>
        <location filename="../../settings/GeneralSettings.cpp" line="912"/>
        <source>-- Select Preset --</source>
        <translation>-- Sélectionner un préréglage --</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="11"/>
        <location filename="../../settings/ProjectSettings.cpp" line="22"/>
        <location filename="../../settings/ProjectSettings.cpp" line="23"/>
        <source>Enable QodeAssist</source>
        <translation>Activer QodeAssist</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="12"/>
        <source>General</source>
        <translation>Général</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="14"/>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="346"/>
        <location filename="../../settings/ToolsSettings.cpp" line="167"/>
        <location filename="../../settings/McpSettings.cpp" line="79"/>
        <location filename="../../settings/ProviderSettings.cpp" line="126"/>
        <source>Reset Page to Defaults</source>
        <translation>Réinitialiser la page aux valeurs par défaut</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="15"/>
        <source>Check Update</source>
        <translation>Vérifier les mises à jour</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="16"/>
        <source>Select...</source>
        <translation>Sélectionner…</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="17"/>
        <source>Provider:</source>
        <translation>Fournisseur :</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="18"/>
        <source>Model:</source>
        <translation>Modèle :</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="19"/>
        <source>Template:</source>
        <translation>Modèle :</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="20"/>
        <source>URL:</source>
        <translation>URL :</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="21"/>
        <source>Status:</source>
        <translation>Statut :</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="22"/>
        <source>Test</source>
        <translation>Tester</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="23"/>
        <source>Enable Logging</source>
        <translation>Activer la journalisation</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="25"/>
        <source>Log messages are visible in General Messages pane</source>
        <translation>Les messages de journal sont visibles dans le panneau Messages généraux</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="27"/>
        <source>Check for updates when Qt Creator starts</source>
        <translation>Vérifier les mises à jour au démarrage de Qt Creator</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="28"/>
        <source>Enable Chat(If you have performance issues try disabling this, need restart QtC)</source>
        <translation>Activer la discussion (en cas de problèmes de performances, essayez de la désactiver, redémarrage de QtC nécessaire)</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="31"/>
        <source>Custom endpoint:</source>
        <translation>Point de terminaison personnalisé :</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="33"/>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="27"/>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="543"/>
        <source>Code Completion</source>
        <translation>Complétion de code</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="34"/>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="30"/>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="391"/>
        <source>Chat Assistant</source>
        <translation>Assistant de discussion</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="35"/>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="27"/>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="400"/>
        <location filename="../../widgets/QuickRefactorDialog.cpp" line="85"/>
        <source>Quick Refactor</source>
        <translation>Refactoring rapide</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="36"/>
        <source>Chat Compression</source>
        <translation>Compression de la discussion</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="37"/>
        <source>Agent Pipelines</source>
        <translation>Pipelines d&apos;agents</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="38"/>
        <source>Inline completions while you type. Matchers run on every request.</source>
        <translation>Complétions en ligne pendant la saisie. Les matchers s&apos;exécutent à chaque requête.</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="41"/>
        <source>Conversational assistant in the QodeAssist panel.</source>
        <translation>Assistant conversationnel dans le panneau QodeAssist.</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="43"/>
        <source>Used when a chat conversation needs to be summarised to stay within context.</source>
        <translation>Utilisé lorsqu&apos;une conversation doit être résumée pour rester dans le contexte.</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="46"/>
        <source>Inline editor-driven refactors via the Quick Refactor action.</source>
        <translation>Refactorings pilotés depuis l&apos;éditeur via l&apos;action Refactoring rapide.</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="48"/>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="465"/>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="348"/>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="356"/>
        <location filename="../../settings/ToolsSettings.cpp" line="235"/>
        <location filename="../../settings/McpSettings.cpp" line="148"/>
        <location filename="../../settings/ProviderSettings.cpp" line="199"/>
        <source>Reset Settings</source>
        <translation>Réinitialiser les paramètres</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="49"/>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="466"/>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="349"/>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="357"/>
        <location filename="../../settings/ToolsSettings.cpp" line="236"/>
        <location filename="../../settings/McpSettings.cpp" line="149"/>
        <location filename="../../settings/ProviderSettings.cpp" line="200"/>
        <source>Are you sure you want to reset all settings to default values?</source>
        <translation>Voulez-vous vraiment réinitialiser tous les paramètres aux valeurs par défaut ?</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="52"/>
        <source>Current template description:</source>
        <translation>Description du modèle actuel :</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="54"/>
        <source>Connection Error</source>
        <translation>Erreur de connexion</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="56"/>
        <source>Unable to retrieve the list of models from the server.</source>
        <translation>Impossible de récupérer la liste des modèles depuis le serveur.</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="57"/>
        <source>Please verify the following:
- Server is running and accessible
- URL is correct
- Provider is properly configured
- API key is correctly set (if required)

You can try selecting a different provider or changing the URL:</source>
        <translation>Veuillez vérifier les éléments suivants :
- Le serveur est en cours d&apos;exécution et accessible
- L&apos;URL est correcte
- Le fournisseur est correctement configuré
- La clé API est correctement définie (si requise)

Vous pouvez essayer de sélectionner un autre fournisseur ou de changer l&apos;URL :</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="65"/>
        <source>Select Provider</source>
        <translation>Sélectionner le fournisseur</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="66"/>
        <source>Select URL</source>
        <translation>Sélectionner l&apos;URL</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="67"/>
        <source>Close</source>
        <translation>Fermer</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="68"/>
        <source>Model Selection</source>
        <translation>Sélection du modèle</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="69"/>
        <source>Select from previously used models or enter a new model name.

If entering a new model name:
• For providers with automatic listing - ensure the model is installed
• For providers without listing support - check provider&apos;s documentation
• Make sure the model name matches exactly</source>
        <translation>Sélectionnez parmi les modèles déjà utilisés ou saisissez un nouveau nom de modèle.

Si vous saisissez un nouveau nom de modèle :
• Pour les fournisseurs avec listage automatique - assurez-vous que le modèle est installé
• Pour les fournisseurs sans prise en charge du listage - consultez la documentation du fournisseur
• Assurez-vous que le nom du modèle correspond exactement</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="76"/>
        <source>Model name:</source>
        <translation>Nom du modèle :</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="77"/>
        <source>OK</source>
        <translation>OK</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="78"/>
        <source>Cancel</source>
        <translation>Annuler</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="80"/>
        <source>Enter Model Manually</source>
        <translation>Saisir le modèle manuellement</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="82"/>
        <source>URL Selection</source>
        <translation>Sélection de l&apos;URL</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="83"/>
        <source>Select from the list of default and previously used URLs, or enter a custom one.
Please ensure the selected URL is accessible and the service is running.</source>
        <translation>Sélectionnez dans la liste des URL par défaut et déjà utilisées, ou saisissez-en une personnalisée.
Assurez-vous que l&apos;URL sélectionnée est accessible et que le service est en cours d&apos;exécution.</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="88"/>
        <source>Use default provider URL or from history</source>
        <translation>Utiliser l&apos;URL par défaut du fournisseur ou depuis l&apos;historique</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="89"/>
        <source>Enter custom URL</source>
        <translation>Saisir une URL personnalisée</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="91"/>
        <source>Enter Model Name Manually</source>
        <translation>Saisir le nom du modèle manuellement</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="93"/>
        <source>Auto Completion Settings</source>
        <translation>Paramètres de complétion automatique</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="96"/>
        <source>Add new preset for language</source>
        <translation>Ajouter un nouveau préréglage pour la langue</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="98"/>
        <source>Save Config...</source>
        <translation>Enregistrer la configuration…</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="99"/>
        <source>Load Config...</source>
        <translation>Charger la configuration…</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="100"/>
        <source>Open Folder</source>
        <translation>Ouvrir le dossier</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="101"/>
        <source>Save Configuration</source>
        <translation>Enregistrer la configuration</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="102"/>
        <source>Load Configuration</source>
        <translation>Charger la configuration</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="103"/>
        <source>Configuration name:</source>
        <translation>Nom de la configuration :</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="104"/>
        <source>Select Configuration</source>
        <translation>Sélectionner la configuration</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="105"/>
        <source>No saved configurations found.</source>
        <translation>Aucune configuration enregistrée trouvée.</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="106"/>
        <source>Configuration saved successfully.</source>
        <translation>Configuration enregistrée avec succès.</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="107"/>
        <source>Configuration loaded successfully.</source>
        <translation>Configuration chargée avec succès.</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="108"/>
        <location filename="../../settings/AgentRolesWidget.cpp" line="60"/>
        <source>Delete</source>
        <translation>Supprimer</translation>
    </message>
    <message>
        <location filename="../../settings/SettingsTr.hpp" line="109"/>
        <source>Are you sure you want to delete this configuration?</source>
        <translation>Voulez-vous vraiment supprimer cette configuration ?</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="31"/>
        <source>Enable Auto Complete</source>
        <translation>Activer la complétion automatique</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="36"/>
        <source>Enable Multiline Completion</source>
        <translation>Activer la complétion multiligne</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="38"/>
        <source>Text output proccessing mode:</source>
        <translation>Mode de traitement de la sortie texte :</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="46"/>
        <source>Auto: Automatically detects codeblock and applies processing when found, other text as comments
Force Processing: Always processes text with codeblock formatting and other text as comments
Raw Text: Shows unprocessed text without any formatting</source>
        <translation>Auto : détecte automatiquement les blocs de code et applique le traitement lorsqu&apos;ils sont trouvés, le reste du texte comme commentaires
Forcer le traitement : traite toujours le texte avec le formatage de bloc de code et le reste du texte comme commentaires
Texte brut : affiche le texte non traité sans aucun formatage</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="52"/>
        <source>Completion trigger mode:</source>
        <translation>Mode de déclenchement de la complétion :</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="59"/>
        <source>Hint-based: Shows a hint when typing, press Tab to request completion
Automatic: Automatically requests completion after typing threshold</source>
        <translation>Basé sur des indices : affiche un indice pendant la saisie, appuyez sur Tab pour demander la complétion
Automatique : demande automatiquement la complétion après le seuil de saisie</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="62"/>
        <source>Completion mode:</source>
        <translation>Mode de complétion :</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="69"/>
        <source>Automatic: requests completion while typing (with smart context gates).
Manual: no auto-triggering; invoke via the &apos;Request QodeAssist Suggestion&apos; shortcut (default Ctrl+Alt+Q, reconfigurable in Preferences &gt; Keyboard).</source>
        <translation>Automatique : demande la complétion pendant la saisie (avec des filtres de contexte intelligents).
Manuel : aucun déclenchement automatique ; invoquez via le raccourci &apos;Demander une suggestion QodeAssist&apos; (par défaut Ctrl+Alt+Q, reconfigurable dans Préférences &gt; Clavier).</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="74"/>
        <source>Smart context-aware triggering</source>
        <translation>Déclenchement intelligent sensible au contexte</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="77"/>
        <source>When enabled, auto-completion is suppressed in places where Qt Creator&apos;s built-in completion is usually stronger (middle of an identifier, right after &apos;.&apos;, &apos;-&gt;&apos;, &apos;::&apos;) and is triggered more eagerly after structural characters like &apos;(&apos;, &apos;,&apos;, &apos;{&apos;, &apos;=&apos; and on fresh indented lines.</source>
        <translation>Lorsqu&apos;elle est activée, la complétion automatique est supprimée là où la complétion intégrée de Qt Creator est généralement plus forte (milieu d&apos;un identifiant, juste après &apos;.&apos;, &apos;-&gt;&apos;, &apos;::&apos;) et déclenchée plus volontiers après des caractères structurels comme &apos;(&apos;, &apos;,&apos;, &apos;{&apos;, &apos;=&apos; et sur de nouvelles lignes indentées.</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="83"/>
        <source>Don&apos;t dismiss Qt Creator&apos;s completion popup</source>
        <translation>Ne pas fermer la fenêtre contextuelle de complétion de Qt Creator</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="86"/>
        <source>When enabled, an AI completion arriving while Qt Creator&apos;s own completion popup is already visible will not force it closed. The LLM suggestion still appears inline.</source>
        <translation>Lorsqu&apos;elle est activée, une complétion IA arrivant alors que la fenêtre contextuelle de complétion de Qt Creator est déjà visible ne la fermera pas. La suggestion du LLM apparaît toujours en ligne.</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="91"/>
        <source>Cancel in-flight request on new input</source>
        <translation>Annuler la requête en cours lors d&apos;une nouvelle saisie</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="94"/>
        <source>When enabled, every new keystroke cancels any completion request already in flight and restarts the debounce timer. Useful for slow local models where an outdated answer is rarely worth waiting for.
When disabled (default), the in-flight request is kept; when the answer arrives, the plugin compares it with characters typed in the meantime and either trims the matching prefix or drops the answer.</source>
        <translation>Lorsqu&apos;elle est activée, chaque nouvelle frappe annule toute requête de complétion en cours et redémarre la temporisation anti-rebond. Utile pour les modèles locaux lents où une réponse obsolète vaut rarement la peine d&apos;être attendue.
Lorsqu&apos;elle est désactivée (par défaut), la requête en cours est conservée ; quand la réponse arrive, le plugin la compare aux caractères saisis entre-temps et soit coupe le préfixe correspondant, soit abandonne la réponse.</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="102"/>
        <source>with delay(ms)</source>
        <translation>avec un délai (ms)</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="104"/>
        <source>Delay before sending the completion request.
(Only for Automatic trigger mode)</source>
        <translation>Délai avant l&apos;envoi de la requête de complétion.
(Uniquement pour le mode de déclenchement automatique)</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="110"/>
        <source>AI suggestion triggers after typing</source>
        <translation>La suggestion IA se déclenche après la saisie de</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="112"/>
        <source>The number of characters that need to be typed within the typing interval before an AI suggestion request is sent automatically.
(Only for Automatic trigger mode)</source>
        <translation>Nombre de caractères à saisir dans l&apos;intervalle de saisie avant qu&apos;une requête de suggestion IA soit envoyée automatiquement.
(Uniquement pour le mode de déclenchement automatique)</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="119"/>
        <source>character(s) within(ms)</source>
        <translation>caractère(s) dans un délai (ms)</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="121"/>
        <source>The time window (in milliseconds) during which the character threshold must be met to trigger an AI suggestion request automatically.
(Only for Automatic trigger mode)</source>
        <translation>Fenêtre temporelle (en millisecondes) pendant laquelle le seuil de caractères doit être atteint pour déclencher automatiquement une requête de suggestion IA.
(Uniquement pour le mode de déclenchement automatique)</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="128"/>
        <source>Hint shows after typing</source>
        <translation>L&apos;indice s&apos;affiche après la saisie de</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="130"/>
        <source>The number of characters that need to be typed before the hint widget appears (only for Hint-based trigger mode).</source>
        <translation>Nombre de caractères à saisir avant l&apos;apparition du widget d&apos;indice (uniquement pour le mode de déclenchement basé sur des indices).</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="136"/>
        <source>Hint auto-hide timeout (ms)</source>
        <translation>Délai de masquage automatique de l&apos;indice (ms)</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="138"/>
        <source>Time in milliseconds after which the hint widget will automatically hide (only for Hint-based trigger mode).</source>
        <translation>Délai en millisecondes après lequel le widget d&apos;indice se masquera automatiquement (uniquement pour le mode de déclenchement basé sur des indices).</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="143"/>
        <source>Trigger key:</source>
        <translation>Touche de déclenchement :</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="154"/>
        <source>Key to press for requesting completion when hint is visible.
Space is recommended as least conflicting with context menu.
(Only for Hint-based trigger mode)</source>
        <translation>Touche à appuyer pour demander la complétion lorsque l&apos;indice est visible.
L&apos;espace est recommandé car le moins en conflit avec le menu contextuel.
(Uniquement pour le mode de déclenchement basé sur des indices)</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="160"/>
        <source>Ignore spaces and tabs in character count</source>
        <translation>Ignorer les espaces et les tabulations dans le décompte des caractères</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="163"/>
        <source>When enabled, spaces and tabs are not counted towards the character threshold for triggering completions. This helps trigger completions based on actual code characters only.</source>
        <translation>Lorsqu&apos;elle est activée, les espaces et les tabulations ne sont pas comptés dans le seuil de caractères pour déclencher les complétions. Cela permet de déclencher les complétions sur la base des caractères de code réels uniquement.</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="169"/>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="67"/>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="31"/>
        <source>Temperature:</source>
        <translation>Température :</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="175"/>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="73"/>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="37"/>
        <source>Max Tokens:</source>
        <translation>Jetons max :</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="182"/>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="80"/>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="44"/>
        <source>Top P:</source>
        <translation>Top P :</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="191"/>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="89"/>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="53"/>
        <source>Top K:</source>
        <translation>Top K :</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="199"/>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="97"/>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="61"/>
        <source>Presence Penalty:</source>
        <translation>Pénalité de présence :</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="208"/>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="106"/>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="70"/>
        <source>Frequency Penalty:</source>
        <translation>Pénalité de fréquence :</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="217"/>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="147"/>
        <source>Read Full File</source>
        <translation>Lire le fichier complet</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="220"/>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="150"/>
        <source>Read Strings Before Cursor:</source>
        <translation>Lire les chaînes avant le curseur :</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="228"/>
        <source>Read Strings After Cursor:</source>
        <translation>Lire les chaînes après le curseur :</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="234"/>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="116"/>
        <source>Use System Prompt</source>
        <translation>Utiliser l&apos;invite système</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="245"/>
        <source>Use special system prompt and user message for non FIM models</source>
        <translation>Utiliser une invite système et un message utilisateur spécifiques pour les modèles non FIM</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="249"/>
        <source>System prompt for non FIM models:</source>
        <translation>Invite système pour les modèles non FIM :</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="274"/>
        <source>User message for non FIM models:</source>
        <translation>Message utilisateur pour les modèles non FIM :</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="281"/>
        <source>Additional Programming Languages for handling: Example: rust,//,rust rs,rs</source>
        <translation>Langages de programmation supplémentaires à prendre en charge : exemple : rust,//,rust rs,rs</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="282"/>
        <source>Specify additional programming languages in format: name,comment_style,model_names,extensions
Example: rust,//,rust rs,rs
Fields: language name, comment prefix, names from LLM (space-separated), file extensions (space-separated)</source>
        <translation>Spécifiez des langages de programmation supplémentaires au format : nom,style_commentaire,noms_modèles,extensions
Exemple : rust,//,rust rs,rs
Champs : nom du langage, préfixe de commentaire, noms depuis le LLM (séparés par des espaces), extensions de fichiers (séparées par des espaces)</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="290"/>
        <source>Show progress indicator during code completion</source>
        <translation>Afficher l&apos;indicateur de progression pendant la complétion de code</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="294"/>
        <source>Abort existing assist on new completion request</source>
        <translation>Interrompre l&apos;assistance existante lors d&apos;une nouvelle requête de complétion</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="296"/>
        <source>When enabled, cancels any active Qt Creator code assist popup before requesting LLM completion.
(Only for Automatic trigger mode)</source>
        <translation>Lorsqu&apos;elle est activée, annule toute fenêtre contextuelle d&apos;assistance au code Qt Creator active avant de demander la complétion au LLM.
(Uniquement pour le mode de déclenchement automatique)</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="302"/>
        <source>Include context from open files</source>
        <translation>Inclure le contexte des fichiers ouverts</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="307"/>
        <source>Max Changes Cache Size:</source>
        <translation>Taille max du cache de modifications :</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="316"/>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="129"/>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="80"/>
        <source>Time to suspend Ollama after completion request (in minutes), Only Ollama,  -1 to disable</source>
        <translation>Délai de suspension d&apos;Ollama après une requête de complétion (en minutes), Ollama uniquement, -1 pour désactiver</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="323"/>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="136"/>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="88"/>
        <source>Context Window:</source>
        <translation>Fenêtre de contexte :</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="329"/>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="167"/>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="127"/>
        <source>Reasoning effort:</source>
        <translation>Effort de raisonnement :</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="338"/>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="176"/>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="136"/>
        <source>Constrains effort on reasoning for OpenAI gpt-5 and o-series models:

None: No reasoning (gpt-5.1 only)
Minimal: Minimal reasoning effort (o-series only)
Low: Low reasoning effort
Medium: Balanced reasoning (default for most models)
High: Maximum reasoning effort (gpt-5-pro only supports this)

Note: Reducing effort = faster responses + fewer tokens</source>
        <translation>Contraint l&apos;effort de raisonnement pour les modèles OpenAI gpt-5 et série o :

Aucun : pas de raisonnement (gpt-5.1 uniquement)
Minimal : effort de raisonnement minimal (série o uniquement)
Faible : faible effort de raisonnement
Moyen : raisonnement équilibré (par défaut pour la plupart des modèles)
Élevé : effort de raisonnement maximal (pris en charge uniquement par gpt-5-pro)

Remarque : réduire l&apos;effort = réponses plus rapides + moins de jetons</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="383"/>
        <source>Prompts for FIM models</source>
        <translation>Invites pour les modèles FIM</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="385"/>
        <source>Prompts for Non FIM models</source>
        <translation>Invites pour les modèles non FIM</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="416"/>
        <source>General Settings</source>
        <translation>Paramètres généraux</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="418"/>
        <source>Automatic Trigger Mode</source>
        <translation>Mode de déclenchement automatique</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="420"/>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="316"/>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="278"/>
        <source>General Parameters</source>
        <translation>Paramètres généraux</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="425"/>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="320"/>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="282"/>
        <source>Advanced Parameters</source>
        <translation>Paramètres avancés</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="428"/>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="323"/>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="288"/>
        <source>Context Settings</source>
        <translation>Paramètres du contexte</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="430"/>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="312"/>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="286"/>
        <source>OpenAI Responses API</source>
        <translation>API OpenAI Responses</translation>
    </message>
    <message>
        <location filename="../../settings/CodeCompletionSettings.cpp" line="432"/>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="328"/>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="294"/>
        <location filename="../../settings/ProviderSettings.cpp" line="152"/>
        <source>Ollama Settings</source>
        <translation>Paramètres Ollama</translation>
    </message>
    <message>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="33"/>
        <source>Sync open files with assistant by default</source>
        <translation>Synchroniser les fichiers ouverts avec l&apos;assistant par défaut</translation>
    </message>
    <message>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="38"/>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="185"/>
        <source>Enable autosave when message received</source>
        <translation>Activer l&apos;enregistrement automatique à la réception d&apos;un message</translation>
    </message>
    <message>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="41"/>
        <source>Enable chat in bottom toolbar</source>
        <translation>Activer la discussion dans la barre d&apos;outils inférieure</translation>
    </message>
    <message>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="45"/>
        <source>Enable chat in navigation panel</source>
        <translation>Activer la discussion dans le panneau de navigation</translation>
    </message>
    <message>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="49"/>
        <source>Enable tools/function calling</source>
        <translation>Activer les outils / l&apos;appel de fonctions</translation>
    </message>
    <message>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="50"/>
        <source>When enabled, AI can use tools to read files, search project, and build code</source>
        <translation>Lorsqu&apos;elle est activée, l&apos;IA peut utiliser des outils pour lire des fichiers, rechercher dans le projet et compiler du code</translation>
    </message>
    <message>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="54"/>
        <source>Auto-compress chat when session tokens exceed:</source>
        <translation>Compresser automatiquement la discussion lorsque les jetons de session dépassent :</translation>
    </message>
    <message>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="55"/>
        <source>After each assistant response, if the running session token total exceeds the threshold, the chat is summarized and a new compressed chat is started automatically. The original chat is preserved on disk.</source>
        <translation>Après chaque réponse de l&apos;assistant, si le total cumulé de jetons de la session dépasse le seuil, la discussion est résumée et une nouvelle discussion compressée est démarrée automatiquement. La discussion originale est conservée sur le disque.</translation>
    </message>
    <message>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="142"/>
        <source>Enable extended thinking mode.</source>
        <translation>Activer le mode de réflexion étendue.</translation>
    </message>
    <message>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="144"/>
        <source>Enable extended thinking mode for complex reasoning tasks.This provides step-by-step reasoning before the final answer.Temperature is 1.0 accordingly API requirement</source>
        <translation>Activer le mode de réflexion étendue pour les tâches de raisonnement complexes. Cela fournit un raisonnement étape par étape avant la réponse finale. La température est de 1.0 conformément à l&apos;exigence de l&apos;API</translation>
    </message>
    <message>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="150"/>
        <source>Thinking budget tokens:</source>
        <translation>Jetons de budget de réflexion :</translation>
    </message>
    <message>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="152"/>
        <source>Maximum number of tokens Claude can use for internal reasoning. Larger budgets improve quality but increase latency. Minimum: 1024, Recommended: 10000-16000.</source>
        <translation>Nombre maximal de jetons que Claude peut utiliser pour le raisonnement interne. Des budgets plus importants améliorent la qualité mais augmentent la latence. Minimum : 1024, recommandé : 10000-16000.</translation>
    </message>
    <message>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="158"/>
        <source>Thinking mode max output tokens:</source>
        <translation>Jetons de sortie max en mode réflexion :</translation>
    </message>
    <message>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="160"/>
        <source>Maximum number of tokens for the final response when thinking mode is enabled. Set to -1 to use the default max tokens setting. Recommended: 4096-16000.</source>
        <translation>Nombre maximal de jetons pour la réponse finale lorsque le mode réflexion est activé. Définissez sur -1 pour utiliser le paramètre par défaut de jetons max. Recommandé : 4096-16000.</translation>
    </message>
    <message>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="188"/>
        <source>Text Font:</source>
        <translation>Police du texte :</translation>
    </message>
    <message>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="197"/>
        <source>Text Font Size:</source>
        <translation>Taille de la police du texte :</translation>
    </message>
    <message>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="201"/>
        <source>Code Font:</source>
        <translation>Police du code :</translation>
    </message>
    <message>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="232"/>
        <source>Code Font Size:</source>
        <translation>Taille de la police du code :</translation>
    </message>
    <message>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="236"/>
        <source>Text Format:</source>
        <translation>Format du texte :</translation>
    </message>
    <message>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="244"/>
        <source>Chat Renderer:</source>
        <translation>Moteur de rendu de la discussion :</translation>
    </message>
    <message>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="297"/>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="329"/>
        <source>Chat Settings</source>
        <translation>Paramètres de la discussion</translation>
    </message>
    <message>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="304"/>
        <location filename="../../settings/ToolsSettings.cpp" line="27"/>
        <location filename="../../settings/ToolsSettings.cpp" line="190"/>
        <location filename="../../settings/ToolsSettings.cpp" line="269"/>
        <source>Tools</source>
        <translation>Outils</translation>
    </message>
    <message>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="308"/>
        <source>Extended Thinking (Claude)</source>
        <translation>Réflexion étendue (Claude)</translation>
    </message>
    <message>
        <location filename="../../settings/ChatAssistantSettings.cpp" line="405"/>
        <source>Agent Roles</source>
        <translation>Rôles d&apos;agents</translation>
    </message>
    <message>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="93"/>
        <source>Enable Tools</source>
        <translation>Activer les outils</translation>
    </message>
    <message>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="95"/>
        <source>Enable AI tools/functions for quick refactoring (allows reading project files, searching code, etc.)</source>
        <translation>Activer les outils / fonctions IA pour le refactoring rapide (permet de lire les fichiers du projet, rechercher du code, etc.)</translation>
    </message>
    <message>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="101"/>
        <source>Enable Thinking Mode</source>
        <translation>Activer le mode réflexion</translation>
    </message>
    <message>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="103"/>
        <source>Enable extended thinking mode for complex refactoring tasks (supported by compatible models like Claude and Google AI)</source>
        <translation>Activer le mode de réflexion étendue pour les tâches de refactoring complexes (pris en charge par les modèles compatibles comme Claude et Google AI)</translation>
    </message>
    <message>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="109"/>
        <source>Thinking Budget Tokens:</source>
        <translation>Jetons de budget de réflexion :</translation>
    </message>
    <message>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="111"/>
        <source>Number of tokens allocated for thinking process. Use -1 for dynamic thinking (model decides), 0 to disable, or positive value for custom budget</source>
        <translation>Nombre de jetons alloués au processus de réflexion. Utilisez -1 pour une réflexion dynamique (le modèle décide), 0 pour désactiver, ou une valeur positive pour un budget personnalisé</translation>
    </message>
    <message>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="118"/>
        <source>Thinking Max Output Tokens:</source>
        <translation>Jetons de sortie max de la réflexion :</translation>
    </message>
    <message>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="120"/>
        <source>Maximum output tokens when thinking mode is enabled (includes thinking + response)</source>
        <translation>Jetons de sortie maximum lorsque le mode réflexion est activé (inclut la réflexion + la réponse)</translation>
    </message>
    <message>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="154"/>
        <source>Lines Before Cursor/Selection:</source>
        <translation>Lignes avant le curseur / la sélection :</translation>
    </message>
    <message>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="156"/>
        <source>Number of lines to include before cursor or selection for context</source>
        <translation>Nombre de lignes à inclure avant le curseur ou la sélection pour le contexte</translation>
    </message>
    <message>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="161"/>
        <source>Lines After Cursor/Selection:</source>
        <translation>Lignes après le curseur / la sélection :</translation>
    </message>
    <message>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="163"/>
        <source>Number of lines to include after cursor or selection for context</source>
        <translation>Nombre de lignes à inclure après le curseur ou la sélection pour le contexte</translation>
    </message>
    <message>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="168"/>
        <source>Display Mode:</source>
        <translation>Mode d&apos;affichage :</translation>
    </message>
    <message>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="170"/>
        <source>Choose how to display refactoring suggestions:
- Inline Widget: Shows refactor in a widget overlay with Apply/Decline buttons (default)
- Qt Creator Suggestion: Uses Qt Creator&apos;s built-in suggestion system</source>
        <translation>Choisissez comment afficher les suggestions de refactoring :
- Widget en ligne : affiche le refactoring dans une superposition de widget avec des boutons Appliquer/Refuser (par défaut)
- Suggestion Qt Creator : utilise le système de suggestion intégré de Qt Creator</translation>
    </message>
    <message>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="175"/>
        <source>Inline Widget</source>
        <translation>Widget en ligne</translation>
    </message>
    <message>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="176"/>
        <source>Qt Creator Suggestion</source>
        <translation>Suggestion Qt Creator</translation>
    </message>
    <message>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="180"/>
        <source>Widget Orientation:</source>
        <translation>Orientation du widget :</translation>
    </message>
    <message>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="182"/>
        <source>Choose default orientation for refactor widget:
- Horizontal: Original and refactored code side by side (default)
- Vertical: Original and refactored code stacked vertically</source>
        <translation>Choisissez l&apos;orientation par défaut du widget de refactoring :
- Horizontale : code original et refactorisé côte à côte (par défaut)
- Verticale : code original et refactorisé empilés verticalement</translation>
    </message>
    <message>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="186"/>
        <source>Horizontal</source>
        <translation>Horizontale</translation>
    </message>
    <message>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="187"/>
        <source>Vertical</source>
        <translation>Verticale</translation>
    </message>
    <message>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="191"/>
        <source>Widget Minimum Width:</source>
        <translation>Largeur minimale du widget :</translation>
    </message>
    <message>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="192"/>
        <source>Minimum width for the refactor widget (in pixels)</source>
        <translation>Largeur minimale du widget de refactoring (en pixels)</translation>
    </message>
    <message>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="197"/>
        <source>Widget Maximum Width:</source>
        <translation>Largeur maximale du widget :</translation>
    </message>
    <message>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="198"/>
        <source>Maximum width for the refactor widget (in pixels)</source>
        <translation>Largeur maximale du widget de refactoring (en pixels)</translation>
    </message>
    <message>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="203"/>
        <source>Widget Minimum Height:</source>
        <translation>Hauteur minimale du widget :</translation>
    </message>
    <message>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="204"/>
        <source>Minimum height for the refactor widget (in pixels)</source>
        <translation>Hauteur minimale du widget de refactoring (en pixels)</translation>
    </message>
    <message>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="209"/>
        <source>Widget Maximum Height:</source>
        <translation>Hauteur maximale du widget :</translation>
    </message>
    <message>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="210"/>
        <source>Maximum height for the refactor widget (in pixels)</source>
        <translation>Hauteur maximale du widget de refactoring (en pixels)</translation>
    </message>
    <message>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="215"/>
        <source>System Prompt:</source>
        <translation>Invite système :</translation>
    </message>
    <message>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="224"/>
        <source>Include context from open files in quick refactor</source>
        <translation>Inclure le contexte des fichiers ouverts dans le refactoring rapide</translation>
    </message>
    <message>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="284"/>
        <source>Tools Settings</source>
        <translation>Paramètres des outils</translation>
    </message>
    <message>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="290"/>
        <source>Display Settings</source>
        <translation>Paramètres d&apos;affichage</translation>
    </message>
    <message>
        <location filename="../../settings/QuickRefactorSettings.cpp" line="292"/>
        <source>Prompt Settings</source>
        <translation>Paramètres d&apos;invite</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="30"/>
        <source>Allow file access outside project</source>
        <translation>Autoriser l&apos;accès aux fichiers hors du projet</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="32"/>
        <source>Allow tools to read, write, and create files outside the project scope (system headers, Qt files, external libraries).</source>
        <translation>Autoriser les outils à lire, écrire et créer des fichiers en dehors du périmètre du projet (en-têtes système, fichiers Qt, bibliothèques externes).</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="37"/>
        <source>Automatically apply file edits</source>
        <translation>Appliquer automatiquement les modifications de fichiers</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="39"/>
        <source>When enabled, file edits suggested by AI are applied immediately. When disabled, each edit is staged for manual approval.</source>
        <translation>Lorsqu&apos;elle est activée, les modifications de fichiers suggérées par l&apos;IA sont appliquées immédiatement. Lorsqu&apos;elle est désactivée, chaque modification est mise en attente pour approbation manuelle.</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="44"/>
        <source>Max tool continuations:</source>
        <translation>Continuations max d&apos;outils :</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="46"/>
        <source>Maximum number of consecutive tool-use rounds in a single request. Each round lets the model call tools and receive results before continuing. Higher values allow more complex multi-step tasks but increase token usage.</source>
        <translation>Nombre maximal de tours consécutifs d&apos;utilisation d&apos;outils dans une seule requête. Chaque tour permet au modèle d&apos;appeler des outils et de recevoir des résultats avant de continuer. Des valeurs plus élevées permettent des tâches multi-étapes plus complexes mais augmentent l&apos;utilisation de jetons.</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="53"/>
        <source>List Project Files</source>
        <translation>Lister les fichiers du projet</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="55"/>
        <source>Lists every source file tracked by the active Qt Creator project(s).</source>
        <translation>Liste tous les fichiers source suivis par le ou les projets Qt Creator actifs.</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="59"/>
        <source>Find File</source>
        <translation>Rechercher un fichier</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="61"/>
        <source>Locates a file in the project by name or partial path. Returns paths only, without file content.</source>
        <translation>Localise un fichier dans le projet par nom ou chemin partiel. Renvoie uniquement les chemins, sans le contenu des fichiers.</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="66"/>
        <source>Read File</source>
        <translation>Lire un fichier</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="68"/>
        <source>Reads the content of a file by absolute path or path relative to the project root.</source>
        <translation>Lit le contenu d&apos;un fichier par chemin absolu ou chemin relatif à la racine du projet.</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="72"/>
        <source>Search in Project</source>
        <translation>Rechercher dans le projet</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="74"/>
        <source>Searches project files for text occurrences or C++ symbol definitions.</source>
        <translation>Recherche dans les fichiers du projet des occurrences de texte ou des définitions de symboles C++.</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="78"/>
        <source>Create New File</source>
        <translation>Créer un nouveau fichier</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="80"/>
        <source>Creates a new empty file at the given absolute path, making missing directories.</source>
        <translation>Crée un nouveau fichier vide au chemin absolu donné, en créant les répertoires manquants.</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="84"/>
        <location filename="../../settings/ToolsSettings.cpp" line="212"/>
        <source>Edit File</source>
        <translation>Modifier un fichier</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="86"/>
        <source>Applies find-and-replace edits to files. See &quot;Automatically apply file edits&quot; to control whether edits apply immediately or wait for review.</source>
        <translation>Applique des modifications de type rechercher-remplacer aux fichiers. Voir &quot;Appliquer automatiquement les modifications de fichiers&quot; pour contrôler si les modifications s&apos;appliquent immédiatement ou attendent une révision.</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="91"/>
        <source>Build Project</source>
        <translation>Compiler le projet</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="93"/>
        <source>Triggers a build of the active Qt Creator project and reports the result.</source>
        <translation>Déclenche la compilation du projet Qt Creator actif et signale le résultat.</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="97"/>
        <source>Get Issues List</source>
        <translation>Obtenir la liste des problèmes</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="99"/>
        <source>Reads compiler/clang diagnostics from Qt Creator&apos;s Issues panel.</source>
        <translation>Lit les diagnostics du compilateur / de clang depuis le panneau Problèmes de Qt Creator.</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="103"/>
        <location filename="../../settings/ToolsSettings.cpp" line="215"/>
        <source>Execute Terminal Command</source>
        <translation>Exécuter une commande de terminal</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="105"/>
        <source>Runs a command from the OS-specific allowed list below, in the project directory.</source>
        <translation>Exécute une commande de la liste autorisée spécifique à l&apos;OS ci-dessous, dans le répertoire du projet.</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="109"/>
        <source>Todo</source>
        <translation>Tâche</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="111"/>
        <source>Lets the AI maintain a session-scoped todo list for multi-step workflows.</source>
        <translation>Permet à l&apos;IA de maintenir une liste de tâches à l&apos;échelle de la session pour les flux de travail multi-étapes.</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="115"/>
        <source>Read Original History (Pre-Compression)</source>
        <translation>Lire l&apos;historique original (avant compression)</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="117"/>
        <source>Lets the AI read the original, full chat history from before the conversation was compressed into a summary. Useful when a detail is missing from the summary currently in context. Has no effect if the chat was never compressed.</source>
        <translation>Permet à l&apos;IA de lire l&apos;historique de discussion original et complet d&apos;avant la compression de la conversation en résumé. Utile lorsqu&apos;un détail est absent du résumé actuellement en contexte. Sans effet si la discussion n&apos;a jamais été compressée.</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="123"/>
        <source>Load Skill</source>
        <translation>Charger une compétence</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="125"/>
        <source>Lets the AI load the full instructions of a skill on demand. The Available Skills catalog in the system prompt lists each skill; this tool pulls a skill&apos;s complete instructions into context when needed.</source>
        <translation>Permet à l&apos;IA de charger à la demande les instructions complètes d&apos;une compétence. Le catalogue des compétences disponibles dans l&apos;invite système liste chaque compétence ; cet outil charge les instructions complètes d&apos;une compétence dans le contexte au besoin.</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="131"/>
        <source>Allowed Commands (Linux)</source>
        <translation>Commandes autorisées (Linux)</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="133"/>
        <source>Comma-separated list of terminal commands that AI is allowed to execute on Linux. Example: git, ls, cat, grep, find, cmake</source>
        <translation>Liste séparée par des virgules des commandes de terminal que l&apos;IA est autorisée à exécuter sous Linux. Exemple : git, ls, cat, grep, find, cmake</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="141"/>
        <source>Allowed Commands (macOS)</source>
        <translation>Commandes autorisées (macOS)</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="143"/>
        <source>Comma-separated list of terminal commands that AI is allowed to execute on macOS. Example: git, ls, cat, grep, find, cmake</source>
        <translation>Liste séparée par des virgules des commandes de terminal que l&apos;IA est autorisée à exécuter sous macOS. Exemple : git, ls, cat, grep, find, cmake</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="151"/>
        <source>Allowed Commands (Windows)</source>
        <translation>Commandes autorisées (Windows)</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="153"/>
        <source>Comma-separated list of terminal commands that AI is allowed to execute on Windows. Example: git, dir, type, findstr, where, cmake</source>
        <translation>Liste séparée par des virgules des commandes de terminal que l&apos;IA est autorisée à exécuter sous Windows. Exemple : git, dir, type, findstr, where, cmake</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="160"/>
        <source>Command Timeout (seconds)</source>
        <translation>Délai d&apos;expiration de commande (secondes)</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="162"/>
        <source>Maximum time in seconds to wait for a terminal command to complete. Increase for long-running commands like builds.</source>
        <translation>Temps maximum en secondes à attendre qu&apos;une commande de terminal se termine. Augmentez pour les commandes longues comme les compilations.</translation>
    </message>
    <message>
        <location filename="../../settings/ToolsSettings.cpp" line="206"/>
        <source>Tool Settings</source>
        <translation>Paramètres des outils</translation>
    </message>
    <message>
        <location filename="../../settings/SkillsSettings.cpp" line="55"/>
        <location filename="../../settings/SkillsSettings.cpp" line="104"/>
        <location filename="../../settings/SkillsSettings.cpp" line="127"/>
        <location filename="../../settings/ProjectSettingsPanel.cpp" line="96"/>
        <source>Skills</source>
        <translation>Compétences</translation>
    </message>
    <message>
        <location filename="../../settings/SkillsSettings.cpp" line="58"/>
        <source>Enable skills</source>
        <translation>Activer les compétences</translation>
    </message>
    <message>
        <location filename="../../settings/SkillsSettings.cpp" line="60"/>
        <source>Discover Agent Skills from the configured skill directories and expose them to the chat assistant. Each skill is a folder containing a SKILL.md file.</source>
        <translation>Découvrir les compétences d&apos;agent depuis les répertoires de compétences configurés et les exposer à l&apos;assistant de discussion. Chaque compétence est un dossier contenant un fichier SKILL.md.</translation>
    </message>
    <message>
        <location filename="../../settings/SkillsSettings.cpp" line="69"/>
        <source>Global skill directories:</source>
        <translation>Répertoires de compétences globaux :</translation>
    </message>
    <message>
        <location filename="../../settings/SkillsSettings.cpp" line="72"/>
        <source>Absolute paths scanned for skills, one per line. Each path is a directory whose subfolders contain SKILL.md files. A leading ~ expands to your home directory. Lets QodeAssist pick up skills shared with other agents (e.g. ~/.claude/skills).</source>
        <translation>Chemins absolus scannés pour les compétences, un par ligne. Chaque chemin est un répertoire dont les sous-dossiers contiennent des fichiers SKILL.md. Un ~ initial est étendu en votre répertoire personnel. Permet à QodeAssist de récupérer les compétences partagées avec d&apos;autres agents (ex. ~/.claude/skills).</translation>
    </message>
    <message>
        <location filename="../../settings/SkillsSettings.cpp" line="97"/>
        <location filename="../../settings/ProjectSettingsPanel.cpp" line="86"/>
        <source>No skills discovered.</source>
        <translation>Aucune compétence découverte.</translation>
    </message>
    <message>
        <location filename="../../settings/SkillsSettings.cpp" line="110"/>
        <source>Skill Directories</source>
        <translation>Répertoires de compétences</translation>
    </message>
    <message>
        <location filename="../../settings/SkillsSettings.cpp" line="113"/>
        <source>Discovered global skills:</source>
        <translation>Compétences globales découvertes :</translation>
    </message>
    <message>
        <location filename="../../settings/McpSettings.cpp" line="38"/>
        <location filename="../../settings/McpSettings.cpp" line="341"/>
        <source>MCP</source>
        <translation>MCP</translation>
    </message>
    <message>
        <location filename="../../settings/McpSettings.cpp" line="41"/>
        <source>Enable MCP server</source>
        <translation>Activer le serveur MCP</translation>
    </message>
    <message>
        <location filename="../../settings/McpSettings.cpp" line="43"/>
        <source>Expose QodeAssist tools to external MCP clients over HTTP. Which tools are visible is controlled on the client side.</source>
        <translation>Exposer les outils QodeAssist aux clients MCP externes via HTTP. Les outils visibles sont contrôlés côté client.</translation>
    </message>
    <message>
        <location filename="../../settings/McpSettings.cpp" line="48"/>
        <source>Server port</source>
        <translation>Port du serveur</translation>
    </message>
    <message>
        <location filename="../../settings/McpSettings.cpp" line="50"/>
        <source>TCP port the MCP server listens on (localhost only). Requires restart of the server after change.</source>
        <translation>Port TCP sur lequel le serveur MCP écoute (localhost uniquement). Nécessite un redémarrage du serveur après modification.</translation>
    </message>
    <message>
        <location filename="../../settings/McpSettings.cpp" line="56"/>
        <source>Connect to external MCP servers</source>
        <translation>Se connecter à des serveurs MCP externes</translation>
    </message>
    <message>
        <location filename="../../settings/McpSettings.cpp" line="58"/>
        <source>Connect to MCP servers listed in mcp-server.json and expose their tools to chat/quick-refactor/code-completion. Toggling this off disconnects all currently running MCP client sessions.</source>
        <translation>Se connecter aux serveurs MCP listés dans mcp-server.json et exposer leurs outils à la discussion / refactoring rapide / complétion de code. Désactiver cette option déconnecte toutes les sessions client MCP en cours.</translation>
    </message>
    <message>
        <location filename="../../settings/McpSettings.cpp" line="64"/>
        <source>Extra PATH for stdio servers</source>
        <translation>PATH supplémentaire pour les serveurs stdio</translation>
    </message>
    <message>
        <location filename="../../settings/McpSettings.cpp" line="67"/>
        <source>Directories to prepend to PATH when launching stdio MCP servers. Useful when Qt Creator is started from the dock and doesn&apos;t see Homebrew, nvm, uv, etc. Separate multiple entries with &apos;%1&apos;. Per-server &apos;env&apos; overrides in mcp-server.json still win.</source>
        <translation>Répertoires à ajouter en tête de PATH lors du lancement de serveurs MCP stdio. Utile lorsque Qt Creator est démarré depuis le dock et ne voit pas Homebrew, nvm, uv, etc. Séparez les entrées multiples par &apos;%1&apos;. Les remplacements &apos;env&apos; par serveur dans mcp-server.json l&apos;emportent toujours.</translation>
    </message>
    <message>
        <location filename="../../settings/McpSettings.cpp" line="80"/>
        <source>How to connect...</source>
        <translation>Comment se connecter…</translation>
    </message>
    <message>
        <location filename="../../settings/McpSettings.cpp" line="93"/>
        <source>Server</source>
        <translation>Serveur</translation>
    </message>
    <message>
        <location filename="../../settings/McpSettings.cpp" line="100"/>
        <source>Clients</source>
        <translation>Clients</translation>
    </message>
    <message>
        <location filename="../../settings/McpSettings.cpp" line="211"/>
        <source>Connect to QodeAssist MCP</source>
        <translation>Se connecter à QodeAssist MCP</translation>
    </message>
    <message>
        <location filename="../../settings/McpSettings.cpp" line="215"/>
        <source>Server URL: &lt;code&gt;%1&lt;/code&gt;. If your MCP client speaks HTTP/SSE natively, use the &lt;b&gt;Direct&lt;/b&gt; tab. If it only speaks stdio (e.g. Claude Desktop), use the &lt;b&gt;Bridge&lt;/b&gt; tab.</source>
        <translation>URL du serveur : &lt;code&gt;%1&lt;/code&gt;. Si votre client MCP gère nativement HTTP/SSE, utilisez l&apos;onglet &lt;b&gt;Direct&lt;/b&gt;. S&apos;il ne gère que stdio (ex. Claude Desktop), utilisez l&apos;onglet &lt;b&gt;Pont&lt;/b&gt;.</translation>
    </message>
    <message>
        <location filename="../../settings/McpSettings.cpp" line="242"/>
        <source>Copy</source>
        <translation>Copier</translation>
    </message>
    <message>
        <location filename="../../settings/McpSettings.cpp" line="265"/>
        <source>&lt;b&gt;Claude Code&lt;/b&gt; (CLI): run once —</source>
        <translation>&lt;b&gt;Claude Code&lt;/b&gt; (CLI) : exécuter une fois —</translation>
    </message>
    <message>
        <location filename="../../settings/McpSettings.cpp" line="271"/>
        <source>&lt;b&gt;VS Code&lt;/b&gt;: save as &lt;code&gt;.vscode/mcp.json&lt;/code&gt; in the workspace:</source>
        <translation>&lt;b&gt;VS Code&lt;/b&gt; : enregistrer en tant que &lt;code&gt;.vscode/mcp.json&lt;/code&gt; dans l&apos;espace de travail :</translation>
    </message>
    <message>
        <location filename="../../settings/McpSettings.cpp" line="279"/>
        <source>Any other client that reads an &lt;code&gt;mcpServers&lt;/code&gt; JSON block:</source>
        <translation>Tout autre client qui lit un bloc JSON &lt;code&gt;mcpServers&lt;/code&gt; :</translation>
    </message>
    <message>
        <location filename="../../settings/McpSettings.cpp" line="287"/>
        <source>Direct (HTTP/SSE)</source>
        <translation>Direct (HTTP/SSE)</translation>
    </message>
    <message>
        <location filename="../../settings/McpSettings.cpp" line="296"/>
        <source>&lt;b&gt;1.&lt;/b&gt; Download &lt;code&gt;mcp-bridge&lt;/code&gt; for your OS from &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt;.</source>
        <translation>&lt;b&gt;1.&lt;/b&gt; Téléchargez &lt;code&gt;mcp-bridge&lt;/code&gt; pour votre OS depuis &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt;.</translation>
    </message>
    <message>
        <location filename="../../settings/McpSettings.cpp" line="306"/>
        <source>&lt;b&gt;2.&lt;/b&gt; Save the following as &lt;code&gt;mcp-bridge.json&lt;/code&gt;:</source>
        <translation>&lt;b&gt;2.&lt;/b&gt; Enregistrez ce qui suit en tant que &lt;code&gt;mcp-bridge.json&lt;/code&gt; :</translation>
    </message>
    <message>
        <location filename="../../settings/McpSettings.cpp" line="312"/>
        <source>&lt;b&gt;3.&lt;/b&gt; Point the stdio-only client at the bridge. Example for &lt;code&gt;claude_desktop_config.json&lt;/code&gt;:</source>
        <translation>&lt;b&gt;3.&lt;/b&gt; Pointez le client stdio uniquement vers le pont. Exemple pour &lt;code&gt;claude_desktop_config.json&lt;/code&gt; :</translation>
    </message>
    <message>
        <location filename="../../settings/McpSettings.cpp" line="321"/>
        <source>Bridge (stdio)</source>
        <translation>Pont (stdio)</translation>
    </message>
    <message>
        <location filename="../../settings/ProjectSettings.cpp" line="28"/>
        <source>Chat History Path:</source>
        <translation>Chemin de l&apos;historique des discussions :</translation>
    </message>
    <message>
        <location filename="../../settings/ProjectSettings.cpp" line="36"/>
        <source>Skill directories:</source>
        <translation>Répertoires de compétences :</translation>
    </message>
    <message>
        <location filename="../../settings/ProjectSettings.cpp" line="39"/>
        <source>Project-relative subdirectories scanned for Agent Skills, one per line. Resolved against the project root. These take priority over the global skill directories when a skill name appears in both.</source>
        <translation>Sous-répertoires relatifs au projet scannés pour les compétences d&apos;agent, un par ligne. Résolus par rapport à la racine du projet. Ceux-ci ont priorité sur les répertoires globaux de compétences lorsqu&apos;un nom de compétence apparaît dans les deux.</translation>
    </message>
    <message>
        <location filename="../../settings/ProjectSettingsPanel.cpp" line="99"/>
        <source>Discovered project skills:</source>
        <translation>Compétences de projet découvertes :</translation>
    </message>
    <message>
        <location filename="../../settings/ProjectSettingsPanel.cpp" line="115"/>
        <source>QodeAssist</source>
        <translation>QodeAssist</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderSettings.cpp" line="27"/>
        <location filename="../../settings/ProviderSettings.cpp" line="224"/>
        <source>Provider Settings</source>
        <translation>Paramètres du fournisseur</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderSettings.cpp" line="31"/>
        <source>OpenRouter API Key:</source>
        <translation>Clé API OpenRouter :</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderSettings.cpp" line="33"/>
        <location filename="../../settings/ProviderSettings.cpp" line="42"/>
        <location filename="../../settings/ProviderSettings.cpp" line="51"/>
        <location filename="../../settings/ProviderSettings.cpp" line="77"/>
        <location filename="../../settings/ProviderSettings.cpp" line="86"/>
        <location filename="../../settings/ProviderSettings.cpp" line="94"/>
        <location filename="../../settings/ProviderSettings.cpp" line="103"/>
        <location filename="../../settings/ProviderSettings.cpp" line="112"/>
        <location filename="../../settings/ProviderSettings.cpp" line="121"/>
        <source>Enter your API key here</source>
        <translation>Saisissez votre clé API ici</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderSettings.cpp" line="40"/>
        <source>OpenAI Compatible API Key:</source>
        <translation>Clé API compatible OpenAI :</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderSettings.cpp" line="49"/>
        <source>Claude API Key:</source>
        <translation>Clé API Claude :</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderSettings.cpp" line="57"/>
        <source>Enable prompt caching</source>
        <translation>Activer la mise en cache des invites</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderSettings.cpp" line="59"/>
        <source>Marks the system prompt, tool definitions, and stable chat history with cache_control so Anthropic caches the request prefix (5-minute TTL). Reduces cost and latency on repeated turns.</source>
        <translation>Marque l&apos;invite système, les définitions d&apos;outils et l&apos;historique de discussion stable avec cache_control afin qu&apos;Anthropic mette en cache le préfixe de la requête (TTL de 5 minutes). Réduit le coût et la latence sur les tours répétés.</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderSettings.cpp" line="66"/>
        <source>Use 1h cache TTL (beta)</source>
        <translation>Utiliser un TTL de cache de 1 h (bêta)</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderSettings.cpp" line="68"/>
        <source>Requests Anthropic&apos;s 1-hour cache TTL instead of the default 5 minutes. Sends the extended-cache-ttl-2025-04-11 beta header.</source>
        <translation>Demande le TTL de cache de 1 heure d&apos;Anthropic au lieu des 5 minutes par défaut. Envoie l&apos;en-tête bêta extended-cache-ttl-2025-04-11.</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderSettings.cpp" line="75"/>
        <source>OpenAI API Key:</source>
        <translation>Clé API OpenAI :</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderSettings.cpp" line="84"/>
        <source>Mistral AI API Key:</source>
        <translation>Clé API Mistral AI :</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderSettings.cpp" line="92"/>
        <source>Codestral API Key:</source>
        <translation>Clé API Codestral :</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderSettings.cpp" line="101"/>
        <source>Google AI API Key:</source>
        <translation>Clé API Google AI :</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderSettings.cpp" line="110"/>
        <source>Ollama(Bearer) API Key:</source>
        <translation>Clé API Ollama (Bearer) :</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderSettings.cpp" line="119"/>
        <source>llama.cpp API Key:</source>
        <translation>Clé API llama.cpp :</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderSettings.cpp" line="138"/>
        <source>OpenRouter Settings</source>
        <translation>Paramètres OpenRouter</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderSettings.cpp" line="140"/>
        <source>OpenAI Settings</source>
        <translation>Paramètres OpenAI</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderSettings.cpp" line="142"/>
        <source>OpenAI Compatible Settings</source>
        <translation>Paramètres compatibles OpenAI</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderSettings.cpp" line="145"/>
        <source>Claude Settings</source>
        <translation>Paramètres Claude</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderSettings.cpp" line="148"/>
        <source>Mistral AI Settings</source>
        <translation>Paramètres Mistral AI</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderSettings.cpp" line="150"/>
        <source>Google AI Settings</source>
        <translation>Paramètres Google AI</translation>
    </message>
    <message>
        <location filename="../../settings/ProviderSettings.cpp" line="154"/>
        <source>llama.cpp Settings</source>
        <translation>Paramètres llama.cpp</translation>
    </message>
    <message>
        <location filename="../../settings/AgentRolesWidget.cpp" line="28"/>
        <source>Agent roles define different system prompts for specific tasks.</source>
        <translation>Les rôles d&apos;agents définissent différentes invites système pour des tâches spécifiques.</translation>
    </message>
    <message>
        <location filename="../../settings/AgentRolesWidget.cpp" line="32"/>
        <source>Open Roles Folder...</source>
        <translation>Ouvrir le dossier des rôles…</translation>
    </message>
    <message>
        <location filename="../../settings/AgentRolesWidget.cpp" line="48"/>
        <source>Add...</source>
        <translation>Ajouter…</translation>
    </message>
    <message>
        <location filename="../../settings/AgentRolesWidget.cpp" line="52"/>
        <source>Edit...</source>
        <translation>Modifier…</translation>
    </message>
    <message>
        <location filename="../../settings/AgentRolesWidget.cpp" line="56"/>
        <source>Duplicate...</source>
        <translation>Dupliquer…</translation>
    </message>
    <message>
        <location filename="../../settings/AgentRolesWidget.cpp" line="83"/>
        <source>(Built-in role)</source>
        <translation>(Rôle intégré)</translation>
    </message>
    <message>
        <location filename="../../settings/AgentRolesWidget.cpp" line="118"/>
        <location filename="../../settings/AgentRolesWidget.cpp" line="192"/>
        <source>Role Already Exists</source>
        <translation>Le rôle existe déjà</translation>
    </message>
    <message>
        <location filename="../../settings/AgentRolesWidget.cpp" line="119"/>
        <location filename="../../settings/AgentRolesWidget.cpp" line="193"/>
        <source>A role with ID &apos;%1&apos; already exists. Please use a different ID.</source>
        <translation>Un rôle portant l&apos;ID &apos;%1&apos; existe déjà. Veuillez utiliser un ID différent.</translation>
    </message>
    <message>
        <location filename="../../settings/AgentRolesWidget.cpp" line="128"/>
        <location filename="../../settings/AgentRolesWidget.cpp" line="160"/>
        <location filename="../../settings/AgentRolesWidget.cpp" line="201"/>
        <location filename="../../settings/AgentRolesWidget.cpp" line="231"/>
        <location filename="../../widgets/QuickRefactorDialog.cpp" line="492"/>
        <location filename="../../widgets/QuickRefactorDialog.cpp" line="521"/>
        <location filename="../../widgets/QuickRefactorDialog.cpp" line="554"/>
        <source>Error</source>
        <translation>Erreur</translation>
    </message>
    <message>
        <location filename="../../settings/AgentRolesWidget.cpp" line="128"/>
        <source>Failed to save role &apos;%1&apos;.</source>
        <translation>Échec de l&apos;enregistrement du rôle &apos;%1&apos;.</translation>
    </message>
    <message>
        <location filename="../../settings/AgentRolesWidget.cpp" line="144"/>
        <source>Cannot Edit Built-in Role</source>
        <translation>Impossible de modifier un rôle intégré</translation>
    </message>
    <message>
        <location filename="../../settings/AgentRolesWidget.cpp" line="145"/>
        <source>Built-in roles cannot be edited. You can duplicate this role and modify the copy.</source>
        <translation>Les rôles intégrés ne peuvent pas être modifiés. Vous pouvez dupliquer ce rôle et modifier la copie.</translation>
    </message>
    <message>
        <location filename="../../settings/AgentRolesWidget.cpp" line="160"/>
        <source>Failed to update role &apos;%1&apos;.</source>
        <translation>Échec de la mise à jour du rôle &apos;%1&apos;.</translation>
    </message>
    <message>
        <location filename="../../settings/AgentRolesWidget.cpp" line="201"/>
        <source>Failed to duplicate role.</source>
        <translation>Échec de la duplication du rôle.</translation>
    </message>
    <message>
        <location filename="../../settings/AgentRolesWidget.cpp" line="216"/>
        <source>Cannot Delete Built-in Role</source>
        <translation>Impossible de supprimer un rôle intégré</translation>
    </message>
    <message>
        <location filename="../../settings/AgentRolesWidget.cpp" line="216"/>
        <source>Built-in roles cannot be deleted.</source>
        <translation>Les rôles intégrés ne peuvent pas être supprimés.</translation>
    </message>
    <message>
        <location filename="../../settings/AgentRolesWidget.cpp" line="222"/>
        <source>Delete Role</source>
        <translation>Supprimer le rôle</translation>
    </message>
    <message>
        <location filename="../../settings/AgentRolesWidget.cpp" line="223"/>
        <source>Are you sure you want to delete the role &apos;%1&apos;?</source>
        <translation>Voulez-vous vraiment supprimer le rôle &apos;%1&apos; ?</translation>
    </message>
    <message>
        <location filename="../../settings/AgentRolesWidget.cpp" line="231"/>
        <source>Failed to delete role &apos;%1&apos;.</source>
        <translation>Échec de la suppression du rôle &apos;%1&apos;.</translation>
    </message>
    <message>
        <location filename="../../qodeassist.cpp" line="160"/>
        <source>Generate QodeAssist suggestion at the current cursor position.</source>
        <translation>Générer une suggestion QodeAssist à la position actuelle du curseur.</translation>
    </message>
    <message>
        <location filename="../../qodeassist.cpp" line="161"/>
        <source>Request QodeAssist Suggestion</source>
        <translation>Demander une suggestion QodeAssist</translation>
    </message>
    <message>
        <location filename="../../qodeassist.cpp" line="244"/>
        <source>Refactor code using QodeAssist</source>
        <translation>Refactoriser le code à l&apos;aide de QodeAssist</translation>
    </message>
    <message>
        <location filename="../../qodeassist.cpp" line="245"/>
        <source>Quick Refactor with QodeAssist</source>
        <translation>Refactoring rapide avec QodeAssist</translation>
    </message>
    <message>
        <location filename="../../qodeassist.cpp" line="270"/>
        <source>Open QodeAssist Chat as an editor tab</source>
        <translation>Ouvrir la discussion QodeAssist en tant qu&apos;onglet d&apos;éditeur</translation>
    </message>
    <message>
        <location filename="../../qodeassist.cpp" line="271"/>
        <source>Show QodeAssist Chat</source>
        <translation>Afficher la discussion QodeAssist</translation>
    </message>
    <message>
        <location filename="../../qodeassist.cpp" line="287"/>
        <location filename="../../qodeassist.cpp" line="288"/>
        <source>Close QodeAssist Chat</source>
        <translation>Fermer la discussion QodeAssist</translation>
    </message>
    <message>
        <location filename="../../qodeassist.cpp" line="297"/>
        <source>Open QodeAssist Chat in Separate Window</source>
        <translation>Ouvrir la discussion QodeAssist dans une fenêtre séparée</translation>
    </message>
    <message>
        <location filename="../../qodeassist.cpp" line="298"/>
        <source>Open the QodeAssist chat in a separate window</source>
        <translation>Ouvrir la discussion QodeAssist dans une fenêtre séparée</translation>
    </message>
    <message>
        <location filename="../../qodeassist.cpp" line="303"/>
        <source>New QodeAssist Chat</source>
        <translation>Nouvelle discussion QodeAssist</translation>
    </message>
    <message>
        <location filename="../../qodeassist.cpp" line="304"/>
        <source>Open a fresh chat in a new editor tab</source>
        <translation>Ouvrir une nouvelle discussion dans un nouvel onglet d&apos;éditeur</translation>
    </message>
    <message>
        <location filename="../../qodeassist.cpp" line="310"/>
        <source>Send QodeAssist Chat Message</source>
        <translation>Envoyer le message de discussion QodeAssist</translation>
    </message>
    <message>
        <location filename="../../qodeassist.cpp" line="311"/>
        <source>Send the current message to the LLM</source>
        <translation>Envoyer le message actuel au LLM</translation>
    </message>
    <message>
        <location filename="../../qodeassist.cpp" line="320"/>
        <source>Clear QodeAssist Chat Session</source>
        <translation>Effacer la session de discussion QodeAssist</translation>
    </message>
    <message>
        <location filename="../../qodeassist.cpp" line="321"/>
        <source>Clear the current chat session</source>
        <translation>Effacer la session de discussion actuelle</translation>
    </message>
    <message>
        <location filename="../../qodeassist.cpp" line="379"/>
        <location filename="../../qodeassist.cpp" line="388"/>
        <location filename="../../chat/ChatOutputPane.cpp" line="19"/>
        <location filename="../../chat/ChatDocument.cpp" line="19"/>
        <location filename="../../chat/ChatEditor.cpp" line="42"/>
        <location filename="../../chat/ChatEditorFactory.cpp" line="18"/>
        <source>QodeAssist Chat</source>
        <translation>Discussion QodeAssist</translation>
    </message>
    <message>
        <location filename="../../qodeassist.cpp" line="460"/>
        <source>Chat in Bottom Panel</source>
        <translation>Discussion dans le panneau inférieur</translation>
    </message>
    <message>
        <location filename="../../qodeassist.cpp" line="467"/>
        <source>Chat in Sidebar</source>
        <translation>Discussion dans la barre latérale</translation>
    </message>
    <message>
        <location filename="../../qodeassist.cpp" line="477"/>
        <source>Open Chat in Editor</source>
        <translation>Ouvrir la discussion dans l&apos;éditeur</translation>
    </message>
    <message>
        <location filename="../../qodeassist.cpp" line="485"/>
        <source>Open Chat in Separate Window</source>
        <translation>Ouvrir la discussion dans une fenêtre séparée</translation>
    </message>
    <message>
        <location filename="../../ConfigurationManager.cpp" line="133"/>
        <source>Select LLM Provider</source>
        <translation>Sélectionner le fournisseur LLM</translation>
    </message>
    <message>
        <location filename="../../ConfigurationManager.cpp" line="133"/>
        <source>Providers:</source>
        <translation>Fournisseurs :</translation>
    </message>
    <message>
        <location filename="../../ConfigurationManager.cpp" line="175"/>
        <source>Select LLM Model</source>
        <translation>Sélectionner le modèle LLM</translation>
    </message>
    <message>
        <location filename="../../ConfigurationManager.cpp" line="175"/>
        <source>Models:</source>
        <translation>Modèles :</translation>
    </message>
    <message>
        <location filename="../../ConfigurationManager.cpp" line="206"/>
        <source>Select Template</source>
        <translation>Sélectionner le modèle</translation>
    </message>
    <message>
        <location filename="../../ConfigurationManager.cpp" line="206"/>
        <source>Templates:</source>
        <translation>Modèles :</translation>
    </message>
    <message>
        <location filename="../../widgets/QuickRefactorDialog.cpp" line="117"/>
        <source>Switch AI configuration</source>
        <translation>Changer de configuration IA</translation>
    </message>
    <message>
        <location filename="../../widgets/QuickRefactorDialog.cpp" line="130"/>
        <source>Enable/Disable AI Tools</source>
        <translation>Activer / désactiver les outils IA</translation>
    </message>
    <message>
        <location filename="../../widgets/QuickRefactorDialog.cpp" line="147"/>
        <source>Enable/Disable Thinking Mode</source>
        <translation>Activer / désactiver le mode réflexion</translation>
    </message>
    <message>
        <location filename="../../widgets/QuickRefactorDialog.cpp" line="159"/>
        <source>Open Quick Refactor Settings</source>
        <translation>Ouvrir les paramètres de refactoring rapide</translation>
    </message>
    <message>
        <location filename="../../widgets/QuickRefactorDialog.cpp" line="167"/>
        <source>Your Current Instruction:</source>
        <translation>Votre instruction actuelle :</translation>
    </message>
    <message>
        <location filename="../../widgets/QuickRefactorDialog.cpp" line="172"/>
        <source>Type or edit your instruction...</source>
        <translation>Saisissez ou modifiez votre instruction…</translation>
    </message>
    <message>
        <location filename="../../widgets/QuickRefactorDialog.cpp" line="178"/>
        <source>Or Load saved:</source>
        <translation>Ou charger une instruction enregistrée :</translation>
    </message>
    <message>
        <location filename="../../widgets/QuickRefactorDialog.cpp" line="185"/>
        <source>Search saved instructions...</source>
        <translation>Rechercher dans les instructions enregistrées…</translation>
    </message>
    <message>
        <location filename="../../widgets/QuickRefactorDialog.cpp" line="197"/>
        <location filename="../../widgets/AddCustomInstructionDialog.cpp" line="21"/>
        <source>Add Custom Instruction</source>
        <translation>Ajouter une instruction personnalisée</translation>
    </message>
    <message>
        <location filename="../../widgets/QuickRefactorDialog.cpp" line="203"/>
        <location filename="../../widgets/AddCustomInstructionDialog.cpp" line="30"/>
        <source>Edit Custom Instruction</source>
        <translation>Modifier une instruction personnalisée</translation>
    </message>
    <message>
        <location filename="../../widgets/QuickRefactorDialog.cpp" line="209"/>
        <source>Delete Custom Instruction</source>
        <translation>Supprimer une instruction personnalisée</translation>
    </message>
    <message>
        <location filename="../../widgets/QuickRefactorDialog.cpp" line="215"/>
        <source>Open Instructions Folder</source>
        <translation>Ouvrir le dossier des instructions</translation>
    </message>
    <message>
        <location filename="../../widgets/QuickRefactorDialog.cpp" line="285"/>
        <source>Repeat Last Instructions</source>
        <translation>Répéter les dernières instructions</translation>
    </message>
    <message>
        <location filename="../../widgets/QuickRefactorDialog.cpp" line="291"/>
        <source>Improve Current Code</source>
        <translation>Améliorer le code actuel</translation>
    </message>
    <message>
        <location filename="../../widgets/QuickRefactorDialog.cpp" line="297"/>
        <source>Suggest Alternative Solution</source>
        <translation>Suggérer une solution alternative</translation>
    </message>
    <message>
        <location filename="../../widgets/QuickRefactorDialog.cpp" line="366"/>
        <source>Improve the selected code by enhancing readability, efficiency, and maintainability. Follow best practices for C++/Qt and fix any potential issues.</source>
        <translation>Améliorer le code sélectionné en renforçant la lisibilité, l&apos;efficacité et la maintenabilité. Suivre les bonnes pratiques C++/Qt et corriger tout problème potentiel.</translation>
    </message>
    <message>
        <location filename="../../widgets/QuickRefactorDialog.cpp" line="377"/>
        <source>Suggest an alternative implementation approach for the selected code. Provide a different solution that might be cleaner, more efficient, or uses different Qt/C++ patterns or idioms.</source>
        <translation>Suggérer une approche d&apos;implémentation alternative pour le code sélectionné. Fournir une solution différente qui pourrait être plus propre, plus efficace, ou utiliser d&apos;autres motifs ou idiomes Qt/C++.</translation>
    </message>
    <message>
        <location filename="../../widgets/QuickRefactorDialog.cpp" line="493"/>
        <source>Failed to save custom instruction. Check logs for details.</source>
        <translation>Échec de l&apos;enregistrement de l&apos;instruction personnalisée. Consultez les journaux pour plus de détails.</translation>
    </message>
    <message>
        <location filename="../../widgets/QuickRefactorDialog.cpp" line="505"/>
        <location filename="../../widgets/QuickRefactorDialog.cpp" line="534"/>
        <source>No Instruction Selected</source>
        <translation>Aucune instruction sélectionnée</translation>
    </message>
    <message>
        <location filename="../../widgets/QuickRefactorDialog.cpp" line="506"/>
        <source>Please select an instruction to edit.</source>
        <translation>Veuillez sélectionner une instruction à modifier.</translation>
    </message>
    <message>
        <location filename="../../widgets/QuickRefactorDialog.cpp" line="522"/>
        <source>Failed to update custom instruction. Check logs for details.</source>
        <translation>Échec de la mise à jour de l&apos;instruction personnalisée. Consultez les journaux pour plus de détails.</translation>
    </message>
    <message>
        <location filename="../../widgets/QuickRefactorDialog.cpp" line="535"/>
        <source>Please select an instruction to delete.</source>
        <translation>Veuillez sélectionner une instruction à supprimer.</translation>
    </message>
    <message>
        <location filename="../../widgets/QuickRefactorDialog.cpp" line="541"/>
        <source>Confirm Deletion</source>
        <translation>Confirmer la suppression</translation>
    </message>
    <message>
        <location filename="../../widgets/QuickRefactorDialog.cpp" line="542"/>
        <source>Are you sure you want to delete the instruction &apos;%1&apos;?</source>
        <translation>Voulez-vous vraiment supprimer l&apos;instruction &apos;%1&apos; ?</translation>
    </message>
    <message>
        <location filename="../../widgets/QuickRefactorDialog.cpp" line="555"/>
        <source>Failed to delete custom instruction. Check logs for details.</source>
        <translation>Échec de la suppression de l&apos;instruction personnalisée. Consultez les journaux pour plus de détails.</translation>
    </message>
    <message>
        <location filename="../../widgets/QuickRefactorDialog.cpp" line="593"/>
        <source>Current</source>
        <translation>Actuel</translation>
    </message>
    <message>
        <location filename="../../widgets/QuickRefactorDialog.cpp" line="603"/>
        <source>Current (%1)</source>
        <translation>Actuel (%1)</translation>
    </message>
    <message>
        <location filename="../../widgets/QuickRefactorDialog.cpp" line="640"/>
        <source>No Instruction</source>
        <translation>Aucune instruction</translation>
    </message>
    <message>
        <location filename="../../widgets/QuickRefactorDialog.cpp" line="641"/>
        <source>Please type an instruction or select a saved one.</source>
        <translation>Veuillez saisir une instruction ou en sélectionner une enregistrée.</translation>
    </message>
    <message>
        <location filename="../../widgets/AddCustomInstructionDialog.cpp" line="46"/>
        <source>Enter instruction name...</source>
        <translation>Saisir le nom de l&apos;instruction…</translation>
    </message>
    <message>
        <location filename="../../widgets/AddCustomInstructionDialog.cpp" line="47"/>
        <source>Name:</source>
        <translation>Nom :</translation>
    </message>
    <message>
        <location filename="../../widgets/AddCustomInstructionDialog.cpp" line="51"/>
        <source>Instruction Body:</source>
        <translation>Corps de l&apos;instruction :</translation>
    </message>
    <message>
        <location filename="../../widgets/AddCustomInstructionDialog.cpp" line="56"/>
        <source>Enter the refactoring instruction that will be sent to the LLM...</source>
        <translation>Saisissez l&apos;instruction de refactoring qui sera envoyée au LLM…</translation>
    </message>
    <message>
        <location filename="../../widgets/AddCustomInstructionDialog.cpp" line="59"/>
        <source>Set as default instruction</source>
        <translation>Définir comme instruction par défaut</translation>
    </message>
    <message>
        <location filename="../../widgets/AddCustomInstructionDialog.cpp" line="61"/>
        <source>This instruction will be automatically selected when opening Quick Refactor dialog</source>
        <translation>Cette instruction sera automatiquement sélectionnée à l&apos;ouverture de la boîte de dialogue Refactoring rapide</translation>
    </message>
    <message>
        <location filename="../../widgets/AddCustomInstructionDialog.cpp" line="69"/>
        <location filename="../../widgets/AddCustomInstructionDialog.cpp" line="73"/>
        <source>Invalid Input</source>
        <translation>Saisie invalide</translation>
    </message>
    <message>
        <location filename="../../widgets/AddCustomInstructionDialog.cpp" line="69"/>
        <source>Instruction name cannot be empty.</source>
        <translation>Le nom de l&apos;instruction ne peut pas être vide.</translation>
    </message>
    <message>
        <location filename="../../widgets/AddCustomInstructionDialog.cpp" line="73"/>
        <source>Instruction body cannot be empty.</source>
        <translation>Le corps de l&apos;instruction ne peut pas être vide.</translation>
    </message>
</context>
<context>
    <name>RootItem</name>
    <message>
        <location filename="../../ChatView/qml/RootItem.qml" line="75"/>
        <source>Compressing chat…</source>
        <translation>Compression de la discussion…</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/RootItem.qml" line="100"/>
        <source>next ~%1  ·  session ↑%2 ↓%3 ↻%4</source>
        <translation>prochaine ~%1  ·  session ↑%2 ↓%3 ↻%4</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/RootItem.qml" line="105"/>
        <source>next ~%1  ·  session ↑%2 ↓%3</source>
        <translation>prochaine ~%1  ·  session ↑%2 ↓%3</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/RootItem.qml" line="110"/>
        <source>next request (estimate)  ·  session prompt ↑ / completion ↓ / cached ↻ (provider cache hits)</source>
        <translation>prochaine requête (estimation)  ·  invite de session ↑ / complétion ↓ / en cache ↻ (occurrences du cache fournisseur)</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/RootItem.qml" line="111"/>
        <source>next request (estimate)  ·  session prompt ↑ / completion ↓</source>
        <translation>prochaine requête (estimation)  ·  invite de session ↑ / complétion ↓</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/RootItem.qml" line="114"/>
        <source>Сhat name: %1</source>
        <translation>Nom de la discussion : %1</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/RootItem.qml" line="128"/>
        <source>Move this chat to an editor tab</source>
        <translation>Déplacer cette discussion vers un onglet d&apos;éditeur</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/RootItem.qml" line="129"/>
        <source>Move this chat to a separate window</source>
        <translation>Déplacer cette discussion vers une fenêtre séparée</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/RootItem.qml" line="385"/>
        <source>Type your message here... (⌘+↩ to send)</source>
        <translation>Saisissez votre message ici… (⌘+↩ pour envoyer)</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/RootItem.qml" line="386"/>
        <source>Type your message here... (Ctrl+Enter to send)</source>
        <translation>Saisissez votre message ici… (Ctrl+Entrée pour envoyer)</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/RootItem.qml" line="483"/>
        <source>Cut</source>
        <translation>Couper</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/RootItem.qml" line="489"/>
        <source>Copy</source>
        <translation>Copier</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/RootItem.qml" line="495"/>
        <source>Paste</source>
        <translation>Coller</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/RootItem.qml" line="503"/>
        <source>Select All</source>
        <translation>Tout sélectionner</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/RootItem.qml" line="511"/>
        <source>Clear</source>
        <translation>Effacer</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/RootItem.qml" line="563"/>
        <source>Send</source>
        <translation>Envoyer</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/RootItem.qml" line="563"/>
        <location filename="../../ChatView/qml/RootItem.qml" line="565"/>
        <source>Stop</source>
        <translation>Arrêter</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/RootItem.qml" line="564"/>
        <source>Send message to LLM %1</source>
        <translation>Envoyer le message au LLM %1</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/RootItem.qml" line="650"/>
        <source>Compress Chat</source>
        <translation>Compresser la discussion</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/RootItem.qml" line="655"/>
        <source>Create a summarized copy of this chat?

The summary will be generated by LLM and saved as a new chat file.</source>
        <translation>Créer une copie résumée de cette discussion ?

Le résumé sera généré par le LLM et enregistré dans un nouveau fichier de discussion.</translation>
    </message>
</context>
<context>
    <name>SplitDropZone</name>
    <message numerus="yes">
        <location filename="../../ChatView/qml/controls/SplitDropZone.qml" line="49"/>
        <source>%n file(s) to drop</source>
        <translation>
            <numerusform>%n fichier(s) à déposer</numerusform>
            <numerusform>%n fichier(s) à déposer</numerusform>
        </translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/SplitDropZone.qml" line="79"/>
        <source>Attach</source>
        <translation>Joindre</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/SplitDropZone.qml" line="87"/>
        <source>Images &amp; Text Files</source>
        <translation>Images &amp; fichiers texte</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/SplitDropZone.qml" line="95"/>
        <source>(for one-time use)</source>
        <translation>(pour usage unique)</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/SplitDropZone.qml" line="131"/>
        <source>LINK</source>
        <translation>LIEN</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/SplitDropZone.qml" line="139"/>
        <source>Text Files</source>
        <translation>Fichiers texte</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/SplitDropZone.qml" line="147"/>
        <source>(added to context)</source>
        <translation>(ajouté au contexte)</translation>
    </message>
</context>
<context>
    <name>TextBlock</name>
    <message>
        <location filename="../../ChatView/qml/chatparts/TextBlock.qml" line="27"/>
        <source>Copy</source>
        <translation>Copier</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/chatparts/TextBlock.qml" line="33"/>
        <source>Select All</source>
        <translation>Tout sélectionner</translation>
    </message>
</context>
<context>
    <name>ThinkingBlock</name>
    <message>
        <location filename="../../ChatView/qml/chatparts/ThinkingBlock.qml" line="45"/>
        <source>Thinking (Redacted)</source>
        <translation>Réflexion (expurgée)</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/chatparts/ThinkingBlock.qml" line="46"/>
        <source>Thinking</source>
        <translation>Réflexion</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/chatparts/ThinkingBlock.qml" line="75"/>
        <source>Thinking content was redacted by safety systems</source>
        <translation>Le contenu de la réflexion a été expurgé par les systèmes de sécurité</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/chatparts/ThinkingBlock.qml" line="133"/>
        <source>Collapse</source>
        <translation>Réduire</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/chatparts/ThinkingBlock.qml" line="133"/>
        <source>Expand</source>
        <translation>Développer</translation>
    </message>
</context>
<context>
    <name>ToolBlock</name>
    <message>
        <location filename="../../ChatView/qml/chatparts/ToolBlock.qml" line="47"/>
        <source>Tool: %1</source>
        <translation>Outil : %1</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/chatparts/ToolBlock.qml" line="99"/>
        <source>Copy</source>
        <translation>Copier</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/chatparts/ToolBlock.qml" line="105"/>
        <source>Select All</source>
        <translation>Tout sélectionner</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/chatparts/ToolBlock.qml" line="113"/>
        <source>Collapse</source>
        <translation>Réduire</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/chatparts/ToolBlock.qml" line="113"/>
        <source>Expand</source>
        <translation>Développer</translation>
    </message>
</context>
<context>
    <name>TopBar</name>
    <message>
        <location filename="../../ChatView/qml/controls/TopBar.qml" line="64"/>
        <source>Unpin chat window</source>
        <translation>Désépingler la fenêtre de discussion</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/TopBar.qml" line="65"/>
        <source>Pin chat window to the top</source>
        <translation>Épingler la fenêtre de discussion au-dessus</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/TopBar.qml" line="97"/>
        <source>Clean chat</source>
        <translation>Nettoyer la discussion</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/TopBar.qml" line="117"/>
        <source>Open new chat in a new tab</source>
        <translation>Ouvrir une nouvelle discussion dans un nouvel onglet</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/TopBar.qml" line="130"/>
        <source>Switch saved AI configuration</source>
        <translation>Changer de configuration IA enregistrée</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/TopBar.qml" line="143"/>
        <source>Switch agent role (different system prompts)</source>
        <translation>Changer de rôle d&apos;agent (invites système différentes)</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/TopBar.qml" line="170"/>
        <source>Tools are disabled in General Settings</source>
        <translation>Les outils sont désactivés dans les paramètres généraux</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/TopBar.qml" line="173"/>
        <source>Tools enabled: AI can use tools to read files, search project, and build code</source>
        <translation>Outils activés : l&apos;IA peut utiliser des outils pour lire des fichiers, rechercher dans le projet et compiler du code</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/TopBar.qml" line="174"/>
        <source>Tools disabled: Simple conversation without tool access</source>
        <translation>Outils désactivés : conversation simple sans accès aux outils</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/TopBar.qml" line="196"/>
        <source>Thinking Mode enabled (Check model list support it)</source>
        <translation>Mode réflexion activé (vérifiez que la liste des modèles le prend en charge)</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/TopBar.qml" line="197"/>
        <source>Thinking Mode disabled</source>
        <translation>Mode réflexion désactivé</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/TopBar.qml" line="198"/>
        <source>Thinking Mode is not available for this provider</source>
        <translation>Le mode réflexion n&apos;est pas disponible pour ce fournisseur</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/TopBar.qml" line="215"/>
        <source>Open Chat Assistant Settings</source>
        <translation>Ouvrir les paramètres de l&apos;assistant de discussion</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/TopBar.qml" line="266"/>
        <source>Save chat to *.json file</source>
        <translation>Enregistrer la discussion dans un fichier *.json</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/TopBar.qml" line="279"/>
        <source>Load chat from *.json file</source>
        <translation>Charger la discussion depuis un fichier *.json</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/TopBar.qml" line="292"/>
        <source>Show in system</source>
        <translation>Afficher dans le système</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/TopBar.qml" line="309"/>
        <source>View chat context (system prompt, role, rules)</source>
        <translation>Afficher le contexte de la discussion (invite système, rôle, règles)</translation>
    </message>
    <message>
        <location filename="../../ChatView/qml/controls/TopBar.qml" line="317"/>
        <source>Current amount tokens in chat and LLM limit threshold</source>
        <translation>Quantité actuelle de jetons dans la discussion et seuil de limite du LLM</translation>
    </message>
</context>
</TS>
