{
  "app": {
    "brand": "nanobot",
    "loading": {
      "connecting": "Connexion à nanobot…",
      "boot": "Chargement de nanobot…"
    },
    "error": {
      "title": "Impossible de joindre nanobot",
      "gatewayHint": "Assurez-vous que la gateway est en cours d’exécution (`nanobot gateway`) et que cette page est ouverte sur la même machine."
    },
    "auth": {
      "label": "Mot de passe",
      "showPassword": "Afficher le mot de passe",
      "hidePassword": "Masquer le mot de passe",
      "submit": "Se connecter",
      "required": "Saisissez le mot de passe.",
      "invalid": "Mot de passe incorrect. Réessayez."
    },
    "account": {
      "section": "Compte",
      "logoutHint": "Déconnecter ce navigateur du gateway.",
      "logout": "Se déconnecter"
    },
    "system": {
      "section": "Système",
      "restartHint": "Redémarrez nanobot pour appliquer les changements d’exécution.",
      "restart": "Redémarrer nanobot",
      "restarting": "Redémarrage...",
      "restartEngine": "Redémarrer le moteur",
      "restartingEngine": "Redémarrage du moteur..."
    },
    "restart": {
      "completed": "Redémarrage terminé en {{seconds}} s."
    },
    "documentTitle": {
      "base": "nanobot",
      "chat": "{{title}} · nanobot"
    },
    "meta": {
      "description": "Interface web nanobot — discutez avec votre espace de travail nanobot."
    },
    "pairing": {
      "title": "Associer un utilisateur du chat",
      "description": "Saisissez le code d’association affiché dans le chat.",
      "code": "Code d’association",
      "matched": "Correspondance {{channel}}. Connexion...",
      "expiresInline": "Le code expire {{expires}}.",
      "queueCount": "{{count}} en attente",
      "noMatch": "Aucune demande en attente ne correspond à ce code."
    }
  },
  "temporaryChat": {
    "title": "Discussion temporaire",
    "retention": "Elle n’est enregistrée ni dans l’historique ni dans la mémoire.",
    "expiration": "Recharger, fermer ou perdre la connexion met fin à ces discussions.",
    "externalEffects": "Les requêtes sont tout de même envoyées au fournisseur du modèle et les outils peuvent laisser des modifications.",
    "clear": "Effacer la discussion temporaire",
    "sectionTitle": "Discussions temporaires",
    "closeAction": "Fermer la discussion temporaire : {{title}}"
  },
  "sidebar": {
    "navigation": "Navigation de la barre latérale",
    "collapse": "Réduire la barre latérale",
    "newChat": "Nouveau sujet",
    "searchAria": "Rechercher",
    "searchPlaceholder": "Rechercher",
    "searchResults": "Résultats",
    "noSearchResults": "Aucun sujet correspondant.",
    "recent": "Sujets récents",
    "settings": "Paramètres",
    "language": {
      "label": "Langue",
      "ariaLabel": "Changer de langue"
    },
    "apps": "Applications",
    "automations": "Automatisations",
    "skills": {
      "title": "Compétences"
    }
  },
  "settings": {
    "backToChat": "Retour au chat",
    "sidebar": {
      "title": "Réglages",
      "ariaLabel": "Sections des réglages"
    },
    "nav": {
      "general": "Général",
      "byok": "BYOK",
      "overview": "Aperçu",
      "appearance": "Apparence",
      "models": "Modèles",
      "providers": "Fournisseurs",
      "image": "Images",
      "voice": "Voix",
      "browser": "Internet",
      "channels": "Canaux",
      "runtime": "Système",
      "advanced": "Sécurité",
      "cliApps": "Applications CLI",
      "mcp": "MCP",
      "apps": "Applications",
      "automations": "Automatisations",
      "skills": "Compétences"
    },
    "sections": {
      "interface": "Interface utilisateur",
      "ai": "AI",
      "system": "Système",
      "about": "À propos",
      "status": "État",
      "localPreferences": "Préférences locales",
      "presets": "Préréglages",
      "imageGeneration": "Génération d’images",
      "imageDefaults": "Valeurs par défaut",
      "webSearch": "Recherche web",
      "webBehavior": "Comportement",
      "regional": "Paramètres régionaux",
      "webuiSafety": "Sécurité WebUI",
      "capabilities": "Capacités",
      "cliApps": "Applications CLI",
      "mcp": "Services MCP",
      "apps": "Applications",
      "nativeHost": "Hôte natif",
      "hostSafety": "Sécurité de l’app",
      "voiceInput": "Saisie vocale"
    },
    "rows": {
      "theme": "Thème",
      "language": "Langue",
      "provider": "Fournisseur",
      "model": "Modèle",
      "restart": "Redémarrer nanobot",
      "configPath": "Chemin de config",
      "activePreset": "Préréglage actif",
      "gateway": "Passerelle",
      "restartState": "État du redémarrage",
      "pendingChanges": "Modifications en attente",
      "selectedPreset": "Préréglage sélectionné",
      "presetModel": "Modèle du préréglage",
      "density": "Densité",
      "activityMode": "Détail d’activité",
      "fileEditDisplay": "Affichage des modifications de fichiers",
      "codeWrap": "Retour à la ligne du code",
      "maxResults": "Résultats max.",
      "timeout": "Délai d’attente",
      "jinaReader": "Lecteur Jina",
      "imageGeneration": "Génération d’images",
      "imageProvider": "Fournisseur d’images",
      "imageProviderStatus": "État du fournisseur",
      "imageProviderBase": "Base du fournisseur",
      "imageModel": "Modèle d’image",
      "defaultAspectRatio": "Ratio par défaut",
      "defaultImageSize": "Taille par défaut",
      "maxImagesPerTurn": "Images max. par tour",
      "imageSaveDir": "Dossier d’enregistrement",
      "timezone": "Fuseau horaire",
      "workspacePath": "Espace de travail par défaut",
      "localServiceAccess": "Services locaux",
      "webuiDefaultAccess": "Accès par défaut",
      "currentModel": "Configuration actuelle",
      "brandLogos": "Logos de marque",
      "cliAppsCatalog": "Catalogue",
      "cliAppsFilter": "Filtre",
      "engine": "Moteur",
      "logs": "Journaux",
      "diagnostics": "Diagnostic",
      "contextWindow": "Fenêtre de contexte",
      "transcription": "Transcription",
      "transcriptionProvider": "Fournisseur",
      "transcriptionProviderStatus": "État du fournisseur",
      "transcriptionModel": "Modèle",
      "transcriptionLanguage": "Langue",
      "voiceLimits": "Limites"
    },
    "help": {
      "theme": "Basculer entre l’apparence claire et sombre.",
      "language": "Choisissez la langue utilisée par WebUI.",
      "provider": "Sélectionnez le fournisseur à utiliser pour les nouvelles requêtes de modèle.",
      "model": "Choisissez le modèle utilisé par ce préréglage.",
      "configPath": "Le fichier de configuration actuellement utilisé par la passerelle.",
      "selectedPreset": "Les préréglages nommés sont en lecture seule ici ; modifiez-les dans config.json.",
      "presetModel": "Passez à la valeur par défaut pour modifier le modèle et le fournisseur depuis la WebUI.",
      "density": "Enregistré seulement dans ce navigateur.",
      "activityMode": "Choisissez le niveau de détail de l’activité de l’agent affiché par défaut.",
      "fileEditDisplay": "Choisissez si l’activité de modification affiche le nombre de lignes ou les différences.",
      "codeWrap": "Garde les longues lignes de code lisibles sur les petits écrans.",
      "maxResults": "Résultats renvoyés par chaque appel web_search.",
      "timeout": "Nombre de secondes avant l’expiration d’une requête de recherche.",
      "jinaReader": "Utilise Jina Reader pour web_fetch lorsque disponible.",
      "imageGeneration": "Expose generate_image dans les chats lorsqu’un fournisseur d’image configuré est disponible.",
      "imageProvider": "Choisissez le fournisseur inscrit utilisé par generate_image.",
      "imageProviderStatus": "La génération d’images réutilise les identifiants des fournisseurs.",
      "imageModel": "Nom du modèle envoyé au fournisseur d’images sélectionné.",
      "defaultAspectRatio": "Utilisé lorsque l’instruction ne choisit pas de ratio.",
      "defaultImageSize": "Indication de taille envoyée aux fournisseurs compatibles.",
      "maxImagesPerTurn": "Limite supérieure pour une requête generate_image.",
      "timezone": "Utilisé pour les horaires et les réponses tenant compte du temps.",
      "localServiceAccess": "Autorise les commandes shell avec accès complet à atteindre les services localhost.",
      "webuiDefaultAccess": "Utilisé par les chats web sans permission propre au projet.",
      "securityManagedControls": "Les récupérations web protègent toujours les services locaux, privés et de métadonnées. La sécurité des canaux principaux reste gérée dans config.json.",
      "currentModel": "Utilisée pour les nouvelles réponses.",
      "selectedModelProvider": "Défini par le modèle sélectionné.",
      "selectedModelValue": "Défini par le modèle sélectionné.",
      "brandLogos": "Affiche les logos de fournisseurs tiers et CLI dans les Réglages.",
      "cliAppsCatalog": "Installe uniquement les adaptateurs CLI d’applications que nanobot peut exécuter localement ; les applications natives restent inchangées.",
      "cliAppsFilter": "Recherchez par application, catégorie ou capacité.",
      "logs": "Ouvre le dossier des journaux du moteur natif.",
      "diagnostics": "Exporte un petit rapport d’exécution pour le support.",
      "localServiceAccessNative": "Autorise les commandes shell avec accès complet à atteindre les services sur ce Mac.",
      "webuiDefaultAccessNative": "Utilisé par les chats natifs sans permission propre au projet.",
      "contextWindow": "Choisissez le budget de contexte par défaut pour cette configuration de modèle.",
      "transcription": "Transcrit l’entrée du micro avant l’envoi. Les messages vocaux des canaux utilisent les mêmes réglages.",
      "transcriptionProvider": "Utilise les identifiants du fournisseur correspondant dans la section Fournisseurs.",
      "transcriptionProviderStatus": "Les clés API restent dans les fournisseurs, pas dans les réglages de transcription.",
      "transcriptionModel": "Laissez le modèle résolu par défaut, sauf si votre fournisseur exige un identifiant personnalisé.",
      "transcriptionLanguage": "Indice ISO-639 facultatif, comme en, zh, ja ou ko."
    },
    "values": {
      "light": "Clair",
      "dark": "Sombre",
      "notAvailable": "Indisponible",
      "enabled": "Activé",
      "disabled": "Désactivé",
      "restartPending": "Redémarrage en attente",
      "ready": "Prêt",
      "privateEngine": "Moteur privé",
      "unixSocket": "Socket Unix",
      "defaultWorkspace": "Espace par défaut",
      "comfortable": "Confortable",
      "compact": "Compacte",
      "auto": "Automatique",
      "expanded": "Développé",
      "default": "Par défaut",
      "summary": "Résumé",
      "diff": "Différences",
      "collapsedDiff": "Diff replié",
      "on": "Activé",
      "off": "Désactivé",
      "defaultPermission": "Autorisation par défaut",
      "fullAccess": "Accès complet",
      "configured": "Configuré",
      "notConfigured": "Non configuré",
      "pending": "En attente",
      "restartingEngine": "Redémarrage",
      "checking": "Vérification",
      "running": "En cours",
      "needsSetup": "Configuration requise"
    },
    "status": {
      "loading": "Chargement des réglages...",
      "loadError": "Impossible de charger les réglages",
      "unsaved": "Modifications non enregistrées.",
      "upToDate": "À jour.",
      "savedRestart": "Enregistré. Redémarrez nanobot pour appliquer.",
      "restartAfterSaving": "Enregistrez les changements, puis redémarrez quand vous êtes prêt.",
      "savedRestartApply": "Enregistré. Redémarrez quand vous êtes prêt.",
      "imageProviderRestart": "Changements du fournisseur d’image enregistrés. Redémarrez quand vous êtes prêt.",
      "hostRestartAfterSaving": "En enregistrant, nanobot redémarrera son moteur.",
      "hostRestartPending": "Enregistré. Le moteur redémarrera lorsqu’il sera prêt.",
      "hostApiUnavailable": "Les actions de l’hôte ne sont disponibles que dans l’app native.",
      "logsOpened": "Dossier des journaux ouvert.",
      "logsOpenFailed": "Impossible d’ouvrir le dossier des journaux.",
      "diagnosticsExported": "Diagnostic exporté vers {{path}}.",
      "diagnosticsExportFailed": "Impossible d’exporter le diagnostic."
    },
    "actions": {
      "save": "Enregistrer",
      "saving": "Enregistrement",
      "saveOrder": "Enregistrer l’ordre",
      "savePreset": "Enregistrer le préréglage",
      "delete": "Supprimer",
      "deleting": "Suppression...",
      "edit": "Modifier",
      "cancel": "Annuler",
      "dismiss": "Ignorer",
      "open": "Ouvrir",
      "export": "Exporter",
      "opening": "Ouverture...",
      "exporting": "Exportation..."
    },
    "byok": {
      "description": "Utilisez vos propres clés de fournisseur. Nanobot lit ces valeurs depuis la configuration actuelle et seuls les fournisseurs configurés peuvent être utilisés dans les préréglages de modèle.",
      "configured": "Configuré",
      "notConfigured": "Non configuré",
      "configuredSection": "Configurés",
      "notConfiguredSection": "Non configurés",
      "showMore": "Afficher {{count}} de plus",
      "showLess": "Afficher moins",
      "apiKey": "Clé API",
      "apiBase": "URL de base de l’API",
      "apiKeyPlaceholder": "Saisir la clé API",
      "apiKeyConfiguredPlaceholder": "Laisser vide pour conserver la clé actuelle",
      "configuredKeyHint": "Key configurée",
      "apiBasePlaceholder": "Utiliser la valeur par défaut du fournisseur",
      "apiKeyRequired": "Une clé API est requise pour configurer ce fournisseur.",
      "showApiKey": "Afficher la clé API",
      "hideApiKey": "Masquer la clé API",
      "noConfiguredProviders": "Aucun fournisseur configuré",
      "configureFirst": "Configurez d'abord un fournisseur dans BYOK.",
      "openByok": "Ouvrir BYOK",
      "tabs": {
        "ariaLabel": "Type d'identifiants BYOK",
        "llm": "LLM",
        "webSearch": "Recherche web"
      },
      "webSearch": {
        "provider": "Fournisseur de recherche",
        "providerHelp": "Choisissez le service utilisé par l’outil de recherche web.",
        "selectProvider": "Choisir un fournisseur",
        "credentials": "Identifiants",
        "noCredentialRequired": "Aucune clé requise",
        "noCredentialHelp": "DuckDuckGo fonctionne sans clé API enregistrée.",
        "apiKeyHelp": "Enregistrée dans la config et masquée après l'enregistrement.",
        "baseUrl": "URL de base",
        "baseUrlHelp": "SearXNG nécessite l'URL de votre propre instance.",
        "baseUrlPlaceholder": "https://search.example.com",
        "apiKeyRequired": "Ce fournisseur de recherche nécessite une clé API.",
        "baseUrlRequired": "SearXNG nécessite une URL de base.",
        "missingCredential": "Ajoutez l'identifiant requis avant d'enregistrer.",
        "saveHint": "Les changements s’appliquent aux nouvelles requêtes de recherche web."
      }
    },
    "overview": {
      "model": "Modèle actuel",
      "providers": "Fournisseurs",
      "configuredCount": "{{count}} configurés",
      "totalProviders": "{{count}} disponibles",
      "webSearch": "Recherche web",
      "imageGeneration": "Génération d’images",
      "voiceInput": "Saisie vocale",
      "workspace": "Espace de travail"
    },
    "usage": {
      "title": "Activité des tokens",
      "shortTitle": "Utilisation des tokens",
      "subtitle": "Usage signalé par le fournisseur sur les 12 derniers mois.",
      "empty": "L’activité des tokens apparaîtra après les nouvelles réponses du modèle.",
      "totalTokens": "Tokens cumulés",
      "peakTokens": "Pic de tokens",
      "thirtyDayTokens": "Tokens sur 30 jours",
      "currentStreak": "Série actuelle",
      "longestStreak": "Plus longue série",
      "daysValue": "{{count}} j",
      "last30": "30 jours",
      "activeDays": "Jours actifs",
      "requests": "Requêtes",
      "estimated": "estimé",
      "includesEstimates": "inclut des estimations",
      "cellTitle": "{{date}} : {{tokens}} tokens, {{requests}} requêtes",
      "sources": {
        "user": "Chat",
        "api": "API",
        "cron": "Automatisations",
        "dream": "Mémoire",
        "system": "Système"
      }
    },
    "providers": {
      "title": "Fournisseurs de modèles",
      "searchPlaceholder": "Rechercher des fournisseurs",
      "noMatches": "Aucun fournisseur ne correspond.",
      "addOwnProvider": "Ajouter votre propre fournisseur de modèles",
      "customProvider": "Fournisseur personnalisé",
      "customProviderName": "Nom du fournisseur",
      "customProviderNamePlaceholder": "Mon fournisseur de modèles",
      "saveProvider": "Enregistrer le fournisseur",
      "advancedOptions": "Options avancées",
      "saveAdvancedBeforeSignIn": "Enregistrez les options avancées avant de vous connecter.",
      "apiType": "Type d’API",
      "proxy": "Proxy réseau",
      "thinkingStyle": "Style de raisonnement",
      "region": "Région",
      "profile": "Profil",
      "extraHeaders": "En-têtes supplémentaires",
      "extraBody": "Corps supplémentaire",
      "extraQuery": "Paramètres de requête supplémentaires",
      "capabilityFastMode": "Mode rapide",
      "capabilityFastModeHelp": "Utilise le niveau de service prioritaire d’OpenAI pour accélérer les réponses. Les crédits sont consommés plus rapidement.",
      "capabilityDeepSeekSearch": "Recherche web DeepSeek",
      "capabilityDeepSeekSearchHelp": "Permet à DeepSeek V4 Flash de rechercher sur le web via l’API Responses. L’activité de recherche apparaît dans le chat.",
      "capabilityXSearch": "Recherche sur X",
      "capabilityXSearchHelp": "Permet aux modèles Grok compatibles d’utiliser X Search hébergé par xAI. L’activité de recherche apparaît dans le chat.",
      "capabilityOpenAISearch": "Recherche web OpenAI",
      "capabilityOpenAISearchHelp": "Permet aux modèles compatibles avec l’API Responses de rechercher sur le web. L’activité de recherche apparaît dans le chat."
    },
    "image": {
      "selectProvider": "Choisir un fournisseur",
      "selectAspect": "Choisir un ratio",
      "selectSize": "Choisir une taille",
      "selectModel": "Choisir un modèle d’image",
      "searchOrTypeModel": "Rechercher ou saisir l’ID du modèle",
      "typeModelId": "Saisissez l’ID de modèle pris en charge par ce fournisseur.",
      "configureProvider": "Configurer le fournisseur",
      "missingCredential": "Configurez ce fournisseur avant d’activer la génération d’images."
    },
    "capabilities": {
      "providerSupport": "Prise en charge du fournisseur",
      "providerInstallOnSave": "La prise en charge requise sera installée automatiquement lors de l’enregistrement de ce fournisseur.",
      "searchSupport": "Prise en charge du fournisseur de recherche",
      "searchInstallOnSave": "La prise en charge d’Olostep sera installée automatiquement lors de l’enregistrement.",
      "installing": "Installation de la prise en charge..."
    },
    "models": {
      "selectModel": "Choisir un modèle",
      "addConfiguration": "Ajouter une configuration",
      "newConfiguration": "Nouvelle configuration de modèle",
      "newConfigurationHelp": "Enregistre un fournisseur et un modèle comme option en un clic.",
      "configurationName": "Nom de la configuration",
      "configurationNameHelp": "Renomme cette configuration de modèle enregistrée.",
      "configurationNamePlaceholder": "Rédaction rapide",
      "callOrder": "Ordre d’appel des modèles",
      "primary": "Principal",
      "fallbackNumber": "Secours {{number}}",
      "addToOrder": "Activer le préréglage",
      "newPreset": "Nouveau préréglage de modèle",
      "newPresetHelp": "Enregistrez un modèle réutilisable et ses paramètres de génération.",
      "presets": "Préréglages de modèle",
      "editPreset": "Modifier le préréglage",
      "presetName": "Nom du préréglage",
      "presetNameHelp": "Utilisé dans l’interface et avec /model. Les noms doivent être uniques.",
      "presetNameDuplicate": "Un préréglage portant ce nom existe déjà.",
      "presetNamePlaceholder": "Rédaction rapide",
      "advancedOptions": "Options avancées",
      "advancedSummary": "Contexte {{context}} · Max. {{max}} tokens",
      "maxTokens": "Tokens de sortie max.",
      "temperature": "Température",
      "reasoningEffort": "Effort de raisonnement",
      "convertTitle": "Convertir la configuration de modèles actuelle",
      "convertHelp": "Convertissez les modèles principal et de secours existants en préréglages afin de gérer leur ordre ici.",
      "converting": "Conversion...",
      "convertAction": "Convertir en préréglages",
      "dragToReorder": "Faire glisser pour réorganiser",
      "moveUp": "Monter",
      "moveDown": "Descendre",
      "removeFromOrder": "Désactiver le préréglage",
      "inCallOrder": "Dans l’ordre d’appel",
      "disabled": "Désactivé",
      "noPresets": "Aucun préréglage de modèle",
      "noPresetsHelp": "Créez un préréglage, puis ajoutez-le à l’ordre d’appel.",
      "removeBeforeDelete": "Retirez ce préréglage de l’ordre d’appel avant de le supprimer.",
      "providerSetupRequired": "Configuration du fournisseur requise",
      "configureProviderBeforeSaving": "Configurez ce fournisseur avant d’enregistrer le préréglage.",
      "deletePresetTitle": "Supprimer le préréglage de modèle ?",
      "deletePresetHelp": "Le préréglage « {{name}} » sera supprimé. Les identifiants du fournisseur ne seront pas modifiés.",
      "searchModels": "Rechercher ou saisir un ID de modèle",
      "useCustomModel": "Utiliser",
      "loadingModels": "Chargement des modèles...",
      "searchCatalog": "Rechercher dans le catalogue du fournisseur pour choisir un modèle.",
      "modelsAvailable": "disponibles",
      "noModelResults": "Aucun modèle correspondant.",
      "loadFailed": "Liste des modèles indisponible.",
      "unsupportedModelList": "Saisissez manuellement un ID de modèle.",
      "providerNotConfigured": "Configurez ce fournisseur avant de charger les modèles.",
      "autoProviderCustomOnly": "Le mode fournisseur automatique utilise des IDs de modèle personnalisés."
    },
    "timezone": {
      "select": "Choisir un fuseau horaire",
      "search": "Rechercher un fuseau horaire",
      "empty": "Aucun fuseau horaire correspondant."
    },
    "cliApps": {
      "allCategories": "Toutes les catégories",
      "availableCount": "{{count}} applications",
      "installedCount": "{{count}} installées",
      "summary": "{{installed}} CLIs installées sur {{total}}",
      "filterAll": "Tout",
      "filterInstalled": "CLIs installées",
      "filterNotInstalled": "Non installées",
      "searchPlaceholder": "Rechercher des CLIs",
      "statusInstalled": "Installée",
      "statusAvailable": "Disponible",
      "statusMissing": "Dépendance manquante",
      "statusUnsupported": "Non compatible",
      "statusNotInstalled": "Non installée",
      "unsupported": "Non compatible",
      "loading": "Chargement des applications CLI...",
      "empty": "Aucune application CLI ne correspond à ce filtre.",
      "readyTitle": "@{{name}} est prêt",
      "readyStatus": "Prêt",
      "readyPrompt": "Utilisez @{{name}} pour voir ce que ce CLI peut faire.",
      "readyTry": "Essayer @{{name}}",
      "readyCopied": "Copié",
      "openChat": "Ouvrir le chat",
      "requires": "Requiert",
      "test": "Tester le CLI",
      "update": "Mettre à jour le CLI",
      "uninstall": "Désinstaller le CLI",
      "install": "Installer le CLI",
      "unavailable": "Indisponible",
      "noDescription": "Aucune description disponible."
    },
    "about": {
      "version": "Version",
      "checking": "Recherche de mises à jour...",
      "checkForUpdates": "Rechercher les mises à jour",
      "upToDate": "Vous êtes à jour",
      "updateAvailable": "Mise à jour disponible v{{version}}"
    },
    "mcp": {
      "allCategories": "Toutes les catégories",
      "summary": "{{installed}} préréglages activés sur {{total}}",
      "filterAll": "Tout",
      "filterInstalled": "Activés",
      "filterNotInstalled": "Non activés",
      "searchPlaceholder": "Rechercher des préréglages MCP",
      "moreOptions": "Ajouter un serveur MCP",
      "moreOptionsSubtitle": "Connectez un serveur MCP personnalisé ou importez une configuration existante.",
      "customTitle": "MCP personnalisé",
      "customSubtitle": "Ajoutez n'importe quel serveur MCP stdio, HTTP ou SSE.",
      "customAction": "Personnalisé",
      "importAction": "Importer",
      "serverName": "Nom du serveur",
      "serverUrl": "URL",
      "transport": "Transport",
      "authentication": "Authentification",
      "authNone": "Aucune",
      "authHeaders": "En-têtes",
      "command": "Commande",
      "args": "Arguments JSON",
      "headers": "En-têtes JSON",
      "oauthAfterSave": "Enregistrez le serveur, puis sélectionnez Se connecter pour vous identifier.",
      "headersHelp": "Ajoutez les en-têtes de requête utilisés par ce serveur.",
      "env": "Environnement JSON",
      "timeout": "Délai d'outil",
      "advancedOptions": "Options avancées",
      "hideAdvanced": "Masquer les options avancées",
      "saveCustom": "Enregistrer MCP",
      "configImport": "Importer mcp.json",
      "importConfig": "Importer",
      "restartRequired": "Redémarrez nanobot pour connecter les outils MCP mis à jour.",
      "toolsFound": "{{count}} outils",
      "loading": "Chargement des préréglages MCP...",
      "empty": "Aucun préréglage MCP ne correspond à ce filtre.",
      "openDocs": "Ouvrir la doc",
      "test": "Tester",
      "remove": "Supprimer",
      "enable": "Activer",
      "enabled": "Activé",
      "setup": "Connecter",
      "configure": "Connecter",
      "reconnect": "Reconnecter",
      "connectTitle": "Connecter {{name}}",
      "reconnectTitle": "Reconnecter {{name}}",
      "actionsTitle": "Actions pour {{name}}",
      "connectHint": "Ajoutez la clé depuis les paramètres de votre compte.",
      "saveAndEnable": "Enregistrer et activer",
      "updateSetup": "Mettre à jour la configuration",
      "configured": "configuré",
      "keepExisting": "Laissez vide pour conserver la valeur actuelle",
      "statusConfigured": "Configuré",
      "statusMissingCredentials": "Clé requise",
      "connectingAccount": "Connexion à {{name}}",
      "connectingLabel": "Connexion…",
      "continueSignIn": "Continuer la connexion",
      "preparingSignIn": "Préparation d’une connexion sécurisée…",
      "openSignInToContinue": "Ouvrez la page de connexion pour continuer.",
      "finishSignInInBrowser": "Terminez la connexion dans la fenêtre du navigateur.",
      "manualCallbackRequired": "Terminez la connexion, puis collez l’URL de rappel dans nanobot.",
      "manualCallbackHelp": "Après avoir autorisé l’accès, la page localhost ne se chargera pas. Copiez son URL complète depuis la barre d’adresse et collez-la ici.",
      "finishingConnection": "Finalisation de la connexion…",
      "activatingTools": "Activation des outils…",
      "connected": "Connecté.",
      "connectionFailed": "Échec de la connexion.",
      "connectionCancelled": "Connexion annulée.",
      "reloadFailed": "Connexion réussie, mais nanobot n’a pas pu activer les outils. Essayez de redémarrer nanobot.",
      "oauthFailed": "Connexion impossible. Essayez de vous reconnecter.",
      "statusMissingDependency": "Dépendance requise",
      "statusComingSoon": "Bientôt disponible",
      "comingSoon": "Bientôt disponible",
      "statusNotInstalled": "Non activé",
      "manage": "Gérer",
      "manageTitle": "Gérer {{name}}",
      "fixConnection": "Réparer la connexion",
      "overviewTab": "Aperçu",
      "connectionTab": "Connexion",
      "manageTabs": "Gestion MCP",
      "about": "À propos",
      "statusLabel": "État",
      "transportLabel": "Transport",
      "endpointLabel": "URL",
      "toolPreview": "Outils",
      "noToolsAvailable": "Aucun outil disponible",
      "searchTools": "Rechercher des outils",
      "searchToolsPlaceholder": "Rechercher des outils",
      "selectedCount": "{{count}} activés",
      "noMatchingTools": "Aucun outil correspondant",
      "applyChanges": "Enregistrer",
      "connectionDetails": "Détails de connexion",
      "credentials": "Identifiants",
      "none": "Aucun",
      "dangerZone": "Supprimer la connexion",
      "toolScope": "Outils",
      "allTools": "Tout activer",
      "noTools": "Tout désactiver",
      "reloadTools": "Recharger les outils",
      "presetDescriptions": {
        "browserbase": "Automatisez des navigateurs cloud avec Browserbase.",
        "playwright": "Inspectez et automatisez les navigateurs locaux avec Playwright.",
        "context7": "Obtenez la documentation à jour et des exemples de code.",
        "firecrawl": "Explorez, recherchez et extrayez du contenu web.",
        "parallel-search": "Recherchez sur le web et lisez les pages pertinentes.",
        "exa": "Recherchez sur le web et extrayez du contenu propre.",
        "microsoft-learn": "Recherchez et consultez la documentation Microsoft Learn.",
        "aws-docs": "Recherchez la documentation et les guides de services AWS.",
        "brave-search": "Recherchez le web, les actualités, les images, les vidéos et les résultats locaux avec Brave Search.",
        "postman": "Consultez et gérez les API, collections et espaces de travail Postman.",
        "figma": "Lisez le contexte de conception Figma via le MCP Dev Mode local.",
        "xmind": "Créez, consultez et modifiez des cartes mentales Xmind dans le cloud.",
        "notion": "Consultez et mettez à jour votre espace de travail Notion.",
        "linear": "Recherchez et gérez les tickets, projets et commentaires Linear.",
        "github": "Gérez les dépôts, tickets et pull requests GitHub.",
        "supabase": "Consultez et gérez les projets Supabase."
      }
    },
    "api": {
      "title": "Serveur API", "openaiCompatible": "API compatible OpenAI", "description": "Connectez des SDK et agents via un endpoint /v1 local.",
      "start": "Démarrer le serveur API", "starting": "Démarrage...", "stop": "Arrêter", "stopping": "Arrêt...",
      "access": "Accès", "thisDevice": "Cet appareil", "localNetwork": "Réseau local",
      "localHelp": "Seul cet appareil peut se connecter.", "networkHelp": "D’autres appareils peuvent se connecter ; une clé API est requise.",
      "port": "Port", "portHelp": "L’API utilise ce port local.", "apiKey": "Clé API", "apiKeyHelp": "Les clients l’envoient comme jeton Bearer.",
      "apiKeyRequired": "Requise avant d’exposer l’API au réseau.", "apiKeyPlaceholder": "Saisissez une clé API",
      "autoInstall": "Le support API sera installé automatiquement au démarrage."
    },
    "observability": {
      "title": "Observabilité", "configured": "Les identifiants de traçage sont disponibles pour nanobot.",
      "environment": "Définissez LANGFUSE_SECRET_KEY et LANGFUSE_PUBLIC_KEY, puis redémarrez nanobot.", "enable": "Activer le traçage"
    },
    "legal": {
      "thirdPartyBrands": "Les noms, logos et marques de produits appartiennent à leurs propriétaires respectifs. Leur utilisation sert uniquement à l'identification et n'implique aucune approbation."
    },
    "apps": {
      "description": "Ajoutez des outils à nanobot, puis utilisez-les avec @ dans le chat.",
      "cliLabel": "Application",
      "mcpLabel": "MCP",
      "channelLabel": "Canal",
      "featureLabel": "Fonction",
      "filterAll": "Prêts",
      "filterPlugins": "Extensions",
      "filterCli": "Applications",
      "filterMcp": "MCP",
      "enabledSummary": "{{count}} prêts",
      "caption": "{{cli}} applications · {{mcp}} outils MCP",
      "searchPlaceholder": "Rechercher des applications",
      "featured": "Outils",
      "mcpTools": "Outils MCP",
      "loading": "Chargement des applications...",
      "empty": "Aucun outil ne correspond à votre recherche.",
      "emptyApps": "Aucune application disponible.",
      "emptyIntegrations": "Aucun outil MCP disponible.",
      "emptyReady": "Aucun outil n’est encore prêt.",
      "clearSearch": "Effacer la recherche",
      "browseApps": "Parcourir les applications",
      "browseIntegrations": "Parcourir les outils MCP",
      "emptyIntegrationsHint": "Ajoutez un serveur MCP personnalisé ci-dessous.",
      "restartRequired": "Redémarrez nanobot pour appliquer les applications et outils MCP mis à jour."
    },
    "channels": {
      "description": "Connectez nanobot aux applications de discussion. L'installation du support ajoute seulement le paquet d'intégration ; la plupart des canaux nécessitent encore des jetons ou des réglages d'espace de travail.",
      "caption": "{{enabled}} activés · {{total}} canaux",
      "searchPlaceholder": "Rechercher des canaux",
      "backToChannels": "Tous les canaux",
      "catalog": "Canaux",
      "loading": "Chargement des canaux...",
      "empty": "Aucun canal ne correspond à ce filtre.",
      "restartRequired": "Redémarrez nanobot pour appliquer le support de canal mis à jour.",
      "requires": "Requiert : {{requirements}}",
      "setUp": "Configurer",
      "setupGuide": "Guide de configuration",
      "setupSummary": "L'activation n'active que le support nanobot. Ajoutez les identifiants de la plateforme, puis redémarrez nanobot.",
      "configKeys": "Clés de configuration",
      "enable": "Activer le canal",
      "disable": "Désactiver le canal",
      "needsConfig": "Configuration requise",
      "connect": "Connecter",
      "reconnect": "Reconnecter",
      "advanced": "Avancé",
      "checkAndEnable": "Vérifier et activer",
      "checkConnection": "Vérifier la connexion",
      "connectionChecks": "Vérifications de connexion",
      "open": "Ouvrir",
      "checkedAndEnabled": "Vérifié et activé.",
      "checking": "Vérification...",
      "checkOnly": "Vérifier uniquement",
      "commandCopied": "Commande copiée.",
      "commandCopyFailed": "Impossible de copier la commande.",
      "configuredInstances": "{{count}} instances configurées",
      "connectPreview": "La connexion dans le navigateur est la prochaine étape. Pour l'instant, exécutez la commande ci-dessous.",
      "copyCommand": "Copier la commande",
      "filterAll": "Tous",
      "filterOff": "Désactivés",
      "filterOn": "Activés",
      "helperCopied": "{{name}} copié.",
      "helperCopyFailed": "Impossible de copier {{name}}.",
      "hideSecret": "Masquer le secret",
      "instanceConfigured": "Configurée",
      "instanceNeedsSetup": "Configuration requise",
      "runtimeFailed": "Échec du démarrage",
      "runtimeStarting": "Démarrage",
      "runtimeStopped": "À l'arrêt",
      "managedByWebui": "Géré par la WebUI",
      "officialGuide": "Guide officiel",
      "optional": "Facultatif",
      "providerPreset": "Fournisseur",
      "requiredSetup": "Configuration requise",
      "savedSecret": "Enregistré",
      "savedSecretPlaceholder": "Secret enregistré",
      "savedSettings": "Paramètres enregistrés.",
      "saveSettings": "Enregistrer les paramètres",
      "selectChannel": "Afficher les paramètres de {{name}}",
      "setupSteps": "Étapes suivantes",
      "showSecret": "Afficher le secret",
      "toggleChannel": "Canal {{name}}",
      "toggleInstance": "Instance {{name}}",
      "tryIt": "Essayer",
      "validationFailed": "Vérifiez la configuration requise avant l'activation.",
      "validation": {
        "connected": "Connecté",
        "configured": "Configuré manuellement",
        "needs_setup": "Configuration requise",
        "invalid": "Non valide",
        "unsupported": "Configuration manuelle"
      }
    },
    "nanobotFeatures": {
      "enabled": "Activé",
      "enable": "Activer",
      "disable": "Désactiver",
      "ready": "Prêt",
      "missingDependency": "Support manquant",
      "installSupport": "Installer le support",
      "installConfirmTitle": "Installer le support pour {{name}} ?",
      "installConfirmDescription": "nanobot ajoutera ce dont {{name}} a besoin, puis l'activera. Continuer ?",
      "installConfirmAction": "Installer et activer",
      "websocketRequired": "Requis pour la WebUI",
      "channelDisabled": "Canal désactivé",
      "notEnabled": "Non activé"
    },
    "automations": {
      "filters": {
        "all": "Toutes",
        "active": "Actives",
        "paused": "En pause",
        "failed": "À traiter",
        "system": "Système"
      },
      "sort": {
        "next": "Prochaine exécution",
        "last": "Dernière exécution",
        "updated": "Mise à jour",
        "name": "Nom"
      },
      "search": "Rechercher tâche, message, discussion liée ou planning",
      "queue": "File",
      "loading": "Chargement des automatisations...",
      "noMatches": "Aucune automatisation ne correspond à cette vue.",
      "empty": "Aucune automatisation pour le moment.",
      "emptyHint": "Créez les automatisations dans un chat afin de conserver le bon contexte.",
      "emptyAction": "Ouvrir un chat",
      "clearFilters": "Effacer les filtres",
      "oneShot": "Ponctuelle",
      "systemTask": "Automatisation gérée par le système",
      "localTrigger": "Déclencheur local",
      "labels": {
        "schedule": "Planning",
        "next": "Prochaine",
        "origin": "Discussion liée",
        "created": "Créée",
        "updated": "Modifiée"
      },
      "runNow": "Exécuter maintenant",
      "pause": "Mettre en pause",
      "resume": "Reprendre",
      "edit": "Modifier",
      "delete": "Supprimer",
      "protected": "Protégée",
      "editTitle": "Modifier l’automatisation",
      "save": "Enregistrer",
      "commandCopied": "Copié",
      "copyCommand": "Copier",
      "deleteTitle": "Supprimer l’automatisation",
      "deleteDescription": "Cela supprime {{name}} du stockage cron. Les anciens messages de chat restent dans la session.",
      "cancel": "Annuler",
      "status": {
        "system": "Système",
        "running": "En cours d’exécution",
        "paused": "En pause",
        "failed": "Échouée",
        "completed": "Terminée",
        "noSchedule": "Aucun planning",
        "active": "En cours"
      },
      "origin": {
        "system": "Système",
        "unknown": "Aucune discussion liée"
      },
      "channels": {
        "api": "API",
        "cli": "CLI",
        "dingtalk": "DingTalk",
        "discord": "Discord",
        "email": "Email",
        "feishu": "Feishu",
        "matrix": "Matrix",
        "msteams": "Microsoft Teams",
        "qq": "QQ",
        "slack": "Slack",
        "telegram": "Telegram",
        "wechat": "WeChat",
        "wecom": "WeCom",
        "weixin": "WeChat",
        "whatsapp": "WhatsApp"
      },
      "schedule": {
        "at": "À {{time}}",
        "every": "Toutes les {{duration}}",
        "cron": "Cron {{expr}}",
        "cronWithTz": "Cron {{expr}} · {{tz}}",
        "withTz": "{{summary}} · {{tz}}",
        "dailyAt": "Chaque jour à {{time}}",
        "weekdaysAt": "Jours ouvrés à {{time}}",
        "hourlyAt": "Toutes les heures à :{{minute}}",
        "hourlyWindow": "Toutes les heures {{start}}-{{end}} à :{{minute}}",
        "local": "Déclencheur local",
        "custom": "Planning personnalisé"
      },
      "next": {
        "paused": "En pause",
        "pending": "En cours d’exécution",
        "local": "En attente du déclencheur",
        "none": "Aucune prochaine exécution"
      },
      "message": {
        "showMore": "Afficher le message complet",
        "showLess": "Afficher moins"
      },
      "fields": {
        "name": "Nom",
        "message": "Message",
        "command": "Commande",
        "scheduleType": "Type de planning",
        "every": "Toutes les",
        "unit": "Unité",
        "cronExpression": "Expression cron",
        "timezone": "Fuseau horaire",
        "runAt": "Exécuter à"
      },
      "scheduleTypes": {
        "every": "Intervalle",
        "cron": "Cron",
        "at": "Une fois"
      },
      "everyUnits": {
        "second": "Secondes",
        "minute": "Minutes",
        "hour": "Heures",
        "day": "Jours"
      },
      "validation": {
        "nameRequired": "Le nom est obligatoire.",
        "messageRequired": "Le message est obligatoire.",
        "intervalRequired": "L’intervalle doit être un nombre positif.",
        "cronRequired": "L’expression cron est obligatoire.",
        "timeRequired": "L’heure d’exécution est obligatoire.",
        "futureRequired": "L’heure d’exécution doit être dans le futur."
      }
    },
    "oauth": {
      "authentication": "Authentification OAuth",
      "signIn": "Se connecter",
      "signingIn": "Connexion...",
      "signInAgain": "Se reconnecter",
      "signOut": "Se déconnecter",
      "signedInAs": "Connecté en tant que {{account}}",
      "signInHelp": "Connectez-vous depuis cet appareil ; aucune clé API n’est enregistrée dans la configuration.",
      "remoteSignInHelp": "Sélectionnez Se connecter pour ouvrir xAI sur votre ordinateur, puis collez le code d’autorisation affiché après la connexion.",
      "codexRemoteSignInHelp": "Connectez-vous dans ce navigateur, puis recollez dans nanobot l’URL complète de rappel localhost.",
      "signInRequired": "Connexion requise",
      "signInBeforeSaving": "Connectez-vous à ce fournisseur avant d’enregistrer le préréglage.",
      "signedIn": "Connecté",
      "notSignedIn": "Non connecté",
      "proxyLabel": "Proxy réseau",
      "proxySaveBeforeSignIn": "Enregistrez les modifications du proxy avant de vous connecter.",
      "saveProxy": "Enregistrer le proxy",
      "localCodeHelp": "Terminez la connexion dans votre navigateur. nanobot termine généralement automatiquement ; sinon, collez le code d’autorisation ci-dessous.",
      "remoteCodeHelp": "Sélectionnez Se connecter pour ouvrir xAI sur votre ordinateur. Après la connexion, collez ci-dessous le code d’autorisation affiché par xAI.",
      "localCallbackHelp": "Terminez la connexion dans votre navigateur. nanobot termine généralement automatiquement ; sinon, copiez l’URL complète de rappel localhost depuis la barre d’adresse et collez-la ci-dessous.",
      "remoteCallbackHelp": "Ouvrez ChatGPT dans ce navigateur et terminez la connexion. Lorsque la page localhost ne se charge pas, copiez l’URL complète de la barre d’adresse et collez-la ci-dessous.",
      "authorizationCode": "Code d’autorisation",
      "callbackUrl": "URL complète de rappel",
      "callbackUrlPlaceholder": "http://localhost:1455/auth/callback?code=…&state=…",
      "openChatGPT": "Ouvrir ChatGPT",
      "pasteCallbackToContinue": "Collez l’URL de rappel pour continuer.",
      "waitingForCallback": "En attente du rappel du navigateur…",
      "finishSignIn": "Terminer la connexion"
    },
    "skills": {
      "description": "Consultez les compétences d’instruction que cet agent peut charger pendant une conversation.",
      "caption": "{{available}} disponibles · {{total}} au total",
      "views": "Vues des compétences",
      "installedTab": "Installées",
      "discoverTab": "Découvrir",
      "customGroup": "Personnalisées",
      "builtinGroup": "Intégrées",
      "otherGroup": "Autres",
      "searchInstalled": "Rechercher les compétences installées",
      "filterAll": "Toutes",
      "filterEnabled": "Activées",
      "filterDisabled": "Désactivées",
      "noMatching": "Aucune compétence correspondante.",
      "statusDisabled": "Désactivée",
      "statusEnabled": "Activée",
      "statusNeedsSetup": "Configuration requise",
      "showLess": "Afficher moins",
      "showMore": "Afficher plus",
      "enabledControl": "Utiliser cette compétence",
      "enabledDescription": "Autorise l’agent à charger cette compétence lorsque ses prérequis sont satisfaits.",
      "enableSkill": "Activer {{name}}",
      "disableSkill": "Désactiver {{name}}",
      "updateFailed": "Impossible de mettre à jour cette compétence.",
      "deleteTitle": "Supprimer la compétence",
      "deleteDescription": "Supprime cette compétence de l’espace de travail actuel.",
      "deleteAction": "Supprimer",
      "deleteFailed": "Impossible de supprimer cette compétence.",
      "deleteConfirmTitle": "Supprimer {{name}} ?",
      "deleteConfirmDescription": "Cette action supprime les fichiers de la compétence de l’espace de travail actuel et ne peut pas être annulée.",
      "deleteConfirmAction": "Supprimer la compétence",
      "instructionsTitle": "Instructions de la compétence",
      "setupRequired": "Configuration requise",
      "setupDescription": "Installez la dépendance manquante sur la machine qui exécute nanobot, puis vérifiez à nouveau.",
      "copySetupCommand": "Copier la commande de configuration",
      "checkAgain": "Vérifier à nouveau",
      "marketplaceSearchFailed": "Impossible de rechercher dans les catalogues de compétences.",
      "marketplaceInstallFailed": "Impossible d’installer cette compétence.",
      "marketplaceSearchPlaceholder": "Rechercher des compétences",
      "marketplaceSearchLabel": "Rechercher des compétences",
      "marketplaceSearching": "Recherche en cours",
      "marketplaceProviderFilter": "Source des compétences",
      "marketplaceProviderAll": "Toutes",
      "marketplaceTrendingTitle": "Tendances par catalogue",
      "marketplaceTrendingDescription": "Chaque catalogue conserve son propre classement et ses propres statistiques d’installation.",
      "marketplaceViewAll": "Tout afficher",
      "marketplaceTrendingUnavailable": "Les compétences populaires sont temporairement indisponibles.",
      "marketplaceEmpty": "Aucune compétence trouvée pour « {{query}} ».",
      "marketplaceConfirmTitle": "Installer {{name}} ?",
      "marketplaceConfirmDescription": "Cette compétence tierce provient de {{provider}} ({{source}}) et peut contenir des instructions ou des scripts exécutables.",
      "marketplaceConfirmInstall": "Installer la compétence",
      "marketplaceOpen": "Ouvrir {{name}} sur {{provider}}",
      "marketplaceOpenProvider": "Ouvrir {{provider}}",
      "marketplaceInstalls24h": "{{formattedCount}} installations / 24 h",
      "marketplaceInstalls": "{{formattedCount}} installations",
      "marketplaceNpxRequired": "Node.js avec npx est requis",
      "marketplaceInstalling": "Installation",
      "marketplaceInstalled": "Installée",
      "marketplaceInstall": "Installer",
      "marketplaceNoTrend": "Pas encore de tendance",
      "marketplaceTrendLabel": "Tendance des installations sur 8 semaines",
      "featured": "Compétences de l’agent",
      "empty": "Aucune compétence disponible.",
      "sourceWorkspace": "Personnalisée",
      "sourceBuiltin": "Intégrée",
      "statusAvailable": "Disponible",
      "statusUnavailable": "Indisponible",
      "unavailableReason": "Manquant : {{reason}}",
      "openDetails": "Ouvrir les détails de {{name}}",
      "loadingDetail": "Chargement des détails...",
      "loadFailed": "Impossible de charger les détails.",
      "descriptionTitle": "Description",
      "source": "Source",
      "status": "Statut",
      "requirements": "Prérequis",
      "noRequirements": "Aucun prérequis explicite.",
      "commands": "Commandes",
      "environment": "Variables d’environnement",
      "missingCommands": "CLI manquant",
      "missingEnvironment": "ENV manquant",
      "unavailableReasonLabel": "Raison d’indisponibilité",
      "rawInstructions": "SKILL.md brut",
      "rawInstructionsEmpty": "Aucune instruction brute.",
      "detailDescription": "Détails de {{name}}."
    },
    "voice": {
      "selectProvider": "Choisir un fournisseur",
      "configureProvider": "Configurer le fournisseur",
      "languageAuto": "Automatique"
    }
  },
  "chat": {
    "fallbackTitle": "Sujet {{id}}",
    "forkTitle": "Branche : {{title}}",
    "loading": "Chargement…",
    "noSessions": "Aucune session pour le moment.",
    "showMore": "Afficher {{count}} de plus",
    "collapsed": "{{count}} sujets masqués",
    "showLess": "Afficher moins",
    "actions": "Actions du sujet {{title}}",
    "newInProject": "Démarrer un nouveau sujet dans {{project}}",
    "activity": {
      "running": "Agent en cours",
      "complete": "Agent terminé",
      "updated": "Nouvelle activité"
    },
    "pin": "Épingler",
    "unpin": "Désépingler",
    "rename": "Renommer",
    "renameTitle": "Renommer le sujet",
    "renameDescription": "Choisissez un nom local dans la barre latérale pour ce sujet.",
    "renamePlaceholder": "Nom du sujet",
    "renameProjectTitle": "Renommer le projet",
    "renameProjectDescription": "Choisissez un nom local dans la barre latérale pour ce projet.",
    "renameProjectPlaceholder": "Nom du projet",
    "renameSave": "Enregistrer",
    "archive": "Archiver",
    "unarchive": "Désarchiver",
    "showArchived": "Afficher les archives",
    "hideArchived": "Masquer les archives",
    "select": "Sélectionner",
    "cancelSelection": "Annuler la sélection",
    "selectedCount": "{{count}} sélectionnés",
    "deleteSelected": "Supprimer",
    "delete": "Supprimer",
    "newChat": "Nouveau sujet",
    "groups": {
      "pinned": "Épinglés",
      "all": "Sujets",
      "projects": "Projets",
      "today": "Aujourd’hui",
      "yesterday": "Hier",
      "earlier": "Plus anciens",
      "archived": "Archivés"
    }
  },
  "deleteConfirm": {
    "title": "Supprimer cette discussion ?",
    "titleMany": "Supprimer {{count}} conversations ?",
    "description": "Cette action est irréversible.",
    "descriptionMany": "Cette action est irréversible.",
    "cancel": "Annuler",
    "confirm": "Supprimer",
    "automationsDescription": "Cette discussion contient des automatisations planifiées. La supprimer les supprimera aussi.",
    "automationsDescriptionMany": "Les automatisations liées seront également supprimées.",
    "moreAutomations": "+ {{count}} autres",
    "confirmWithAutomations": "Supprimer",
    "schedule": {
      "at": "{{time}}",
      "every": "Tous les {{duration}}",
      "cron": "Cron {{expr}}",
      "cronWithTz": "Cron {{expr}} · {{tz}}",
      "local": "Déclencheur local",
      "unknown": "Planification personnalisée"
    },
    "next": {
      "label": "Prochaine exécution : {{time}}",
      "disabled": "En pause",
      "local": "En attente du déclencheur",
      "none": "Aucune prochaine exécution"
    }
  },
  "connection": {
    "idle": "Inactif",
    "connecting": "Connexion…",
    "open": "Connecté",
    "reconnecting": "Reconnexion…",
    "closed": "Déconnecté",
    "error": "Erreur de connexion"
  },
  "thread": {
    "loadingConversation": "Chargement de la conversation…",
    "empty": {
      "greetings": {
        "workOn": "Sur quoi travaillons-nous ensemble ?",
        "start": "Par où commence-t-on ?",
        "build": "Que construisons-nous aujourd'hui ?",
        "tackle": "Que résout-on ensemble ?"
      },
      "quickActions": {
        "plan": {
          "title": "Créer un plan de projet",
          "prompt": "Créez un plan de projet concis pour ce que je devrais construire ensuite."
        },
        "analyze": {
          "title": "Analyser ces données",
          "prompt": "Aidez-moi à analyser ces données et à faire ressortir les tendances les plus importantes."
        },
        "brainstorm": {
          "title": "Trouver des idées",
          "prompt": "Proposez quelques idées pratiques et leurs compromis pour ce problème."
        },
        "code": {
          "title": "Écrire du code",
          "prompt": "Aidez-moi à écrire le code pour cette tâche, en commençant par le plus petit changement utile."
        },
        "summarize": {
          "title": "Résumer ce document",
          "prompt": "Résumez ce document et listez les points clés à retenir."
        },
        "more": {
          "title": "Plus",
          "prompt": "Montrez-moi quelques façons utiles dont vous pouvez m’aider dans cet espace de travail."
        }
      },
      "imageQuickActions": {
        "icon": {
          "title": "Créer une icône d’app",
          "prompt": "Générez une icône d’application 1:1 propre pour nanobot : robot sympathique, style vectoriel simple, palette douce bleu et blanc, sans texte."
        },
        "sticker": {
          "title": "Créer un sticker",
          "prompt": "Générez une image façon autocollant d’un petit assistant robot, avec un fond d’apparence transparente, expressive et ludique."
        },
        "poster": {
          "title": "Créer une affiche",
          "prompt": "Générez un concept d’affiche soigné pour un assistant IA personnel, composition moderne, hiérarchie visuelle forte, adapté à une page de destination."
        },
        "product": {
          "title": "Maquette produit",
          "prompt": "Générez une maquette produit propre pour une application web d’IA conversationnelle, interface minimale, éclairage premium, cadre d’appareil réaliste."
        },
        "portrait": {
          "title": "Portrait stylisé",
          "prompt": "Générez un portrait stylisé d’un compagnon IA sympathique, lumière douce, détaillé mais accessible, style illustration moderne."
        },
        "edit": {
          "title": "Modifier une image",
          "prompt": "Aidez-moi à modifier une image. Demandez-moi d’abord de téléverser ou d’indiquer l’image, puis générez le résultat modifié."
        }
      }
    },
    "header": {
      "toggleSidebar": "Afficher ou masquer la barre latérale",
      "newChat": "Démarrer un nouveau sujet",
      "toggleTheme": "Changer le thème depuis l’en-tête",
      "settings": "Ouvrir les paramètres",
      "sessionInfo": "Détails de la session"
    },
    "sessionInfo": {
      "title": "Session",
      "untitled": "Sujet sans titre",
      "automations": "Automatisations",
      "count": "{{count}}",
      "loading": "Chargement des automatisations...",
      "loadFailed": "Impossible de charger les automatisations.",
      "empty": "Aucune automatisation dans cette session pour le moment.",
      "disabled": "Désactivé",
      "schedule": {
        "at": "À {{time}}",
        "every": "Toutes les {{duration}}",
        "cron": "Cron {{expr}}",
        "cronWithTz": "Cron {{expr}} · {{tz}}",
        "local": "Déclencheur local",
        "unknown": "Planification personnalisée"
      },
      "next": {
        "label": "Prochaine {{time}}",
        "pending": "Exécution imminente",
        "disabled": "En pause",
        "local": "En attente du déclencheur",
        "none": "Aucune prochaine exécution"
      }
    },
    "composer": {
      "placeholderThread": "Saisissez votre message…",
      "placeholderHero": "Qu’avez-vous en tête ?",
      "placeholderOpening": "Ouverture d’un nouveau sujet…",
      "placeholderStreaming": "Le modèle est en train de répondre…",
      "inputAria": "Champ de message",
      "sendHint": "Entrée pour envoyer · Maj+Entrée pour un retour à la ligne",
      "runRuntimeTitle": "Exécution · {{elapsed}}",
      "goalStateStrip": "Objectif · {{label}}",
      "goalStateFallback": "Objectif",
      "goalStateExpandAria": "Afficher l’objectif complet",
      "goalStateSheetTitle": "Objectif",
      "goalStateCloseAria": "Fermer l’objectif",
      "send": "Envoyer le message",
      "stop": "Arrêter la réponse",
      "quotedContext": "Contexte cité",
      "removeQuotedContext": "Supprimer le contexte cité",
      "modelNotConfigured": "Modèle non configuré",
      "configureModel": "Configurer le modèle",
      "queued": {
        "label": "Guidage en attente",
        "guide": "Guider",
        "delete": "Supprimer le guidage",
        "edit": "Modifier le guidage",
        "drag": "Faire glisser pour réordonner"
      },
      "attachImage": "Joindre des fichiers",
      "imageMode": {
        "label": "Génération d’image",
        "toggle": "Activer ou désactiver le mode génération d’image",
        "placeholder": "Décrire ou modifier une image…",
        "aspectAria": "Format de l’image",
        "aspectLabel": "Format de l’image",
        "aspect": {
          "auto": "Automatique",
          "1_1": "Carré 1:1",
          "3_4": "Portrait 3:4",
          "9_16": "Story 9:16",
          "4_3": "Paysage 4:3",
          "16_9": "Large 16:9"
        }
      },
      "tools": {
        "search": "Rechercher",
        "reason": "Raisonner",
        "deepResearch": "Recherche approfondie",
        "voice": "Entrée vocale"
      },
      "voice": {
        "hint": "Cliquez pour dicter ou maintenez",
        "stop": "Arrêter l'enregistrement",
        "transcribing": "Transcription...",
        "recordingStatus": "Enregistrement {{time}}"
      },
      "voiceErrors": {
        "insecureContext": "Pour des raisons de sécurité, Chrome et d’autres navigateurs bloquent l’accès au microphone sur les pages HTTP distantes. Ouvrez cette WebUI en HTTPS pour utiliser la saisie vocale.",
        "unsupported": "La saisie vocale n'est pas prise en charge par ce navigateur.",
        "permission": "Autorisez le microphone dans la barre d'adresse, puis réessayez.",
        "notConfigured": "Configurez d'abord un fournisseur de transcription.",
        "tooLong": "L'enregistrement est trop long.",
        "tooShort": "Maintenez un peu plus longtemps pour enregistrer la voix.",
        "noInput": "Aucune entrée microphone détectée.",
        "noDevice": "Aucun microphone trouvé. Connectez-en un, puis réessayez.",
        "failed": "Impossible de transcrire l'audio."
      },
      "slash": {
        "ariaLabel": "Commandes slash",
        "label": "commandes",
        "navigateHint": "↑↓ Naviguer",
        "selectHint": "Entrée/Tab Insérer",
        "closeHint": "Échap Fermer",
        "commands": {
          "new": {
            "title": "Nouvelle discussion",
            "description": "Réinitialiser cette discussion et démarrer une nouvelle conversation."
          },
          "stop": {
            "title": "Arrêter la tâche en cours",
            "description": "Annuler le tour actif de l’agent pour cette discussion."
          },
          "restart": {
            "title": "Redémarrer nanobot",
            "description": "Redémarrer le processus du bot sur place."
          },
          "status": {
            "title": "Afficher l’état",
            "description": "Afficher l’état du temps d’exécution, du fournisseur et des canaux."
          },
          "model": {
            "title": "Modèle",
            "description": "Afficher ou changer le préréglage de modèle actif."
          },
          "history": {
            "title": "Afficher l’historique",
            "description": "Afficher les N derniers messages persistés de la conversation."
          },
          "dream": {
            "title": "Lancer Dream",
            "description": "Déclencher manuellement la consolidation de la mémoire."
          },
          "dream_log": {
            "title": "Afficher le journal Dream",
            "description": "Afficher ce que la dernière consolidation Dream a changé."
          },
          "dream_restore": {
            "title": "Restaurer la mémoire",
            "description": "Revenir à un instantané Dream précédent."
          },
          "dream_prompt": {
            "title": "Mémoire Dream",
            "description": "Indiquez à Dream comment organiser la mémoire de cet espace de travail."
          },
          "goal": {
            "title": "Objectif long terme",
            "description": "Demandez à l’agent de traiter ceci comme un objectif multi‑étapes durable."
          },
          "trigger": {
            "title": "Créer un déclencheur local",
            "description": "Crée un déclencheur CLI lié à cette session de chat."
          },
          "help": {
            "title": "Afficher l’aide",
            "description": "Lister les commandes slash disponibles."
          },
          "pairing": {
            "title": "Appairage",
            "description": "Gérer les demandes d’appairage."
          }
        },
        "badges": {
          "current": "Actuel",
          "recent": "Récent"
        },
        "details": {
          "goalActive": "L’objectif est en cours",
          "goalReady": "Démarrer un objectif durable",
          "history": "Afficher les messages récents",
          "stopRunning": "En cours"
        }
      },
      "encoding": "Traitement…",
      "remove": "Retirer la pièce jointe",
    "normalizedSizeHint": "{{orig}} → {{current}} (automatique)",
      "textTooLarge": "Le texte du message est trop volumineux (maximum {{max}})",
      "imageRejected": {
        "unsupported_type": "Type de fichier non pris en charge",
        "empty_file": "Impossible de joindre des fichiers vides",
        "too_many_attachments": "Maximum {{max}} pièces jointes par message",
        "too_many_images": "Maximum {{max}} images par message",
        "magic_mismatch": "Ce fichier n'est pas une image",
        "decode_failed": "Impossible de décoder cette image",
        "too_large": "Fichier trop volumineux — essayez-en un plus petit",
        "total_too_large": "Les pièces jointes sont trop volumineuses ensemble — supprimez-en ou utilisez des fichiers plus petits",
        "transport_too_large": "Cette pièce jointe dépasserait la limite de transport de la passerelle",
        "io": "Impossible de lire ce fichier"
      },
      "mentions": {
        "ariaLabel": "Applications",
        "label": "Applications",
        "cliGroup": "Applications CLI",
        "mcpGroup": "Services MCP",
        "sessionGroup": "Conversations Nanobot",
        "cliBadge": "CLI",
        "mcpBadge": "MCP",
        "cliDescription": "Utiliser @{{name}} comme application CLI locale",
        "mcpDescription": "Utiliser @{{name}} comme serveur MCP",
        "cliTitle": "Application CLI : {{name}}",
        "mcpTitle": "Serveur MCP : {{name}}",
        "sessionBadge": "Conversation Nanobot",
        "sessionDescription": "Référencer @{{name}} comme discussion précédente"
      },
      "workspace": {
        "accessAria": "Mode d’accès à l’espace de travail",
        "projectAria": "Choisir un projet",
        "projectPlaceholder": "Sélectionner un projet",
        "default": "Autorisation par défaut",
        "defaultShort": "Par défaut",
        "full": "Accès complet",
        "fullShort": "Complet"
      }
    },
    "scrollToBottom": "Faire défiler vers le bas",
    "loadEarlier": "Charger les messages précédents",
    "forkedFromHistory": "Bifurqué depuis l'historique",
    "promptNavigator": {
      "open": "Ouvrir le navigateur d’instructions",
      "title": "Instructions",
      "search": "Rechercher des instructions",
      "noResults": "Aucune instruction correspondante.",
      "jumpTo": "Aller à l’instruction : {{label}}",
      "railAria": "Navigation dans les instructions utilisateur"
    }
  },
  "message": {
    "streaming": "en cours de génération",
    "delivery": {
      "sending": "Envoi…",
      "failed": "Non envoyé"
    },
    "assistantTyping": "L’assistant est en train d’écrire",
    "toolSingle": "Utilisation d’un outil",
    "toolMany": "{{count}} outils utilisés",
    "toolSummary": "{{count}} outil",
    "toolSummaryMany": "{{count}} outils",
    "reasoningTools": "Raisonnement · {{count}} outils",
    "reasoningToolsSingular": "Raisonnement · 1 outil",
    "reasoning": "Raisonnement",
    "reasoningStreaming": "En réflexion…",
    "reasoningSummary": "Raisonnement",
    "agentActivitySummary": "{{reasoning}} étapes · {{tools}} appels d’outils",
    "agentActivityToolsOnly": "{{tools}} appels d’outils",
    "agentActivityLiveSummary": "En cours… · {{reasoning}} étapes · {{tools}} appels d’outils",
    "agentActivityLiveToolsOnly": "En cours… · {{tools}} appels d’outils",
    "imageAttachment": "Pièce jointe image",
    "videoAttachment": "Pièce jointe vidéo",
    "fileAttachment": "Pièce jointe",
    "attachmentUnavailable": "Pièce jointe indisponible",
    "dataTable": "Tableau de données",
    "fileEditPreparing": "Préparation de la modification du fichier…",
    "openLink": "Ouvrir le lien : {{label}}",
    "openAttachment": "Ouvrir {{name}}",
    "skill": "Compétence : {{name}}",
    "askAboutSelection": "Poser une question à ce sujet",
    "forkFromHere": "Bifurquer",
    "copyReply": "Copier",
    "copiedReply": "Copié",
    "turnLatencyTitle": "Temps de réponse (de bout en bout)",
    "fileEditViewDiff": "Voir les différences",
    "fileEditViewLargeDiff": "Voir les grandes différences",
    "fileEditDiffLineCount": "{{count}} lignes",
    "fileEditUnchangedLinesHidden": "{{count}} lignes inchangées masquées",
    "fileEditShowMoreLines": "Afficher {{count}} lignes de plus",
    "fileEditShowFewerLines": "Afficher moins de lignes",
    "fileEditOpenFile": "Ouvrir le fichier",
    "fileEditDiffTruncated": "Différences tronquées. Ouvrez le fichier pour voir la modification complète.",
    "activityThinkingFor": "Réflexion pendant {{duration}}",
    "activityThought": "Réflexion terminée",
    "activityThoughtFor": "Réflexion terminée en {{duration}}",
    "activityWorkingFor": "Travail en cours depuis {{duration}}",
    "activityWorked": "Travail terminé",
    "activityWorkedFor": "Travail terminé en {{duration}}",
    "cliActivityRunningOne": "Utilisation de {{name}}",
    "cliActivityRanOne": "{{name}} utilisé",
    "cliActivityFailedOne": "Échec de {{name}}",
    "cliActivityRunningMany": "Utilisation de {{count}} applications CLI",
    "cliActivityRanMany": "{{count}} applications CLI utilisées",
    "cliActivityFailedMany": "Échec de {{count}} applications CLI",
    "cliRunRunning": "Utilisation",
    "cliRunRan": "Utilisé",
    "cliRunFailed": "Échec",
    "automationSourceFallback": "Automatisation",
    "automationTriggered": "Déclenché automatiquement"
  },
  "lightbox": {
    "title": "Aperçu de l’image",
    "open": "Voir l’image",
    "prev": "Image précédente",
    "next": "Image suivante",
    "close": "Fermer l’aperçu"
  },
  "filePreview": {
    "aria": "Aperçu du fichier",
    "breadcrumb": "Chemin du fichier",
    "close": "Fermer l’aperçu du fichier",
    "loading": "Chargement de l’aperçu...",
    "failed": "Impossible de prévisualiser ce fichier.",
    "routeMissing": "L’aperçu du fichier nécessite le dernier gateway. Redémarrez nanobot gateway puis réessayez.",
    "resize": "Redimensionner l’aperçu du fichier",
    "truncated": "L’aperçu est tronqué car le fichier est volumineux."
  },
  "code": {
    "fallbackLanguage": "code",
    "copyAria": "Copier le code",
    "copy": "Copier",
    "copied": "Copié"
  },
  "workbench": {
    "aria": "Espace de conversations",
    "panes": "Volets",
    "tabAria": "Groupe : {{title}}",
    "panesInTab": "Volets dans {{title}}",
    "collapseTabGroup": "Réduire les volets de {{title}}",
    "expandTabGroup": "Développer les volets de {{title}}",
    "dropPane": "Déplacer {{pane}} dans {{tab}}",
    "createGroup": "Créer un groupe",
    "moveTo": "Déplacer vers",
    "renameGroupTitle": "Renommer le groupe",
    "renameGroupDescription": "Donnez un nom à ce groupe.",
    "renameGroupPlaceholder": "Nom du groupe",
    "dissolveTab": "Dissoudre le groupe",
    "layout": "Disposition des volets",
    "addPane": "Ajouter un volet",
    "paneLimit": "{{count}} volets maximum",
    "deleteConversations": "Tout supprimer",
    "movePane": "Déplacer le volet {{title}}",
    "movePaneHint": "Faites glisser pour déplacer · Les flèches fonctionnent aussi",
    "resizePaneBoundary": "Redimensionner la séparation {{index}}",
    "promotePane": "Définir {{title}} comme volet principal",
    "paneActions": "Actions du volet {{title}}",
    "detachPane": "Retirer",
    "composerAria": "Message à {{title}}",
    "layouts": {
      "columns": "Colonnes",
      "rows": "Lignes",
      "grid": "Grille",
      "bsp": "BSP",
      "main-stack": "Principal et pile"
    }
  },
  "common": {
    "dismiss": "Fermer",
    "close": "Fermer",
    "current": "Actuel",
    "cancel": "Annuler"
  },
  "errors": {
    "messageTooBig": {
      "title": "Message trop volumineux",
      "body": "Le serveur a rejeté votre dernier message car il dépasse la taille autorisée. Retirez des images ou choisissez des fichiers plus légers, puis renvoyez-le."
    },
    "workspaceScopeRejected": {
      "title": "L’espace de travail n’a pas changé",
      "body": "La passerelle a refusé ce projet ou ce mode d’accès. Choisissez un projet existant ou un autre mode d’accès, puis réessayez."
    },
    "turnRejected": {
      "title": "Le message n’a pas été envoyé",
      "body": "La passerelle a refusé ce message. Vérifiez le texte ou les pièces jointes, puis réessayez."
    }
  },
  "workspace": {
    "dialog": {
      "defaultProject": "Espace de travail par défaut",
      "manual": "Coller un chemin",
      "manualPlaceholder": "/Users/name/project",
      "usePath": "Utiliser le chemin",
      "absolutePathRequired": "Saisissez un chemin absolu de dossier sur cette machine."
    }
  }
}
