import { en } from './en';
import type { Dict } from '../types';

export const fr: Dict = {
  ...en,
  'homeHero.addMenu': 'Ajouter du contexte',
  'homeHero.addPlugin': 'Ajouter un plugin',
  'homeHero.addConnectors': 'Ajouter des connecteurs',
  'homeHero.addMcp': 'Ajouter un serveur MCP',
  'homeHero.noPlugins': 'Aucun plugin installé',
  'homeHero.noMcp': 'Aucun serveur MCP',
  'homeHero.noConnectors': 'Aucun connecteur connecté',
  'chat.amrCard.switchTitle': 'Échec de l\'appel du modèle — cette exécution est en pause',
  'chat.amrCard.switchBody': 'Passez au service de modèles AMR officiel d\'Open Design — aucune clé API à configurer. Après connexion, autorisation et recharge, cette exécution sera relancée automatiquement.',
  'chat.amrCard.chipOfficial': 'Hébergement officiel',
  'chat.amrCard.chipNoKey': 'Sans clé API',
  'chat.amrCard.chipAutoRetry': 'Reprise automatique après connexion',
  'chat.amrCard.switchCta': 'Passer à AMR et relancer',
  'chat.amrError.authMessage': 'Votre compte AMR n\'est pas encore autorisé. Autorisez-le et cette exécution sera relancée automatiquement.',
  'chat.amrError.balanceMessage': 'Votre solde AMR est épuisé. Rechargez pour poursuivre cette exécution.',
  'chat.amrError.authorizeCta': 'Autoriser et relancer',
  'chat.amrError.rechargeCta': 'Recharger AMR',
  'chat.antigravityError.launchTerminalCta': 'Sign in via terminal',
  'chat.antigravityError.launchSwitchModelCta': 'Switch model in terminal',
  'plugins.actions.copyInstallCommand': 'Copier la commande d’installation',
  'plugins.actions.copyPluginId': 'Copier l’ID du plugin',
  'plugins.actions.copyReadmeBadge': 'Copier le badge README',
  'plugins.actions.openSourceGithub': 'Ouvrir la source sur GitHub',
  'plugins.actions.openSource': 'Ouvrir la source',
  'plugins.actions.openHomepage': 'Ouvrir la page d’accueil',
  'plugins.actions.openMarketplace': 'Ouvrir dans la marketplace',
  'common.cancel': 'Annuler',
  'common.save': 'Enregistrer',
  'common.close': 'Fermer',
  'common.clear': 'Effacer',
  'common.delete': 'Supprimer',
  'common.rename': 'Renommer',
  'common.edit': 'Modifier',
  'common.preview': 'Aperçu',
  'common.share': 'Partager',
  'common.search': 'Rechercher',
  'common.searchEllipsis': 'Rechercher…',
  'common.loading': 'Chargement…',
  'common.all': 'Tout',
  'common.none': 'Aucun',
  'common.default': 'Par défaut',
  'common.installed': 'installé',
  'common.notInstalled': 'non installé',
  'common.active': 'actif',
  'common.offline': 'hors ligne',
  'common.selected': 'sélectionné',
  'common.create': 'Créer',
  'common.openPreview': 'Ouvrir l\'aperçu',
  'common.exitFullscreen': 'Quitter le plein écran',
  'common.fullscreen': 'Plein écran',
  'common.openInNewTab': 'Ouvrir dans un nouvel onglet',
  'common.exportPdf': 'Exporter en PDF',
  'common.exportZip': 'Télécharger en .zip',
  'common.exportHtml': 'Exporter en HTML autonome',
  'common.exportImage': 'Exporter en image',
  'common.exportImageFailed': 'Échec de la capture d\'image. Veuillez réessayer ou utiliser l\'outil de capture d\'écran de votre navigateur.',
  'common.justNow': 'à l\'instant',
  'common.minutesAgo': 'il y a {n} min',
  'common.hoursAgo': 'il y a {n} h',
  'common.daysAgo': 'il y a {n} j',
  'common.weeksAgo': 'il y a {n} sem.',
  'common.now': 'maintenant',
  'common.minutesShort': '{n} min',
  'common.hoursShort': '{n} h',
  'common.daysShort': '{n} j',
  'common.untitled': 'Sans titre',
  'plugins.availableDetails.provenance': 'Provenance',
  'plugins.availableDetails.provenanceLine': 'depuis {source} · {trust} · {resolved}',
  'plugins.availableDetails.provenanceLineWithIntegrity': 'depuis {source} · {trust} · {resolved} · {integrity}',
  'plugins.availableDetails.install': 'Installer',
  'plugins.availableDetails.version': 'Version',
  'plugins.availableDetails.pluginVersion': 'Version du plugin',
  'plugins.availableDetails.copyInstallCommand': 'Copier la commande d’installation',
  'plugins.availableDetails.copied': 'Copié',
  'plugins.availableDetails.deprecatedPrefix': 'Déprécié : {message}',
  'plugins.availableDetails.deprecatedFallback': 'Cette version a été marquée comme dépréciée.',
  'plugins.availableDetails.yanked': 'Retiré.',
  'plugins.availableDetails.yankedWithReason': 'Retiré : {reason}',
  'plugins.availableDetails.versionDeprecatedSuffix': ' (dépréciée)',
  'plugins.availableDetails.versionYankedSuffix': ' (retirée)',
  'plugins.availableDetails.ref': 'Réf.',
  'plugins.availableDetails.integrity': 'Intégrité',
  'plugins.availableDetails.permissions': 'Autorisations',
  'plugins.availableDetails.capabilitySummary': 'Résumé des capacités',
  'app.brand': 'Open Design',
  'app.brandPill': 'Aperçu de recherche',
  'app.brandSubtitle': 'par Nexu Labs',
  'app.welcomeLoading': 'Chargement de l\'espace de travail…',
  'settings.welcomeKicker': '',
  'settings.welcomeTitle': 'Bienvenue',
  'settings.welcomeSubtitle': '',
  'settings.onboardingCreateTitle': 'Commencer par un brief',
  'settings.onboardingCreateBody': 'Décrivez le site, l’app, le deck, l’image ou la vidéo que vous voulez. Open Design créera un projet et gardera le travail modifiable.',
  'settings.onboardingMemoryTitle': 'Enregistrer le contexte de travail',
  'settings.onboardingMemoryBody': 'Ajoutez vos préférences, les faits du projet et les règles récurrentes afin que les prochaines discussions reprennent le bon contexte.',
  'settings.onboardingSystemsTitle': 'Importer votre système de design',
  'settings.onboardingSystemsBody': 'Choisissez ou créez un système de marque pour que les générations respectent les couleurs, la typographie et le langage produit réels.',
  'settings.onboardingExecutionTitle': 'Choisir le mode de génération',
  'settings.onboardingExecutionBody': 'CLI officielle avec configuration en un clic et réglages prêts à l’emploi. Utilisez une seule clé pour choisir parmi de nombreux modèles à meilleur prix.',
  'settings.onboardingAmrCloudBenefitOfficial': 'Recommandé officiellement',
  'settings.onboardingAmrCloudBenefitReady': 'Sans déploiement',
  'settings.onboardingAmrCloudBenefitModels': 'Prend en charge Claude Opus 4.8',
  'settings.onboardingAmrCloudBenefitPricing': 'SOTA Harness',
  'settings.onboardingAmrCloudUpcomingLabel': 'Bientôt',
  'settings.onboardingAmrCloudUpcomingImageVideo': 'Image et vidéo',
  'settings.onboardingAmrCloudUpcomingSkills': 'Skills en masse',
  'settings.onboardingAmrCloudUpcomingRouting': 'Routage intelligent',
  'settings.onboardingAmrModelSourceLabel': 'AMR CLI',
  'settings.onboardingAmrCloudAuthorizeAction': 'Autoriser AMR',
  'settings.onboardingAmrCloudAuthorizedAction': 'Autorisé',
  'settings.onboardingStepConnect': 'Connexion',
  'settings.onboardingStepDesignSystem': 'Système de design',
  'settings.onboardingStepProfile': 'À propos de vous',
  'settings.onboardingConnectTitle': 'Choisir un runtime',
  'settings.onboardingConnectBody': '',
  'settings.onboardingRecommended': 'Recommandé',
  'settings.onboardingAmrCloudOfficialBadge': 'Officiel',
  'settings.onboardingLocalTitle': 'Agent de code local',
  'settings.onboardingLocalBody': 'Utilisez une CLI installée comme Claude Code, Codex, Cursor, Gemini ou OpenCode.',
  'settings.onboardingLocalAction': 'Ouvrir les paramètres CLI',
  'settings.onboardingCliScanHint': 'Cela prend généralement 5 à 10 secondes.',
  'settings.onboardingByokTitle': 'Utiliser votre propre clé',
  'settings.onboardingByokBody': 'Utilisez vos propres identifiants de fournisseur de modèles.',
  'settings.onboardingByokAction': 'Ouvrir les paramètres BYOK',
  'settings.onboardingDesignTitle': 'Système de design',
  'settings.onboardingDesignBody': 'Générez une fois, réutilisez partout.',
  'settings.onboardingDesignIntroGenerateTitle': 'Générer depuis l’existant',
  'settings.onboardingDesignIntroGenerateBody': 'Importez votre système de design depuis GitHub, des dépôts de code locaux, des fichiers Figma, des images ou d’autres contenus.',
  'settings.onboardingDesignIntroReuseTitle': 'Réutiliser dans les prochains travaux',
  'settings.onboardingDesignIntroReuseBody': 'Les futurs prototypes, présentations et autres contenus pourront réutiliser vos polices, espacements, style de logo et tonalité de couleur.',
  'settings.onboardingDesignIntroSkipTitle': 'Optionnel pour l’instant',
  'settings.onboardingDesignIntroSkipBody': 'Ignorez cette étape si vous voulez commencer sans générer de système de design.',
  'settings.onboardingGithubTitle': 'Importer depuis GitHub',
  'settings.onboardingGithubBody': 'Utiliser un dépôt frontend.',
  'settings.onboardingUploadTitle': 'Importer des fichiers locaux',
  'settings.onboardingUploadBody': 'Ajoutez des fichiers projet, captures d’écran, CSS, docs ou assets.',
  'settings.onboardingPromptTitle': 'Générer depuis un prompt',
  'settings.onboardingPromptBody': 'Décrivez le produit ou la marque.',
  'settings.onboardingProfileTitle': 'À propos de vous',
  'settings.onboardingProfileBody': 'Détails optionnels pour de meilleurs réglages par défaut.',
  'settings.onboardingRoleLabel': 'Votre rôle',
  'settings.onboardingOrgSizeLabel': 'Taille de l’organisation',
  'settings.onboardingUseCaseLabel': 'Cas d’usage',
  'settings.onboardingSourceLabel': 'Où avez-vous entendu parler de nous ?',
  'settings.onboardingSelectPlaceholder': 'Sélectionnez une option',
  'settings.onboardingSelectMultiplePlaceholder': 'Sélectionnez une ou plusieurs options',
  'settings.onboardingOrgSolo': 'Solo / personnel (1)',
  'settings.onboardingOrgTeam': 'Petite équipe (2-10)',
  'settings.onboardingOrgStartup': 'Startup / PME (11-50)',
  'settings.onboardingOrgGrowth': 'Entreprise en croissance (51-200)',
  'settings.onboardingOrgMidMarket': 'Entreprise intermédiaire (201-1000)',
  'settings.onboardingOrgEnterprise': 'Grande entreprise (1000+)',
  'settings.onboardingRolePm': '📋 Responsable produit',
  'settings.onboardingRoleDesigner': '🎨 Designer',
  'settings.onboardingRoleEngineer': '💻 Ingénieur',
  'settings.onboardingRoleMarketing': '📣 Marketing',
  'settings.onboardingRoleGrowth': '📈 Croissance',
  'settings.onboardingRoleOps': '⚙️ Opérations',
  'settings.onboardingRoleFounder': '🚀 Fondateur / dirigeant',
  'settings.onboardingRoleStudent': '🎓 Étudiant / enseignant',
  'settings.onboardingRoleOther': '✨ Autre',
  'settings.onboardingUseProduct': '🎨 Design produit',
  'settings.onboardingUseDesignSystem': '🧩 Système de design',
  'settings.onboardingUsePrototype': '📱 Prototype / UI d’app',
  'settings.onboardingUseLanding': '🌐 Landing pages',
  'settings.onboardingUseAds': '📣 Publicités / contenu social',
  'settings.onboardingUseDashboard': '📊 Dashboards / outils internes',
  'settings.onboardingUseDeck': '🖥️ Présentation / deck',
  'settings.onboardingUseMarketing': '📈 Marketing / croissance',
  'settings.onboardingUseEngineering': '🤝 Transmission aux ingénieurs',
  'settings.onboardingUseAgency': '💼 Agence / travail client',
  'settings.onboardingSourceGithub': '🐙 GitHub',
  'settings.onboardingSourceFriend': '👥 Ami ou collègue',
  'settings.onboardingSourceSocial': '📱 Réseaux sociaux',
  'settings.onboardingSourceProductHunt': '🅿️ Product Hunt',
  'settings.onboardingSourceCommunity': '💬 Communauté design / IA',
  'settings.onboardingSourceYoutube': '▶️ YouTube',
  'settings.onboardingSourceBlog': '📰 Blog ou newsletter',
  'settings.onboardingSourceAiTool': '✨ Recommandation d’outil IA',
  'settings.onboardingSourceSearch': '🔍 Recherche',
  'settings.onboardingSourceEvent': '🎤 Événement ou communauté',
  'settings.onboardingBack': 'Retour',
  'settings.onboardingContinue': 'Continuer',
  'settings.onboardingFinish': 'Terminer la configuration',
  'settings.onboardingSkip': 'Ignorer pour l’instant',
  'settings.kicker': 'Paramètres',
  'settings.title': 'Mode d\'exécution',
  'settings.subtitle': 'Choisissez entre CLI local et BYOK.',
  'settings.modeAria': 'Mode d\'exécution',
  'settings.protocolAria': 'Protocole d\'API',
  'settings.modeDaemon': 'CLI local',
  'settings.modeDaemonHelp': 'Exécuter via un agent CLI sur votre machine',
  'settings.modeDaemonOffline': 'Le daemon n\'est pas en cours d\'exécution',
  'settings.modeDaemonOfflineMeta': 'daemon hors ligne',
  'settings.modeDaemonInstalledMeta': '{count} installé(s)',
  'settings.modeApi': 'Fournisseur API',
  'settings.modeApiMeta': 'BYOK',
  'settings.byokNoFileToolsNotice': 'BYOK ne peut pas lire, écrire ni modifier les fichiers du projet. Utilisez le CLI local pour changer le code.',
  'settings.codeAgent': 'Agent de code',
  'settings.codeAgentHint': 'Choisissez la CLI par laquelle les générations seront routées.',
  'settings.rescan': '↻ Réanalyser',
  'settings.rescanTitle': 'Réanalyser le PATH',
  'settings.rescanRunning': 'Analyse...',
  'settings.rescanSuccess': 'Analyse terminée. {count} disponible(s).',
  'settings.designSystemRenameFailed': 'Le renommage a échoué. Vérifiez le daemon et réessayez.',
  'settings.rescanFailed': 'L’analyse a échoué. Vérifiez le daemon et réessayez.',
  'settings.test': 'Tester',
  'settings.testTitle': 'Envoie un tout petit message de test pour vérifier la connexion',
  'settings.testRunning': 'Test de la connexion…',
  'settings.byokReadyToTest': 'Prêt à tester',
  'settings.testCancel': 'Annuler',
  'settings.testRetry': 'Relancer le test',
  'settings.required': 'requis',
  'settings.testMissingFields': 'Renseignez {fields} pour tester la connexion.',
  'settings.testSuccessApi': 'Connecté. Répondu en {ms} ms — \'{sample}\'',
  'settings.testSuccessCli': '{agentName} a répondu en {ms} ms — \'{sample}\'',
  'settings.testAuthFailed': 'Échec de l’authentification. Vérifiez votre clé API.',
  'settings.testForbidden': 'Accès interdit. Vérifiez le compte, la région ou l’organisation.',
  'settings.testNotFoundModel': 'Modèle \'{model}\' introuvable sur ce point d’accès.',
  'settings.testInvalidModelId': 'L’id de modèle \'{model}\' est invalide. Les ids personnalisés doivent commencer par une lettre ou un chiffre et ne contenir aucun espace.',
  'settings.testInvalidBaseUrl': 'L’URL de base est invalide ou inaccessible.',
  'settings.testRateLimited': 'Le fournisseur a limité le test. La configuration semble valide.',
  'settings.testUpstream': 'Le fournisseur a renvoyé {status}. Réessayez dans un instant.',
  'settings.testTimeout': 'Le test a expiré après {ms} ms.',
  'settings.testAgentMissing': '{agentName} n’est pas installé ou pas dans le PATH.',
  'settings.testAgentSpawn': 'Impossible de démarrer {agentName} : {detail}.',
  'settings.testUnknown': 'Échec du test : {detail}',
  'settings.agentInstall.install': 'Installer',
  'settings.agentInstall.docs': 'Documentation',
  'settings.agentInstall.pathHint': 'Si vous avez installé une CLI avec npm ou Homebrew et qu\'elle apparaît toujours comme non installée, vérifiez que le dossier bin de l\'outil est dans le PATH hérité par le daemon Open Design (le Terminal et les applications graphiques peuvent différer sur macOS). Voir QUICKSTART.md (section "Local agent CLI and PATH").',
  'settings.agentInstall.stepOpenLinks': 'Ouvrez Installer ou Documentation pour l\'agent souhaité.',
  'settings.agentInstall.stepAuth': 'Authentifiez-vous avec la CLI du fournisseur (connexion ou ajout des identifiants API) avant de revenir dans Open Design.',
  'settings.agentInstall.stepRescan': 'Cliquez sur Réanalyser dans cette section.',
  'settings.agentInstall.stepSelect': 'Sélectionnez la carte de l\'agent une fois qu\'elle apparaît comme installée.',
  'settings.noAgentsDetected': 'Aucun agent détecté pour l\'instant. Installez Claude Code, Codex, Devin for Terminal, Gemini CLI, OpenCode, Cursor Agent, Qwen ou GitHub Copilot CLI, puis cliquez sur Réanalyser.',
  'settings.agentInstalledGroup': 'Vos CLI ({count})',
  'settings.agentInstallGroup': 'Disponibles à installer ({count})',
  'settings.agentAuthRequired': 'Authentification requise',
  'settings.agentAuthUnknown': 'Statut d’authentification inconnu',
  'settings.amrCloud': 'Open Design AMR',
  'settings.amrAuthorize': 'Autoriser',
  'settings.amrBenefitOfficial': 'Officiel',
  'settings.amrBenefitLowerPrice': 'Coût réduit',
  'settings.amrBenefitManyModels': 'Nombreux modèles',
  'settings.amrPromoBonus': 'Bonus limité : +100 %',
  'settings.amrSignInToContinue': 'Connectez-vous pour continuer',
  'settings.amrSignIn': 'Se connecter',
  'settings.amrSignedIn': 'Connecté',
  'settings.amrNotSignedIn': 'Non connecté',
  'settings.amrSigningIn': 'Connexion…',
  'settings.amrCancelSignIn': 'Annuler la connexion',
  'settings.amrAccountStatus': 'Statut du compte AMR',
  'settings.amrConsole': 'Console AMR',
  'settings.amrLoginErrorCompact': 'Échec de la connexion AMR.',
  'settings.advanced': 'Avancé',
  'settings.amrLogin': 'Se connecter',
  'settings.amrLogout': 'Se déconnecter',
  'settings.amrLoggingIn': 'Connexion…',
  'settings.amrLoggingOut': 'Déconnexion…',
  'settings.amrLoggedInAs': 'Connecté avec {email}',
  'settings.amrLoggedInWithPlan': 'Connecté avec {email} · {plan}',
  'settings.amrLoggedInPill': 'Connecté',
  'settings.amrNotLoggedIn': 'Non connecté',
  'settings.apiSection': 'API Anthropic',
  'settings.quickFillProvider': 'Remplissage rapide du fournisseur',
  'settings.providerPreset': 'Préréglage de passerelle',
  'settings.protocolGroupProtocols': 'Protocoles',
  'settings.protocolGroupGateways': 'Passerelles',
  'settings.customProvider': 'Fournisseur personnalisé',
  'settings.apiKey': 'Clé API',
  'settings.apiKeyGetLink': 'Obtenir la clé ↗',
  'settings.showKey': 'Afficher la clé',
  'settings.hideKey': 'Masquer la clé',
  'settings.show': 'Afficher',
  'settings.hide': 'Masquer',
  'settings.model': 'Modèle',
  'settings.apiKeyInvalid': 'Clé API invalide.',
  'settings.modelsLoadedFromAccount': '✓ {count} modèles chargés depuis votre compte.',
  'settings.modelsLoadedCount': '✓ {count} modèles chargés.',
  'settings.fetchModels': 'Récupérer les modèles',
  'settings.fetchModelsTitle': 'Récupérer les modèles disponibles auprès de ce fournisseur',
  'settings.fetchModelsRunning': 'Récupération des modèles…',
  'settings.fetchModelsMissingFields': 'Renseignez {fields} pour récupérer les modèles.',
  'settings.fetchModelsInvalidBaseUrl': 'Saisissez une URL de base valide pour récupérer les modèles.',
  'settings.fetchModelsUnsupportedAzure': 'Azure OpenAI utilise des noms de déploiement ; la découverte de modèles n’est donc pas disponible ici.',
  'settings.fetchModelsUnsupportedOllama': 'La découverte des modèles Ollama Cloud n’est pas encore disponible. Choisissez ou saisissez un modèle.',
  'settings.fetchModelsSuccess': 'Modèles récupérés : {count}.',
  'settings.fetchModelsEmpty': 'Aucun modèle de texte compatible n’a été renvoyé.',
  'settings.fetchModelsUnsupported': 'La découverte de modèles n’est pas disponible pour ce protocole.',
  'settings.fetchModelsFailed': 'Impossible de récupérer les modèles : {detail}',
  'settings.suggestedModelsHint': 'Ce sont des modèles suggérés pour ce protocole. Votre fournisseur peut prendre en charge d\'autres modèles.',
  'settings.baseUrl': 'URL de base',
  'settings.baseUrlInvalid': 'Utilisez une URL publique http:// ou https://.',
  'settings.baseUrlCustomize': 'Personnaliser',
  'settings.baseUrlDefaultHint': 'Point de terminaison par défaut. Inutile de le modifier dans la plupart des cas.',
  'settings.azureBaseUrlPlaceholder': 'Collez l’URL endpoint Azure',
  'settings.azureBaseUrlHint': 'Trouvez-la dans le portail Azure → votre ressource → Endpoint.',
  'settings.azureDeploymentModel': 'Nom du déploiement',
  'settings.azureCustomDeploymentName': 'Custom deployment name',
  'settings.azureDeploymentModelHint': 'Pour Azure OpenAI, ce champ est utilisé comme nom du déploiement dans /openai/deployments/<model>. Saisissez le nom du déploiement créé dans Azure.',
  'settings.azureModelFetchHint': 'Pour Azure OpenAI, saisissez le nom du déploiement créé dans Azure. La découverte automatique des déploiements n’est pas disponible depuis ce point d’accès BYOK.',
  'settings.apiVersion': 'Version API',
  'settings.byokImageModel': 'Modèle de génération d\'images',
  'settings.byokVideoModel': 'Modèle de génération de vidéo',
  'settings.byokVideoI2vHint': 'Modèle image-vers-vidéo : une image de référence est requise (sinon la dernière image du projet est utilisée automatiquement)',
  'settings.byokSpeechModel': 'Modèle de synthèse vocale',
  'settings.byokSpeechVoice': 'Voix',
  'settings.byokModelDefaultOption': 'Par défaut',
  'settings.maxTokens': 'Tokens max (optionnel)',
  'settings.maxTokensHint': 'Limite de la longueur de réponse. Chaque modèle a une valeur par défaut (affichée à titre indicatif) ; laissez vide pour l\'utiliser, ou entrez un nombre pour la remplacer.',
  'settings.apiHint': 'Stockée uniquement dans ce navigateur.',
  'settings.skipForNow': 'Passer pour l\'instant',
  'settings.getStarted': 'Commencer',
  'settings.envConfigure': 'Mode d\'exécution',
  'settings.localCli': 'CLI local',
  'settings.anthropicApi': 'API Anthropic',
  'settings.noAgentSelected': 'aucun agent sélectionné',
  'settings.language': 'Langue',
  'settings.languageHint': 'Changer la langue de l\'interface. Enregistré dans ce navigateur.',
  'settings.appearance': 'Apparence',
  'settings.appearanceHint': 'Choisissez clair, sombre, ou suivez le paramètre système.',
  'settings.themeSystem': 'Système',
  'settings.themeLight': 'Clair',
  'settings.themeDark': 'Sombre',
  'settings.agentModelHead': 'Modèle pour :',
  'settings.modelPicker': 'Modèle',
  'settings.modelSourceLive': 'En direct depuis la CLI',
  'settings.modelSourceFallback': 'Liste intégrée',
  'settings.reasoningPicker': 'Effort de raisonnement',
  'settings.modelPickerHint': 'Par défaut utilise la configuration propre de la CLI. Personnalisé… vous permet de saisir n’importe quel identifiant de modèle.',
  'settings.modelPickerLiveHint': 'Les modèles ont été actualisés depuis la CLI installée. Par défaut utilise toujours la configuration propre de la CLI.',
  'settings.modelPickerLiveCatalogOnlyHint': 'Les modèles ont été actualisés depuis la CLI installée.',
  'settings.modelPickerFallbackHint': 'Valeurs par défaut intégrées affichées. Cliquez sur Réanalyser pour récupérer les modèles en direct depuis la CLI.',
  'settings.cliEnvTitle': 'Avancé : proxy et chemins personnalisés',
  'settings.cliEnvHint': 'Utilisez ces réglages uniquement si vous routez le trafic CLI via votre propre proxy ou si le binaire est installé à un emplacement non standard. Les secrets restent dans la configuration locale de l’app et seule la CLI sélectionnée les voit.',
  'settings.cliEnvClaudeConfigDir': 'Dossier de configuration Claude Code',
  'settings.cliEnvClaudeBaseUrl': 'URL de base du proxy Claude',
  'settings.cliEnvClaudeApiKey': 'Clé API du proxy Claude',
  'settings.cliEnvCodexHome': 'Dossier d’accueil Codex',
  'settings.cliEnvCodexBin': 'Chemin de l’exécutable Codex',
  'settings.cliEnvCodexBaseUrl': 'URL de base du proxy Codex/OpenAI',
  'settings.cliEnvCodexApiKey': 'Clé API du proxy Codex/OpenAI',
  'settings.modelCustom': 'Personnalisé (saisir ci-dessous)…',
  'settings.modelCustomLabel': 'Identifiant du modèle personnalisé',
  'settings.modelCustomPlaceholder': 'ex. anthropic/claude-sonnet-4-6',
  'settings.mediaProviders': 'Fournisseurs de médias',
  'settings.mediaProvidersHint': 'Clés API pour la génération d’images, de vidéos et d’audio.',
  'settings.mcpServerTitle': 'Serveur MCP',
  'settings.mcpServerHint': 'Exposez Open Design comme serveur MCP pour votre agent de code.',
  'settings.externalMcpTitle': 'MCP externe',
  'settings.externalMcpHint': 'Ajoutez des outils MCP depuis des services externes (Higgsfield, GitHub, …).',
  'settings.mediaProviderApiKey': 'Clé API',
  'settings.mediaProviderBaseUrl': 'URL de base',
  'settings.mediaProviderConfigured': 'Configuré',
  'settings.mediaProviderUnset': 'Non défini',
  'settings.mediaProviderClear': 'Effacer',
  'settings.mediaProviderClearConfirm': 'Effacer les paramètres enregistrés pour {name} ? Vous devrez les saisir à nouveau pour utiliser {name}.',
  'settings.mediaProviderPlaceholder': 'Coller la clé API',
  'settings.mediaProviderBaseUrlPlaceholder': 'Remplacer l\'URL de base par défaut',
  'settings.mediaProviderReload': 'Recharger depuis le daemon',
  'settings.mediaProviderReloadError': 'Impossible de recharger les paramètres des fournisseurs de médias depuis le daemon local.',
  'settings.mediaProviderReloadSuccess': 'Paramètres des fournisseurs de médias rechargés depuis le daemon local.',
  'settings.mediaProviderLoadError': 'Impossible de charger les paramètres des fournisseurs de médias depuis le daemon local. Utilisation temporaire des paramètres enregistrés dans le navigateur.',
  'settings.mediaProviderComingSoonHint': 'Nous suivons ces fournisseurs pour la feuille de route ; le daemon ne fournit pas encore de client, il n\'y a donc rien à configurer.',
  'settings.privacy': 'Confidentialité',
  'settings.privacyHint': 'Données partagées avec l’équipe Open Design',
  'settings.privacyConsentKicker': 'Aidez-nous à améliorer Open Design',
  'settings.privacyConsentLead': 'Open Design peut partager des données d’utilisation avec notre équipe pour nous aider à améliorer le produit. Cela inclut :',
  'settings.privacyConsentFooter': 'Vous pouvez modifier ces choix à tout moment dans Paramètres → Confidentialité. Nous ne téléversons jamais le contenu de vos fichiers d’artefacts générés.',
  'settings.privacyConsentShare': 'Partager les données d’utilisation',
  'settings.privacyConsentDecline': 'Ne pas partager',
  'settings.privacyConsentAccept': 'J’ai compris',
  'settings.privacyConsentBannerFooter': 'Le partage de données est activé par défaut. Vous pouvez le désactiver à tout moment dans Paramètres → Confidentialité. Nous ne téléversons jamais le contenu de vos fichiers d’artefacts générés.',
  'settings.privacyConsentPolicyLink': 'Lire la politique de confidentialité',
  'settings.privacyMetrics': 'Mesures anonymes',
  'settings.privacyMetricsHint': 'Nombre d’exécutions, usage des tokens, taux d’erreur, durée. Aucun prompt ni donnée de projet.',
  'settings.privacyContent': 'Contenu de conversation et d’outils',
  'settings.privacyContentHint': 'Vos prompts, les réponses de l’assistant, les entrées d’outils et les sorties d’outils (tronqués avant l’envoi). Les clés API, tokens, JWT, e-mails, IP et numéros de carte bancaire sont supprimés automatiquement avant l’envoi.',
  'settings.privacyArtifacts': 'Manifeste des artefacts du projet',
  'settings.privacyArtifactsHint': 'Noms, types et tailles des fichiers générés. Le contenu des fichiers n’est jamais envoyé.',
  'settings.privacyInstallationId': 'ID anonyme',
  'settings.privacyOptedOut': 'désactivé',
  'settings.privacyDataDeletion': 'Supprimer mes données',
  'settings.privacyDataDeletionHint': 'Renouvelle votre ID anonyme et arrête l’envoi. Les traces existantes expirent selon notre politique de conservation.',
  'settings.about': 'À propos',
  'settings.aboutHint': 'Version et informations d\'exécution',
  'settings.appVersion': 'Version',
  'settings.appChannel': 'Canal',
  'settings.appRuntime': 'Environnement',
  'settings.appPlatform': 'Plateforme',
  'settings.appArchitecture': 'Architecture',
  'settings.runtimePackaged': 'Application empaquetée',
  'settings.runtimeDevelopment': 'Développement',
  'settings.versionUnavailable': 'Les informations de version sont indisponibles lorsque le daemon est hors ligne.',
  'settings.installLatest': 'Installer la dernière version',
  'settings.alreadyLatest': 'Vous utilisez la dernière version',
  'settings.mcpTitle': 'Serveur MCP',
  'settings.mcpHint': 'Permet à un agent de code dans un autre dépôt (Claude Code, Cursor, VS Code, Antigravity, Zed, Windsurf) de lire vos projets Open Design. Utilisez-le pour intégrer un design dans votre app sans exporter d’abord un zip.',
  'settings.mcpDaemonError': 'Impossible de joindre le daemon local pour résoudre les chemins d’installation ({error}). Vérifiez qu’Open Design fonctionne, puis rouvrez ce panneau.',
  'settings.mcpBuildDaemon': 'Construisez d’abord le daemon.',
  'settings.mcpNodeMissing': 'Le binaire Node est introuvable.',
  'settings.mcpBuildHint': 'apps/daemon/dist/cli.js est introuvable. Exécutez `pnpm --filter @open-design/daemon build`, puis actualisez.',
  'settings.mcpMethodCli': 'Commande CLI',
  'settings.mcpInstructionCli': 'Exécutez ceci dans votre terminal.',
  'settings.mcpMethodToml': 'Configuration TOML',
  'settings.mcpInstructionCodex': 'Ajoutez cette table à {path}. La même configuration est partagée entre la CLI Codex et l’extension Codex IDE.',
  'settings.mcpMethodOneClick': 'Installation en un clic',
  'settings.mcpInstructionCursor': 'Cliquez sur « Installer dans Cursor » pour installer avec une boîte de validation, ou fusionnez ce JSON dans {path}.',
  'settings.mcpDeeplinkInstallCursor': 'Installer dans Cursor',
  'settings.mcpMethodJson': 'Configuration JSON',
  'settings.mcpInstructionCopilot': 'Ouvrez la palette de commandes ({shortcut}), lancez "MCP: Open User Configuration", puis fusionnez ce JSON. Copilot Chat doit être en mode Agent pour afficher les outils.',
  'settings.mcpInstructionAntigravity': 'Dans Antigravity : panneau Agent, menu "..." → MCP Servers → Manage MCP Servers → View raw config. Fusionnez ce JSON.',
  'settings.mcpInstructionZed': 'Ouvrez les réglages Zed ({shortcut}) et fusionnez ceci dans l’objet racine. Zed utilise "context_servers", pas "mcpServers".',
  'settings.mcpInstructionWindsurf': 'Ouvrez {path} (ou utilisez l’icône MCPs dans Cascade → Configure), puis fusionnez :',
  'settings.mcpCopyAria': 'Copier l’extrait de configuration MCP',
  'settings.mcpResolvingFailed': '# échec de résolution des chemins, voir l’erreur ci-dessus',
  'settings.mcpLoadingPaths': '# chargement des chemins d’installation depuis le daemon local…',
  'settings.mcpCopied': 'Copié',
  'settings.mcpCopy': 'Copier',
  'settings.mcpCursorApproval': 'Cursor affiche une boîte de validation avant d’écrire la configuration.',
  'settings.mcpRestartNote': 'Redémarrez votre client pour charger le nouveau serveur.',
  'settings.mcpRestartDetail': 'La plupart des éditeurs ne chargent les serveurs MCP qu’au démarrage. Dans Cursor / VS Code / Antigravity / Windsurf, vous pouvez lancer `Developer: Reload Window` depuis la palette de commandes au lieu de tout redémarrer. Zed et Claude Code nécessitent de quitter puis rouvrir.',
  'settings.mcpCapabilitiesTitle': 'Ce que votre agent peut faire',
  'settings.mcpCapabilityRead': 'Lire ou rechercher n’importe quel fichier dans un projet (HTML, JSX, CSS, JSON, SVG, Markdown).',
  'settings.mcpCapabilityPull': 'Récupérer un bundle de design en un seul appel : le fichier d’entrée plus chaque variable CSS, composant et police référencé.',
  'settings.mcpCapabilityDefault': 'Utiliser par défaut le projet et le fichier ouverts dans Open Design, afin que vous puissiez dire « intègre ce design dans mon application » sans repréciser quel design.',
  'settings.mcpRunningNote': 'Open Design doit être lancé pour que les appels d’outils MCP réussissent. Si vous avez démarré votre agent de code avant d’ouvrir Open Design, redémarrez l’agent pour qu’il puisse joindre le daemon actif.',
  'entry.tabDesigns': 'Designs',
  'entry.tabTemplates': 'Modèles',
  'entry.tabDesignSystems': 'Systèmes de design',
  'entry.tabConnectors': 'Connecteurs',
  'entry.openSettingsTitle': 'Paramètres',
  'entry.openSettingsAria': 'Ouvrir les paramètres',
  'entry.resizeAria': 'Redimensionner la barre latérale',
  'entry.loadingWorkspace': 'Chargement de l\'espace de travail…',
  'entry.useEverywhereTitle': 'Utiliser partout',
  'entry.useEverywhereAria': 'Ouvrir le guide « Utiliser partout » (CLI, MCP, HTTP, compétences)',
  'entry.navExpand': 'Afficher la barre latérale',
  'entry.navCollapse': 'Masquer la barre latérale',
  'entry.navNewProject': 'Nouveau projet',
  'entry.navHome': 'Accueil',
  'entry.navProjects': 'Projets',
  'entry.navTasks': 'Automatisations',
  'entry.navPlugins': 'Plugins',
  'entry.navDesignSystems': 'Systèmes de design',
  'entry.navIntegrations': 'Intégrations',
  'workspaceTabs.project': 'Projet',
  'workspaceTabs.pluginDetails': 'Détails du plugin',
  'workspaceTabs.marketplace': 'Marketplace',
  'homeHero.title': 'Que voulez-vous designer ?',
  'homeHero.templatesScrollHint': 'Faites défiler vers le haut pour explorer plus de modèles',
  'homeHero.templatesCollapse': 'Réduire les modèles',
  'homeHero.subtitlePrefix': 'L’alternative open source à Claude Design.',
  'homeHero.placeholder': 'Décrivez ce que vous voulez générer…',
  'homeHero.placeholderActive': 'Modifiez la requête d’exemple ou écrivez la vôtre…',
  'homeHero.skills': 'Compétences',
  'homeHero.applying': 'Application…',
  'homeHero.pluginTitle': 'Plugin : {title}',
  'homeHero.pluginPrefix': 'Plugin : {title}',
  'homeHero.skillPrefix': 'Compétence : {title}',
  'homeHero.removePlugin': 'Retirer le plugin',
  'homeHero.removePluginAria': 'Retirer le plugin {title}',
  'homeHero.clearActivePlugin': 'Effacer le plugin actif',
  'homeHero.clearActiveSkill': 'Effacer la compétence active',
  'homeHero.contextItemsResolved': '{n} éléments de contexte résolus',
  'homeHero.removeFile': 'Retirer le fichier',
  'homeHero.contextSearchResults': 'Résultats de recherche de contexte',
  'homeHero.contextSurfaces': 'Surfaces de contexte',
  'homeHero.loadingContext': 'Chargement du contexte…',
  'homeHero.noResults': 'Aucun résultat pour « {query} ».',
  'homeHero.searchPrompt': 'Rechercher des fichiers, plugins, compétences, serveurs MCP et connecteurs.',
  'homeHero.parameters': '{n} paramètres',
  'homeHero.details': 'Détails',
  'homeHero.toRun': 'pour lancer',
  'homeHero.forNewLine': 'pour passer à la ligne',
  'homeHero.run': 'Lancer',
  'homeHero.typeSomethingToRun': 'Saisissez quelque chose à lancer',
  'homeHero.promptExamples': 'Exemples de prompts',
  'homeHero.footer.designSystem': 'Style',
  'homeHero.footer.autoDesignSystem': 'Auto',
  'homeHero.footer.autoDesignSystemSummary': 'Associe automatiquement le système de design et le style visuel les plus adaptés au prompt actuel.',
  'homeHero.footer.ratio': 'Ratio',
  'homeHero.footer.duration': 'Durée',
  'homeHero.footer.resolution': 'Résolution',
  'homeHero.footer.speakerNotes': 'Notes',
  'homeHero.footer.noSpeakerNotes': 'Sans notes',
  'homeHero.footer.availableCount': '{n} disponibles',
  'homeHero.footer.noMatches': 'Aucun résultat',
  'homeHero.moreShortcuts': 'Plus',
  'homeHero.railAria': 'Choisir une catégorie de projet ou un raccourci de démarrage',
  'homeHero.confirmReplaceTitle': 'Remplacer le prompt actuel ?',
  'homeHero.confirmReplaceBody': 'Utiliser {title} remplacera le texte actuellement dans le champ.',
  'homeHero.confirmReplace': 'Remplacer',
  'homeHero.chip.prototype': 'Prototype',
  'homeHero.chip.liveArtifact': 'Artefact dynamique',
  'homeHero.chip.deck': 'Présentation',
  'homeHero.chip.image': 'Image',
  'homeHero.chip.video': 'Vidéo',
  'homeHero.chip.hyperframes': 'HyperFrames',
  'homeHero.chip.audio': 'Audio',
  'homeHero.chip.createPlugin': 'Créer un plugin',
  'homeHero.chip.figma': 'Depuis Figma',
  'homeHero.chip.folder': 'Depuis un dossier',
  'homeHero.chip.template': 'Depuis un modèle',
  'homeHero.chip.liveArtifactHint': 'Créer un artefact HTML/CSS/JS interactif que vous pouvez prévisualiser en direct.',
  'homeHero.chip.hyperframesHint': 'Créer du motion design basé sur HTML : sous-titres, visuels réactifs à l’audio, transitions de scènes.',
  'homeHero.chip.createPluginHint': 'Créer un plugin Open Design réutilisable et l’ajouter à Mes plugins.',
  'homeHero.chip.figmaHint': 'Migrer une frame Figma vers le système de design actif.',
  'homeHero.chip.folderHint': 'Importer un dossier local existant et continuer à l’éditer.',
  'homeHero.chip.templateHint': 'Commencer depuis un modèle intégré.',
  'workingDirPicker.title': 'Dossier',
  'workingDirPicker.homeTitle': 'Choisissez où ce projet doit vivre',
  'workingDirPicker.processing': 'Traitement…',
  'workingDirPicker.select': 'Choisir le dossier',
  'workingDirPicker.clearAria': 'Effacer le dossier de travail',
  'workingDirPicker.replaceFailed': 'Impossible de remplacer le dossier de travail',
  'workingDirPicker.unavailable': 'Le sélecteur de dossier n’est pas disponible dans cette build. Lancez l’app desktop pour choisir un dossier.',
  'workingDirPicker.openUnavailable': 'Ouvrez ce projet dans l’app desktop pour afficher le dossier.',
  'workingDirPicker.openFailed': 'Impossible d’afficher ce dossier',
  'workingDirPicker.showInFileManager': 'Afficher dans le gestionnaire de fichiers',
  'workingDirPicker.replace': 'Remplacer le dossier…',
  'workingDirPicker.recent': 'Dossiers récents',
  'handoff.toTarget': 'Transférer vers {target}',
  'handoff.action': 'Transférer',
  'handoff.fallbackTitle': 'Aucun éditeur trouvé dans $PATH - ouverture dans {target}',
  'handoff.chooseTargetAria': 'Choisir la cible du transfert',
  'handoff.notInstalled': 'Non installé',
  'handoff.notDetectedTitle': '{target} - non détecté dans $PATH',
  'handoff.openInTarget': 'Ouvrir dans {target}',
  'handoff.openAction': 'Ouvrir',
  'handoff.menuTitle': 'Ouvrir dans quel éditeur ?',
  'designSystemPicker.select': 'Choisir un système de design',
  'designSystemPicker.loading': 'Chargement des systèmes de design…',
  'designSystemPicker.searchPlaceholder': 'Rechercher des systèmes de design (titre / catégorie / résumé)',
  'designSystemPicker.searchCompactPlaceholder': 'Rechercher des systèmes de design',
  'designSystemPicker.noneTitle': 'Aucun système de design',
  'designSystemPicker.noneSummary': 'Laisser le modèle choisir librement',
  'designSystemPicker.empty': 'Aucun système de design correspondant',
  'designSystemPicker.openPreview': 'Ouvrir l’aperçu',
  'designSystemPicker.loadingPreview': 'Chargement de l’aperçu…',
  'designSystemPicker.noPreview': 'Aucune page d’aperçu. Ouvrez Systèmes de design pour voir l’aperçu complet.',
  'designSystemPicker.previewHint': 'Survolez un système de design pour le prévisualiser',
  'designSystemPicker.fullscreenAria': 'Aperçu plein écran de {title}',
  'designSystemPicker.closeFullscreen': 'Fermer l’aperçu plein écran',
  'designSystemPicker.closeEsc': 'Fermer (Esc)',
  'designSystemPicker.previewFrameTitle': 'Aperçu de {title}',
  'designSystemPicker.fullscreenFrameTitle': 'Aperçu plein écran de {title}',
  'recentProjects.title': 'Projets récents',
  'recentProjects.viewAll': 'Tout voir',
  'recentProjects.empty': 'Aucun projet pour l’instant — saisissez un prompt pour en créer un.',
  'home.openExistingProject': "Ouvrir un projet existant",
  'home.openExistingProjectOpening': "Ouverture...",
  'home.chooseFolderSubtitle': "Choisissez un dossier sur votre disque.",
  'pluginsHome.title': 'Communauté',
  'pluginsHome.subtitle': 'Workflows Open Design prêts à l’emploi, intégrés à ce runtime. Choisissez-en un pour charger un prompt de départ, ou parcourez le registre pour en trouver d’autres.',
  'pluginsHome.browseRegistry': 'Parcourir le registre',
  'pluginsHome.count': '{filtered} sur {total}',
  'pluginsHome.loadingCatalog': 'Chargement du catalogue…',
  'pluginsHome.emptyCatalog': 'Le catalogue est vide. Les plugins intégrés sont fournis avec Open Design et devraient apparaître ici automatiquement — essayez de redémarrer le daemon si cela persiste.',
  'pluginsHome.emptyFiltered': 'Aucun plugin ne correspond aux filtres actuels.',
  'pluginsHome.clearFilters': 'Effacer les filtres',
  'pluginsHome.modeAria': 'Mode du plugin',
  'pluginsHome.featured': 'Enregistrés',
  'pluginsHome.totalInCatalog': '{n} dans le catalogue',
  'pluginsHome.categoryFilterAria': 'Filtre de catégorie',
  'pluginsHome.subcategoryFilterAria': 'Filtre de sous-catégorie {label}',
  'pluginsHome.allCategory': 'Tous les {label}',
  'pluginsHome.searchPlaceholder': 'Rechercher des plugins…',
  'pluginsHome.searchAria': 'Rechercher des plugins',
  'pluginsHome.clearSearch': 'Effacer la recherche',
  'pluginsHome.facet.import': 'Importer',
  'pluginsHome.facet.create': 'Créer',
  'pluginsHome.facet.export': 'Exporter',
  'pluginsHome.facet.share': 'Partager',
  'pluginsHome.facet.deploy': 'Déployer',
  'pluginsHome.facet.refine': 'Affiner',
  'pluginsHome.facet.extend': 'Étendre',
  'pluginsHome.facet.figma': 'Figma',
  'pluginsHome.facet.github': 'GitHub',
  'pluginsHome.facet.codeFolder': 'Code / dossier',
  'pluginsHome.facet.url': 'URL',
  'pluginsHome.facet.screenshot': 'Capture d’écran',
  'pluginsHome.facet.pdf': 'PDF',
  'pluginsHome.facet.pptx': 'PPTX',
  'pluginsHome.facet.framer': 'Framer',
  'pluginsHome.facet.webflow': 'Webflow',
  'pluginsHome.facet.slides': 'Slides',
  'pluginsHome.facet.publicLink': 'Lien public',
  'pluginsHome.facet.githubPr': 'PR GitHub',
  'pluginsHome.facet.githubGist': 'Gist GitHub',
  'pluginsView.lede': 'Parcourez les workflows installés, découvrez les entrées du registre, gérez les sources et préparez les plugins pour une distribution d’équipe.',
  'pluginsView.importPlugin': 'Importer un plugin',
  'pluginsView.agentContext': 'Contexte agent',
  'pluginsView.summaryAria': 'Résumé des plugins',
  'pluginsView.areasAria': 'Zones des plugins',
  'pluginsView.loading': 'Chargement des plugins…',
  'pluginsView.tab.installed': 'Installés',
  'pluginsView.tab.available': 'Disponibles',
  'pluginsView.tab.sources': 'Sources',
  'pluginsView.tab.team': 'Équipe',
  'pluginsView.tabHint.installed': 'Vos plugins',
  'pluginsView.tabHint.available': 'Depuis les sources',
  'pluginsView.tabHint.sources': 'Catalogues',
  'pluginsView.tabHint.team': 'Entreprise',
  'pluginsView.installedTitle': 'Plugins installés',
  'pluginsView.installedSubtitle': 'Plugins que vous avez importés ou installés depuis des sources de marketplace.',
  'pluginsView.installedEmpty': 'Aucun plugin utilisateur installé pour l’instant. Utilisez Créer / Importer ou installez une entrée disponible.',
  'pluginsView.availableTitle': 'Disponibles depuis les sources',
  'pluginsView.availableSubtitle': 'Entrées de catalogue découvertes depuis les marketplaces configurées.',
  'pluginsView.availableFiltersAria': 'Filtres des plugins disponibles',
  'pluginsView.searchAvailableAria': 'Rechercher des plugins disponibles',
  'pluginsView.searchAvailablePlaceholder': 'Rechercher des plugins disponibles',
  'pluginsView.clearAvailableSearch': 'Effacer la recherche de plugins disponibles',
  'pluginsView.source': 'Source',
  'pluginsView.availableEmptyInstalled': 'Aucune entrée disponible pour l’instant. Les entrées installées sont retirées de Disponibles ; désinstallez-en une pour la rendre de nouveau disponible.',
  'pluginsView.availableEmptyFiltered': 'Aucune entrée disponible ne correspond à vos filtres.',
  'pluginsView.availableEmptyNoSources': 'Aucune entrée disponible pour l’instant. Ajoutez une source dans l’onglet Sources.',
  'pluginsView.installing': 'Installation…',
  'pluginsView.install': 'Installer',
  'pluginsView.sourcesTitle': 'Sources du registre',
  'pluginsView.sourcesSubtitle': 'Catalogues de marketplaces qui alimentent les plugins disponibles.',
  'pluginsView.sourceUrl': 'URL de la source',
  'pluginsView.defaultTrust': 'Confiance par défaut',
  'pluginsView.trust.restricted': 'Restreinte',
  'pluginsView.trust.trusted': 'Fiable',
  'pluginsView.trust.official': 'Officielle',
  'pluginsView.adding': 'Ajout…',
  'pluginsView.addSource': 'Ajouter une source',
  'pluginsView.sourcesEmpty': 'Aucune source de registre configurée pour l’instant.',
  'pluginsView.pluginsCount': '{n} plugins',
  'pluginsView.catalogVersion': 'catalogue v{version}',
  'pluginsView.trustFor': 'Confiance pour {name}',
  'pluginsView.refreshing': 'Actualisation…',
  'pluginsView.removing': 'Suppression…',
  'pluginsView.teamTitle': 'Marketplaces privées d’équipe',
  'pluginsView.teamBody': 'Cette zone est réservée aux catalogues entreprise et équipe, aux politiques de confiance privées et aux contrôles partagés du cycle de vie des plugins.',
  'pluginCard.details': 'Détails',
  'pluginCard.use': 'Utiliser',
  'pluginCard.useWithQuery': 'Utiliser avec une requête',
  'pluginCard.applying': 'Application…',
  'pluginCard.publish': 'Publier',
  'pluginCard.contribute': 'Contribuer',
  'pluginCard.starting': 'Démarrage…',
  'pluginCard.detailsAria': 'Voir les détails de {title}',
  'pluginCard.chooseUseAria': 'Choisir comment utiliser {title}',
  'pluginCard.useOptionsAria': 'Options d’utilisation pour {title}',
  'pluginCard.shareAria': 'Partager {title}',
  'pluginCard.publishAria': 'Publier {title} comme dépôt GitHub',
  'pluginCard.publishTitle': 'Publier le plugin comme dépôt GitHub',
  'pluginCard.contributeAria': 'Soumettre {title} à Open Design',
  'pluginCard.contributeTitle': 'Soumettre le plugin à Open Design via une pull request',
  'skillPluginCandidate.createForMe': 'Créer pour moi',
  'skillPluginCandidate.contributeToMain': 'Contribuer à main',
  'skillPluginCandidate.publishRepo': 'Publier le dépôt',
  'skillPluginCandidate.dismiss': 'Ignorer',
  'skillPluginCandidate.repoDescription': 'Ce dépôt semble pouvoir fonctionner comme plugin.',
  'integrations.kicker': 'Intégration',
  'integrations.lede': 'Connectez des systèmes externes, ajoutez des outils MCP à votre boucle agent et utilisez Open Design depuis d’autres IDE, scripts et automatisations.',
  'integrations.agentReady': 'Prêt pour les agents',
  'integrations.areasAria': 'Zones d’intégration',
  'integrations.tabLabel.mcp': 'MCP',
  'integrations.tabLabel.skills': 'Compétences',
  'integrations.tabHint.mcp': 'Outils externes',
  'integrations.tabHint.connectors': 'Comptes et API',
  'integrations.tabHint.useEverywhere': 'CLI, HTTP, MCP',
  'integrations.skillsTitle': 'Intégrations de compétences',
  'integrations.skillsBody': 'La gestion des intégrations au niveau des compétences est en cours de reprise depuis une autre branche. Cet onglet est réservé afin que MCP, les connecteurs et la future configuration des compétences vivent dans la même route Intégrations.',
  'mcpClient.title': 'Serveurs MCP externes',
  'mcpClient.subtitle': 'Outils tiers pour votre agent de code.',
  'mcpClient.addServer': 'Ajouter un serveur',
  'mcpClient.emptyTitle': 'Aucun serveur MCP configuré.',
  'mcpClient.emptyBody': 'Cliquez sur « Ajouter un serveur » pour commencer — choisissez un modèle (Higgsfield OpenClaw, Pollinations, Allyson, Imagician, EdgeOne Pages, GitHub, Filesystem…) ou configurez un serveur stdio / HTTP personnalisé.',
  'mcpClient.saveChanges': 'Enregistrer les modifications',
  'mcpClient.storedAt': 'Stocké dans',
  'mcpClient.daemonError': 'Impossible de joindre le daemon local. Vérifiez qu’Open Design est lancé, puis rouvrez ce panneau.',
  'mcpClient.saveFailed': 'Échec de l’enregistrement. Vérifiez que le daemon est lancé, puis réessayez.',
  'useEverywhere.modalAria': 'Utiliser Open Design partout',
  'useEverywhere.modalTitle': 'Utiliser Open Design partout',
  'useEverywhere.modalSubtitle': 'Ajoutez Open Design à n’importe quel IDE, agent ou script — CLI, HTTP, MCP et compétences. Utilisez « Copier le guide pour un agent » puis collez-le dans Claude Code, Codex, Cursor, openclaw ou hermes pour tout configurer.',
  'useEverywhere.closeAria': 'Fermer Utiliser partout',
  'useEverywhere.closeTitle': 'Fermer (Échap)',
  'useEverywhere.tabsAria': 'Surfaces d’intégration',
  'useEverywhere.footStrong': 'Transfert en un clic.',
  'useEverywhere.footBody': 'Copie un guide Markdown structuré que votre agent peut exécuter immédiatement — installer, vérifier et utiliser.',
  'useEverywhere.configureMcp': 'Configurer le serveur MCP',
  'useEverywhere.copyGuide': 'Copier le guide pour un agent',
  'useEverywhere.copy': 'Copier',
  'useEverywhere.copied': 'Copié',
  'useEverywhere.copyFailed': 'Échec de la copie',
  'useEverywhere.copySnippetAria': 'Copier l’extrait : {label}',
  'useEverywhere.section.overview.tab': 'Vue d’ensemble',
  'useEverywhere.section.overview.heading': 'Open Design fonctionne partout où votre agent fonctionne',
  'useEverywhere.section.overview.intro': 'Open Design est plus qu’une fenêtre : c’est un daemon local privilégié (`od`) plus un registre de compétences, systèmes de design et Atoms. Une fois lancé sur votre machine, tout agent de code (Claude Code, Codex, Cursor, OpenCode/openclaw, Hermes ou votre propre script) peut piloter des générations, inspecter les projets et produire des artefacts de design via quatre surfaces interchangeables.',
  'useEverywhere.section.overview.bullet1': 'CLI — `od <command>` pour scripts sans interface, CI et automatisation shell.',
  'useEverywhere.section.overview.bullet2': 'Serveur MCP — expose Open Design comme serveur Model Context Protocol afin que tout agent compatible MCP puisse lister les compétences, lancer des scénarios et lire les artefacts.',
  'useEverywhere.section.overview.bullet3': 'API HTTP — endpoints REST + SSE `http://127.0.0.1:7456/api/*` ; la même surface que celle utilisée par l’UI web.',
  'useEverywhere.section.overview.bullet4': 'Compétences — packs `SKILL.md` prêts à déposer (compatibles Claude) que tout agent déjà dans votre PATH peut invoquer même sans Open Design.',
  'useEverywhere.section.overview.bullet5': 'Artefacts standards — amorcez de vrais projets HTML depuis les compétences, les plugins par défaut intégrés et les exemples de plugins communautaires avant le démarrage du daemon.',
  'useEverywhere.section.overview.snippet1': 'Démarrer le daemon (et l’UI web) localement',
  'useEverywhere.section.overview.snippet2': 'Confirmer qu’il est joignable',
  'useEverywhere.section.overview.snippet3': 'Ingérer les artefacts standards avant le démarrage',
  'useEverywhere.section.overview.footer': 'Par défaut, le daemon écrit dans `./.od/` (local au projet). Définissez `OD_DATA_DIR=~/.open-design` pour partager les données entre projets.',
  'useEverywhere.section.cli.tab': 'CLI · od',
  'useEverywhere.section.cli.heading': 'Piloter Open Design depuis n’importe quel shell',
  'useEverywhere.section.cli.intro': 'Le binaire `od` est fourni avec le daemon et c’est le même binaire qu’utilisent Claude Code / Codex lorsqu’ils lancent une génération. La plupart des sous-commandes sont de fins clients qui POSTent vers le daemon local ; elles fonctionnent donc de la même façon, que vous l’ayez lancé via `pnpm tools-dev` ou comme app packagée.',
  'useEverywhere.section.cli.bullet1': '`od` (sans argument) — démarre le daemon et ouvre l’UI web.',
  'useEverywhere.section.cli.bullet2': '`od media generate ...` — produit des octets image / vidéo / audio via le protocole média unifié.',
  'useEverywhere.section.cli.bullet3': '`od run ...` — démarre une exécution de projet depuis un prompt + une compétence.',
  'useEverywhere.section.cli.bullet4': '`od plugin install <source>` / `od plugin apply <id>` — installe et applique des plugins communautaires.',
  'useEverywhere.section.cli.bullet5': '`od skills list` / `od design-systems list` — inspecte ce qui est disponible localement.',
  'useEverywhere.section.cli.bullet6': '`od status` / `od doctor` — vérifie la santé du daemon et détecte les CLI d’agents dans votre PATH.',
  'useEverywhere.section.cli.snippet1': 'Générer une image (délègue au fournisseur média configuré)',
  'useEverywhere.section.cli.snippet2': 'Lancer un plugin de scénario en mode sans interface et streamer les événements en lignes JSON',
  'useEverywhere.section.cli.snippet3': 'Inventorier les compétences et systèmes de design disponibles localement',
  'useEverywhere.section.cli.snippet4': 'Vérifier les artefacts amorcés via la CLI',
  'useEverywhere.section.cli.snippet5': 'Vérifier l’environnement + les agents détectés (Claude, Codex, Cursor, …)',
  'useEverywhere.section.cli.footer': 'Toutes les sous-commandes acceptent `--daemon-url http://127.0.0.1:<port>` pour cibler un daemon en cours d’exécution précis — utile avec une deuxième instance sandboxée pour les tests.',
  'useEverywhere.section.mcp.tab': 'Serveur MCP',
  'useEverywhere.section.mcp.heading': 'Exposer Open Design comme serveur MCP à tout agent de code',
  'useEverywhere.section.mcp.intro': 'Open Design fournit un serveur Model Context Protocol (`od mcp`) qui permet à tout client compatible MCP — Cursor, Claude Code, Antigravity, VS Code Copilot Chat, openclaw, hermes — de découvrir les outils Open Design (lister les compétences, rendre les aperçus, générer des médias, lancer des plugins) sans exécuter manuellement de commandes shell. Le daemon publie un extrait d’installation prêt à coller via `GET /api/mcp/install-info` pour chaque grand client.',
  'useEverywhere.section.mcp.bullet1': 'Transport stdio — aucun port supplémentaire, le client lance directement `od mcp`.',
  'useEverywhere.section.mcp.bullet2': 'Découvre automatiquement l’URL du daemon actif via le socket IPC local quand il est lancé comme sidecar.',
  'useEverywhere.section.mcp.bullet3': 'Retombe sur `--daemon-url http://127.0.0.1:<port>` pour les installations simples afin que le processus MCP trouve toujours un daemon en cours d’exécution.',
  'useEverywhere.section.mcp.bullet4': 'Fixe `OD_DATA_DIR` pour que le processus MCP lancé écrive au même endroit que le daemon déjà actif (évite EPERM dans les bundles macOS packagés).',
  'useEverywhere.section.mcp.snippet1': 'Configuration générique de client MCP (fonctionne dans Cursor, Claude Code, Codex, …)',
  'useEverywhere.section.mcp.snippet2': 'Ou : demander au daemon l’extrait adapté à votre installation',
  'useEverywhere.section.mcp.snippet3': 'Variante MCP pour artefacts dynamiques (lire et actualiser des dashboards)',
  'useEverywhere.section.mcp.footer': 'Dans l’app Open Design, ouvrez Paramètres → Intégrations pour copier une commande d’installation propre au client (Cursor, Claude Code, Antigravity, VS Code) au lieu d’éditer du JSON à la main.',
  'useEverywhere.section.http.tab': 'API HTTP',
  'useEverywhere.section.http.heading': 'La même surface REST + SSE que l’UI web',
  'useEverywhere.section.http.intro': 'Le daemon local expose une API HTTP sur `http://127.0.0.1:7456` (port configurable). Tous les endpoints appelés par l’UI web peuvent aussi être utilisés par vos scripts. Les endpoints de streaming (tours de chat, exécutions de projet) émettent des Server-Sent Events avec les types de contrat de `@open-design/contracts`.',
  'useEverywhere.section.http.bullet1': '`GET /api/health` — disponibilité du daemon.',
  'useEverywhere.section.http.bullet2': '`GET /api/skills` et `GET /api/design-systems` — registres disponibles.',
  'useEverywhere.section.http.bullet3': '`GET /api/projects` et `POST /api/projects` — lister et créer des projets (POST renvoie le projet + la première conversation).',
  'useEverywhere.section.http.bullet4': '`GET /api/projects/:id/chat` — flux SSE des événements agent pour une conversation.',
  'useEverywhere.section.http.bullet5': '`POST /api/plugins/:id/apply` — associe un plugin installé et renvoie sa requête d’exemple rendue + ses inputs.',
  'useEverywhere.section.http.bullet6': '`GET /api/agents` — CLI d’agents de code détectées dans votre PATH.',
  'useEverywhere.section.http.snippet1': 'Lister les compétences installées (l’agent les utilisera comme modèles)',
  'useEverywhere.section.http.snippet2': 'Créer un projet depuis un prompt (flux complet côté serveur)',
  'useEverywhere.section.http.snippet3': 'Streamer un tour de chat (SSE — chaque ligne est compatible JSON Lines)',
  'useEverywhere.section.http.footer': 'Les types TypeScript purs pour chaque requête/réponse vivent dans `@open-design/contracts` — importez-les dans votre script pour profiter de l’autocomplétion sans générateur.',
  'useEverywhere.section.skills.tab': 'Compétences et mode sans interface',
  'useEverywhere.section.skills.heading': 'Compétences prêtes à déposer pour tout agent — même sans Open Design lancé',
  'useEverywhere.section.skills.intro': 'Une compétence est un dossier avec un `SKILL.md` compatible Claude (front matter YAML + corps). Open Design étend ce format avec l’espace de noms `od:` (`mode`, `preview`, `design_system`, `inputs`, …) afin que le même artefact puisse être utilisé dans Open Design et par un agent vanilla comme Claude Code, Codex, openclaw ou hermes. La découverte suit une chaîne de priorité pour que les projets puissent remplacer leurs propres compétences.',
  'useEverywhere.section.skills.bullet1': 'Découverte : `./.claude/skills/` → `./skills/` → `~/.claude/skills/` (le projet gagne).',
  'useEverywhere.section.skills.bullet2': 'Créez un lien symbolique vers une compétence dans plusieurs projets pour la partager sans copie.',
  'useEverywhere.section.skills.bullet3': 'Chaque compétence peut déclarer des connecteurs, atoms, exigences de système de design et un exemple `preview` pour la galerie.',
  'useEverywhere.section.skills.bullet4': 'Mode sans interface : un agent avec `od` dans son PATH peut appeler `od skills list` puis lancer n’importe quelle compétence ; le daemon est optionnel pour les flux en lecture seule.',
  'useEverywhere.section.skills.bullet5': '`pnpm seed:test-projects` exerce la même forme d’artefact avec les exemples de plugins par défaut et communautaires, puis stocke les projets `index.html` obtenus comme données de test réutilisables.',
  'useEverywhere.section.skills.snippet1': 'SKILL.md minimal (front matter compatible Claude + extras Open Design)',
  'useEverywhere.section.skills.snippet2': 'Créer un lien symbolique vers une compétence partagée dans un projet (style cc-switch)',
  'useEverywhere.section.skills.snippet3': 'Mode sans interface : lister les compétences que le daemon voit maintenant',
  'useEverywhere.section.skills.snippet4': 'Lot de fixtures d’artefacts sans interface',
  'useEverywhere.section.skills.footer': 'Spec : `docs/skills-protocol.md` et `docs/agent-adapters.md` couvrent toute la surface des adaptateurs (Claude Code, Codex, Cursor, agents compatibles MCP, fallback API BYOK) et les stratégies d’injection de compétences par adaptateur.',
  'tasks.kicker': 'Espace d’automatisation',
  'tasks.comingSoon': 'Bientôt disponible',
  'tasks.lede': 'Les automatisations transforment les prompts en travail durable : Orbit les exécute, les routines les conservent, les planifications décident quand elles se déclenchent, et les artefacts dynamiques montrent ce qui a changé.',
  'tasks.newAutomation': 'Nouvelle automatisation',
  'tasks.previewNote': 'Surface d’aperçu uniquement. Les paramètres Orbit sont disponibles aujourd’hui ; les routines, planifications et connexions aux artefacts dynamiques arriveront avec la fusion des branches backend.',
  'tasks.primitivesAria': 'Primitives d’automatisation',
  'tasks.primitive.orbit.title': 'Orbit',
  'tasks.primitive.orbit.body': 'Un runtime persistant pour les travaux agent longs ou récurrents.',
  'tasks.primitive.orbit.enabled': 'Résumé quotidien activé',
  'tasks.primitive.orbit.manualOnly': 'Manuel uniquement',
  'tasks.primitive.routines.title': 'Routines',
  'tasks.primitive.routines.body': 'Définitions de tâches durables qui survivent après la fin d’un chat.',
  'tasks.primitive.routines.meta': 'Shell produit prêt',
  'tasks.primitive.schedules.title': 'Planifications',
  'tasks.primitive.schedules.body': 'Déclencheurs temporels ou événementiels qui décident quand une routine doit s’exécuter.',
  'tasks.primitive.schedules.meta': 'Branche en attente',
  'tasks.primitive.liveArtifacts.title': 'Artefacts dynamiques',
  'tasks.primitive.liveArtifacts.body': 'Rapports et notes qui continuent de se mettre à jour pendant qu’un agent travaille.',
  'tasks.primitive.liveArtifacts.meta': 'Modèle d’aperçu',
  'tasks.listAria': 'Liste des automatisations',
  'tasks.routinesAndRuns': '{n} routines et exécutions',
  'tasks.filtersAria': 'Filtres des automatisations',
  'tasks.filter.scheduled': 'Planifiées',
  'tasks.filter.running': 'En cours',
  'tasks.filter.done': 'Terminées',
  'tasks.configurationAria': 'Configuration de l’automatisation',
  'tasks.slot.trigger': 'Déclencheur',
  'tasks.slot.pattern': 'Motif',
  'tasks.slot.runtime': 'Runtime',
  'tasks.slot.output': 'Sortie',
  'tasks.liveArtifact': 'Artefact dynamique',
  'tasks.viewProgress': 'Voir la progression',
  'tasks.pause': 'Suspendre',
  'tasks.runNow': 'Lancer maintenant',
  'tasks.openArtifact': 'Ouvrir l’artefact',
  'tasks.status.dailyAt': 'Quotidien · {time}',
  'tasks.status.pausedManual': 'Suspendu · manuel uniquement',
  'tasks.sample.orbit.title': 'Résumé quotidien Orbit des connecteurs',
  'tasks.sample.orbit.metaEnabled': 'Le digest des connecteurs est planifié',
  'tasks.sample.orbit.metaDisabled': 'Ouvrez les paramètres Orbit pour l’activer',
  'tasks.sample.orbit.previewEnabled': 'orbit_daily.html · artefact dynamique',
  'tasks.sample.orbit.previewDisabled': 'Aucune exécution planifiée',
  'tasks.sample.orbit.triggerEnabled': 'Planification · chaque jour à {time}',
  'tasks.sample.orbit.triggerDisabled': 'Manuel · lancer à la demande',
  'tasks.sample.orbit.pattern': 'Routine · digest des connecteurs',
  'tasks.sample.orbit.runtime': 'Orbit · planifié par le daemon',
  'tasks.sample.orbit.output': 'Artefact dynamique · rapport actualisable',
  'tasks.sample.orbit.artifactMetaEnabled': 'S’actualise après chaque exécution',
  'tasks.sample.orbit.artifactMetaDisabled': 'En attente de planification',
  'tasks.sample.orbit.body1': '# Résumé quotidien de l’activité Orbit',
  'tasks.sample.orbit.body2': 'Connecteurs vérifiés · réussites, ignorés et échecs',
  'tasks.sample.orbit.body3': 'Les temps forts deviennent un artefact dynamique actualisable.',
  'tasks.sample.mcp.title': 'Recherche sur les alternatives MCP',
  'tasks.sample.mcp.status': 'En cours dans Orbit · 2 h 14 min',
  'tasks.sample.mcp.meta': '14 / 30 sources traitées',
  'tasks.sample.mcp.preview': 'research_notes.md · live',
  'tasks.sample.mcp.trigger': 'Manuel · ponctuel',
  'tasks.sample.mcp.pattern': 'Prompt de recherche approfondie',
  'tasks.sample.mcp.runtime': 'Distant · persistant',
  'tasks.sample.mcp.output': 'Rapport dynamique · mise à jour auto',
  'tasks.sample.mcp.artifactMeta': 'Mis à jour il y a 12 s',
  'tasks.sample.mcp.body1': '# Alternatives MCP - constats intermédiaires',
  'tasks.sample.mcp.body2': '14 sources examinées · 3 candidats présélectionnés',
  'tasks.sample.mcp.body3': '## Présélection',
  'tasks.sample.mcp.body4': '- Schémas d’appels d’outils via JSON-RPC...',
  'tasks.sample.mcp.body5': '- Protocoles d’agents basés sur gRPC...',
  'tasks.sample.weekly.title': 'Digest hebdomadaire d’équipe',
  'tasks.sample.weekly.status': 'Prochain : lun. 9:00',
  'tasks.sample.weekly.meta': 'Met à jour le doc hebdo de l’équipe',
  'tasks.sample.weekly.preview': 'team_weekly.md · prochain artefact',
  'tasks.sample.weekly.trigger': 'Planification · hebdomadaire',
  'tasks.sample.weekly.pattern': 'Routine · digest d’équipe',
  'tasks.sample.weekly.runtime': 'Distant · récurrent',
  'tasks.sample.weekly.output': 'Artefact dynamique · Markdown',
  'tasks.sample.weekly.artifactMeta': 'Dernière mise à jour il y a 4 j',
  'tasks.sample.weekly.body1': '# Hebdo équipe',
  'tasks.sample.weekly.body2': '## En cours',
  'tasks.sample.weekly.body3': '- Passe d’intégration du système de design',
  'tasks.sample.weekly.body4': '- Revue qualité des connecteurs',
  'tasks.sample.weekly.body5': '## Risques',
  'tasks.sample.pr.title': 'Rappel de revue PR',
  'tasks.sample.pr.status': 'Sur nouvelle PR · déclenché il y a 23 min',
  'tasks.sample.pr.meta': 'Envoie un DM Slack',
  'tasks.sample.pr.preview': 'Dernière livraison réussie',
  'tasks.sample.pr.trigger': 'Événement · nouvelle PR',
  'tasks.sample.pr.pattern': 'Routine · notification',
  'tasks.sample.pr.runtime': 'Local · exécution rapide',
  'tasks.sample.pr.output': 'Message · DM Slack',
  'tasks.sample.pr.artifactMeta': 'Dernier déclenchement il y a 23 min',
  'tasks.sample.pr.body1': 'PR #184 ouverte pour revue',
  'tasks.sample.pr.body2': 'Relecteurs associés : design-platform, web-runtime',
  'tasks.sample.pr.body3': 'Livraison : DM Slack envoyé',
  'tasks.sample.meeting.title': 'Préparation de réunion',
  'tasks.sample.meeting.status': 'Demain · 10:00',
  'tasks.sample.meeting.meta': 'Ponctuel · envoie un résumé',
  'tasks.sample.meeting.preview': 'meeting_brief.md · en file',
  'tasks.sample.meeting.trigger': 'Planification · ponctuelle',
  'tasks.sample.meeting.pattern': 'Prompt de briefing',
  'tasks.sample.meeting.runtime': 'Distant · borné',
  'tasks.sample.meeting.output': 'Artefact + message',
  'tasks.sample.meeting.artifactMeta': 'En file pour génération',
  'tasks.sample.meeting.body1': '# Brief de réunion',
  'tasks.sample.meeting.body2': 'Source de l’agenda : événement calendrier + docs liés',
  'tasks.sample.meeting.body3': 'La sortie inclura décisions, blocages et questions.',
  'tasks.sample.candidate.title': 'Suivi des candidats',
  'tasks.sample.candidate.status': 'Échec · attention requise',
  'tasks.sample.candidate.meta': 'Authentification expirée',
  'tasks.sample.candidate.preview': 'Reconnectez Greenhouse pour reprendre',
  'tasks.sample.candidate.trigger': 'Planification · quotidienne',
  'tasks.sample.candidate.pattern': 'Routine · synchronisation candidats',
  'tasks.sample.candidate.runtime': 'Distant · récurrent',
  'tasks.sample.candidate.output': 'Artefact dynamique · tableau',
  'tasks.sample.candidate.artifactMeta': 'Suspendu jusqu’à restauration de l’authentification',
  'tasks.sample.candidate.body1': '# Pipeline candidats',
  'tasks.sample.candidate.body2': 'Dernière synchronisation réussie : il y a 2 j',
  'tasks.sample.candidate.body3': 'Action requise : reconnecter le compte source.',
  'routines.title': 'Automatisations',
  'routines.subtitle': 'Automatisations planifiées qui s’exécutent sans surveillance.',
  'routines.newAutomation': 'Nouvelle automatisation',
  'routines.loading': 'Chargement…',
  'routines.empty': 'Aucune automatisation pour l’instant.',
  'routines.emptyHint': 'Cliquez sur Nouvelle automatisation pour planifier une exécution agent sans surveillance.',
  'routines.runHistoryLoading': 'Chargement des exécutions…',
  'routines.runHistoryEmpty': 'Aucune exécution pour l’instant.',
  'routines.fieldName': 'Nom',
  'routines.fieldNamePlaceholder': 'Briefing du matin',
  'routines.fieldPrompt': 'Prompt',
  'routines.fieldPromptPlaceholder': 'Récupère l’activité GitHub + Linear d’hier et résume ce qui a changé.',
  'routines.fieldSchedule': 'Planification',
  'routines.fieldMinute': 'Minute de chaque heure',
  'routines.fieldTime': 'Heure',
  'routines.fieldTimezone': 'Fuseau horaire',
  'routines.fieldsetProject': 'Projet',
  'routines.kind.hourly': 'Horaire',
  'routines.kind.daily': 'Quotidienne',
  'routines.kind.weekdays': 'Jours ouvrés',
  'routines.kind.weekly': 'Hebdomadaire',
  'routines.weekday.short.0': 'Dim',
  'routines.weekday.short.1': 'Lun',
  'routines.weekday.short.2': 'Mar',
  'routines.weekday.short.3': 'Mer',
  'routines.weekday.short.4': 'Jeu',
  'routines.weekday.short.5': 'Ven',
  'routines.weekday.short.6': 'Sam',
  'routines.weekday.long.0': 'dimanche',
  'routines.weekday.long.1': 'lundi',
  'routines.weekday.long.2': 'mardi',
  'routines.weekday.long.3': 'mercredi',
  'routines.weekday.long.4': 'jeudi',
  'routines.weekday.long.5': 'vendredi',
  'routines.weekday.long.6': 'samedi',
  'routines.timeAm': 'AM',
  'routines.timePm': 'PM',
  'routines.describe.hourly': 'S’exécute toutes les heures à :{minute}',
  'routines.describe.daily': 'S’exécute chaque jour à {time} {tz}',
  'routines.describe.weekdays': 'S’exécute du lun. au ven. à {time} {tz}',
  'routines.describe.weekly': 'S’exécute chaque {day} à {time} {tz}',
  'routines.modeCreate': 'Créer un nouveau projet à chaque exécution',
  'routines.modeCreateHint': 'Un espace de travail frais et isolé à chaque déclenchement.',
  'routines.modeReuse': 'Réutiliser un projet existant',
  'routines.modeReuseHint': 'Chaque exécution vit comme une nouvelle conversation dans le projet.',
  'routines.pickProject': '— Choisir un projet —',
  'routines.targetReuse': '→ {project}',
  'routines.targetCreate': '→ nouveau projet à chaque exécution',
  'routines.tagPaused': 'suspendue',
  'routines.metaNext': 'prochaine : {when}',
  'routines.metaLast': 'dernière :',
  'routines.triggerManual': 'manuelle',
  'routines.triggerScheduled': 'planifiée',
  'routines.openProject': 'Ouvrir le projet',
  'routines.openProjectTitle': 'Ouvrir le projet dans lequel cette exécution a écrit',
  'routines.runNow': 'Lancer maintenant',
  'routines.edit': 'Modifier',
  'routines.pause': 'Suspendre',
  'routines.resume': 'Reprendre',
  'routines.history': 'Historique',
  'routines.hideHistory': 'Masquer l’historique',
  'routines.delete': 'Supprimer',
  'routines.deleteTitle': 'Supprimer cette automatisation',
  'routines.cancel': 'Annuler',
  'routines.save': 'Enregistrer',
  'routines.saving': 'Enregistrement…',
  'routines.create': 'Créer',
  'routines.creating': 'Création…',
  'routines.status.queued': 'en file',
  'routines.status.running': 'en cours',
  'routines.status.succeeded': 'réussie',
  'routines.status.failed': 'échouée',
  'routines.status.canceled': 'annulée',
  'routines.confirmDelete': 'Supprimer cette automatisation ? Les exécutions passées et leurs projets seront conservés.',
  'routines.errorPickProject': 'Choisissez un projet à réutiliser, ou passez à « Créer un nouveau à chaque exécution »',
  'entry.helpAria': 'Aide',
  'entry.helpMenuAria': 'Menu d\'aide',
  'entry.helpGetHelp': 'Obtenir de l\'aide sur GitHub',
  'entry.helpSubmitFeature': 'Proposer une fonctionnalité',
  'entry.helpWhatsNew': 'Nouveautés',
  'entry.helpDownloadDesktop': 'Télécharger l\'app de bureau',
  'entry.githubStarLabel': 'Star',
  'entry.githubStarTitle': 'Cliquez pour nous mettre une étoile sur GitHub',
  'entry.githubStarAria': 'Mettre une étoile à Open Design sur GitHub',
  'entry.tabImageTemplates': 'Modèles d\'image',
  'entry.tabVideoTemplates': 'Modèles de vidéo',
  'promptTemplates.searchPlaceholder': 'Rechercher des modèles…',
  'promptTemplates.countLabel': '{n} résultats',
  'promptTemplates.emptyImage': 'Aucun modèle de prompt d\'image installé pour l\'instant.',
  'promptTemplates.emptyVideo': 'Aucun modèle de prompt vidéo installé pour l\'instant.',
  'promptTemplates.emptyNoMatch': 'Aucun modèle ne correspond à votre recherche.',
  'promptTemplates.attributionFooter': 'Adapté de bibliothèques de prompts publiques. Chaque carte renvoie vers l\'auteur original.',
  'promptTemplates.openPreviewTitle': 'Ouvrir le prompt et l\'aperçu',
  'promptTemplates.sourcePrefix': 'Source :',
  'promptTemplates.fetchError': 'Impossible de charger le contenu de ce modèle.',
  'promptTemplates.promptLabel': 'Corps du prompt',
  'promptTemplates.copyPrompt': 'Copier le prompt',
  'promptTemplates.copyDone': 'Copié !',
  'promptTemplates.modelHint': 'Modèle suggéré : {model}',
  'promptTemplates.openSource': 'Voir l\'original',
  'promptTemplates.openFullscreen': 'Ouvrir l\'aperçu en plein écran',
  'promptTemplates.closeFullscreen': 'Fermer l\'aperçu plein écran',
  'promptTemplates.allSources': 'Toutes les sources',
  'promptTemplates.sourceFilterAria': 'Filtrer par source',
  'promptTemplates.retry': 'Réessayer',
  'connectors.title': 'Connecteurs',
  'connectors.subtitle': 'Sources de données locales et futures pouvant alimenter les artefacts dynamiques.',
  'connectors.account': 'Compte',
  'connectors.noAccount': 'Non connecté',
  'connectors.tools': 'Outils',
  'connectors.connect': 'Connecter',
  'connectors.disconnect': 'Déconnecter',
  'connectors.authorizationPending': 'En attente d’autorisation...',
  'connectors.authorizationPendingHint': 'Terminez l’autorisation dans la fenêtre ouverte.',
  'connectors.cancelAuthorization': 'Annuler',
  'connectors.configure': 'Configurer',
  'connectors.unavailable': 'Indisponible',
  'connectors.phaseStubTitle': 'Les API de connecteurs arrivent en phase 3 ; ceci est un aperçu.',
  'connectors.statusAvailable': 'Disponible',
  'connectors.statusConnected': 'Connecté',
  'connectors.statusError': 'Erreur',
  'connectors.statusDisabled': 'Désactivé',
  'connectors.gateTitle': 'Ajoutez votre clé API Composio pour continuer',
  'connectors.gateBody': 'Collez votre clé ci-dessus, puis cliquez sur Enregistrer la clé pour charger les intégrations disponibles.',
  'connectors.aboutLabel': 'À propos',
  'connectors.detailsLabel': 'Détails',
  'connectors.statusLabel': 'Statut',
  'connectors.category.aiAgents': 'Agents IA',
  'connectors.category.aiInfrastructure': 'Infrastructure IA',
  'connectors.category.accounting': 'Comptabilité',
  'connectors.category.admin': 'Administration',
  'connectors.category.advertising': 'Publicité',
  'connectors.category.analytics': 'Analytique',
  'connectors.category.automation': 'Automatisation',
  'connectors.category.cms': 'CMS',
  'connectors.category.crm': 'CRM',
  'connectors.category.calendar': 'Calendrier',
  'connectors.category.commerce': 'Commerce',
  'connectors.category.communication': 'Communication',
  'connectors.category.contacts': 'Contacts',
  'connectors.category.dataPlatform': 'Plateforme de données',
  'connectors.category.database': 'Base de données',
  'connectors.category.design': 'Design',
  'connectors.category.developer': 'Développement',
  'connectors.category.documentation': 'Documentation',
  'connectors.category.erp': 'ERP',
  'connectors.category.education': 'Éducation',
  'connectors.category.email': 'E-mail',
  'connectors.category.events': 'Événements',
  'connectors.category.fieldService': 'Service terrain',
  'connectors.category.finance': 'Finance',
  'connectors.category.fitness': 'Santé / fitness',
  'connectors.category.forms': 'Formulaires',
  'connectors.category.gaming': 'Jeux',
  'connectors.category.hr': 'RH',
  'connectors.category.hospitality': 'Hôtellerie',
  'connectors.category.itsm': 'ITSM',
  'connectors.category.integration': 'Intégration',
  'connectors.category.localization': 'Localisation',
  'connectors.category.logistics': 'Logistique',
  'connectors.category.maps': 'Cartes',
  'connectors.category.marketing': 'Marketing',
  'connectors.category.media': 'Médias',
  'connectors.category.meetings': 'Réunions',
  'connectors.category.nonprofit': 'Associatif',
  'connectors.category.observability': 'Observabilité',
  'connectors.category.payments': 'Paiements',
  'connectors.category.personal': 'Personnel',
  'connectors.category.presentations': 'Présentations',
  'connectors.category.procurement': 'Achats',
  'connectors.category.product': 'Produit',
  'connectors.category.productivity': 'Productivité',
  'connectors.category.projectManagement': 'Gestion de projet',
  'connectors.category.recruiting': 'Recrutement',
  'connectors.category.research': 'Recherche',
  'connectors.category.salesIntelligence': 'Intelligence commerciale',
  'connectors.category.scheduling': 'Planification',
  'connectors.category.search': 'Recherche',
  'connectors.category.security': 'Sécurité',
  'connectors.category.signing': 'Signature',
  'connectors.category.social': 'Social',
  'connectors.category.spreadsheets': 'Feuilles de calcul',
  'connectors.category.storage': 'Stockage',
  'connectors.category.support': 'Support',
  'connectors.category.surveys': 'Sondages',
  'connectors.category.tasks': 'Tâches',
  'connectors.category.timeTracking': 'Suivi du temps',
  'connectors.category.video': 'Vidéo',
  'connectors.category.whiteboard': 'Tableau blanc',
  'connectors.categoryLabel': 'Catégorie',
  'connectors.providerLabel': 'Fournisseur',
  'connectors.toolsSection': 'Outils',
  'connectors.toolsLoading': 'Chargement des outils…',
  'connectors.noToolsAvailable': 'Aucun outil disponible pour le moment. Connectez-vous pour découvrir les capacités de cette intégration.',
  'connectors.toolDetailsUnavailable': 'Les détails des outils sont indisponibles, mais ce connecteur signale {n} outils.',
  'connectors.loadMoreTools': 'Charger plus d’outils',
  'connectors.openDetailsAria': 'Ouvrir les détails de {name}',
  'connectors.toolsBadgeNone': 'Aucun outil',
  'connectors.toolsBadgeOne': '{n} outil',
  'connectors.toolsBadgeMany': '{n} outils',
  'connectors.searchPlaceholder': 'Rechercher des connecteurs…',
  'connectors.searchAriaLabel': 'Rechercher des connecteurs par nom, fournisseur ou outil',
  'connectors.searchClear': 'Effacer la recherche',
  'connectors.emptyNoMatchTitle': 'Aucun connecteur ne correspond à « {query} »',
  'connectors.emptyNoMatchBody': 'Essayez un autre mot-clé ou effacez la recherche pour voir le catalogue complet.',
  'connectors.emptyNoMatchAction': 'Effacer la recherche',
  'newproj.tabPrototype': 'Prototype',
  'newproj.tabLiveArtifact': 'Artefact dynamique',
  'newproj.tabDeck': 'Diaporama',
  'newproj.tabTemplate': 'Depuis un modèle',
  'newproj.tabMedia': 'Média',
  'newproj.tabOther': 'Autre',
  'newproj.titlePrototype': 'Nouveau prototype',
  'newproj.titleLiveArtifact': 'Nouvel artefact dynamique',
  'newproj.titleDeck': 'Nouveau diaporama',
  'newproj.titleTemplate': 'Partir d\'un modèle',
  'newproj.titleImage': 'Nouvelle image',
  'newproj.titleVideo': 'Nouvelle vidéo',
  'newproj.titleAudio': 'Nouvel audio',
  'newproj.titleMedia': 'Nouveau média',
  'newproj.titleOther': 'Nouveau projet',
  'newproj.namePlaceholder': 'Nom du projet',
  'newproj.fidelityLabel': 'Fidélité',
  'newproj.fidelityWireframe': 'Maquette filaire',
  'newproj.fidelityHigh': 'Haute fidélité',
  'newproj.toggleSpeakerNotes': 'Utiliser des notes d\'orateur',
  'newproj.toggleSpeakerNotesHint': 'Moins de texte sur les diapositives — gardez les points de discussion dans les notes.',
  'newproj.toggleAnimations': 'Inclure des animations',
  'newproj.toggleAnimationsHint': 'Ajouter du mouvement (entrée, survol, transitions) en plus du modèle.',
  'newproj.targetPlatformsLabel': 'Plateformes cibles',
  'newproj.targetPlatformsHint': 'Choisissez-en une ou plusieurs. Le web responsive couvre seulement les points de rupture du navigateur ; ajoutez iOS, Android, tablette ou app desktop pour des variantes natives multiplateformes.',
  'newproj.platform.responsive.label': 'Web responsive',
  'newproj.platform.responsive.hint': 'Une expérience web adaptée aux navigateurs ordinateur, tablette et mobile',
  'newproj.platform.webDesktop.label': 'Web desktop',
  'newproj.platform.webDesktop.hint': 'Produit ou landing page pensée d’abord pour le navigateur',
  'newproj.platform.mobileIos.label': 'App iOS',
  'newproj.platform.mobileIos.hint': 'Cadres iPhone et règles d’interaction iOS',
  'newproj.platform.mobileAndroid.label': 'App Android',
  'newproj.platform.mobileAndroid.hint': 'Cadres Pixel et règles d’interaction Material',
  'newproj.platform.tablet.label': 'App tablette',
  'newproj.platform.tablet.hint': 'Expérience tablette native avec vues fractionnées',
  'newproj.platform.desktopApp.label': 'App desktop',
  'newproj.platform.desktopApp.hint': 'Habillage d’application macOS/Windows',
  'newproj.surfaceOptionsLabel': 'Surfaces complémentaires',
  'newproj.includeLandingPage': 'Inclure une landing page',
  'newproj.includeLandingPageHint': 'Ajoutez une page marketing responsive pour publicités, listes d’attente, lancements, téléchargements d’app ou explication produit.',
  'newproj.includeOsWidgets': 'Inclure des widgets OS',
  'newproj.includeOsWidgetsHint': 'Ajoutez des widgets natifs de plateforme pour écran d’accueil, écran verrouillé ou accès rapide sur mobile/tablette.',
  'newproj.includeOsWidgetsDisabledHint': 'Disponible quand iOS, Android ou app tablette est sélectionné comme plateforme cible.',
  'newproj.templateLabel': 'Modèle',
  'newproj.noTemplatesTitle': 'Aucun modèle pour l\'instant',
  'newproj.noTemplatesBody': 'Ouvrez un projet, puis utilisez le menu Partager dans la visionneuse de fichiers pour le convertir en modèle. Les modèles apparaissent ici.',
  'newproj.savedTemplate': 'Modèle enregistré',
  'newproj.fileSingular': 'fichier',
  'newproj.filePlural': 'fichiers',
  'newproj.create': 'Créer',
  'newproj.locationLabel': 'Enregistrer dans',
  'newproj.locationDefault': 'Projets Open Design',
  'newproj.locationExternalBase': 'Base externe',
  'newproj.createLiveArtifact': 'Créer un artefact dynamique',
  'newproj.createFromTemplate': 'Créer depuis le modèle',
  'newproj.createDisabledTitle': 'Enregistrez d\'abord un projet comme modèle (menu Partager dans un projet).',
  'newproj.importClaudeZip': 'Importer un ZIP Claude Design',
  'newproj.importClaudeZipTitle': 'Importer une exportation .zip Claude Design',
  'newproj.importingClaudeZip': 'Importation…',
  'newproj.privacyFooter': 'Seul vous pouvez voir votre projet par défaut.',
  'newproj.designSystem': 'Système de design',
  'newproj.dsNoneFreeform': 'Aucun — libre',
  'newproj.dsNoneSubtitleEmpty': 'Aucun jeton de système de design ; choisissez votre propre palette',
  'newproj.dsNoneSubtitleSelected': 'Ignorer les jetons du système de design. L\'agent choisit sa propre palette.',
  'newproj.dsCategoryFallback': 'Système de design',
  'newproj.dsSearch': 'Rechercher des systèmes de design…',
  'newproj.dsModeAria': 'Mode de sélection',
  'newproj.dsModeSingle': 'Unique',
  'newproj.dsModeMulti': 'Multiple',
  'newproj.dsNoneTitle': 'Aucun — libre',
  'newproj.dsNoneSub': 'Ignorer les jetons du système de design. L\'agent choisit sa propre palette.',
  'newproj.dsEmpty': 'Aucun système de design ne correspond à « {query} ».',
  'newproj.dsFootSingular': 'sert uniquement d’inspiration.',
  'newproj.dsFootPlural': 'servent uniquement d’inspiration.',
  'newproj.dsFootClear': 'Effacer',
  'newproj.dsBadgeDefault': 'PAR DÉFAUT',
  'newproj.dsPrimaryFallback': 'Primaire',
  'newproj.surfaceImage': 'Image',
  'newproj.surfaceVideo': 'Vidéo',
  'newproj.surfaceAudio': 'Audio',
  'newproj.modelLabel': 'Modèle',
  'newproj.modelSearch': 'Rechercher des modèles…',
  'newproj.modelEmpty': 'Aucun modèle ne correspond.',
  'newproj.modelRecommended': 'Recommandé',
  'newproj.modelMissingTitle': 'Choisir un modèle',
  'newproj.modelMissingSub': 'Choisissez le modèle pour cette surface.',
  'newproj.aspectLabel': 'Format',
  'newproj.videoLengthLabel': 'Durée',
  'newproj.videoLengthSeconds': '{n} s',
  'newproj.audioKindLabel': 'Type d\'audio',
  'newproj.audioKindMusic': 'Musique',
  'newproj.audioKindSpeech': 'Voix / TTS',
  'newproj.audioKindSfx': 'Effets sonores',
  'newproj.audioDurationLabel': 'Durée',
  'newproj.audioDurationSeconds': '{n} s',
  'newproj.voiceLabel': 'Voix',
  'newproj.voicePlaceholder': 'Identifiant de voix du fournisseur, optionnel',
  'newproj.connectorsLabel': 'Connecteurs',
  'newproj.connectorsHint': 'Sources de données que cet artefact peut interroger.',
  'newproj.connectorsEmptyTitle': 'Aucun connecteur configuré',
  'newproj.connectorsEmptyBody': 'Connectez une source de données pour que l\'artefact dynamique utilise de vraies données au lieu d\'espaces réservés.',
  'newproj.connectorsEmptyCta': 'Configurer les connecteurs →',
  'newproj.connectorsLoading': 'Chargement des connecteurs…',
  'newproj.connectorsCountOne': '{n} connecté',
  'newproj.connectorsCountMany': '{n} connectés',
  'newproj.connectorsManage': 'Gérer',
  'newproj.promptTemplateLabel': 'Modèle de référence',
  'newproj.promptTemplateNoneTitle': 'Aucun — rédigez le vôtre',
  'newproj.promptTemplateNoneSub': 'Ignorer la galerie, décrivez votre propre brief',
  'newproj.promptTemplateRefSub': 'Modèle de référence',
  'newproj.promptTemplateSearch': 'Rechercher des modèles…',
  'newproj.promptTemplateEmpty': 'Aucun modèle installé pour cette surface pour l\'instant.',
  'newproj.promptTemplateBodyLabel': 'Prompt (vous pouvez l\'ajuster)',
  'newproj.promptTemplateOptimizeHint': 'Modifiez ce que vous voulez — vos modifications sont transmises au brief de l\'agent.',
  'newproj.promptTemplateBodyEmpty': 'Corps vide — l\'agent ne recevra aucune référence de modèle.',
  'newproj.deleteTemplateTitle': 'Supprimer le modèle',
  'newproj.deleteTemplateConfirm': 'Supprimer « {name} » ? Cette action est irréversible.',
  'newproj.deleteTemplateConfirmCta': 'Supprimer le modèle',
  'newproj.deleteTemplateError': 'Impossible de supprimer ce modèle. Veuillez réessayer.',
  'designs.subRecent': 'Récents',
  'designs.subYours': 'Vos designs',
  'designs.filterAria': 'Filtrer les projets',
  'designs.searchPlaceholder': 'Rechercher…',
  'designs.emptyNoProjects': 'Aucun projet pour l\'instant.',
  'designs.emptyNoMatch': 'Aucun projet ne correspond à votre recherche.',
  'designs.deleteTitle': 'Supprimer le projet',
  'designs.deleteConfirm': 'Supprimer « {name} » ?',
  'designs.cardFreeform': 'libre',
  'designs.badgeLive': 'Dynamique',
  'designs.liveArtifactBadgesAria': 'Badges d’artefact dynamique',
  'designs.liveCount': '{n} dynamiques',
  'designs.statusLive': 'Artefact dynamique',
  'designs.statusArchived': 'Archivé',
  'designs.statusError': 'Erreur',
  'designs.statusRefreshing': 'Actualisation…',
  'designs.statusRefreshFailed': 'Échec de l’actualisation',
  'designs.statusRefreshed': 'Actualisé',
  'designs.status.notStarted': 'Non commencé',
  'designs.status.queued': 'En file d\'attente',
  'designs.status.running': 'En cours',
  'designs.status.awaitingInput': 'Entrée requise',
  'designs.status.succeeded': 'Terminé',
  'designs.status.published': 'Publié',
  'designs.status.failed': 'Échoué',
  'designs.status.canceled': 'Annulé',
  'designs.viewToggleAria': 'Mode d\'affichage',
  'designs.viewGrid': 'Vue grille',
  'designs.viewKanban': 'Vue tableau',
  'designs.kanbanEmptyColumn': 'Aucun design',
  'designs.deleteAria': 'Supprimer le projet {name}',
  'designs.menuMore': 'Plus d’actions',
  'designs.menuRename': 'Renommer',
  'designs.menuDelete': 'Supprimer',
  'designs.renamePrompt': 'Nouveau nom pour « {name} »',
  'designs.selectMode': 'Sélectionner',
  'designs.cancelSelect': 'Annuler',
  'designs.deleteSelected': 'Supprimer la sélection',
  'designs.selectedCount': '{n} sélectionné(s)',
  'designs.deleteSelectedConfirm': 'Supprimer {n} projet(s) ?',
  'designs.deleteSelectedSuccess': '{n} projet(s) supprimé(s) avec succès.',
  'designs.deleteSelectedPartial': '{deleted} projet(s) supprimé(s) ; {failed} échec(s).',
  'designs.tagPrototype': 'Prototype',
  'designs.tagLiveArtifact': 'Artefact dynamique',
  'designs.tagSlide': 'Diapositive',
  'designs.tagMedia': 'Média',
  'designs.renameTitle': 'Renommer le projet',
  'designs.renameSave': 'OK',
  'designs.renameCancel': 'Annuler',
  'examples.typeLabel': 'Type',
  'examples.surfaceLabel': 'Surface',
  'examples.surfaceWeb': 'Web',
  'examples.surfaceImage': 'Image',
  'examples.surfaceVideo': 'Vidéo',
  'examples.surfaceAudio': 'Audio',
  'examples.scenarioLabel': 'Scénario',
  'examples.modeAll': 'Tout',
  'examples.modePrototypeDesktop': 'Prototypes · Bureau',
  'examples.modePrototypeMobile': 'Prototypes · Mobile',
  'examples.modeDeck': 'Diaporamas',
  'examples.modeDocument': 'Docs et modèles',
  'examples.modeOrbit': 'Orbit',
  'examples.modeLive': 'Dynamique',
  'examples.scenarioGeneral': 'Général',
  'examples.scenarioEngineering': 'Ingénierie',
  'examples.scenarioProduct': 'Produit',
  'examples.scenarioDesign': 'Design',
  'examples.scenarioMarketing': 'Marketing',
  'examples.scenarioSales': 'Ventes',
  'examples.scenarioFinance': 'Finance',
  'examples.scenarioHr': 'RH',
  'examples.scenarioOperations': 'Opérations',
  'examples.scenarioSupport': 'Support',
  'examples.scenarioLegal': 'Juridique',
  'examples.scenarioEducation': 'Éducation',
  'examples.scenarioPersonal': 'Personnel',
  'examples.searchPlaceholder': 'Rechercher des exemples…',
  'examples.searchAria': 'Rechercher des exemples par nom',
  'examples.emptyNoSkills': 'Aucune compétence disponible. Le daemon est-il en cours d\'exécution ?',
  'examples.emptyNoMatch': 'Aucun exemple ne correspond à ces filtres.',
  'examples.openPreview': '⤢ Ouvrir l\'aperçu',
  'examples.loadingPreview': 'Chargement de l\'aperçu…',
  'examples.hoverPreview': 'Survoler pour prévisualiser',
  'examples.usePrompt': 'Utiliser ce prompt',
  'examples.previewModalTitle': 'Ouvrir l\'aperçu complet (modale)',
  'examples.shareTitle': 'Partager cet exemple',
  'examples.shareLoadFirst': 'Survolez pour charger l\'aperçu d\'abord',
  'examples.unavailablePlaceholder': 'Pas d\'aperçu {kind} fourni — ouvrez pour en savoir plus',
  'examples.shareUnavailable': 'Pas d\'aperçu {kind} fourni à partager',
  'examples.shareMenu': 'Partager ▾',
  'examples.exportPdfAllSlides': 'Exporter en PDF (toutes les diapos)',
  'examples.exportPptxLocked': 'Exporter en PPTX… (ouvrez d\'abord le modèle)',
  'examples.tagSlideDeck': 'Diaporama',
  'examples.tagTemplate': 'Modèle',
  'examples.tagDesignSystem': 'Système de design',
  'examples.tagMobilePrototype': 'Prototype mobile',
  'examples.tagDesktopPrototype': 'Prototype bureau',
  'examples.tagImage': 'Image',
  'examples.tagVideo': 'Vidéo',
  'examples.tagAudio': 'Audio',
  'examples.previewLabel': 'Aperçu',
  'ds.surfaceLabel': 'Surface',
  'ds.surfaceWeb': 'Web',
  'ds.surfaceImage': 'Image',
  'ds.surfaceVideo': 'Vidéo',
  'ds.surfaceAudio': 'Audio',
  'ds.searchPlaceholder': 'Rechercher des systèmes de design…',
  'ds.emptyNoMatch': 'Aucun système de design ne correspond à votre recherche.',
  'ds.badgeDefault': 'PAR DÉFAUT',
  'ds.preview': 'Aperçu',
  'ds.previewTitle': 'Aperçu du système de design',
  'ds.categoryAll': 'Tout',
  'ds.categoryUncategorized': 'Non catégorisé',
  'ds.showcase': 'Vitrine',
  'ds.tokens': 'Jetons',
  'ds.specToggle': 'DESIGN.md',
  'ds.specLoading': 'Chargement du DESIGN.md…',
  'avatar.title': 'Compte et paramètres',
  'avatar.localCli': 'CLI local',
  'avatar.anthropicApi': 'API Anthropic',
  'avatar.useLocal': 'Utiliser le CLI local',
  'avatar.useApi': 'Utiliser API · BYOK',
  'avatar.codeAgent': 'Agent de code',
  'avatar.rescan': 'Réanalyser le PATH',
  'avatar.amrConsole': 'Compte AMR',
  'avatar.amrConsoleMeta': 'Solde et recharge',
  'avatar.settings': 'Paramètres',
  'avatar.backToProjects': 'Retour aux projets',
  'avatar.metaActive': 'actif',
  'avatar.metaOffline': 'hors ligne',
  'avatar.metaSelected': 'sélectionné',
  'avatar.noAgentSelected': 'aucun agent sélectionné',
  'avatar.modelSection': 'Modèle',
  'avatar.modelLabel': 'Modèle',
  'avatar.reasoningLabel': 'Raisonnement',
  'avatar.customSuffix': '(personnalisé)',
  'inlineSwitcher.chipTitle': 'Changer de CLI / modèle',
  'inlineSwitcher.chipCli': 'CLI locale',
  'inlineSwitcher.chipByok': 'BYOK',
  'inlineSwitcher.modelDefault': 'par défaut',
  'inlineSwitcher.noAgent': 'aucun agent',
  'inlineSwitcher.modeLabel': 'Mode',
  'inlineSwitcher.agentLabel': 'Agent',
  'inlineSwitcher.providerLabel': 'Fournisseur',
  'inlineSwitcher.modelLabel': 'Modèle',
  'inlineSwitcher.useCli': 'Utiliser la CLI locale',
  'inlineSwitcher.useByok': 'Utiliser votre clé API',
  'inlineSwitcher.daemonOffline': 'Daemon hors ligne — ouvrez les paramètres',
  'inlineSwitcher.noAgentsDetected': 'Aucune CLI détectée dans le PATH',
  'inlineSwitcher.openSettingsForModel': 'Configurez le fournisseur dans les Paramètres',
  'inlineSwitcher.missingApiKey': 'Clé API manquante — ajoutez-la dans les Paramètres.',
  'inlineSwitcher.openFullSettings': 'Ouvrir les paramètres d\'exécution',
  'inlineSwitcher.customSuffix': '(personnalisé)',
  'project.backToProjects': 'Retour aux projets',
  'project.metaFreeform': 'libre',
  'project.customInstructions': 'Instructions du projet',
  'project.customInstructionsPlaceholder': 'Instructions pour ce projet (injectées dans chaque message)…',
  'project.resizeChatPanel': 'Redimensionner le panneau de chat',
  'project.instructionsActive': 'Actif — inclus dans chaque message',
  'chat.tabChat': 'Chat',
  'chat.tabComments': 'Commentaires',
  'chat.commentsSoon': 'Commentaires — bientôt disponible',
  'chat.comments.attached': 'Attaché au chat',
  'chat.comments.emptyAttached': 'Aucun commentaire attaché.',
  'chat.comments.saved': 'Commentaires enregistrés',
  'chat.comments.emptySaved': 'Aucun commentaire enregistré.',
  'chat.comments.add': 'Ajouter',
  'chat.comments.addAll': 'Tout ajouter',
  'chat.comments.remove': 'Retirer',
  'chat.comments.placeholder': 'Commenter cet élément…',
  'chat.comments.addSend': 'Ajouter et envoyer',
  'chat.comments.updateSend': 'Mettre à jour et envoyer',
  'chat.comments.removeAttachment': 'Retirer le commentaire attaché',
  'chat.comments.removeAttachmentAria': 'Retirer le commentaire attaché pour {name}',
  'chat.comments.comment': 'Commentaire',
  'chat.comments.sendToChat': 'Envoyer au chat',
  'chat.comments.sending': 'Envoi…',
  'chat.comments.edit': 'Modifier',
  'chat.comments.select': 'Sélectionner',
  'chat.comments.selectAll': 'Tout sélectionner',
  'chat.comments.deselect': 'Désélectionner',
  'chat.comments.nSelected': '{n} sélectionné(s)',
  'chat.comments.pin': 'Épingler',
  'chat.comments.addNote': 'Ajouter une note',
  'chat.comments.savedToast': 'Commentaire enregistré',
  'chat.comments.pinSavedToast': 'Épingle enregistrée',
  'chat.comments.pinAtCoords': 'à {x}, {y}',
  'chat.comments.capturedItems': '{n} élément(s) capturé(s)',
  'chat.comments.clear': 'Effacer',
  'chat.comments.targetImage': 'Image',
  'chat.comments.targetControl': 'Control',
  'chat.comments.targetLink': 'Link',
  'chat.comments.targetText': 'Text',
  'chat.comments.targetSection': 'Section',
  'chat.comments.targetPage': 'Page',
  'chat.comments.targetArea': 'Area',
  'chat.annotationNotePlaceholder': 'Add a note for this mark',
  'chat.annotationAttachImage': 'Joindre une image',
  'chat.annotationAttachedImages': 'Images jointes',
  'chat.annotationAttachedRemove': 'Supprimer la dernière image',
  'chat.annotationAddToInput': 'Add to input',
  'chat.annotationAddingToInput': 'Adding...',
  'chat.annotationQueue': 'Queue',
  'chat.annotationQueueing': 'Queueing...',
  'chat.annotationSending': 'Sending...',
  'chat.annotationSendDisabledReason': 'A task is currently running',
  'chat.annotationPreviewMissing': 'Could not capture the preview. Please try again.',
  'chat.annotationPreviewMissingInk': 'Could not capture the preview. Try again to avoid sending only ink.',
  'chat.annotationTimeout': 'Annotation send timed out. Please try again.',
  'chat.annotationFailed': 'Annotation send failed. Please try again.',
  'chat.annotationProjectCreateFailed': 'Could not create a project, so the annotation was not sent.',
  'chat.annotationUploadFailed': 'Attachment upload failed. Please try again.',
  'chat.inspect.noEditableTargets': 'Aucune cible de texte ou de style modifiable trouvée.',
  'chat.inspect.noCommentTargets': 'Aucune cible de texte ou visuelle pouvant recevoir un commentaire n’a été trouvée.',
  'chat.inspect.editHint': 'Sélectionnez une cible de texte ou de style dans l’aperçu pour la modifier.',
  'chat.inspect.commentHint': 'Sélectionnez du texte ou une zone dans l’aperçu pour ajouter un commentaire.',
  'chat.conversationsTitle': 'Conversations',
  'chat.conversationsAria': 'Historique des conversations',
  'chat.newConversation': 'Nouvelle conversation',
  'chat.newConversationsTitle': 'Nouvelle conversation',
  'chat.conversationsHeading': 'Conversations',
  'chat.new': 'Nouvelle',
  'chat.emptyConversations': 'Aucune conversation pour l\'instant.',
  'chat.deleteConversation': 'Supprimer la conversation',
  'chat.renameConversationLabel': 'Renommer « {title} »',
  'chat.deleteConversationConfirm': 'Supprimer « {title} » ? Cela supprime ses messages.',
  'chat.untitledConversation': 'Conversation sans titre',
  'chat.forkedConversationTitle': 'Fork de {title}',
  'chat.forkConversationFailed': 'Impossible de forker cette conversation.',
  'chat.startTitle': 'Démarrer une conversation',
  'chat.startHint': 'Décrivez ce que vous voulez générer, ou partez de l’un de ces exemples :',
  'chat.fillInputTitle': 'Cliquez pour remplir le champ',
  'chat.jumpToLatest': 'Aller au plus récent',
  'chat.scrollToLatest': 'Défiler jusqu\'au plus récent',
  'chat.you': 'Vous',
  'chat.openFile': 'Ouvrir {name}',
  'chat.copyPrompt': 'Copier le prompt',
  'chat.copyDone': 'Copié !',
  'chat.composerPlaceholder': 'Décrivez ce que vous voulez générer…',
  'chat.activeFileEditingLabel': "Modification",
  'chat.activeFilePlaceholder': "Demandez à Open Design de modifier {file}...",
  'chat.designArtifactsShowMore': "Afficher {count} fichiers de design supplémentaires",
  'chat.mode.chat.label': 'Ask',
  'chat.mode.chat.title': 'Mode Ask',

  'chat.mode.chat.summary': 'Pour les réponses rapides, les retouches, la planification et la discussion, sans supposer qu’un livrable design doit être créé.',
  'chat.mode.chat.solves': 'Utilisez-le pour clarifier des idées, améliorer des prompts, comparer des options ou poser des questions sur un travail existant.',
  'chat.mode.chat.query1': 'Résume ce brouillon et indique les manques.',
  'chat.mode.chat.query2': 'Aide-moi à choisir la meilleure structure pour cette landing page.',
  'chat.mode.chat.query3': 'Relis ce design et propose des améliorations concrètes.',
  'chat.mode.design.label': 'Design Agent',
  'chat.mode.design.title': 'Mode Design Agent',
  'chat.mode.design.summary': 'Pour créer ou modifier des sorties concrètes : pages, prototypes, artefacts live, slides, images, vidéos, HyperFrames, audio, tableaux de bord et fichiers projet.',
  'chat.mode.design.solves': 'Utilisez-le quand Open Design doit générer des fichiers, mettre à jour le workspace ou transformer un brief en livrables multimodaux.',
  'chat.mode.design.query1': 'Crée une landing page de lancement produit et un prototype HyperFrames à partir de ce brief.',
  'chat.mode.design.query2': 'Fais un deck investisseur de 10 slides avec notes de prise de parole.',
  'chat.mode.design.query3': 'Génère des concepts image, vidéo et audio pour cette campagne.',
  'chat.mode.cardBestFor': 'Idéal pour',
  'chat.mode.cardTry': 'Exemples de demandes',
  'chat.composerHint': '⌘/Ctrl + Entrée pour envoyer · indiquez objectif, contenu, style et format',
  'chat.cliSettingsTitle': 'Paramètres CLI et modèle',
  'chat.cliSettingsAria': 'Ouvrir les paramètres CLI et modèle',
  'chat.attachTitle': 'Attacher des fichiers (ou coller / déposer)',
  'chat.attachAria': 'Attacher des fichiers',
  'chat.importTitle': 'Importer des sources (bientôt disponible)',
  'chat.importLabel': 'Importer',
  'chat.importComingSoon': 'Bientôt disponible',
  'chat.importSoon': 'Bientôt',
  'chat.importFig': 'Téléverser un fichier .fig',
  'chat.importGitHub': 'Connecter GitHub',
  'chat.importWeb': 'Capturer un élément web',
  'chat.importFolder': 'Lier un dossier de code',
  'chat.importSkills': 'Compétences et systèmes de design',
  'chat.importProject': 'Référencer un autre projet',
  'chat.importDesignSystemHeader': 'Choisir un design system',
  'chat.importDesignSystemBack': 'Retour',
  'chat.importDesignSystemSearch': 'Rechercher un design system…',
  'chat.importDesignSystemEmpty': 'Aucun design system ne correspond à "{query}"',
  'chat.importDesignSystemNone': 'Aucun — libre',
  'chat.importDesignSystemNoneSub': "Ne pas ancrer à un système cette fois",
  'chat.importDesignSystemActive': 'Actif',
  'chat.importDesignSystemSwitched': 'Design system basculé sur {title}',
  'chat.importDesignSystemFailed': "Impossible de changer de design system. Veuillez réessayer.",
  'chat.importDesignSystemLoadFailed': 'Impossible de charger les design systems.',
  'chat.linkedFolderRemoveAria': 'Supprimer le dossier lié {path}',
  'chat.linkedFolderNotFound': 'Le dossier n\'existe pas',
  'chat.linkedFolderAlready': 'Ce dossier est déjà lié',
  'chat.linkedFolderPickError': 'Impossible d\'ouvrir le sélecteur de dossier',
  'chat.queuedHeader': 'En file',
  'chat.queuedToSend': 'à envoyer',
  'chat.queuedEditQueuedTaskAria': 'Modifier la tâche en file',
  'chat.queuedSave': 'Enregistrer',
  'chat.queuedCancel': 'Annuler',
  'chat.queuedReorder': 'Drag to reorder',
  'chat.queuedEdit': 'Modifier',
  'chat.queuedMore': 'autres en file',
  'chat.queuedFollowUpFallback': 'Suivi en file',
  'chat.send': 'Envoyer',
  'chat.stop': 'Arrêter',
  'chat.removeAria': 'Retirer {name}',
  'chat.example1Title': 'Pitch deck éditorial',
  'chat.example1Tag': 'Magazine',
  'chat.example1Prompt': 'Un pitch deck éditorial de 10 diapositives pour un studio de design levant des fonds — mise en page grille suisse, titres avec empattement surdimensionnés et lettrines, numéros de section en monospace, généreux espaces négatifs, et diapositives photo pleine page entrecoupées de diapos riches en texte. Couverture, vision, marché, produit, traction, équipe, levée de fonds, contact.',
  'chat.example2Title': 'Tableau de bord SaaS analytics',
  'chat.example2Tag': 'Données',
  'chat.example2Prompt': 'Un tableau de bord analytics dense pour un SaaS d\'outils développeurs — bandeau KPI avec deltas semaine sur semaine, deux graphiques en lignes empilées (MRR et espaces de travail actifs), une carte de chaleur mondiale d\'utilisation, une grille de rétention de cohortes, un classement des meilleurs clients et un fil d\'actualité en temps réel. Thème sombre, chiffres tabulaires en monospace, accents sparkline.',
  'chat.example3Title': 'Rapport annuel long défilement',
  'chat.example3Tag': 'Éditorial',
  'chat.example3Prompt': 'Un rapport annuel interactif pour une ONG climatique — mise en page éditoriale à long défilement mêlant de grands blocs de citation, des visualisations de données (barres empilées, compteurs animés, une carte choroplèthe des sites de projet), des séparateurs photo, un mur de donateurs et un appel à l\'action final. Texte en serif moderne, étiquettes de graphiques en sans-serif, palette papier aux tons terreux.',
  'preview.shareMenu': 'Partager',
  'preview.exportMenu': 'Exporter',
  'preview.shareTemplateBadge': 'Modèle',
  'preview.shareToX': 'X / Twitter',
  'preview.shareToReddit': 'Reddit',
  'preview.shareToFacebook': 'Facebook',
  'preview.shareToLinkedIn': 'LinkedIn',
  'preview.shareToInstagram': 'Instagram',
  'preview.shareToXiaohongshu': '小红书',
  'preview.copyTemplateLink': 'Copier le lien du modèle',
  'preview.copyShareText': 'Copier le texte de partage',
  'preview.shareSocialGroup': 'Partager sur les réseaux',
  'preview.shareCopyGroup': 'Copier',
  'preview.shareExportGroup': 'Exporter les fichiers',
  'preview.shareCopied': 'Copié',
  'preview.shareCopyFailed': 'Échec de la copie',
  'preview.shareTextDefault': 'Modèle Open Design : {title}',
  'preview.openInNewTab': 'Ouvrir dans un nouvel onglet',
  'preview.exit': '⤓ Quitter',
  'preview.fullscreen': '⤢ Plein écran',
  'preview.closeTitle': 'Fermer (Échap)',
  'preview.loading': 'Chargement de {label}…',
  'preview.errorTitle': 'Impossible de charger cet exemple.',
  'preview.errorBody': 'Le chargement du HTML de l\'exemple a échoué. Vérifiez qu\'Open Design est en cours d\'exécution et réessayez.',
  'preview.retry': 'Réessayer',
  'preview.unavailableTitle': 'Aucun aperçu fourni pour {noun}.',
  'preview.unavailableBody': 'Exécutez le prompt dans le chat pour générer un résultat {kind}.',
  'preview.nounSkill': 'cette compétence',
  'preview.nounPlugin': 'ce plugin',
  'preview.nounTemplate': 'ce modèle',
  'preview.showSidebar': 'Afficher {label}',
  'preview.hideSidebar': 'Masquer {label}',
  'misc.savedTemplate': 'Modèle enregistré',
  'misc.primary': 'Primaire',
  'misc.designSystem': 'Système de design',
  'workspace.designFiles': 'Fichiers de design',
  'workspace.focusMode': 'Espace de travail focalisé',
  'workspace.showChat': 'Afficher le chat',
  'workspace.closeTab': 'Fermer l\'onglet',
  'workspace.deleteFileConfirm': 'Supprimer « {name} » du dossier du projet ?',
  'workspace.deleteSelectedFilesConfirm': 'Supprimer les {n} fichier(s) sélectionné(s) du dossier du projet ?',
  'workspace.deleteSelectedFilesPartial': 'Échec de la suppression de {n} fichier(s).',
  'workspace.openFromDesignFiles': 'Ouvrir un fichier depuis',
  'workspace.designFilesLink': 'Fichiers de design',
  'workspace.loadingSketch': 'Chargement du croquis…',
  'workspace.newTab': 'Nouvel onglet',
  'workspace.searchFilesPlaceholder': 'Rechercher des fichiers…',
  'workspace.openFile': 'Ouvrir un fichier',
  'workspace.noFilesMatch': 'Aucun fichier correspondant',
  'workspace.allFiles': 'Tous',
  'workspace.createNew': 'Créer',
  'workspace.tabOpen': 'Ouvert',
  'workspace.newSideChat': 'Nouveau chat latéral',
  'workspace.newSideChatDescription': 'Ouvrir un chat contextuel dans un nouvel onglet',
  'workspace.sideChatContextBanner': 'Contexte de la conversation actuelle intégré',
  'workspace.sideChatDefaultTitle': 'Chat latéral',
  'workspace.newTerminal': 'Nouveau terminal',
  'workspace.newTerminalDescription': 'Ouvrir un shell dans le répertoire du projet dans un nouvel onglet',
  'workspace.newBrowser': 'Nouveau navigateur',
  'workspace.newBrowserDescription': 'Ouvrir un onglet navigateur intégré pour les sites de référence et les tâches',
  'workspace.terminalStarting': 'Démarrage du terminal…',
  'workspace.terminalStartingDescription': 'Préparation du shell du projet. Cela prend généralement quelques secondes.',
  'workspace.terminalSessionEnded': 'Session terminée',
  'workspace.terminalReconnecting': 'Reconnexion…',
  'workspace.terminalStartFailed': 'Impossible de démarrer la session de terminal',
  'workspace.terminalRestart': 'Redémarrer',
  'designFiles.title': 'Fichiers de design',
  'designFiles.upload': 'Téléverser des fichiers',
  'designFiles.pasteText': 'Coller comme fichier texte',
  'designFiles.newSketch': 'Nouveau croquis',
  'designFiles.empty': 'Les créations apparaîtront ici',
  'designFiles.refresh': 'Actualiser',
  'designFiles.delete': 'Supprimer',
  'designFiles.searchPlaceholder': 'Rechercher des fichiers…',
  'designFiles.up': 'Haut',
  'designFiles.back': 'Retour',
  'designFiles.crumbs': 'projet',
  'designFiles.rowMenu': 'Menu de ligne',
  'designFiles.openInTab': 'Ouvrir dans un onglet',
  'designFiles.download': 'Télécharger',
  'designFiles.downloadSelected': 'Télécharger {n} sélectionnés en ZIP',
  'designFiles.deleteSelected': 'Supprimer {n}',
  'designFiles.clearSelection': 'Effacer la sélection',
  'designFiles.selectPage': 'Tout sélectionner sur la page',
  'designFiles.selectAll': 'Tout sélectionner',
  'designFiles.dropTitle': '⤓ Déposez les fichiers ici',
  'designFiles.dropDesc': 'Images, documents, références ou dossiers — l\'agent les utilisera comme contexte.',
  'designFiles.upload.title': 'Téléverser des fichiers',
  'designFiles.paste.title': 'Coller du texte comme fichier',
  'designFiles.upload.label': 'Téléverser',
  'designFiles.paste.label': 'Coller',
  'designFiles.previewOpen': 'Ouvrir',
  'designFiles.previewClose': 'Fermer l\'aperçu',
  'designFiles.modified': 'Modifié {time} · {size}',
  'designFiles.weeksAgo': 'il y a {n} sem',
  'designFiles.groupBy': 'Grouper par',
  'designFiles.groupByKind': 'Type',
  'designFiles.groupByModified': 'Modification',
  'designFiles.filterBy': 'Filtrer par type',
  'designFiles.filterClear': 'Effacer',
  'designFiles.filterCount': '{n} types',
  'designFiles.expandGroup': 'Développer',
  'designFiles.collapseGroup': 'Réduire',
  'designFiles.sectionPages': 'Pages',
  'designFiles.sectionScripts': 'Scripts',
  'designFiles.sectionImages': 'Images',
  'designFiles.sectionSketches': 'Croquis',
  'designFiles.sectionLiveArtifacts': 'Artefacts dynamiques',
  'designFiles.sectionOther': 'Autre',
  'designFiles.modifiedToday': 'Aujourd’hui',
  'designFiles.modifiedYesterday': 'Hier',
  'designFiles.modifiedPrevious7Days': '7 derniers jours',
  'designFiles.modifiedPrevious30Days': '30 derniers jours',
  'designFiles.modifiedOlder': 'Plus ancien',
  'designFiles.showMore': 'Afficher +{n} de plus',
  'designFiles.kindHtml': 'Page HTML',
  'designFiles.kindImage': 'Image',
  'designFiles.kindSketch': 'Croquis',
  'designFiles.kindText': 'Texte',
  'designFiles.kindCode': 'Script',
  'designFiles.kindPdf': 'PDF',
  'designFiles.kindDocument': 'Document',
  'designFiles.kindPresentation': 'Présentation',
  'designFiles.kindSpreadsheet': 'Tableur',
  'designFiles.kindLiveArtifact': 'Artefact dynamique',
  'designFiles.kindBinary': 'Binaire',
  'designFiles.kindFolder': 'Dossier',
  'designFiles.folderCount': '{n} fichiers',
  'designFiles.newFolderTitle': 'Nouveau dossier',
  'designFiles.newFolderLabel': 'Nom du dossier',
  'designFiles.moveTitle': 'Déplacer vers le dossier',
  'designFiles.moveLabel': 'Dossier de destination',
  'designFiles.moveRoot': 'Racine du projet',
  'designFiles.moveNewFolder': 'Nouveau dossier…',
  'designFiles.move': 'Déplacer',
  'designFiles.copyPath': 'Copier le chemin',
  'designFiles.copiedPath': 'Chemin copié',
  'designFiles.deleteFolderConfirm': 'Supprimer le dossier « {name} » et tout son contenu ?',
  'designFiles.folderCreated': 'Dossier « {name} » créé',
  'designFiles.folderDeleted': 'Dossier « {name} » supprimé',
  'designFiles.filesMoved': '{n} déplacé(s) vers {dest}',
  'designFiles.colName': 'Nom',
  'designFiles.colKind': 'Type',
  'designFiles.colModified': 'Modifié le',
  'designFiles.perPage': 'Afficher',
  'designFiles.all': 'Tout',
  'designFiles.prev': 'Précédent',
  'designFiles.next': 'Suivant',
  'designFiles.jumpToPage': 'Aller à la page',
  'designFiles.pageInfo': '{start}–{end} sur {total}',
  'designFiles.sectionFolders': 'Folders',
  'designFiles.sectionStylesheets': 'Stylesheets',
  'designFiles.sectionDocuments': 'Documents',
  'designFiles.kindStylesheet': 'Stylesheet',
  'designFiles.modifiedExt': 'Modified {time} · {size} · {ext}',
  'designFiles.usefulInfoLabel': 'Useful info',
  'designFiles.usefulInfoTip': 'Double-click any file to open it in a full tab.',
  'quickSwitcher.placeholder': 'Ouvrir un fichier…',
  'quickSwitcher.empty': 'Aucun fichier dans ce projet',
  'quickSwitcher.noMatches': 'Aucun résultat',
  'quickSwitcher.navigate': 'naviguer',
  'quickSwitcher.open': 'ouvrir',
  'quickSwitcher.close': 'fermer',
  'pasteDialog.title': 'Coller du texte',
  'pasteDialog.hint': 'Enregistré dans le dossier du projet. Choisissez un nom.',
  'pasteDialog.fileNameLabel': 'Nom du fichier',
  'pasteDialog.namePlaceholder': 'notes.txt',
  'pasteDialog.contentLabel': 'Contenu',
  'pasteDialog.contentPlaceholder': 'Collez n\'importe quoi…',
  'pasteDialog.save': 'Enregistrer',
  'pasteDialog.cancel': 'Annuler',
  'sketch.save': 'Enregistrer le croquis',
  'sketch.cancel': 'Annuler',
  'sketch.saving': 'Enregistrement…',
  'sketch.saved': 'Enregistré',
  'sketch.tooltipDirty': 'Modifications non enregistrées',
  'sketch.tooltipClean': 'Enregistré',
  'fileViewer.empty': 'Sélectionnez un fichier à afficher.',
  'fileViewer.loading': 'Chargement…',
  'fileViewer.exportPptx': 'Exporter en PPTX',
  'fileViewer.openInNewTab': 'Ouvrir dans un nouvel onglet',
  'fileViewer.copyPath': 'Copier le chemin',
  'fileViewer.copied': 'Copié !',
  'fileViewer.share': 'Partager',
  'fileViewer.binaryMeta': 'Binaire · {size}',
  'fileViewer.binaryNote': 'Fichier binaire ({size} octets). Téléchargez ou ouvrez depuis le disque pour inspecter.',
  'fileViewer.pdfMeta': 'PDF · {size}',
  'fileViewer.documentMeta': 'Document',
  'fileViewer.presentationMeta': 'Présentation',
  'fileViewer.spreadsheetMeta': 'Tableur',
  'fileViewer.previewUnavailable': 'Aperçu indisponible. Téléchargez ou ouvrez le fichier pour inspecter.',
  'fileViewer.download': 'Télécharger',
  'fileViewer.open': 'Ouvrir',
  'fileViewer.imageMeta': 'Image · {size}',
  'fileViewer.reactMeta': 'Composant React · {size}',
  'fileViewer.sketchMeta': 'Croquis · {size}',
  'fileViewer.markdownStreamingMeta': 'Aperçu en cours…',
  'fileViewer.markdownErrorMeta': 'L\'aperçu peut être incomplet (erreur de génération).',
  'fileViewer.markdownStreamingStatus': 'Génération en cours… affichage du Markdown partiel.',
  'fileViewer.markdownErrorStatus': 'Erreur de génération. Affichage du dernier contenu disponible.',
  'fileViewer.videoMeta': 'Vidéo · {size}',
  'fileViewer.audioMeta': 'Audio · {size}',
  'fileViewer.reload': 'Recharger',
  'fileViewer.reloadDisk': 'Recharger depuis le disque',
  'fileViewer.copy': 'Copier',
  'fileViewer.copyTitle': 'Copier le contenu du fichier',
  'fileViewer.saveDisabled': 'Enregistrer (visionneuse en lecture seule)',
  'fileViewer.save': 'Enregistrer',
  'fileViewer.preview': 'Aperçu',
  'fileViewer.source': 'Source',
  'fileViewer.tweaks': 'Ajustements',
  'fileViewer.tweaksUnavailable': 'Aucun panneau d\'ajustements dans cet artefact',
  'fileViewer.jsxModuleTitle': 'Aucun aperçu autonome',
  'fileViewer.jsxModuleBody': 'Ce fichier est un module de composant chargé par une autre page.',
  'fileViewer.jsxModuleCta': 'Ouvrez la page qui le rend :',
  'fileViewer.comment': 'Commenter',
  'fileViewer.edit': 'Modifier',
  'fileViewer.draw': 'Dessiner',
  'fileViewer.mark': 'Annoter',
  'fileViewer.markTool': 'Outil d’annotation',
  'fileViewer.boxSelect': 'Sélection par cadre',
  'fileViewer.screenshot': 'Capture d’écran',
  'manualEdit.layers': 'Calques',
  'manualEdit.editableCount': '{count} modifiable(s)',
  'manualEdit.hiddenBadge': 'Masqué',
  'manualEdit.title': 'Éditeur manuel',
  'manualEdit.fallbackTitle': 'Edit',
  'manualEdit.movePanel': 'Move edit panel',
  'manualEdit.editParams': 'Modifier les paramètres',
  'manualEdit.closePanel': 'Close edit panel',
  'manualEdit.selectLayer': 'Sélectionnez un calque',
  'manualEdit.empty': 'Cliquez sur un élément dans l’aperçu ou choisissez un calque.',
  'manualEdit.noEditableLayers': 'Aucun calque modifiable trouvé.',
  'manualEdit.noClass': 'aucune classe',
  'manualEdit.tabsAria': 'Onglets d’édition manuelle',
  'manualEdit.tabContent': 'Contenu',
  'manualEdit.tabStyle': 'Style',
  'manualEdit.tabAttributes': 'Attributs',
  'manualEdit.tabHtml': 'HTML',
  'manualEdit.tabSource': 'Source',
  'manualEdit.attributesJson': 'Attributs JSON',
  'manualEdit.selectedHtml': 'HTML de l’élément sélectionné',
  'manualEdit.fullSource': 'Source complète de l’artefact',
  'manualEdit.applyContent': 'Appliquer le contenu',
  'manualEdit.applyStyle': 'Appliquer le style',
  'manualEdit.applyAttributes': 'Appliquer les attributs',
  'manualEdit.applyHtml': 'Appliquer le HTML',
  'manualEdit.applySource': 'Appliquer la source',
  'manualEdit.invalidAttributes': 'JSON d’attributs invalide.',
  'manualEdit.changes': 'Modifications',
  'manualEdit.undo': 'Annuler',
  'manualEdit.redo': 'Rétablir',
  'manualEdit.noChanges': 'Aucune modification manuelle pour l’instant.',
  'manualEdit.imageUrl': 'URL de l’image',
  'manualEdit.altText': 'Texte alternatif',
  'manualEdit.label': 'Libellé',
  'manualEdit.text': 'Texte',
  'manualEdit.href': 'Lien (href)',
  'manualEdit.textColor': 'Couleur du texte',
  'manualEdit.background': 'Arrière-plan',
  'manualEdit.fontSize': 'Taille de police',
  'manualEdit.weight': 'Graisse',
  'manualEdit.align': 'Alignement',
  'manualEdit.padding': 'Marge interne',
  'manualEdit.margin': 'Marge',
  'manualEdit.radius': 'Rayon',
  'manualEdit.border': 'Bordure',
  'manualEdit.width': 'Largeur',
  'manualEdit.minHeight': 'Hauteur minimale',
  'manualEdit.deleteElement': 'Supprimer l’élément',
  'manualEdit.deleteElementConfirm': 'Supprimer l’élément sélectionné ? Cette action peut être annulée avec Annuler.',
  'manualEdit.uploadImage': 'Importer une image',
  'manualEdit.uploadingImage': 'Import de l’image…',
  'manualEdit.uploadImageFailed': 'Impossible d’importer l’image.',
  'manualEdit.focusSlides': 'Focaliser les slides',
  'manualEdit.showPanels': 'Afficher les panneaux',
  'fileViewer.zoomOut': 'Zoom arrière',
  'fileViewer.zoomIn': 'Zoom avant',
  'fileViewer.resetZoom': 'Réinitialiser le zoom',
  'fileViewer.viewportAria': 'Zone d’aperçu',
  'fileViewer.viewportDesktop': 'Ordinateur',
  'fileViewer.viewportDesktopTitle': 'Aperçu ordinateur pleine largeur',
  'fileViewer.viewportTablet': 'Tablette',
  'fileViewer.viewportTabletTitle': 'Aperçu tablette en 820 × 1180 (référence portrait moderne)',
  'fileViewer.viewportMobile': 'Mobile',
  'fileViewer.viewportMobileTitle': 'Aperçu mobile en 390 × 844',
  'fileViewer.reloadAria': 'Recharger',
  'fileViewer.previousSlide': 'Diapositive précédente',
  'fileViewer.nextSlide': 'Diapositive suivante',
  'fileViewer.slideNavAria': 'Navigation des diapositives',
  'fileViewer.present': 'Présenter',
  'fileViewer.presentInTab': 'Dans cet onglet',
  'fileViewer.presentFullscreen': 'Plein écran',
  'fileViewer.presentNewTab': 'Nouvel onglet',
  'fileViewer.exitPresentation': 'Quitter la présentation',
  'fileViewer.shareLabel': 'Partager',
  'fileViewer.shareMenuShareLink': 'PARTAGER',
  'fileViewer.shareMenuPublishOnline': 'PUBLIER EN LIGNE',
  'fileViewer.shareMenuDownload': 'TÉLÉCHARGER',
  'fileViewer.shareMenuPresentation': 'Présentation',
  'fileViewer.shareMenuSourceFiles': 'Fichiers source',
  'fileViewer.shareMenuSave': 'ENREGISTRER',
  'fileViewer.copyShareLink': 'Copier le lien de partage',
  'fileViewer.openSharePage': 'Ouvrir la page de partage',
  'fileViewer.shareLinkRequiresDeploy': 'Publiez d’abord en ligne pour obtenir un lien',
  'fileViewer.shareLinkPublishGuide': 'Publiez en ligne ci-dessus pour activer le partage ↑',
  'fileViewer.shareAfterGenerationComplete': 'Partage disponible après la génération',
  'fileViewer.copyProviderLink': 'Copy {provider} link',
  'fileViewer.copyCloudflareLink': 'Copy Cloudflare link',
  'fileViewer.screenshotCopying': 'Copying screenshot...',
  'fileViewer.screenshotCopied': 'Screenshot copied to clipboard',
  'fileViewer.screenshotClipboardDenied': 'Browser blocked clipboard access',
  'fileViewer.screenshotPreviewLoading': 'Preview is still loading. Try again in a moment.',
  'fileViewer.screenshotCaptureFailed': 'Could not capture the preview. Please try again.',
  'fileViewer.exportPdf': 'Exporter en PDF',
  'fileViewer.exportPdfAllSlides': 'Exporter en PDF (toutes les diapos)',
  'fileViewer.exportPptxBusy': 'Attendez la fin du tour en cours.',
  'fileViewer.exportPptxHint': 'Envoyez une requête à l\'agent pour convertir ce design en PPTX.',
  'fileViewer.exportPptxNa': 'L\'export PPTX n\'est pas disponible ici.',
  'fileViewer.exportZip': 'Télécharger en .zip',
  'fileViewer.exportHtml': 'Exporter en HTML autonome',
  'fileViewer.exportMd': 'Exporter en Markdown',
  'fileViewer.exportImage': 'Exporter en image',
  'fileViewer.exportImageFailed': 'La capture d\'image a échoué. Veuillez réessayer ou utiliser l\'outil de capture d\'écran de votre navigateur.',
  'fileViewer.exportImageModalSubtitle': 'Choisissez un format, puis téléchargez l’aperçu actuel en image.',
  'fileViewer.exportImageFormatLabel': 'Format',
  'fileViewer.exportImageSaving': 'Enregistrement de l’image…',
  'fileViewer.exportImageSaved': 'Image enregistrée',
  'fileViewer.exportImageDownloadStarted': 'Téléchargement démarré',
  'fileViewer.exportImageDownloadDetails': '{filename} se trouve dans les téléchargements du navigateur si aucune fenêtre Enregistrer sous n’est apparue.',
  'fileViewer.exportJsx': 'Exporter en JSX',
  'fileViewer.exportReactHtml': 'Exporter l\'aperçu en HTML',
  'fileViewer.exportStarted': 'Export started',
  'fileViewer.saveAsTemplate': 'Enregistrer comme modèle…',
  'fileViewer.savingTemplate': 'Enregistrement du modèle…',
  'fileViewer.savedTemplate': 'Enregistré comme « {name} »',
  'fileViewer.savedTemplateFail': 'Impossible d\'enregistrer le modèle — réessayez.',
  'fileViewer.templateNamePrompt': 'Nom du modèle',
  'fileViewer.templateNameDefault': 'Modèle sans titre',
  'fileViewer.templateDescPrompt': 'Courte description (optionnelle — qu\'est-ce qui rend ce modèle utile ?)',
  'liveArtifact.refresh.button': 'Actualiser',
  'liveArtifact.refresh.buttonTitle': 'Actualiser cet artefact dynamique',
  'liveArtifact.refresh.loadingTitle': 'Chargement de l’artefact dynamique…',
  'liveArtifact.refresh.noSourceTitle': 'Aucune source d’actualisation n’est encore disponible.',
  'liveArtifact.refresh.running': 'Actualisation…',
  'liveArtifact.refresh.runningMessage': 'Actualisation des données et de l’aperçu. Cela peut prendre un moment.',
  'liveArtifact.refresh.runningAction': 'L’aperçu précédent reste visible jusqu’à la réussite de l’actualisation.',
  'liveArtifact.refresh.successOne': 'Actualisation terminée. Données mises à jour.',
  'liveArtifact.refresh.successMany': 'Actualisation terminée. Données mises à jour.',
  'liveArtifact.refresh.successAction': 'L’aperçu a été rechargé avec les dernières données validées.',
  'liveArtifact.refresh.previousFailure': 'Échec de l’actualisation précédente : {message}',
  'liveArtifact.refresh.failureAction': 'Consultez l’historique d’actualisation, corrigez la source ou le problème d’autorisation, puis réessayez.',
  'liveArtifact.refresh.networkFailure': 'La requête d’actualisation a échoué. Vérifiez votre connexion puis réessayez.',
  'liveArtifact.refresh.genericFailure': 'Échec de l’actualisation.',
  'liveArtifact.refresh.statusNever': 'Non actualisable',
  'liveArtifact.refresh.statusReady': 'Prêt à actualiser',
  'liveArtifact.refresh.statusSucceeded': 'À jour',
  'liveArtifact.refresh.statusFailed': 'Échec de l’actualisation',
  'liveArtifact.refresh.statusRunning': 'Actualisation en cours',
  'liveArtifact.refresh.statusRunningDescription': 'Une actualisation est actuellement en cours.',
  'liveArtifact.refresh.statusSucceededDescription': 'La dernière actualisation s’est terminée avec succès.',
  'liveArtifact.refresh.statusFailedDescription': 'La dernière tentative d’actualisation ne s’est pas terminée correctement.',
  'liveArtifact.refresh.statusReadyDescription': 'Des sources actualisables sont configurées, mais aucune exécution n’est en cours.',
  'liveArtifact.refresh.statusNeverDescription': 'Cet artefact dynamique n’a pas encore de source d’actualisation.',
  'liveArtifact.refresh.eventStarted': 'Démarrée',
  'liveArtifact.refresh.eventSucceeded': 'Réussie',
  'liveArtifact.refresh.eventFailed': 'Échouée',
  'liveArtifact.refresh.eventStartedDetail': 'Actualisation démarrée…',
  'liveArtifact.refresh.sourcesUpdatedOne': '{n} source mise à jour',
  'liveArtifact.refresh.sourcesUpdatedMany': '{n} sources mises à jour',
  'liveArtifact.refresh.timelineEmpty': 'Aucune activité d’actualisation dans cette session. Lancez Actualiser pour enregistrer une chronologie, ou attendez les exécutions automatiques.',
  'liveArtifact.refresh.heroLastRefreshedLabel': 'Dernière actualisation',
  'liveArtifact.refresh.heroLastRefreshedNever': 'Jamais',
  'liveArtifact.refresh.justNow': 'à l’instant',
  'liveArtifact.refresh.factCreated': 'Créé',
  'liveArtifact.refresh.factLastUpdated': 'Dernière mise à jour',
  'liveArtifact.refresh.factUnknown': 'Inconnu',
  'liveArtifact.refresh.persistedTitle': 'Historique d’actualisation conservé',
  'liveArtifact.refresh.persistedHint': 'Entrées chargées depuis refreshes.jsonl',
  'liveArtifact.refresh.persistedEmpty': 'Aucun historique d’actualisation conservé pour l’instant.',
  'liveArtifact.refresh.persistedStatusSucceeded': 'réussi',
  'liveArtifact.refresh.persistedStatusRunning': 'en cours',
  'liveArtifact.refresh.persistedStatusFailed': 'échoué',
  'liveArtifact.refresh.persistedStatusCancelled': 'annulé',
  'liveArtifact.refresh.persistedStatusSkipped': 'ignoré',
  'liveArtifact.refresh.sessionTitle': 'Activité de la session',
  'liveArtifact.refresh.sessionHint': 'Événements observés pendant que cet onglet est ouvert',
  'liveArtifact.refresh.docSourceTitle': 'Source du document',
  'liveArtifact.refresh.docSourceHint': 'Source configurée',
  'liveArtifact.refresh.docSourceType': 'Type',
  'liveArtifact.refresh.docSourceTool': 'Outil',
  'liveArtifact.refresh.docSourceConnector': 'Connecteur',
  'liveArtifact.refresh.debugSummary': 'Métadonnées de débogage avancées',
  'liveArtifact.refresh.debugNote': 'Peut inclure des IDs de connecteur, des noms de fichiers, des métadonnées de source et des chemins internes d’artefact.',
  'liveArtifact.viewer.tabPreview': 'Aperçu',
  'liveArtifact.viewer.tabCode': 'Code',
  'liveArtifact.viewer.tabData': 'Données',
  'liveArtifact.viewer.tabRefreshHistory': 'Historique d’actualisation',
  'liveArtifact.viewer.dataEmpty': 'Aucun cache data.json disponible.',
  'liveArtifact.viewer.code.templateHeading': 'HTML du modèle',
  'liveArtifact.viewer.code.renderedHeading': 'HTML rendu',
  'liveArtifact.viewer.code.templateHelp': 'Le modèle modifiable utilisé avec data.json pour générer l’aperçu.',
  'liveArtifact.viewer.code.renderedHelp': 'Le fichier index.html généré actuellement chargé dans l’aperçu.',
  'liveArtifact.viewer.code.variantAria': 'Variante du code',
  'liveArtifact.viewer.code.variantTemplate': 'Modèle',
  'liveArtifact.viewer.code.variantRendered': 'Rendu',
  'liveArtifact.viewer.code.loading': 'Chargement du code…',
  'liveArtifact.viewer.code.unavailable': 'Le code n’est pas encore disponible.',
  'liveArtifact.viewer.code.empty': 'Ce fichier de code est vide.',
  'fileViewer.deployToVercel': 'Déployer sur Vercel',
  'fileViewer.redeployToVercel': 'Redéployer',
  'fileViewer.deployingToVercel': 'Déploiement sur Vercel…',
  'fileViewer.deployProviderLabel': 'Fournisseur',
  'fileViewer.vercelProvider': 'Vercel',
  'fileViewer.cloudflarePagesProvider': 'Cloudflare Pages',
  'fileViewer.deployToProvider': 'Déployer sur {provider}',
  'fileViewer.redeployToProvider': 'Redéployer sur {provider}',
  'fileViewer.deployingToProvider': 'Déploiement sur {provider}…',
  'fileViewer.preparingPublicLink': 'Préparation du lien public…',
  'fileViewer.copyDeployLink': 'Copier le lien',
  'fileViewer.deployModalTitle': 'Déployer',
  'fileViewer.deployModalSubtitle': 'Utilisez le compte du fournisseur sélectionné pour déployer cet aperçu HTML.',
  'fileViewer.vercelToken': 'Jeton Vercel',
  'fileViewer.vercelTokenGetLink': 'Obtenir un jeton Vercel',
  'fileViewer.vercelTokenPlaceholder': 'Collez votre jeton Vercel',
  'fileViewer.vercelTokenReuseHint': 'Le jeton enregistré sera utilisé. Saisissez un nouveau jeton pour le remplacer.',
  'fileViewer.vercelTokenRequired': 'Saisissez et enregistrez d’abord un jeton Vercel.',
  'fileViewer.cloudflareApiToken': 'Jeton API Cloudflare',
  'fileViewer.cloudflareApiTokenGetLink': 'Obtenir un jeton API',
  'fileViewer.cloudflareApiTokenPlaceholder': 'Collez votre jeton API Cloudflare',
  'fileViewer.cloudflareApiTokenReuseHint': 'Le jeton API Cloudflare enregistré sera utilisé. Saisissez un nouveau jeton pour le remplacer.',
  'fileViewer.cloudflareApiTokenRequired': 'Saisissez et enregistrez d’abord un jeton API Cloudflare.',
  'fileViewer.cloudflareApiTokenScopeHint': 'Sélectionnez Pages Edit lors de la création du jeton API ; les domaines personnalisés nécessitent Zone Read / DNS Edit.',
  'fileViewer.vercelTeamId': 'ID d’équipe',
  'fileViewer.vercelTeamSlug': 'Slug d’équipe',
  'fileViewer.cloudflareAccountId': 'ID de compte',
  'fileViewer.cloudflareAccountIdHint': 'Trouvez l’ID du compte dans le tableau de bord Cloudflare.',
  'fileViewer.cloudflareAccountIdRequired': 'Saisissez et enregistrez d’abord un ID de compte Cloudflare.',
  'fileViewer.cloudflareZoneLabel': 'Domaine',
  'fileViewer.cloudflareZonePlaceholder': 'Enregistrez les réglages Cloudflare pour charger les domaines',
  'fileViewer.cloudflareZoneRequired': 'Sélectionnez d’abord un domaine Cloudflare.',
  'fileViewer.cloudflareZonesLoading': 'Chargement des domaines Cloudflare…',
  'fileViewer.cloudflareZonesRefresh': 'Actualiser les domaines',
  'fileViewer.cloudflareZonesLoadFailed': 'Impossible de charger les domaines Cloudflare.',
  'fileViewer.cloudflareZonesEmpty': 'Aucun domaine Cloudflare complet et actif n’a été trouvé pour ce compte.',
  'fileViewer.cloudflareDomainPrefixLabel': 'Préfixe de sous-domaine',
  'fileViewer.cloudflareDomainPrefixPlaceholder': 'demo',
  'fileViewer.cloudflareDomainPrefixInvalid': 'Utilisez un seul libellé DNS : lettres minuscules, chiffres et traits d’union.',
  'fileViewer.cloudflareHostnamePreview': 'Aperçu du domaine personnalisé : {hostname}',
  'fileViewer.cloudflareCustomDomainHint': 'Facultatif : associez un domaine personnalisé. Si ce champ reste vide, un lien pages.dev sera quand même créé.',
  'fileViewer.cloudflarePagesDevLinkLabel': 'pages.dev URL',
  'fileViewer.cloudflareCustomDomainLinkLabel': 'Domaine personnalisé',
  'fileViewer.optional': 'Facultatif',
  'fileViewer.vercelPreviewOnly': 'Les déploiements sont en mode prévisualisation pour le moment.',
  'fileViewer.cloudflarePagesPreviewHint': 'Les déploiements Cloudflare Pages utilisent le téléversement direct (Direct Upload).',
  'fileViewer.savingConfig': 'Enregistrement…',
  'fileViewer.deployConfigSaveFailed': 'Impossible d’enregistrer les réglages Vercel.',
  'fileViewer.deployFailed': 'Échec du déploiement. Vérifiez les réglages Vercel et réessayez.',
  'fileViewer.deployProviderConfigSaveFailed': 'Impossible d’enregistrer les réglages {provider}.',
  'fileViewer.deployProviderFailed': 'Échec du déploiement {provider}. Vérifiez les réglages et réessayez.',
  'fileViewer.deployResultLabel': 'URL déployée',
  'fileViewer.deployLinkReady': 'Prêt',
  'fileViewer.deploySuccessToast': 'Déploiement téléversé avec succès',
  'fileViewer.deploySuccessToastDetails': '{provider} · {url}',
  'fileViewer.deployLinkPreparingLabel': 'Lien public en attente',
  'fileViewer.deployLinkDelayed': 'Le site est déployé. Le fournisseur prépare encore le lien public.',
  'fileViewer.deployLinkFailed': 'Le domaine personnalisé a échoué',
  'fileViewer.deployLinkProtectedLabel': 'Protection du déploiement activée',
  'fileViewer.deployLinkProtected': 'Le site est déployé, mais ce lien de prévisualisation exige une authentification. Désactivez la protection du déploiement (Deployment Protection) ou utilisez un domaine personnalisé.',
  'fileViewer.retryLink': 'Réessayer maintenant',
  'questionForm.submit': 'Envoyer',
  'questionForm.skip': 'Passer',
  'questionForm.locked': 'Répondu',
  'conv.switch': 'Changer de conversation',
  'conv.label': 'Conversation',
  'conv.heading': 'Conversations',
  'conv.new': '+ Nouvelle',
  'conv.empty': 'Aucune conversation pour l\'instant.',
  'conv.untitled': 'Conversation sans titre',
  'conv.renameTooltip': 'Double-cliquez pour renommer',
  'conv.delete': 'Supprimer la conversation',
  'conv.deleteConfirm': 'Supprimer « {title} » ? Cela supprime ses messages.',
  'agentPicker.label': 'Agent',
  'agentPicker.modeChoose': 'Choisir le mode d\'exécution',
  'agentPicker.localCli': 'CLI local',
  'agentPicker.daemonOff': 'daemon arrêté',
  'agentPicker.byok': 'API · BYOK',
  'agentPicker.selectAgent': 'Sélectionner un agent CLI détecté',
  'agentPicker.noAgents': 'aucun agent dans le PATH',
  'agentPicker.notInstalled': 'non installé',
  'agentPicker.rescan': 'Réanalyser le PATH local pour les agents',
  'tool.openInTab': 'Ouvrir {name} dans un onglet',
  'tool.open': 'ouvrir',
  'tool.todos': 'Tâches',
  'tool.askQuestion': 'Question',
  'tool.askQuestionSubmit': 'Envoyer',
  'tool.askQuestionPending': 'En attente de votre réponse',
  'tool.askQuestionAnswered': 'Répondu',
  'tool.todosExpand': 'Afficher les tâches',
  'tool.todosCollapse': 'Masquer les tâches',
  'tool.todosDone': 'Terminé',
  'tool.todosDismiss': 'Fermer la liste des tâches',
  'tool.write': 'Écrire',
  'tool.edit': 'Modifier',
  'tool.read': 'Lire',
  'tool.bash': 'Bash',
  'tool.glob': 'Glob',
  'tool.grep': 'Grep',
  'tool.fetch': 'Fetch',
  'tool.search': 'Rechercher',
  'tool.lines': '{n} lignes',
  'tool.changeSingular': 'modification',
  'tool.changePlural': 'modifications',
  'tool.in': 'dans {path}',
  'tool.hide': 'masquer',
  'tool.output': 'sortie',
  'tool.running': 'en cours…',
  'tool.error': 'erreur',
  'tool.done': 'terminé',
  'assistant.role': 'Assistant',
  'assistant.workingLabel': 'En cours',
  'assistant.doneLabel': 'Terminé',
  'assistant.copyMarkdown': 'Copier le Markdown de la réponse',
  'assistant.forkConversation': 'Forker depuis ici',
  'assistant.forkingConversation': 'Fork en cours…',
  'assistant.feedbackPrompt': 'Avis',
  'assistant.feedbackPositive': 'Utile',
  'assistant.feedbackNegative': 'Pas utile',
  'assistant.feedbackReasonTitle': 'Dites-nous pourquoi',
  'assistant.feedbackReasonPositiveMatched': 'A compris ma demande',
  'assistant.feedbackReasonPositiveVisual': 'Rendu visuel réussi',
  'assistant.feedbackReasonPositiveUseful': 'Structure utile',
  'assistant.feedbackReasonPositiveEasy': 'Facile à continuer à modifier',
  'assistant.feedbackReasonPositiveDesignSystem': 'A respecté le système de design',
  'assistant.feedbackReasonNegativeMissed': 'N’a pas compris ma demande',
  'assistant.feedbackReasonNegativeVisual': 'La qualité visuelle doit être améliorée',
  'assistant.feedbackReasonNegativeIncomplete': 'Sortie incomplète',
  'assistant.feedbackReasonNegativeHard': 'Difficile à utiliser',
  'assistant.feedbackReasonNegativeDesignSystem': 'N’a pas respecté le système de design',
  'assistant.feedbackReasonOther': 'Autre',
  'assistant.feedbackReasonPlaceholder': 'Ajoutez une courte note...',
  'assistant.feedbackReasonSubmit': 'Envoyer',
  'assistant.emptyResponseLabel': 'Aucune sortie',
  'assistant.emptyResponseMessage': 'Le fournisseur a terminé la requête sans renvoyer de texte ni d’artefact. Essayez un autre modèle ou fournisseur, vérifiez le quota, ou réessayez.',
  'assistant.unfinishedLabel': 'Arrêté avec du travail non terminé',
  'assistant.unfinishedSummary': '{n} tâche(s) restante(s)',
  'assistant.unfinishedMore': '+{n} de plus',
  'assistant.continueRemaining': 'Continuer les tâches restantes',
  'assistant.outTokens': '{n} sortie',
  'assistant.producedFiles': 'Fichiers de ce tour',
  'assistant.openFile': 'Ouvrir',
  'assistant.downloadFile': 'Télécharger',
  'nextStep.title': 'Étape suivante',
  'nextStep.share': 'Partager',
  'nextStep.chipJoiner': ', ',
  'nextStep.chipPolishVisual': 'Rendre le visuel plus premium',
  'nextStep.chipBrand': 'Renforcer le style de marque',
  'nextStep.chipConcise': 'Condenser le texte',
  'nextStep.chipSecondVersion': 'Générer une deuxième version',
  'assistant.thinking': 'Réflexion',
  'assistant.thought': 'A réfléchi',
  'assistant.thoughtFor': 'Réflexion {s}s',
  'assistant.systemReminder': 'Rappel système',
  'assistant.possiblePromptInjection': 'Injection de prompt possible',
  'assistant.waitingFirstOutput': 'En attente de la première sortie',
  'assistant.statusBootingAgent': 'Démarrage de l\'agent',
  'assistant.statusPreparing': 'Preparing...',
  'assistant.statusStarting': 'Démarrage',
  'assistant.statusRequesting': 'Envoi de la requête',
  'assistant.statusThinking': 'Réflexion',
  'assistant.statusStreaming': 'Réponse en cours',
  'assistant.slowHint': 'Plus long que d\'habitude. Le formulaire s\'affiche généralement en 5–10s — vous pouvez Arrêter et reformuler.',
  'assistant.verbEditing': 'Modification',
  'assistant.verbWriting': 'Écriture',
  'assistant.verbReading': 'Lecture',
  'assistant.verbSearching': 'Recherche',
  'assistant.verbRunning': 'Exécution',
  'assistant.verbTodos': 'Tâches',
  'assistant.verbFetching': 'Récupération',
  'assistant.verbCalling': 'Appel',
  'qf.answered': 'répondu',
  'qf.choose': 'Choisir…',
  'qf.required': 'requis',
  'qf.lockedSubmitted': 'Réponses envoyées — l\'agent les utilise pour le reste de la session.',
  'qf.lockedPrev': 'Ce formulaire provient d\'un tour précédent.',
  'qf.hint': 'Choisissez ce qui convient. Ignorez les champs optionnels qui ne vous intéressent pas — l\'agent utilisera des valeurs par défaut raisonnables.',
  'qf.submitDefault': 'Envoyer les réponses',
  'qf.submitDisabledTitle': 'Remplissez d\'abord les champs requis',
  'qf.submitTitle': 'Envoyer les réponses',
  'qf.cardSelected': 'sélectionné',
  'qf.cardRefs': 'Réfs :',
  'qf.cardSampleText': 'Portez ce vieux whisky au juge blond qui fume · 0123',
  'questions.tabLabel': 'Questions',
  'questions.banner': 'Mind if I ask a couple of quick questions?',
  'questions.continue': 'Continue',
  'questions.generating': 'Generating questions…',
  'questions.skipAll': 'Skip all',
  'questions.autoSkipHint': 'Auto-continues when the timer ends',
  'sketch.toolSelect': 'Sélection (sans effet)',
  'sketch.toolPen': 'Stylo',
  'sketch.toolText': 'Texte',
  'sketch.toolRect': 'Rectangle',
  'sketch.toolArrow': 'Flèche',
  'sketch.toolEraser': 'Gomme',
  'sketch.color': 'Couleur',
  'sketch.strokeSize': 'Taille du trait',
  'sketch.undo': 'Annuler',
  'sketch.clear': 'Effacer',
  'sketch.close': 'Fermer',
  'sketch.closeConfirm': 'Fermer le croquis et abandonner vos modifications non enregistrées ?',
  'sketch.textPrompt': 'Texte :',
  'sketch.textModalTitle': 'Ajouter du texte',
  'critiqueTheater.userFacingName': 'Jury de design',
  'critiqueTheater.roleDesigner': 'Designer',
  'critiqueTheater.roleCritic': 'Critique',
  'critiqueTheater.roleBrand': 'Marque',
  'critiqueTheater.roleA11y': 'Accessibilité',
  'critiqueTheater.roleCopy': 'Rédaction',
  'critiqueTheater.roundLabel': 'Tour {n} sur {m}',
  'critiqueTheater.mustFix': '{n} à corriger',
  'critiqueTheater.composite': 'Score composite',
  'critiqueTheater.threshold': 'Seuil',
  'critiqueTheater.consensus': 'Consensus',
  'critiqueTheater.interrupt': 'Interrompre',
  'critiqueTheater.interrupting': 'Interruption…',
  'critiqueTheater.interrupted': 'Interrompu',
  'critiqueTheater.degradedHeading': 'Panel hors ligne pour cette exécution',
  'critiqueTheater.degradedReasonMalformed': 'Sortie de panel mal formée (bloc rejeté par le parseur).',
  'critiqueTheater.degradedReasonOversize': 'La sortie du panel a dépassé le budget d’octets sécurisé.',
  'critiqueTheater.degradedReasonAdapter': 'L’adaptateur {adapter} ne prend pas en charge le protocole Critique.',
  'critiqueTheater.degradedReasonProtocol': 'L’adaptateur {adapter} a envoyé une version de protocole non prise en charge.',
  'critiqueTheater.degradedReasonMissingArtifact': 'L’exécution s’est terminée sans artefact final.',
  'critiqueTheater.replay': 'Rejouer',
  'critiqueTheater.replaySpeed': 'Vitesse de relecture',
  'critiqueTheater.readOnly': 'Lecture seule',
  'critiqueTheater.shippedSummary': 'Livré au tour {round} · score composite {composite}',
  'critiqueTheater.interruptedSummary': 'Interrompu au tour {round} · meilleur score composite {composite}',
  'critiqueTheater.shippedBadge': 'Livré',
  'critiqueTheater.belowThresholdBadge': 'Sous le seuil',
  'critiqueTheater.timedOutBadge': 'Délai dépassé',
  'critiqueTheater.failedHeading': 'Échec de l’exécution',
  'critiqueTheater.failedReasonCliExit': 'La CLI de l’agent s’est arrêtée avec un code non nul avant la fin du panel.',
  'critiqueTheater.failedReasonPerRoundTimeout': 'Un tour a dépassé son budget de temps.',
  'critiqueTheater.failedReasonTotalTimeout': 'L’exécution complète a dépassé son budget de temps.',
  'critiqueTheater.failedReasonOrchestrator': 'Erreur interne de l’orchestrateur.',
  'critiqueTheater.transcriptEmpty': 'Aucune transcription à rejouer pour l’instant. Lancez une critique pour en enregistrer une.',
  'critiqueTheater.transcriptLoading': 'Chargement de la transcription…',
  'critiqueTheater.transcriptError': 'Impossible de charger la transcription : {error}',
  'critiqueTheater.replaySpeedPaused': 'En pause',
  'critiqueTheater.replaySpeedInstant': 'Instantané',
  'critiqueTheater.replaySpeedLive': 'Temps réel',
  'critiqueTheater.replaySpeedFast': 'Rapide',
  'critiqueTheater.settingsNav': 'Jury de design',
  'critiqueTheater.settingsNavHint': 'Revue de design à cinq panels pour vos exécutions',
  'critiqueTheater.settingsEnabledLabel': 'Afficher le Jury de design pendant les exécutions de l’agent',
  'critiqueTheater.settingsEnabledDescription': 'Lorsque cette option est activée, une revue à cinq panels apparaît à côté des générations de l’agent et note le résultat avant l’expédition. Vous pouvez l’interrompre à tout moment.',
  'critiqueTheater.settingsEnabledProjectHint': 'Enregistré pour ce projet. Les nouvelles exécutions de ce projet passeront côté serveur par le Jury de design.',
  'critiqueTheater.settingsEnabledNoProjectHint': 'Ouvrez un projet pour enregistrer ce réglage côté serveur. D’ici là, seule la préférence dans ce navigateur change.',
  'pet.title': 'Compagnons',
  'pet.subtitle': 'Adoptez un petit compagnon qui flotte au-dessus de votre espace de travail.',
  'pet.navTitle': 'Compagnons',
  'pet.navHint': 'Adopter ou personnaliser',
  'pet.tabBuiltIn': 'Intégrés',
  'pet.tabBuiltInHint': 'Compagnons fournis avec Open Design — choisissez-en un et adoptez-le.',
  'pet.builtInEmpty': 'Les compagnons intégrés sont indisponibles pour l\'instant. Essayez d\'actualiser l\'onglet Communauté une fois le daemon en ligne.',
  'pet.tabCustom': 'Personnalisé',
  'pet.tabCustomHint': 'Créez le vôtre avec un nom, un glyphe, une couleur ou un sprite.',
  'pet.tabCommunity': 'Communauté',
  'pet.tabCommunityHint': 'Compagnons éclos de Codex — adoptez-en un ou générez-en un nouveau.',
  'pet.tabsAria': 'Source du compagnon',
  'pet.adopt': 'Adopter',
  'pet.adoptedBadge': 'Adopté',
  'pet.adoptCallout': 'Adopter un compagnon',
  'pet.changePet': 'Changer de compagnon',
  'pet.wake': 'Réveiller',
  'pet.tuck': 'Cacher',
  'pet.wakeTitle': 'Réveiller le compagnon — afficher l\'overlay flottant.',
  'pet.tuckTitle': 'Cacher le compagnon — masquer l\'overlay flottant.',
  'pet.settingsTitle': 'Ouvrir les paramètres du compagnon',
  'pet.useCustom': 'Utiliser mon compagnon',
  'pet.customTitle': 'Créez le vôtre',
  'pet.customHint': 'Choisissez un nom, un glyphe et une couleur d\'accent — l\'overlay se met à jour en direct.',
  'pet.customGreetingPlaceholder': 'Faites dire bonjour à votre compagnon…',
  'pet.fieldName': 'Nom',
  'pet.fieldGlyph': 'Glyphe',
  'pet.fieldGlyphHint': 'Un seul emoji fonctionne le mieux (ex. 🐝, 🦄, 🐢).',
  'pet.fieldGreeting': 'Salutation',
  'pet.fieldAccent': 'Couleur d\'accent',
  'pet.fieldAccentCustom': 'Couleur personnalisée',
  'pet.fieldAccentDefault': 'Couleur d\'accent par défaut',
  'pet.overlayAria': 'Compagnon',
  'pet.spriteAria': '{name} — glisser pour déplacer, cliquer pour chatter',
  'pet.spriteTitle': 'Salut de {name} ! Cliquez pour chatter.',
  'pet.taskSummarySingle': '{count} tâche agent est en cours.',
  'pet.taskSummaryMultiple': '{count} tâches agent sont en cours sur {projects} projets.',
  'pet.taskSummaryRecentSingle': '{count} tâche agent s’est terminée récemment.',
  'pet.taskSummaryRecentMultiple': '{count} tâches agent se sont terminées récemment.',
  'pet.taskListAria': 'Tâches agent actives',
  'pet.taskOpenProject': 'Ouvrir {project}',
  'pet.taskGroup.running': 'En cours',
  'pet.taskGroup.queued': 'En attente',
  'pet.taskGroup.recent': 'Terminées récemment',
  'pet.idleQuote.leonardo.text': 'Apprendre ne fatigue jamais l’esprit.',
  'pet.idleQuote.leonardo.author': 'Léonard de Vinci',
  'pet.idleQuote.michelangelo.text': 'J’ai vu l’ange dans le marbre et j’ai taillé jusqu’à le libérer.',
  'pet.idleQuote.michelangelo.author': 'Michel-Ange',
  'pet.idleQuote.bernini.text': 'Deux choses peuvent aider le sculpteur : la lumière et l’ombre.',
  'pet.idleQuote.bernini.author': 'Gian Lorenzo Bernini',
  'pet.idleQuote.raphael.text': 'Quand on peint, on ne pense pas.',
  'pet.idleQuote.raphael.author': 'Raphaël',
  'pet.idleQuote.caravaggio.text': 'Toutes les œuvres, peu importe quoi ou par qui elles sont peintes, ne sont que bagatelles et enfantillages si elles ne sont pas faites et peintes d’après nature.',
  'pet.idleQuote.caravaggio.author': 'Le Caravage',
  'pet.idleQuote.rodin.text': 'L’essentiel est d’être ému, d’aimer, d’espérer, de trembler, de vivre.',
  'pet.idleQuote.rodin.author': 'Auguste Rodin',
  'pet.composerTitle': 'Compagnons — réveiller, cacher ou choisir',
  'pet.composerMenuTitle': 'Compagnons',
  'pet.composerMenuHint': 'astuce : tapez /pet pour basculer',
  'pet.composerOpenSettings': 'Gérer les animaux',
  'pet.welcomeTeaserTitle': 'Adoptez un compagnon',
  'pet.welcomeTeaserBody': 'Un petit compagnon flottant qui traîne avec vous.',
  'pet.welcomeTeaserCta': 'En choisir un',
  'pet.imageUpload': 'Téléverser un sprite',
  'pet.imageReplace': 'Remplacer le sprite',
  'pet.imageRemove': 'Utiliser un emoji',
  'pet.imageHintIdle': 'PNG, JPG, WebP, GIF ou SVG. Téléversement de planche ? Déposez une bande horizontale et indiquez le nombre d’images.',
  'pet.imageHintActive': 'Affichage de votre sprite. Indiquez plus d’une image pour animer une planche de sprites horizontale.',
  'pet.fieldFrames': 'Images',
  'pet.fieldFramesHint': '1 = statique. Plus de 1 = planche de sprites horizontale.',
  'pet.fieldFps': 'Vitesse (fps)',
  'pet.fieldFpsHint': 'Vitesse de défilement des images.',
  'pet.atlasImport': 'Importer un sprite Codex',
  'pet.atlasImportTitle': 'Importer un atlas de pet 8×9 / 192×208 (PNG ou WebP).',
  'pet.atlasPickerTitle': 'Choisir une rangée d\'animation',
  'pet.atlasPickerHint': 'Les pets Codex sont livrés avec 9 rangées d\'animation. Par défaut, nous gardons l\'atlas complet pour que le pet change de rangée au survol, au glisser et à l\'inactivité. Vous pouvez aussi le figer sur une seule boucle.',
  'pet.atlasCancel': 'Abandonner l\'atlas',
  'pet.atlasAdopt': 'Figer sur cette rangée',
  'pet.atlasAdoptFull': 'Utiliser l\'atlas complet (animé)',
  'pet.atlasAdoptFullTitle': 'Garder chaque rangée pour que le pet réagisse au survol, à la direction du glisser et aux longues inactivités.',
  'pet.atlasAdoptRowTitle': 'Découper uniquement la rangée sélectionnée en une seule bande en boucle.',
  'pet.atlasActiveHint': 'Atlas animé actif — le pet choisit une rangée selon votre interaction (survol, glisser, inactivité).',
  'pet.atlasRow.idle': 'Inactif',
  'pet.atlasRow.running-right': 'Court à droite',
  'pet.atlasRow.running-left': 'Court à gauche',
  'pet.atlasRow.waving': 'Salut',
  'pet.atlasRow.jumping': 'Saut',
  'pet.atlasRow.failed': 'Échec',
  'pet.atlasRow.waiting': 'Attente',
  'pet.atlasRow.running': 'Course',
  'pet.atlasRow.review': 'Révision',
  'pet.hatchTitle': 'Faire éclore un nouveau compagnon avec l\'IA',
  'pet.hatchHint': 'Utilisez la compétence hatch-pet intégrée dans le chat pour générer une planche de sprites style Codex, puis importez-la ici.',
  'pet.hatchConcept': 'Concept du compagnon (optionnel)',
  'pet.hatchConceptPlaceholder': 'ex. un petit shiba pixel art dans un pull douillet',
  'pet.hatchCopy': 'Copier le prompt',
  'pet.hatchCopied': 'Copié !',
  'pet.hatchFoot': 'Une fois que la compétence a enregistré votre compagnon, revenez et choisissez « Importer un sprite Codex ».',
  'pet.slashPopoverAria': 'Commandes slash',
  'pet.slashPopoverTitle': 'Commandes',
  'pet.slashPopoverHint': '↑↓ naviguer · entrée pour choisir · échap pour fermer',
  'pet.slashPet': 'Basculer, adopter ou aller aux paramètres du compagnon.',
  'pet.slashPetWake': 'Réveiller l\'overlay flottant du compagnon.',
  'pet.slashPetTuck': 'Cacher le compagnon pour l\'instant.',
  'pet.slashHatch': 'Générer un pet Codex via la compétence hatch-pet.',
  'pet.slashHatchArg': '<concept>',
  'pet.slashSearch': 'Rechercher sur le web via la commande OD research.',
  'pet.slashSearchArg': '<requête>',
  'pet.codexTitle': 'Éclos récemment',
  'pet.codexSubtitle': 'Les pets empaquetés par la compétence hatch-pet apparaissent ici pour une adoption en un clic.',
  'pet.codexSubtitleWithDir': 'Analyse de {dir} pour les pets empaquetés par la compétence hatch-pet.',
  'pet.codexEmpty': 'Aucun pet éclos pour l\'instant. Tapez /hatch dans le chat pour en générer un.',
  'pet.codexLoading': 'Recherche de pets éclos…',
  'pet.codexRefresh': 'Actualiser',
  'pet.codexAdopt': 'Adopter',
  'pet.codexAdopting': 'Adoption…',
  'pet.communitySync': 'Télécharger les pets de la communauté',
  'pet.communitySyncing': 'Téléchargement…',
  'pet.communitySyncTitle': 'Synchroniser les derniers pets de Codex Pet Share + j20 Hatchery dans ~/.codex/pets/.',
  'pet.communitySyncDone': '{wrote} nouveaux pets synchronisés ({total} au total).',
  'pet.communitySyncFailed': 'Échec de la synchronisation : {error}',
  'pet.codexBundled': 'Fourni',
  'pet.codexBundledTitle': 'Livré avec Open Design — aucun téléchargement nécessaire.',
  'settings.notifications': 'Notifications',
  'settings.notificationsHint': 'Son et notification bureau à la fin d\'une tâche',
  'settings.notifyCompletionSound': 'Son de fin',
  'settings.notifyCompletionSoundHint': 'Joué quand un tour se termine. Désactivé par défaut.',
  'settings.notifySuccessSound': 'Son de succès',
  'settings.notifyFailureSound': 'Son d\'échec',
  'settings.notifyDesktop': 'Notification bureau',
  'settings.notifyDesktopHint': 'Envoyée lorsque la fenêtre n\'est pas active.',
  'settings.notifyDesktopBlocked': 'Notifications bloquées par le navigateur. Autorisez-les dans les paramètres du site.',
  'settings.notifyDesktopUnsupported': 'Notifications bureau indisponibles dans cet environnement.',
  'settings.notifyTest': 'Envoyer un test',
  'settings.notifyTestSent': 'Notification de test envoyée. Si aucune bannière n\'apparaît, vérifiez les paramètres de notification du navigateur et du système.',
  'settings.notifyTestFailed': 'L\'appel de notification a échoué. Vérifiez les paramètres de notification du navigateur et du système.',
  'settings.notifySoundDing': 'Ding',
  'settings.notifySoundChime': 'Carillon',
  'settings.notifySoundTwoToneUp': 'Bitonale montante',
  'settings.notifySoundPluck': 'Pizzicato',
  'settings.notifySoundBuzz': 'Buzz',
  'settings.notifySoundTwoToneDown': 'Bitonale descendante',
  'settings.notifySoundThud': 'Sourd',
  'settings.skills': 'Compétences',
  'settings.skillsHint': 'Compétences que l’agent peut invoquer en cours de tâche',
  'settings.skillsNew': 'Nouvelle compétence',
  'settings.skillsEmpty': 'Sélectionnez une compétence à gauche, ou créez-en une.',
  'settings.skillsEdit': 'Modifier',
  'settings.skillsDelete': 'Supprimer',
  'settings.skillsDeleteConfirm': 'Confirmer la suppression',
  'settings.skillsName': 'Nom',
  'settings.skillsTriggers': 'Déclencheurs (séparés par virgules ou retours à la ligne)',
  'settings.skillsDescription': 'Description',
  'settings.skillsBody': 'Corps SKILL.md',
  'settings.skillsCreate': 'Créer',
  'settings.skillsSave': 'Enregistrer',
  'settings.skillsSaving': 'Enregistrement…',
  'settings.skillsFiles': 'Fichiers',
  'settings.skillsNoFiles': 'Aucun fichier dans ce dossier de compétence.',
  'settings.skillsNameRequired': 'Le nom de la compétence est requis.',
  'settings.skillsBodyRequired': 'Le contenu de la compétence est requis.',
  'settings.designSystems': 'Systèmes de design',
  'settings.designSystemsHint': 'Gérez les systèmes de design affichés dans la galerie d’accueil',
  'settings.designSystemsInstalled': 'Installés',
  'settings.designSystemsAdd': 'Ajouter un système de design',
  'settings.designSystemsHiddenCount': '{count} masqués dans la galerie d’accueil',
  'settings.designSystemsShowAll': 'Tout afficher',
  'settings.designSystemsShowHidden': 'Afficher les masqués',
  'settings.designSystemsSource': 'Source',
  'settings.designSystemsSourceLocal': 'Locale',
  'settings.designSystemsSourceGithub': 'GitHub',
  'settings.designSystemsSourceShadcn': 'shadcn',
  'settings.designSystemsShadcnReference': 'Référence du registre shadcn',
  'settings.designSystemsImportShadcn': 'Importer depuis shadcn',
  'settings.designSystemsStructure': 'Structure',
  'settings.designSystemsModeHybrid': 'Hybride',
  'settings.designSystemsModeNormalized': 'Normalisé',
  'settings.designSystemsModeVerbatim': 'Tel quel',
  'settings.designSystemsCraft': 'Craft',
  'settings.designSystemsCraftColor': 'Couleur',
  'settings.designSystemsCraftAccessibility': 'Accessibilité',
  'settings.designSystemsGithubUrl': 'URL GitHub',
  'settings.designSystemsProjectPath': 'Chemin du projet',
  'settings.designSystemsImportGithub': 'Importer depuis GitHub',
  'settings.designSystemsImportProject': 'Importer depuis le projet',
  'settings.designSystemsImportedStatus': '{title} importé',
  'settings.designSystemsViewImported': 'Voir le système de design importé',
  'settings.designSystemsCategory': 'Catégorie',
  'settings.designSystemsAllCategories': 'Toutes les catégories',
  'settings.designSystemsShowInHomeGallery': 'Afficher dans la galerie d’accueil',
  'settings.projectLocations': 'Emplacements de projets',
  'settings.projectLocationsHint': 'Racines de stockage des espaces de travail',
  'settings.projectLocationsDescription': 'Ajoutez des bases de travail pouvant contenir plusieurs dossiers de projets Open Design. Les nouveaux projets sont enregistrés comme un dossier dans la base sélectionnée.',
  'settings.projectLocationsSaveError': 'Impossible d’enregistrer les emplacements de projets. Vérifiez que chaque chemin est un dossier accessible.',
  'settings.projectLocationsSaved': 'Emplacements de projets enregistrés.',
  'settings.projectLocationsScanError': 'Impossible d’analyser les emplacements de projets.',
  'settings.projectLocationsScanComplete': 'Analyse terminée : {imported} importé(s), {existing} déjà enregistré(s).',
  'settings.projectLocationsNoFolderSelected': 'Aucun dossier sélectionné.',
  'settings.projectLocationsDuplicate': 'Cette base de travail est déjà ajoutée.',
  'settings.projectLocationsWorkBaseMeta': 'Base de travail · les projets sont créés ici comme sous-dossiers',
  'settings.projectLocationsAddFolder': 'Ajouter un dossier…',
  'settings.projectLocationsDefaultBadge': 'Emplacement par défaut',
  'settings.projectLocationsMakeDefault': 'Définir par défaut',
  'settings.projectLocationsDefaultSaved': 'Emplacement de projet par défaut mis à jour.',
  'settings.librarySkills': 'Compétences',
  'settings.libraryDesignSystems': 'Systèmes de design',
  'settings.librarySearch': 'Rechercher...',
  'settings.libraryAll': 'Tout',
  'settings.libraryPreview': 'Aperçu',
  'settings.libraryPreviewClose': 'Fermer',
  'settings.libraryLoading': 'Chargement...',
  'settings.libraryNoResults': 'Aucun élément ne correspond à votre recherche.',
  'settings.libraryEnabled': 'Activé',
  'settings.libraryDisabled': 'Désactivé',
  'settings.connectorsNavHint': 'Connexions aux systèmes externes',
  'settings.connectorsHint': 'Gérez les paramètres des connecteurs et fournisseurs d’outils pour cet appareil.',
  'settings.connectorsComposioApiKey': 'Clé API Composio',
  'settings.connectorsSavedTitle': 'Enregistrée dans le daemon local',
  'settings.connectorsSavedWithTail': 'Enregistrée · ••••{tail}',
  'settings.connectorsSaved': 'Enregistrée',
  'settings.connectorsGetApiKey': 'Obtenir une clé API',
  'settings.connectorsReplaceKeyPlaceholder': 'Collez une nouvelle clé pour remplacer celle enregistrée',
  'settings.connectorsApiKeyPlaceholder': 'Collez la clé API Composio',
  'settings.connectorsClear': 'Effacer',
  'settings.connectorsClearConfirmTitle': 'Effacer la clé API Composio enregistrée ?',
  'settings.connectorsClearConfirmBody': 'Supprimer la clé déconnecte tous les connecteurs Composio liés à cet espace. Les comptes connectés, les autorisations OAuth et les accès aux outils seront tous supprimés.',
  'settings.connectorsClearConfirmContinue': 'Continuer',
  'settings.connectorsClearFinalTitle': 'Cette action déconnectera tous les connecteurs',
  'settings.connectorsClearFinalBody': 'Action irréversible. Vous devrez reconnecter chaque intégration depuis le début après avoir collé une nouvelle clé.',
  'settings.connectorsClearFinalConfirm': 'Supprimer la clé et déconnecter',
  'settings.connectorsClearArming': 'Un instant…',
  'settings.connectorsClearCancel': 'Annuler',
  'settings.connectorsSaveKey': 'Enregistrer la clé',
  'settings.connectorsSaveKeyTitle': 'Envoyer cette clé au daemon local',
  'settings.connectorsKeySaving': 'Enregistrement…',
  'settings.connectorsKeySaved': 'Enregistré ✓',
  'settings.connectorsKeyError': 'Impossible d’enregistrer la clé. Vérifiez que le daemon local est lancé, puis réessayez.',
  'settings.connectorsHelpSaved': 'Votre clé déverrouille le catalogue ci-dessous et reste dans le daemon local. Collez une nouvelle clé pour la remplacer ou effacez-la.',
  'settings.connectorsHelpUnsaved': 'Modifications non enregistrées — cliquez sur Enregistrer la clé pour stocker cette information dans le daemon local et débloquer le catalogue ci-dessous.',
  'settings.connectorsHelpEmpty': 'Les clés sont stockées localement et ne sont jamais partagées.',
  'settings.connectorsLoadingSavedKey': 'Recherche d’une clé enregistrée dans le daemon local…',
  'settings.autosaveSaving': 'Enregistrement…',
  'settings.autosaveSaved': 'Toutes les modifications enregistrées',
  'settings.autosaveError': 'Impossible d’enregistrer les modifications. Le daemon local est peut-être hors ligne.',
  'settings.libraryToggleLabel': 'Activer ou désactiver',
  'settings.memory': 'Mémoire',
  'settings.memoryHint': 'Faits personnels extraits automatiquement des conversations',
  'settings.customInstructionsTitle': 'Instructions personnalisées',
  'settings.customInstructionsHint': 'Instructions persistantes appliquées à chaque projet. Utilisez-les pour définir les préférences que le modèle doit toujours suivre.',
  'settings.customInstructionsPlaceholder': 'ex. "Utilise toujours TypeScript. Préfère les composants fonctionnels. Réponds de façon concise."',
  'settings.memoryDescription': 'Faits sur vos préférences extraits automatiquement, sauvegardés en Markdown et réinjectés dans chaque chat.',
  'settings.memoryEnabled': 'Activée',
  'settings.memoryDisabled': 'Désactivée',
  'settings.memoryEnableLabel': 'Activer l\'injection de mémoire',
  'settings.memoryDisabledBanner': 'La mémoire est actuellement désactivée. Les faits existants restent sur le disque, mais ne seront pas injectés dans les nouveaux chats, et les nouveaux tours n’extrairont rien de nouveau.',
  'settings.memoryNew': 'Nouvelle mémoire',
  'settings.memoryEdit': 'Modifier',
  'settings.memoryDelete': 'Supprimer',
  'settings.memoryPreview': 'Aperçu',
  'settings.memoryEmpty': 'Aucune mémoire pour l\'instant.',
  'settings.memoryEmptyHintZh': '记住: 用户偏好深色主题',
  'settings.memoryEmptyHintEn': 'I prefer dark mode',
  'settings.memoryName': 'Nom',
  'settings.memoryDesc': 'Description en une ligne',
  'settings.memoryBody': 'Corps (Markdown pris en charge)',
  'settings.memoryBodyHint': 'Listez d’abord les règles avec des puces, puis ajoutez éventuellement des lignes « Pourquoi » et « Quand l’appliquer ». Markdown pris en charge. Vous pouvez aussi cliquer sur un exemple ci-dessus pour le charger.',
  'settings.memoryStartersLabel': 'Besoin d’un point de départ ? Cliquez pour remplir le formulaire :',
  'settings.memoryStarterUserName': 'Mon rôle',
  'settings.memoryStarterUserDesc': 'Je suis ingénieur frontend sur un outil de design SaaS',
  'settings.memoryStarterUserBody': '- Rôle : ingénieur frontend senior\n- Stack : React, TypeScript, Vite\n- Domaine : design / outils collaboratifs\n- Fuseau horaire : GMT+8 (Asie/Shanghai)\n\nQuand l’appliquer : tout chat — cadrer les exemples autour du frontend web.',
  'settings.memoryStarterFeedbackName': 'Préférences UI',
  'settings.memoryStarterFeedbackDesc': 'Mode sombre, grand corps de texte, faible densité d’information',
  'settings.memoryStarterFeedbackBody': '- Thème : sombre par défaut\n- Corps de texte : ≥ 18 px\n- Densité d’information : privilégier l’espace, moins d’éléments par écran\n\nPourquoi : moins de fatigue visuelle pendant les longues sessions.\nQuand l’appliquer : lorsque vous générez des UI, pages web ou slides.',
  'settings.memoryStarterProjectName': 'Projet actuel',
  'settings.memoryStarterProjectDesc': 'Open Design v0.5 — éditeur de design piloté par chat',
  'settings.memoryStarterProjectBody': '- Objectif : livrer l’éditeur piloté par chat ce trimestre\n- Priorités : rendu en streaming, multimodal local, offline-first\n- Stack : Next.js 16, daemon Express, SQLite\n\nQuand l’appliquer : dans toute conversation à propos de ce projet.',
  'settings.memorySaveHint': 'Non enregistré automatiquement — cliquez sur Créer / Enregistrer pour appliquer.',
  'settings.memoryIndexSaveHint': 'Les modifications de l’index ne sont pas enregistrées automatiquement — cliquez sur Enregistrer l’index pour appliquer.',
  'settings.memoryIndexUnsaved': 'Modifications non enregistrées',
  'settings.memoryFlashCreated': '✓ Mémoire créée',
  'settings.memoryFlashSaved': '✓ Mémoire enregistrée',
  'settings.memoryFlashDeleted': '✓ Mémoire supprimée',
  'settings.memoryFlashIndexSaved': '✓ Index enregistré',
  'settings.memoryFlashPathCopied': '✓ Chemin copié',
  'settings.memoryNameLabel': 'Titre',
  'settings.memoryTypeLabel': 'Type',
  'settings.memoryDescLabel': 'Description',
  'settings.memoryBodyLabel': 'Contenu',
  'settings.memoryTypeUser': 'Utilisateur',
  'settings.memoryTypeFeedback': 'Retour',
  'settings.memoryTypeProject': 'Projet',
  'settings.memoryTypeReference': 'Référence',
  'settings.memoryIndex': 'MEMORY.md (index)',
  'settings.memoryIndexSave': 'Enregistrer l\'index',
  'settings.memoryIndexReset': 'Réinitialiser',
  'settings.memoryToastChanged': 'Mémoire mise à jour',
  'settings.memoryToastClickHint': 'Afficher',
  'settings.memoryAll': 'Tout',
  'settings.memoryExtractions': 'Historique d’extraction',
  'settings.memoryExtractionsHint': 'Tentatives récentes d’extraction avec LLM. L’extraction heuristique par regex s’exécute toujours d’abord ; l’extraction LLM tourne en arrière-plan après chaque tour.',
  'settings.memoryExtractionsEmpty': 'Aucune extraction pour l’instant. Le prochain tour de chat alimentera cette liste.',
  'settings.memoryExtractionsRefresh': 'Actualiser',
  'settings.memoryExtractionsRefreshing': 'Actualisation…',
  'settings.memoryExtractionPhaseRunning': 'En cours…',
  'settings.memoryExtractionPhaseSuccess': 'Réussite',
  'settings.memoryExtractionPhaseSkipped': 'Ignorée',
  'settings.memoryExtractionPhaseFailed': 'Échec',
  'settings.memoryExtractionSkipNoProvider': 'Aucune clé API configurée pour l’extraction de mémoire LLM.',
  'settings.memoryExtractionSkipDisabled': 'La mémoire est désactivée.',
  'settings.memoryExtractionSkipEmpty': 'Message utilisateur vide — rien à extraire.',
  'settings.memoryExtractionSkipNoMatch': 'Aucun motif regex ne correspond à ce tour.',
  'settings.memoryExtractionKindHeuristic': 'regex',
  'settings.memoryExtractionKindLlm': 'LLM',
  'settings.memoryExtractionProviderEnv': 'env',
  'settings.memoryExtractionProviderMediaConfig': 'réglages médias',
  'settings.memoryExtractionProviderOverride': 'réglages mémoire',
  'settings.memoryExtractionProposed': 'proposée',
  'settings.memoryExtractionWritten': 'écrite',
  'settings.memoryExtractionDuration': 'en',
  'settings.memoryExtractionDelete': 'Supprimer',
  'settings.memoryExtractionsClear': 'Effacer',
  'settings.memoryExtractionsClearTitle': 'Effacer tout l’historique d’extraction',
  'settings.memoryExtractionsClearConfirm': 'Effacer tout l’historique des extractions ? Cette action est irréversible.',
  'settings.memoryNoProviderBannerTitle': 'L’extraction de mémoire LLM ne fonctionne pas',
  'settings.memoryNoProviderBannerBody': 'Aucune clé API trouvée pour l’extracteur de mémoire. Ajoutez une clé OpenAI dans les fournisseurs de médias, ou définissez ANTHROPIC_API_KEY / OPENAI_API_KEY dans l’environnement pour activer l’extraction par LLM. L’extraction heuristique par regex reste active.',
  'settings.libraryInstall': 'Installer',
  'settings.libraryInstallGithub': 'GitHub',
  'settings.libraryInstallLocal': 'Chemin local',
  'settings.libraryInstallUrl': 'https://github.com/owner/repo',
  'settings.libraryInstallPath': '/path/to/skill-folder',
  'settings.libraryInstallButton': 'Installer',
  'settings.libraryUninstall': 'Désinstaller',
  'settings.libraryBuiltIn': 'Intégré',
  'settings.libraryInstalled': 'Installé',
  'settings.orbit.eyebrow': 'Automatisation',
  'settings.orbit.title': 'Orbit',
  'settings.orbit.navHint': 'Résumé quotidien des connecteurs',
  'settings.orbit.lede': 'Collecte l’activité des connecteurs selon un calendrier et publie le résultat sous forme d’artefact dynamique actualisable.',
  'settings.orbit.statusOnTitle': 'Les exécutions quotidiennes planifiées sont activées',
  'settings.orbit.statusOffTitle': 'Les exécutions quotidiennes planifiées sont désactivées',
  'settings.orbit.statusActive': 'Actif',
  'settings.orbit.statusOff': 'Désactivé',
  'settings.orbit.runTitle': 'Démarrer une exécution Orbit et ouvrir la conversation en direct',
  'settings.orbit.running': 'Exécution…',
  'settings.orbit.runOpen': 'Exécuter maintenant',
  'settings.orbit.dailySummaryTitle': 'Résumé quotidien',
  'settings.orbit.dailySummarySub': 'S’exécute une fois par jour à l’heure locale planifiée.',
  'settings.orbit.on': 'Activé',
  'settings.orbit.off': 'Désactivé',
  'settings.orbit.runTimeTitle': 'Heure d’exécution',
  'settings.orbit.runTimeSub': 'Par défaut 08:00. Enregistrez pour appliquer au planning du daemon.',
  'settings.orbit.runTimeAria': 'Heure d’exécution quotidienne de Orbit',
  'settings.orbit.nextRun': 'Prochaine exécution',
  'settings.orbit.nextRunScheduledAfterSave': 'Planifiée après enregistrement',
  'settings.orbit.schedule': 'Planning',
  'settings.orbit.pausedManualOnly': 'En pause — exécutions manuelles uniquement',
  'settings.orbit.templateTitle': 'Modèle de prompt',
  'settings.orbit.templateMissing': 'Le modèle {id} n’est pas installé.',
  'settings.orbit.templateMissingOption': '{id} (manquant)',
  'settings.orbit.templateMissingInstall': 'Installez une compétence Orbit pour guider le prompt.',
  'settings.orbit.templateMissingPickAnother': 'Choisissez un autre modèle dans la liste.',
  'settings.orbit.templateResetTitle': 'Réinitialiser sur {id}',
  'settings.orbit.templateReset': 'Réinitialiser',
  'settings.orbit.templateHelp': 'Guidez Orbit avec une compétence — le prompt d’exemple du modèle sélectionné est injecté dans chaque exécution Orbit afin que les résumés suivent cette forme.',
  'settings.orbit.templateAria': 'Modèle de prompt Orbit',
  'settings.orbit.templatesLoading': 'Chargement des modèles…',
  'settings.orbit.templatesOptgroup': 'Modèles de compétences Orbit',
  'settings.orbit.lastRun': 'Dernière exécution',
  'settings.orbit.triggerManual': 'Manuelle',
  'settings.orbit.triggerScheduled': 'Planifiée',
  'settings.orbit.meterAria': '{succeeded} réussis, {skipped} ignorés, {failed} échoués sur {checked} vérifiés',
  'settings.orbit.countChecked': 'Vérifiés',
  'settings.orbit.countSucceeded': 'Réussis',
  'settings.orbit.countSkipped': 'Ignorés',
  'settings.orbit.countFailed': 'Échoués',
  'settings.orbit.runError': 'Impossible d’exécuter Orbit. Vérifiez que le daemon local fonctionne et que les connecteurs sont configurés.',
  'settings.orbit.gateAriaLabel': 'Des connecteurs sont requis pour utiliser Orbit',
  'settings.orbit.gateEyebrow': 'Configuration requise',
  'settings.orbit.gateTitle': 'Connectez un outil pour alimenter Orbit',
  'settings.orbit.gateBody': 'Orbit résume l’activité de vos connecteurs. Vous n’avez encore rien connecté — ajoutez au moins une intégration pour qu’Orbit ait de quoi rapporter.',
  'settings.orbit.gateBodyNoKey': 'Orbit résume l’activité de vos connecteurs, et les connecteurs passent par Composio. Ajoutez une clé d’API Composio dans Connecteurs pour débloquer le catalogue et choisir votre première intégration.',
  'settings.orbit.gateAction': 'Ouvrir Connecteurs',
  'settings.orbit.gateActionNoKey': 'Configurer Composio',
  'settings.orbit.gateLoading': 'Vérification de vos connecteurs…',
  'settings.orbit.controlsLockedBadge': 'Verrouillé',
  'settings.orbit.controlsLockedHint': 'Connectez un outil pour déverrouiller la planification et le modèle d\'Orbit.',
  'settings.orbit.artifactKickerLive': 'artefact dynamique',
  'settings.orbit.artifactKickerLegacy': 'Résumé hérité',
  'settings.orbit.artifactTitle': 'Résumé quotidien de l’activité Orbit',
  'settings.orbit.artifactMetaLive': 'Artefact HTML actualisable généré à partir de l’activité des connecteurs.',
  'settings.orbit.artifactMetaLegacy': 'Généré avant l’activation de la prise en charge des artefacts dynamiques — relancez Orbit pour en publier un.',
  'settings.orbit.copyMarkdownTitle': 'Copier le résumé Markdown dans le presse-papiers',
  'settings.orbit.copied': 'Copié',
  'settings.orbit.copy': 'Copier',
  'settings.orbit.openArtifact': 'Ouvrir l’artefact',
  'settings.orbit.sourceMarkdown': 'Source Markdown',
  'notify.successTitle': 'Tâche terminée',
  'notify.failureTitle': 'Tâche échouée',
  'notify.successBody': 'Un tour est terminé.',
  'notify.failureBody': 'La tâche s\'est terminée avec une erreur.',
  'updater.available': 'Mise à jour disponible',
  'updater.availableBody': 'Open Design {version} est disponible. Elle sera téléchargée avant l’ouverture du programme d’installation.',
  'updater.checking': 'Recherche de mises à jour',
  'updater.download': 'Télécharger la mise à jour',
  'updater.downloading': 'Téléchargement de la mise à jour',
  'updater.downloadingPercent': 'Téléchargement de la mise à jour {percent}%',
  'updater.done': 'Terminé',
  'updater.failed': 'Échec de la mise à jour',
  'updater.installerOpenBody': 'Le programme d’installation est ouvert. Open Design est en train de quitter pour vous permettre de terminer la mise à jour.',
  'updater.installerOpened': 'Programme d’installation ouvert',
  'updater.later': 'Plus tard',
  'updater.openFailedFallback': 'Impossible d’ouvrir le programme d’installation.',
  'updater.openInstaller': 'Installer la mise à jour',
  'updater.opening': 'Ouverture du programme d’installation...',
  'updater.quitButton': 'Quitter Open Design',
  'updater.quitFailedBody': 'Le programme d’installation est ouvert, mais Open Design n’a pas pu quitter. Quittez Open Design avant de remplacer l’application.',
  'updater.quitFailedTitle': 'Impossible de quitter',
  'updater.quitting': 'Fermeture...',
  'updater.ready': 'Mise à jour prête',
  'updater.readyGeneric': 'Une nouvelle version est prête. Open Design va se fermer et ouvrir le programme d’installation.',
  'updater.readyVersion': 'Open Design {version} est prêt. Open Design va se fermer et ouvrir le programme d’installation.',
  'updater.upToDate': 'Vous utilisez déjà la dernière version.',
  'settings.memoryModelInlineLabel': 'Modèle de mémoire',
  'settings.memoryModelInlineSameAsChat': 'Identique au chat',
  'settings.memoryModelInlineSameAsChatWithModel': 'Identique au chat ({model})',
  'settings.memoryModelInlineSameAsChatWithProvider': 'Identique au chat ({provider})',
  'settings.memoryModelInlineHintCli': 'Facultatif. Utilise la CLI locale sélectionnée quand elle est prise en charge ; choisissez un modèle seulement pour remplacer la valeur par défaut.',
  'settings.memoryModelInlineHintCliConstrained': 'Facultatif. Utilise la CLI locale sélectionnée quand elle est prise en charge ; {provider} n’est que la famille de fournisseur de secours.',
  'settings.memoryModelInlineHintByok': 'Facultatif. Réutilise votre clé API de chat sur le même fournisseur — choisir un autre modèle (souvent moins cher) ne change que le corps de la requête.',
  'settings.memoryModelInlineHintByokNeutral': 'La mémoire utilise un modèle séparé du chat. Par défaut, elle reprend votre modèle de chat.',
  'settings.memoryModelInlineFlashSaved': 'Enregistré',
  'settings.memoryModelInlineFlashCleared': 'Effacé',
  'diagnostics.exportTitle': 'Exporter le diagnostic',
  'diagnostics.exportButton': 'Exporter le diagnostic',
  'diagnostics.exportHint': 'Compresse les journaux récents et les informations machine dans un zip à partager avec l\'équipe.',
  'diagnostics.exporting': 'Exportation…',
  'diagnostics.exportSuccess': 'Diagnostic enregistré dans {path}',
  'diagnostics.exportFailed': 'Impossible d\'exporter le diagnostic: {message}',
  'generationPreview.title': 'Génération…',
  'generationPreview.failedTitle': 'Échec de la génération',
  'generationPreview.failedFallback': 'Une erreur est survenue. Veuillez réessayer.',
  'generationPreview.footnote': 'Prend généralement 2 à 5 minutes',
  'generationPreview.stepUnderstand': 'Compréhension des besoins',
  'generationPreview.stepGenerate': 'Génération de la page',
  'generationPreview.stepPrepare': 'Préparation de l\'aperçu',
  'generationPreview.retry': 'Réessayer',
  'generationPreview.awaitingTitle': 'En attente de votre réponse',
  'generationPreview.awaitingLead': 'Répondez à quelques questions dans le chat pour continuer.',
  'generationPreview.stoppedTitle': 'Génération en pause',
  'generationPreview.stoppedLead': 'Reprenez les étapes restantes depuis le chat à gauche.',
  'generationPreview.reasonAuth': 'Connexion ou autorisation expirée',
  'generationPreview.reasonRateLimited': 'Trop de requêtes',
  'generationPreview.reasonService': 'Service de génération indisponible',
  'generationPreview.reasonBalance': 'Solde du compte épuisé',
};
