import { settingsDict } from './fr.settings'; export const dict = { ...settingsDict, 'common.loading': 'Chargement...', 'common.unavailable': 'Indisponible', 'common.language.english': 'Anglais', 'common.language.french': 'Français', 'common.language.simplifiedChinese': 'Chinois (simplifié)', 'common.language.traditionalChinese': 'Chinois (traditionnel)', 'common.language.ukrainian': 'Ukrainien', 'common.language.spanish': 'Espagnol', 'common.language.brazilianPortuguese': 'Portugais brésilien', 'common.language.korean': 'Coréen', 'common.language.polish': 'Polonais', 'common.revealPath.finder': 'Révéler dans le Finder', 'common.revealPath.fileExplorer': 'Ouvrir dans l\'explorateur de fichiers', 'common.revealPath.fileManager': 'Ouvrir dans le gestionnaire de fichiers', 'pwa.installPrompt.description': 'Installez OpenChamber pour un accès plus rapide', 'pwa.installPrompt.action': 'Installer', 'pwa.installPrompt.dismiss': 'Ignorer', 'pwa.installPrompt.started': 'Installation démarrée', 'pwa.installPrompt.installed': 'OpenChamber installé', 'layout.mainTab.chat': 'Chat', 'layout.mainTab.plan': 'Plan', 'layout.mainTab.diff': 'Diff', 'layout.mainTab.files': 'Fichiers', 'layout.mainTab.terminal': 'Terminal', 'layout.mainTab.context': 'Contexte', 'layout.rightSidebar.git': 'Git', 'layout.rightSidebar.files': 'Fichiers', 'layout.rightSidebar.context': 'Contexte', 'layout.services.instance': 'Instance', 'layout.services.usage': 'Usage', 'sessions.sidebar.header.actions.closeSessions': 'Fermer les sessions', 'sessions.sidebar.header.actions.addProject': 'Ajouter un projet', 'sessions.sidebar.header.actions.newSession': 'Nouvelle session', 'sessions.sidebar.header.actions.newMultiRun': 'Nouveau multi-run', 'sessions.sidebar.header.actions.scheduledTasks': 'Tâches planifiées', 'sessions.scheduledTasks.dialog.title': 'Tâches planifiées', 'sessions.scheduledTasks.dialog.description': 'Tâches côté serveur qui créent une nouvelle session et envoient un prompt configuré.', 'sessions.scheduledTasks.dialog.project.label': 'Projet', 'sessions.scheduledTasks.dialog.project.placeholder': 'Sélectionnez un projet', 'sessions.scheduledTasks.dialog.project.empty': 'Aucun projet', 'sessions.scheduledTasks.dialog.actions.newTask': 'Nouvelle tâche', 'sessions.scheduledTasks.dialog.actions.runNow': 'Exécuter maintenant', 'sessions.scheduledTasks.dialog.actions.edit': 'Modifier', 'sessions.scheduledTasks.dialog.actions.editAria': 'Modifier {taskName}', 'sessions.scheduledTasks.dialog.actions.deleteAria': 'Supprimer {taskName}', 'sessions.scheduledTasks.dialog.loading': 'Chargement des tâches...', 'sessions.scheduledTasks.dialog.empty.noTasks': 'Aucune tâche planifiée pour l\'instant.', 'sessions.scheduledTasks.dialog.empty.selectProject': 'Sélectionnez un projet pour gérer les tâches planifiées.', 'sessions.scheduledTasks.dialog.error.chooseProjectFirst': 'Choisissez d\'abord un projet', 'sessions.scheduledTasks.dialog.toast.loadFailed': 'Échec du chargement des tâches planifiées', 'sessions.scheduledTasks.dialog.toast.saved': 'Tâche planifiée enregistrée', 'sessions.scheduledTasks.dialog.toast.updateFailed': 'Échec de la mise à jour de la tâche', 'sessions.scheduledTasks.dialog.toast.deleted': 'Tâche planifiée supprimée', 'sessions.scheduledTasks.dialog.toast.deleteFailed': 'Échec de la suppression de la tâche', 'sessions.scheduledTasks.dialog.toast.started': 'Tâche démarrée', 'sessions.scheduledTasks.dialog.toast.runFailed': 'Échec de l\'exécution de la tâche', 'sessions.scheduledTasks.dialog.confirm.deleteTask': 'Supprimer la tâche planifiée « {taskName} » ?', 'sessions.scheduledTasks.dialog.schedule.daily': 'Quotidien {time}', 'sessions.scheduledTasks.dialog.schedule.dailyWithTimezone': 'Quotidien {time} ({timezone})', 'sessions.scheduledTasks.dialog.schedule.weekly': 'Hebdomadaire {days} {time}', 'sessions.scheduledTasks.dialog.schedule.weeklyWithTimezone': '{days} hebdomadaire {time} ({timezone})', 'sessions.scheduledTasks.dialog.schedule.once': '{date} unique {time}', 'sessions.scheduledTasks.dialog.schedule.onceWithTimezone': '{date} unique {time} ({timezone})', 'sessions.scheduledTasks.dialog.schedule.cron': 'Cron : {cron}', 'sessions.scheduledTasks.dialog.schedule.cronWithTimezone': 'Cron : {cron} ({timezone})', 'sessions.scheduledTasks.dialog.schedule.unknownDate': 'Date inconnue', 'sessions.scheduledTasks.dialog.schedule.weekdayShort.sun': 'Dim', 'sessions.scheduledTasks.dialog.schedule.weekdayShort.mon': 'Lun', 'sessions.scheduledTasks.dialog.schedule.weekdayShort.tue': 'Mar', 'sessions.scheduledTasks.dialog.schedule.weekdayShort.wed': 'Mer', 'sessions.scheduledTasks.dialog.schedule.weekdayShort.thu': 'Jeu', 'sessions.scheduledTasks.dialog.schedule.weekdayShort.fri': 'Ven', 'sessions.scheduledTasks.dialog.schedule.weekdayShort.sat': 'Sam', 'sessions.scheduledTasks.dialog.schedule.weekdayShort.unknown': '?', 'sessions.scheduledTasks.dialog.relativeTime.inLessThanOneMinute': 'dans <1 m', 'sessions.scheduledTasks.dialog.relativeTime.justNow': 'à l’instant', 'sessions.scheduledTasks.dialog.relativeTime.inMinutes': 'en {count}m', 'sessions.scheduledTasks.dialog.relativeTime.minutesAgo': 'il y a {count} min', 'sessions.scheduledTasks.dialog.relativeTime.inDuration': 'dans {duration}', 'sessions.scheduledTasks.dialog.relativeTime.durationAgo': 'il y a {duration}', 'sessions.scheduledTasks.dialog.status.success': 'Succès', 'sessions.scheduledTasks.dialog.status.error': 'Erreur', 'sessions.scheduledTasks.dialog.status.running': 'En cours d\'exécution', 'sessions.scheduledTasks.dialog.status.idle': 'Inactif', 'sessions.scheduledTasks.dialog.nextRun.label': 'Suivant', 'sessions.scheduledTasks.dialog.lastRun.label': 'Dernière exécution', 'sessions.scheduledTasks.dialog.lastRun.runningNow': 'en cours d’exécution', 'sessions.scheduledTasks.dialog.lastRun.never': 'jamais', 'sessions.scheduledTasks.dialog.taskToggle.enableAria': 'Activer {taskName}', 'sessions.scheduledTasks.dialog.taskToggle.pauseAria': 'Pause {taskName}', 'sessions.scheduledTasks.dialog.taskToggle.enabled': 'Activé', 'sessions.scheduledTasks.dialog.taskToggle.paused': 'En pause', 'sessions.scheduledTasks.editor.title.edit': 'Modifier une tâche planifiée', 'sessions.scheduledTasks.editor.title.new': 'Nouvelle tâche planifiée', 'sessions.scheduledTasks.editor.description': 'Configurez une tâche côté serveur qui crée une nouvelle session et envoie un prompt.', 'sessions.scheduledTasks.editor.taskName.label': 'Nom de la tâche', 'sessions.scheduledTasks.editor.taskName.placeholder': 'Synchronisation quotidienne', 'sessions.scheduledTasks.editor.scheduleType.label': 'Type d\'horaire', 'sessions.scheduledTasks.editor.scheduleType.daily': 'Tous les jours', 'sessions.scheduledTasks.editor.scheduleType.weekly': 'Hebdomadaire', 'sessions.scheduledTasks.editor.scheduleType.once': 'Une fois', 'sessions.scheduledTasks.editor.date.label': 'Date', 'sessions.scheduledTasks.editor.date.placeholder': 'Sélectionnez une date', 'sessions.scheduledTasks.editor.date.previousMonth': 'Mois précédent', 'sessions.scheduledTasks.editor.date.nextMonth': 'Mois prochain', 'sessions.scheduledTasks.editor.date.jumpToToday': 'Aller à aujourd\'hui', 'sessions.scheduledTasks.editor.date.today': 'Aujourd\'hui', 'sessions.scheduledTasks.editor.time.label': 'Temps', 'sessions.scheduledTasks.editor.time.hourAria': 'Heures', 'sessions.scheduledTasks.editor.time.minuteAria': 'Minutes', 'sessions.scheduledTasks.editor.time.periodAria': 'Période', 'sessions.scheduledTasks.editor.time.period.am': 'AM', 'sessions.scheduledTasks.editor.time.period.pm': 'PM', 'sessions.scheduledTasks.editor.times.label': 'Fois', 'sessions.scheduledTasks.editor.times.add': 'Ajouter du temps', 'sessions.scheduledTasks.editor.times.removeAria': 'Supprimer l\'heure', 'sessions.scheduledTasks.editor.timezone.label': 'Fuseau horaire', 'sessions.scheduledTasks.editor.weekdays.label': 'Jours de la semaine', 'sessions.scheduledTasks.editor.model.label': 'Modèle', 'sessions.scheduledTasks.editor.thinkingLevel.label': 'Niveau de réflexion', 'sessions.scheduledTasks.editor.thinkingLevel.default': 'Défaut', 'sessions.scheduledTasks.editor.agent.label': 'Agent', 'sessions.scheduledTasks.editor.prompt.label': 'Prompt', 'sessions.scheduledTasks.editor.prompt.placeholder': 'Résumer les tâches ouvertes et proposer les prochaines actions', 'sessions.scheduledTasks.editor.enabled.aria': 'Activer la tâche', 'sessions.scheduledTasks.editor.enabled.label': 'Activé', 'sessions.scheduledTasks.editor.actions.closeAria': 'Fermer', 'sessions.scheduledTasks.editor.actions.cancel': 'Annuler', 'sessions.scheduledTasks.editor.actions.save': 'Sauvegarder', 'sessions.scheduledTasks.editor.actions.saving': 'Enregistrement...', 'sessions.scheduledTasks.editor.toast.saveFailed': 'Échec de l\'enregistrement de la tâche', 'sessions.scheduledTasks.editor.validation.taskNameRequired': 'Le nom de la tâche est obligatoire', 'sessions.scheduledTasks.editor.validation.promptRequired': 'Un prompt est requis', 'sessions.scheduledTasks.editor.validation.modelRequired': 'Le modèle est requis', 'sessions.scheduledTasks.editor.validation.dateFormat': 'La date doit utiliser AAAA-MM-JJ', 'sessions.scheduledTasks.editor.validation.timeFormat': 'L\'heure doit utiliser HH : mm', 'sessions.scheduledTasks.editor.validation.atLeastOneTime': 'Ajoutez au moins une heure valide', 'sessions.scheduledTasks.editor.validation.atLeastOneWeekday': 'Sélectionnez au moins un jour de la semaine', 'sessions.scheduledTasks.editor.validation.timezoneRequired': 'Le fuseau horaire est requis', 'sessions.scheduledTasks.editor.validation.cronRequired': 'Une expression cron est requise', 'sessions.scheduledTasks.editor.validation.cronInvalid': 'Expression cron invalide', 'sessions.scheduledTasks.editor.cronExpression.label': 'Expression cron', 'sessions.scheduledTasks.editor.cronExpression.placeholder': '*/5 * * * *', 'sessions.scheduledTasks.editor.cronExpression.nextRuns': 'Prochaines exécutions', 'sessions.scheduledTasks.editor.cronExpression.examples': 'Exemples', 'sessions.scheduledTasks.editor.cronExpression.examples.every5min': 'Toutes les 5 minutes', 'sessions.scheduledTasks.editor.cronExpression.examples.everyHour': 'Toutes les heures', 'sessions.scheduledTasks.editor.cronExpression.examples.monday9am': 'Chaque lundi à 9 h', 'sessions.scheduledTasks.editor.cronExpression.examples.9am5pm': '9 h et 17 h chaque jour', 'sessions.scheduledTasks.editor.cronExpression.examples.firstOfMonth': 'Premier jour de chaque mois', 'multirun.launcher.title': 'Nouveau multi-run', 'multirun.launcher.actions.closeEsc': 'Fermer (Échap)', 'multirun.launcher.actions.cancel': 'Annuler', 'multirun.launcher.actions.creating': 'Création...', 'multirun.launcher.actions.startWithModelCount': 'Démarrer (modèles {count})', 'multirun.launcher.project.label': 'Projet', 'multirun.launcher.project.placeholder': 'Sélectionnez un projet', 'multirun.launcher.project.empty': 'Ajoutez d\'abord un projet.', 'multirun.launcher.project.gitRequired': 'Pas d\'isolation par worktree : les exécutions utilisent le même répertoire.', 'multirun.launcher.groupName.label': 'Nom du groupe', 'multirun.launcher.groupName.info': 'Utilisé pour le répertoire du worktree et les noms de branches', 'multirun.launcher.groupName.placeholder': 'fonctionnalité-auth, correction de bugs-connexion', 'multirun.launcher.baseBranch.label': 'Branche de base', 'multirun.launcher.baseBranch.info': 'Nouvelle branche créée à partir de cette base par modèle', 'multirun.launcher.isolateRuns.label': 'Isoler les parcours', 'multirun.launcher.agent.label': 'Agent', 'multirun.launcher.agent.info': 'Agent utilisé pour toutes les exécutions. La valeur par défaut est votre agent configuré.', 'multirun.launcher.setupCommands.label': 'Commandes de configuration', 'multirun.launcher.setupCommands.loading': 'Chargement...', 'multirun.launcher.setupCommands.commandPlaceholder': 'bun install', 'multirun.launcher.setupCommands.removeCommandAria': 'Supprimer la commande', 'multirun.launcher.setupCommands.addCommand': 'Ajouter une commande', 'multirun.launcher.prompt.label': 'Prompt', 'multirun.launcher.prompt.placeholder': 'Entrez le prompt à envoyer à tous les modèles...', 'multirun.launcher.attachments.attach': 'Attacher', 'multirun.launcher.attachments.tooltip': 'Mêmes fichiers envoyés à toutes les exécutions', 'multirun.launcher.models.label': 'Modèles', 'multirun.launcher.models.info': 'Sélectionnez les modèles 2-{max}. Le même modèle peut être ajouté plusieurs fois.', 'multirun.launcher.toast.fileTooLarge': 'Le fichier "{fileName}" est trop volumineux (max 10 Mo)', 'multirun.launcher.toast.attachFailed': 'Échec de la connexion de "{fileName}"', 'multirun.launcher.toast.attachedSingle': 'Fichier {count} joint', 'multirun.launcher.toast.attachedPlural': 'Fichiers {count} joints', 'multirun.modelMultiSelect.actions.addModel': 'Ajouter un modèle', 'multirun.modelMultiSelect.search.placeholder': 'Rechercher des modèles', 'multirun.modelMultiSelect.search.noResults': 'Aucun modèle trouvé', 'multirun.modelMultiSelect.sections.favorites': 'Favoris', 'multirun.modelMultiSelect.sections.recent': 'Récents', 'multirun.modelMultiSelect.variant.placeholder': 'Pensée', 'multirun.modelMultiSelect.variant.default': 'Défaut', 'multirun.modelMultiSelect.keyboard.hint': '↑↓ naviguer • Entrer sélectionner • Esc fermer', 'multirun.modelMultiSelect.validation.minOnly': 'Sélectionnez au moins les modèles {min}.', 'multirun.modelMultiSelect.validation.minToMax': 'Choisissez parmi les modèles {min} à {max}.', 'multirun.agentSelector.placeholder': 'Sélectionnez un agent', 'multirun.fusion.title': 'Exécuter la fusion', 'multirun.fusion.description': 'Combinez les résultats multi-exécutions sélectionnés en une seule réponse plus solide.', 'multirun.fusion.provider.placeholder': 'Fournisseur', 'multirun.fusion.model.placeholder': 'Modèle', 'multirun.fusion.sources.label': 'Sources ({count})', 'multirun.fusion.actions.cancel': 'Annuler', 'multirun.fusion.actions.start': 'Démarrer la fusion', 'multirun.fusion.actions.starting': 'Démarrage...', 'multirun.fusion.toast.noOutputs': 'Aucune sortie assistante trouvée pour fusionner.', 'multirun.fusion.toast.failed': 'Échec du démarrage de la fusion.', 'multirun.launcher.attachments.label': 'Fichiers', 'multirun.launcher.actions.startWithRunCount': 'Démarrer ({count} s\'exécute)', 'multirun.launcher.groups.addGroup': 'Ajouter un groupe d\'exécution', 'multirun.launcher.groups.removeGroup': 'Supprimer le groupe', 'multirun.launcher.groups.groupLabel': 'Groupe d\'exécution {index}', 'multirun.launcher.groups.template.label': 'Modèle', 'multirun.launcher.groups.template.placeholder': 'Sélectionnez un modèle...', 'multirun.launcher.groups.template.custom': 'Prompt personnalisé', 'multirun.launcher.groups.prompt.label': 'Prompt', 'multirun.launcher.groups.prompt.placeholder': 'Entrez le prompt pour ce groupe...', 'sessions.sidebar.header.actions.searchSessions': 'Sessions de recherche', 'sessions.sidebar.header.actions.exitSelection': 'Quitter la sélection', 'sessions.sidebar.header.actions.selectSessions': 'Sélectionnez des sessions', 'sessions.sidebar.header.actions.sessionDisplayMode': 'Mode d\'affichage des sessions', 'sessions.sidebar.header.displayMode.label': 'Mode d\'affichage', 'sessions.sidebar.header.displayMode.default': 'Défaut', 'sessions.sidebar.header.displayMode.minimal': 'Minimal', 'sessions.sidebar.header.displayMode.showRecent': 'Afficher la section récente', 'sessions.sidebar.header.displayMode.collapseAll': 'Tout réduire', 'sessions.sidebar.header.displayMode.expandAll': 'Tout développer', 'sessions.sidebar.header.search.matchCountSingle': 'Correspondance {count}', 'sessions.sidebar.header.search.matchCountPlural': 'Correspondances {count}', 'sessions.sidebar.header.search.escapeHint': 'Echap pour effacer', 'sessions.sidebar.header.search.placeholder': 'Sessions de recherche...', 'sessions.sidebar.header.search.clear': 'Effacer la recherche', 'sessions.sidebar.footer.actions.settings': 'Paramètres', 'sessions.sidebar.footer.actions.shortcuts': 'Raccourcis', 'sessions.sidebar.footer.actions.aboutOpenChamber': 'À propos de OpenChamber', 'sessions.sidebar.footer.actions.update': 'Mise à jour', 'sessions.sidebar.empty.noSessions.title': 'Aucune session pour l\'instant', 'sessions.sidebar.empty.noSessions.description': 'Créez votre première session pour commencer à coder.', 'sessions.sidebar.empty.noMatches.title': 'Aucune session correspondante', 'sessions.sidebar.empty.noMatches.description': 'Essayez un autre titre, branche, dossier ou chemin.', 'sessions.sidebar.activity.recentTitle': 'récent', 'sessions.switcher.openAria': 'Sélecteur de session ouvert', 'sessions.switcher.empty': 'Aucune session récente', 'sessions.switcher.draftTitle': 'Nouvelle session', 'sessions.sidebar.updateCheck.errorTitle': 'Échec de la vérification des mises à jour', 'sessions.sidebar.updateCheck.latestVersion': 'Vous êtes sur la dernière version', 'sessions.sidebar.directory.errorAddProjectTitle': 'Échec de l\'ajout du projet', 'sessions.sidebar.directory.errorAddProjectDescription': 'Veuillez sélectionner un répertoire valide.', 'sessions.sidebar.directory.errorSelectDirectoryTitle': 'Échec de la sélection du répertoire', 'sessions.sidebar.folder.newFolderName': 'Nouveau dossier', 'sessions.sidebar.bulkActions.delete': 'Supprimer', 'sessions.sidebar.bulkActions.archive': 'Archive', 'sessions.sidebar.bulkActions.selectedCount': '{count} sélectionné', 'sessions.sidebar.bulkActions.moveToFolder': 'Déplacer vers le dossier', 'sessions.sidebar.bulkActions.deletedSingle': 'Session {count} supprimée', 'sessions.sidebar.bulkActions.deletedPlural': 'Sessions {count} supprimées', 'sessions.sidebar.bulkActions.failedDeleteSingle': 'Échec de la suppression de la session {count}', 'sessions.sidebar.bulkActions.failedDeletePlural': 'Échec de la suppression des sessions {count}', 'sessions.sidebar.bulkActions.archivedSingle': 'Session {count} archivée', 'sessions.sidebar.bulkActions.archivedPlural': 'Sessions {count} archivées', 'sessions.sidebar.bulkActions.failedArchiveSingle': 'Échec de l\'archivage de la session {count}', 'sessions.sidebar.bulkActions.failedArchivePlural': 'Échec de l\'archivage des sessions {count}', 'sessions.sidebar.folders.none': 'Aucun dossier pour l\'instant', 'sessions.sidebar.folders.newFolderEllipsis': 'Nouveau dossier...', 'sessions.sidebar.folders.removeFromFolder': 'Supprimer du dossier', 'sessions.sidebar.folders.moveToFolder': 'Déplacer vers le dossier', 'sessions.sidebar.project.actions.newWorktree': 'Nouveau worktree', 'sessions.sidebar.project.actions.newWorktreeEllipsis': 'Nouveau worktree...', 'sessions.sidebar.project.actions.projectMenu': 'Menu Projet', 'sessions.sidebar.project.actions.newSession': 'Nouvelle session', 'sessions.sidebar.project.actions.closeProject': 'Fermer le projet', 'sessions.sidebar.project.actions.newDraftSession': 'Nouveau brouillon de session', 'sessions.sidebar.session.menu.rename': 'Rebaptiser', 'sessions.sidebar.session.rename.save': 'Enregistrer le nom de la session', 'sessions.sidebar.session.rename.cancel': 'Annuler la session de changement de nom', 'sessions.sidebar.session.menu.unpin': 'Désépingler la session', 'sessions.sidebar.session.menu.pin': 'Session d\'épinglage', 'sessions.sidebar.session.menu.share': 'Partager', 'sessions.sidebar.session.menu.copied': 'Copié', 'sessions.sidebar.session.menu.copyLink': 'Copier le lien', 'sessions.sidebar.session.menu.unshare': 'Annuler le partage', 'sessions.sidebar.session.menu.exportMarkdown': 'Exporter le Markdown', 'sessions.sidebar.session.menu.runFusion': 'Exécuter la fusion', 'sessions.sidebar.session.menu.openInSidePanel': 'Ouvrir dans le panneau latéral', 'sessions.sidebar.session.actions.openInEditor': 'Ouvrir dans l\'éditeur', 'sessions.sidebar.session.menu.betaBadge': 'bêta', 'sessions.sidebar.session.menu.label': 'Menu des sessions', 'sessions.sidebar.session.untitled': 'Session sans titre', 'sessions.sidebar.session.export.nothingToExport': 'Rien à exporter', 'sessions.sidebar.session.export.success': 'Session exportée', 'sessions.sidebar.session.export.failedRevealPath': 'Impossible de révéler le chemin', 'sessions.sidebar.session.export.untitledSubagent': 'Sous-agent sans titre', 'sessions.sidebar.session.export.skippedSubtaskSingle': 'Session exportée, mais tâche de sous-agent {count} ignorée qui n\'a pas pu être chargée.', 'sessions.sidebar.session.export.skippedSubtaskMany': 'Session exportée, mais tâches du sous-agent {count} ignorées qui n\'ont pas pu être chargées.', 'sessions.sidebar.session.export.dialog.title': 'Exporter le Markdown', 'sessions.sidebar.session.export.dialog.descriptionSingle': 'Cette session comporte une tâche de sous-agent {count}. L\'inclure dans l\'exportation ?', 'sessions.sidebar.session.export.dialog.descriptionMany': 'Cette session comporte des tâches de sous-agent {count}. Les inclure dans l\'exportation ?', 'sessions.sidebar.session.export.dialog.includeSubtasks': 'Inclure les tâches des sous-agents', 'sessions.sidebar.session.export.dialog.confirm': 'Exporter', 'sessions.sidebar.session.status.active': 'Session active', 'sessions.sidebar.session.status.unread': 'Mises à jour non lues', 'sessions.sidebar.session.status.pinned': 'Session épinglée', 'sessions.sidebar.session.status.permissionRequired': 'Autorisation requise', 'sessions.sidebar.session.subsessions.collapse': 'Réduire les sous-sessions', 'sessions.sidebar.session.subsessions.expand': 'Développer les sous-sessions', 'sessions.sidebar.dialogs.deleteSession.title': 'Supprimer la session ?', 'sessions.sidebar.dialogs.archiveSession.title': 'Session d\'archivage ?', 'sessions.sidebar.dialogs.deleteSession.withOneSubtask': '"{sessionTitle}" et sa sous-tâche {count} seront définitivement supprimées.', 'sessions.sidebar.dialogs.deleteSession.withManySubtasks': '"{sessionTitle}" et ses sous-tâches {count} seront définitivement supprimées.', 'sessions.sidebar.dialogs.archiveSession.withOneSubtask': '"{sessionTitle}" et sa sous-tâche {count} seront archivées.', 'sessions.sidebar.dialogs.archiveSession.withManySubtasks': '"{sessionTitle}" et ses sous-tâches {count} seront archivées.', 'sessions.sidebar.dialogs.deleteSession.single': '"{sessionTitle}" sera définitivement supprimé.', 'sessions.sidebar.dialogs.archiveSession.single': '"{sessionTitle}" sera archivé.', 'sessions.sidebar.dialogs.neverAsk': 'Ne demandez jamais', 'sessions.sidebar.dialogs.cancel': 'Annuler', 'sessions.sidebar.dialogs.deleteSession.titleAction': 'Supprimer la session', 'sessions.sidebar.dialogs.deleteSessions.titleAction': 'Supprimer des sessions', 'sessions.sidebar.dialogs.deleteSessions.title': 'Supprimer des sessions ?', 'sessions.sidebar.dialogs.archiveSessions.title': 'Archiver des sessions ?', 'sessions.sidebar.dialogs.deleteSessions.singleDescription': 'La session {count} sera définitivement supprimée.', 'sessions.sidebar.dialogs.deleteSessions.pluralDescription': 'Les sessions {count} seront définitivement supprimées.', 'sessions.sidebar.dialogs.archiveSessions.singleDescription': 'La session {count} sera archivée.', 'sessions.sidebar.dialogs.archiveSessions.pluralDescription': 'Les sessions {count} seront archivées.', 'sessions.sidebar.dialogs.deleteFolder.title': 'Supprimer le dossier ?', 'sessions.sidebar.dialogs.deleteFolder.withOneSubfolder': '"{folderName}" sera supprimé avec le sous-dossier {count}. Les sessions à l’intérieur ne seront pas supprimées.', 'sessions.sidebar.dialogs.deleteFolder.withManySubfolders': '"{folderName}" sera supprimé avec les sous-dossiers {count}. Les sessions à l’intérieur ne seront pas supprimées.', 'sessions.sidebar.dialogs.deleteFolder.withContentsNoSubfolders': '"{folderName}" sera supprimé. Les sessions à l’intérieur ne seront pas supprimées.', 'sessions.sidebar.dialogs.deleteFolder.single': '"{folderName}" sera définitivement supprimé.', 'sessions.sidebar.dialogs.deleteResult.singleFailedToDelete': 'La session {count} n\'a pas pu être supprimée.', 'sessions.sidebar.dialogs.deleteResult.manyFailedToDelete': 'Les sessions {count} n\'ont pas pu être supprimées.', 'sessions.sidebar.dialogs.deleteResult.singleFailedToArchive': 'La session {count} n\'a pas pu être archivée.', 'sessions.sidebar.dialogs.deleteResult.manyFailedToArchive': 'Les sessions {count} n\'ont pas pu être archivées.', 'sessions.sidebar.dialogs.deleteResult.removedFromDate': 'Suppression de toutes les sessions de {dateLabel}.', 'sessions.sidebar.dialogs.deleteResult.tryAgain': 'Veuillez réessayer dans un instant.', 'sessions.sidebar.dialogs.worktreeDelete.descriptionNoLinked': 'Cela supprime le worktree sélectionné.', 'sessions.sidebar.dialogs.worktreeDelete.descriptionOneLinked': 'Cela supprime le worktree sélectionné et archive la session liée {count}.', 'sessions.sidebar.dialogs.worktreeDelete.descriptionManyLinked': 'Cela supprime le worktree sélectionné et archive les {count} sessions liées.', 'sessions.sidebar.dialogs.sessionDelete.descriptionOne': 'Cette action supprime définitivement 1 session.', 'sessions.sidebar.dialogs.sessionDelete.descriptionOneWithDate': 'Cette action supprime définitivement 1 session de {dateLabel}.', 'sessions.sidebar.dialogs.sessionDelete.descriptionMany': 'Cette action supprime définitivement les sessions {count}.', 'sessions.sidebar.dialogs.sessionDelete.descriptionManyWithDate': 'Cette action supprime définitivement les sessions {count} de {dateLabel}.', 'sessions.sidebar.dialogs.sessionList.more': '+{count} plus', 'sessions.sidebar.session.share.successTitle': 'Session partagée', 'sessions.sidebar.session.share.successDescription': 'Vous pouvez copier le lien depuis le menu.', 'sessions.sidebar.session.share.error': 'Impossible de partager la session', 'sessions.sidebar.session.share.copyUrlError': 'Échec de la copie de URL', 'sessions.sidebar.session.unshare.success': 'Session non partagée', 'sessions.sidebar.session.unshare.error': 'Impossible d\'annuler le partage de session', 'sessions.sidebar.session.delete.success': 'Session supprimée', 'sessions.sidebar.session.delete.error': 'Échec de la suppression de la session', 'sessions.sidebar.session.archive.success': 'Session archivée', 'sessions.sidebar.session.archive.error': 'Échec de l\'archivage de la session', 'sessions.sidebar.group.pr.checksPassed': 'Contrôles {success}/{total} réussis', 'sessions.sidebar.group.pr.failingCount': 'Échec de {count}', 'sessions.sidebar.group.pr.pendingCount': '{count} en attente', 'sessions.sidebar.group.pr.conflictsOrBlocked': 'Conflits ou blocage', 'sessions.sidebar.group.pr.mergeable': 'Fusionnable', 'sessions.sidebar.group.pr.mergeState': 'État de fusion : {state}', 'sessions.sidebar.group.pr.status.merged': 'Fusionné', 'sessions.sidebar.group.pr.status.readyToMerge': 'Prêt à fusionner', 'sessions.sidebar.group.pr.status.open': 'PR ouverte', 'sessions.sidebar.group.pr.status.mergeConflicts': 'Fusionner les conflits', 'sessions.sidebar.group.pr.status.mergeBlocked': 'Fusion bloquée', 'sessions.sidebar.group.pr.status.draft': 'PR en brouillon', 'sessions.sidebar.group.pr.status.closed': 'Fermé', 'sessions.sidebar.group.empty.noArchivedSessions': 'Aucune session archivée pour l\'instant.', 'sessions.sidebar.group.empty.noSessionsInWorkspace': 'Aucune session dans cet espace de travail pour le moment.', 'sessions.sidebar.group.showMoreSingle': 'Afficher plus de session sur {count}', 'sessions.sidebar.group.showMorePlural': 'Afficher {count} plus de sessions', 'sessions.sidebar.group.showFewer': 'Afficher moins de sessions', 'sessions.sidebar.group.expandAria': 'Développer {label}', 'sessions.sidebar.group.collapseAria': 'Réduire {label}', 'sessions.sidebar.group.actions.deleteArchivedInGroupAria': 'Supprimer les sessions archivées dans {label}', 'sessions.sidebar.group.actions.deleteArchivedSessions': 'Supprimer les sessions archivées', 'sessions.sidebar.group.actions.deleteGroupAria': 'Supprimer {label}', 'sessions.sidebar.group.actions.deleteWorktree': 'Supprimer ce worktree', 'sessions.sidebar.group.actions.newDraftInGroupAria': 'Nouvelle session de brouillon dans {label}', 'sessions.sidebar.grouping.projectRoot': 'racine du projet', 'sessions.sidebar.grouping.projectRootWithBranch': 'racine du projet : {branch}', 'sessions.sidebar.grouping.archived': 'archivé', 'sessions.sidebar.grouping.archivedDescription': 'Sessions archivées et non attribuées', 'sessions.sidebar.folderItem.expandAria': 'Développer le dossier {folderName}', 'sessions.sidebar.folderItem.collapseAria': 'Réduire le dossier {folderName}', 'sessions.sidebar.folderItem.namePlaceholder': 'Nom du dossier', 'sessions.sidebar.folderItem.newSessionAria': 'Nouvelle session dans {folderName}', 'sessions.sidebar.folderItem.newSubfolderAria': 'Nouveau sous-dossier dans {folderName}', 'sessions.sidebar.folderItem.newSubfolder': 'Nouveau sous-dossier', 'sessions.sidebar.folderItem.renameAria': 'Renommer le dossier {folderName}', 'sessions.sidebar.folderItem.deleteArchivedInFolderAria': 'Supprimer les sessions archivées dans le dossier {folderName}', 'sessions.sidebar.folderItem.deleteFolderAria': 'Supprimer le dossier {folderName}', 'sessions.sidebar.folderItem.emptyFolder': 'Dossier vide', 'sessions.sidebar.sessionDialogs.ok': 'D\'ACCORD', 'sessions.sidebar.sessionDialogs.linkedSessionSingle': 'Session liée', 'sessions.sidebar.sessionDialogs.linkedSessionPlural': 'Sessions liées', 'sessions.sidebar.sessionDialogs.delete.note': 'Les répertoires Worktree restent intacts. Les sous-sessions liées aux sessions sélectionnées seront également supprimées.', 'sessions.sidebar.sessionDialogs.directory.errorSelectTitle': 'Échec de la sélection du répertoire', 'sessions.sidebar.sessionDialogs.directory.errorOpenTitle': 'Échec de l\'ouverture du répertoire', 'sessions.sidebar.sessionDialogs.directory.errorOpenDescription': 'Desktop n\'a pas pu accorder l\'accès aux fichiers.', 'sessions.sidebar.sessionDialogs.directory.errorAddProjectTitle': 'Échec de l\'ajout du projet', 'sessions.sidebar.sessionDialogs.directory.errorAddProjectDescription': 'Veuillez sélectionner un chemin de répertoire valide.', 'sessions.sidebar.sessionDialogs.worktree.errorRemoveTitle': 'Échec de la suppression du worktree', 'sessions.sidebar.sessionDialogs.worktree.removedTitle': 'Worktree supprimé', 'sessions.sidebar.sessionDialogs.worktree.removed': 'Worktree supprimé.', 'sessions.sidebar.sessionDialogs.worktree.removedWithRemote': 'Worktree et branche du dépôt distant supprimés.', 'sessions.sidebar.sessionDialogs.worktree.attachedArchived': 'Worktree ci-joint archivé.', 'sessions.sidebar.sessionDialogs.worktree.attachedArchivedPlural': 'Worktrees joints archivés.', 'sessions.sidebar.sessionDialogs.worktree.archivedAndRemoteRemoved': 'Worktrees archivés et branches du dépôt distant supprimées.', 'sessions.sidebar.sessionDialogs.worktree.label': 'Worktree', 'sessions.sidebar.sessionDialogs.worktree.pathUnavailable': 'Chemin du worktree indisponible.', 'sessions.sidebar.sessionDialogs.worktree.uncommittedWarning': 'Les modifications non validées seront ignorées.', 'sessions.sidebar.sessionDialogs.actions.deleteRemoteBranch': 'Supprimer la branche du dépôt distant', 'sessions.sidebar.sessionDialogs.actions.remoteBranchInfoUnavailable': 'Informations sur la branche du dépôt distant indisponibles', 'sessions.sidebar.sessionDialogs.actions.deleteLocalBranch': 'Supprimer la branche locale', 'sessions.sidebar.sessionDialogs.actions.deleting': 'Suppression…', 'sessions.sidebar.sessionDialogs.actions.deleteWorktree': 'Supprimer le worktree', 'gitView.branch.branchToMergeInto': 'Branche à fusionner avec {branch}', 'gitView.branch.branchToRebaseOnto': 'Branche sur laquelle rebaser', 'gitView.branch.create': 'Créer une nouvelle branche...', 'gitView.branch.currentBadge': 'Actuel', 'gitView.branch.currentBranchFallback': 'branche actuelle', 'gitView.branch.currentBranchTooltip': 'Branche actuelle', 'gitView.branch.detachedHead': 'HEAD détaché', 'gitView.branch.dialogDescriptionPrefix': 'Choisissez comment intégrer une autre branche', 'gitView.branch.empty': 'Aucune branche trouvée.', 'gitView.branch.localBranches': 'Branches locales', 'gitView.branch.mergeDescription': 'Créez un commit de fusion et conservez l’historique des branches.', 'gitView.branch.mergeRebase': 'Fusionner/Rebase', 'gitView.branch.mergeRebaseTooltip': 'Mettez à jour cette branche depuis une autre branche.', 'gitView.branch.mergingInProgress': 'Fusion en cours', 'gitView.branch.namePlaceholder': 'Nom de la branche', 'gitView.branch.newBranchPlaceholder': 'Nouveau nom de branche', 'gitView.branch.noLocalBranches': 'Aucune branche locale', 'gitView.branch.noRemoteBranches': 'Aucune branche du dépôt distant', 'gitView.branch.operation': 'Opération', 'gitView.branch.operationCompleted': 'Opération terminée', 'gitView.branch.operationFailed': 'Échec de l\'opération', 'gitView.branch.pushToPrefix': 'Appuyer pour préfixer', 'gitView.branch.pushToSuffix': 'Appuyer pour suffixer', 'gitView.branch.rebaseDescription': 'Rejouez vos commits au-dessus de la branche sélectionnée.', 'gitView.branch.rebasingInProgress': 'Rebasage en cours', 'gitView.branch.remoteBranches': 'Branches du dépôt distant', 'gitView.branch.renameTitle': 'Renommer la branche', 'gitView.branch.renameSave': 'Enregistrer le nom de la branche', 'gitView.branch.renameSaving': 'Enregistrer le nom de la branche', 'gitView.branch.renameCancel': 'Annuler le changement de nom de la branche', 'gitView.branch.searchPlaceholder': 'Rechercher des branches...', 'gitView.branch.selectBranch': 'Sélectionnez une branche', 'gitView.branch.summaryMergeInfix': 'dans', 'gitView.branch.summaryMergePrefix': 'Cela fusionnera', 'gitView.branch.summaryRebaseInfix': 'sur', 'gitView.branch.summaryRebasePrefix': 'Cela va rebaser', 'gitView.branch.updateDescriptionPrefix': 'Apportez les dernières modifications dans', 'gitView.branch.updateTitle': 'Mettre à jour la branche', 'gitView.changes.changedFilesAria': 'Fichiers modifiés', 'gitView.changes.clearSelectionAria': 'Effacer la sélection de fichiers', 'gitView.changes.collapseDirectoryAria': 'Réduire le répertoire', 'gitView.changes.expandDirectoryAria': 'Développer le répertoire', 'gitView.changes.revertAll': 'Tout rétablir', 'gitView.changes.revertAllDescriptionPlural': 'Rétablir toutes les modifications sélectionnées ?', 'gitView.changes.revertAllDescriptionSingle': 'Rétablir la modification sélectionnée ?', 'gitView.changes.revertAllDialogTitle': 'Annuler toutes les modifications ?', 'gitView.changes.revertFileAria': 'Rétablir le fichier', 'gitView.changes.revertFileTooltip': 'Annuler les modifications', 'gitView.changes.reverting': 'Revenant...', 'gitView.changes.selectAllAria': 'Sélectionnez tous les fichiers', 'gitView.changes.selectFileAria': 'Sélectionner le fichier', 'gitView.changes.stagedTitle': 'Mise en scène', 'gitView.changes.resizeSplitAria': 'Redimensionner les modifications planifiées et non planifiées', 'gitView.changes.stageAllAria': 'Organiser tous les changements', 'gitView.changes.stageDirectoryAria': 'Ajoutez à l’index tous les changements dans {path}', 'gitView.changes.stageFileAria': 'Ajouter à l’index {path}', 'gitView.changes.title': 'Changements', 'gitView.changes.toggleDirectorySelectionAria': 'Basculer la sélection du répertoire', 'gitView.changes.unstageAllAria': 'Annuler toutes les modifications', 'gitView.changes.unstageDirectoryAria': 'Annuler toutes les modifications dans {path}', 'gitView.changes.unstageFileAria': 'Retirer de l’index {path}', 'gitView.commit.addGitmoji': 'Ajouter un gitmoji', 'gitView.commit.aiHighlights.insertAria': 'Insérer', 'gitView.commit.aiHighlights.insertTooltip': 'Insérer une info-bulle', 'gitView.commit.aiHighlights.title': 'Points forts', 'gitView.commit.commit': 'Commettre', 'gitView.commit.commitAria': 'Valider le commit', 'gitView.commit.committing': 'S\'engager...', 'gitView.commit.generate': 'Générer', 'gitView.commit.generateAria': 'Générer un message de commit', 'gitView.commit.messagePlaceholder': 'Message de commit', 'gitView.commit.push': 'Valider et synchroniser', 'gitView.commit.pushAria': 'Valider et synchroniser', 'gitView.commit.pushing': 'Synchronisation...', 'gitView.commit.selectFilesHint': 'Sélectionnez les fichiers dans Modifications pour activer le commit.', 'gitView.commit.stageFilesHint': 'Ajoutez des fichiers à l’index pour activer le commit.', 'gitView.commit.title': 'Commettre', 'gitView.common.cancel': 'Annuler', 'gitView.common.close': 'Fermer', 'gitView.common.done': 'Fait', 'gitView.common.processing': 'Traitement...', 'gitView.common.reset': 'Réinitialiser', 'gitView.conflict.abortOperation': 'Abandonner l’opération', 'gitView.conflict.conflictedFiles': 'Fichiers en conflit :', 'gitView.conflict.continueLater': 'Continuer plus tard', 'gitView.conflict.detectedDescription': 'Un conflit Git a été détecté.', 'gitView.conflict.detectedTitle': 'Conflit détecté', 'gitView.conflict.errorLoadingDetails': 'Erreur de chargement des détails', 'gitView.conflict.headInfo': 'Informations HEAD :', 'gitView.conflict.loadFailed': 'Échec du chargement', 'gitView.conflict.loading': 'Chargement des détails du conflit...', 'gitView.conflict.noActiveSession': 'Aucune session active', 'gitView.conflict.noActiveSessionDescription': 'Ouvrez une session active pour continuer.', 'gitView.conflict.resolveCurrentSession': 'Résoudre dans la session en cours', 'gitView.conflict.resolveNewSession': 'Résoudre dans une nouvelle session', 'gitView.empty.cleanDescription': 'Tous les changements ont été validés', 'gitView.empty.cleanTitle': 'Worktree sans modifications', 'gitView.empty.pullBehindPlural': 'Extraire les commits {count}', 'gitView.empty.pullBehindSingle': 'Extraire le commit {count}', 'gitView.header.identityTooltip': 'Identité Git', 'gitView.header.noIdentity': 'Aucune identité', 'gitView.header.noProfiles': 'Aucun profil disponible à appliquer.', 'gitView.header.repositoryViews': 'Vues du dépôt', 'gitView.header.removeRemoteAria': 'Supprimer le remote', 'gitView.header.removeRemoteTitle': 'Supprimer le remote', 'gitView.header.upstreamSynced': 'synchronisé', 'gitView.header.upstreamTooltip': 'Par rapport au {target}.', 'gitView.header.upstreamTooltipTracking': 'Par rapport au {target}. Les badges de synchronisation principaux reflètent toujours {tracking}.', 'gitView.history.actions.cancelButton': 'Annuler', 'gitView.history.actions.checkout': 'Basculer', 'gitView.history.actions.checkoutConfirm': 'Basculer sur ce commit en HEAD détaché ?', 'gitView.history.actions.cherryPick': 'Cherry-pick', 'gitView.history.actions.cherryPickConfirm': 'Cherry-pick ce commit sur la branche actuelle ?', 'gitView.history.actions.conflictToastDescription': 'Conflits dans : {files}. Résolvez manuellement et validez, ou abandonnez avec git Cherry-pick/revert --abort.', 'gitView.history.actions.conflictToastTitle': 'Conflit', 'gitView.history.actions.confirmButton': 'Confirmer', 'gitView.history.actions.createBranch': 'Créer une branche ici', 'gitView.history.actions.createBranchConfirm': 'Créer', 'gitView.history.actions.createBranchPlaceholder': 'Nom de la branche', 'gitView.history.actions.detachedHead': 'Checkout (HEAD détaché)', 'gitView.history.actions.merge': 'Fusionner avec le courant', 'gitView.history.actions.mergeConfirm': 'Fusionner ce commit dans la branche actuelle ?', 'gitView.history.actions.rebase': 'Rebase sur ce commit', 'gitView.history.actions.rebaseConfirm': 'Rebaser la branche actuelle sur ce commit ?', 'gitView.history.actions.reset': 'Réinitialiser...', 'gitView.history.actions.resetHard': 'Hard — annuler toutes les modifications', 'gitView.history.actions.resetHardConfirm': 'Réinitialisation matérielle - HEAD se déplace, toutes les modifications non validées sont définitivement supprimées.', 'gitView.history.actions.resetHardConfirmButton': 'Ignorer les modifications', 'gitView.history.actions.resetMixed': 'Mixte – modifications hors index', 'gitView.history.actions.resetMixedConfirm': 'Réinitialisation mixte - HEAD bouge, change hors index.', 'gitView.history.actions.resetSoft': 'Soft — conserver l\'index', 'gitView.history.actions.resetSoftConfirm': 'Réinitialisation logicielle - HEAD se déplace, modifications dans l’index préservées.', 'gitView.history.actions.revert': 'Revenir', 'gitView.history.actions.revertConfirm': 'Organiser un retour à ce commit ?', 'gitView.history.binary': 'Binaire', 'gitView.history.binaryNoDiff': 'Fichier binaire — aucune différence disponible', 'gitView.history.commitsPlaceholder': 'Rechercher des commits', 'gitView.history.copySha': 'Copier SHA', 'gitView.history.diffError': 'Échec du chargement du diff. Cliquez pour réessayer.', 'gitView.history.largeDiffDescription': 'Le rendu peut être lent. Vous pouvez toujours voir la différence en cliquant ci-dessous.', 'gitView.history.largeDiffTitle': 'Grand diff ({count} a modifié les lignes)', 'gitView.history.loadingDiff': 'Chargement du différentiel...', 'gitView.history.loadingFiles': 'Chargement des fichiers...', 'gitView.history.loadMore': 'Charger plus', 'gitView.history.loadingMore': 'Chargement...', 'gitView.history.logSize100': 'Taille du journal 100', 'gitView.history.logSize25': 'Taille du journal25', 'gitView.history.logSize50': 'Taille du journal50', 'gitView.history.noCommits': 'Aucun commit trouvé', 'gitView.history.noFiles': 'Aucun fichier', 'gitView.history.renamedNoDiff': 'Fichier renommé – diff non pris en charge', 'gitView.history.renderDiffAnyway': 'Rendre quand même', 'gitView.history.title': 'Historique', 'gitView.graph.title': 'Graphique', 'gitView.integrate.checking': 'Vérification…', 'gitView.integrate.cherryPickAbortedToast': 'Cherry-pick annulé', 'gitView.integrate.cherryPickConflictDescription': 'Des conflits sont apparus pendant le Cherry-pick.', 'gitView.integrate.cherryPickConflictToast': 'Conflits pendant le Cherry-pick', 'gitView.integrate.cherryPickContinueFailedToast': 'Impossible de continuer le Cherry-pick', 'gitView.integrate.cherryPickFinishedToast': 'Cherry-pick terminé', 'gitView.integrate.commitsMovedDescriptionPlural': '{count} commits déplacés', 'gitView.integrate.commitsMovedDescriptionSingle': '1 commit déplacé', 'gitView.integrate.commitsMovedToast': 'Commits déplacés', 'gitView.integrate.commitsToMove': 'Commits à déplacer', 'gitView.integrate.conflictsInFiles': 'Conflits dans les fichiers', 'gitView.integrate.currentCommit': 'Commit actuel', 'gitView.integrate.currentSession': 'Session en cours', 'gitView.integrate.failedToMoveToast': 'Échec du déplacement des commits', 'gitView.integrate.moreFiles': 'Plus de fichiers', 'gitView.integrate.move': 'Se déplacer', 'gitView.integrate.moveCommits': 'Déplacer les commits', 'gitView.integrate.moving': 'Déplacement…', 'gitView.integrate.newSession': 'Nouvelle session', 'gitView.integrate.noActiveSession': 'Aucune session active', 'gitView.integrate.noActiveSessionDescription': 'Ouvrez une session active pour déplacer des commits.', 'gitView.integrate.noCommitsToMove': 'Aucun commit à déplacer.', 'gitView.integrate.noCommitsToMoveToast': 'Aucun commit à déplacer', 'gitView.integrate.previewUnavailable': 'Aperçu indisponible', 'gitView.integrate.showAll': 'Afficher tout', 'gitView.integrate.showLess': 'Afficher moins', 'gitView.integrate.showingFirstCommits': 'Affichage des premiers commits', 'gitView.integrate.target': 'Cible', 'gitView.integrate.title': 'Réintégrer les commits', 'gitView.integrate.toMoveCount': 'Nombre de commits à déplacer', 'gitView.operation.abort': 'Avorter', 'gitView.operation.continue': 'Continuer', 'gitView.operation.inProgressTitle': '{operation} en cours', 'gitView.operation.merge': 'Fusionner', 'gitView.operation.mergeInProgressWithHead': 'Fusion de {head}', 'gitView.operation.mergingMessage': 'Fusion : {message}', 'gitView.operation.rebase': 'Rebase', 'gitView.operation.rebaseInProgress': 'Rebase en cours', 'gitView.operation.rebasingOnto': 'Rebaser {headName} sur {onto}', 'gitView.operation.resolveConflictsHint': 'Résolvez les conflits, puis poursuivez l\'opération.', 'gitView.operation.resolveWithAi': 'Résoudre avec l\'IA', 'gitView.stash.confirmButton': 'Confirmer', 'gitView.stash.description': 'Des modifications locales doivent être mises en stash pour continuer.', 'gitView.stash.mergeWith': 'Fusionner avec', 'gitView.stash.rebaseOnto': 'Rebase sur', 'gitView.stash.restoreAfterOperation': 'Restaurer après l\'opération', 'gitView.stash.restoreAria': 'Restaurer le stash', 'gitView.stash.stepRestore': 'Restaurez vos modifications cachées', 'gitView.stash.stepStash': 'Cachez vos modifications non validées', 'gitView.stash.thisWill': 'Cela va :', 'gitView.stash.title': 'Modifications non validées', 'gitView.stashes.actions.apply': 'Appliquer', 'gitView.stashes.actions.drop': 'Drop', 'gitView.stashes.actions.pop': 'Pop', 'gitView.stashes.actions.stashCurrent': 'Mettre les modifications actuelles en stash', 'gitView.stashes.actions.stashCurrentWithCount': 'Cacher les fichiers {count}', 'gitView.stashes.confirm.drop': 'Supprimer {ref} ?', 'gitView.stashes.description': 'Enregistrez, restaurez et nettoyez les stashes Git pour ce dépôt.', 'gitView.stashes.empty.list': 'Aucun stash pour l\'instant.', 'gitView.stashes.empty.search': 'Aucun stash correspondant.', 'gitView.stashes.includeUntrackedHint': 'Les fichiers non suivis sont inclus automatiquement.', 'gitView.stashes.fileCount': 'Fichiers {count}', 'gitView.stashes.fileCountLoading': 'compter les fichiers...', 'gitView.stashes.itemNumber': '#{number}', 'gitView.stashes.latestLabel': 'Dernier', 'gitView.stashes.messagePlaceholder': 'Nom du stash', 'gitView.stashes.searchPlaceholder': 'Rechercher des stashes', 'gitView.stashes.title': 'Stashes', 'gitView.stashes.toast.applyFailed': 'Échec de l\'application du cache', 'gitView.stashes.toast.applySuccess': 'Stash appliqué', 'gitView.stashes.toast.createFailed': 'Échec de la sauvegarde des modifications', 'gitView.stashes.toast.created': 'Modifications cachées', 'gitView.stashes.toast.dropFailed': 'Échec de la suppression du stash', 'gitView.stashes.toast.dropSuccess': 'Stash supprimé', 'gitView.stashes.toast.loadFailed': 'Échec du chargement des stashes', 'gitView.stashes.toast.noChanges': 'Aucune modification locale à stocker', 'gitView.stashes.toast.popFailed': 'Échec du pop du stash', 'gitView.stashes.toast.popSuccess': 'Le stash a été pop', 'gitView.stashes.untitled': 'Stash sans titre', 'gitView.sync.fetch': 'Aller chercher', 'gitView.sync.fetchFromRemote': 'Récupérer depuis {name}', 'gitView.sync.fetchTooltip': 'Récupérer à distance', 'gitView.sync.commitOrStashTooltip': 'Validez ou cachez vos modifications avant la synchronisation', 'gitView.sync.moreActionsAria': 'Plus d\'actions de synchronisation', 'gitView.sync.noRemoteTooltip': 'Aucun dépôt distant n’est configuré', 'gitView.sync.pull': 'Tirer', 'gitView.sync.pullTooltip': 'Extraire les modifications', 'gitView.sync.pullTooltipBehind': 'Tirer les modifications ({count} derrière)', 'gitView.sync.push': 'Pousser', 'gitView.sync.pushTooltip': 'Pousser les changements', 'gitView.sync.pushTooltipAhead': 'Pousser les modifications ({count} en avance)', 'gitView.sync.sync': 'synchroniser', 'gitView.sync.syncChanges': 'Synchroniser les modifications', 'gitView.sync.syncChangesTooltip': 'Modifications de synchronisation ({behind} vers le bas, {ahead} vers le haut)', 'gitView.sync.syncChangesWithCounts': 'Modifications de synchronisation {behind}↓ {ahead}↑', 'gitView.sync.syncCounts': '{behind}↓ {ahead}↑', 'gitView.branch.actionsUnavailable': 'Actions de branchement indisponibles dans cet état du dépôt', 'gitView.conflict.noDetailsAvailable': 'Aucun détail de conflit disponible', 'gitView.empty.notGitRepository': 'Ce répertoire n\'est pas un dépôt Git', 'gitView.empty.notGitRepositoryDescription': 'Initialisez Git dans ce répertoire ou ouvrez un dépôt.', 'gitView.empty.selectSessionOrDirectory': 'Sélectionnez une session ou un répertoire pour afficher l\'état de Git', 'gitView.empty.worktreeFeaturesUnavailable': 'Les fonctionnalités Worktree ne sont pas disponibles dans ce mode d’espace de travail.', 'gitView.empty.worktreeSetupDescription': 'Termine la configuration du worktree et prépare l\'état du dépôt.', 'gitView.empty.worktreeSetupInProgress': 'Configuration de worktree en cours', 'gitView.gitmoji.empty': 'Aucun gitmoji trouvé', 'gitView.gitmoji.searchPlaceholder': 'Rechercher des gitmoji...', 'gitView.gitmoji.title': 'Insérer un gitmoji', 'gitView.history.dialogDescription': 'Parcourez les commits récents et inspectez les fichiers modifiés.', 'gitView.loading.checkingRepository': 'Vérification du dépôt...', 'gitView.loading.loading': 'Chargement...', 'gitView.pr.actions.add': 'Ajouter', 'gitView.pr.actions.cancelEditing': 'Annuler la modification', 'gitView.pr.actions.cancelEditingAria': 'Annuler la modification des PR', 'gitView.pr.actions.createPr': 'Créer une PR', 'gitView.pr.actions.edit': 'Modifier', 'gitView.pr.actions.editPr': 'Modifier la PR', 'gitView.pr.actions.editPrAria': 'Modifier la PR', 'gitView.pr.actions.hide': 'Cacher', 'gitView.pr.actions.markReady': 'Marquez prêt', 'gitView.pr.actions.markReadyAria': 'Marquer la demande d\'extraction comme prête à être examinée', 'gitView.pr.actions.mergePr': 'Fusionner la PR', 'gitView.pr.actions.mergePrAria': 'Fusionner la PR', 'gitView.pr.actions.openChecks': 'Chèques ouverts', 'gitView.pr.actions.openChecksAria': 'Ouvrir les chèques échoués', 'gitView.pr.actions.openComments': 'Commentaires ouverts', 'gitView.pr.actions.openCommentsAria': 'Ouvrir les commentaires de la PR', 'gitView.pr.actions.openOnGitHub': 'Ouvert sur GitHub', 'gitView.pr.actions.openOnGitHubAria': 'Ouvrir la PR sur GitHub', 'gitView.pr.actions.openSettings': 'Ouvrir les paramètres', 'gitView.pr.actions.repo': 'Dépôt', 'gitView.pr.actions.resolveFailedChecks': 'Résoudre les contrôles échoués', 'gitView.pr.actions.resolveFailedChecksAria': 'Envoyer les chèques échoués à l\'agent', 'gitView.pr.actions.savePr': 'Enregistrer la PR', 'gitView.pr.actions.savePrAria': 'Enregistrer les modifications de la PR', 'gitView.pr.actions.sendCommentToAgent': 'Envoyer le commentaire à l\'agent', 'gitView.pr.actions.sendCommentToAgentAria': 'Envoyer ce commentaire à l\'agent', 'gitView.pr.actions.sendToAgent': 'Envoyer à l\'agent', 'gitView.pr.actions.shareComments': 'Partager les commentaires', 'gitView.pr.actions.shareCommentsAria': 'Envoyer les commentaires de la PR à l\'agent', 'gitView.pr.actions.toggleDraftAria': 'Basculer l\'état de brouillon', 'gitView.pr.actions.refresh': 'Actualiser le statut PR', 'gitView.pr.actions.refreshAria': 'Actualiser l\'état de la demande d\'extraction', 'gitView.pr.additionalContext.added': 'Ajouté', 'gitView.pr.additionalContext.hint': 'Ajoutez un contexte supplémentaire pour une meilleure qualité d’évaluation.', 'gitView.pr.additionalContext.optional': 'Facultatif', 'gitView.pr.additionalContext.title': 'Contexte supplémentaire', 'gitView.pr.checkDetails.empty': 'Aucun détail de chèque disponible', 'gitView.pr.checkDetails.title': 'Détails de la vérification ayant échoué', 'gitView.pr.checkingStatus': 'Vérification de l\'état de la PR...', 'gitView.pr.checks.label': 'chèques', 'gitView.pr.checks.completedLabel': 'Complété', 'gitView.pr.checks.conclusionLabel': 'Conclusion', 'gitView.pr.checks.startedLabel': 'Commencé', 'gitView.pr.checks.statusLabel': 'Statut', 'gitView.pr.checks.stepLabel': 'Étape', 'gitView.pr.checks.steps': 'Mesures', 'gitView.pr.comments.empty': 'Aucun commentaire trouvé', 'gitView.pr.comments.generalContext': 'Commentaire général', 'gitView.pr.comments.reviewContext': 'Revoir le commentaire', 'gitView.pr.comments.title': 'Commentaires', 'gitView.pr.comments.unknownAuthor': 'Auteur inconnu', 'gitView.pr.createTitle': 'Créer une PR', 'gitView.pr.draftMustBeReady': 'Le brouillon de PR doit être marqué comme prêt avant la fusion.', 'gitView.pr.field.baseBranch': 'Branche de base', 'gitView.pr.field.description': 'Description', 'gitView.pr.field.draft': 'Brouillon', 'gitView.pr.field.title': 'Titre', 'gitView.pr.githubNotConnected': 'GitHub n\'est pas connecté', 'gitView.pr.loadingDescription': 'Chargement de la description de la PR...', 'gitView.pr.mergeMethod.merge': 'Créer un commit de fusion', 'gitView.pr.mergeMethod.rebase': 'Rebase et fusionner', 'gitView.pr.mergeMethod.squash': 'Écraser et fusionner', 'gitView.pr.noDescription': 'Aucune description', 'gitView.pr.noMergePermission': 'Vous n\'êtes pas autorisé à fusionner cette demande d\'extraction.', 'gitView.pr.notMergeable': 'Non fusionnable', 'gitView.pr.numberLabel': 'PR #{number}', 'gitView.pr.placeholder.additionalContext': 'Toute contrainte, note de déploiement ou contexte du réviseur...', 'gitView.pr.placeholder.description': 'Décrivez le changement...', 'gitView.pr.placeholder.main': 'Résumez votre PR', 'gitView.pr.placeholder.selectBaseBranch': 'Sélectionnez la branche de base', 'gitView.pr.placeholder.title': 'Titre de la PR', 'gitView.pr.placeholder.whatChanged': 'Qu\'est-ce qui a changé et pourquoi ?', 'gitView.pr.statusUnavailable': 'Statut PR indisponible', 'gitView.pr.toast.baseBranchRequired': 'Sélectionnez une branche de base', 'gitView.pr.toast.baseMustDifferFromHead': 'La branche de base doit différer de la branche actuelle', 'gitView.pr.toast.createPrFailed': 'Échec de la création de la PR', 'gitView.pr.toast.generateDescriptionFailed': 'Échec de la génération de la description de la PR', 'gitView.pr.toast.githubApiUnavailable': 'GitHub API n\'est pas disponible', 'gitView.pr.toast.loadCheckDetailsFailed': 'Échec du chargement des détails du chèque', 'gitView.pr.toast.loadChecksFailed': 'Échec du chargement des vérifications de la PR', 'gitView.pr.toast.loadCommentsFailed': 'Échec du chargement des commentaires', 'gitView.pr.toast.loadPrCommentsFailed': 'Échec du chargement des commentaires de la PR', 'gitView.pr.toast.markReadyFailed': 'Impossible de marquer la PR comme prête', 'gitView.pr.toast.markedReady': 'PR marquée comme prête pour relecture', 'gitView.pr.toast.mergeFailed': 'Échec de la fusion de la PR', 'gitView.pr.toast.noActiveSession': 'Aucune session de chat active', 'gitView.pr.toast.noActiveSessionDescription': 'Ouvrez ou créez une session de discussion pour envoyer du contexte à un agent.', 'gitView.pr.toast.noFailedChecks': 'Aucun chèque échoué trouvé', 'gitView.pr.toast.noModelSelected': 'Sélectionnez d\'abord un modèle', 'gitView.pr.toast.noPrComments': 'Aucun commentaire de PR trouvé', 'gitView.pr.toast.prCreated': 'PR créée', 'gitView.pr.toast.prMerged': 'PR fusionnée', 'gitView.pr.toast.prNotMerged': 'La PR n\'a pas été fusionnée', 'gitView.pr.toast.prUpdated': 'PR mise à jour', 'gitView.pr.toast.sendMessageFailed': 'Échec de l\'envoi du message à l\'agent', 'gitView.pr.toast.titleRequired': 'Le titre est requis', 'gitView.pr.toast.updatePrFailed': 'Échec de la mise à jour de la PR', 'gitView.pullRequest.createHint': 'Créez et gérez les PR depuis cette branche.', 'gitView.pullRequest.availableOnFeatureBranches': 'Disponible lorsque la branche actuelle peut ouvrir une PR.', 'gitView.pullRequest.title': 'PR', 'gitView.tabs.commit': 'Commettre', 'gitView.tabs.pr': 'PR', 'gitView.tabs.update': 'Mise à jour', 'gitView.tabs.worktree': 'Worktree', 'gitView.toast.abortOperationFailed': 'Échec de l\'annulation de l\'opération', 'gitView.toast.appliedIdentity': 'Identité appliquée : {name}', 'gitView.toast.applyIdentityFailed': 'Échec de l\'application de l\'identité', 'gitView.toast.branchCreatedLocally': 'Branche créée localement, mais n\'a pas pu être configurée en amont.', 'gitView.toast.cannotCheckout': 'Impossible de basculer sur la branche : {reason}', 'gitView.toast.cannotCreateBranch': 'Impossible de créer une branche : {reason}', 'gitView.toast.cannotRemoveOriginRemote': 'Impossible de supprimer le dépôt distant origin', 'gitView.toast.cannotRenameBranch': 'Impossible de renommer la branche : {reason}', 'gitView.toast.checkedOut': 'J\'ai vérifié {name}', 'gitView.toast.checkoutFailed': 'Échec du checkout de {name}', 'gitView.toast.commitCreated': 'Commit créé', 'gitView.toast.commitHashCopied': 'Hachage du commit copié', 'gitView.toast.continueOperationFailed': 'Échec de la poursuite de l\'opération', 'gitView.toast.copyFailed': 'Échec de la copie', 'gitView.toast.createBranchFailed': 'Échec de la création de la branche', 'gitView.toast.createCommitFailed': 'Échec de la création du commit', 'gitView.toast.createdBranch': 'Branche créée {name}', 'gitView.toast.enterCommitMessage': 'Entrez un message de commit', 'gitView.toast.fetchedFromRemote': 'Récupéré depuis {name}', 'gitView.toast.generateCommitMessageFailed': 'Échec de la génération du message de commit', 'gitView.toast.mergeAborted': 'Fusion interrompue', 'gitView.toast.mergeCompleted': 'Fusion terminée', 'gitView.toast.mergeConflictsDetected': 'Conflits de fusion détectés', 'gitView.toast.mergedIntoBranch': 'Fusion de {branch} dans {currentBranch}', 'gitView.toast.pulledFilesPlural': 'Récupération de {count} fichiers depuis {name}', 'gitView.toast.pulledFilesSingle': 'Récupération de {count} fichier depuis {name}', 'gitView.toast.pushedToUpstream': 'Poussé vers {name}', 'gitView.toast.commitOrStashBeforeSync': 'Validez ou cachez vos modifications avant la synchronisation', 'gitView.toast.alreadyUpToDate': 'Déjà à jour', 'gitView.toast.syncedPulledPluralAndPushed': 'Extrait les fichiers {count} de {name} et poussé vers l\'amont', 'gitView.toast.syncedPulledSingleAndPushed': 'Récupération de {count} fichier depuis {name} puis push vers l’amont', 'gitView.toast.syncedChanges': 'Modifications synchronisées', 'gitView.toast.rebaseAborted': 'Rebase abandonné', 'gitView.toast.rebaseConflictsDetected': 'Conflits de rebase détectés', 'gitView.toast.rebaseStepCompleted': 'Ajouter à l’index de rebase terminée', 'gitView.toast.rebasedOntoBranch': 'Rebasage de {currentBranch} sur {branch}', 'gitView.toast.refreshRepositoryFailed': 'Échec de l\'actualisation du dépôt', 'gitView.toast.remoteNameRequired': 'Le nom du dépôt distant est requis', 'gitView.toast.removedRemote': 'Remote supprimé : {name}', 'gitView.toast.renameBranchFailed': 'Échec du renommage de {oldName} en {newName}', 'gitView.toast.renamedBranch': 'Renommé {oldName} en {newName}', 'gitView.toast.restoreStashFailed': 'Échec de la restauration du cache', 'gitView.toast.restoreStashManually': 'Cache restauré manuellement requis', 'gitView.toast.revertFailed': 'Échec de l\'annulation des modifications', 'gitView.toast.revertedFile': '{path} inversé', 'gitView.toast.revertedFilesPlural': 'Fichiers {count} rétablis', 'gitView.toast.revertedFilesSingle': 'Fichier {count} rétabli', 'gitView.toast.revertedSomePlural': 'Fichiers {success} annulés, échec de {failed}', 'gitView.toast.revertedSomeSingle': 'Fichier {success} rétabli, échec de {failed}', 'gitView.toast.stageFileFailed': 'Échec de l\'ajout des modifications à l\'index', 'gitView.toast.stageFileToCommit': 'Préparez au moins un fichier à valider', 'gitView.toast.stageFileToDescribe': 'Mettre en scène au moins un fichier à décrire', 'gitView.toast.selectFileToCommit': 'Sélectionnez au moins un fichier à valider', 'gitView.toast.selectFileToDescribe': 'Sélectionnez au moins un fichier à décrire', 'gitView.toast.stashedRestored': 'Modifications cachées restaurées', 'gitView.toast.syncActionFailed': 'Échec du {action}', 'gitView.toast.unstageFileFailed': 'Échec de l\'annulation du transfert des modifications', 'gitView.toast.upstreamSet': 'Réglé en amont pour {branch} à {remote}', 'gitView.worktree.availableInWorktreeMode': 'Disponible uniquement en mode worktree', 'contextPanel.mode.chat': 'Chat', 'contextPanel.mode.files': 'Fichiers', "contextPanel.mode.diff": "Changements", 'contextPanel.mode.stagedDiff': 'Différence par étapes', 'contextPanel.mode.workingDiff': 'Différentiel de travail', 'contextPanel.mode.plan': 'Plan', 'contextPanel.mode.context': 'Contexte', 'contextPanel.mode.preview': 'Aperçu', 'contextPanel.mode.browser': 'Navigateur', 'contextPanel.browser.open': 'Ouvrir le panneau du navigateur', 'contextPanel.browser.addressAria': 'Adresse du navigateur', 'contextPanel.browser.empty': 'Navigateur Internet', 'contextPanel.browser.emptyHint': 'Entrez une adresse ci-dessus pour commencer à naviguer sur le Web', 'contextPanel.tab.closeTabAria': 'Fermer l\'onglet {label}', 'contextPanel.actions.collapsePanel': 'Réduire le panneau', 'contextPanel.actions.expandPanel': 'Agrandir le panneau', 'contextPanel.actions.closePanel': 'Fermer le panneau', 'contextPanel.actions.resizePanelAria': 'Redimensionner le panneau contextuel', 'contextPanel.iframe.sessionChatTitle': 'Session de discussion {sessionID}', 'contextPanel.preview.actions.reload': 'Recharger l\'aperçu', 'contextPanel.preview.actions.openExternal': 'Ouvrir dans le navigateur', 'contextPanel.preview.actions.retry': 'Réessayer', 'contextPanel.preview.iframeTitle': 'Aperçu', 'contextPanel.preview.invalidUrl': 'L\'aperçu nécessite un http(s) URL valide.', 'contextPanel.preview.empty': 'Pas d\'aperçu URL', 'contextPanel.preview.loading': 'Connexion du proxy d\'aperçu...', 'contextPanel.preview.proxyError': 'Impossible de démarrer le proxy d\'aperçu.', 'contextPanel.preview.upstreamUnreachable': 'Le serveur de développement ne répond pas.', 'contextPanel.preview.upstreamUnreachableHint': 'Assurez-vous que votre serveur de développement est toujours en cours d\'exécution, puis réessayez.', 'contextPanel.preview.startingServer': 'Démarrage du serveur de développement...', 'contextPanel.preview.startingServerHint': 'En attente que le serveur accepte les connexions.', 'contextPanel.preview.title': 'Aperçu', 'contextPanel.preview.description': 'Utilisez les actions du projet ou un bouton Aperçu du terminal pour ouvrir un aperçu.', 'contextPanel.preview.startPreview': 'Démarrer l\'aperçu', 'contextPanel.preview.starting': 'Démarrage...', 'contextPanel.preview.noDevServer': 'Aucune commande de serveur de développement trouvée. Configurez une action de projet ou ajoutez un script "dev" à package.json.', 'contextPanel.preview.startFailed': 'Échec du démarrage du serveur d\'aperçu.', 'contextPanel.preview.serverExited': 'Le serveur de développement s\'est arrêté de manière inattendue.', 'contextPanel.preview.noUrlDetected': 'Le serveur de développement a démarré, mais aucun URL n\'a été détecté dans sa sortie. Ouvrez l\'onglet Aperçu du terminal pour vérifier les journaux.', 'contextPanel.preview.serverExitedWithLog': 'Le serveur de développement s\'est arrêté de manière inattendue. Dernière sortie :\n\n{log}', 'contextPanel.preview.noUrlDetectedWithLog': 'Le serveur de développement n\'est pas devenu accessible. Dernière sortie :\n\n{log}', 'contextPanel.preview.console.open': 'Ouvrir la console d\'aperçu', 'contextPanel.preview.console.waiting': 'En attente de la console de prévisualisation', 'contextPanel.preview.console.title': 'Console de prévisualisation', 'contextPanel.preview.console.attach': 'Attacher', 'contextPanel.preview.console.copy': 'Copie', 'contextPanel.preview.console.clear': 'Effacer', 'contextPanel.preview.console.empty': 'Aucun événement de console d’aperçu pour l’instant.', 'contextPanel.preview.console.noFilteredEvents': 'Aucun événement ne correspond à ce filtre.', 'contextPanel.preview.console.runtimeError': 'Erreur d\'exécution', 'contextPanel.preview.console.copied': 'Console d\'aperçu copiée', 'contextPanel.preview.console.copyFailed': 'Échec de la copie de la console d\'aperçu', 'contextPanel.preview.console.attached': 'Console de prévisualisation attachée au chat', 'contextPanel.preview.console.attachNoSession': 'Ouvrir une session de discussion avant de joindre les journaux d\'aperçu', 'contextPanel.preview.console.attachAnnotation': 'Il s\'agit des journaux de la console du navigateur du serveur de développement exécuté pour ce projet.', 'contextPanel.preview.inspect.toggle': 'Inspecter l\'élément d\'aperçu', 'contextPanel.preview.inspect.attached': 'Aperçu de l\'annotation jointe au chat', 'contextPanel.preview.inspect.attachNoSession': 'Ouvrir une session de discussion avant de joindre des annotations d\'aperçu', 'contextPanel.preview.inspect.attachAnnotation': 'Il s\'agit d\'un élément DOM sélectionné dans l\'aperçu de l\'application.', 'contextPanel.preview.inspect.attachAnnotationWithScreenshot': 'Il s\'agit d\'un élément DOM sélectionné dans l\'aperçu de l\'application. Une capture d\'écran de la zone d\'aperçu visible avec l\'élément sélectionné en surbrillance est jointe.', 'contextPanel.preview.console.filter.all': 'Tous', 'contextPanel.preview.console.filter.errors': 'Erreurs', 'contextPanel.preview.console.filter.warnings': 'Avertissements', 'contextPanel.preview.console.filter.logs': 'Journaux', 'terminalView.preview.open': 'Aperçu', 'terminalView.preview.openTitle': 'Ouvrir le volet d\'aperçu', 'sidebarFilesTree.menu.rename': 'Rebaptiser', 'sidebarFilesTree.menu.copyPath': 'Copier le chemin', 'sidebarFilesTree.menu.save': 'Sauvegarder', 'sidebarFilesTree.menu.newFile': 'Nouveau fichier', 'sidebarFilesTree.menu.newFolder': 'Nouveau dossier', 'sidebarFilesTree.menu.delete': 'Supprimer', 'sidebarFilesTree.toast.pathCopied': 'Chemin copié', 'sidebarFilesTree.toast.copyFailed': 'Échec de la copie', 'sidebarFilesTree.toast.revealFailed': 'Impossible de révéler le chemin', 'sidebarFilesTree.toast.filenameRequired': 'Le nom du fichier est obligatoire', 'sidebarFilesTree.toast.writeNotSupported': 'Écriture non prise en charge', 'sidebarFilesTree.toast.fileCreated': 'Fichier créé', 'sidebarFilesTree.toast.operationFailed': 'L\'opération a échoué', 'sidebarFilesTree.toast.folderNameRequired': 'Le nom du dossier est requis', 'sidebarFilesTree.toast.folderCreated': 'Dossier créé', 'sidebarFilesTree.toast.nameRequired': 'Le nom est requis', 'sidebarFilesTree.toast.renameNotSupported': 'Renommer non pris en charge', 'sidebarFilesTree.toast.renamedSuccessfully': 'Renommé avec succès', 'sidebarFilesTree.toast.deleteNotSupported': 'Suppression non prise en charge', 'sidebarFilesTree.toast.deletedSuccessfully': 'Supprimé avec succès', 'sidebarFilesTree.search.placeholder': 'Rechercher des fichiers...', 'sidebarFilesTree.search.clearAria': 'Effacer la recherche', 'sidebarFilesTree.actions.newFileTitle': 'Nouveau fichier', 'sidebarFilesTree.actions.newFolderTitle': 'Nouveau dossier', 'sidebarFilesTree.actions.refreshTitle': 'Rafraîchir', 'sidebarFilesTree.actions.fileMenuTitle': 'Menu Fichier', 'sidebarFilesTree.state.searching': 'Recherche...', 'sidebarFilesTree.state.loading': 'Chargement...', 'sidebarFilesTree.dialog.createFile.title': 'Créer un fichier', 'sidebarFilesTree.dialog.createFolder.title': 'Créer un dossier', 'sidebarFilesTree.dialog.rename.title': 'Rebaptiser', 'sidebarFilesTree.dialog.delete.title': 'Supprimer', 'sidebarFilesTree.dialog.createFile.description': 'Créer un nouveau fichier dans {path}', 'sidebarFilesTree.dialog.createFolder.description': 'Créez un nouveau dossier dans {path}', 'sidebarFilesTree.dialog.rename.description': 'Renommer {name}', 'sidebarFilesTree.dialog.delete.description': 'Etes-vous sûr de vouloir supprimer {name} ? Cette action ne peut pas être annulée.', 'sidebarFilesTree.dialog.rootFallback': 'racine', 'sidebarFilesTree.dialog.rename.placeholder': 'Nouveau nom', 'sidebarFilesTree.dialog.namePlaceholder': 'Nom', 'sidebarFilesTree.dialog.cancel': 'Annuler', 'sidebarFilesTree.dialog.confirm': 'Confirmer', 'sidebarFilesTree.dialog.delete.confirm': 'Supprimer', 'filesView.dialog.createFile.title': 'Créer un fichier', 'filesView.dialog.createFolder.title': 'Créer un dossier', 'filesView.dialog.rename.title': 'Rebaptiser', 'filesView.dialog.delete.title': 'Supprimer', 'filesView.dialog.createFile.description': 'Créer un nouveau fichier dans {path}', 'filesView.dialog.createFolder.description': 'Créez un nouveau dossier dans {path}', 'filesView.dialog.rename.description': 'Renommer {name}', 'filesView.dialog.delete.description': 'Etes-vous sûr de vouloir supprimer {name} ? Cette action ne peut pas être annulée.', 'filesView.dialog.rootFallback': 'racine', 'filesView.dialog.rename.placeholder': 'Nouveau nom', 'filesView.dialog.namePlaceholder': 'Nom', 'filesView.dialog.cancel': 'Annuler', 'filesView.dialog.confirm': 'Confirmer', 'filesView.dialog.delete.confirm': 'Supprimer', 'filesView.editor.saving': 'Enregistrement...', 'filesView.editor.saved': 'Enregistré', 'filesView.editor.autoSaveOn': 'Sauvegarde automatique activée', 'filesView.editor.manualSave': 'Sauvegarde manuelle', 'filesView.editor.saveNowTitle': 'Enregistrer maintenant ({shortcut}) - sauvegarde automatique après 1.5s', 'filesView.editor.saveNowManualTitle': 'Enregistrer maintenant ({shortcut})', 'filesView.editor.saveAria': 'Enregistrer ({shortcut})', 'filesView.editor.openInDesktopApp': 'Ouvrir dans l\'application de bureau', 'filesView.editor.refreshApps': 'Actualiser les applications', 'filesView.editor.disableLineWrap': 'Désactiver le retour à la ligne', 'filesView.editor.enableLineWrap': 'Activer le retour à la ligne', 'filesView.editor.findInFile': 'Rechercher dans le fichier', 'filesView.editor.goToLine': 'Aller à la ligne', 'filesView.editor.switchToTextView': 'Passer à l\'affichage texte', 'filesView.editor.switchToTreeView': 'Passer à l\'arborescence', 'filesView.toast.copyFailed': 'Échec de la copie', 'filesView.toast.openInAppFailed': 'Échec de l\'ouverture dans {app}', 'filesView.toast.savingNotSupported': 'Enregistrement non pris en charge', 'filesView.toast.writeFileFailed': 'Échec de l\'écriture du fichier', 'filesView.toast.saveFailed': 'Échec de l\'enregistrement', 'filesView.editor.copyFileContents': 'Copier le contenu du fichier', 'filesView.editor.copyFilePathTitle': 'Copier le chemin du fichier ({path})', 'filesView.editor.saveFile': 'Enregistrer le fichier', 'filesView.editor.exitFullscreen': 'Quitter le plein écran', 'filesView.editor.fullscreen': 'Plein écran', 'filesView.unsaved.title': 'Modifications non enregistrées', 'filesView.unsaved.description': 'Enregistrer vos modifications avant de continuer ?', 'filesView.unsaved.saveChanges': 'Enregistrer les modifications', 'filesView.unsaved.discard': 'Jeter', 'filesView.editor.back': 'Retour', 'filesView.editor.openFilesAria': 'Ouvrir des fichiers', 'filesView.editor.closeFileAria': 'Fermer {name}', 'filesView.editor.selectFile': 'Sélectionnez un fichier', 'filesView.editor.showControlsAria': 'Afficher les contrôles de l\'éditeur', 'filesView.editor.controlsTitle': 'Contrôles de l\'éditeur', 'filesView.editor.pickFileFromTree': 'Choisissez un fichier dans l\'arborescence.', 'filesView.state.loading': 'Chargement...', 'filesView.state.openingFileAtChange': 'Ouverture du fichier lors du changement...', 'filesView.tree.search.placeholder': 'Rechercher des fichiers...', 'filesView.tree.search.clearAria': 'Effacer la recherche', 'filesView.tree.search.searching': 'Recherche...', 'filesView.tree.actions.newFileTitle': 'Nouveau fichier', 'filesView.tree.actions.newFolderTitle': 'Nouveau dossier', 'filesView.tree.actions.refreshTitle': 'Rafraîchir', 'filesView.editor.imageAltFallback': 'Image', 'filesView.error.jsonViewerUnavailable': 'Visionneuse JSON indisponible', 'filesView.error.switchToTextMode': 'Passez en mode texte pour afficher le contenu brut.', 'filesView.warning.largeFilePreviewLimited': 'Ce fichier est volumineux ({sizeKb}KB). L\'aperçu peut être limité.', 'filesView.error.previewUnavailable': 'Aperçu indisponible', 'filesView.error.switchToEditMode': 'Passez en mode édition pour résoudre le problème.', 'filesView.error.readFileFailed': 'Échec de la lecture du fichier', 'filesView.editor.htmlPreviewTitle': 'Aperçu HTML', 'contextUsage.aria.label': 'Utilisation du contexte', 'contextUsage.mobile.title': 'Utilisation du contexte', 'contextUsage.mobile.usedTokens': 'Jetons utilisés', 'contextUsage.mobile.contextLimit': 'Limite de contexte', 'contextUsage.mobile.outputLimit': 'Limite de sortie', 'contextUsage.mobile.usage': 'Usage', 'contextUsage.tooltip.usedTokens': 'Jetons utilisés : {tokens}', 'contextUsage.tooltip.contextLimit': 'Limite de contexte : {tokens}', 'contextUsage.tooltip.outputLimit': 'Limite de sortie : {tokens}', 'contextSidebar.session.untitled': 'Session sans titre', 'contextSidebar.empty.openSession': 'Ouvrez une session pour inspecter le contexte.', 'contextSidebar.section.context': 'Contexte', 'contextSidebar.section.lastAssistantMessage': 'Dernier message de l\'assistant', 'contextSidebar.section.rawMessages': 'Messages bruts', 'contextSidebar.context.percentUsed': '{percent}% utilisé', 'contextSidebar.breakdown.user': 'Utilisateur', 'contextSidebar.breakdown.assistant': 'Assistant', 'contextSidebar.breakdown.toolCalls': 'Appels d\'outils', 'contextSidebar.breakdown.other': 'Autre', 'contextSidebar.stats.messages': 'Messages', 'contextSidebar.stats.user': 'Utilisateur', 'contextSidebar.stats.assistant': 'Assistant', 'contextSidebar.stats.cost': 'Coût', 'contextSidebar.tokens.input': 'Entrée', 'contextSidebar.tokens.output': 'Sortie', 'contextSidebar.tokens.reasoning': 'Raisonnement', 'contextSidebar.tokens.cacheRead': 'Lecture du cache', 'contextSidebar.tokens.cacheWrite': 'Écriture du cache', 'contextSidebar.tokens.cacheHit': 'Succès du cache', 'contextSidebar.actions.copyJson': 'Copier JSON', 'contextSidebar.actions.copy': 'Copie', 'contextSidebar.actions.copied': 'Copié', 'planView.file.defaultName': 'plan', 'planView.title.default': 'Plan', 'planView.error.saveFailed': 'Échec de l\'enregistrement', 'planView.error.previewUnavailable': 'Aperçu indisponible', 'planView.error.switchToEditMode': 'Passez en mode édition pour résoudre le problème.', 'planView.error.writeFailed': 'Échec de l\'écriture', 'planView.error.writePlanFileFailed': 'Échec de l\'écriture du fichier de plan ({status})', 'planView.actions.improvePlanAria': 'Améliorer le plan', 'planView.actions.improve': 'Améliorer', 'planView.actions.implementPlanAria': 'Plan de mise en œuvre', 'planView.actions.implement': 'Mettre en œuvre', 'planView.actions.sendToNewSession': 'Envoyer à une nouvelle session', 'planView.actions.sendToNewWorktreeSession': 'Envoyer à une nouvelle session Worktree', 'planView.actions.copyPlanContents': 'Copier le contenu du plan', 'planView.state.loading': 'Chargement...', 'diffView.binary.unavailable': 'Le contenu de ce fichier ne peut pas être visualisé.', 'diffView.change.untracked': 'Fichier non suivi', 'diffView.change.new': 'Nouveau fichier', 'diffView.change.deleted': 'Fichier supprimé', 'diffView.change.renamed': 'Fichier renommé', 'diffView.change.copied': 'Fichier copié', 'diffView.change.modified': 'Fichier modifié', 'diffView.selector.selectFile': 'Sélectionner un fichier', 'diffView.image.original': 'Original', 'diffView.image.modified': 'Modifié', 'diffView.image.new': 'Nouveau', 'diffView.image.originalAlt': 'Original: {path}', 'diffView.image.modifiedAlt': 'Modifié : {path}', 'diffView.section.files': 'Fichiers', 'diffView.state.selectSessionDirectory': 'Sélectionnez un répertoire de session pour afficher les différences', 'diffView.state.loadingRepositoryStatus': 'Chargement de l\'état du dépôt...', 'diffView.state.notGitRepository': 'Pas un dépôt git. Utilisez l\'onglet Git pour initialiser ou modifier des répertoires.', 'diffView.state.cleanWorkingTree': 'Worktree sans modifications, rien à afficher', 'diffView.state.failedToLoadDiff': 'Échec du chargement du différentiel', 'diffView.state.loadingDiff': 'Chargement du différentiel...', 'diffView.state.loadingChanges': 'Chargement des modifications...', 'diffView.state.largeDiff': 'Diff volumineux ({count} lignes modifiées)', 'diffView.state.largeDiffDescription': 'Le rendu peut être lent. Vous pouvez tout de même afficher le diff avec le bouton ci-dessous.', 'diffView.summary.changedFilesSingle': 'Le fichier {count} a été modifié', 'diffView.summary.changedFilesPlural': 'Fichiers {count} modifiés', "diffView.scope.changed": "Modifiés", "diffView.scope.staged": "Staged", "diffView.scope.selectorAria": "Sélectionner le mode de changements", 'diffView.actions.retry': 'Réessayer', 'diffView.actions.renderAnyway': 'Afficher quand même', 'diffView.actions.expandAll': 'Tout développer', 'diffView.actions.collapseAll': 'Tout réduire', 'diffView.actions.loadFullFiles': 'Charger les fichiers complets', 'diffView.actions.disableFullFiles': 'Ne plus charger les fichiers complets', 'diffView.actions.disableLineWrap': 'Désactiver le retour à la ligne', 'diffView.actions.enableLineWrap': 'Activer le retour à la ligne', 'diffView.actions.openFileInEditorAtChange': 'Ouvrez ce fichier dans l\'éditeur lors du changement', 'diffView.actions.openFileAtFirstChangedLine': 'Ouvrez ce fichier à la première ligne modifiée', 'diffView.actions.review': 'Revoir', 'diffView.actions.reviewAria': 'Revoir les changements', 'diffView.reviewDialog.title': 'Revoir les changements', 'diffView.reviewDialog.description': 'Démarre une session de revue séparée pour les changements actuels.', 'diffView.reviewDialog.generateHandoff': 'Générer un handoff', 'diffView.reviewDialog.info': 'Ce flux fonctionne mieux lorsqu’il est lancé depuis la session où les changements ont été implémentés.', 'diffView.reviewDialog.actions.cancel': 'Annuler', 'diffView.reviewDialog.actions.start': 'Revoir', 'diffView.reviewDialog.actions.starting': 'Démarrage...', 'diffView.reviewDialog.toast.noSessionDirectory': 'Le dossier de session est indisponible', 'diffView.reviewDialog.toast.startFailed': 'Impossible de démarrer le flux de revue', 'diffView.hunk.label': 'Sections', 'diffView.hunk.stage': 'Préparer', 'diffView.hunk.unstage': 'Retirer', 'diffView.hunk.discard': 'Annuler', 'diffView.hunk.stageTitle': 'Préparer la section {index}', 'diffView.hunk.unstageTitle': 'Retirer la section {index} de la préparation', 'diffView.hunk.discardTitle': 'Annuler la section {index}', 'diffView.hunk.unavailable': "Cette section n'est plus disponible. Actualisez le diff et réessayez.", 'diffView.hunk.unsupported': "La préparation de sections individuelles n'est pas prise en charge dans cet environnement.", 'rightSidebar.contextNotesTodo.plan.defaultTitle': 'Plan', 'rightSidebar.contextNotesTodo.empty.selectProject': 'Sélectionnez un projet pour ajouter des notes et des tâches.', 'rightSidebar.contextNotesTodo.notes.title': 'Notes rapides - {project}', 'rightSidebar.contextNotesTodo.notes.placeholder': 'Capturez le contexte, les rappels ou les liens', 'rightSidebar.contextNotesTodo.todo.title': 'Faire', 'rightSidebar.contextNotesTodo.todo.itemsSingle': 'Article {count}', 'rightSidebar.contextNotesTodo.todo.itemsPlural': 'Articles {count}', 'rightSidebar.contextNotesTodo.todo.clearCompleted': 'Effacer terminé', 'rightSidebar.contextNotesTodo.todo.inputPlaceholder': 'Ajouter une tâche', 'rightSidebar.contextNotesTodo.todo.addAria': 'Ajouter une tâche', 'rightSidebar.contextNotesTodo.todo.empty': 'Aucune tâche pour l\'instant. Ajoutez une petite liste de contrôle pour ce projet.', 'rightSidebar.contextNotesTodo.todo.actions.markComplete': 'Marque "{text}" terminée', 'rightSidebar.contextNotesTodo.todo.actions.collapse': 'Réduire la tâche "{text}"', 'rightSidebar.contextNotesTodo.todo.actions.expand': 'Développer la tâche "{text}"', 'rightSidebar.contextNotesTodo.todo.actions.delete': 'Supprimer "{text}"', 'rightSidebar.contextNotesTodo.todo.actions.send': 'Envoyer "{text}"', 'rightSidebar.contextNotesTodo.todo.actions.reorder': 'Récommander "{text}"', 'rightSidebar.contextNotesTodo.todo.resizeAria': 'Redimensionner la liste de tâches', 'rightSidebar.contextNotesTodo.todo.sendMenu.currentSession': 'Envoyer à la session en cours', 'rightSidebar.contextNotesTodo.todo.sendMenu.newSession': 'Envoyer à une nouvelle session', 'rightSidebar.contextNotesTodo.todo.sendMenu.newWorktreeSession': 'Envoyer à une nouvelle session Worktree', 'rightSidebar.contextNotesTodo.plans.title': 'Forfaits', 'rightSidebar.contextNotesTodo.plans.filesSingle': 'Fichier {count}', 'rightSidebar.contextNotesTodo.plans.filesPlural': 'Fichiers {count}', 'rightSidebar.contextNotesTodo.plans.importFromFile': 'Importer un plan à partir d\'un fichier', 'rightSidebar.contextNotesTodo.plans.empty': 'Aucun plan enregistré pour l\'instant.', 'rightSidebar.contextNotesTodo.plans.deletePlan': 'Supprimer le forfait', 'rightSidebar.contextNotesTodo.plans.deletePlanWithTitle': 'Supprimer le plan "{title}"', 'rightSidebar.contextNotesTodo.sendDialog.title.newSession': 'Envoyer à une nouvelle session', 'rightSidebar.contextNotesTodo.sendDialog.title.newWorktree': 'Envoyer vers un nouvel worktree', 'rightSidebar.contextNotesTodo.sendDialog.variant.default': 'Défaut', 'rightSidebar.contextNotesTodo.sendDialog.actions.cancel': 'Annuler', 'rightSidebar.contextNotesTodo.sendDialog.actions.send': 'Envoyer', 'rightSidebar.contextNotesTodo.sendDialog.actions.sending': 'Envoi', 'rightSidebar.contextNotesTodo.toast.saveNotesFailed': 'Échec de l\'enregistrement des notes du projet', 'rightSidebar.contextNotesTodo.toast.loadNotesFailed': 'Échec du chargement des notes de projet', 'rightSidebar.contextNotesTodo.toast.noActiveSession': 'Aucune session active sélectionnée', 'rightSidebar.contextNotesTodo.toast.sentToCurrentSession': 'Todo envoyé à la session en cours', 'rightSidebar.contextNotesTodo.toast.worktreeRequiresGitRepo': 'Les actions Worktree ne sont disponibles que pour les dépôts Git', 'rightSidebar.contextNotesTodo.toast.createSessionFailed': 'Échec de la création de la session', 'rightSidebar.contextNotesTodo.toast.sentToNewSession': 'Todo envoyé à une nouvelle session', 'rightSidebar.contextNotesTodo.toast.sentToNewWorktreeSession': 'Todo envoyé à une nouvelle session Worktree', 'rightSidebar.contextNotesTodo.toast.sendTodoFailed': 'Échec de l\'envoi de la tâche', 'rightSidebar.contextNotesTodo.toast.deletePlanFailed': 'Échec de la suppression du plan', 'rightSidebar.contextNotesTodo.toast.planFileEmpty': 'Le fichier de plan est vide', 'rightSidebar.contextNotesTodo.toast.importPlanFailed': 'Échec de l\'importation du plan', 'rightSidebar.contextNotesTodo.toast.planImported': 'Forfait importé', 'rightSidebar.contextNotesTodo.toast.readPlanFileFailed': 'Échec de la lecture du fichier de plan', 'inlineComment.range.lines': 'Lignes {start}-{end}', 'inlineComment.input.placeholder': 'Ajouter un commentaire... (Cmd+Entrée pour enregistrer)', 'inlineComment.actions.cancel': 'Annuler', 'inlineComment.actions.save': 'Sauvegarder', 'inlineComment.actions.comment': 'Commentaire', 'inlineComment.actions.showLess': 'Afficher moins', 'inlineComment.actions.showMore': 'Afficher plus', 'inlineComment.actions.editComment': 'Modifier le commentaire', 'inlineComment.actions.deleteComment': 'Supprimer le commentaire', 'inlineComment.toast.selectSessionToSave': 'Sélectionnez une session pour enregistrer le commentaire', 'header.github.connectedWithLogin': 'GitHub : {login}', 'header.github.connected': 'GitHub connecté', 'header.github.avatarWithLogin': 'Avatar {login}', 'header.github.avatar': 'Avatar GitHub', 'header.github.accountsTitle': 'Comptes GitHub', 'header.github.accountSource.oauth': 'OAuth', 'header.github.accountSource.cli': 'CLI', 'header.services.openWithCurrent': 'Instance ouverte, utilisation et MCP (actuel : {current})', 'header.services.open': 'Services ouverts, utilisation et MCP', 'header.services.tooltip.currentInstanceWithShortcuts': 'Instance actuelle : {current} ({toggle} ; onglet suivant {nextTab})', 'header.services.tooltip.servicesWithShortcuts': 'Services ({toggle} ; onglet suivant {nextTab})', 'header.services.title': 'Services', 'header.services.viewAria': 'Voir les prestations', 'header.services.closeAria': 'Fermer les prestations', 'header.services.rateLimits': 'Limites de taux', 'header.services.refreshRateLimitsAria': 'Limites du taux de rafraîchissement', 'header.services.noRateLimits': 'Aucune limite de taux disponible.', 'header.services.noRateLimitsReported': 'Aucune limite de taux signalée.', 'header.services.used': 'Utilisé', 'header.services.remaining': 'Restant', 'header.services.modelFamily.other': 'Autre', 'header.services.shutdownDev': 'Arrêter OpenChamber', 'header.actions.openPlanAria': 'Plan ouvert', "header.actions.toggleChangesPanel": "Panneau des changements", "header.actions.toggleChangesPanelAria": "Basculer le panneau des changements", 'header.actions.planWithShortcut': 'Forfait ({shortcut})', 'header.actions.terminalPanelWithShortcut': 'Panneau à bornes ({shortcut})', 'header.actions.toggleTerminalPanelAria': 'Basculer le panneau à bornes', 'terminalView.stream.processExitedMessage': '[Processus terminé{exitCodeSegment}{signalSegment}]', 'terminalView.stream.processExitedWithCode': 'avec le code {exitCode}', 'terminalView.stream.processExitedWithSignal': '(signal {signal})', 'terminalView.error.sessionEnded': 'Session terminale terminée', 'terminalView.error.connectionFailed': 'Échec de la connexion : {message}', 'terminalView.error.startSessionFailed': 'Échec du démarrage de la session de terminal', 'terminalView.error.restartFailed': 'Échec du redémarrage du terminal', 'terminalView.error.sendInputFailed': 'Échec de l\'envoi de l\'entrée', 'terminalView.empty.noWorkingDirectory': 'Aucun répertoire de travail disponible pour le terminal.', 'terminalView.empty.selectSession': 'Sélectionnez une session pour ouvrir le terminal.', 'terminalView.empty.noWorkingDirectoryForSession': 'Aucun répertoire de travail disponible pour cette session.', 'terminalView.actions.retry': 'Réessayer', 'terminalView.actions.hardRestart': 'Redémarrage dur', 'terminalView.actions.hardRestartTitle': 'Forcer la mise à mort et créer une nouvelle session', 'terminalView.quickKeys.escape': 'Échap', 'terminalView.quickKeys.tabAria': 'Languette', 'terminalView.quickKeys.controlLabel': 'Ctrl', 'terminalView.quickKeys.controlModifierAria': 'Modificateur de contrôle', 'terminalView.quickKeys.commandModifierAria': 'Modificateur de commande', 'terminalView.quickKeys.arrowUpAria': 'Flèche vers le haut', 'terminalView.quickKeys.arrowLeftAria': 'Flèche vers la gauche', 'terminalView.quickKeys.arrowDownAria': 'Flèche vers le bas', 'terminalView.quickKeys.arrowRightAria': 'Flèche vers la droite', 'terminalView.quickKeys.enterAria': 'Entrer', 'terminalView.tabs.closeTabTitle': 'Fermer l\'onglet', 'terminalView.tabs.newTabTitle': 'Nouvel onglet', 'terminalView.bottomDock.resizeAria': 'Redimensionner le panneau à bornes', 'terminalView.bottomDock.restoreTitle': 'Restaurer la hauteur du bornier', 'terminalView.bottomDock.restoreAria': 'Restaurer la hauteur du bornier', 'terminalView.bottomDock.expandTitle': 'Développer le panneau de connexion', 'terminalView.bottomDock.expandAria': 'Développer le panneau de connexion', 'terminalView.bottomDock.closeTitle': 'Fermer le panneau à bornes', 'terminalView.bottomDock.closeAria': 'Fermer le panneau à bornes', 'terminalView.viewport.inputAria': 'Entrée de borne', 'directoryExplorerDialog.title': 'Ajouter un répertoire de projet', 'directoryExplorerDialog.description': 'Choisissez un dossier à ajouter en tant que projet.', 'directoryExplorerDialog.toggle.showHidden': 'Afficher masqué', 'directoryExplorerDialog.pathInput.placeholder': 'Entrez le chemin ou sélectionnez dans l\'arborescence...', 'directoryExplorerDialog.actions.openingFinder': 'Ouverture...', 'directoryExplorerDialog.actions.openInFinder': 'Ouvrir dans le Finder', 'directoryExplorerDialog.actions.adding': 'Ajout...', 'directoryExplorerDialog.actions.addProject': 'Ajouter un projet', 'directoryExplorerDialog.actions.addLocalProject': 'Ajouter un projet local', 'directoryExplorerDialog.actions.cloneRepository': 'Cloner le dépôt', 'directoryExplorerDialog.actions.cloneAndAdd': 'Cloner et ajouter', 'directoryExplorerDialog.actions.cloning': 'Clonage...', 'directoryExplorerDialog.actions.createAndAdd': 'Créer et ajouter', 'directoryExplorerDialog.actions.alreadyAdded': 'Déjà ajouté', 'directoryExplorerDialog.clone.remoteUrlPlaceholder': 'URL du dépôt (HTTPS ou SSH)', 'directoryExplorerDialog.browse.directories': 'Annuaires', 'directoryExplorerDialog.browse.loading': 'Chargement des répertoires...', 'directoryExplorerDialog.browse.empty': 'Aucun répertoire correspondant.', 'directoryExplorerDialog.browse.parentDirectory': 'Annuaire parent', 'directoryExplorerDialog.browse.addedBadge': 'Ajouté', 'directoryExplorerDialog.browse.quickAdd': 'Ajouter', 'directoryExplorerDialog.footer.navigate': 'Naviguer', 'directoryExplorerDialog.footer.select': 'Sélectionner', 'directoryExplorerDialog.footer.add': 'Ajouter', 'directoryExplorerDialog.shortcut.enter': 'Entrer', 'directoryExplorerDialog.toast.unableToAccessDirectory': 'Impossible d\'accéder au répertoire', 'directoryExplorerDialog.toast.desktopDeniedAccess': 'Le bureau a refusé l\'accès au répertoire.', 'directoryExplorerDialog.toast.failedToOpenDirectory': 'Échec de l\'ouverture du répertoire', 'directoryExplorerDialog.toast.desktopCouldNotGrantAccess': 'Desktop n\'a pas pu accorder l\'accès aux fichiers.', 'directoryExplorerDialog.toast.failedToAddProject': 'Échec de l\'ajout du projet', 'directoryExplorerDialog.toast.cloneUrlRequired': 'Entrez dans un dépôt URL avant le clonage.', 'directoryExplorerDialog.toast.selectValidDirectoryPath': 'Veuillez sélectionner un chemin de répertoire valide.', 'directoryExplorerDialog.toast.failedToSelectDirectory': 'Échec de la sélection du répertoire', 'directoryExplorerDialog.toast.unknownError': 'Une erreur inconnue s\'est produite.', 'directoryTree.actions.createNewDirectory': 'Créer un nouveau répertoire', 'directoryTree.actions.pinDirectory': 'Répertoire des épingles', 'directoryTree.actions.unpinDirectory': 'Détacher le répertoire', 'directoryTree.actions.createDirectory': 'Créer un répertoire', 'directoryTree.actions.cancel': 'Annuler', 'directoryTree.actions.selectWorkingDirectoryAria': 'Sélectionnez le répertoire de travail', 'directoryTree.state.locatingHomeDirectory': 'Localisation du répertoire personnel...', 'directoryTree.state.loading': 'Chargement...', 'directoryTree.state.noDirectoriesFound': 'Aucun répertoire trouvé', 'directoryTree.section.pinned': 'Épinglé', 'directoryTree.section.browse': 'Parcourir', 'aboutDialog.versionLabel': 'Version {version}', 'aboutDialog.openChamberVersionLabel': 'Version OpenChamber {version}', 'aboutDialog.openCodeVersionLabel': 'Version OpenCode {version}', 'aboutDialog.actions.copyDiagnostics': 'Copier les diagnostics', 'aboutDialog.actions.preparingDiagnostics': 'Préparation du diagnostic...', 'aboutDialog.actions.diagnosticsCopied': 'Diagnostic copié', 'aboutDialog.diagnosticsDescription': 'Comprend l’état OpenChamber, l’état de santé OpenCode, les répertoires et les projets.', 'aboutDialog.footerNote': 'Fabriqué avec amour pour la communauté', 'aboutDialog.toast.copyFailed': 'Échec de la copie', 'aboutDialog.toast.diagnosticsNotReady': 'Les diagnostics ne sont pas encore prêts. Attendez une seconde et réessayez.', 'aboutDialog.toast.diagnosticsCopied': 'Diagnostic copié', 'helpDialog.title': 'Raccourcis clavier', 'helpDialog.description': 'Utilisez ces raccourcis clavier pour naviguer efficacement dans OpenChamber', 'helpDialog.section.navigationCommands': 'Navigation et commandes', 'helpDialog.section.sessionManagement': 'Gestion des sessions', 'helpDialog.section.panels': 'Panneaux', 'helpDialog.section.interface': 'Interface', 'helpDialog.item.openCommandPalette': 'Ouvrir la palette de commandes', 'helpDialog.item.showKeyboardShortcuts': 'Afficher les raccourcis clavier (cette boîte de dialogue)', 'helpDialog.item.toggleSessionSidebar': 'Toggle la barre latérale de la session', 'helpDialog.item.cycleAgent': 'Agent de cycle (entrée de chat)', 'helpDialog.item.openModelSelector': 'Ouvrir le sélecteur de modèle', 'helpDialog.item.navigateModels': 'Naviguer dans les modèles (dans le sélecteur)', 'helpDialog.item.adjustThinkingMode': 'Ajuster le mode de réflexion (dans le sélecteur, lorsqu\'il est pris en charge)', 'helpDialog.item.cycleThinkingVariant': 'Variante de pensée cyclique (raccourci global)', 'helpDialog.item.newWindow': 'Nouvelle fenêtre (ordinateur de bureau uniquement)', 'helpDialog.item.createNewSession': 'Créer une nouvelle session', 'helpDialog.item.createNewWorktreeDraft': 'Créer un nouveau brouillon d\'worktree', 'helpDialog.item.focusChatInput': 'Concentration sur la saisie du chat', 'helpDialog.item.abortActiveRun': 'Abandonner l’exécution active (double pression)', 'helpDialog.item.toggleRightSidebar': 'Basculer la barre latérale droite', 'helpDialog.item.openRightSidebarGitTab': 'Ouvrir l\'onglet Git de la barre latérale droite', 'helpDialog.item.openRightSidebarFilesTab': 'Ouvrir l\'onglet Fichiers de la barre latérale droite', 'helpDialog.item.cycleRightSidebarTab': 'Onglet de la barre latérale droite du cycle', 'helpDialog.item.toggleTerminalDock': 'Basculer la station d\'accueil du terminal', 'helpDialog.item.toggleTerminalExpanded': 'Terminal à bascule étendu', 'helpDialog.item.togglePlanContextPanel': 'Toggle Panneau contextuel du plan', 'helpDialog.item.cycleTheme': 'Basculer le thème (clair → sombre → système)', 'helpDialog.item.switchProject': 'Changer de projet', 'helpDialog.item.toggleServicesMenu': 'Basculer le menu des services', 'helpDialog.item.cycleServicesTab': 'Onglet Services de vélo', 'helpDialog.item.openSettings': 'Ouvrir les paramètres', 'helpDialog.keyCombiner.or': 'ou', 'helpDialog.proTips.title': 'Conseils de pro :', 'helpDialog.proTips.commandPalette': 'Utilisez la palette de commandes ({shortcut}) pour accéder rapidement à toutes les actions', 'helpDialog.proTips.recentSessions': 'Les 5 sessions les plus récentes apparaissent dans la palette de commandes', 'helpDialog.proTips.themeCycling': 'Le cyclisme thématique mémorise vos préférences au fil des sessions', 'header.actions.rightSidebarWithShortcut': 'Barre latérale droite ({shortcut})', 'header.actions.toggleRightSidebarAria': 'Basculer la barre latérale droite', 'header.actions.openAppMenu': 'Menu de OpenChamber', 'header.actions.openAppMenuAria': 'Ouvrir le menu OpenChamber', 'header.actions.openSessionsWithShortcut': 'Sessions ouvertes ({shortcut})', 'header.actions.openSessionsAria': 'Sessions ouvertes', 'header.actions.closeSessionsAria': 'Fermer les sessions', 'header.actions.newSessionAria': 'Nouvelle session', 'header.actions.newSessionWithShortcut': 'Nouvelle session ({shortcut})', 'header.actions.backAria': 'Retour', 'header.navigation.mainAria': 'Navigation principale', 'header.sessions.title': 'Sessions', 'header.changes.availableAria': 'Modifications disponibles', 'session.githubIssuePicker.error.noActiveProject': 'Aucun projet actif', 'session.githubIssuePicker.error.runtimeUnavailable': 'Exécution GitHub API indisponible', 'session.githubIssuePicker.error.notConnected': 'GitHub non connecté', 'session.githubIssuePicker.error.repoNotResolvable': 'Repo non résoluble', 'session.githubIssuePicker.error.repoMustBeGithub': 'Le dépôt distant origin doit pointer vers une URL GitHub', 'session.githubIssuePicker.error.issueNotFound': 'Problème introuvable', 'session.githubIssuePicker.error.noModelSelected': 'Aucun modèle sélectionné', 'session.githubIssuePicker.toast.loadMoreFailed': 'Échec du chargement d\'autres problèmes', 'session.githubIssuePicker.toast.loadIssueDetailsFailed': 'Échec du chargement des détails du problème', 'session.githubIssuePicker.toast.sendContextFailed': 'Échec de l\'envoi du contexte du problème', 'session.githubIssuePicker.toast.sessionCreated': 'Session créée à partir du problème', 'session.githubIssuePicker.toast.startSessionFailed': 'Échec du démarrage de la session', 'session.githubIssuePicker.title.select': 'Lien vers le problème GitHub', 'session.githubIssuePicker.title.createSession': 'Nouvelle session du numéro GitHub', 'session.githubIssuePicker.description.select': 'Sélectionnez un problème à lier à cette session.', 'session.githubIssuePicker.description.createSession': 'Lance une nouvelle session avec un contexte de problème masqué (titre/corps/étiquettes/commentaires).', 'session.githubIssuePicker.searchPlaceholder': 'Recherchez par titre ou #123, ou collez le numéro URL', 'session.githubIssuePicker.empty.noActiveProject': 'Aucun projet actif sélectionné.', 'session.githubIssuePicker.empty.runtimeUnavailable': 'L\'environnement d\'exécution GitHub API n\'est pas disponible.', 'session.githubIssuePicker.empty.notConnected': 'GitHub non connecté. Connectez votre compte GitHub dans les paramètres.', 'session.githubIssuePicker.empty.noIssuesFound': 'Aucun problème trouvé', 'session.githubIssuePicker.empty.noOpenIssuesFound': 'Aucun problème ouvert trouvé', 'session.githubIssuePicker.loading.issues': 'Problèmes de chargement...', 'session.githubIssuePicker.loading.more': 'Chargement...', 'session.githubIssuePicker.actions.openSettings': 'Ouvrir les paramètres', 'session.githubIssuePicker.actions.useIssue': 'Utilisez le numéro {number}', 'session.githubIssuePicker.actions.openInGitHubAria': 'Ouvrir dans GitHub', 'session.githubIssuePicker.actions.loadMore': 'Charger plus', 'session.githubIssuePicker.actions.sectionTitle': 'Actions', 'session.githubIssuePicker.actions.toggleWorktreeAria': 'Basculer le worktree', 'session.githubIssuePicker.actions.createInWorktree': 'Créer dans le worktree', 'session.githubIssuePicker.actions.openRepo': 'Ouvrir le dépôt', 'session.githubIssuePicker.actions.refresh': 'Rafraîchir', 'session.githubPrPicker.error.noActiveProject': 'Aucun projet actif', 'session.githubPrPicker.error.runtimeUnavailable': 'Exécution GitHub API indisponible', 'session.githubPrPicker.error.notConnected': 'GitHub non connecté', 'session.githubPrPicker.error.prNotFound': 'Demande d\'extraction introuvable', 'session.githubPrPicker.error.repoNotResolvable': 'Repo non résoluble', 'session.githubPrPicker.error.repoMustBeGithub': 'Le dépôt distant origin doit pointer vers une URL GitHub', 'session.githubPrPicker.toast.loadMoreFailed': 'Échec du chargement d\'autres demandes d\'extraction', 'session.githubPrPicker.toast.loadDetailsFailed': 'Échec du chargement des détails de la demande d\'extraction', 'session.githubPrPicker.title': 'Lier la PR GitHub', 'session.githubPrPicker.description': 'Sélectionnez une PR pour joindre un contexte de revue à ce message.', 'session.githubPrPicker.searchPlaceholder': 'Recherchez par titre ou #123, ou collez la demande d\'extraction URL', 'session.githubPrPicker.includeDiffAria': 'Inclure la différence PR dans le contexte ci-joint', 'session.githubPrPicker.includeDiff': 'Inclure la différence PR', 'session.githubPrPicker.empty.noActiveProject': 'Aucun projet actif sélectionné.', 'session.githubPrPicker.empty.runtimeUnavailable': 'L\'environnement d\'exécution GitHub API n\'est pas disponible.', 'session.githubPrPicker.empty.notConnected': 'GitHub non connecté. Connectez votre compte GitHub dans les paramètres.', 'session.githubPrPicker.empty.noPullRequestsFound': 'Aucune demande d\'extraction trouvée', 'session.githubPrPicker.empty.noOpenPullRequestsFound': 'Aucune demande d\'extraction ouverte trouvée', 'session.githubPrPicker.loading.pullRequests': 'Chargement des demandes d\'extraction...', 'session.githubPrPicker.loading.more': 'Chargement...', 'session.githubPrPicker.actions.openSettings': 'Ouvrir les paramètres', 'session.githubPrPicker.actions.usePullRequest': 'Utiliser la demande d\'extraction #{number}', 'session.githubPrPicker.actions.openInGitHubAria': 'Ouvrir dans GitHub', 'session.githubPrPicker.actions.loadMore': 'Charger plus', 'session.newWorktree.title': 'Nouveau worktree', 'session.newWorktree.mode.newBranch': 'Nouvelle branche', 'session.newWorktree.mode.existingBranch': 'Branche existante', 'session.newWorktree.selectBranch': 'Sélectionnez une branche', 'session.newWorktree.chooseBranch': 'Choisissez une branche...', 'session.newWorktree.fetchBranches': 'Récupérer des branches', 'session.newWorktree.searchBranches': 'Rechercher des branches...', 'session.newWorktree.loadingBranches': 'Chargement des branches...', 'session.newWorktree.noBranchesFound': 'Aucune branche trouvée', 'session.newWorktree.matchingBranches': 'Branches correspondantes', 'session.newWorktree.noMatchingBranches': 'Aucune branche correspondante', 'session.newWorktree.localBranches': 'Branches locales', 'session.newWorktree.remoteBranches': 'Branches du dépôt distant', 'session.newWorktree.otherLocalBranches': 'Autres branches locales', 'session.newWorktree.otherRemoteBranches': 'Autres branches du remote', 'session.newWorktree.branchName': 'Nom de la branche', 'session.newWorktree.branchNamePlaceholder': 'fonctionnalité/ma-fonctionnalité-géniale', 'session.newWorktree.actions.change': 'Changement', 'session.newWorktree.actions.startFromGitHubIssuePr': 'À partir de GitHub Issue/PR', 'session.newWorktree.usingPrBranch': 'Utilisation de la branche PR : {branch}', 'session.newWorktree.fromIssue': 'Extrait du numéro {number} : {title}', 'session.newWorktree.worktreeDirectory': 'Répertoire du worktree', 'session.newWorktree.worktreeDirectoryPlaceholder': 'mon-répertoire-worktree', 'session.newWorktree.resetToMatchBranchName': 'Réinitialiser pour correspondre au nom de la branche', 'session.newWorktree.sourceBranch': 'Branche source', 'session.newWorktree.selectSourceBranch': 'Sélectionnez la branche source', 'session.newWorktree.selectSourceBranchPlaceholder': 'Sélectionnez la branche source...', 'session.newWorktree.newBranchFromSource': 'Une nouvelle branche sera créée à partir de {source}', 'session.newWorktree.issueNumber': 'Numéro {number}', 'session.newWorktree.prNumber': 'PR #{number}', 'session.newWorktree.includeDiffBadge': '+diff', 'session.newWorktree.newSessionTitle': 'Nouvelle session', 'session.newWorktree.fromSource': 'de {source}', 'session.newWorktree.actions.cancel': 'Annuler', 'session.newWorktree.actions.creating': 'Création...', 'session.newWorktree.actions.createWorktree': 'Créer un worktree', 'session.newWorktree.actions.reset': 'Réinitialiser', 'session.newWorktree.error.noModelSelected': 'Aucun modèle sélectionné', 'session.newWorktree.error.noActiveProject': 'Aucun projet actif', 'session.newWorktree.error.branchNameRequired': 'Le nom de la branche est requis', 'session.newWorktree.error.worktreeDirectoryRequired': 'Le répertoire du worktree est requis', 'session.newWorktree.error.sendGitHubContextFailed': 'Échec de l\'envoi du contexte GitHub', 'session.newWorktree.error.createWorktreeFailed': 'Échec de la création du worktree', 'session.newWorktree.toast.sessionFromIssue': 'Session créée à partir du problème', 'session.newWorktree.toast.sessionFromPr': 'Session créée à partir de PR', 'session.newWorktree.toast.worktreeCreated': 'Worktree créé', 'session.newWorktree.toast.worktreeCreatedDescription': '{target} - démarrage en arrière-plan', 'session.githubIntegration.title': 'Sélectionnez parmi GitHub', 'session.githubIntegration.tabs.issues': 'Problèmes', 'session.githubIntegration.tabs.pullRequests': 'PR', 'session.githubIntegration.connect.title': 'Connectez-vous à GitHub', 'session.githubIntegration.connect.description': 'Lier des issues ou des PR pour remplir automatiquement les détails du worktree', 'session.githubIntegration.connect.action': 'Connectez GitHub', 'session.githubIntegration.search.issuesPlaceholder': 'Recherchez des problèmes ou entrez #123...', 'session.githubIntegration.search.prsPlaceholder': 'Recherchez les PR ou entrez #456...', 'session.githubIntegration.empty.noIssuesFound': 'Aucun problème trouvé', 'session.githubIntegration.empty.noPullRequestsFound': 'Aucune PR trouvée', 'session.githubIntegration.actions.loadMore': 'Charger plus', 'session.githubIntegration.actions.cancel': 'Annuler', 'session.githubIntegration.actions.select': 'Sélectionner', 'session.githubIntegration.selected.issueNumber': 'Numéro {number}', 'session.githubIntegration.selected.prNumber': 'PR #{number}', 'session.githubIntegration.includeDiffAria': 'Inclure la différence PR dans le contexte de la session', 'session.githubIntegration.includeDiff': 'Inclure la différence PR', 'session.githubIntegration.error.notConnected': 'GitHub non connecté', 'session.githubIntegration.error.loadDataFailed': 'Échec du chargement des données', 'session.githubIntegration.validation.branchAlreadyCheckedOut': 'La branche est déjà checkout dans un worktree', 'session.githubIntegration.validation.branchAlreadyExists': 'Une branche existe déjà localement', 'session.githubIntegration.validation.failed': 'Échec de la validation', 'chat.fileAttachment.toast.attachFailed': 'Impossible de joindre le fichier', 'chat.fileAttachment.toast.someFilesSkipped': 'Certains fichiers ont été ignorés :\n{summary}', 'chat.fileAttachment.toast.vscodePickFailed': 'Échec de la sélection des fichiers dans VS Code', 'chat.fileAttachment.fileFallback': 'déposer', 'chat.fileAttachment.skippedFallback': 'ignoré', 'chat.fileAttachment.actions.attachAria': 'Joindre des fichiers', 'chat.fileAttachment.actions.attach': 'Joindre des fichiers', 'chat.fileAttachment.actions.removeNamed': 'Supprimer {name}', 'chat.fileAttachment.actions.removeImage': 'Supprimer l\'image', 'chat.fileAttachment.activeEditor.addFile': 'Ajouter le fichier : {name} au contexte', 'chat.fileAttachment.activeEditor.pinSelection': 'Épingler la sélection au contexte', 'chat.fileAttachment.activeEditor.remove': 'Retirer du contexte', 'chat.pendingChanges.fileCountSingle': 'Fichier {count}', 'chat.pendingChanges.fileCountPlural': 'Fichiers {count}', 'chat.pendingChanges.changedInWorkspace': 'changé dans l\'espace de travail', 'chat.changedFiles.title': 'Fichiers modifiés', 'chat.changedFiles.actions.openFileTitle': 'Ouvrir {path}', 'chat.emptyState.opencodeUnreachable': 'OpenCode n\'est pas accessible', 'chat.emptyState.startNewChat': 'Démarrer une nouvelle discussion', 'chat.emptyState.draftTitle': 'Sur quoi travaillons-nous ?', 'chat.emptyState.draftTitleWithProject': 'Sur quoi travaillons-nous dans {project} ?', 'chat.scrollToBottom.aria': 'Faire défiler vers le bas', 'chat.timeline.relative.justNow': 'à l’instant', 'chat.timeline.relative.minutesAgo': 'il y a {count} min', 'chat.timeline.relative.hoursAgo': 'il y a {count} h', 'chat.timeline.relative.daysAgo': 'il y a {count} j', 'chat.timeline.title': 'Chronologie des conversations', 'chat.timeline.description': 'Accédez à n’importe quel point de la conversation ou créez une nouvelle session', 'chat.timeline.searchPlaceholder': 'Rechercher des messages...', 'chat.timeline.empty.search': 'Aucun message trouvé', 'chat.timeline.empty.session': 'Aucun message dans cette session pour le moment', 'chat.timeline.noTextContent': '[Aucun contenu textuel]', 'chat.timeline.actions.title': 'Actions', 'chat.timeline.actions.revertFromHere': 'Revenir à partir d\'ici', 'chat.timeline.actions.forkFromHere': 'Fourche d\'ici', 'chat.timeline.actions.previousTurn': 'Tour précédent', 'chat.timeline.actions.latest': 'Dernier', 'chat.timeline.help.clickMessage': 'Cliquez sur un message pour y faire défiler la conversation', 'chat.timeline.help.undoToPoint': 'Annuler jusqu\'à présent (le texte du message remplira la saisie)', 'chat.timeline.help.createSessionFromHere': 'Créez une nouvelle session à partir d\'ici', 'chat.statusRow.todo.status.inProgress': 'En cours', 'chat.statusRow.todo.status.pending': 'En attente', 'chat.statusRow.todo.status.completed': 'Complété', 'chat.statusRow.todo.status.cancelled': 'Annulé', 'chat.statusRow.todo.priority.high': 'Haute priorité', 'chat.statusRow.todo.priority.medium': 'Priorité moyenne', 'chat.statusRow.todo.priority.low': 'Faible priorité', 'chat.statusRow.actions.stopGeneratingAria': 'Arrêter de générer', 'chat.statusRow.tasksTitle': 'Tâches', 'chat.statusRow.summary.activeLeft': '{active} actif · {left} gauche', 'chat.statusRow.aborted': 'Avorté', 'chat.revertIndicator.redo': 'Refaire', 'chat.revertIndicator.redoAria': 'Rétablir : restaurer les messages annulés', 'chat.revertPopover.title': 'Rétabli', 'chat.revertPopover.noTextContent': 'Aucun contenu textuel', 'chat.revertPopover.forkFromHere': 'Fourche d\'ici', 'chat.revertPopover.forkFromMessage': 'Fork de ce message', 'chat.revertPopover.restoreAll': 'Tout restaurer', 'chat.revertPopover.restore': 'Restaurer', 'chat.revertPopover.revert': 'Revenir', 'chat.revertPopover.fork': 'Fourchette', 'chat.revert.toast.undo': 'Revenu à {preview}', 'chat.revert.toast.redo': 'Refait', 'chat.revert.toast.restored': 'Restauré tous les messages', 'chat.errorBoundary.title': 'Erreur de discussion', 'chat.errorBoundary.description': 'L\'interface de discussion a rencontré une erreur. Cela peut être dû à un problème de réseau temporaire ou à des données de message corrompues.', 'chat.errorBoundary.sessionLabel': 'Session', 'chat.errorBoundary.detailsSummary': 'Détails de l\'erreur', 'chat.errorBoundary.resetAction': 'Réinitialiser le chat', 'chat.errorBoundary.persistentHint': 'Si le problème persiste, essayez d\'actualiser la page.', 'chat.autocomplete.tabs.commands': 'Commandes', 'chat.autocomplete.tabs.agents': 'Agents', 'chat.autocomplete.tabs.files': 'Fichiers', 'chat.autocomplete.keyboardHint': '↑↓ naviguer • Entrer sélectionner • Esc fermer', 'chat.commandAutocomplete.command.initDescription': 'Créer/mettre à jour le fichier AGENTS.md', 'chat.commandAutocomplete.command.undoDescription': 'Annuler le dernier message', 'chat.commandAutocomplete.command.redoDescription': 'Refaire les messages précédemment annulés', 'chat.commandAutocomplete.command.timelineDescription': 'Ouvrir la chronologie de la conversation', 'chat.commandAutocomplete.command.compactDescription': 'Compresser l\'historique des sessions à l\'aide de l\'IA pour réduire la taille du contexte', 'chat.commandAutocomplete.command.summaryDescription': 'Résumé de session non destructif. Indice de sujet facultatif après la commande.', 'chat.commandAutocomplete.command.workspaceReviewDescription': 'Examinez les modifications actuelles de l’espace de travail pour les problèmes de signal élevé uniquement.', 'chat.commandAutocomplete.badge.skill': 'skill', 'chat.commandAutocomplete.badge.command': 'commande', 'chat.commandAutocomplete.badge.system': 'système', 'chat.commandAutocomplete.empty': 'Aucune commande trouvée', 'chat.agentMentionAutocomplete.badge.system': 'système', 'chat.agentMentionAutocomplete.empty': 'Aucun agent trouvé', 'chat.fileMentionAutocomplete.searchMoreAgents': 'Tapez pour rechercher plus d\'agents', 'chat.fileMentionAutocomplete.empty': 'Aucune correspondance trouvée', 'chat.queuedMessage.attachments': '+Fichier(s) {count}', 'chat.queuedMessage.empty': '(vide)', 'chat.queuedMessage.title': 'Messages en file d\'attente', 'chat.queuedMessage.edit': 'modifier', 'chat.queuedMessage.send': 'envoyer', 'chat.queuedMessage.removeAria': 'Supprimer de la file d\'attente', 'chat.container.returnToParent.aria': 'Retour à la session parents', 'chat.container.returnToParent.titleNamed': 'Retourner à : {title}', 'chat.container.returnToParent.title': 'Retour à la session parents', 'chat.container.returnToParent.label': 'Mère', 'chat.container.readOnlySubagentPromptBanner': 'Les sessions de sous-agent ne peuvent pas être invitées.', 'chat.unifiedControls.title': 'Contrôles', 'chat.unifiedControls.model.title': 'Modèle', 'chat.unifiedControls.model.noRecent': 'Aucun modèle récent', 'chat.unifiedControls.model.moreAria': 'Plus de modèles', 'chat.unifiedControls.effort.title': 'Effort', 'chat.unifiedControls.effort.moreAria': 'Plus d\'options d\'effort', 'chat.questionCard.summaryTab': 'Résumé', 'chat.questionCard.noAnswer': '(pas de réponse)', 'chat.questionCard.inputNeeded': 'Entrée nécessaire', 'chat.questionCard.fromSubagent': 'Du sous-agent', 'chat.questionCard.questionFallback': 'Question {index}', 'chat.questionCard.selectMultiple': 'Sélectionnez plusieurs', 'chat.questionCard.recommended': 'recommandé', 'chat.questionCard.other': 'Autre…', 'chat.questionCard.yourAnswer': 'Votre Réponse', 'chat.questionCard.submit': 'Soumettre', 'chat.questionCard.next': 'Suivant', 'chat.questionCard.dismiss': 'Ignorer', 'chat.questionCard.copyMarkdown': 'Copier en Markdown', 'chat.questionCard.copyJson': 'Copier sous JSON', 'chat.questionCard.copiedMarkdown': 'Question copiée en tant que Markdown', 'chat.questionCard.copiedJson': 'Question copiée sous le nom JSON', 'chat.questionCard.copyFailed': 'Échec de la copie de la question', 'chat.textSelection.toast.noProject': 'Aucun projet trouvé pour cette session', 'chat.textSelection.toast.addToNotesFailed': 'Échec de l\'ajout aux notes', 'chat.textSelection.toast.addToNotesSuccess': 'Ajout du texte sélectionné aux notes', 'chat.textSelection.toast.addToNotesSummaryFailed': 'Impossible de résumer la sélection, ajout du texte sélectionné aux notes', 'chat.textSelection.actions.addToChat': 'Ajouter au chat', 'chat.textSelection.actions.newSession': 'Nouvelle session', 'chat.textSelection.actions.copy': 'Copie', 'chat.textSelection.actions.addToNotes': 'Ajouter aux notes', 'chat.textSelection.title.addToCurrentChat': 'Ajouter au chat actuel', 'chat.textSelection.title.newSessionWithSelection': 'Créer une nouvelle session avec sélection', 'chat.textSelection.title.saveInsightToNotes': 'Enregistrer le texte sélectionné dans les notes', 'chat.messageBody.actions.revertAria': 'Revenir à ce message', 'chat.messageBody.actions.revert': 'Revenir à partir d\'ici', 'chat.messageBody.actions.forkAria': 'Fork de ce message', 'chat.messageBody.actions.fork': 'Fourche d\'ici', 'chat.messageBody.actions.copyMessageAria': 'Copier le texte du message', 'chat.messageBody.actions.copyMessage': 'Copier le message', 'chat.messageBody.actions.openPreviewAria': 'Ouvrir l\'aperçu', 'chat.messageBody.actions.openPreview': 'Ouvrir l\'aperçu', 'chat.messageBody.actions.copyAnswer': 'Copier la réponse', 'chat.messageBody.actions.savingImage': 'Enregistrement de l\'image...', 'chat.messageBody.actions.saveAsImage': 'Enregistrer sous image', 'chat.messageBody.actions.saveAsPlan': 'Enregistrer comme forfait', 'chat.messageBody.actions.startNewSession': 'Démarrer une nouvelle session à partir de cette réponse', 'chat.messageBody.actions.startNewMultiRun': 'Démarrer une nouvelle exécution multiple à partir de cette réponse', 'chat.generatedResult.actions.copy': 'Copie', 'chat.generatedResult.actions.copied': 'Copié', 'chat.generatedResult.commit.title': 'Message de commit généré', 'chat.generatedResult.commit.highlights': 'Points forts', 'chat.generatedResult.pullRequest.title': 'Demande d\'extraction générée', 'chat.generatedResult.pullRequest.titleLabel': 'Titre', 'chat.generatedResult.pullRequest.bodyLabel': 'Corps', 'chat.messageBody.tts.stopSpeaking': 'Arrête de parler', 'chat.messageBody.tts.readAloud': 'Lire à haute voix', 'chat.messageBody.tts.readAloudWithProvider': 'Lire à haute voix (voix {provider})', 'chat.messageBody.toast.noProject': 'Aucun projet trouvé pour cette session', 'chat.messageBody.toast.savePlanFailed': 'Échec de l\'enregistrement du plan', 'chat.messageBody.toast.planSaved': 'Forfait enregistré', 'chat.messageBody.toast.imageSaved': 'Image enregistrée', 'chat.messageBody.toast.generateImageFailed': 'Échec de la génération de l\'image', 'chat.chatInput.actions.commands': 'Commandes', 'chat.chatInput.actions.attachFiles': 'Joindre des fichiers', 'chat.chatInput.actions.addAttachment': 'Ajouter une pièce jointe', 'chat.chatInput.actions.linkGithubIssue': 'Lien vers le problème GitHub', 'chat.chatInput.actions.linkGithubPr': 'Lien GitHub PR', 'chat.chatInput.actions.modelAgentSettings': 'Paramètres du modèle et de l\'agent', 'chat.chatInput.actions.sendMessageAria': 'Envoyer un message', 'chat.chatInput.actions.queueMessageAria': 'Message de file d\'attente', 'chat.chatInput.actions.stopGeneratingAria': 'Arrêter de générer', 'chat.chatInput.focusMode.toggleAria': 'Basculer le mode de mise au point', 'chat.chatInput.focusMode.label': 'Mode de mise au point', 'chat.chatInput.permissionAutoAccept.disable': 'Désactiver l\'acceptation automatique des autorisations', 'chat.chatInput.permissionAutoAccept.enable': 'Activer l\'acceptation automatique des autorisations', 'chat.chatInput.permissionAutoAccept.on': 'Acceptation automatique des autorisations : activée', 'chat.chatInput.permissionAutoAccept.off': 'Acceptation automatique des autorisations : désactivée', 'chat.chatInput.linked.byAuthor': 'par {author}', 'chat.chatInput.linked.issue.openInBrowserAria': 'Problème ouvert dans le navigateur', 'chat.chatInput.linked.issue.removeAria': 'Supprimer le problème lié', 'chat.chatInput.linked.pr.number': 'PR #{number}', 'chat.chatInput.linked.pr.openInBrowserAria': 'Ouvrir la demande d\'extraction dans le navigateur', 'chat.chatInput.linked.pr.removeAria': 'Supprimer la demande d\'extraction liée', 'chat.chatInput.placeholder.shell': 'Entrez la commande shell...', 'chat.chatInput.placeholder.chat': '@ pour les fichiers/agents ; / pour les commandes et les skills ; ! pour shell ; # pour les extraits', 'chat.chatInput.placeholder.chatCompact': 'Utiliser @ / ! # pour les aides', 'chat.chatInput.placeholder.selectSession': 'Sélectionnez ou créez une session pour commencer à discuter', 'chat.snippetAutocomplete.action.addNew': '+ Ajouter un nouvel extrait', 'chat.snippetAutocomplete.empty': 'Aucun extrait trouvé', 'chat.snippetAutocomplete.footer': '↑↓ naviguer • Entrer sélectionner • Esc fermer', 'snippets.source.global': 'mondial', 'snippets.source.project': 'projet', 'chat.chatInput.toast.compactFailed': 'Échec du compactage de la session', 'chat.chatInput.toast.summaryFailed': 'Échec de la génération du résumé', 'chat.chatInput.toast.reviewFailed': 'Échec de l\'examen des modifications', 'chat.chatInput.toast.attachmentsTooLarge': 'Les pièces jointes sont trop volumineuses pour être envoyées. Veuillez essayer de réduire le nombre ou la taille des images.', 'chat.chatInput.toast.sendAttachmentsFailed': 'Échec de l\'envoi des pièces jointes. Essayez moins de fichiers ou des images plus petites.', 'chat.chatInput.toast.messageSendFailed': 'Le message n\'a pas pu être envoyé. Pièces jointes restaurées.', 'chat.chatInput.toast.clipboardAttachFailed': 'Échec de la pièce jointe de l\'image du presse-papiers', 'chat.chatInput.toast.addedFileMentions': 'Ajout des mentions du fichier {count}', 'chat.chatInput.toast.attachFileFailed': 'Impossible de joindre le fichier', 'chat.chatInput.toast.attachNamedFailed': 'Échec de la connexion du {name}', 'chat.chatInput.toast.someFilesSkipped': 'Certains fichiers ont été ignorés :\n{summary}', 'chat.chatInput.toast.vscodePickFailed': 'Échec de la sélection des fichiers dans VS Code', 'chat.chatInput.toast.openSessionFirst': 'Ouvrir d\'abord une session', 'chat.chatInput.toast.togglePermissionAutoAcceptFailed': 'Échec de l\'activation de l\'acceptation automatique des autorisations', 'chat.chatInput.reviewComments': 'Commentaires de révision :', 'chat.chatInput.devServerLogs': 'Journaux du serveur de développement :', 'chat.chatInput.devServerLogsRemove': 'Supprimer les journaux du serveur de développement', 'chat.chatInput.previewAnnotations': 'Aperçu des annotations :', 'chat.chatInput.previewContext': 'Contexte d\'aperçu :', 'chat.chatInput.previewContextRemove': 'Supprimer le contexte d\'aperçu', 'chat.chatInput.projectRoot': 'Racine du projet', 'chat.chatInput.branch': 'Bifurquer', 'chat.chatInput.worktrees': 'Worktrees', 'chat.chatInput.worktreeNew': '+ Nouveau', 'chat.chatInput.drop.insertMention': 'Déposer pour insérer comme mention', 'chat.chatInput.drop.attachFiles': 'Déposez les fichiers ici pour les joindre', 'chat.chatInput.fileFallback': 'déposer', 'chat.mobileStatus.editProjects.title': 'Modifier des projets', 'chat.mobileStatus.editProjects.footer': 'Faites glisser les éléments pour les réorganiser ou utilisez les flèches pour les déplacer. Appuyez sur modifier pour modifier les détails.', 'chat.mobileStatus.editProjects.empty': 'Aucun projet à modifier', 'chat.mobileStatus.projects.empty': 'Aucun projet', 'chat.mobileStatus.projects.addAria': 'Ajouter un projet', 'chat.mobileStatus.projects.removeTitle': 'Supprimer le projet', 'chat.mobileStatus.projects.removeDescriptionPrefix': 'Etes-vous sûr de vouloir supprimer', 'chat.mobileStatus.projects.cancel': 'Annuler', 'chat.mobileStatus.projects.remove': 'Retirer', 'chat.mobileStatus.new': 'Nouveau', 'chat.mobileStatus.noSessionsInProject': 'Aucune session dans ce projet', 'chat.mobileStatus.swipeHint': '← Glissez ici pour ouvrir les barres latérales →', 'chat.mobileStatus.toast.addProjectFailed': 'Échec de l\'ajout du projet', 'chat.mobileStatus.toast.selectValidDirectory': 'Veuillez sélectionner un répertoire valide.', 'chat.mobileStatus.toast.selectDirectoryFailed': 'Échec de la sélection du répertoire', 'chat.toolOutputDialog.image.previousAria': 'Image précédente', 'chat.toolOutputDialog.image.nextAria': 'Image suivante', 'chat.toolOutputDialog.image.closeAria': 'Fermer l\'aperçu de l\'image', 'chat.toolOutputDialog.mermaid.missingSource': 'URL de source Mermaid manquante.', 'chat.toolOutputDialog.mermaid.loadFailed': 'Impossible de charger le diagramme Mermaid.', 'chat.toolOutputDialog.mermaid.closeAria': 'Fermer l\'aperçu du diagramme', 'chat.toolOutputDialog.mermaid.loading': 'Diagramme de chargement...', 'chat.toolOutputDialog.mermaid.renderFailed': 'Impossible d\'afficher le diagramme Mermaid.', 'chat.toolOutputDialog.mermaid.retry': 'Réessayer', 'chat.toolOutputDialog.commandCompleted': 'Commande terminée avec succès', 'chat.toolOutputDialog.noOutputProduced': 'Aucune sortie n\'a été produite', 'chat.toolPart.lspErrors': 'Erreurs LSP', 'chat.toolPart.moreErrors': '+{count} plus d\'erreurs', 'chat.toolPart.error': 'Erreur:', 'chat.toolPart.awaitingResponse': 'En attente de réponse...', 'chat.toolPart.noOutputProduced': 'Aucune sortie produite', 'chat.toolPart.output': 'Sortie', 'chat.toolPart.openSubtask': 'Ouvrir la sous-tâche {type}', 'chat.todo.total': 'Total', 'chat.todo.inProgress': 'En cours', 'chat.todo.pending': 'En attente', 'chat.todo.completed': 'Complété', 'chat.todo.cancelled': 'Annulé', 'chat.permissionCard.workingDirectory': 'Répertoire de travail :', 'chat.permissionCard.timeout': 'Temps mort:', 'chat.permissionCard.request': 'Demande:', 'chat.permissionCard.headers': 'En-têtes :', 'chat.permissionCard.body': 'Corps:', 'chat.permissionCard.action': 'Action:', 'chat.permissionCard.details': 'Détails:', 'chat.permissionCard.patterns': 'Motifs:', 'chat.permissionToast.sessionFallback': 'Session', 'chat.permissionToast.permissionFallback': 'Détails de l\'autorisation indisponibles', 'chat.permissionToast.labels.session': 'Session:', 'chat.permissionToast.labels.permission': 'Autorisation:', 'chat.permissionToast.actions.once': 'Une fois', 'chat.permissionToast.actions.always': 'Toujours', 'chat.permissionToast.actions.deny': 'Refuser', 'chat.permissionToast.actions.approveOnceAria': 'Approuver une fois', 'chat.permissionToast.actions.approveOnceAriaWithSession': 'Approuver une fois pour {session}', 'chat.permissionToast.actions.approveAlwaysAria': 'Approuver toujours', 'chat.permissionToast.actions.approveAlwaysAriaWithSession': 'Approuver toujours pour {session}', 'chat.permissionToast.actions.denyAria': 'Refuser l\'autorisation', 'chat.permissionToast.actions.denyAriaWithSession': 'Refuser l\'autorisation pour {session}', 'chat.permissionRequest.required': 'Autorisation requise :', 'chat.permissionRequest.actions.once': 'Une fois', 'chat.permissionRequest.actions.always': 'Toujours', 'chat.permissionRequest.actions.reject': 'Refuser', 'chat.modelControls.provider': 'Fournisseur', 'chat.modelControls.capability.toolCalling': 'Appel d\'outil', 'chat.modelControls.capability.reasoning': 'Raisonnement', 'chat.modelControls.modality.text': 'Texte', 'chat.modelControls.modality.image': 'Image', 'chat.modelControls.modality.video': 'Vidéo', 'chat.modelControls.modality.audio': 'Audio', 'chat.modelControls.modality.pdf': 'PDF', 'chat.modelControls.capabilities': 'Capacités', 'chat.modelControls.modalities': 'Modalités', 'chat.modelControls.input': 'Entrée', 'chat.modelControls.output': 'Sortie', 'chat.modelControls.limits': 'Limites', 'chat.modelControls.context': 'Contexte', 'chat.modelControls.metadata': 'Métadonnées', 'chat.modelControls.knowledge': 'Connaissance', 'chat.modelControls.release': 'Libérer', 'chat.modelControls.mode': 'Mode', 'chat.modelControls.model': 'Modèle', 'chat.modelControls.temperature': 'Température', 'chat.modelControls.topP': 'Haut P', 'chat.modelControls.permissions': 'Autorisations', 'chat.modelControls.edit': 'Modifier', 'chat.modelControls.bash': 'Bash', 'chat.modelControls.webFetch': 'WebFetch', 'chat.modelControls.customPrompt': 'Prompt personnalisé', 'chat.modelControls.selectModel': 'Sélectionnez le modèle', 'chat.modelControls.searchProvidersOrModels': 'Rechercher des fournisseurs ou des modèles', 'chat.modelControls.clearSearch': 'Effacer la recherche', 'chat.modelControls.current': 'Actuel', 'chat.modelControls.thinking': 'Pensée', 'chat.modelControls.default': 'Défaut', 'chat.modelControls.selectAgent': 'Sélectionnez un agent', 'chat.modelControls.costPerMillion': 'Coût ($/1 million de jetons)', 'chat.modelControls.metadataUnavailable': 'Métadonnées du modèle indisponibles.', 'chat.modelControls.addNewProvider': 'Ajouter un nouveau fournisseur', 'chat.modelControls.noAgentSelected': 'Aucun agent sélectionné.', 'chat.modelControls.resetToDefault': 'Réinitialiser aux valeurs par défaut', 'chat.modelControls.searchModels': 'Rechercher des modèles', 'chat.modelControls.searchAgents': 'Agents de recherche', 'chat.modelControls.noModelsFound': 'Aucun modèle trouvé', 'chat.modelControls.favorites': 'Favoris', 'chat.modelControls.recent': 'Récents', 'chat.modelControls.addToFavorites': 'Ajouter aux favoris', 'chat.modelControls.removeFromFavorites': 'Supprimer des favoris', 'chat.modelControls.favoriteAria': 'Préféré', 'chat.modelControls.unfavoriteAria': 'Supprimer des favoris', 'chat.modelControls.collapseProvider': 'Fournisseur de réduction', 'chat.modelControls.expandProvider': 'Développer le fournisseur', 'chat.modelControls.keyboardHint': '↑↓ naviguer{thinking} • Entrer sélectionner • Esc fermer', 'chat.modelControls.keyboardHintNavigate': '↑↓ naviguer', 'chat.modelControls.keyboardHintSwitchAgent': 'Agent de commutation {shortcut}', 'chat.modelControls.keyboardHintThinking': '←→ penser', 'chat.modelControls.showThinkingModes': 'Afficher les modes de réflexion', 'chat.modelControls.hideThinkingModes': 'Masquer les modes de réflexion', 'chat.modelControls.moreThinkingModes': 'Plus de modes de réflexion', 'chat.modelControls.noProvidersOrModelsFound': 'Aucun fournisseur ou modèle ne correspond à votre recherche.', 'chat.modelControls.reorderFavoriteAria': 'Réorganiser les favoris', 'chat.modelControls.reorderFavoriteTitle': 'Faites glisser pour réorganiser les favoris', 'chat.modelControls.permissionLabel.custom': 'Personnalisé', 'chat.modelControls.permissionLabel.allow': 'Permettre', 'chat.modelControls.permissionLabel.deny': 'Refuser', 'chat.modelControls.permissionLabel.ask': 'Demander', 'chat.modelControls.modeValue.primary': 'Primaire', 'chat.modelControls.modeValue.subagent': 'Sous-agent', 'chat.modelControls.modeValue.all': 'Tous', 'chat.modelControls.modeValue.none': '—', 'chat.reasoningTrace.thinking': 'Pensée', 'chat.reasoningTrace.justification': 'Justification', 'chat.reasoningTrace.expandAria': 'Développer la trace du raisonnement', 'chat.reasoningTrace.collapseAria': 'Réduire la trace du raisonnement', 'chat.reasoningTrace.thought': 'Pensée', 'chat.messageBody.subtask.title': 'Tâche déléguée', 'chat.messageBody.subtask.hidePrompt': 'Masquer le prompt', 'chat.messageBody.subtask.showPrompt': 'Afficher le prompt', 'chat.messageBody.subtask.openSession': 'Ouvrir une session de sous-tâche', 'chat.messageBody.shellCommand.title': 'Commande Shell', 'chat.messageBody.shellCommand.hideOutput': 'Masquer la sortie', 'chat.messageBody.shellCommand.showOutput': 'Afficher la sortie', 'chat.messageBody.shellCommand.copied': 'Copié', 'chat.messageBody.shellCommand.copyOutput': 'Copier la sortie', 'commandPalette.title': 'Palette de commandes', 'commandPalette.description': 'Recherchez des fichiers, des sessions et des commandes.', 'commandPalette.input.placeholder': 'Rechercher des fichiers, des sessions, des commandes...', 'commandPalette.empty.noResults': 'Aucun résultat trouvé.', 'commandPalette.empty.searchingFiles': 'Recherche de fichiers...', 'commandPalette.item.newSession': 'Nouvelle session', 'commandPalette.item.newMiniChat': 'Nouvelle mini-fenêtre de discussion', 'commandPalette.item.newWorktreeDraft': 'Nouveau brouillon d\'worktree', 'commandPalette.item.addProject': 'Ajouter un projet', 'commandPalette.item.showSessionSwitcher': 'Afficher le sélecteur de session', 'commandPalette.item.toggleSidebar': 'Basculer la barre latérale', 'commandPalette.item.toggleRightSidebar': 'Basculer la barre latérale droite', 'commandPalette.item.showContextUsage': 'Afficher l\'utilisation du contexte', 'commandPalette.item.toggleTerminal': 'Basculer le terminal', 'commandPalette.item.openSettings': 'Ouvrez les paramètres...', 'commandPalette.session.untitled': 'Session sans titre', 'openCodeStatusDialog.title': 'Statut OpenCode', 'openCodeStatusDialog.description': 'Inspectez l’état et les diagnostics actuels du OpenCode.', 'openCodeStatusDialog.actions.copy': 'Copie', 'openCodeStatusDialog.empty.noData': 'Aucune donnée.', 'openCodeStatusDialog.toast.copiedTitle': 'Copié', 'openCodeStatusDialog.toast.copiedDescription': 'Statut copié dans le presse-papiers', 'openCodeStatusDialog.toast.copyFailed': 'Échec de la copie du statut', 'saveProjectPlanDialog.title': 'Enregistrer le plan de projet', 'saveProjectPlanDialog.description': 'Enregistrez ce plan dans votre projet en tant que fichier Markdown.', 'saveProjectPlanDialog.field.title': 'Titre', 'saveProjectPlanDialog.field.titlePlaceholder': 'Titre du plan', 'saveProjectPlanDialog.field.contentPreview': 'Aperçu du contenu', 'saveProjectPlanDialog.actions.cancel': 'Annuler', 'saveProjectPlanDialog.actions.save': 'Sauvegarder', 'saveProjectPlanDialog.actions.saving': 'Enregistrement...', 'branchPickerDialog.title': 'Sélecteur de branches', 'branchPickerDialog.description.localBranchesForProject': 'Branches locales pour {project}', 'branchPickerDialog.description.selectProject': 'Sélectionnez un projet pour afficher les branches', 'branchPickerDialog.search.placeholder': 'Rechercher des branches...', 'branchPickerDialog.search.renameBranchPlaceholder': 'Renommer la branche', 'branchPickerDialog.state.noProjectSelected': 'Aucun projet sélectionné', 'branchPickerDialog.state.loadingBranches': 'Chargement des branches...', 'branchPickerDialog.state.noMatchingBranches': 'Aucune branche correspondante', 'branchPickerDialog.state.noBranchesFound': 'Aucune branche trouvée', 'branchPickerDialog.badge.head': 'HEAD', 'branchPickerDialog.badge.worktree': 'worktree', 'branchPickerDialog.actions.createWorktreeAria': 'Créer un worktree à partir d\'une branche', 'branchPickerDialog.actions.renameAria': 'Renommer la branche', 'branchPickerDialog.actions.deleteAria': 'Supprimer la branche', 'branchPickerDialog.actions.deleteWorktreeAria': 'Supprimer le worktree', 'branchPickerDialog.actions.confirmRenameAria': 'Confirmer le changement de nom', 'branchPickerDialog.actions.cancelRenameAria': 'Annuler le changement de nom', 'branchPickerDialog.actions.confirmDeleteAria': 'Confirmer la suppression de la branche', 'branchPickerDialog.actions.cancelDeleteAria': 'Annuler la suppression de la branche', 'branchPickerDialog.actions.deletePrompt': 'Supprimer', 'branchPickerDialog.actions.forceDeletePrompt': 'Forcer la suppression', 'branchPickerDialog.tooltip.createWorktree': 'Créer un worktree', 'branchPickerDialog.tooltip.worktreeAlreadyExists': 'Le worktree existe déjà', 'branchPickerDialog.tooltip.rename': 'Renommer la branche', 'branchPickerDialog.tooltip.renameDisabledForRoot': 'Impossible de renommer la branche racine', 'branchPickerDialog.tooltip.delete': 'Supprimer la branche', 'branchPickerDialog.tooltip.deleteCurrentBranch': 'Impossible de supprimer la branche actuelle', 'branchPickerDialog.tooltip.deleteDisabledForRoot': 'Impossible de supprimer la branche racine', 'branchPickerDialog.tooltip.deleteWorktree': 'Supprimer le worktree', 'branchPickerDialog.tooltip.deleteWorktreeRootProtected': 'Impossible de supprimer le worktree racine', 'branchPickerDialog.toast.branchRenamed': 'Branche renommée', 'branchPickerDialog.toast.failedToRenameBranch': 'Échec du renommage de la branche', 'branchPickerDialog.toast.branchDeleted': 'Branche supprimée', 'branchPickerDialog.toast.branchNotMerged': 'La branche n\'est pas entièrement fusionnée', 'branchPickerDialog.toast.confirmAgainToForceDelete': 'Confirmez à nouveau pour forcer la suppression', 'branchPickerDialog.toast.failedToDeleteBranch': 'Échec de la suppression de la branche', 'branchPickerDialog.toast.worktreeCreated': 'Worktree créé', 'branchPickerDialog.toast.failedToCreateWorktree': 'Échec de la création du worktree', 'branchPickerDialog.error.failedToLoad': 'Échec du chargement des branches', 'branchPickerDialog.error.renameRejected': 'Le changement de nom a été refusé', 'branchPickerDialog.error.renameFailed': 'Échec du renommage de la branche', 'branchPickerDialog.error.deleteRejected': 'La suppression a été refusée', 'branchPickerDialog.error.deleteFailed': 'Échec de la suppression de la branche', 'branchPickerDialog.error.createWorktreeFailed': 'Échec de la création du worktree', 'projectEditDialog.title': 'Modifier le projet', 'projectEditDialog.field.name': 'Nom', 'projectEditDialog.field.namePlaceholder': 'Nom du projet', 'projectEditDialog.field.color': 'Couleur', 'projectEditDialog.field.icon': 'Icône', 'projectEditDialog.field.preview': 'Aperçu', 'projectEditDialog.field.iconBackground': 'Fond d\'icône', 'projectEditDialog.field.iconBackgroundAria': 'Couleur d’arrière-plan de l’icône du projet', 'projectEditDialog.option.none': 'Aucun', 'projectEditDialog.actions.uploadIcon': 'Icône de téléchargement', 'projectEditDialog.actions.uploading': 'Téléchargement...', 'projectEditDialog.actions.discoverFavicon': 'Découvrez Favicon', 'projectEditDialog.actions.discovering': 'Découverte...', 'projectEditDialog.actions.removeProjectIcon': 'Supprimer l\'icône du projet', 'projectEditDialog.actions.removing': 'Suppression...', 'projectEditDialog.actions.undoRemove': 'Annuler Supprimer', 'projectEditDialog.actions.clear': 'Effacer', 'projectEditDialog.actions.cancel': 'Annuler', 'projectEditDialog.actions.save': 'Sauvegarder', 'projectEditDialog.toast.failedToUploadIcon': 'Échec du téléchargement de l\'icône du projet', 'projectEditDialog.toast.iconUpdated': 'Icône du projet mise à jour', 'projectEditDialog.toast.failedToRemoveIcon': 'Échec de la suppression de l\'icône du projet', 'projectEditDialog.toast.iconRemoved': 'Icône du projet supprimée', 'projectEditDialog.toast.failedToDiscoverIcon': 'Échec de la découverte de l\'icône du projet', 'projectEditDialog.toast.customIconAlreadySet': 'Icône personnalisée déjà définie pour ce projet', 'projectEditDialog.toast.iconDiscovered': 'Icône de projet découverte', 'agentManager.sidebar.search.placeholder': 'Rechercher des groupes d\'agents...', 'agentManager.sidebar.actions.newAgentGroup': 'Nouveau groupe d\'agents', 'agentManager.sidebar.actions.more': '... Plus ({count})', 'agentManager.sidebar.actions.showLess': 'Afficher moins', 'agentManager.sidebar.section.agentGroups': 'Groupes d\'agents', 'agentManager.sidebar.state.loading': 'Chargement...', 'agentManager.sidebar.state.noGroupsFound': 'Aucun groupe trouvé', 'agentManager.sidebar.state.noGroupsYet': 'Aucun groupe d\'agents pour l\'instant', 'agentManager.sidebar.state.createToGetStarted': 'Créez un nouveau groupe d\'agents pour commencer', 'agentManager.sidebar.item.modelCountSingle': 'Modèle {count}', 'agentManager.sidebar.item.modelCountPlural': 'Modèles {count}', 'agentManager.sidebar.item.groupMenuAria': 'Menu de groupe', 'agentManager.sidebar.item.delete': 'Supprimer', 'agentManager.sidebar.relativeTime.now': 'maintenant', 'agentManager.sidebar.relativeTime.minutes': '{count}m', 'agentManager.sidebar.relativeTime.hours': '{count}h', 'agentManager.sidebar.relativeTime.days': '{count}d', 'agentManager.sidebar.dialog.deleteGroupTitle': 'Supprimer le groupe d\'agents', 'agentManager.sidebar.dialog.deleteGroupDescription': 'Supprimer « {group} » ? Cela supprime tous les worktrees et sessions de ce groupe.', 'agentManager.sidebar.dialog.cancel': 'Annuler', 'agentManager.sidebar.dialog.delete': 'Supprimer', 'agentManager.sidebar.dialog.deleting': 'Suppression...', 'agentManager.sidebar.toast.deletingGroup': 'Suppression de "{group}"...', 'agentManager.sidebar.toast.deletedGroup': '"{group}" supprimé', 'agentManager.sidebar.toast.failedToDeleteGroup': 'Échec de la suppression complète de "{group}"', 'agentManager.detail.header.modelCountSingle': 'Modèle {count}', 'agentManager.detail.header.modelCountPlural': 'Modèles {count}', 'agentManager.detail.header.noBranch': 'Pas de branche', 'agentManager.detail.actions.worktreeActionsAria': 'Actions du worktree', 'agentManager.detail.actions.removeThisWorktree': 'Supprimer ce worktree', 'agentManager.detail.actions.keepThisRemoveOthers': 'Laissez celui-ci, supprimez les autres', 'agentManager.detail.actions.copyWorktreePath': 'Copier le chemin du worktree', 'agentManager.detail.dialog.removeWorktreeTitle': 'Supprimer le worktree', 'agentManager.detail.dialog.removeOtherWorktreesTitle': 'Supprimer les autres worktrees', 'agentManager.detail.dialog.removeWorktreeDescription': 'Supprimer « {label} » ? Cela supprime toutes les sessions de ce worktree ainsi que le worktree lui-même.', 'agentManager.detail.dialog.removeOtherWorktreesDescription': 'Conservez "{label}" et supprimez les autres worktrees dans "{group}".', 'agentManager.detail.dialog.cancel': 'Annuler', 'agentManager.detail.dialog.remove': 'Retirer', 'agentManager.detail.dialog.removeOthers': 'Supprimer les autres', 'agentManager.detail.dialog.working': 'Fonctionnement...', 'agentManager.detail.state.loadingSessionFor': 'Session de chargement pour {label}', 'agentManager.detail.state.sessionId': 'ID de session : {id}', 'agentManager.detail.state.noSessionsInGroup': 'Aucune session dans ce groupe', 'agentManager.detail.toast.noWorktreePath': 'Aucun chemin de worktree disponible', 'agentManager.detail.toast.worktreePathCopied': 'Chemin du worktree copié', 'agentManager.detail.toast.failedToCopyPath': 'Échec de la copie du chemin', 'agentManager.detail.toast.removingWorktree': 'Suppression du worktree...', 'agentManager.detail.toast.removingOtherWorktrees': 'Suppression d\'autres worktrees...', 'agentManager.detail.toast.failedToFullyRemoveWorktree': 'Échec de la suppression complète du worktree', 'agentManager.detail.toast.worktreeRemoved': 'Worktree supprimé', 'agentManager.detail.toast.otherWorktreesRemoved': 'Suppression d\'autres worktrees', 'agentManager.empty.groupName.label': 'Nom du groupe', 'agentManager.empty.groupName.placeholder': 'e.g. fonctionnalité-auth, correction de bugs-connexion', 'agentManager.empty.groupName.description': 'Utilisé pour le répertoire du worktree et le nommage des branches', 'agentManager.empty.baseBranch.label': 'Branche de base', 'agentManager.empty.baseBranch.description': 'Crée de nouvelles branches à partir de {branch}', 'agentManager.empty.setupCommands.label': 'Commandes de configuration', 'agentManager.empty.setupCommands.configured': '{count} configuré', 'agentManager.empty.setupCommands.description': 'Les commandes s\'exécutent dans chaque nouveau worktree. Utilisez $ROOT_PROJECT_PATH pour la racine du projet.', 'agentManager.empty.setupCommands.loading': 'Chargement...', 'agentManager.empty.setupCommands.commandPlaceholder': 'p. ex. bun install', 'agentManager.empty.setupCommands.removeCommandAria': 'Supprimer la commande', 'agentManager.empty.setupCommands.addCommand': 'Ajouter une commande', 'agentManager.empty.agent.label': 'Agent', 'agentManager.empty.agent.description': 'Par défaut, votre agent par défaut configuré', 'agentManager.empty.models.label': 'Modèles', 'agentManager.empty.models.addModel': 'Ajouter un modèle', 'agentManager.empty.models.selectedSingle': 'Modèle {count} sélectionné', 'agentManager.empty.models.selectedPlural': 'Modèles {count} sélectionnés', 'agentManager.empty.prompt.label': 'Invite', 'agentManager.empty.prompt.placeholder': 'Demandez n\'importe quoi...', 'agentManager.empty.prompt.addAttachmentAria': 'Ajouter une pièce jointe', 'agentManager.empty.actions.startAgentGroupAria': 'Démarrer le groupe d\'agents', 'agentManager.empty.toast.fileTooLarge': 'Le fichier "{fileName}" est trop volumineux (max 10 Mo)', 'agentManager.empty.toast.failedToAttach': 'Échec de la connexion de "{fileName}"', 'agentManager.empty.toast.attachedSingle': 'Fichier {count} joint', 'agentManager.empty.toast.attachedPlural': 'Fichiers {count} joints', 'agentManager.empty.toast.failedToCreateGroup': 'Échec de la création du groupe d\'agents', 'openInApp.actions.open': 'Ouvrir', 'openInApp.actions.openInAria': 'Ouvert dans {app}', 'openInApp.actions.chooseAppAria': 'Choisissez l\'application à ouvrir', 'openInApp.actions.copyPath': 'Copier le chemin', 'openInApp.actions.refreshApps': 'Actualiser les applications', 'openInApp.toast.pathCopied': 'Chemin copié dans le presse-papiers', 'projectActions.actions.addActionAria': 'Ajouter une action', 'projectActions.actions.addAction': 'Ajouter une action', 'projectActions.actions.addNewAction': 'Ajouter une nouvelle action', 'projectActions.actions.autoDiscover': 'Découverte automatique', 'projectActions.actions.chooseActionAria': 'Choisir l\'action du projet', 'projectActions.actions.openPreview': 'Ouvrir l\'aperçu', 'projectActions.actions.runNamedAria': 'Exécutez {name}', 'projectActions.actions.stopNamedAria': 'Arrêter {name}', 'projectActions.label.fallbackAction': 'Action', 'projectActions.toast.openedUrlFromOutput': 'URL ouvert à partir de la sortie d\'action', 'projectActions.toast.openedForwardedUrl': 'Ouvert transmis URL', 'projectActions.toast.openedActionUrl': 'Action ouverte URL', 'projectActions.error.noActiveDirectory': 'Pas de répertoire actif', 'projectActions.error.noActiveDirectoryForAction': 'Pas de répertoire actif pour l\'action', 'projectActions.error.failedToCreateTerminalSession': 'Échec de la création d\'une session de terminal', 'projectActions.error.invalidCustomUrlFormat': 'Format URL personnalisé non valide', 'projectActions.error.selectedDesktopSshForwardUnavailable': 'Le transfert du bureau SSH sélectionné n\'est pas disponible', 'projectActions.error.failedToRunAction': 'Échec de l\'exécution de l\'action', 'mcpDropdown.title': 'Serveurs MCP', 'mcpDropdown.actions.refreshAria': 'Rafraîchir', 'mcpDropdown.actions.openAria': 'Serveurs MCP', 'mcpDropdown.statusAria': 'Statut MCP', 'mcpDropdown.status.unknown': 'Inconnu', 'mcpDropdown.status.connected': 'Connecté', 'mcpDropdown.status.failed': 'Échec : {error}', 'mcpDropdown.status.unknownError': 'Erreur inconnue', 'mcpDropdown.status.needsAuth': 'Nécessite une authentification', 'mcpDropdown.status.needsRegistration': 'Nécessite un enregistrement : {error}', 'mcpDropdown.empty.configureInConfig': 'Configurez les serveurs MCP dans la configuration OpenCode.', 'sessionAuth.error.rateLimitTitle': 'Trop de tentatives', 'sessionAuth.error.networkTitle': 'Impossible d\'atteindre le serveur', 'sessionAuth.error.rateLimitDescriptionSingle': 'Veuillez attendre {minutes} minute avant de réessayer.', 'sessionAuth.error.rateLimitDescriptionPlural': 'Veuillez attendre {minutes} minutes avant de réessayer.', 'sessionAuth.error.networkDescription': 'Nous n\'avons pas pu vérifier la session d\'interface utilisateur. Vérifiez que le service est en cours d\'exécution et réessayez.', 'sessionAuth.error.retry': 'Réessayer', 'sessionAuth.error.passkeySetupFailed': 'La configuration du mot de passe a échoué.', 'sessionAuth.error.incorrectPassword': 'Mot de passe incorrect. Essayer à nouveau.', 'sessionAuth.error.unexpectedResponse': 'Réponse inattendue du serveur.', 'sessionAuth.error.networkRetry': 'Erreur réseau. Vérifiez la connexion et réessayez.', 'sessionAuth.error.passkeySignInCanceled': 'La connexion par mot de passe a été annulée.', 'sessionAuth.error.enterPasswordForPasskey': 'Entrez votre mot de passe pour ajouter un mot de passe.', 'sessionAuth.locked.tunnelTitle': 'Accès au tunnel requis', 'sessionAuth.locked.unlockTitle': 'Débloquez OpenChamber', 'sessionAuth.locked.tunnelDescription': 'Ouvrez ce tunnel à l\'aide du lien de connexion unique depuis l\'application de bureau.', 'sessionAuth.locked.passwordDescription': 'Cette session est protégée par mot de passe.', 'sessionAuth.locked.hostSwitcherHint': 'Utilisez local si la remote est inaccessible.', 'sessionAuth.actions.cancelPasskey': 'Annuler le mot de passe', 'sessionAuth.actions.usePasskey': 'Utiliser le mot de passe', 'sessionAuth.actions.unlockingAria': 'Déverrouillage', 'sessionAuth.actions.unlockAria': 'Ouvrir', 'sessionAuth.actions.trustDevice': 'Faites confiance à cet appareil', 'sessionAuth.actions.trustDeviceAria': 'Faites confiance à cet appareil', 'sessionAuth.actions.cancelPasskeySetup': 'Annuler la configuration du mot de passe', 'sessionAuth.actions.addPasskey': 'Ajouter un mot de passe', 'sessionAuth.password.placeholder': 'Entrez le mot de passe', 'sessionAuth.toast.passkeyAdded': 'Clé d\'accès ajoutée', 'sessionAuth.toast.passkeySetupCanceled': 'Configuration du mot de passe annulée', 'desktopHostSwitcher.title': 'Instance', 'desktopHostSwitcher.description': 'Basculer entre les serveurs OpenChamber locaux et distants', 'desktopHostSwitcher.header.current': 'Actuel', 'desktopHostSwitcher.header.default': 'Défaut', 'desktopHostSwitcher.header.currentColon': 'Actuel:', 'desktopHostSwitcher.header.currentDefaultColon': 'Valeur par défaut actuelle :', 'desktopHostSwitcher.status.connected': 'Connecté', 'desktopHostSwitcher.status.authRequired': 'Authentification requise', 'desktopHostSwitcher.status.wrongService': 'Mauvais service', 'desktopHostSwitcher.status.unreachable': 'Injoignable', 'desktopHostSwitcher.status.unknown': 'Inconnu', 'desktopHostSwitcher.status.ping': '· Ping {ms}ms', 'desktopHostSwitcher.statusAria': 'Statut de l\'instance', 'desktopHostSwitcher.sshPhase.ready': 'Prêt', 'desktopHostSwitcher.sshPhase.error': 'Erreur', 'desktopHostSwitcher.sshPhase.reconnecting': 'Reconnexion', 'desktopHostSwitcher.sshPhase.resolvingConfig': 'Résolution de la configuration', 'desktopHostSwitcher.sshPhase.checkingAuth': 'Vérification de l\'authentification', 'desktopHostSwitcher.sshPhase.connectingSsh': 'Connexion du SSH', 'desktopHostSwitcher.sshPhase.probingRemote': 'Sondage à distance', 'desktopHostSwitcher.sshPhase.installing': 'Installation', 'desktopHostSwitcher.sshPhase.updating': 'Mise à jour', 'desktopHostSwitcher.sshPhase.detectingServer': 'Serveur de détection', 'desktopHostSwitcher.sshPhase.startingServer': 'Démarrage du serveur', 'desktopHostSwitcher.sshPhase.forwardingPorts': 'Ports de transfert', 'desktopHostSwitcher.sshPhase.idle': 'Inactif', 'desktopHostSwitcher.ssh.needInstancesHint': 'Besoin d\'instances SSH ? Gérez-les dans Paramètres.', 'desktopHostSwitcher.ssh.instanceFallback': 'Instance SSH', 'desktopHostSwitcher.ssh.connectingTo': 'Connexion à {host}', 'desktopHostSwitcher.actions.refresh': 'Rafraîchir', 'desktopHostSwitcher.actions.refreshInstancesAria': 'Actualiser les instances', 'desktopHostSwitcher.actions.remoteSsh': 'SSH remote', 'desktopHostSwitcher.actions.instanceActionsAria': 'Actions d\'instance', 'desktopHostSwitcher.actions.edit': 'Modifier', 'desktopHostSwitcher.actions.delete': 'Supprimer', 'desktopHostSwitcher.actions.connect': 'Connecter', 'desktopHostSwitcher.actions.defaultInstanceAria': 'Instance par défaut', 'desktopHostSwitcher.actions.setAsDefaultAria': 'Définir par défaut', 'desktopHostSwitcher.actions.setAsDefault': 'Définir par défaut', 'desktopHostSwitcher.actions.openInNewWindowAria': 'Ouvrir dans une nouvelle fenêtre', 'desktopHostSwitcher.actions.openInNewWindow': 'Ouvrir dans une nouvelle fenêtre', 'desktopHostSwitcher.actions.addInstance': 'Ajouter une instance', 'desktopHostSwitcher.actions.cancel': 'Annuler', 'desktopHostSwitcher.actions.save': 'Sauvegarder', 'desktopHostSwitcher.actions.add': 'Ajouter', 'desktopHostSwitcher.actions.switchToLocal': 'Passer au local', 'desktopHostSwitcher.actions.retry': 'Réessayer', 'desktopHostSwitcher.actions.switchInstanceAria': 'Changer d\'instance', 'desktopHostSwitcher.actions.switchInstance': 'Changer d\'instance', 'desktopHostSwitcher.actions.switchToAria': 'Passer à {instance}', 'desktopHostSwitcher.field.labelPlaceholder': 'Étiquette', 'desktopHostSwitcher.field.labelOptionalPlaceholder': 'Étiquette (facultatif)', 'desktopHostSwitcher.field.urlPlaceholder': 'https://hôte:port', 'desktopHostSwitcher.state.limitedOnPage': 'Le sélecteur d\'instance est limité sur cette page. Utilisez Local pour récupérer.', 'desktopHostSwitcher.state.loading': 'Chargement...', 'desktopHostSwitcher.state.instanceUnreachable': 'Instance inaccessible', 'desktopHostSwitcher.edit.title': 'Modifier l\'instance', 'desktopHostSwitcher.add.title': 'Ajouter une instance', 'desktopHostSwitcher.error.failedToSave': 'Échec de l\'enregistrement', 'desktopHostSwitcher.error.failedToLoad': 'Échec du chargement', 'desktopHostSwitcher.error.invalidUrl': 'URL non valide (doit être http/https)', 'desktopHostSwitcher.error.failedToOpenNewWindow': 'Échec de l\'ouverture d\'une nouvelle fenêtre', 'desktopHostSwitcher.instance.local': 'Local', 'desktopHostSwitcher.instance.fallback': 'Instance', 'desktopHostSwitcher.startup.title': 'Instance SSH par défaut indisponible', 'desktopHostSwitcher.startup.connectingTo': 'Connexion à {host}...', 'desktopHostSwitcher.startup.failed': 'Échec de la connexion de l\'instance SSH par défaut.', 'desktopHostSwitcher.toast.sshConnected': 'Instance SSH "{host}" connectée', 'desktopHostSwitcher.toast.sshFailedToConnect': 'L\'instance SSH "{host}" n\'a pas réussi à se connecter', 'desktopHostSwitcher.toast.instanceUnreachable': 'L\'instance "{host}" est inaccessible', 'miniChat.header.newSession': 'Nouvelle session', 'miniChat.header.session': 'Session', 'miniChat.header.defaultAgent': 'Agent par défaut', 'miniChat.header.noModel': 'Aucun modèle', 'miniChat.status.busy': 'En cours d\'exécution', 'miniChat.status.retry': 'Réessayer', 'miniChat.status.idle': 'Inactif', 'miniChat.actions.pin': 'Épingler au-dessus des autres fenêtres', 'miniChat.actions.unpin': 'Détacher la fenêtre', 'miniChat.actions.pinAria': 'Épingler la fenêtre Mini Chat', 'miniChat.actions.unpinAria': 'Désépingler la fenêtre Mini Chat', 'miniChat.actions.openMain': 'Ouvrir dans la fenêtre principale', 'miniChat.actions.openMainAria': 'Ouvrir la session dans la fenêtre principale', 'miniChat.unavailable.title': 'Session indisponible', 'miniChat.unavailable.description': 'Cette session n\'a pas pu être chargée. Il peut avoir été supprimé, archivé ou ouvert à partir d\'un contexte de projet différent.', 'sessions.sidebar.session.menu.openMiniChatWindow': 'Ouvrir dans la mini-fenêtre de discussion', 'header.actions.newMiniChat': 'Nouvelle mini-fenêtre de discussion', 'header.actions.newMiniChatAria': 'Ouvrir une nouvelle fenêtre de mini-chat', 'header.actions.openSessionMiniChat': 'Session ouverte dans le mini-chat', 'header.actions.openSessionMiniChatAria': 'Ouvrir la session en cours dans Mini Chat', 'header.windowControls.groupAria': 'Champs de fenêtre', 'header.windowControls.minimize': 'Réduire la fenêtre', 'header.windowControls.maximize': 'Agrandir la fenêtre', 'header.windowControls.restore': 'Fenêtre de restauration', 'header.windowControls.close': 'Fermer la fenêtre', 'errorBoundary.title': 'Quelque chose s\'est mal passé', 'errorBoundary.description': 'L\'application a rencontré une erreur inattendue. Cela a été enregistré pour le débogage.', 'errorBoundary.state.unknownError': 'Erreur inconnue', 'errorBoundary.state.componentStackLabel': 'Pile de composants :', 'errorBoundary.actions.errorDetails': 'Détails de l\'erreur', 'errorBoundary.actions.tryAgain': 'Essayer à nouveau', 'errorBoundary.actions.copy': 'Copie', 'errorBoundary.actions.copied': 'Copié', 'jsonTreeView.error.emptyJson': 'Contenu JSON vide', 'jsonTreeView.error.invalidJson': 'JSON invalide', 'jsonTreeView.error.invalidJsonTitle': 'JSON invalide', 'jsonTreeView.actions.expandAll': 'Développer tout', 'jsonTreeView.actions.collapseAll': 'Réduire tout', 'numberInput.actions.decreaseAria': 'Diminuer la valeur', 'numberInput.actions.increaseAria': 'Augmenter la valeur', 'goToLineDialog.field.linePlaceholderShort': 'Ligne', 'goToLineDialog.field.linePlaceholder': 'Numéro de ligne', 'goToLineDialog.actions.go': 'Aller', 'goToLineDialog.helper.editorUnavailable': 'Éditeur indisponible.', 'goToLineDialog.helper.currentLineRange': 'Ligne actuelle : {current}. Tapez un numéro de ligne compris entre 1 et {max} vers lequel accéder.', 'goToLineDialog.helper.goToLine': 'Aller à la ligne {line}', 'dialog.common.actions.close': 'Fermer', 'filesView.toast.relativePathCopied': 'Chemin relatif copié', 'filesView.tree.menu.copyRelativePath': 'Copier le chemin relatif', 'multiRun.branchSelector.placeholder.selectSourceBranch': 'Sélectionnez la branche source...', 'multiRun.branchSelector.status.loadingBranches': 'Chargement des branches...', 'multiRun.branchSelector.status.noBranchesFound': 'Aucune branche trouvée', 'multiRun.branchSelector.status.notInGitRepository': 'Pas dans un dépôt git.', 'multiRun.branchSelector.groups.localBranches': 'Branches locales', 'multiRun.branchSelector.groups.remoteBranches': 'Branches du dépôt distant', 'multiRun.window.actions.closeAria': 'Fermer le multi-exécution', 'multiRun.window.description': 'Fenêtre multi-exécution OpenChamber.', 'voice.status.idle': 'Prêt pour la voix', 'voice.status.listening': 'Écoute...', 'voice.status.processing': 'Traitement...', 'voice.status.speaking': 'Parlant...', 'voice.status.error': 'Erreur vocale', 'voice.status.conversationModeActiveAria': 'Mode conversation actif', 'voice.action.finishAndTranscribe': 'Terminer et transcrire la saisie vocale', 'onboarding.common.actions.back': 'Retour', 'onboarding.common.copyToClipboard': 'Copier dans le presse-papier', 'onboarding.common.status.copiedToClipboard': 'Copié dans le presse-papiers', 'onboarding.chooser.title': 'Bienvenue sur OpenChamber', 'onboarding.chooser.description': 'Choisissez comment vous souhaitez vous connecter pour commencer.', 'onboarding.chooser.tabs.localInstall': 'Installation locale', 'onboarding.chooser.tabs.connectRemote': 'Se connecter en remote', 'onboarding.localSetup.title': 'Configuration de OpenCode', 'onboarding.localSetup.description': 'Installez OpenCode CLI pour continuer.', 'onboarding.localSetup.dialog.selectOpencodeBinary': 'Sélectionnez le binaire OpenCode', 'onboarding.localSetup.errors.cliNotReady': 'OpenCode CLI n’est pas encore prêt. Veuillez confirmer que l\'installation est terminée et réessayer.', 'onboarding.localSetup.errors.detectionFailed': 'Échec de la détection', 'onboarding.localSetup.windows.title': 'Configuration de Windows (WSL recommandé)', 'onboarding.localSetup.windows.stepInstallWsl': 'Installez WSL (si nécessaire) avec', 'onboarding.localSetup.windows.stepInstallWslSuffix': 'dans PowerShell.', 'onboarding.localSetup.windows.stepRunInstallInWsl': 'Exécutez la commande d\'installation ci-dessous dans votre terminal WSL.', 'onboarding.localSetup.windows.stepSetBinaryPath': 'Si OpenChamber ne détecte pas automatiquement OpenCode, définissez le chemin binaire ci-dessous.', 'onboarding.localSetup.intro': 'OpenCode est le cœur de OpenChamber — installez-le pour commencer.', 'onboarding.localSetup.docs.windows': 'Documents OpenCode Windows + WSL', 'onboarding.localSetup.docs.default': 'Documents OpenCode', 'onboarding.localSetup.actions.checking': 'Vérification…', 'onboarding.localSetup.actions.checkNow': 'Vérifiez maintenant', 'onboarding.localSetup.actions.checkAndContinue': 'J’ai terminé l’installation, vérifier et continuer', 'onboarding.localSetup.helper.checkAndContinue': 'Cliquez pour vérifier si OpenCode CLI est disponible. En cas de succès, vous entrerez automatiquement dans l\'écran principal.', 'onboarding.localSetup.status.watching': 'En attendant OpenCode', 'onboarding.localSetup.status.autoContinue': 'Nous continuerons automatiquement une fois qu’il sera détecté.', 'onboarding.localSetup.field.alreadyInstalled': 'Déjà installé ? Définissez le chemin OpenCode CLI :', 'onboarding.localSetup.advanced.title': 'Définir un chemin binaire personnalisé', 'onboarding.localSetup.troubleshoot.title': 'Vous avez des problèmes ?', 'onboarding.localSetup.actions.browse': 'Parcourir', 'onboarding.localSetup.actions.apply': 'Appliquer', 'onboarding.localSetup.helper.saveAndReload': 'Enregistre dans les paramètres OpenChamber et recharge la configuration OpenCode.', 'onboarding.localSetup.remotePreference': 'Vous préférez utiliser un serveur distant ?', 'onboarding.localSetup.actions.connectRemoteServer': 'Se connecter au serveur distant →', 'onboarding.localSetup.windows.hintInstallInWsl': 'Sous Windows, installez et exécutez OpenCode dans WSL pour une meilleure compatibilité.', 'onboarding.localSetup.windows.hintDetectionFailed': 'Si la détection échoue, définissez un chemin natif (opencode.cmd/opencode.exe), wsl.exe ou wsl:/usr/local/bin/opencode.', 'onboarding.localSetup.hint.ensurePath': 'Déjà installé ? Assurez-vous qu\'OpenCode est dans votre PATH.', 'onboarding.localSetup.hint.setEnv': 'Ou définissez la variable d\'environnement OPENCODE_BINARY.', 'onboarding.localSetup.hint.missingRuntime': 'Si vous voyez « env: node : No such file or directory » ou « env: bun : No such file or directory », installez ce runtime ou assurez-vous qu\'il se trouve sur PATH.', 'onboarding.remoteConnection.title': 'Se connecter au serveur distant', 'onboarding.remoteConnection.titleRecovery': 'Connectez-vous à un autre serveur', 'onboarding.remoteConnection.description': 'Saisissez l\'adresse d\'un serveur OpenChamber auquel vous connecter.', 'onboarding.remoteConnection.field.serverAddress': 'Adresse du serveur', 'onboarding.remoteConnection.field.serverAddressPlaceholder': 'https://your-server.example.com:4096', 'onboarding.remoteConnection.field.nameOptional': 'Nom (facultatif)', 'onboarding.remoteConnection.field.namePlaceholder': 'Mon serveur distant', 'onboarding.remoteConnection.errors.connectionTestFailed': 'Le test de connexion a échoué', 'onboarding.remoteConnection.errors.failedToSaveConnection': 'Échec de l\'enregistrement de la connexion', 'onboarding.remoteConnection.status.connectedSuccessfully': 'Connecté avec succès ({latencyMs}ms)', 'onboarding.remoteConnection.status.authWarning': 'Le serveur nécessite une authentification. Vous pouvez toujours vous connecter.', 'onboarding.remoteConnection.status.connectionFailed': 'Échec de la connexion', 'onboarding.remoteConnection.status.suggestionsUnreachable': 'Suggestions : vérifiez l\'adresse du serveur, vérifiez que le serveur est en cours d\'exécution ou vérifiez votre connexion réseau.', 'onboarding.remoteConnection.status.suggestionsWrongService': 'Suggestions : vérifiez que l’URL pointe vers un serveur OpenChamber ou contactez l\'administrateur du serveur.', 'onboarding.remoteConnection.actions.testing': 'Essai…', 'onboarding.remoteConnection.actions.testConnection': 'Tester la connexion', 'onboarding.remoteConnection.actions.connectAndRestart': 'Connectez-vous et redémarrez', 'onboarding.remoteConnection.actions.whatToDo': 'Qu\'aimeriez-vous faire ?', 'onboarding.remoteConnection.actions.chooseDifferentServer': 'Choisissez un autre serveur', 'onboarding.remoteConnection.actions.useLocalInstead': 'Utilisez plutôt local', 'onboarding.remoteConnection.probe.authMessage': 'Le serveur nécessite une authentification. Vous pouvez toujours vous connecter, mais vous devrez peut-être fournir des informations d\'identification.', 'onboarding.remoteConnection.probe.wrongServiceMessage': 'Le serveur a répondu mais n\'exécute pas OpenChamber. Vérifiez que l\'adresse pointe vers un serveur OpenChamber.', 'onboarding.remoteConnection.probe.unreachableMessage': 'Le serveur est inaccessible. Vérifiez votre connexion réseau et vérifiez l\'adresse du serveur.', 'onboarding.desktopRecovery.localUnavailable.title': 'OpenCode local indisponible', 'onboarding.desktopRecovery.localUnavailable.description': 'OpenCode CLI n\'a pas pu être démarré ou n\'est pas installé. Installez OpenCode ou connectez-vous plutôt à un serveur distant.', 'onboarding.desktopRecovery.localUnavailable.retry': 'Réessayer en local', 'onboarding.desktopRecovery.localUnavailable.useLocal': 'Configurer localement', 'onboarding.desktopRecovery.noDefaultConnection.title': 'Aucune connexion par défaut', 'onboarding.desktopRecovery.noDefaultConnection.description': 'Votre connexion par défaut enregistrée est introuvable. Choisissez comment vous souhaitez vous connecter.', 'onboarding.desktopRecovery.remoteUnreachable.title': 'Serveur distant inaccessible', 'onboarding.desktopRecovery.remoteUnreachable.description': 'Impossible de se connecter à "{host}". Vérifiez votre connexion réseau et vérifiez l\'adresse du serveur.', 'onboarding.desktopRecovery.remoteUnreachable.retry': 'Réessayer la connexion', 'onboarding.desktopRecovery.incompatibleServer.title': 'Serveur incompatible', 'onboarding.desktopRecovery.incompatibleServer.description': 'Le serveur « {host} » n\'exécute pas OpenChamber. Vérifiez que l\'adresse pointe vers un serveur OpenChamber.', 'onboarding.desktopRecovery.common.useLocal': 'Utiliser local', 'onboarding.desktopRecovery.common.useRemote': 'Utiliser le remote', 'onboarding.desktopRecovery.actions.retrying': 'Nouvelle tentative…', 'onboarding.desktopRecovery.actions.retryConnection': 'Réessayer la connexion', 'startup.initRecovery.title': 'Le démarrage a échoué', 'startup.initRecovery.description': 'OpenChamber n\'a pas pu terminer l\'initialisation. Vérifiez que le serveur est en cours d\'exécution, puis réessayez.', 'startup.initRecovery.retry': 'Réessayer', 'startup.initRecovery.retrying': 'Nouvelle tentative…', 'onboarding.desktopRecovery.placeholders.remoteServer': 'le serveur distant', 'onboarding.desktopRecovery.placeholders.unknownServer': 'inconnu', 'vscodeLayout.title.chat': 'Chat', 'vscodeLayout.title.newSession': 'Nouvelle session', 'vscodeLayout.title.sessions': 'Sessions', 'vscodeLayout.title.sessionFallback': 'Session', 'vscodeLayout.actions.backToSessionsAria': 'Retour aux sessions', 'vscodeLayout.actions.newSessionAria': 'Nouvelle session', 'vscodeLayout.actions.openAgentManagerAria': 'Ouvrir le gestionnaire d\'agents', 'vscodeLayout.actions.resizeSessionsSidebarAria': 'Redimensionner la barre latérale des sessions', 'vscodeLayout.actions.settingsAria': 'Paramètres', 'vscodeLayout.quota.title': 'Limites de taux', 'vscodeLayout.quota.mode.used': 'Utilisé', 'vscodeLayout.quota.mode.remaining': 'Restant', 'vscodeLayout.quota.lastUpdated': 'Dernière mise à jour {time}', 'vscodeLayout.quota.noRateLimitsAvailable': 'Aucune limite de taux disponible.', 'vscodeLayout.quota.noRateLimitsReported': 'Aucune limite de taux signalée.', 'vscodeLayout.quota.actions.rateLimitsAria': 'Limites de taux', 'vscodeLayout.quota.actions.showUsedAria': 'Afficher le quota utilisé', 'vscodeLayout.quota.actions.showRemainingAria': 'Afficher le quota restant', 'vscodeLayout.quota.actions.refreshAria': 'Limites du taux de rafraîchissement', 'updateDialog.header.updateAvailable': 'Mise à jour disponible', 'updateDialog.header.updating': 'Mise à jour de OpenChamber...', 'updateDialog.status.installingUpdate': 'Installation de la mise à jour...', 'updateDialog.status.serverRestarting': 'Redémarrage du serveur...', 'updateDialog.status.waitingForServer': 'En attente du serveur...', 'updateDialog.status.autoReloadHint': 'La page se rechargera automatiquement une fois la mise à jour terminée.', 'updateDialog.fallback.updateViaTerminal': 'Ou mettre à jour via le terminal :', 'updateDialog.actions.copyCommand': 'Commande Copier', 'updateDialog.actions.copied': 'Copié!', 'updateDialog.status.downloadingPayload': 'Téléchargement de la charge utile de la mise à jour...', 'updateDialog.actions.downloadUpdate': 'Télécharger la mise à jour', 'updateDialog.status.downloading': 'Téléchargement...', 'updateDialog.actions.restartToUpdate': 'Redémarrer pour mettre à jour', 'updateDialog.actions.updateNow': 'Mettre à jour maintenant', 'updateDialog.changelog.title': 'Nouveautés', 'updateDialog.status.updating': 'Mise à jour...', 'updateDialog.error.updateFailed': 'La mise à jour a échoué', 'updateDialog.error.takingLonger': 'La mise à jour prend plus de temps que prévu. Attendez un peu et actualisez, ou exécutez : openchamber update', 'opencodeUpdate.toast.available.title': 'Mise à jour OpenCode', 'opencodeUpdate.toast.available.description': 'Version {version} disponible.', 'opencodeUpdate.toast.actions.update': 'Mise à jour', 'opencodeUpdate.toast.actions.dismiss': 'Ignorer', 'opencodeUpdate.toast.actions.reload': 'Recharger OpenCode', 'opencodeUpdate.toast.upgrading.title': 'Mise à jour de OpenCode...', 'opencodeUpdate.toast.upgrading.description': 'Gardez OpenChamber ouvert.', 'opencodeUpdate.toast.updated.title': 'OpenCode mis à jour', 'opencodeUpdate.toast.updated.description': 'Mise à jour installée.', 'opencodeUpdate.toast.updated.descriptionWithVersion': 'Version {version} installée.', 'opencodeUpdate.toast.failed.title': 'Impossible de mettre à jour OpenCode', 'opencodeUpdate.toast.failed.description': 'La mise à niveau du OpenCode a échoué.', 'opencodeUpdate.toast.reload.message': 'Redémarrage de OpenCode...', 'memoryDebugPanel.title': 'Panneau de débogage', 'memoryDebugPanel.tabs.memory': 'Mémoire', 'memoryDebugPanel.tabs.streaming': 'Streaming', 'memoryDebugPanel.section.sessionsInMemory': 'Sessions en mémoire', 'memoryDebugPanel.section.uiStreamingMetrics': 'Métriques de streaming de l\'interface utilisateur', 'memoryDebugPanel.section.vscodeBridgeMetrics': 'Métriques du pont VS Code', 'memoryDebugPanel.section.noUiSamples': 'Aucun échantillon de streaming d\'interface utilisateur pour l\'instant. Démarrez un flux et gardez ce panneau ouvert.', 'memoryDebugPanel.section.noVscodeSamples': 'Aucun échantillon de pont VS Code pour l\'instant.', 'memoryDebugPanel.metric.totalMessages': 'Nombre total de messages', 'memoryDebugPanel.metric.cachedSessions': 'Sessions mises en cache', 'memoryDebugPanel.metric.userMessages': 'Messages utilisateur', 'memoryDebugPanel.metric.assistantMessages': 'Messages assistant', 'memoryDebugPanel.metric.viewportWindow': 'Fenêtre d\'affichage', 'memoryDebugPanel.metric.zombieTimeout': 'Délai d\'attente des zombies', 'memoryDebugPanel.metric.githubTotalRequests': 'GitHub Total des demandes', 'memoryDebugPanel.metric.metrics': 'Métrique', 'memoryDebugPanel.metric.samples': 'Échantillons', 'memoryDebugPanel.metric.lastUpdate': 'Dernière mise à jour', 'memoryDebugPanel.metric.uiMetrics': 'Métriques de l\'interface utilisateur', 'memoryDebugPanel.metric.vscodeMetrics': 'VS Code Métriques', 'memoryDebugPanel.metric.messageListRenders': 'Rendus de liste de messages', 'memoryDebugPanel.metric.messageListStreamRenders': 'Rendus de flux MsgList', 'memoryDebugPanel.metric.chatMessageRenders': 'Rendus de messages de chat', 'memoryDebugPanel.metric.chatMessageStreamRenders': 'Rendus de flux de messages ChatMessage', 'memoryDebugPanel.metric.chatMessageStaticDuringStream': 'ChatMessage statique pendant le flux', 'memoryDebugPanel.metric.chatMessageStaticOutsideActiveTurn': 'ChatMessage statique en dehors du tour actif', 'memoryDebugPanel.metric.messagesValue': 'Messages {count}', 'memoryDebugPanel.metric.minutesValue': 'Minutes {count}', 'memoryDebugPanel.metric.msgsValue': 'Messages {count}', 'memoryDebugPanel.metric.roleMsgsValue': 'U {user} / A {assistant}', 'memoryDebugPanel.metric.countValue': 'compter {value}', 'memoryDebugPanel.metric.avgValue': 'moyenne {value}', 'memoryDebugPanel.metric.maxValue': 'maximum {value}', 'memoryDebugPanel.metric.totalValue': 'total {value}', 'memoryDebugPanel.actions.logState': 'État du journal', 'memoryDebugPanel.actions.copyJson': 'Copier JSON', 'memoryDebugPanel.tooltip.logCurrentState': 'Enregistrer l\'état actuel de la mémoire sur la console du navigateur', 'memoryDebugPanel.streaming.copy.copied': 'Débogage en streaming JSON copié', 'memoryDebugPanel.streaming.copy.failed': 'Échec de la copie de JSON', 'memoryDebugPanel.streaming.copy.hint': 'La copie exporte les métriques de streaming de l\'interface utilisateur et de VS Code en tant que JSON.', 'memoryDebugPanel.common.idle': 'inactif', 'memoryDebugPanel.common.live': 'en direct', 'memoryDebugPanel.common.notAvailable': 'n / A', 'memoryDebugPanel.common.untitled': 'Sans titre', 'directoryTree.field.newDirectoryPlaceholder': 'nouveau_répertoire', 'textarea.resizeHandleAria': 'Redimensionner la zone de texte', 'sidebar.resize.leftPanelAria': 'Redimensionner le panneau de gauche', 'sidebar.resize.rightPanelAria': 'Redimensionner le panneau de droite', 'mainLayout.mobile.closeDrawerAria': 'Fermer le tiroir', 'sortableTabsStrip.aria.tabs': 'Onglets', 'openChamberLogo.aria.logo': 'Logo OpenChamber', 'markdownRenderer.table.actions.copyTitle': 'Copier le tableau', 'markdownRenderer.table.actions.downloadTitle': 'Télécharger le tableau', 'markdownRenderer.table.toast.downloadedAsFormat': 'Table téléchargée sous le nom {format}', 'markdownRenderer.mermaid.actions.copyTitle': 'Copie', 'markdownRenderer.mermaid.actions.copySourceTitle': 'Copier la source', 'markdownRenderer.mermaid.actions.downloadSvgTitle': 'Télécharger SVG', 'markdownRenderer.mermaid.toast.downloadFailed': 'Échec du téléchargement du diagramme', 'common.date.today': 'Aujourd’hui', 'common.date.yesterday': 'Hier', 'common.date.yesterdayWithTime': 'Hier {time}', 'common.relative.justNow': 'À l’instant', 'common.relative.minutesAgoShort': 'il y a {count} min', 'common.relative.hoursAgoShort': 'il y a {count} h', 'common.relative.daysAgoShort': 'il y a {count} j', 'common.relative.weeksAgoShort': 'il y a {count} sem', 'common.relative.yearsAgoShort': 'il y a {count} a', 'common.relative.daysAgoCompact': '{count} j', 'common.relative.weeksAgoCompact': '{count} sem', 'common.relative.yearsAgoCompact': '{count} a', 'contextFileOpen.failure.tooLarge': 'Le fichier est trop volumineux pour être ouvert (> {count} lignes)', 'contextFileOpen.failure.missing': 'Fichier introuvable', 'contextFileOpen.failure.unreadable': 'Impossible d’ouvrir le fichier', 'quota.window.5h': '5 heures', 'quota.window.7d': 'Limite sur 7 jours', 'quota.window.7dSonnet': 'Limite Sonnet sur 7 jours', 'quota.window.7dOpus': 'Limite Opus sur 7 jours', 'quota.window.weekly': 'Limite hebdomadaire', 'quota.window.daily': 'Quotidien', 'quota.window.monthly': 'Limite mensuelle', 'quota.window.credits': 'Crédits', 'quota.window.creditsBalance': 'Solde de crédits', 'quota.window.billingCycle': 'Cycle de facturation', 'quota.window.auto': 'Auto', 'quota.window.api': 'API', 'quota.window.planLimit': 'Limite du forfait', 'quota.window.onDemand': 'À la demande', 'quota.window.session': 'Session', 'quota.window.premium': 'Interactions premium', 'quota.window.chat': 'Requêtes de chat', 'quota.window.completions': 'Complétions', 'quota.window.premiumInteractions': 'Interactions premium', 'layout.mainTab.diagram': 'Diagramme', 'mobile.nav.aria': 'Navigation mobile', 'mobile.nav.changes': 'Modifications', 'mobile.nav.settings': 'Paramètres', 'mobile.surface.closeAria': 'Fermer', 'mobile.header.openMenuAria': 'Ouvrir le menu', 'mobile.header.openMetadataAria': 'Ouvrir les métadonnées de session', 'mobile.header.metadata.context': 'Contexte', 'mobile.header.metadata.branch': 'Branche', 'mobile.header.metadata.usage': 'Utilisation', 'mobile.menu.titleAria': 'Outils de l’espace de travail', 'mobile.menu.files': 'Fichiers', 'mobile.menu.changes': 'Modifications', 'mobile.menu.mcp': 'MCP', 'mobile.menu.update': 'Mettre à jour', 'mobile.menu.settings': 'Paramètres', 'mobile.sessions.newChatCta': 'Nouveau chat dans {project}', 'mobile.sessions.dateGroup.today': 'Aujourd’hui', 'mobile.sessions.dateGroup.yesterday': 'Hier', 'mobile.sessions.dateGroup.thisWeek': 'Plus tôt cette semaine', 'mobile.sessions.dateGroup.older': 'Plus ancien', 'mobile.sessions.section.worktrees': 'Worktrees', 'mobile.sessions.section.otherProjects': 'Changer de projet', 'mobile.sessions.section.projects': 'Projets', 'mobile.sessions.empty.noProjectsTitle': 'Aucun projet pour le moment', 'mobile.sessions.empty.noProjectsDescription': 'Ajoutez un projet pour commencer à discuter avec votre code.', 'mobile.sessions.empty.noSessionsTitle': 'Aucune session pour le moment', 'mobile.sessions.empty.noSessionsDescription': 'Démarrez votre premier chat pour le voir ici.', 'mobile.sessions.empty.searchTitle': 'Aucun résultat', 'mobile.sessions.empty.searchDescription': 'Essayez un autre terme de recherche.', 'mobile.sessions.showArchived': 'Afficher les archivées ({count})', 'mobile.sessions.hideArchived': 'Masquer les archivées', 'mobile.sessions.activeWorktreeAria': 'Worktree actif', 'mobile.sessions.activeProjectAria': 'Projet actif', 'mobile.sessions.startNewChat': 'Démarrer un nouveau chat', 'mobile.sessions.newChat': 'Nouveau chat', 'mobile.sessions.editOrder': 'Réordonner les projets', 'mobile.sessions.doneEditing': 'Terminé', 'mobile.sessions.editOrderHint': 'Faites glisser la poignée pour réordonner les projets. Touchez la coche pour terminer.', 'mobile.sessions.editProjectAria': 'Modifier {label}', 'mobile.sessions.dragHandleAria': 'Faire glisser {label} pour réordonner', 'mobile.sessions.moveUpAria': 'Déplacer {label} vers le haut', 'mobile.sessions.moveDownAria': 'Déplacer {label} vers le bas', 'mobile.sessions.removeProjectAria': 'Supprimer {label}', 'mobile.sessions.cancelRemoveProjectAria': 'Annuler la suppression de {label}', 'mobile.sessions.confirmRemoveProject': 'Fermer', 'mobile.sessions.confirmRemoveProjectAria': 'Confirmer la suppression de {label}', 'mobile.sessions.toast.projectRemoved': '{label} supprimé', 'mobile.sessions.archiveSessionAria': 'Archiver {title}', 'mobile.sessions.cancelArchiveAria': 'Annuler l’archivage de {title}', 'mobile.projectEdit.worktreesTitle': 'Worktrees', 'mobile.projectEdit.worktreesEmpty': 'Aucun worktree dans ce projet pour le moment.', 'mobile.projectEdit.reorderHint': 'Faites glisser pour réordonner les worktrees.', 'mobile.projectEdit.dragWorktreeAria': 'Faire glisser {label} pour réordonner', 'mobile.projectEdit.deleteWorktreeAria': 'Supprimer le worktree {label}', 'mobile.projectEdit.deleteWorktreeTitle': 'Supprimer le worktree', 'mobile.projectEdit.deleteWorktreeConfirmButton': 'Supprimer', 'mobile.projectEdit.deleteWorktreeConfirm': 'Supprimer le worktree « {name} » ? Cette action est irréversible.', 'mobile.projectEdit.deleteWorktreeDirty': 'Ce worktree contient des modifications non commitées qui seront perdues.', 'mobile.projectEdit.deleteWorktreeArchiveNote': '{count} session(s) associée(s) seront archivées.', 'mobile.projectEdit.deleteLocalBranch': 'Supprimer aussi la branche locale', 'mobile.projectEdit.deleteRemoteBranch': 'Supprimer aussi la branche distante', 'mobile.sessions.showMore': 'Afficher {count} de plus', 'mobile.sessions.search.section.sessions': 'Sessions', 'mobile.sessions.search.section.archived': 'Archivées', 'mobile.sessions.search.section.projects': 'Projets', 'mobile.sessions.clearSearchAria': 'Effacer la recherche', 'mobile.header.noProject': 'Sélectionnez un projet', 'mobile.header.activeSession': 'Session active', 'mobile.header.noSession': 'Aucune session active', 'mobile.sessions.openSheetAria': 'Ouvrir les sessions et projets', 'mobile.sessions.closeSheetAria': 'Fermer les sessions et projets', 'mobile.sessions.sheet.title': 'Sessions', 'mobile.sessions.sheet.description': 'Changez de projet, ouvrez des sessions ou démarrez un nouveau chat.', 'mobile.sessions.search.placeholder': 'Rechercher des sessions', 'mobile.sessions.empty': 'Aucune session trouvée.', 'mobile.sessions.unassignedProject': 'Autres sessions', 'mobile.sessions.newSessionAria': 'Démarrer une nouvelle session dans ce projet', 'mobile.sessions.untitled': 'Session sans titre', 'mobile.sessions.project.sessionsSingle': '1 session', 'mobile.sessions.project.sessionsPlural': '{count} sessions', 'mobile.files.refreshAria': 'Actualiser les fichiers', 'mobile.files.backToParentAria': 'Retour à {name}', 'mobile.files.rootDirectory': 'Fichiers du projet', 'mobile.files.search.placeholder': 'Rechercher des fichiers', 'mobile.files.search.empty': 'Aucun fichier trouvé.', 'mobile.files.parentDirectory': 'Dossier parent', 'mobile.files.empty.noDirectory': 'Sélectionnez un projet pour parcourir les fichiers.', 'mobile.files.empty.directory': 'Ce dossier est vide.', 'mobile.files.error.listFailed': 'Impossible de charger les fichiers', 'mobile.files.error.readUnavailable': 'L’aperçu du fichier n’est pas disponible dans ce runtime.', 'mobile.files.file.truncated': 'Aperçu du fichier tronqué sur mobile.', 'mobile.files.copyPathAria': 'Copier le chemin du fichier', 'mobile.files.copyContent': 'Copier le contenu', 'mobile.files.copyContentAria': 'Copier le contenu du fichier', 'mobile.files.toast.pathCopied': 'Chemin copié', 'mobile.files.toast.contentCopied': 'Contenu copié', 'mobile.files.toast.copyFailed': 'Échec de la copie', 'mobile.changes.placeholder.title': 'Modifications', 'mobile.changes.placeholder.description': 'La revue du working tree, la synchronisation et les actions de commit seront ici.', 'mobile.changes.branchLabel': 'Branche : {branch}', 'mobile.changes.noRemote': 'Aucun remote disponible', 'mobile.changes.cleanDescription': 'Aucun fichier modifié dans cet espace de travail.', 'mobile.changes.diffDetail.subtitle': 'Diff en lecture seule', 'mobile.changes.diffDetail.loadFailed': 'Impossible de charger le diff', 'mobile.changes.diffDetail.missingTitle': 'Le fichier n’est plus modifié', 'mobile.changes.diffDetail.missingDescription': 'Retournez aux modifications et actualisez la liste.', 'mobile.changes.diffDetail.imageUnavailable': 'Les diffs d’images ne sont pas encore disponibles dans les modifications mobile.', 'mobile.settings.placeholder.title': 'Paramètres', 'mobile.settings.placeholder.description': 'Les paramètres mobiles ciblés de connexion et d’application seront ici.', 'sessions.sidebar.header.displayMode.showArchived': 'Afficher les sessions archivées', 'sessions.sidebar.group.showMore': 'Afficher plus de sessions', 'gitView.changes.revertDirectoryAria': 'Annuler les modifications dans {path}', 'gitView.changes.revertDirectory': 'Annuler le dossier', 'gitView.changes.revertDirectoryDescriptionPlural': 'Cela supprimera les modifications locales dans {count} fichiers sous {path}.', 'gitView.changes.revertDirectoryDescriptionSingle': 'Cela supprimera les modifications locales dans {count} fichier sous {path}.', 'gitView.changes.revertDirectoryDialogTitle': 'Annuler les modifications du dossier ?', 'gitView.changes.revertDirectoryTooltip': 'Annuler les modifications du dossier', 'worktree.bootstrap.toast.failed': 'Échec de la configuration du worktree', 'worktree.bootstrap.toast.failedDescription': 'Le worktree a été créé, mais la configuration en arrière-plan ne s’est pas terminée.', 'worktree.bootstrap.toast.timeoutDescription': 'Le worktree a été créé, mais la configuration en arrière-plan a expiré.', 'contextPanel.browser.inspectUnavailable': 'Cette page ne peut pas être inspectée depuis le panneau de navigateur.', 'contextPanel.browser.trustNotice': 'Les pages ouvertes ici s’exécutent avec un accès complet à OpenChamber — nécessaire pour l’inspection et les captures d’écran. N’ouvrez que des sites de confiance : une page malveillante pourrait lire vos données ou agir en votre nom.', 'filesView.diagram.closeDiagramView': 'Fermer la vue diagramme', 'filesView.diagram.saveDiagram': 'Enregistrer le diagramme', 'inlineComment.input.placeholderShort': 'Ajouter un commentaire...', 'header.services.remoteUpdate.title': 'Mise à jour de l’instance distante', 'header.services.remoteUpdate.checking': 'Recherche de mises à jour...', 'header.services.remoteUpdate.upToDate': 'Cette instance est à jour.', 'header.services.remoteUpdate.available': 'La version {version} est disponible pour cette instance.', 'header.services.remoteUpdate.error': 'Impossible de vérifier les mises à jour de l’instance distante', 'header.services.remoteUpdate.actions.open': 'Mettre à jour', 'chat.fileAttachment.openInDiagram': 'Ouvrir dans la vue diagramme', 'chat.draftPresets.explore.label': 'Explorer le codebase', 'chat.draftPresets.catchup.label': 'Me remettre à niveau', 'chat.draftPresets.weigh.label': 'Comparer mes options', 'chat.draftPresets.plan.label': 'Lancer la planification de fonctionnalité', 'chat.draftPresets.debug.label': 'Déboguer un problème', 'chat.draftPresets.review.label': 'Revoir mes modifications', 'chat.draftStarters.add': 'Ajouter un démarrage', 'chat.draftStarters.searchPlaceholder': 'Rechercher des commandes et skills…', 'chat.draftStarters.empty': 'Rien à ajouter', 'chat.draftStarters.sectionBuiltIn': 'Intégré', 'chat.draftStarters.sectionCommands': 'Commandes', 'chat.draftStarters.sectionSkills': 'Skills', 'chat.draftStarters.remove': 'Retirer', 'chat.commandAutocomplete.command.handoffReviewDescription': 'Créer ou réutiliser une session de revue séparée à partir d’un handoff généré.', 'chat.commandAutocomplete.command.featurePlanDescription': 'Lancer une session guidée et interactive de planification pour une nouvelle fonctionnalité.', 'chat.commandAutocomplete.command.catchUpDescription': 'Rétablir le contexte : ce que vous faisiez et où reprendre.', 'chat.commandAutocomplete.command.debugDescription': 'Investigation guidée de la cause racine d’un bug avant de proposer une correction.', 'chat.commandAutocomplete.command.weighDescription': 'Comparer 2 à 3 approches avec compromis et recommandation avant de vous engager.', 'chat.commandAutocomplete.command.exploreDescription': 'Vous orienter dans ce codebase : tour d’ensemble de l’architecture et des parties principales.', 'chat.questionCard.submitFailed': 'Impossible d’envoyer la réponse', 'chat.questionCard.dismissFailed': 'Impossible d’ignorer la question', 'chat.questionCard.noLongerPending': 'Cette question n’attend plus de réponse.', 'chat.questionCard.tryAgain': 'Veuillez réessayer dans un instant.', 'chat.messageBody.forkDialog.instructions.label': 'Instructions', 'chat.messageBody.forkDialog.instructions.placeholder': 'Ajouter des instructions pour la nouvelle session…', 'chat.messageBody.forkDialog.createWorktree': 'Créer un worktree', 'planView.tts.readAloud': 'Lire le plan à voix haute', 'planView.tts.stopSpeaking': 'Arrêter la lecture', 'filesView.tts.readAloud': 'Lire le fichier à voix haute', 'filesView.tts.stopSpeaking': 'Arrêter la lecture', 'chat.messageBody.actions.sendReviewFeedback': 'Envoyer le retour de revue à l’agent d’implémentation', 'chat.messageBody.actions.sendImplementationResponse': 'Envoyer la réponse d’implémentation à l’agent de revue', 'chat.chatInput.toast.planFeatureFailed': 'Impossible de lancer la planification de fonctionnalité', 'chat.chatInput.toast.catchUpFailed': 'Impossible de rattraper le contexte', 'chat.chatInput.toast.debugFailed': 'Impossible de lancer le débogage', 'chat.chatInput.toast.weighFailed': 'Impossible de comparer les options', 'chat.chatInput.toast.exploreFailed': 'Impossible de lancer le tour', 'chat.chatInput.reviewCommentsRemove': 'Retirer les commentaires de revue', 'chat.toolPart.showRawJson': 'Afficher le JSON brut', 'chat.toolPart.showFormattedJson': 'Afficher le JSON formaté', 'chat.toolPart.copyOutput': 'Copier la sortie', 'chat.toolPart.copiedOutput': 'Sortie copiée', 'chat.toolPart.copyOutputFailed': 'Impossible de copier la sortie', 'desktopHostSwitcher.status.checking': 'Vérification', 'desktopHostSwitcher.status.updateRecommended': 'Mise à jour recommandée', 'desktopHostSwitcher.status.incompatible': 'Incompatible', 'onboarding.remoteConnection.probe.updateRecommendedMessage': 'Cette instance utilise une version différente d’OpenChamber. Vous pouvez vous connecter, mais mettez les deux applications à jour si quelque chose ne fonctionne pas.', 'onboarding.remoteConnection.probe.incompatibleMessage': 'Le serveur exécute OpenChamber mais n’est pas compatible avec cette version de l’application. Mettez OpenChamber à jour sur le serveur, puis réessayez.', 'onboarding.desktopRecovery.remoteIncompatible.title': 'Mise à jour du serveur requise', 'onboarding.desktopRecovery.remoteIncompatible.description': 'Le serveur OpenChamber à l’adresse « {host} » n’est pas compatible avec cette version de l’application. Mettez OpenChamber à jour sur le serveur, puis réessayez.', 'vscodeLayout.actions.archiveAllAria': 'Archiver toutes les sessions', 'vscodeLayout.actions.archiveAllConfirm': 'Tout archiver', 'vscodeLayout.actions.archiveAllSuccess': '{count} session(s) archivée(s)', 'vscodeLayout.actions.archiveAllError': 'Impossible d’archiver {count} session(s)', 'vscodeLayout.actions.cancel': 'Annuler', } as const; export type I18nKey = keyof typeof dict;