/** * French translation of the better-sidebar copy. * * Mirrors the key set of the zh dictionary in `locales.ts` (enforced by * the `Record` type annotation). The better-locale * override store registers this dict under the `betterSidebar` namespace, * so it takes effect when the user has selected the `fr` override. */ /** fr dictionary for the `betterSidebar` namespace. */ export const fr: Record = { files: 'Fichiers', guideDescFiles: 'Parcourir l\'arborescence du workspace ; un clic ouvre l\'aperçu ou l\'édition', guideDescGit: 'Modifications Git et éditions de cette session dans un seul onglet', guideDescSubagent: 'Topologie des sous-agents et tâches d\'arrière-plan, en direct', guideDescSidechat: 'Un fil de suivi indépendant héritant du contexte de cette session', guideDescTerminal: 'Un vrai shell (xterm + pty) avec reconnexion', guideDescBrowser: 'Navigateur intégré, qui peut reprendre les liens du chat', changesSessionEmpty: 'Aucune opération de fichier dans cette session', changesRead: 'Lecture', changesMdReading: 'Lecture', changesHtmlRender: "Rendu", changesHtmlRaw: "Source", changesPdfRender: "Rendu", changesPdfRaw: "Source", changesMdRaw: 'Brut', changesWrite: 'Écriture', changesEdit: 'Modification', changesRunning: 'en cours', changesError: 'erreur', changesFold: '{count} lignes… cliquer pour déplier', changesFoldLoading: 'Dépliage…', changesFoldUnavailable: 'Contexte indisponible', changesContext: 'contexte', changesPriorUnknown: 'Le contenu antérieur est hors de la fenêtre ; affiché comme entièrement ajouté', explorer: 'Explorateur', terminal: 'Terminal', editor: 'Éditeur', editorExplorer: 'Comportement d’ouverture des fichiers', editorExplorerDesc: 'Contrôle la façon dont les fichiers s’ouvrent', editorExplorerMerged: 'Fusionné', editorExplorerMergedDesc: 'Les fichiers se remplacent dans la même fenêtre ; les nouvelles fenêtres ouvrent l’arborescence par défaut', editorExplorerSplit: 'Séparé', editorExplorerSplitDesc: 'Les fenêtres sans chemin sont l’explorateur autonome (arborescence uniquement) ; chaque fichier ouvre sa propre fenêtre (avec arborescence, réduite par défaut)', editorTreeToggle: 'Panneau d’arborescence', editorPathPlaceholder: 'Saisissez un chemin de fichier (relatif au répertoire de session ou absolu), Entrée pour ouvrir', editorSearchPlaceholder: 'Rechercher par nom de fichier…', editorSearchNoResults: 'Aucun fichier correspondant', editorSearchTruncated: 'Trop de résultats, seule une partie des correspondances est affichée', editorEmptyHint: 'Choisissez un fichier dans l’arborescence à droite ou dans le champ de chemin ci-dessus pour commencer l’aperçu', openFileNewTab: 'Ouvrir dans un nouvel onglet', openFileSide: 'Ouvrir de côté', openWithMenu: 'Ouvrir avec', openWithSshSuffix: ' (SSH)', pinOpenWith: 'Épingler au menu', unpinOpenWith: 'Désépingler', openWithExplorer: 'Explorateur de fichiers', openWithVscode: 'VS Code', openWithCursor: 'Cursor', openWithZed: 'Zed', openWithSettingsSshTitle: 'Hôte distant SSH', openWithSettingsSshDesc: 'Vide = espace de travail local ; avec un user@host ou un alias SSH, les ouvreurs de la famille VSCode passent aux protocoles vscode-remote/ssh-remote, et l’explorateur de fichiers / Zed / les éditeurs personnalisés hors famille VSCode sont masqués du menu', openWithSettingsSshPlaceholder: 'user@host ou alias SSH', openWithSettingsCustomTitle: 'Éditeurs personnalisés', openWithSettingsCustomDesc: 'Nom + modèle d’URL (placeholder {path}) + famille VSCode ou non ; en mode SSH, seuls les éditeurs de la famille VSCode peuvent ouvrir un distant', openWithSettingsAdd: 'Ajouter', openWithSettingsName: 'Nom', openWithSettingsTemplate: 'ex. cursor://file/{path}', openWithSettingsFamily: 'Famille VSCode', openWithSettingsFamilyDesc: 'Cet éditeur utilise le protocole d’URL de VSCode (prend en charge l’ouverture à distance via SSH)', openWithSettingsRemove: 'Supprimer', openWithSettingsInvalidHint: 'Les éditeurs sans nom ou sans modèle (contenant {path} et commençant par scheme://) n’apparaissent pas dans le menu', newTab: 'Nouvel onglet', openExplorer: 'Explorateur', brokenSymlink: 'Lien symbolique cassé', openGit: 'Panneau Git', newTerminal: 'Nouveau terminal', terminalLimit: 'Nombre maximal de terminaux atteint (3)', close: 'Fermer', closeOtherTabs: 'Fermer les autres onglets', closeLeftTabs: 'Fermer les onglets à gauche', closeRightTabs: 'Fermer les onglets à droite', floatDropHint: 'Relâchez pour ouvrir dans une fenêtre flottante', dockToSidebar: 'Revenir à la barre latérale', pinTerminal: 'Épingler le terminal', pinAgentTerminal: 'Épingler le terminal Agent', pinToWorkspace: 'Épingler à l\'espace de travail', pinToGlobal: 'Épingler globalement', unpinTerminal: 'Désépingler', pinnedTerminalTooltip: '{kind} · {scope} · {cwd}', pinnedTerminalKindUi: 'Terminal UI', pinnedTerminalKindAgent: 'Terminal Agent', pinnedTerminalScopeWorkspace: 'Épinglé à l\'espace de travail', pinnedTerminalScopeGlobal: 'Épinglé globalement', pinnedRailLabel: 'Terminaux épinglés', closePinnedTerminal: 'Fermer le terminal', collapseBottomPanel: 'Réduire le panneau inférieur', expandBottomPanel: 'Déployer le panneau inférieur', terminalError: 'Échec de la connexion au terminal', terminalConnectFailed: 'Le terminal a échoué à se connecter à plusieurs reprises', terminalRetry: 'Réessayer', terminalWaitBanner: 'L’agent attend {needle}', terminalSkipWait: 'Ignorer l’attente', terminalDepsFailed: 'Échec du chargement de la dépendance terminal node-pty', terminalDepsHint: 'Exécutez la commande suivante dans un terminal ou cmd de l’environnement DSH pour réparer, puis cliquez sur Réessayer (node-pty reste à la même version que le cœur DSH) :', terminalDepsProfile: ' (profil détecté : {profile})', terminalShellNotFound: 'Shell configuré introuvable : {name} — vérifiez le chemin du shell dans Réglages → Side card → Terminal', preview: 'Aperçu', toc: 'Sommaire', edit: 'Modifier', mermaidError: 'Échec du rendu Mermaid', mermaidZoomIn: 'Agrandir', mermaidZoomOut: 'Réduire', mermaidZoomReset: 'Réinitialiser', mermaidZoomHint: 'Molette pour zoomer · glisser pour déplacer · Échap pour fermer', refresh: 'Actualiser', showInFolder: 'Afficher dans le dossier', refreshUnsavedConfirm: 'Le fichier a changé sur le disque. Actualiser supprimera les modifications non enregistrées. Continuer ?', save: 'Enregistrer', saved: 'Enregistré', unsaved: 'Non enregistré', saveFailed: 'Échec de l’enregistrement', truncation: 'Fichier trop volumineux, seuls les 512 premiers Ko sont affichés', binary: 'Fichier binaire, aperçu impossible', loading: 'Chargement…', error: 'Échec du chargement', retry: 'Réessayer', splitLeft: 'Diviser à gauche', splitRight: 'Diviser à droite', splitUp: 'Diviser en haut', splitDown: 'Diviser en bas', notRepo: 'Ce répertoire n’est pas un dépôt git', noChanges: 'Aucune modification', statusTruncated: 'Trop de modifications ; seules les 2000 premières entrées sont affichées', stage: 'Mettre en scène', unstage: 'Annuler la mise en scène', stageAll: 'Tout mettre en scène', unstageAll: 'Tout retirer de la scène', commitPlaceholder: 'Message de commit (Ctrl+Entrée)', commit: 'Valider', commitError: 'Échec du commit', branch: 'Branche', worktree: 'Arborescence de travail', checkoutError: 'Échec du changement de branche', history: 'Historique', changes: 'Modifications', changesGitLens: 'Git', changesSessionLens: 'Session', changesFilterAll: 'Tout', changesFilterEmpty: 'Aucune opération de ce type', changesOpenDiffTab: 'Ouvrir dans un onglet diff', changesClosePreview: 'Fermer l\'aperçu', changesResizePreview: 'Redimensionner l\'aperçu', changesLoadError: 'Les enregistrements de fichiers de la session sont indisponibles', staged: 'En scène', unstaged: 'Hors scène', cancel: 'Annuler', diffEmpty: 'Aucune différence textuelle', diffLoadError: 'Échec du chargement de la différence', diffBinary: 'Binaire', diffAdded: 'Ajouté', diffDeleted: 'Supprimé', diffRenamed: 'Renommé', diffExpand: 'Déployer les {count} lignes restantes', diffCollapse: 'Réduire', discard: 'Abandonner les modifications', discardTitle: 'Abandonner les modifications', discardDesc: 'Les modifications de l’espace de travail de « {path} » seront abandonnées (irréversible).', viewCommitDiff: 'Voir la différence du commit', copyShortHash: 'Copier le hash court', copyFullHash: 'Copier le hash complet', copySubject: 'Copier le message du commit', revertCommit: 'Annuler ce commit', revertTitle: 'Annuler ce commit', revertDesc: 'Un nouveau commit inversant « {subject} » sera créé sur la branche actuelle.', cherryPickCommit: 'Cherry-pick de ce commit', cherryPickTitle: 'Cherry-pick de ce commit', cherryPickDesc: 'Les modifications de « {subject} » seront appliquées à la branche actuelle.', timeJustNow: 'à l’instant', timeMinutesAgo: 'il y a {n} min', timeHoursAgo: 'il y a {n} h', timeYesterday: 'hier', loadMore: 'Charger plus', historyLoadError: 'Échec du chargement de davantage d’historique', produced: 'Produits de cette exécution', producedOpen: 'Ouvrir dans la barre latérale', disconnected: 'Connexion du terminal perdue, reconnexion…', exited: 'Le processus du terminal s’est terminé', noSession: 'Sélectionnez une session pour utiliser la barre latérale', pluginNotLoaded: 'Plugin non chargé, onglet indisponible pour le moment :', hiddenFiles: 'Fichiers cachés', parent: 'Répertoire parent', copied: 'Copié', copy: 'Copier', newFile: 'Nouveau fichier', openEditor: 'Ouvrir l’éditeur', gitDetail: 'Voir le détail des modifications', referenceFile: '@fichier', addToConversation: 'Ajouter à la discussion', copyRelative: 'Copier le chemin relatif', copyAbsolute: 'Copier le chemin absolu', rename: 'Renommer', renameInvalid: 'Le nom ne peut pas être vide ni contenir de séparateurs de chemin.', delete: 'Supprimer', deleteTitle: 'Supprimer « {name} » ?', deleteDescFile: 'Ce fichier sera définitivement supprimé. Cette action est irréversible.', deleteDescDir: 'Ce répertoire et tout son contenu seront définitivement supprimés. Cette action est irréversible.', dismiss: 'Fermer', download: 'Télécharger', uploadFiles: 'Importer des fichiers', uploadFolder: 'Importer un dossier', uploadHere: 'Importer ici', uploadDropHint: 'Glissez des fichiers/dossiers ici pour les importer', uploadDropChat: 'Glissez dans la zone de discussion : ajouter des images à la discussion', uploadTo: 'Importer dans {dir}', uploadingTo: 'Import en cours vers {dir}…', uploadProgress: 'Import de {done}/{total} : {name}', uploadDone: '{count} fichier(s) importé(s)', uploadFailed: 'Échec de l’import : {error}', uploadFailedUnknown: 'Erreur inconnue', uploadTooLarge: 'Fichier trop volumineux, limite d’import dépassée', uploadCancelled: 'Import annulé', settingsNav: 'Carte latérale', settingsIntro: 'Gérer le contenu affiché par la carte latérale et son comportement par défaut', settingsPopupDesc: 'Configurer les options liées à « {feature} »', settingsDone: 'Terminé', settingsOpenToolsTitle: 'Injecter l\'outil d\'ouverture latérale pour le modèle', settingsOpenToolsDesc: 'Une fois activé, le modèle peut ouvrir des fichiers, dossiers et pages HTTP(S) dans la barre latérale via l\'outil sidebar_open (désactivé par défaut)', settingsTitleBarTitle: 'Mode de compatibilité de position', settingsTitleBarDesc: 'Choisissez le schéma de compatibilité de la barre de titre : détection automatique (par défaut, conservateur) / Web officiel DSH / coquilles de bureau connues / schéma personnalisé (distance de décalage + CSS personnalisé)', settingsTitleBarStripTitle: 'Distance de décalage', settingsTitleBarStripDesc: 'Hauteur de la bande de la barre de titre : nombre de pixels dont les boutons et le contenu de la barre latérale descendent (0–120, défaut 40 ; s’applique en schéma personnalisé)', settingsSchemeAutoTitle: 'Détection automatique', settingsSchemeAutoDesc: 'Schéma conservateur : ne cède de la place selon la hauteur réelle de la barre de titre que lorsque l’API standard Window Controls Overlay est disponible ; aucune modification dans un environnement web', settingsSchemeWebTitle: 'Web officiel DSH', settingsSchemeWebDesc: 'Déclare explicitement l’exécution dans la version web officielle : aucune adaptation (même la géométrie standard WCO n’est pas appliquée)', settingsSchemeCustomTitle: 'Schéma personnalisé', settingsSchemeCustomDesc: 'Entièrement à votre contrôle : injecter du CSS personnalisé (pouvant remplacer les styles intégrés) et définir la distance de décalage de la barre de titre', settingsSchemeDetectedSuffix: 'détecté', settingsCustomCssTitle: 'CSS personnalisé', settingsCustomCssDesc: 'Styles ajoutés à la fin de la page (à priorité égale, le dernier écrit gagne ; utilisez !important pour remplacer les variables en ligne écrites par JS)', settingsCustomCssPlaceholder: '/* ex. : réserver 36px pour une coquille à barre de titre dessinée */\nhtml[data-dsh-title-bar-height="36"] {\n --dsh-title-bar-strip: 36px !important;\n}', settingsSaveFailed: 'Échec de l’enregistrement', settingsConflict: 'Les réglages ont été modifiés par une autre fenêtre, veuillez réessayer', binaryNoPreview: 'Ce type de fichier ne prend pas en charge l’aperçu', downloadToView: 'Télécharger pour consulter', settingsSubagentTitle: 'Activer automatiquement la page Gestion des tâches lorsqu’un sous-agent apparaît', settingsSubagentDesc: 'Lorsqu’un nouveau sous-agent est créé dans la session actuelle, activer la page Gestion des tâches ; sur les écrans larges, déployer également la carte latérale ; sur les écrans étroits, ne pas forcer l’ouverture du tiroir plein écran ; une fois l’option désactivée, l’ouverture est manuelle', settingsJobsTitle: 'Activer automatiquement la page Gestion des tâches à l’arrivée d’une tâche d’arrière-plan', settingsJobsDesc: 'À chaque nouvelle tâche d’arrière-plan dans la session actuelle, activer la page Gestion des tâches (chaque nouvelle tâche déclenche l’activation) ; sur les écrans larges, déployer également la carte latérale ; sur les écrans étroits, ne pas forcer l’ouverture du tiroir plein écran ; une fois l’option désactivée, l’ouverture est manuelle', settingsToolsTitle: 'Injecter des outils de terminal au modèle', settingsToolsDesc: 'Une fois activé, le modèle peut créer et piloter des terminaux de la barre latérale via les 8 outils terminal_* (désactivé par défaut)', settingsFenceTitle: 'Contrôle des chemins de l\'espace de travail', settingsFenceDesc: 'Activé, les fonctions fichiers de la barre latérale n\'atteignent que les chemins dans l\'espace de travail de la session (par défaut) ; désactivé, les fichiers de tout l\'hôte deviennent accessibles — les scripts de la page obtiennent la même portée pendant ce temps', fenceErrorReason: 'Ce chemin est hors de l\'espace de travail de la session et a été bloqué par le contrôle', fenceDisableAction: 'Désactiver le contrôle de l\'espace de travail', settingsBottomTerminalTitle: 'Ouvrir automatiquement un terminal au premier déploiement du panneau inférieur', settingsBottomTerminalDesc: 'Lors du premier déploiement du panneau inférieur dans une session, tenter d’y ouvrir automatiquement un nouvel onglet de terminal (la limite du nombre de terminaux s’applique toujours ; activé par défaut)', settingsFontFamilyTitle: 'Police du terminal', settingsFontFamilyDesc: 'Famille de polices personnalisée du terminal (CSS font-family, ex. "JetBrains Mono", monospace ; vide = suit la police monospace du thème)', settingsFontFamilyPlaceholder: '"JetBrains Mono", monospace', settingsFontSizeTitle: 'Taille de police du terminal', settingsFontSizeDesc: 'Taille de police du terminal (9–32, défaut 13)', settingsFontSizeSuffix: 'px', settingsShellTitle: 'Chemin du shell', settingsShellDesc: 'Shell lancé pour les terminaux de l’interface et du modèle (chemin absolu ou nom d’exécutable). Vide = résolution dans l’ordre existant : config.shell du yaml → $SHELL / shell de connexion / powershell.exe sur Windows. S’applique aux terminaux ouverts ensuite', settingsShellPlaceholder: 'ex. /bin/zsh (vide = résolution automatique)', settingsShellArgsTitle: 'Arguments du shell', settingsShellArgsDesc: 'Arguments explicites de lancement du shell, séparés par des espaces ; non vide = remplacement complet des arguments par défaut (contrat identique aux shellArgs du yaml)', settingsShellArgsPlaceholder: 'ex. -l (vide = arguments par défaut)', settingsTabsTitle: 'Contenu de la barre latérale', settingsViewersTitle: 'Aperçus de fichiers', settingsGeneralTitle: 'Général', settingsPopup: 'Réglages de la fonctionnalité', settingsViewerCatchAll: 'Par défaut : n’importe quel fichier', viewerImage: 'Image', viewerPdf: 'PDF', viewerMarkdown: 'Markdown', viewerCode: 'Code', viewerBinary: 'Téléchargement binaire', viewerHtml: 'HTML', browser: 'Navigateur', browserPlaceholder: 'Saisissez une adresse, ex. example.com', browserGo: 'Aller', browserBack: 'Précédent', browserForward: 'Suivant', browserStart: 'Saisissez une adresse pour commencer à naviguer (mode bac à sable)', browserBlockedScheme: 'Bloqué : seuls les liens http/https sont pris en charge', browserBlockedLoopback: 'Bloqué : l’accès aux adresses locales ou internes n’est pas autorisé dans le navigateur', browserInvalid: 'Adresse invalide', browserNoSandboxWarning: 'Bac à sable désactivé : la page actuelle partage l’origine de l’interface et dispose de l’ensemble des droits de session (restauration possible dans les réglages)', htmlNoSandboxWarning: 'Bac à sable désactivé : ce HTML partage l’origine de l’interface, peut lire les fichiers de session et les interfaces internes (restauration possible dans les réglages)', sandboxStatusOn: 'Mode bac à sable : activé · la page ne peut pas accéder aux données de l’interface ni aux fichiers locaux ; l’état de connexion et les cookies tiers peuvent être indisponibles', sandboxUnlock: 'Déverrouiller temporairement (non sécurisé)', sandboxRestore: 'Restaurer le bac à sable', settingsHtmlDefaultUnsafeTitle: 'Ouvrir l’aperçu HTML en mode non bac à sable par défaut (non sécurisé)', settingsHtmlDefaultUnsafeDesc: 'Une fois activé, chaque ouverture d’un fichier HTML démarre l’aperçu en état non bac à sable (même origine que l’interface, pouvant lire les fichiers de session et les interfaces internes) ; la barre d’état permet de restaurer temporairement le bac à sable', settingsHtmlSandboxTitle: 'Désactiver le bac à sable de l’aperçu HTML (non sécurisé)', settingsHtmlSandboxDesc: 'Une fois désactivé, le HTML de l’aperçu s’exécute avec la même origine que l’interface, peut lire les fichiers de session, le stockage local et appeler les interfaces internes. À activer uniquement pour des fichiers entièrement fiables', settingsBrowserSandboxTitle: 'Désactiver le bac à sable du navigateur (non sécurisé)', settingsBrowserSandboxDesc: 'Une fois désactivé, tout site visité s’exécute avec la même origine que l’interface, peut lire les données de session et usurper votre état de connexion. À activer uniquement pour des sites entièrement fiables', settingsBrowserLinksTitle: 'Ouvrir les liens externes du chat dans la barre latérale', settingsBrowserLinksDesc: 'Une fois activé, cliquer sur un lien externe dans le chat ou l’interface l’ouvre dans la barre latérale au lieu d’une nouvelle fenêtre ; HTTP et HTTPS sont contrôlés séparément par les interrupteurs ci-dessous ; Ctrl/Cmd+clic autorise temporairement', settingsBrowserHttpTitle: 'Ouvrir les pages HTTP de côté', settingsBrowserHttpDesc: 'Une fois activé, cliquer sur un lien externe HTTP du chat ou de l’interface l’ouvre dans la barre latérale (les pages de plugin déclarant urlTarget sont prioritaires) ; Ctrl/Cmd+clic autorise temporairement', settingsBrowserHttpsTitle: 'Ouvrir les pages HTTPS de côté', settingsBrowserHttpsDesc: 'Une fois activé, cliquer sur un lien externe HTTPS du chat ou de l’interface l’ouvre dans la barre latérale. Désactivé par défaut : la plupart des sites HTTPS refusent l’encapsulation, le navigateur système est plus fluide', settingsBrowserLoopbackTitle: 'Adresses locales autorisées', settingsBrowserLoopbackDesc: 'Liste blanche séparée par des virgules des adresses de bouclage (ex. localhost:5174 ou 127.0.0.1:8080) que le navigateur de la barre latérale peut visiter ; vide bloque toutes les adresses locales par défaut. Le bac à sable reste actif — les pages ne peuvent pas lire les données de l interface', settingsBrowserLoopbackPlaceholder: 'ex. localhost:5174, 127.0.0.1:8080', browserOpenExternal: 'Ouvrir dans le navigateur', browserEmbedBlocked: '{host} a refusé la demande d’encapsulation', browserEmbedBlockedDesc: 'Ce site interdit son affichage dans d’autres pages (X-Frame-Options / frame-ancestors) et ne peut donc pas être chargé dans la barre latérale. Vous pouvez l’ouvrir directement dans le navigateur', browserEmbedAnyway: 'Charger quand même', subagent: 'Gestion des tâches', openSubagent: 'Gestion des tâches', subagentMainAgent: 'Agent principal', subagentEmpty: 'Aucun sous-agent pour l’instant', subagentEmptyDesc: 'Les sous-agents dérivés de l’agent principal actuel s’afficheront ici', subagentRunning: 'En cours', subagentInactive: 'Inactif', subagentModeOneShot: 'À usage unique', subagentModeContinuable: 'Reprenable', subagentCount: '{count} sous-agent(s)', subagentCountRunning: '{count} sous-agent(s) · {running} en cours', subagentDiagCorrupt: 'Répertoire corrompu', subagentDiagUnsupported: 'Entrée non prise en charge', subagentDiagUnavailable: 'Indisponible', subagentThinking: 'Réflexion…', sideChat: 'Discussion latérale (bêta)', sideChatNew: 'Nouvelle discussion', sideChatUntitled: 'Nouvelle discussion', sideChatEmpty: 'Aucune discussion latérale pour l’instant', sideChatEmptyDesc: 'Chaque discussion latérale est un onglet indépendant de la barre d’onglets, qui hérite du contexte de la session actuelle et n’entre jamais dans la session principale', sideChatCreating: 'Création de la discussion latérale…', sideChatRetry: 'Réessayer', sideChatThreads: 'Changer de fil / nouveau', sideChatSave: 'Enregistrer comme nouvelle session', sideChatSaveTitle: 'Promouvoir ce fil en session de premier niveau, visible dans la liste des sessions principales', sideChatSaved: 'Enregistré comme nouvelle session', sideChatNoTurn: 'Au moins un tour de discussion doit être terminé avant l’enregistrement', sideChatPendingDrop: 'La dernière relance inachevée ne sera pas incluse dans la nouvelle session', sideChatFirstPlaceholder: 'Saisissez la première question, le contexte de la session actuelle est hérité…', sideChatComposerPlaceholder: 'Relance…', sideChatThinking: 'Approfondissement…', sideChatThink: 'Processus de réflexion', sideChatInjection: 'Contexte injecté', sideChatSend: 'Envoyer', sideChatCancel: 'Arrêter', sideChatCancelTitle: 'Interrompre le tour en cours (la file d’attente est conservée)', sideChatClose: 'Fermer le fil', sideChatCloseTitle: 'Libérer l’agent du fil (l’historique est conservé)', sideChatError: 'Erreur de la discussion latérale : {message}', sideChatTurnUsage: 'Entrée {input} tok · Sortie {output} tok', sideChatBlockCollapse: 'Réduire', sideChatBlockCollapseAria: 'Réduire', sideChatBlockExpand: 'Déplier {hidden} lignes', sideChatBlockExpandAria: 'Déplier {hidden} lignes de plus', sideChatBlockSignal: 'Terminé par le signal : {signal}', sideChatBlockExitCode: 'Code de sortie {code}', sideChatBlockRunning: 'En cours', sideChatBlockFailed: 'Échec', sideChatBlockDone: 'Terminé', sideChatBlockNoOutput: '(aucune sortie)', sideChatBlockFiles: '{count} fichiers', sideChatBlockWindow: '{shown} sur {total} lignes', sideChatConnDisconnected: 'Connexion perdue', sideChatConnReconnect: 'Reconnecter', sideChatConnConnecting: 'Reconnexion…', sideChatConnRecovered: 'Connexion rétablie', sideChatConnReconnectAction: 'Reconnecter maintenant', sideChatConnRestartAction: 'Relancer la connexion', jobs: 'Tâches d’arrière-plan', jobsCount: '{count} tâche(s) d’arrière-plan', jobsCountRunning: '{count} tâche(s) d’arrière-plan · {running} en cours', jobStatusRunning: 'En cours', jobStatusStopping: 'Arrêt en cours', jobStatusCompleted: 'Terminée', jobStatusKilled: 'Interrompue', jobStatusFailed: 'Échouée', jobDurationSeconds: '{seconds} s', jobDurationMinutes: '{minutes} min {seconds} s', jobDurationHours: '{hours} h {minutes} min', jobViewOutput: 'Voir la sortie', jobHideOutput: 'Réduire la sortie', jobNoOutput: 'Aucune sortie pour l’instant', jobNotReadYet: 'En attente que le modèle lise la sortie de cette tâche (la sortie s’affichera ici une fois que le modèle aura exécuté job_output)', jobOutputTruncated: 'Sortie trop longue, affichage tronqué', jobOutputError: 'Échec de la lecture de la sortie', jobKill: 'Interrompre', jobKillConfirm: 'Cliquez à nouveau pour confirmer l’interruption', jobKillError: 'Échec de l’interruption', addPluginsTabCard: 'Ajouter un plugin d’onglet', addPluginsTabCardDesc: 'Enregistrer une nouvelle page de la barre latérale', addPluginsViewerCard: 'Ajouter un plugin d’aperçu', addPluginsViewerCardDesc: 'Enregistrer un aperçu d’un type de fichier', addPluginsTabDesc: 'Les pages de la barre latérale (onglets) peuvent être étendues par des plugins. Les plugins s’enregistrent via le service ctx.betterSidebar ; cliquez sur « Installer » pour copier la commande d’installation, collez-la dans un terminal de l’environnement DSH et exécutez-la.', addPluginsViewerDesc: 'Les aperçus de fichiers peuvent être étendus par des plugins. Les plugins s’enregistrent via le service ctx.betterSidebar ; cliquez sur « Installer » pour copier la commande d’installation, collez-la dans un terminal de l’environnement DSH et exécutez-la.', addPluginsBrowseMore: 'Parcourir plus de plugins sur GitHub (topic : dsh-better-sidebar)', addPluginsSearch: 'Rechercher par nom / description de plugin…', addPluginsNoMatch: 'Aucun plugin correspondant', addPluginsRecommended: 'Plugins recommandés', addPluginsEmpty: 'Aucun plugin référencé pour l’instant, publiez le vôtre sous le topic GitHub', openPlugin: 'Aller', copyInstall: 'Copier la commande d’installation', pluginOfficeDesc: 'Aperçu de la suite Office (.docx / .xlsx / .pptx) pour l’éditeur better-sidebar, avec les lourdes bibliothèques de rendu Office extraites du package principal et installées à la demande', pluginFlowglassDesc: 'Schéma de flux de session en temps réel : trois couloirs pour l’utilisateur, l’assistant et les appels d’outils, avec regroupement en parallèle, branches de sous-agents, exploration par niveau et états en temps réel ; enregistre l’onglet natif « Flowglass » une fois better-sidebar installé, sinon conserve un tiroir indépendant', pluginGitForgeDesc: 'Onglet « Identifiants Git » de better-sidebar : bibliothèque de comptes GitHub/Gitea (et autres forges) + autorisations par projet + blocage strict des stratégies push ; les tokens restent dans les secrets locaux, jamais dans le contexte du modèle ; fournit un outil GitForge en lecture seule et un helper HTTPS de credentials pour l’agent', pluginGithubWorkbenchDesc: 'Onglet « GitHub Workbench » de better-sidebar : arborescence du dépôt distant + Issues / Pull requests / Actions avec prise en charge complète en écriture — création d’issue/PR, commentaire, édition, fermeture/réouverture, merge squash·merge·rebase (confirmation renforcée), relance/annulation de la CI ; le sélecteur de dépôt liste automatiquement les dépôts accessibles et recherche les dépôts publics ; sans better-sidebar, il bascule sur un panneau latéral droit autonome', pluginMdExportDesc: 'Ajoute un bouton « Exporter » à la barre d’outils Markdown de better-sidebar : rend en un clic le .md courant en HTML autonome (tableaux/blocs de code/diagrammes Mermaid en ligne, mise en page fidèle au thème d’aperçu) et l’enregistre à côté du .md, ou exporte en PDF via la boîte de dialogue d’impression', pluginCodeNavDesc: 'Navigation de prévisualisation de code : détecte le langage selon le type de fichier et colore la syntaxe, plan des symboles (filtres classes/méthodes/variables + saut en un clic) et recherche dans le fichier (toutes les correspondances surlignées, précédent/suivant, respect de la casse) — prend en charge l’aperçu des fichiers de code dans l’éditeur better-sidebar', pluginSuhuangScrollDesc: 'Connecte le Runtime Suhuang Scroll local aux réglages DSH et à better-sidebar pour configurer le modèle, tester la connexion et contrôler la correction continue ; nécessite Suhuang Scroll Runtime et dsh-better-sidebar', pluginBetterOverleafDesc: 'Onglet Overleaf pour better-sidebar : connexion directe via navigateur CDP (Chromium tiers pris en charge), liste/sélection de projets, miroirs git locaux sous /overleaf/, synchronisation git bidirectionnelle avec repli API en lecture seule, et aperçu des fichiers via l’atelier de la barre latérale', pluginGitRemotesDesc: 'Onglet Git Remotes de better-sidebar : branches/amonts/ahead-behind, fetch (avec prune possible), pull en ff-only, push seulement après confirmation. Ne remplace pas la mise en scène/les commits du Git intégré et ne fournit pas de force-push ni de push automatique par le modèle', pluginSentinelDesc: 'Système de réveil d’agent piloté par conditions : capteurs fichier/processus/port/HTTP/commande/webhook, les sessions en veille se réveillent automatiquement lorsque les conditions sont remplies ; enregistre l’onglet « Sentinel » affichant le tableau de surveillance global du serveur', pluginServerDeckDesc: 'Tableau de bord de serveurs en cartes : une carte par hôte avec statut en ligne, OS, durée de fonctionnement, utilisation CPU/RAM/disque et latence ; cliquez sur une carte pour ouvrir un terminal xterm.js interactif ; import du ~/.ssh/config en un clic (alias d’hébergement Git ignorés automatiquement). Enregistre un onglet « Serveurs » natif quand better-sidebar est installé, sinon conserve le tiroir latéral autonome', pluginSidebarQaDesc: 'Onglet de questions sur sélection basé sur better-sidebar : sélection dans la discussion → question dans le panneau de droite → session de relance indépendante du même espace de travail (❓ relance · thème) : un modèle rapide sans réflexion compresse le contexte de la discussion principale puis l’injecte avec la citation, sans interrompre la discussion principale ; les relances peuvent être imbriquées, poursuivies et archivées', pluginSidenoteDesc: 'Side chat façon Codex + annotations sur sélection : forker la session en cours dans un panneau latéral persistant (archivée hors de la liste des sessions, plusieurs instances, commande /side, survit au rechargement, le modèle suit la session principale) ; sélectionner un texte assistant → badge numéroté + éditeur de notes → un chip « N annotations » qui accompagne votre prochain message, ou poser sa question directement dans un side chat', pluginSshTunnelDesc: 'Onglet « Tunnel SSH » de better-sidebar : inventaire multi-machines + autorisations par projet + clés conservées localement ; outil de modèle SSHManager (exec/SFTP/stratégies de session) ; terminal interactif central et SFTP à deux volets', pluginTurnReviewDesc: 'Passerelle humaine sur le diff de « ce dernier tour » : Approve / Request changes, sans forker la session ; fichiers regroupés par session principale / sous-agent / non attribués, cochez les fichiers pour renvoyer + commentaire facultatif ; cliquez un fichier pour voir le diff entre l’instantané de début de tour et maintenant. Ce n’est pas /rewind', pluginVideoPreviewDesc: 'Aperçu vidéo en ligne dans l’éditeur better-sidebar (.mp4/.webm/.mov/.mkv/.avi, etc.), avec une route hôte /video prenant en charge HTTP Range (206) ; barre de progression déplaçable, non limité par la mediaLimit de 20 Mo', pluginDocsPanelDesc: '« Documentation globale » dans la barre latérale DSH : notes Markdown globales, lisibles depuis n’importe quel espace de travail — sélection dans la liste, saut via le plan flottant, ouverture externe Chrome / VS Code, copie de code, répertoire configurable (défaut ~/.dsh/docs)', pluginEgoBrowserDesc: 'Le navigateur d’agent pour DeepSeek Harness : 32 outils ego_* pilotent un vrai Chromium ; un onglet natif « ego browser » dans la barre latérale montre en direct chaque page visitée par l’agent — cliquez, glissez et tapez pour reprendre la main. Enregistre l’onglet automatiquement si better-sidebar est présent, sinon une bulle flottante', pluginBilingualReaderDesc: 'Lire des PDF dans la barre latérale DSH : affichage PDF natif, sélectionnez du texte pour le traduire avec le LLM, avec contexte et totalement isolé de la conversation principale', changesRedactOn: "Masquage actif : les secrets s'affichent en [REDACTED] ; cliquez pour désactiver (à vos risques)", changesRedactOff: "Masquage désactivé : le contenu s'affiche tel quel ; cliquez pour activer", changesRedactOnLabel: "Masquage", changesRedactOffLabel: "Sans masquage", changesRedactBanner: "Masqué", pluginSentinelName: 'dsh-sentinel Système de réveil', pluginEgoBrowserName: 'ego-browser Navigateur d’agents', pluginBetterOverleafName: 'dsh-better-overleaf Onglet Overleaf', pluginDocsPanelName: 'dsh-docs-panel Docs globales', pluginFlowglassName: 'dsh-flowglass Flowglass', pluginGitForgeName: 'dsh-git-forge Identifiants Git', pluginGitRemotesName: 'dsh-git-remotes Dépôts distants Git', pluginGithubWorkbenchName: 'dsh-github-workbench Atelier GitHub', pluginSidebarQaName: 'dsh-sidebar-qa Sélectionner & demander', pluginSidenoteName: 'dsh-sidenote Chat latéral', pluginServerDeckName: 'dsh-server-deck Tableau de bord serveurs', pluginSuhuangScrollName: 'dsh-suhuang-scroll Suhuang Scroll', pluginSshTunnelName: 'dsh-ssh-tunnel Tunnel SSH', pluginTurnReviewName: 'dsh-turn-review Revue du tour', pluginBilingualReaderName: 'dsh-bilingual-reader Lecteur bilingue', pluginOfficeName: 'Aperçu Office', pluginMdExportName: 'Exportation Markdown', pluginCodeNavName: 'Navigateur d’aperçu de code', pluginVideoPreviewName: 'Aperçu vidéo', presetDshDesktopDesc: 'Mode avancé Electron (sans bordure) : macOS réserve 20px en haut ; Windows réserve 32px pour la barre de titre sans WCO', }