{ "Language": { "followSystem": "Suivre le système", "english": "Anglais", "simplifiedChinese": "Chinois simplifié", "traditionalChinese": "Chinois traditionnel", "japanese": "Japonais", "korean": "Coréen", "spanish": "Espagnol", "german": "Allemand", "french": "Français", "portuguese": "Portugais", "arabic": "Arabe" }, "WelcomePage": { "title": "Bienvenue sur Codeg", "openSettings": "Ouvrir les paramètres", "searchPlaceholder": "Rechercher des dossiers...", "loading": "Chargement...", "emptyFolders": "Aucun dossier pour le moment", "removeFromHistory": "Retirer de l’historique", "openFolder": "Ouvrir un dossier", "cloneRepository": "Cloner un dépôt", "projectBoot": "Lanceur de projet", "softwareVersion": "Version {version}", "toasts": { "loadFolderHistoryFailed": "Échec du chargement de l’historique des dossiers", "openFolderFailed": "Échec de l’ouverture du dossier", "removeFromHistoryFailed": "Échec de la suppression du dossier", "openSettingsFailed": "Échec de l’ouverture des paramètres", "cloneFailed": "Échec du clonage du dépôt", "openProjectBootFailed": "Impossible d'ouvrir le lanceur de projet" }, "errors": { "unknown": "Erreur inattendue", "invalidInput": "Entrée invalide.", "notFound": "Ressource introuvable.", "alreadyExists": "La ressource existe déjà.", "dependencyMissing": "Une dépendance requise est manquante.", "databaseError": "Échec de l’opération de base de données.", "ioError": "Échec de l’opération de fichier.", "externalCommandFailed": "La commande externe a échoué.", "windowOperationFailed": "Échec de l’opération de fenêtre.", "gitNotInstalled": "Git n’est pas installé. Veuillez installer Git d’abord.", "targetDirectoryNotEmpty": "Le répertoire cible existe déjà et n’est pas vide.", "repositoryNotFound": "Dépôt introuvable. Vérifiez l’URL et les autorisations d’accès.", "networkUnavailable": "Le réseau est indisponible. Vérifiez votre connexion et réessayez.", "authenticationFailed": "Échec de l’authentification. Vérifiez les identifiants ou la clé SSH.", "permissionDenied": "Permission refusée. Vérifiez les autorisations du répertoire." }, "cloneDialog": { "title": "Cloner un dépôt", "repositoryUrl": "URL du dépôt", "repositoryUrlPlaceholder": "https://github.com/user/repo.git", "directory": "Répertoire", "directoryPlaceholder": "Sélectionnez le répertoire cible...", "browseDirectory": "Parcourir le répertoire", "cancel": "Annuler", "clone": "Cloner", "clonePath": "Chemin de clonage : {path}" } }, "GitCredentialDialog": { "title": "Authentification requise", "description": "Le serveur distant nécessite des identifiants. Entrez votre nom d'utilisateur et votre mot de passe (ou jeton d'accès personnel).", "username": "Nom d'utilisateur", "usernamePlaceholder": "Nom d'utilisateur ou e-mail", "password": "Mot de passe / Jeton", "passwordPlaceholder": "Mot de passe ou jeton d'accès personnel", "passwordHint": "Entrez le nom d'utilisateur et le mot de passe du serveur.", "cancel": "Annuler", "authenticate": "Authentifier", "authenticating": "Authentification...", "invalidCredentials": "Identifiants invalides. Veuillez réessayer.", "saveCredentials": "Enregistrer les identifiants pour les opérations futures", "githubTitle": "Authentification GitHub", "githubDescription": "Entrez un jeton d'accès personnel pour vous connecter à GitHub. Le jeton sera validé et enregistré automatiquement.", "githubToken": "Jeton d'accès personnel", "githubTokenPlaceholder": "ghp_xxxxxxxxxxxx", "githubTokenHint": "Générez un jeton dans GitHub → Settings → Developer settings → Personal access tokens.", "githubAuthenticate": "Valider et connecter", "generateToken": "Générer un jeton" }, "SettingsShell": { "title": "Paramètres", "preferences": "Préférences", "nav": { "appearance": "Apparence", "agents": "Agents IA", "mcp": "MCP", "skills": "Skills", "shortcuts": "Raccourcis", "version_control": "Contrôle de version", "system": "Système", "chat_channels": "Canaux de chat", "web_service": "Service Web" } }, "AppearanceSettings": { "sectionTitle": "Apparence du thème", "sectionDescription": "Choisissez clair, sombre ou suivre le système. Les paramètres sont enregistrés automatiquement.", "themeMode": "Mode du thème", "placeholder": "Sélectionner le mode du thème", "system": "Suivre le système", "light": "Clair", "dark": "Sombre", "currentTheme": "Thème effectif actuel : {theme}", "resolvedTheme": { "light": "Clair", "dark": "Sombre", "unknown": "--" } }, "SystemSettings": { "loading": "Chargement...", "sectionTitle": "Gestion du système", "sectionDescription": "Gérez le proxy réseau, les mises à jour de l’app et les préférences de langue.", "proxyTitle": "Proxy réseau", "proxyDescription": "Lorsqu’il est activé, les requêtes réseau suivantes utilisent ce proxy en priorité (y compris le chat ACP, l’installation d’agents et les opérations Git distantes).", "loadFailed": "Échec du chargement : {message}", "enableProxy": "Activer le proxy système", "proxyAddress": "Adresse du proxy", "proxyHint": "Prend en charge http(s)/socks5, exemple : {example}. Actif uniquement lorsque le proxy système est activé.", "save": "Enregistrer", "saving": "Enregistrement...", "proxyRequired": "L’URL du proxy est requise lorsque le proxy est activé", "saveSuccess": "Les paramètres du proxy système ont été enregistrés", "saveFailed": "Échec de l’enregistrement : {message}", "languageTitle": "Langue", "languageDescription": "Définissez la langue de l’app. En mode système, les langues non prises en charge reviennent à l’anglais.", "appLanguage": "Langue de l’app", "languageSaveSuccess": "Les paramètres de langue ont été enregistrés", "languageSaveFailed": "Échec de l’enregistrement des paramètres de langue : {message}", "updateTitle": "Mise à jour de l’app", "versionTitle": "Mise à jour logicielle", "updateDescription": "Vérifiez les nouvelles versions depuis la source de publication configurée et installez-les directement si disponibles.", "currentVersion": "Version actuelle", "upgradableVersion": "Dernière version", "none": "Aucune", "lastChecked": "Dernière vérification : {time}", "updateError": "Erreur de mise à jour : {message}", "checking": "Vérification...", "checkUpdate": "Rechercher les mises à jour", "updating": "Installation...", "upgradeTo": "Mettre à jour vers v{version}", "foundUpdate": "Nouvelle version v{version} trouvée", "alreadyLatest": "Vous utilisez déjà la dernière version", "checkUpdateFailed": "Échec de la recherche de mises à jour : {message}", "installSuccess": "Mise à jour installée. Redémarrage de l’app.", "installFailed": "Échec de la mise à jour : {message}", "updateErrors": { "sourceUnavailable": "Impossible d’atteindre la source de mise à jour. Vérifiez votre réseau ou proxy et réessayez.", "network": "La connexion réseau a échoué. Vérifiez votre réseau ou proxy et réessayez.", "downloadFailed": "Impossible de télécharger le paquet de mise à jour. Veuillez réessayer plus tard.", "installFailed": "Impossible d’installer la mise à jour. Fermez l’app puis réessayez.", "unknown": "La mise à jour a échoué. Veuillez réessayer plus tard." } }, "VersionControlSettings": { "loading": "Chargement...", "sectionTitle": "Contrôle de version", "sectionDescription": "Configurez l'exécutable Git et gérez les comptes GitHub.", "gitTitle": "Configuration Git", "gitDescription": "Configurez l'exécutable Git utilisé par l'application.", "gitDetected": "Git détecté", "gitNotFound": "Git introuvable sur le système", "gitVersion": "Version", "gitPath": "Chemin", "customGitPath": "Chemin Git personnalisé", "customGitPathPlaceholder": "/usr/bin/git", "customGitPathHint": "Laissez vide pour utiliser le chemin détecté automatiquement.", "test": "Tester", "testing": "Test en cours...", "testSuccess": "L'exécutable Git est valide.", "testFailed": "Test Git échoué : {message}", "save": "Enregistrer", "saving": "Enregistrement...", "saveSuccess": "Paramètres Git enregistrés.", "saveFailed": "Échec de l'enregistrement : {message}", "githubTitle": "Comptes GitHub", "githubDescription": "Gérez les comptes GitHub pour l'authentification. Les jetons sont stockés localement.", "noAccounts": "Aucun compte GitHub configuré.", "addAccount": "Ajouter un compte", "serverUrl": "URL du serveur", "serverUrlPlaceholder": "https://github.com", "token": "Jeton d'accès personnel", "tokenPlaceholder": "ghp_xxxxxxxxxxxx", "generateToken": "Générer un jeton", "tokenHint": "Générez un jeton dans GitHub → Settings → Developer settings → Personal access tokens.", "validateAndAdd": "Valider et ajouter", "validating": "Validation...", "addSuccess": "Compte {username} ajouté avec succès.", "addFailed": "Échec de l'ajout du compte : {message}", "testConnection": "Tester", "connectionSuccess": "Connexion réussie.", "connectionFailed": "Échec de la connexion : {message}", "setDefault": "Définir par défaut", "defaultLabel": "Par défaut", "defaultSet": "Compte par défaut mis à jour.", "removeAccount": "Supprimer", "removeConfirmTitle": "Supprimer le compte", "removeConfirmMessage": "Êtes-vous sûr de vouloir supprimer le compte « {username} » ?", "removeConfirm": "Supprimer", "removeCancel": "Annuler", "removeSuccess": "Compte supprimé.", "scopes": "Portées", "loadFailed": "Échec du chargement des paramètres : {message}", "gitAccount": { "sectionTitle": "Comptes serveur Git", "sectionDescription": "Gérez les identifiants pour les serveurs Git non GitHub (GitLab, Bitbucket, auto-hébergé, etc.).", "noAccounts": "Aucun compte de serveur Git configuré.", "addAccount": "Ajouter un compte", "addTitle": "Ajouter un compte Git", "addDescription": "Entrez l'adresse du serveur, le nom d'utilisateur et le mot de passe ou jeton d'accès.", "serverUrl": "URL du serveur", "serverUrlPlaceholder": "https://gitlab.example.com", "username": "Nom d'utilisateur", "usernamePlaceholder": "Nom d'utilisateur ou e-mail", "password": "Mot de passe / Jeton", "passwordPlaceholder": "Mot de passe ou jeton d'accès", "passwordHint": "Entrez le mot de passe ou le jeton d'accès du serveur.", "add": "Ajouter", "serverRequired": "L'URL du serveur est requise.", "usernameRequired": "Le nom d'utilisateur est requis.", "passwordRequired": "Le mot de passe est requis." } }, "ShortcutSettings": { "sectionTitle": "Raccourcis", "resetDefault": "Rétablir les valeurs par défaut", "recordInstruction": "Cliquez sur le bouton à droite, puis appuyez sur une combinaison de touches. Utilisez Ctrl/Cmd, Alt et Shift. Appuyez sur Échap pour annuler l’enregistrement.", "recording": "Appuyez sur un raccourci...", "toasts": { "conflict": "Le raccourci est déjà utilisé par \"{title}\"", "updated": "Raccourci mis à jour", "invalid": "Raccourci invalide, veuillez réessayer", "reset": "Les raccourcis par défaut ont été restaurés" }, "actions": { "toggle_search": { "title": "Ouvrir la recherche", "description": "Afficher ou masquer le panneau de recherche de conversations" }, "toggle_sidebar": { "title": "Basculer la barre latérale gauche", "description": "Afficher ou masquer la barre latérale de liste des conversations" }, "toggle_terminal": { "title": "Basculer le terminal", "description": "Afficher ou masquer le panneau terminal inférieur" }, "new_terminal_tab": { "title": "Nouveau terminal", "description": "Créer un nouvel onglet terminal lorsque le terminal a le focus" }, "close_current_terminal_tab": { "title": "Fermer le terminal actuel", "description": "Fermer l’onglet terminal actuel lorsque le terminal a le focus" }, "toggle_aux_panel": { "title": "Basculer le panneau droit", "description": "Afficher ou masquer le panneau d’informations auxiliaires" }, "new_conversation": { "title": "Nouvelle conversation", "description": "Créer un nouvel onglet de conversation dans le dossier actuel" }, "open_folder": { "title": "Ouvrir un dossier", "description": "Ouvrir le sélecteur de dossier et ouvrir dans une nouvelle fenêtre" }, "open_settings": { "title": "Ouvrir les paramètres", "description": "Ouvrir la fenêtre des paramètres" }, "close_current_tab": { "title": "Fermer l’onglet actuel", "description": "Fermer la conversation actuelle ou l’onglet de fichier" }, "close_all_file_tabs": { "title": "Fermer tous les onglets de fichiers", "description": "Fermer tous les onglets de fichiers uniquement en mode fichiers" }, "send_message": { "title": "Envoyer le message", "description": "Envoyer le message actuel dans la zone de saisie" }, "newline_in_message": { "title": "Retour à la ligne", "description": "Insérer un retour à la ligne dans la zone de saisie" } } }, "SkillsSettings": { "title": "Skills", "description": "Sélectionnez une Skill à gauche. À droite, un aperçu Markdown s’affiche par défaut ; passez en édition pour modifier et enregistrer.", "loadingAgents": "Chargement des agents qui prennent en charge les Skills...", "emptyNoManageableAgents": "Aucun agent disponible pour la gestion des Skills.", "managedTarget": "Cible gérée", "selectAgentPlaceholder": "Sélectionnez un agent", "searchPlaceholder": "Rechercher par nom / ID / chemin...", "skillsList": "Liste des Skills", "loadingSkills": "Chargement des Skills...", "agentNotSupported": "L’agent actuel ne prend pas en charge la gestion des Skills.", "emptySkills": "Aucune Skill pour le moment. Cliquez sur « Nouvelle Skill » pour en créer une.", "newSkillTitle": "Nouvelle Skill", "skillInfo": "Infos de la Skill", "skillIdPlaceholder": "skill-id (lettres/chiffres/-/_/.)", "skillsDirectoryWithPath": "Répertoire des Skills : {path}", "skillsDirectoryNeedId": "Répertoire des Skills : saisissez l’ID de Skill pour générer le chemin complet", "markdownContent": "Contenu Markdown", "editingStatus": "Édition", "previewStatus": "Aperçu", "contentPlaceholder": "Saisissez le contenu Markdown de la Skill...", "metadataTitle": "Métadonnées des Skills", "onlyYamlMetadata": "Cette Skill contient uniquement des métadonnées YAML.", "emptyContentHint": "Aucun contenu pour le moment. Cliquez sur « Éditer » pour commencer.", "loadingSkill": "Chargement de la Skill...", "emptyNoAgents": "Aucun agent disponible.", "actions": { "preview": "Aperçu", "edit": "Éditer", "openInWindow": "Ouvrir dans une nouvelle fenêtre", "delete": "Supprimer", "deleting": "Suppression...", "refresh": "Actualiser", "newSkill": "Nouvelle Skill", "reset": "Réinitialiser", "save": "Enregistrer", "saving": "Enregistrement...", "cancel": "Annuler" }, "deleteDialog": { "title": "Supprimer la Skill", "confirm": "Supprimer la Skill actuelle ? Cette action est irréversible.", "confirmWithNamePrefix": "Supprimer la Skill", "confirmWithNameSuffix": "? Cette action est irréversible." }, "toasts": { "loadFailed": "Échec du chargement de la Skill", "openFolderFailed": "Échec de l’ouverture du dossier", "noSkillDirectory": "Aucun répertoire de Skills disponible pour l’agent actuel", "nameRequired": "Le nom de la Skill ne peut pas être vide", "updated": "Skill mise à jour", "created": "Skill créée", "saveFailed": "Échec de l’enregistrement de la Skill", "deleted": "Skill supprimée", "deleteFailed": "Échec de la suppression de la Skill" }, "templates": { "gemini": "---\nname: example-skill\ndescription: Describe when this skill should be used.\n---\n\n# Skill Name\n\nInstructions for the agent when this skill is active.\n\n## Workflow\n\n1. Add actionable step one.\n2. Add actionable step two.\n", "openCode": "---\nname: example-skill\ndescription: Describe when this skill should be used.\n---\n\n# Purpose\n\nDescribe what this skill helps with.\n\n# Steps\n\n1. Add actionable step one.\n2. Add actionable step two.\n", "openClaw": "---\nname: example-skill\ndescription: Describe when this skill should be used.\nuser-invocable: true\ndisable-model-invocation: false\n---\n\n# Purpose\n\nDescribe what this skill helps with.\n\n# Instructions\n\n1. Add actionable instruction one.\n2. Add actionable instruction two.\n", "default": "# Skill: example-skill\n\n## When to use\n\n- Describe trigger conditions.\n\n## Instructions\n\n1. Add actionable instruction one.\n2. Add actionable instruction two.\n" } }, "McpSettings": { "loading": "Chargement...", "summary": { "missingCommand": "(commande manquante)", "missingUrl": "(URL manquante)" }, "protocol": { "stdio": "Stdio" }, "errors": { "selectInstallProtocol": "Veuillez sélectionner un protocole d’installation", "fieldRequired": "{field} est requis", "fieldNeedsBoolean": "{field} doit être true ou false", "fieldNeedsNumber": "{field} doit être un nombre", "fieldNeedsInteger": "{field} doit être un entier", "fieldInvalidJson": "{field} contient un JSON invalide : {message}", "fieldOutOfRange": "La valeur de {field} est hors de la plage autorisée", "jsonEmpty": "{name} ne peut pas être vide", "jsonInvalid": "{name} n’est pas un JSON valide : {message}", "jsonMustBeObject": "{name} doit être un objet JSON" }, "jsonNames": { "localConfig": "Configuration MCP", "installConfig": "Configuration d’installation" }, "toasts": { "uninstalled": "MCP désinstallé", "uninstallFailed": "Échec de la désinstallation : {message}", "selectAtLeastOneApp": "Veuillez sélectionner au moins une application cible", "saveSuccess": "Enregistré", "saveFailed": "Échec de l’enregistrement : {message}", "installed": "{name} installé", "installFailed": "Échec de l’installation : {message}" }, "installDialog": { "title": "Confirmer l’installation MCP", "descriptionWithName": "Installer {name} dans la configuration locale.", "description": "Sélectionnez les applications cibles pour l’installation.", "protocol": "Protocole", "selectProtocol": "Sélectionner un protocole", "parameters": "Paramètres de configuration", "booleanPlaceholder": "Veuillez sélectionner true/false", "selectOneValue": "Sélectionner une valeur", "targetApps": "Applications cibles" }, "actions": { "cancel": "Annuler", "confirmInstall": "Confirmer l’installation", "installing": "Installation", "uninstall": "Désinstaller", "uninstalling": "Désinstallation", "viewDetails": "Voir les détails", "save": "Enregistrer", "saving": "Enregistrement", "install": "Installer" }, "tabs": { "local": "MCP local", "market": "Marketplace MCP" }, "local": { "filterPlaceholder": "Filtrer les MCP locaux...", "loadFailed": "Échec du chargement : {message}", "empty": "Aucun MCP local détecté.", "description": "La configuration MCP locale peut être modifiée et enregistrée directement.", "enabledApps": "Applications activées", "configJson": "Configuration MCP (JSON)" }, "market": { "selectMarketplace": "Sélectionner un marketplace", "searchPlaceholder": "Rechercher MCP...", "searchFailed": "Échec de la recherche : {message}", "loadingList": "Chargement de la liste MCP...", "empty": "Aucun résultat MCP.", "loadingDetail": "Chargement des détails du marketplace...", "detailLoadFailed": "Échec du chargement des détails : {message}", "owner": "Propriétaire : {owner}", "namespace": "Espace de noms : {namespace}", "defaultInstallProtocol": "Protocole d’installation par défaut", "currentOptionParameterCount": "Nombre de paramètres de l’option actuelle : {count}", "installConfigDescription": "Configuration d’installation (JSON, modifiable avant installation ; les modifications remplaceront le formulaire protocole/paramètres)", "selectLeftToView": "Sélectionnez un MCP du marketplace à gauche pour voir les détails." }, "badges": { "verified": "Vérifié", "remote": "Distant", "hasHomepage": "A une page d’accueil", "uses": "{count} utilisations", "deployed": "Déployé", "notDeployed": "Non déployé" }, "selectLeftMcp": "Sélectionnez un MCP à gauche." }, "AcpAgentSettings": { "title": "Gestion du SDK des agents", "description": "Gérez en un seul endroit la connexion SDK des agents, l'état activé, les variables d'environnement, la gestion de configuration et les informations de préflight de version.", "loadingAgents": "Chargement de la liste des agents...", "agentList": "Liste des agents", "emptyNoAgent": "Aucun agent disponible.", "configManagement": "Gestion de configuration", "envVars": "Variables d'environnement", "nativeJsonConfig": "Configuration JSON native", "modelHintDefault": "Laissez vide pour utiliser le modèle système par défaut.", "generalConfigDescriptionClaude": "Prend en charge la configuration rapide de l'API URL, API Key et des modèles Claude, et synchronise avec la configuration JSON native.", "generalConfigDescriptionDefault": "Prend en charge les entrées de configuration importantes (API URL, API Key, Model) et la gestion de la configuration JSON native.", "actions": { "dragSort": "Glisser pour réordonner", "dragSortAgent": "Glisser pour réordonner {name}", "refreshCheck": "Actualiser la vérification", "refreshCheckAgent": "Actualiser la vérification de {name}", "clickEnable": "Cliquer pour activer {name}", "clickDisable": "Cliquer pour désactiver {name}", "install": "Installer", "upgrade": "Mettre à niveau", "uninstall": "Désinstaller", "uninstalling": "Désinstallation...", "saveEnvVars": "Enregistrer les variables d’environnement", "saving": "Enregistrement...", "saveCodexConfig": "Enregistrer la config Codex", "saveGeminiConfig": "Enregistrer la config Gemini", "saveOpenCodeConfig": "Enregistrer la config OpenCode", "saveOpenClawConfig": "Enregistrer la config OpenClaw", "saveConfigManagement": "Enregistrer la gestion de config", "saveCurrentProvider": "Enregistrer le provider actuel", "showApiKey": "Afficher la clé API", "hideApiKey": "Masquer la clé API", "showKey": "Afficher la clé", "hideKey": "Masquer la clé", "showToken": "Afficher le token", "hideToken": "Masquer le token", "cancel": "Annuler", "delete": "Supprimer", "deleting": "Suppression...", "confirmDelete": "Confirmer la suppression", "confirmUninstall": "Confirmer la désinstallation", "saveClineConfig": "Enregistrer la configuration Cline" }, "status": { "enabled": "Activé", "disabled": "Désactivé", "unchecked": "Non vérifié", "agentEnabledAria": "{name} activé", "agentEnabledSwitch": "Interrupteur d’activation {name}" }, "preflight": { "count": "Éléments de pré-vérification : {count}", "notRun": "Les vérifications n’ont pas encore été exécutées." }, "codex": { "configDescription": "Prend en charge la configuration rapide de l’URL API, de la clé API, du nom du modèle et du reasoning effort, avec synchronisation vers `auth.json` / `config.toml`.", "authMode": "Mode d’authentification", "chatgptSubscription": "Abonnement officiel", "chatgptSubscriptionHint": "Connectez-vous avec l’abonnement officiel ChatGPT, pas besoin d’API Key", "apiKeyHint": "Connectez-vous avec une API Key à OpenAI ou aux services API compatibles", "selectProvider": "Sélectionner un provider", "modelName": "Nom du modèle", "selectReasoningEffort": "Sélectionner Reasoning Effort", "enableWebsocket": "Activer WebSocket", "enableWebsocketAria": "Activer WebSocket pour Codex Provider", "authJsonNative": "auth.json (natif)", "configTomlNative": "config.toml (natif)" }, "gemini": { "authConfig": "Configuration d’authentification Gemini", "authConfigDescription": "Alignée sur la documentation d’authentification Gemini CLI, avec prise en charge d’un endpoint personnalisé, connexion Google, Gemini API Key et Vertex AI (ADC / compte de service / API Key).", "authMode": "Mode d’authentification", "selectAuthMode": "Sélectionner un mode d’authentification", "viewAuthDoc": "Voir la documentation d’authentification", "mode": { "custom": "Endpoint personnalisé", "loginGoogle": "Connexion Google (OAuth)", "vertexServiceAccount": "Vertex AI (Compte de service)" }, "hint": { "custom": "Renseignez API URL, API Key et Model, mappés sur GOOGLE_GEMINI_BASE_URL / GEMINI_API_KEY / GEMINI_MODEL.", "loginGoogle": "Exécutez d’abord gemini dans le terminal et terminez la connexion Google ; la clé API n’est pas requise.", "geminiApiKey": "Renseignez GEMINI_API_KEY lors de l’utilisation de l’API Gemini.", "vertexAdc": "Utilisez gcloud ADC ; GOOGLE_CLOUD_PROJECT et GOOGLE_CLOUD_LOCATION sont recommandés.", "vertexServiceAccount": "Définissez le chemin JSON du compte de service dans GOOGLE_APPLICATION_CREDENTIALS.", "vertexApiKey": "Renseignez GOOGLE_API_KEY lors de l’utilisation d’une clé API Vertex AI." } }, "openCode": { "configManagement": "Gestion de configuration OpenCode", "configDescription": "Alignée sur le schéma `provider` d’OpenCode, prend en charge la gestion multi-provider et la synchronisation bidirectionnelle avec les fichiers JSON natifs.", "providerManagement": "Gestion des providers", "providerCount": "{count} fournisseurs", "addProvider": "Ajouter un provider", "emptyProvider": "Aucun provider pour le moment. Saisissez un ID puis cliquez sur « Ajouter un provider ».", "providerEnabledState": "État activé de {providerId}", "selectProviderNpm": "Sélectionner provider.npm", "notSet": "Non défini", "modelManagement": "Gestion des modèles", "modelCount": "{count} modèles", "modelDescription": "Aligné sur `provider.models` d’OpenCode. La gestion rapide prend actuellement en charge `name` / `id` ; les autres champs avancés sont conservés et peuvent être modifiés dans le JSON natif ci-dessous.", "addModel": "Ajouter un modèle", "emptyModel": "Aucun modèle pour le moment. Saisissez model id puis cliquez sur « Ajouter un modèle ».", "modelId": "ID du modèle", "modelName": "Nom du modèle", "deleteModel": "Supprimer le modèle {modelId}", "nativeJsonConfig": "Configuration JSON native OpenCode" }, "openClaw": { "gatewayConfig": "Configuration Gateway", "gatewayDescription": "Configure la connexion OpenClaw Gateway. Prend en charge une gateway locale ou distante.", "gatewayUrlHint": "Laisser vide pour utiliser gateway.remote.url depuis la configuration locale openclaw.", "gatewayTokenPlaceholder": "Token d’authentification Gateway", "gatewayTokenHint": "Utilisez token-file plutôt qu’un token en clair si possible ; configurez-le via le CLI openclaw.", "sessionKeyHint": "Optionnel. Spécifie la session key de la gateway ; laisser vide pour auto-attribuer une session isolée." }, "claude": { "mainModel": "Modèle principal", "reasoningModel": "Modèle de raisonnement (thinking)", "haikuDefaultModel": "Modèle Haiku par défaut", "sonnetDefaultModel": "Modèle Sonnet par défaut", "opusDefaultModel": "Modèle Opus par défaut" }, "dialogs": { "confirmDeleteProvider": "Supprimer le provider {providerId} ?", "confirmDeleteProviderDescription": "La configuration OpenCode et auth JSON seront mises à jour ensemble. Cette action est irréversible.", "confirmUninstall": "Désinstaller {name} ?", "confirmUninstallDescription": "Cela supprime la version installée localement. Vous pouvez réinstaller plus tard." }, "errors": { "nativeJsonMustBeObject": "La configuration JSON native doit être un objet", "nativeJsonInvalid": "Erreur de format de configuration JSON native : {message}", "openCodeAuthMustBeObject": "OpenCode auth.json doit être un objet JSON", "openCodeAuthInvalid": "Erreur de format OpenCode auth.json : {message}", "authMustBeObject": "auth.json doit être un objet JSON", "authInvalid": "Erreur de format auth.json : {message}", "providerIdPattern": "L’ID du provider n’accepte que lettres, chiffres, underscore, point et tiret", "providerExists": "Le provider '{providerId}' existe déjà", "modelIdPattern": "L’ID du modèle n’accepte que lettres, chiffres, underscore, point, deux-points et tiret", "modelExists": "Le modèle '{modelId}' existe déjà" }, "warnings": { "nativeJsonRecoveredStructured": "La configuration JSON native est invalide ; réinitialisée en configuration structurée", "nativeJsonRecoveredOpenCode": "La configuration JSON native est invalide ; réinitialisée en configuration structurée OpenCode", "openCodeAuthRecovered": "OpenCode auth.json est invalide ; réinitialisé en configuration par défaut", "authRecoveredStructured": "auth.json est invalide ; réinitialisé en configuration structurée" }, "toasts": { "agentActionCompleted": "{name} {action} terminé", "agentActionFailed": "{name} {action} échoué", "localVersion": "Version locale : {version}", "installCompletedVersionLater": "Installation terminée, la version sera mise à jour à la prochaine vérification", "uninstallCompleted": "Désinstallation de {name} terminée", "uninstallFailed": "Échec de la désinstallation de {name}", "localVersionRemoved": "Version locale supprimée", "saveAgentOrderFailed": "Échec de l’enregistrement de l’ordre des agents", "saveAgentSwitchFailed": "Échec de l’enregistrement du switch agent", "saveEnvFailed": "Échec de l’enregistrement des variables d’environnement", "codexSaved": "Configuration Codex enregistrée", "saveCodexNativeFailed": "Échec de l’enregistrement de la configuration native Codex", "geminiSaved": "Configuration Gemini enregistrée", "saveGeminiFailed": "Échec de l’enregistrement de la configuration Gemini", "providerDeleted": "Provider {providerId} supprimé", "providerDeleteFailed": "Échec de suppression du provider {providerId}", "providerSaved": "Provider {providerId} enregistré", "saveProviderFailed": "Échec d’enregistrement du provider {providerId}", "openCodeConfigSynced": "La configuration OpenCode et auth JSON ont été synchronisés.", "openCodeSaved": "Configuration OpenCode enregistrée", "saveOpenCodeFailed": "Échec de l’enregistrement de la configuration OpenCode", "openClawSaved": "Configuration OpenClaw enregistrée", "saveOpenClawFailed": "Échec de l’enregistrement de la configuration OpenClaw", "configSaved": "Configuration enregistrée", "configSavedHint": "Les sessions existantes doivent être rouvertes pour prendre effet", "saveConfigManagementFailed": "Échec de l’enregistrement de la gestion de configuration", "clineSaved": "Configuration Cline enregistrée", "saveClineFailed": "Échec de l'enregistrement de la configuration Cline" }, "version": { "statusLabel": "Statut de version", "notInstalled": "Non installé", "remoteLocal": "Distant : {remoteVersion} · Local : {localVersion}", "platformUnsupported": "{versionText}. La plateforme actuelle ne prend pas en charge cet agent.", "clickInstall": "{versionText}. Cliquez sur Installer à droite.", "localUnrecognized": "{versionText}. La version locale n’est pas comparable ; essayez une mise à niveau pour écraser l’installation.", "upgradeAvailable": "{versionText}. Mise à niveau disponible.", "remoteUnavailable": "{versionText}. La version distante est actuellement indisponible.", "latest": "{versionText}. Déjà à jour." }, "cline": { "configDescription": "Configurez le fournisseur API et les identifiants Cline. Les paramètres sont enregistrés dans ~/.cline/data/." } }, "SettingsPages": { "agentsLoading": "Chargement des paramètres des agents..." }, "CommitPage": { "title": "Valider", "invalidFolderId": "ID de dossier invalide", "loadingRepo": "Chargement du dépôt..." }, "MergePage": { "title": "Résoudre les conflits", "invalidFolderId": "ID de dossier invalide", "loadingRepo": "Chargement du dépôt...", "localVersion": "Local (Le nôtre)", "result": "Résultat", "remoteVersion": "Distant (Le leur)", "acceptLocal": "Accepter le local", "acceptRemote": "Accepter le distant", "markResolved": "Marquer comme résolu", "abortMerge": "Abandonner", "completeMerge": "Terminer la fusion", "unresolvedConflicts": "Il reste des marqueurs de conflit non résolus dans ce fichier", "fileResolved": "Fichier résolu avec succès", "allResolved": "Tous les conflits sont résolus", "conflictFiles": "Fichiers en conflit", "loadingFile": "Chargement du fichier...", "preparingMerge": "Préparation de la fusion...", "selectFile": "Sélectionner un fichier à résoudre", "noConflicts": "Aucun fichier en conflit", "skipFile": "Passer", "abortSuccess": "Opération abandonnée", "applyAllNonConflicting": "Appliquer tous les changements non conflictuels", "applyLeftNonConflicting": "Appliquer local", "applyRightNonConflicting": "Appliquer distant" }, "Folder": { "common": { "all": "Tout", "cancel": "Annuler", "close": "Fermer", "closeOthers": "Fermer les autres", "closeAll": "Tout fermer", "confirm": "Confirmer", "save": "Enregistrer", "delete": "Supprimer", "rename": "Renommer", "loading": "Chargement...", "refresh": "Actualiser", "refreshing": "Actualisation...", "create": "Créer", "createAndSwitch": "Créer et basculer", "openFile": "Ouvrir le fichier", "viewDiff": "Voir le Diff", "push": "Pousser..." }, "modes": { "conversation": "Mode conversation", "fusion": "Mode fusion", "files": "Mode fichiers", "workspaceModesAria": "Modes de l’espace de travail" }, "statusLabels": { "in_progress": "En cours", "pending_review": "Revue", "completed": "Terminé", "cancelled": "Annulé" }, "sidebar": { "title": "Discussions", "locateActiveConversation": "Localiser la conversation active", "expandAllGroups": "Développer tous les groupes", "collapseAllGroups": "Réduire tous les groupes", "newConversation": "Nouvelle conversation", "noConversationsFound": "Aucune conversation trouvée.", "importLocalSessions": "Importer les sessions locales", "importing": "Import en cours...", "error": "Erreur : {message}", "completeAllSessions": "Terminer toutes les sessions", "completeAllReviewTitle": "Terminer toutes les sessions en revue ?", "completeAllReviewDescription": "Cela marquera comme terminées toutes les {count, plural, one {# session} other {# sessions}} en Revue.", "completing": "Finalisation...", "toasts": { "importedSessions": "{imported, plural, one {# session} other {# sessions}} importée(s), {skipped} ignorée(s)", "noNewSessionsFound": "Aucune nouvelle session trouvée ({skipped} ignorée(s))", "importFailed": "Échec de l’import : {message}", "reviewCompleted": "{count, plural, one {# session en revue} other {# sessions en revue}} marquée(s) comme terminée(s)", "completeReviewFailed": "Échec de la finalisation des sessions en revue : {message}" } }, "conversation": { "reloadFailed": "Échec du rechargement de la conversation : {message}", "reloaded": "Conversation rechargée", "reload": "Recharger", "newConversation": "Nouvelle conversation", "closeConversation": "Fermer la conversation", "forkSession": "Dupliquer la session", "forkSessionSuccess": "Session dupliquée avec succès", "forkSessionFailed": "Échec de la duplication de la session : {error}" }, "conversationCard": { "untitledConversation": "Conversation sans titre", "newConversation": "Nouvelle conversation", "rename": "Renommer", "status": "Statut", "delete": "Supprimer", "importLocalSessions": "Importer les sessions locales", "importing": "Import en cours...", "renameConversation": "Renommer la conversation", "deleteConversationTitle": "Supprimer la conversation ?", "deleteConversationDescription": "Cela supprimera \"{title}\". Cette action est irréversible.", "cancel": "Annuler", "save": "Enregistrer" }, "search": { "dialogTitle": "Rechercher", "tabConversations": "Conversations", "tabFiles": "Fichiers", "placeholder": "Rechercher des conversations...", "filePlaceholder": "Rechercher des fichiers ou répertoires...", "allAgents": "Tout", "searching": "Recherche...", "typeToSearch": "Tapez pour rechercher des conversations", "typeToSearchFiles": "Tapez pour rechercher des fichiers ou répertoires", "noResults": "Aucun résultat trouvé.", "untitledConversation": "Conversation sans titre" }, "folderTitleBar": { "showSidebar": "Afficher la barre latérale", "hideSidebar": "Masquer la barre latérale", "toggleTerminal": "Basculer le terminal", "toggleAuxPanel": "Basculer le panneau auxiliaire", "search": "Rechercher", "openSettings": "Ouvrir les paramètres", "withShortcut": "{label} (raccourci : {shortcut})" }, "statusBar": { "connection": { "connected": "Connecté", "connecting": "Connexion...", "downloading": "Téléchargement...", "prompting": "Réponse...", "error": "Erreur de connexion", "disconnected": "Déconnecté", "tooltip": "{agent} : {status}", "tooltipError": "{agent} : {error}" }, "tasks": { "title": "Tâches" }, "alerts": { "title": "Alertes", "empty": "Aucune alerte" }, "stats": { "conversations": "{count} discussions", "summary": "{conversations} discussions / {messages} messages" }, "tokens": { "contextWindowUsageAria": "Utilisation de la fenêtre de contexte", "contextWindow": "Fenêtre de contexte", "usedMax": "Utilisé / Max", "tokenUsage": "Utilisation des tokens", "input": "Entrée", "output": "Sortie", "cacheRead": "Lecture cache", "cacheWrite": "Écriture cache", "total": "Total des tokens" } }, "auxPanel": { "tabs": { "diff": "Différences", "files": "Fichiers", "changes": "Changements", "commits": "Validations" } }, "windowControls": { "minimizeWindow": "Minimiser la fenêtre", "minimize": "Minimiser", "maximizeWindow": "Maximiser la fenêtre", "maximize": "Maximiser", "restoreWindow": "Restaurer la fenêtre", "restore": "Restaurer", "closeWindow": "Fermer la fenêtre", "close": "Fermer" }, "tabs": { "closeConversationTab": "Fermer l’onglet de conversation", "close": "Fermer", "closeOthers": "Fermer les autres", "closeAll": "Tout fermer", "tileDisplay": "Affichage en mosaïque", "untileDisplay": "Quitter la mosaïque" }, "fileWorkspace": { "files": "Fichiers", "closeFileTab": "Fermer l’onglet fichier", "close": "Fermer", "closeOthers": "Fermer les autres", "closeAll": "Tout fermer", "preview": "Aperçu", "editSource": "Modifier la source" }, "terminal": { "rename": "Renommer", "close": "Fermer", "closeOthers": "Fermer les autres", "closeAll": "Tout fermer", "hideTerminal": "Masquer le terminal ({shortcut})" }, "sessionFiles": { "currentResponse": "Réponse actuelle", "noDiffDataAvailable": "Aucune donnée de diff disponible pour {filePath}", "loading": "Chargement...", "noFileChangesInConversation": "Aucun changement de fichier dans cette conversation", "openConversationToSeeChanges": "Ouvrez une conversation pour voir ses changements de fichiers", "remove": "Retirer", "changeCount": "{count, plural, one {# changement} other {# changements}}", "fileCount": "{count, plural, one {# fichier} other {# fichiers}}" }, "folderNameDropdown": { "fallbackFolderName": "Dossier", "openFolder": "Ouvrir le dossier", "cloneRepository": "Cloner le dépôt", "projectBoot": "Lanceur de projet", "opened": "Ouvert", "recentOpen": "Ouvert récemment" }, "fileWorkspacePanel": { "viewDiff": "Voir le Diff", "openFile": "Ouvrir le fichier", "fileCount": "{count, plural, one {# fichier} other {# fichiers}}", "openFileOrDiff": "Ouvrez un fichier ou un diff depuis le panneau de droite", "disk": "Disque", "head": "HEAD", "unsaved": "Non enregistré", "workingTree": "Arbre de travail", "loading": "Chargement...", "compareWithBranch": "{path} · comparer avec {branch}", "hunkCount": "{count, plural, one {# bloc} other {# blocs}}", "prev": "Précédent", "next": "Suivant", "jumpToLine": "Aller à la ligne {line}", "noParsedDiffSections": "Aucune section de diff analysée", "loadingEditor": "Chargement de l’éditeur...", "imageZoomIn": "Agrandir", "imageZoomOut": "Réduire", "imageZoomReset": "Réinitialiser le zoom" }, "branchDropdown": { "toasts": { "commitCodeCompleted": "Commit de code terminé", "pushCodeCompleted": "Push de code terminé", "committedFiles": "{count, plural, one {# fichier commit} other {# fichiers commit}}", "taskCompleted": "{label} terminé", "taskFailed": "{label} échoué", "mergeNoNewCommits": "{branchName} n’a pas de nouveaux commits", "mergedCommits": "{count, plural, one {# commit fusionné} other {# commits fusionnés}}", "allFilesUpToDate": "Tous les fichiers sont à jour", "updatedFiles": "{count, plural, one {# fichier mis à jour} other {# fichiers mis à jour}}", "openCommitWindowFailed": "Impossible d’ouvrir la fenêtre de commit", "openPushWindowFailed": "Impossible d’ouvrir la fenêtre de push", "upstreamSet": "La branche upstream a été définie", "upstreamSetAndPushed": "Branche upstream définie et {count, plural, one {# commit} other {# commits}} poussé(s)", "noCommitsToPush": "Aucun commit à pousser", "pushedCommits": "{count, plural, one {# commit poussé} other {# commits poussés}}" }, "tasks": { "newBranch": "Créer la branche {name}", "newWorktree": "Créer le worktree {name}", "checkoutTo": "Basculer vers {branchName}", "mergeBranch": "Fusionner {branchName}", "rebaseTo": "Rebase vers {branchName}", "deleteBranch": "Supprimer la branche {branchName}", "deleteRemoteBranch": "Supprimer la branche distante {branchName}", "initGitRepo": "Initialiser le dépôt Git", "pullCode": "Pull du code", "fetchInfo": "Récupérer les infos", "pushCode": "Push du code", "stashChanges": "Stash des changements", "stashPop": "Appliquer le stash" }, "confirm": { "mergeTitle": "Fusionner la branche", "rebaseTitle": "Rebase de la branche", "deleteTitle": "Supprimer la branche", "mergeDescription": "Fusionner {branchName} dans la branche actuelle {currentBranch} ?", "rebaseDescription": "Rebaser la branche actuelle {currentBranch} sur {branchName} ?", "deleteDescription": "Supprimer la branche {branchName} ? Cette action est irréversible.", "forceDeleteTitle": "Forcer la suppression de la branche", "forceDeleteDescription": "La branche {branchName} n'est pas entièrement fusionnée. Êtes-vous sûr de vouloir la supprimer de force ? Cette action est irréversible.", "deleteRemoteTitle": "Supprimer la branche distante", "deleteRemoteDescription": "Supprimer la branche distante {branchName} ? Cette action la supprimera du dépôt distant et ne pourra pas être annulée." }, "current": "Actuelle", "switchToBranch": "Basculer vers cette branche", "mergeBranchIntoCurrent": "Fusionner {branchName} dans {currentBranch}", "rebaseCurrentToBranch": "Rebaser {currentBranch} sur {branchName}", "deleteBranch": "Supprimer la branche", "versionControl": "Contrôle de version", "initGitRepo": "Initialiser le dépôt Git", "pullCode": "Pull du code", "fetchRemoteBranches": "Récupérer les branches distantes", "openCommitWindow": "Commit du code...", "pushCode": "Pousser...", "newBranch": "Nouvelle branche...", "newWorktree": "Nouveau worktree...", "stashChanges": "Remiser les changements...", "stashPop": "Appliquer le stash...", "manageRemotes": "Gérer les dépôts distants...", "localBranches": "Branches locales ({count, plural, one {#} other {#}})", "noLocalBranches": "Aucune branche locale", "remoteBranches": "Branches distantes ({count, plural, one {#} other {#}})", "noRemoteBranches": "Aucune branche distante", "parentBranchHint": "La branche actuelle a été créée depuis {parentBranch}. Cliquez pour fusionner {parentBranch} dans la branche actuelle.", "dialogs": { "newBranchTitle": "Nouvelle branche", "newBranchDescription": "Créer une nouvelle branche depuis la branche actuelle {branch}", "branchNamePlaceholder": "Nom de la branche", "newWorktreeTitle": "Nouveau worktree", "newWorktreeDescription": "Créer un nouveau worktree depuis la branche actuelle {branch}", "branchNameLabel": "Nom de la branche", "worktreePathLabel": "Chemin du worktree", "worktreePathPlaceholder": "Chemin du worktree", "manageRemotesTitle": "Gérer les dépôts distants", "manageRemotesEmpty": "Aucun dépôt distant configuré", "remoteNamePlaceholder": "Nom du dépôt distant", "remoteUrlPlaceholder": "URL du dépôt distant", "addRemote": "Ajouter", "savingRemotes": "Enregistrement..." }, "conflict": { "title": "Conflits de fusion", "description": "Les fichiers suivants ont des conflits qui doivent être résolus :", "abort": "Abandonner la fusion", "openMergeTool": "Ouvrir l'outil de fusion", "completeMerge": "Terminer la fusion", "abortSuccess": "Fusion abandonnée avec succès", "completeSuccess": "Fusion terminée avec succès" }, "stashDialog": { "title": "Remiser les changements", "description": "Sauvegarder les changements actuels dans la remise", "messageLabel": "Message", "messagePlaceholder": "Message de remise (optionnel)", "keepIndex": "Conserver l'index (les changements indexés restent indexés)", "cancel": "Annuler", "stash": "Remiser", "success": "Changements remisés", "error": "Échec de la remise" }, "unstashDialog": { "title": "Appliquer la remise", "noStashes": "Aucune remise trouvée", "selectFile": "Sélectionner un fichier pour voir le diff", "viewDiff": "Voir le diff", "original": "Original", "modified": "Modifié", "apply": "Appliquer", "drop": "Supprimer", "applySuccess": "Remise appliquée", "dropSuccess": "Remise supprimée", "confirmApply": "Appliquer la remise {ref} au répertoire de travail ?", "cancel": "Annuler" } }, "commitDialog": { "toasts": { "commitCompleted": "Commit de code terminé", "committedFiles": "{count, plural, one {# fichier commit} other {# fichiers commit}}", "addedToVcs": "Ajouté à VCS", "addToVcsFailed": "Échec de l’ajout à VCS", "fileDeleted": "Fichier supprimé", "deleteFailed": "Échec de la suppression", "fileRolledBack": "Fichier restauré", "rollbackFailed": "Échec du rollback", "dirRolledBack": "Répertoire restauré", "dirDeleted": "Répertoire supprimé" }, "confirm": { "deleteTitle": "Confirmer la suppression", "deleteDescription": "Supprimer le fichier \"{file}\" ? Cette action est irréversible.", "rollbackTitle": "Confirmer le rollback", "rollbackDescription": "Restaurer le fichier \"{file}\" vers HEAD ? Les modifications non enregistrées seront perdues.", "rollbackDirDescription": "Restaurer le répertoire \"{dir}\" vers HEAD ? Les modifications non enregistrées seront perdues.", "deleteDirDescription": "Supprimer le répertoire \"{dir}\" ? Cette action est irréversible." }, "actions": { "select": "Sélectionner", "unselect": "Désélectionner", "rollback": "Annuler", "addToVcs": "Ajouter à VCS" }, "aria": { "selectFile": "{action} : {path}", "unselectAllFiles": "Désélectionner tous les fichiers", "selectAllFiles": "Sélectionner tous les fichiers", "unselectTracked": "Désélectionner les changements suivis", "selectTracked": "Sélectionner les changements suivis", "unselectUntracked": "Désélectionner les fichiers non suivis", "selectUntracked": "Sélectionner les fichiers non suivis" }, "loading": "Chargement...", "selectionCount": "{selected} / {total} fichiers", "emptyFiles": "Aucun fichier modifié", "trackedChanges": "Changements suivis ({count})", "untrackedFiles": "Fichiers non suivis ({count})", "commitMessage": "Message de commit", "commitMessagePlaceholder": "Saisissez le message de commit...", "commitButton": "Valider ({count})", "head": "HEAD", "workingTree": "Arbre de travail", "clickFileToDiff": "Cliquez sur un nom de fichier pour voir le diff", "loadingDiff": "Chargement du diff..." }, "pushWindow": { "title": "Pousser le code", "noUnpushedCommits": "Aucun commit non poussé", "noRemoteConfigured": "Aucun dépôt distant Git configuré\nAjoutez-en un dans « Gérer les dépôts distants »", "newBranchNoPushedCommits": "Nouvelle branche — pousser pour créer la branche de suivi distante", "unpushed": "Non poussé", "selectFileToViewDiff": "Sélectionnez un fichier pour voir les différences", "before": "Avant", "after": "Après", "push": "Pousser", "toasts": { "pushSuccess": "Push réussi", "pushFailed": "Échec du push", "upstreamSet": "La branche distante a été configurée", "upstreamSetAndPushed": "Branche distante configurée et {count} commits poussés", "noCommitsToPush": "Aucun commit à pousser", "pushedCommits": "{count} commits poussés" } }, "gitLogTab": { "filesTitle": "Fichiers", "expandAllFiles": "Développer tous les fichiers", "collapseAllFiles": "Réduire tous les fichiers", "workspace": "espace de travail", "retry": "Réessayer", "noCommitsFound": "Aucun commit trouvé", "hash": "Empreinte", "copyHash": "Copier le hash", "copyMessage": "Copier le message", "author": "Auteur", "noFileChangeDetails": "Aucun détail de changement de fichier disponible.", "branchesTitle": "Branches Git", "loadingBranches": "Chargement des branches...", "noContainingBranches": "Aucune branche contenant ce commit.", "newBranch": "Nouvelle branche...", "viewCommitDiffAria": "Voir le diff du commit {hash}", "copyFullCommitHashAria": "Copier le hash complet du commit {hash}", "pushStatus": { "pushed": "Poussé vers le remote", "notPushed": "Non poussé vers le remote", "unknown": "Statut de push inconnu (aucun upstream configuré)" }, "time": { "monthsAgo": "{count, plural, one {il y a # mois} other {il y a # mois}}", "daysAgo": "{count, plural, one {il y a # jour} other {il y a # jours}}", "hoursAgo": "{count, plural, one {il y a # heure} other {il y a # heures}}", "minsAgo": "{count, plural, one {il y a # min} other {il y a # mins}}", "justNow": "à l’instant" }, "toasts": { "createdAndSwitchedNewBranch": "Nouvelle branche créée et activée", "newBranchFromCommit": "{name} (depuis {shortHash})", "createBranchFailed": "Échec de la création de la branche", "openPushWindowFailed": "Échec de l'ouverture de la fenêtre de push" }, "branchSelector": { "selectBranchPlaceholder": "Sélectionner une branche...", "localBranches": "Branches locales", "current": "Actuelle", "remoteBranches": "Branches distantes", "refreshCommitHistory": "Actualiser l’historique des commits" }, "dialogs": { "newBranchTitle": "Nouvelle branche", "newBranchDescription": "Créer une nouvelle branche avec le commit {shortHash} comme dernier commit.", "branchNamePlaceholder": "Nom de la branche" } }, "gitChangesTab": { "workspace": "espace de travail", "noChanges": "Aucun changement local", "trackedChanges": "Changements suivis ({count})", "untrackedFiles": "Fichiers non suivis ({count})", "expandTracked": "Développer les changements suivis", "collapseTracked": "Réduire les changements suivis", "expandUntracked": "Développer les fichiers non suivis", "collapseUntracked": "Réduire les fichiers non suivis", "actions": { "commitCode": "Commit du code", "rollback": "Annuler", "addToVcs": "Ajouter à VCS", "delete": "Supprimer" }, "toasts": { "noAddableFilesInDir": "Aucun fichier modifié de ce répertoire ne peut être ajouté à VCS", "noRollbackFilesInDir": "Aucun fichier modifié de ce répertoire ne peut être rollback", "addedToVcs": "{name} ajouté à VCS", "addToVcsFailed": "Échec de l’ajout à VCS", "openCommitWindowFailed": "Impossible d’ouvrir la fenêtre de commit", "rolledBack": "{name} restauré", "rollbackFailed": "Échec du rollback", "addedFilesToVcs": "{count, plural, one {# fichier} other {# fichiers}} ajouté(s) à VCS", "rolledBackFiles": "{count, plural, one {# fichier restauré} other {# fichiers restaurés}}", "deleted": "{name} supprimé", "deleteFailed": "Échec de la suppression", "deletedFiles": "{count} fichiers supprimés", "noDeletableFilesInDir": "Aucun fichier modifié dans ce répertoire ne peut être supprimé" }, "directoryDialog": { "descriptionAdd": "Sélectionnez les fichiers du répertoire {path} à ajouter à VCS.", "descriptionRollback": "Sélectionnez les fichiers du répertoire {path} à rollback.", "descriptionDelete": "Sélectionnez les fichiers du répertoire {path} à supprimer. Cette action est irréversible.", "descriptionFallback": "Sélectionnez les fichiers pour continuer.", "selectionCount": "{selected} / {total} fichiers sélectionnés", "selectAll": "Tout sélectionner", "unselectAll": "Tout désélectionner", "loadingCandidates": "Chargement des changements du répertoire...", "noOperableFiles": "Aucun fichier opérable" }, "rollbackConfirm": { "title": "Confirmer le rollback", "descriptionWithTarget": "Rollback des changements locaux pour {kind} \"{name}\" ?", "descriptionFallback": "Rollback des changements locaux ?", "kindDirectory": "répertoire", "kindFile": "fichier" }, "deleteConfirm": { "title": "Confirmer la suppression", "descriptionWithTarget": "Supprimer {kind} \"{name}\" ? Cette action est irréversible.", "descriptionFallback": "Cette action est irréversible.", "kindDirectory": "répertoire", "kindFile": "fichier" } }, "tabContext": { "loadingConversation": "Chargement...", "untitledConversation": "Conversation sans titre", "newConversation": "Nouvelle conversation" }, "fileTreeTab": { "workspace": "Espace de travail", "retry": "Réessayer", "git": "Git", "openInFileManager": "Ouvrir dans le gestionnaire de fichiers", "openInFinder": "Ouvrir dans Finder", "openInExplorer": "Ouvrir dans Explorer", "attachToCurrentSession": "Attacher à la session actuelle", "compareWithBranch": "Comparer avec la branche...", "reloadFromDisk": "Recharger depuis le disque", "new": "Nouveau", "newFile": "Fichier", "newDirectory": "Répertoire", "openIn": "Ouvrir dans", "openInTerminal": "Ouvrir dans le terminal", "actions": { "select": "Sélectionner", "unselect": "Désélectionner", "commitCode": "Committer le code", "rollback": "Annuler", "addToVcs": "Ajouter au VCS" }, "aria": { "selectPath": "{action} : {path}" }, "toasts": { "openDirectoryFailed": "Échec de l'ouverture du dossier", "openBuiltinTerminalFailed": "Impossible d'ouvrir le terminal intégré", "openCommitWindowFailed": "Échec de l'ouverture de la fenêtre de commit", "noAddableFilesInDir": "Aucun fichier modifié de ce dossier ne peut être ajouté au VCS", "noRollbackFilesInDir": "Aucun fichier modifié de ce dossier ne peut être annulé", "addedToVcs": "{name} ajouté au VCS", "addToVcsFailed": "Échec de l'ajout au VCS", "loadBranchesFailed": "Échec du chargement des branches", "renameFailed": "Échec du renommage", "deleteFailed": "Échec de la suppression", "rolledBack": "{name} annulé", "rollbackFailed": "Échec de l'annulation", "addedFilesToVcs": "{count, plural, one {# fichier ajouté au VCS} other {# fichiers ajoutés au VCS}}", "rolledBackFiles": "{count, plural, one {# fichier annulé} other {# fichiers annulés}}", "savedAsCopy": "Enregistré en copie", "saveCopyFailed": "Échec de l'enregistrement en copie", "watchStartFailed": "Échec du démarrage de la surveillance de fichiers", "createFailed": "Échec de la création" }, "createDialog": { "newFile": "Nouveau fichier", "newDirectory": "Nouveau répertoire", "description": "Entrez un nom pour le nouveau {kind}.", "placeholderFile": "file-name.ext", "placeholderDirectory": "folder-name" }, "renameDialog": { "renameDirectory": "Renommer le dossier", "renameFile": "Renommer le fichier", "description": "Saisissez un nouveau nom (nom uniquement, sans chemin).", "placeholderDirectory": "nouveau-nom-dossier", "placeholderFile": "nouveau-nom-fichier.ext" }, "directoryDialog": { "descriptionAdd": "Sélectionnez des fichiers sous le dossier {path} à ajouter au VCS.", "descriptionRollback": "Sélectionnez des fichiers sous le dossier {path} à annuler.", "descriptionFallback": "Sélectionnez des fichiers pour continuer.", "selectionCount": "{selected} / {total} fichiers sélectionnés", "selectAll": "Tout sélectionner", "unselectAll": "Tout désélectionner", "loadingCandidates": "Chargement des changements du dossier...", "noOperableFiles": "Aucun fichier exploitable" }, "compareDialog": { "title": "Comparer avec la branche", "descriptionWithTarget": "Sélectionnez une branche et comparez avec {kind} {path}", "descriptionFallback": "Sélectionnez une branche à comparer.", "kindDirectory": "dossier", "kindFile": "fichier", "filterPlaceholder": "Filtrer les branches, ex. main / origin/main", "singleClickHint": "Cliquez sur une branche pour comparer directement", "loadingBranches": "Chargement des branches...", "recentBranches": "Branches récentes ({count})", "noCurrentBranch": "Aucune branche courante", "localBranches": "Branches locales ({count})", "remoteBranches": "Branches distantes ({count})", "noMatchingBranches": "Aucune branche correspondante" }, "externalConflictDialog": { "title": "Modifications externes de fichiers détectées", "descriptionWithPath": "Le fichier {path} a changé sur le disque et les modifications actuelles ne sont pas enregistrées.", "descriptionFallback": "Le fichier actuel a changé sur le disque et les modifications actuelles ne sont pas enregistrées.", "compare": "Comparer", "savingCopy": "Enregistrement de la copie...", "saveAsCopy": "Enregistrer en copie", "reload": "Recharger" }, "deleteConfirm": { "title": "Confirmer la suppression", "descriptionWithTarget": "Supprimer {kind} \"{name}\" ? Cette action est irréversible.", "descriptionFallback": "Cette action est irréversible.", "kindDirectory": "dossier", "kindFile": "fichier" }, "rollbackConfirm": { "title": "Confirmer l'annulation", "descriptionWithTarget": "Annuler les modifications locales du fichier \"{name}\" ?", "descriptionFallback": "Annuler les modifications locales de ce fichier ?" }, "terminalTitle": "Console · {name}" }, "commandDropdown": { "loading": "Chargement...", "addCommand": "Ajouter une commande", "manageCommands": "Gérer les commandes...", "runCommandTitle": "Exécuter : {command}", "stopCommandTitle": "Arrêter : {command}", "manageDialog": { "title": "Gérer les commandes", "empty": "Aucune commande pour le moment", "namePlaceholder": "Nom", "commandPlaceholder": "Commande", "add": "Ajouter", "saving": "Enregistrement..." } }, "workspaceContext": { "confirmCloseDirtyTab": "Fermer « {title} » sans enregistrer ?", "confirmCloseOtherDirtyTabs": "Fermer les autres onglets avec des modifications non enregistrées ?", "confirmCloseAllDirtyTabs": "Fermer tous les onglets avec des modifications non enregistrées ?", "unableLoadContent": "Impossible de charger le contenu.\n\n{message}", "previewRequestTimedOut": "La requête de prévisualisation a expiré", "diffRequestTimedOut": "La requête Diff a expiré", "branchCompareRequestTimedOut": "La requête de comparaison de branches a expiré", "commitDiffRequestTimedOut": "La requête de Diff de commit a expiré", "saveRequestTimedOut": "La requête d’enregistrement a expiré", "reloadRequestTimedOut": "La requête de rechargement a expiré", "noChanges": "Aucun changement.", "noDiffOutput": "Aucune sortie diff.", "diffTitleWorkspace": "Diff · Espace de travail", "diffDescriptionWorkingTree": "Arbre de travail (HEAD)", "diffTitleFile": "Différence · {name}", "compareTitleFile": "Comparer · {name}", "compareTitleBranch": "Comparer · {branch}", "compareDescriptionPath": "{path} · comparer avec {branch}", "compareDescriptionBranch": "comparer avec {branch}", "diffTitleCommitFile": "Différence · {name} @ {hash}", "diffTitleCommit": "Différence · {hash}", "diffDescriptionCommitPath": "{path} · validation {commit}", "diffDescriptionCommit": "validation {commit}", "diffTitleConflictFile": "Conflit · {name}", "diffDescriptionConflict": "{path} · disque vs non enregistré" }, "chat": { "acpConnections": { "actions": { "openAgentsSettings": "Ouvrir les paramètres des agents", "retry": "Réessayer" }, "agentsSetupHint": "Ouvrez Paramètres > Agents pour gérer l'installation.", "withSetupHint": "{message}\n{hint}", "blocked": { "missingConfig": "Impossible de lire la configuration actuelle de l'agent.", "disabled": "{agent} est désactivé dans les paramètres des agents. Activez-le avant de vous connecter.", "unavailable": "{agent} n'est pas disponible sur la plateforme actuelle.", "sdkMissing": "Le SDK de {agent} n'est pas installé" }, "unableReadAgentConfig": "Impossible de lire la configuration de l'agent : {message}", "autoLinkFailedTitle": "Échec de l'auto-liaison de {agent}", "preflightCheckFailedDefault": "Les vérifications préalables ont échoué. Vérifiez les paramètres des agents.", "preflightFailedTitle": "Échec de la vérification préalable de {agent}", "autoLinkPreflightFailed": "Échec de la vérification préalable de l'auto-liaison : {message}", "connectFailedTitle": "Échec de la connexion de {agent}", "toolFallbackTitle": "Outil", "eventErrorTitle": "Erreur de l'agent", "notificationTurnComplete": "{agent} a terminé de répondre", "notificationError": "{agent} erreur : {message}" }, "connectionLifecycle": { "tasks": { "connectingTitle": "Connexion à {agent}", "connectingDescription": "Établissement de la connexion", "loadingSelectorsTitle": "Chargement des sélecteurs de {agent}", "loadingSelectorsDescription": "Récupération des options de mode et de configuration de session", "initSessionTitle": "Initializing {agent} session", "initSessionDescription": "Creating session and loading configuration" }, "errors": { "connectionFailed": "Échec de la connexion" } }, "shared": { "attachedResources": "Ressources jointes", "toolCallFailed": "Échec de l'appel d'outil" }, "messageThread": { "emptyTitle": "Aucun message pour le moment", "emptyDescription": "Commencez une conversation pour voir les messages ici" }, "chatInput": { "connecting": "Connexion...", "agentResponding": "{agent} répond...", "sendMessage": "Envoyer un message..." }, "messageInput": { "askAnything": "Posez n'importe quelle question...", "removeAttachmentAria": "Retirer {name}", "attachFiles": "Joindre des fichiers", "dropFilesToAttach": "Déposez des fichiers à joindre", "loadingSettings": "Chargement des paramètres...", "loadingMode": "Chargement du mode...", "cancel": "Annuler", "send": "Envoyer", "forkAndSend": "Fork & Envoyer" }, "messageQueue": { "addToQueue": "Mettre en file", "saveEdit": "Enregistrer", "cancelEdit": "Annuler la modification", "editItem": "Modifier", "deleteItem": "Supprimer" }, "welcomeInputPanel": { "agentsSettingsPath": "Paramètres > Agents", "autoConnectFallback": "Cliquez pour ouvrir {path} et gérer l'installation.", "autoConnectAppend": "{message}. Cliquez pour ouvrir {path} et gérer l'installation.", "enableAgentFirstPlaceholder": "Activez au moins un agent avant de démarrer une session...", "askAnythingPlaceholder": "Posez n'importe quelle question..." }, "agentSelector": { "noEnabledAgents": "Aucun agent activé", "openAgentsSettings": "Ouvrir les paramètres des agents" }, "agentPlanOverlay": { "title": "Plan de l'agent", "collapsePlanAria": "Réduire le plan", "collapsedSummary": "Plan de travail {completed}/{total}", "status": { "completed": "Terminé", "inProgress": "En cours", "pending": "En attente", "unknown": "Inconnu" }, "priority": { "high": "Haute", "medium": "Moyenne", "low": "Basse", "unknown": "Inconnue" } }, "permissionDialog": { "subtitle": "L'agent demande une autorisation pour continuer ce tour.", "kindFallbackTool": "outil", "command": "Commande", "cwd": "Répertoire de travail : {cwd}", "filesSummary": "Fichiers : {count}", "moreFiles": "+{count} fichiers supplémentaires", "plan": "Plan de travail", "allowedActions": "Actions autorisées", "targetMode": "Mode cible : {mode}" }, "questionDialog": { "title": "L'agent pose une question", "placeholder": "Tapez votre réponse...", "send": "Envoyer" }, "messageBranch": { "previousBranchAria": "Branche précédente", "nextBranchAria": "Branche suivante", "pageOf": "{current} sur {total}" }, "terminal": { "title": "Console", "running": "En cours" }, "reasoning": { "thinking": "Réflexion", "thoughtForFewSeconds": "Réflexion", "thoughtForSeconds": "Réflexion" }, "messageList": { "attachedResources": "Ressources jointes", "loading": "Chargement...", "error": "Erreur : {message}", "emptyConversation": "Aucun message dans cette conversation.", "systemMessage": "Message système" }, "liveTurnStats": { "thinking": "Réflexion...", "streaming": "Diffusion", "elapsedHours": "{value} h", "elapsedMinutes": "{value} min", "elapsedSeconds": "{value} s", "toolUseCount": "{count} outil {count, plural, one {use} other {uses}}" }, "tool": { "parameters": "Paramètres", "error": "Erreur", "result": "Résultat", "status": { "approvalRequested": "En attente d'approbation", "approvalResponded": "Répondu", "inputAvailable": "En cours", "inputStreaming": "En attente", "outputAvailable": "Terminé", "outputDenied": "Refusé", "outputError": "Erreur" } }, "toolCallBlock": { "tool": "Outil", "error": "Erreur", "result": "Résultat" }, "contentParts": { "showingTailOutput": "Affichage de la fin de la sortie pendant le streaming pour de meilleures performances.", "result": "Résultat", "unknown": "inconnu", "inputTruncated": "L'entrée a été tronquée — le diff peut être incomplet.", "replaceAll": "TOUT REMPLACER", "filesCount": "Fichiers : {count}", "update": "mettre à jour", "moreFiles": "+{count} fichiers supplémentaires", "timeoutMs": "Délai d'expiration : {timeout}ms", "backgroundTrue": "Arrière-plan : true", "offset": "Décalage : {offset}", "limit": "Limite : {limit}", "pages": "Pages : {pages}", "mode": "Mode : {mode}", "cell": "Cellule : {cell}", "pathLabel": "Chemin :", "globLabel": "Glob :", "typeLabel": "Type :", "outputLabel": "Sortie :", "caseInsensitive": "Insensible à la casse", "multiline": "Multiligne", "promptLabel": "Instruction", "subjectLabel": "Sujet", "taskLabel": "Tâche", "nameLabel": "Nom :", "field": { "file": "Fichier", "notebook": "Carnet", "command": "Commande", "old": "Ancien", "new": "Nouveau", "pattern": "Motif", "path": "Chemin", "query": "Requête", "url": "URL :", "description": "Détails", "content": "Contenu", "source": "Origine", "prompt": "Instruction", "subject": "Sujet", "taskId": "ID de tâche", "status": "Statut", "skill": "Skill", "args": "Arguments", "offset": "Décalage", "limit": "Limite", "glob": "Motif glob", "type": "Type de donnée", "output": "Sortie", "replaceAll": "Tout remplacer", "language": "Langue", "timeout": "Délai", "background": "Arrière-plan", "agentType": "Type d'agent", "library": "Bibliothèque", "libraryId": "ID de bibliothèque" }, "title": { "edit": "Modifier", "command": "Commande", "todoWrite": "TodoWrite (mise à jour des tâches)", "read": "Lire", "write": "Écrire", "notebookEdit": "NotebookEdit (édition du carnet)", "editFiles": "Modifier ({count} fichiers)", "editWithTarget": "Modifier {target}", "readWithTarget": "Lire {target}", "writeWithTarget": "Écrire {target}", "notebookEditWithTarget": "NotebookEdit ({target})", "globWithPattern": "Motif glob {pattern}", "grepWithPattern": "Motif grep {pattern}", "taskCreateWithSubject": "Créer une tâche : {subject}", "taskUpdateWithStatus": "Mettre à jour la tâche #{id} -> {status}", "taskUpdate": "Mettre à jour la tâche #{id}", "webFetchWithUrl": "WebFetch ({url})", "webSearchWithQuery": "Recherche web : {query}", "todosProgress": "Tâches ({done}/{total})", "skillWithName": "Skill : {name}", "genericWithContext": "{tool} ({context})" } } }, "diffPreview": { "mode": { "added": "Ajouté", "deleted": "Supprimé", "renamed": "Renommé", "modified": "Modifié" }, "hunkLabel": "Bloc {index}", "loadingHunk": "Chargement du hunk...", "noDiffData": "Aucune donnée diff" } }, "ProjectBoot": { "title": "Lanceur de projet", "tabs": { "shadcn": "shadcn" }, "config": { "base": "Base", "style": "Style", "baseColor": "Couleur de base", "theme": "Thème", "chartColor": "Couleur du graphique", "iconLibrary": "Bibliothèque d'icônes", "font": "Police", "fontHeading": "Police de titre", "menuAccent": "Accent du menu", "menuColor": "Couleur du menu", "radius": "Rayon", "template": "Modèle", "createProject": "Créer un projet", "sectionStyle": "Style", "sectionColors": "Couleurs", "sectionTypography": "Typographie", "sectionInterface": "Interface" }, "preview": { "loading": "Chargement de l'aperçu..." }, "createDialog": { "title": "Créer un projet", "projectName": "Nom du projet", "projectNamePlaceholder": "my-app", "frameworkTemplate": "Modèle de framework", "packageManager": "Gestionnaire de paquets", "saveDirectory": "Répertoire de sauvegarde", "saveDirectoryPlaceholder": "Sélectionner un répertoire...", "browseDirectory": "Parcourir", "projectPath": "Le projet sera créé dans : {path}", "advancedOptions": "Options avancées", "base": "Bibliothèque de base", "enableRtl": "Activer le support RTL", "enableRtlDescription": "Activer la prise en charge de la mise en page pour les langues de droite à gauche (ex. arabe, hébreu)", "pmChecking": "Vérification...", "pmNotInstalled": "Non installé", "cancel": "Annuler", "create": "Créer", "creating": "Création du projet..." }, "toasts": { "createFailed": "Échec de la création du projet", "createSuccess": "Projet créé avec succès" }, "errors": { "directoryExists": "Le répertoire cible existe déjà", "commandFailed": "La commande de création du projet a échoué." } }, "WebServiceSettings": { "sectionTitle": "Service Web", "sectionDescription": "Activer pour accéder à Codeg à distance via le navigateur", "port": "Port", "status": "Statut", "running": "En cours", "stopped": "Arrêté", "processing": "Traitement...", "start": "Démarrer", "stop": "Arrêter", "startFailed": "Échec du démarrage", "stopFailed": "Échec de l'arrêt", "open": "Ouvrir", "hide": "Masquer", "show": "Afficher", "copy": "Copier", "addressLabel": "Adresse d'accès", "tokenLabel": "Token d'accès", "tokenHint": "Entrez ce token lors du premier accès au client Web" }, "DirectoryBrowser": { "title": "Parcourir le répertoire", "pathPlaceholder": "Entrez le chemin du répertoire...", "goHome": "Aller au répertoire personnel", "navigateUp": "Aller au répertoire parent", "select": "Sélectionner", "cancel": "Annuler", "loading": "Chargement...", "emptyDirectory": "Ce répertoire est vide", "errorLoadingDir": "Échec du chargement du répertoire", "permissionDenied": "Permission refusée" }, "ChatChannelSettings": { "loading": "Chargement...", "sectionTitle": "Canaux de chat", "sectionDescription": "Configurez des bots IM pour recevoir des notifications d'événements et interroger l'activité de codage.", "addChannel": "Ajouter un canal", "noChannels": "Aucun canal de chat configuré pour le moment.", "channelName": "Nom", "channelNamePlaceholder": "Mon bot Telegram", "channelType": "Type de canal", "lark": "Lark (Feishu)", "weixin": "WeChat", "dailyReport": "Rapport quotidien", "dailyReportTime": "Heure du rapport", "nameRequired": "Le nom du canal est requis.", "tokenRequired": "Le token est requis.", "chatIdRequired": "Le Chat ID est requis.", "loadFailed": "Échec du chargement des canaux.", "saveFailed": "Échec de l'enregistrement.", "connectSuccess": "Canal connecté.", "connectFailed": "Échec de la connexion", "disconnectSuccess": "Canal déconnecté.", "disconnectFailed": "Échec de la déconnexion.", "testSuccess": "Test de connexion réussi.", "testFailed": "Test de connexion échoué", "deleteSuccess": "Canal supprimé.", "deleteFailed": "Échec de la suppression du canal.", "deleteConfirmTitle": "Supprimer le canal", "deleteConfirmMessage": "Le canal et ses journaux de messages seront définitivement supprimés. Êtes-vous sûr ?", "cancel": "Annuler", "delete": "Supprimer", "create": "Créer", "save": "Enregistrer", "channelListTitle": "Canaux configurés", "channelListDescription": "Les canaux activés se connectent automatiquement au démarrage du service.", "editChannel": "Modifier le canal", "editSuccess": "Canal mis à jour.", "tokenPlaceholderKeep": "Laisser vide pour conserver l'actuel", "weixinScanTitle": "Scanner le QR code", "weixinScanDescription": "Ouvrez WeChat et scannez le QR code pour vous connecter.", "weixinQrcodeExpired": "QR code expiré.", "weixinRefreshQrcode": "Actualiser", "weixinWaitingScan": "En attente du scan...", "weixinOpenQrcode": "Ouvrir le QR code dans le navigateur", "connect": "Connecter", "disconnect": "Déconnecter", "test": "Tester la connexion", "tabs": { "channels": "Canaux", "commands": "Commandes", "events": "Événements", "other": "Autres" }, "commands": { "title": "Commandes intégrées", "description": "Commandes bot disponibles dans les canaux de chat. Dans les chats de groupe, @Bot est requis pour traiter les messages.", "prefixLabel": "Préfixe de commande", "prefixDescription": "1-3 caractères non alphanumériques pour déclencher les commandes du bot (par défaut /).", "prefixSaved": "Préfixe de commande enregistré.", "prefixSaveFailed": "Échec de l'enregistrement du préfixe.", "prefixInvalid": "Le préfixe doit être de 1-3 caractères non alphanumériques.", "save": "Enregistrer", "folderDesc": "Sélectionner le dossier de travail", "agentDesc": "Sélectionner l'agent IA", "taskDesc": "Créer une session et exécuter la tâche", "sessionsDesc": "Lister les sessions actives du dossier", "resumeDesc": "Conversations récentes / reprendre une session", "cancelDesc": "Annuler la tâche en cours", "approveDesc": "Approuver la demande de permission de l'agent", "denyDesc": "Refuser la demande de permission de l'agent", "searchDesc": "Rechercher des conversations par mot-clé", "todayDesc": "Résumé de l'activité du jour", "statusDesc": "État de connexion du canal", "helpDesc": "Afficher l'aide" }, "events": { "title": "Notifications d'événements", "description": "Une fois activés, les événements déclenchés seront envoyés au canal.", "turnComplete": "Tour terminé", "turnCompleteDesc": "Lorsqu'un tour d'agent se termine", "error": "Erreur de l'agent", "errorDesc": "Lorsqu'un agent rencontre une erreur", "saved": "Filtre d'événements mis à jour.", "saveFailed": "Échec de l'enregistrement du filtre d'événements." }, "language": { "title": "Langue des messages", "description": "Langue utilisée pour les notifications d'événements, les réponses aux commandes et les rapports quotidiens envoyés aux canaux de chat.", "saved": "Langue des messages enregistrée.", "saveFailed": "Échec de l'enregistrement de la langue des messages.", "en": "Anglais", "zh-cn": "Chinois simplifié", "zh-tw": "Chinois traditionnel", "ja": "Japonais", "ko": "Coréen", "es": "Espagnol", "de": "Allemand", "fr": "Français", "pt": "Portugais", "ar": "Arabe" } } }