{
  "app": {
    "title": "Tableau de bord MCPHub",
    "error": "Erreur",
    "closeButton": "Fermer",
    "noServers": "Aucun serveur MCP disponible",
    "loading": "Chargement...",
    "logout": "Déconnexion",
    "profile": "Profil",
    "changePassword": "Changer le mot de passe",
    "toggleSidebar": "Basculer la barre latérale",
    "welcomeUser": "Bienvenue, {{username}}",
    "name": "MCPHub",
    "embeddingSyncProgress": "Embeddings pour {{serverName}}",
    "embeddingSyncProgressAriaLabel": "Création des embeddings pour {{serverName}} : {{current}} sur {{total}} terminés"
  },
  "about": {
    "title": "À propos",
    "versionInfo": "Version MCPHub : {{version}}",
    "newVersion": "Nouvelle version disponible !",
    "currentVersion": "Version actuelle",
    "newVersionAvailable": "La nouvelle version {{version}} est disponible",
    "viewOnGitHub": "Voir sur GitHub",
    "checkForUpdates": "Vérifier les mises à jour",
    "checking": "Vérification des mises à jour..."
  },
  "profile": {
    "viewProfile": "Voir le profil",
    "userCenter": "Centre utilisateur"
  },
  "sponsor": {
    "label": "Sponsor",
    "title": "Soutenir le projet",
    "rewardAlt": "QR Code de récompense",
    "supportMessage": "Soutenez le développement de MCPHub en m'offrant un café !",
    "supportButton": "Soutenir sur Ko-fi"
  },
  "wechat": {
    "label": "WeChat",
    "title": "Se connecter via WeChat",
    "qrCodeAlt": "QR Code WeChat",
    "scanMessage": "Scannez ce QR code pour nous contacter sur WeChat"
  },
  "discord": {
    "label": "Discord",
    "title": "Rejoignez notre serveur Discord",
    "community": "Rejoignez notre communauté grandissante sur Discord pour du support, des discussions et des mises à jour !"
  },
  "theme": {
    "title": "Thème",
    "light": "Clair",
    "dark": "Sombre",
    "system": "Système"
  },
  "auth": {
    "login": "Connexion",
    "loginTitle": "Se connecter à MCPHub",
    "slogan": "Le Hub unifié pour les serveurs MCP",
    "subtitle": "Plateforme de gestion centralisée pour les serveurs Model Context Protocol. Organisez, surveillez et mettez à l'échelle plusieurs serveurs MCP avec des stratégies de routage flexibles.",
    "username": "Nom d'utilisateur",
    "password": "Mot de passe",
    "loggingIn": "Connexion en cours...",
    "orContinue": "Ou continuer avec",
    "loginWithGoogle": "Continuer avec Google",
    "loginWithGithub": "Continuer avec GitHub",
    "loginWithOIDC": "Continuer avec OIDC",
    "socialLoginFailed": "La connexion sociale a échoué. Veuillez réessayer.",
    "emptyFields": "Le nom d'utilisateur et le mot de passe ne peuvent pas être vides",
    "loginFailed": "Échec de la connexion, veuillez vérifier votre nom d'utilisateur et votre mot de passe",
    "loginError": "Une erreur est survenue lors de la connexion",
    "serverUnavailable": "Impossible de se connecter au serveur. Veuillez vérifier votre connexion réseau ou réessayer plus tard",
    "currentPassword": "Mot de passe actuel",
    "newPassword": "Nouveau mot de passe",
    "confirmPassword": "Confirmer le mot de passe",
    "passwordsNotMatch": "Le nouveau mot de passe et la confirmation ne correspondent pas",
    "changePasswordSuccess": "Mot de passe changé avec succès",
    "changePasswordError": "Échec du changement de mot de passe",
    "changePassword": "Changer le mot de passe",
    "passwordChanged": "Mot de passe changé avec succès",
    "passwordChangeError": "Échec du changement de mot de passe",
    "defaultPasswordWarning": "Avertissement de sécurité du mot de passe par défaut",
    "defaultPasswordMessage": "Vous utilisez le mot de passe par défaut (admin123), ce qui présente un risque de sécurité. Veuillez changer votre mot de passe immédiatement pour protéger votre compte.",
    "goToSettings": "Aller aux paramètres",
    "passwordStrengthError": "Le mot de passe ne répond pas aux exigences de sécurité",
    "passwordMinLength": "Le mot de passe doit contenir au moins 8 caractères",
    "passwordRequireLetter": "Le mot de passe doit contenir au moins une lettre",
    "passwordRequireNumber": "Le mot de passe doit contenir au moins un chiffre",
    "passwordRequireSpecial": "Le mot de passe doit contenir au moins un caractère spécial",
    "passwordStrengthHint": "Le mot de passe doit contenir au moins 8 caractères et inclure des lettres, des chiffres et des caractères spéciaux"
  },
  "server": {
    "addServer": "Ajouter un serveur",
    "add": "Ajouter",
    "edit": "Modifier",
    "copy": "Copier",
    "delete": "Supprimer",
    "confirmDelete": "Êtes-vous sûr de vouloir supprimer ce serveur ?",
    "deleteWarning": "La suppression du serveur '{{name}}' le supprimera ainsi que toutes ses données. Cette action est irréversible.",
    "status": "Statut",
    "tools": "Outils",
    "prompts": "Invites",
    "name": "Nom du serveur",
    "description": "Note du serveur",
    "descriptionPlaceholder": "Optionnel : décrivez l'utilité de ce serveur",
    "url": "URL du serveur",
    "apiKey": "Clé API",
    "save": "Enregistrer",
    "cancel": "Annuler",
    "invalidConfig": "Impossible de trouver les données de configuration pour {{serverName}}",
    "addError": "Échec de l'ajout du serveur",
    "editError": "Échec de la modification du serveur {{serverName}}",
    "deleteError": "Échec de la suppression du serveur {{serverName}}",
    "updateError": "Échec de la mise à jour du serveur",
    "editTitle": "Modifier le serveur : {{serverName}}",
    "type": "Type de serveur",
    "typeStdio": "STDIO",
    "typeSse": "SSE",
    "typeStreamableHttp": "HTTP diffusable",
    "typeOpenapi": "OpenAPI",
    "command": "Commande",
    "arguments": "Arguments",
    "envVars": "Variables d'environnement",
    "headers": "En-têtes HTTP",
    "key": "clé",
    "value": "valeur",
    "enabled": "Activé",
    "enable": "Activer",
    "disable": "Désactiver",
    "reload": "Recharger",
    "reloadSuccess": "Serveur rechargé avec succès",
    "reloadError": "Échec du rechargement du serveur {{serverName}}",
    "requestOptions": "Configuration de la connexion",
    "timeout": "Délai d'attente de la requête",
    "timeoutDescription": "Délai d'attente pour les requêtes vers le serveur MCP (ms)",
    "maxTotalTimeout": "Délai d'attente total maximum",
    "maxTotalTimeoutDescription": "Délai d'attente total maximum pour les requêtes envoyées au serveur MCP (ms) (à utiliser avec les notifications de progression)",
    "resetTimeoutOnProgress": "Réinitialiser le délai d'attente en cas de progression",
    "resetTimeoutOnProgressDescription": "Réinitialiser le délai d'attente lors des notifications de progression (activé par défaut)",
    "keepAlive": "Configuration du maintien de connexion",
    "enableKeepAlive": "Activer le maintien de connexion",
    "keepAliveDescription": "Envoyer des requêtes ping périodiques pour maintenir la connexion. Utile pour les connexions de longue durée qui peuvent expirer.",
    "keepAliveInterval": "Intervalle (ms)",
    "keepAliveIntervalDescription": "Temps entre les pings de maintien de connexion en millisecondes (par défaut : 60000ms = 1 minute)",
    "remove": "Retirer",
    "toggleError": "Échec du basculement du serveur {{serverName}}",
    "alreadyExists": "Le serveur {{serverName}} existe déjà",
    "invalidData": "Données de serveur invalides fournies",
    "notFound": "Serveur {{serverName}} non trouvé",
    "namePlaceholder": "Entrez le nom du serveur",
    "urlPlaceholder": "Entrez l'URL du serveur",
    "commandPlaceholder": "Entrez la commande",
    "argumentsPlaceholder": "Entrez les arguments",
    "errorDetails": "Détails de l'erreur",
    "viewErrorDetails": "Voir les détails de l'erreur",
    "copyConfig": "Copier la configuration",
    "confirmVariables": "Confirmer la configuration des variables",
    "variablesDetected": "Variables détectées dans la configuration. Veuillez confirmer que ces variables sont correctement configurées :",
    "detectedVariables": "Variables détectées",
    "confirmVariablesMessage": "Veuillez vous assurer que ces variables sont correctement définies dans votre environnement d'exécution. Continuer l'ajout du serveur ?",
    "confirmAndAdd": "Confirmer et ajouter",
    "openapi": {
      "inputMode": "Mode de saisie",
      "inputModeUrl": "URL de la spécification",
      "inputModeSchema": "Schéma JSON",
      "specUrl": "URL de la spécification OpenAPI",
      "schema": "Schéma JSON OpenAPI",
      "schemaHelp": "Collez votre schéma JSON OpenAPI complet ici",
      "security": "Type de sécurité",
      "securityNone": "Aucun",
      "securityApiKey": "Clé API",
      "securityHttp": "Authentification HTTP",
      "securityOAuth2": "OAuth 2.0",
      "securityOpenIdConnect": "OpenID Connect",
      "apiKeyConfig": "Configuration de la clé API",
      "apiKeyName": "Nom de l'en-tête/paramètre",
      "apiKeyIn": "Emplacement",
      "apiKeyValue": "Valeur de la clé API",
      "httpAuthConfig": "Configuration de l'authentification HTTP",
      "httpScheme": "Schéma d'authentification",
      "httpCredentials": "Identifiants",
      "httpSchemeBasic": "Basic",
      "httpSchemeBearer": "Bearer",
      "httpSchemeDigest": "Digest",
      "oauth2Config": "Configuration OAuth 2.0",
      "oauth2Token": "Jeton d'accès",
      "openIdConnectConfig": "Configuration OpenID Connect",
      "openIdConnectUrl": "URL de découverte",
      "openIdConnectToken": "Jeton d'identification",
      "apiKeyInHeader": "En-tête",
      "apiKeyInQuery": "Requête",
      "apiKeyInCookie": "Cookie",
      "passthroughHeaders": "En-têtes de transmission",
      "passthroughHeadersHelp": "Liste séparée par des virgules des noms d’en-têtes à transmettre des requêtes MCP entrantes vers les requêtes du serveur en amont (par ex. : Authorization, X-API-Key)"
    },
    "oauth": {
      "sectionTitle": "Configuration OAuth",
      "sectionDescription": "Configurez les identifiants client pour les serveurs protégés par OAuth (optionnel).",
      "clientId": "Identifiant client",
      "clientSecret": "Secret client",
      "authorizationEndpoint": "Point de terminaison d'autorisation",
      "tokenEndpoint": "Point de terminaison de jeton",
      "scopes": "Scopes",
      "scopesPlaceholder": "scope1 scope2",
      "resource": "Ressource / Audience",
      "accessToken": "Jeton d'accès",
      "refreshToken": "Jeton d'actualisation"
    }
  },
  "status": {
    "online": "En ligne",
    "offline": "Hors ligne",
    "connecting": "Connexion en cours",
    "oauthRequired": "OAuth requis",
    "clickToAuthorize": "Cliquez pour autoriser avec OAuth",
    "oauthWindowOpened": "Fenêtre d'autorisation OAuth ouverte. Veuillez compléter l'autorisation."
  },
  "errors": {
    "general": "Une erreur est survenue",
    "network": "Erreur de connexion réseau. Veuillez vérifier votre connexion Internet",
    "serverConnection": "Impossible de se connecter au serveur. Veuillez vérifier si le serveur est en cours d'exécution",
    "serverAdd": "Échec de l'ajout du serveur. Veuillez vérifier l'état du serveur",
    "serverUpdate": "Échec de la modification du serveur {{serverName}}. Veuillez vérifier l'état du serveur",
    "serverFetch": "Échec de la récupération des données du serveur. Veuillez réessayer plus tard",
    "failedToReloadServer": "Échec du rechargement du serveur",
    "initialStartup": "Le serveur est peut-être en cours de démarrage. Veuillez patienter un instant car ce processus peut prendre du temps au premier lancement...",
    "serverInstall": "Échec de l'installation du serveur",
    "failedToFetchSettings": "Échec de la récupération des paramètres",
    "failedToUpdateRouteConfig": "Échec de la mise à jour de la configuration de routage",
    "failedToUpdateSmartRoutingConfig": "Échec de la mise à jour de la configuration du routage intelligent",
    "failedToUpdateBetterAuthConfig": "Échec de la mise à jour de la configuration Better Auth"
  },
  "common": {
    "processing": "En cours de traitement...",
    "save": "Enregistrer",
    "cancel": "Annuler",
    "back": "Retour",
    "refresh": "Actualiser",
    "search": "Rechercher",
    "clear": "Effacer",
    "view": "Voir",
    "create": "Créer",
    "creating": "Création en cours...",
    "update": "Mettre à jour",
    "updating": "Mise à jour en cours...",
    "submitting": "Envoi en cours...",
    "delete": "Supprimer",
    "remove": "Retirer",
    "copy": "Copier",
    "copyId": "Copier l'ID",
    "copyUrl": "Copier l'URL",
    "copyJson": "Copier le JSON",
    "copySuccess": "Copié dans le presse-papiers",
    "copyFailed": "Échec de la copie",
    "copied": "Copié",
    "close": "Fermer",
    "confirm": "Confirmer",
    "language": "Langue",
    "true": "Vrai",
    "false": "Faux",
    "dismiss": "Rejeter",
    "github": "GitHub",
    "wechat": "WeChat",
    "discord": "Discord",
    "itemsPerPage": "Éléments par page",
    "showing": "Affichage de {{start}}-{{end}} sur {{total}}",
    "previous": "Précédent",
    "next": "Suivant",
    "required": "Requis",
    "secret": "Secret",
    "default": "Défaut",
    "value": "Valeur",
    "type": "Type",
    "repeated": "Répété",
    "valueHint": "Indice de valeur",
    "choices": "Choix",
    "actions": "Actions",
    "saving": "Enregistrement...",
    "active": "Actif",
    "inactive": "Inactif",
    "viewAll": "Voir tout",
    "docs": "Docs",
    "all": "Tout"
  },
  "pagination": {
    "rowsPerPage": "Lignes par page",
    "showing": "Affichage de {{from}}-{{to}} sur {{total}}"
  },
  "nav": {
    "dashboard": "Tableau de bord",
    "servers": "Serveurs",
    "groups": "Groupes",
    "prompts": "Prompts",
    "resources": "Ressources",
    "users": "Utilisateurs",
    "settings": "Paramètres",
    "changePassword": "Changer le mot de passe",
    "market": "Marché",
    "cloud": "Marché Cloud",
    "logs": "Journaux",
    "activity": "Activité",
    "workspace": "Espace de travail",
    "system": "Système"
  },
  "pages": {
    "dashboard": {
      "title": "Tableau de bord",
      "totalServers": "Total",
      "onlineServers": "En ligne",
      "disabledServers": "Désactivés",
      "offlineServers": "Hors ligne",
      "connectingServers": "En connexion",
      "recentServers": "Serveurs récents"
    },
    "servers": {
      "title": "Gestion des serveurs"
    },
    "groups": {
      "title": "Gestion des groupes"
    },
    "prompts": {
      "title": "Prompts intégrés"
    },
    "resources": {
      "title": "Ressources intégrées"
    },
    "users": {
      "title": "Gestion des utilisateurs"
    },
    "settings": {
      "title": "Paramètres",
      "language": "Langue",
      "account": "Paramètres du compte",
      "password": "Changer le mot de passe",
      "appearance": "Apparence",
      "routeConfig": "Sécurité",
      "installConfig": "Installation",
      "smartRouting": "Routage intelligent",
      "oauthServer": "Serveur OAuth"
    },
    "market": {
      "title": "Marché Hub - Marchés locaux et Cloud"
    },
    "logs": {
      "title": "Journaux système"
    }
  },
  "logs": {
    "filters": "Filtres",
    "search": "Rechercher dans les journaux...",
    "autoScroll": "Défilement automatique",
    "clearLogs": "Effacer les journaux",
    "loading": "Chargement des journaux...",
    "noLogs": "Aucun journal disponible.",
    "noMatch": "Aucun journal ne correspond aux filtres actuels.",
    "mainProcess": "Processus principal",
    "childProcess": "Processus enfant",
    "main": "Principal",
    "child": "Enfant"
  },
  "groups": {
    "add": "Ajouter",
    "addNew": "Ajouter un nouveau groupe",
    "edit": "Modifier le groupe",
    "delete": "Supprimer",
    "confirmDelete": "Êtes-vous sûr de vouloir supprimer ce groupe ?",
    "deleteWarning": "La suppression du groupe '{{name}}' le supprimera ainsi que toutes ses associations de serveurs. Cette action est irréversible.",
    "name": "Nom du groupe",
    "namePlaceholder": "Entrez le nom du groupe",
    "nameRequired": "Le nom du groupe est requis",
    "description": "Description",
    "descriptionPlaceholder": "Entrez la description du groupe (facultatif)",
    "createError": "Échec de la création du groupe",
    "updateError": "Échec de la mise à jour du groupe",
    "deleteError": "Échec de la suppression du groupe",
    "serverAddError": "Échec de l'ajout du serveur au groupe",
    "serverRemoveError": "Échec de la suppression du serveur du groupe",
    "addServer": "Ajouter un serveur au groupe",
    "selectServer": "Sélectionnez un serveur à ajouter",
    "servers": "Serveurs dans le groupe",
    "remove": "Retirer",
    "noGroups": "Aucun groupe disponible. Créez un nouveau groupe pour commencer.",
    "noServers": "Aucun serveur dans ce groupe.",
    "noServerOptions": "Aucun serveur disponible",
    "serverCount": "{{count}} serveurs",
    "toolSelection": "Sélection d'outils",
    "promptSelection": "Sélection des prompts",
    "resourceSelection": "Sélection des ressources",
    "toolsSelected": "Sélectionné",
    "promptsSelected": "Sélectionné",
    "resourcesSelected": "Sélectionné",
    "allTools": "Tous",
    "allPrompts": "Tous les prompts",
    "allResources": "Toutes les ressources",
    "selectedTools": "Outils sélectionnés",
    "selectedPrompts": "Prompts sélectionnés",
    "selectedResources": "Ressources sélectionnées",
    "selectAll": "Tout sélectionner",
    "selectNone": "Ne rien sélectionner",
    "configureTools": "Configurer les outils",
    "configureCapabilities": "Configurer les outils, prompts et ressources",
    "previewPrompts": "[prompts : {{items}}]",
    "previewResources": "[ressources : {{items}}]",
    "previewAllTools": "(tous les outils)",
    "previewAllPrompts": "(tous les prompts)",
    "previewAllResources": "(toutes les ressources)"
  },
  "market": {
    "title": "Installation locale",
    "official": "Officiel",
    "by": "Par",
    "unknown": "Inconnu",
    "tools": "outils",
    "search": "Rechercher",
    "searchPlaceholder": "Rechercher des serveurs par nom, catégorie ou tags",
    "clearFilters": "Effacer",
    "clearCategoryFilter": "",
    "clearTagFilter": "",
    "categories": "Catégories",
    "tags": "Tags",
    "showTags": "Afficher les tags",
    "hideTags": "Masquer les tags",
    "moreTags": "",
    "noServers": "Aucun serveur trouvé correspondant à votre recherche",
    "backToList": "Retour à la liste",
    "install": "Installer",
    "installing": "Installation en cours...",
    "installed": "Installé",
    "installServer": "Installer le serveur : {{name}}",
    "installSuccess": "Serveur {{serverName}} installé avec succès",
    "author": "Auteur",
    "license": "Licence",
    "repository": "Dépôt",
    "examples": "Exemples",
    "arguments": "Arguments",
    "argumentName": "Nom",
    "description": "Description",
    "required": "Requis",
    "example": "Exemple",
    "viewSchema": "Voir le schéma",
    "fetchError": "Erreur lors de la récupération des serveurs du marché",
    "serverNotFound": "Serveur non trouvé",
    "searchError": "Erreur lors de la recherche de serveurs",
    "filterError": "Erreur lors du filtrage des serveurs par catégorie",
    "tagFilterError": "Erreur lors du filtrage des serveurs par tag",
    "noInstallationMethod": "Aucune méthode d'installation disponible pour ce serveur",
    "showing": "Affichage de {{from}}-{{to}} sur {{total}} serveurs",
    "perPage": "Par page",
    "confirmVariablesMessage": "Veuillez vous assurer que ces variables sont correctement définies dans votre environnement d'exécution. Continuer l'installation du serveur ?",
    "confirmAndInstall": "Confirmer et installer"
  },
  "oauthServer": {
    "authorizeTitle": "Autoriser l'application",
    "authorizeSubtitle": "Autorisez cette application à accéder à votre compte MCPHub.",
    "buttons": {
      "approve": "Autoriser l'accès",
      "deny": "Refuser",
      "approveSubtitle": "Recommandé si vous faites confiance à cette application.",
      "denySubtitle": "Vous pourrez toujours accorder l'accès plus tard."
    }
  },
  "cloud": {
    "title": "Support Cloud",
    "subtitle": "Propulsé par MCPRouter",
    "by": "Par",
    "server": "Serveur",
    "config": "Config",
    "created": "Créé",
    "updated": "Mis à jour",
    "available": "Disponible",
    "description": "Description",
    "details": "Détails",
    "tools": "Outils",
    "tool": "outil",
    "toolsAvailable": "{{count}} outil disponible||{{count}} outils disponibles",
    "loadingTools": "Chargement des outils...",
    "noTools": "Aucun outil disponible pour ce serveur",
    "noDescription": "Aucune description disponible",
    "viewDetails": "Voir les détails",
    "parameters": "Paramètres",
    "result": "Résultat",
    "error": "Erreur",
    "callTool": "Appeler",
    "calling": "Appel en cours...",
    "toolCallSuccess": "L'outil {{toolName}} a été exécuté avec succès",
    "toolCallError": "Échec de l'appel de l'outil {{toolName}} : {{error}}",
    "viewSchema": "Voir le schéma",
    "backToList": "Retour au marché Cloud",
    "search": "Rechercher",
    "searchPlaceholder": "Rechercher des serveurs cloud par nom, titre ou auteur",
    "clearFilters": "Effacer les filtres",
    "clearCategoryFilter": "Effacer",
    "clearTagFilter": "Effacer",
    "categories": "Catégories",
    "tags": "Tags",
    "noCategories": "Aucune catégorie trouvée",
    "noTags": "Aucun tag trouvé",
    "noServers": "Aucun serveur cloud trouvé",
    "fetchError": "Erreur lors de la récupération des serveurs cloud",
    "serverNotFound": "Serveur cloud non trouvé",
    "searchError": "Erreur lors de la recherche de serveurs cloud",
    "filterError": "Erreur lors du filtrage des serveurs cloud par catégorie",
    "tagFilterError": "Erreur lors du filtrage des serveurs cloud par tag",
    "showing": "Affichage de {{from}}-{{to}} sur {{total}} serveurs cloud",
    "perPage": "Par page",
    "apiKeyNotConfigured": "Clé API MCPRouter non configurée",
    "apiKeyNotConfiguredDescription": "Pour utiliser les serveurs cloud, vous devez configurer votre clé API MCPRouter.",
    "getApiKey": "Obtenir une clé API",
    "configureInSettings": "Configurer dans les paramètres",
    "installServer": "Installer {{name}}",
    "installSuccess": "Serveur {{name}} installé avec succès",
    "installError": "Échec de l'installation du serveur : {{error}}"
  },
  "registry": {
    "title": "Registre",
    "official": "Officiel",
    "latest": "Dernière version",
    "description": "Description",
    "website": "Site web",
    "repository": "Dépôt",
    "packages": "Paquets",
    "package": "paquet",
    "remotes": "Services distants",
    "remote": "service distant",
    "published": "Publié",
    "updated": "Mis à jour",
    "install": "Installer",
    "installing": "Installation...",
    "installed": "Installé",
    "installServer": "Installer {{name}}",
    "installSuccess": "Serveur {{name}} installé avec succès",
    "installError": "Échec de l'installation du serveur : {{error}}",
    "noDescription": "Aucune description disponible",
    "viewDetails": "Voir les détails",
    "backToList": "Retour au registre",
    "search": "Rechercher",
    "searchPlaceholder": "Rechercher des serveurs par nom",
    "clearFilters": "Effacer",
    "noServers": "Aucun serveur trouvé dans le registre",
    "fetchError": "Erreur lors de la récupération des serveurs du registre",
    "serverNotFound": "Serveur du registre non trouvé",
    "showing": "Affichage de {{from}}-{{to}} sur {{total}} serveurs du registre",
    "perPage": "Par page",
    "environmentVariables": "Variables d'environnement",
    "packageArguments": "Arguments du paquet",
    "runtimeArguments": "Arguments d'exécution",
    "headers": "En-têtes"
  },
  "tool": {
    "run": "Exécuter",
    "running": "Exécution en cours...",
    "runTool": "Exécuter l'outil",
    "cancel": "Annuler",
    "noDescription": "Aucune description disponible",
    "inputSchema": "Schéma d'entrée :",
    "runToolWithName": "Exécuter l'outil : {{name}}",
    "execution": "Exécution de l'outil",
    "successful": "Réussi",
    "failed": "Échoué",
    "result": "Résultat :",
    "error": "Erreur",
    "errorDetails": "Détails de l'erreur :",
    "noContent": "L'outil a été exécuté avec succès mais n'a renvoyé aucun contenu.",
    "unknownError": "Une erreur inconnue est survenue",
    "jsonResponse": "Réponse JSON :",
    "toolResult": "Résultat de l'outil",
    "noParameters": "Cet outil ne nécessite aucun paramètre.",
    "selectOption": "Sélectionnez une option",
    "enterValue": "Entrez la valeur {{type}}",
    "enabled": "Activé",
    "enableSuccess": "Outil {{name}} activé avec succès",
    "disableSuccess": "Outil {{name}} désactivé avec succès",
    "toggleFailed": "Échec du basculement de l'état de l'outil",
    "descriptionUpdateSuccess": "Description de l'outil mise à jour avec succès",
    "descriptionUpdateFailed": "Échec de la mise à jour de la description de l'outil",
    "restoreDefault": "Restaurer par défaut",
    "restoreDefaultSuccess": "La description de l'outil a été restaurée à sa valeur par défaut",
    "restoreDefaultFailed": "Échec de la restauration de la description par défaut de l'outil",
    "parameters": "Paramètres de l'outil",
    "formMode": "Mode formulaire",
    "jsonMode": "Mode JSON",
    "jsonConfiguration": "Configuration JSON",
    "invalidJsonFormat": "Format JSON invalide",
    "fixJsonBeforeSwitching": "Veuillez corriger le format JSON avant de passer en mode formulaire",
    "item": "Élément {{index}}",
    "addItem": "Ajouter un élément {{key}}",
    "enterKey": "Entrez {{key}}"
  },
  "prompt": {
    "run": "Obtenir",
    "running": "Obtention en cours...",
    "result": "Résultat de l'invite",
    "error": "Erreur de l'invite",
    "execution": "Exécution de l'invite",
    "successful": "Réussi",
    "failed": "Échoué",
    "errorDetails": "Détails de l'erreur :",
    "noContent": "L'invite a été exécutée avec succès mais n'a renvoyé aucun contenu.",
    "unknownError": "Une erreur inconnue est survenue",
    "jsonResponse": "Réponse JSON :",
    "description": "Description",
    "messages": "Messages",
    "noDescription": "Aucune description disponible",
    "runPromptWithName": "Obtenir l'invite : {{name}}",
    "descriptionUpdateSuccess": "Description de l'invite mise à jour avec succès",
    "descriptionUpdateFailed": "Échec de la mise à jour de la description de l'invite",
    "restoreDefault": "Restaurer par défaut",
    "restoreDefaultSuccess": "La description de l'invite a été restaurée à sa valeur par défaut",
    "restoreDefaultFailed": "Échec de la restauration de la description par défaut de l'invite"
  },
  "settings": {
    "subtitle": "Configurez les paramètres système, l'authentification, le routage et les intégrations de serveurs MCP.",
    "enableGlobalRoute": "Activer la route globale",
    "enableGlobalRouteDescription": "Autoriser les connexions au point de terminaison /sse sans spécifier d'ID de groupe",
    "enableGroupNameRoute": "Activer la route par nom de groupe",
    "enableGroupNameRouteDescription": "Autoriser les connexions au point de terminaison /sse en utilisant les noms de groupe au lieu des ID de groupe",
    "enableBearerAuth": "Activer l'authentification Bearer",
    "enableBearerAuthDescription": "Exiger une authentification par jeton Bearer pour les points de terminaison MCP (activé par défaut)",
    "bearerAuthKey": "Clé d'authentification Bearer",
    "bearerAuthKeyDescription": "La clé d'authentification qui sera requise dans le jeton Bearer",
    "bearerAuthKeyPlaceholder": "Entrez la clé d'authentification Bearer",
    "bearerAuthHeaderName": "Nom de l'en-tête Bearer",
    "bearerAuthHeaderNameDescription": "Nom de l'en-tête utilisé pour recevoir les identifiants Bearer MCP. Modifiez-le si les en-têtes transmis en amont utilisent aussi Authorization.",
    "bearerAuthHeaderNamePlaceholder": "ex. Authorization ou X-MCP-Authorization",
    "bearerKeysSectionTitle": "Clés",
    "bearerKeysSectionDescription": "Gérez plusieurs clés avec différentes portées d’accès.",
    "noBearerKeys": "Aucune clé configurée pour le moment.",
    "bearerKeyName": "Nom",
    "bearerKeyToken": "Jeton",
    "bearerKeyEnabled": "Activée",
    "bearerKeyAccessType": "Portée d’accès",
    "bearerKeyAccessAll": "Toutes",
    "bearerKeyAccessGroups": "Groupes",
    "bearerKeyAccessServers": "Serveurs",
    "bearerKeyAccessCustom": "Personnalisée",
    "bearerKeyAllowedGroups": "Groupes autorisés",
    "bearerKeyAllowedServers": "Serveurs autorisés",
    "addBearerKey": "Ajouter une clé",
    "addBearerKeyButton": "Créer",
    "bearerKeyRequired": "Le nom et le jeton sont obligatoires",
    "bearerKeyNameRequired": "Le nom est obligatoire",
    "bearerKeyOwnerRequired": "Le propriétaire est obligatoire",
    "bearerKeyKind": "Type de clé",
    "bearerKeyKindSystem": "Système",
    "bearerKeyKindUser": "Utilisateur",
    "bearerKeyOwner": "Propriétaire",
    "bearerKeySelectOwner": "Sélectionner un utilisateur...",
    "bearerKeyAccessUserVisibility": "Visibilité de l’utilisateur",
    "bearerKeyShownOnce": "Copiez ce jeton maintenant. Il ne sera plus affiché.",
    "deleteBearerKeyConfirm": "Voulez-vous vraiment supprimer cette clé ?",
    "generate": "Générer",
    "selectGroups": "Sélectionner des groupes",
    "selectServers": "Sélectionner des serveurs",
    "selectAtLeastOneGroup": "Veuillez sélectionner au moins un groupe",
    "selectAtLeastOneServer": "Veuillez sélectionner au moins un serveur",
    "skipAuth": "Ignorer l'authentification",
    "skipAuthDescription": "Autoriser l'accès au tableau de bord sans connexion ; les utilisateurs non authentifiés obtiennent un accès administrateur guest (n'affecte pas l'auth MCP)",
    "jsonBodyLimit": "Limite de taille du corps JSON",
    "jsonBodyLimitDescription": "Limite de taille des requêtes JSON Express. Les gros téléchargements de schémas OpenAPI utilisent aussi ce paramètre.",
    "jsonBodyLimitPlaceholder": "ex. 1mb, 5mb, 1024kb",
    "pythonIndexUrl": "URL du dépôt de paquets Python",
    "pythonIndexUrlDescription": "Définir la variable d'environnement UV_DEFAULT_INDEX pour l'installation de paquets Python",
    "pythonIndexUrlPlaceholder": "ex. https://pypi.org/simple",
    "npmRegistry": "URL du registre NPM",
    "npmRegistryDescription": "Définir la variable d'environnement npm_config_registry pour l'installation de paquets NPM",
    "npmRegistryPlaceholder": "ex. https://registry.npmjs.org/",
    "baseUrl": "URL de base",
    "baseUrlDescription": "URL de base pour les requêtes MCP et les callbacks OAuth",
    "baseUrlPlaceholder": "ex. http://localhost:3000",
    "installConfig": "Installation",
    "systemConfigUpdated": "Configuration système mise à jour avec succès",
    "betterAuthTitle": "Better Auth",
    "betterAuthEnvNote": "Les identifiants et secrets client proviennent toujours des variables d'environnement. Modifier les paramètres Better Auth peut nécessiter un redémarrage de l'application, et l'origine de l'URL de base d'installation est ajoutée automatiquement aux origines approuvées.",
    "enableBetterAuth": "Activer Better Auth",
    "enableBetterAuthDescription": "Activez la connexion sociale et OIDC lorsque les variables d'environnement requises sont configurées.",
    "betterAuthBasePath": "Chemin de base d'authentification",
    "betterAuthBasePathDescription": "Chemin API relatif utilisé par les routes Better Auth.",
    "betterAuthTrustedOrigins": "Origines approuvées",
    "betterAuthTrustedOriginsDescription": "Origines séparées par des virgules autorisées pour les requêtes Better Auth. L'origine de l'URL de base d'installation est ajoutée automatiquement.",
    "betterAuthProviders": "Fournisseurs",
    "betterAuthProvidersDescription": "Les interrupteurs des fournisseurs contrôlent les méthodes de connexion affichées sur la page de connexion.",
    "betterAuthGoogleDescription": "Nécessite GOOGLE_CLIENT_ID et GOOGLE_CLIENT_SECRET.",
    "betterAuthGithubDescription": "Nécessite GITHUB_CLIENT_ID et GITHUB_CLIENT_SECRET.",
    "betterAuthOidcDescription": "Nécessite les identifiants client OIDC ainsi qu'une URL de découverte.",
    "betterAuthOidcProviderId": "Identifiant du fournisseur OIDC",
    "betterAuthOidcProviderIdDescription": "Identifiant du fournisseur utilisé pour démarrer le flux de connexion OIDC.",
    "betterAuthOidcDiscoveryUrl": "URL de découverte OIDC",
    "betterAuthOidcDiscoveryUrlDescription": "URL de configuration OpenID Connect publiée par votre fournisseur d'identité.",
    "betterAuthOidcScopes": "Scopes OIDC",
    "betterAuthOidcScopesDescription": "Scopes séparés par des virgules demandés pendant le flux de connexion OIDC.",
    "betterAuthOidcPrompt": "Prompt OIDC",
    "betterAuthOidcPromptDescription": "Valeur de prompt optionnelle envoyée au fournisseur d'identité, par exemple login ou consent.",
    "betterAuthOidcPkce": "Activer PKCE",
    "betterAuthOidcPkceDescription": "Utiliser PKCE pour le flux d'autorisation OIDC.",
    "enableSmartRouting": "Activer le routage intelligent",
    "enableSmartRoutingDescription": "Activer la fonctionnalité de routage intelligent pour rechercher l'outil le plus approprié en fonction de l'entrée (en utilisant le nom de groupe $smart)",
    "dbUrl": "URL PostgreSQL (nécessite le support de pgvector)",
    "dbUrlPlaceholder": "ex. postgresql://user:password@localhost:5432/dbname",
    "embeddingProvider": "Fournisseur d'embeddings",
    "openaiApiBaseUrl": "URL de base compatible OpenAI",
    "openaiApiBaseUrlPlaceholder": "https://api.openai.com/v1",
    "openaiApiKey": "Clé API du fournisseur LLM",
    "openaiApiKeyPlaceholder": "Entrez la clé API du fournisseur LLM",
    "openaiApiEmbeddingModel": "Nom du modèle d'intégration",
    "openaiApiEmbeddingModelPlaceholder": "text-embedding-3-small",
    "basePacingDelayMs": "Délai de pacing de base (ms)",
    "basePacingDelayMsDescription": "Délai de base entre les requêtes d'embeddings envoyées au fournisseur. Par défaut 0 — le système gère les limites de débit automatiquement : il respecte les en-têtes Retry-After, applique un délai de 63 secondes en l'absence d'en-tête, et augmente le pacing après chaque réponse 403/429. Définissez une valeur non nulle uniquement si votre fournisseur impose un intervalle minimum fixe.",
    "basePacingDelayMsPlaceholder": "Vide = valeur par défaut 0 ms",
    "basePacingDelayMsAuto": "Par défaut ({{value}} ms) : la gestion des limites de débit est automatique.",
    "basePacingDelayMsZero": "0 ms (par défaut) : la gestion des limites de débit est automatique via throttling adaptatif et logique de retry.",
    "basePacingDelayMsOverride": "Valeur personnalisée : remplace le délai de pacing de base par défaut.",
    "embeddingEncodingFormat": "Format d'encodage des embeddings",
    "embeddingEncodingFormatDescription": "Format d'encodage pour les vecteurs d'embedding. Auto détectera en fonction du support du fournisseur.",
    "embeddingEncodingFormatAuto": "Auto (Recommandé)",
    "azureOpenaiEndpoint": "Point de terminaison Azure OpenAI",
    "azureOpenaiEndpointPlaceholder": "https://VOTRE_NOM_DE_RESSOURCE.openai.azure.com",
    "azureOpenaiApiKey": "Clé API Azure OpenAI",
    "azureOpenaiApiKeyPlaceholder": "Entrez la clé API Azure OpenAI",
    "azureOpenaiApiVersion": "Version de l'API Azure OpenAI",
    "azureOpenaiApiVersionPlaceholder": "2024-02-15-preview",
    "azureOpenaiEmbeddingDeployment": "Déploiement d'embeddings Azure OpenAI",
    "azureOpenaiEmbeddingDeploymentPlaceholder": "text-embedding-3-small",
    "azureOpenaiEmbeddingModel": "Nom du modèle d'embedding Azure",
    "azureOpenaiEmbeddingModelDescription": "Le nom réel du modèle OpenAI déployé dans Azure (ex. text-embedding-3-small). Utilisé pour le comptage précis des tokens avant l'envoi à l'API.",
    "azureOpenaiEmbeddingModelPlaceholder": "text-embedding-3-small",
    "smartRoutingConfigUpdated": "Configuration du routage intelligent mise à jour avec succès",
    "progressiveDisclosure": "Divulgation progressive",
    "progressiveDisclosureDescription": "Lorsqu'elle est activée, search_tools renvoie uniquement les noms et descriptions des outils. Utilisez describe_tool pour obtenir le schéma complet des paramètres, réduisant ainsi l'utilisation des tokens.",
    "embeddingMaxTokens": "Tokens max pour les embeddings",
    "embeddingMaxTokensDescription": "Nombre maximum de tokens pour la troncature du texte avant la génération des embeddings. Laissez vide pour utiliser automatiquement la valeur par défaut du modèle. Une valeur personnalisée remplace toujours la valeur par défaut du modèle. La configuration manuelle de cette valeur est particulièrement utile lors de l'utilisation de fournisseurs LLM locaux pour éviter les erreurs de troncature.",
    "embeddingMaxTokensPlaceholder": "Vide = automatique selon le modèle",
    "embeddingMaxTokensAuto": "Auto : {{limit}} tokens (valeur par défaut du modèle {{model}})",
    "embeddingMaxTokensOverride": "Cette valeur remplace la valeur par défaut du modèle.",
    "smartRoutingRequiredFields": "L'URL de la base de données est requise pour activer le routage intelligent. Une clé API du fournisseur LLM est requise pour les fournisseurs cloud (les LLM locaux ne nécessitent généralement pas de clé API, entrez n'importe quelle valeur pour passer la validation du formulaire)",
    "smartRoutingValidationError": "Veuillez remplir les champs obligatoires avant d'activer le routage intelligent : {{fields}}",
    "smartRoutingWorkflow": "Flux de travail",
    "smartRoutingWorkflowDescription": "Le prompt est vectorisé ; les top-k outils similaires sont récupérés depuis pgvector et exposés au LLM en amont.",
    "mcpRouterConfig": "Marché Cloud",
    "mcpRouterApiKey": "Clé API MCPRouter",
    "mcpRouterApiKeyDescription": "Clé API pour accéder aux services du marché cloud MCPRouter",
    "mcpRouterApiKeyPlaceholder": "Entrez la clé API MCPRouter",
    "mcpRouterReferer": "Référent",
    "mcpRouterRefererDescription": "En-tête Referer pour les requêtes API MCPRouter",
    "mcpRouterRefererPlaceholder": "https://www.mcphub.app",
    "mcpRouterTitle": "Titre",
    "mcpRouterTitleDescription": "En-tête Title pour les requêtes API MCPRouter",
    "mcpRouterTitlePlaceholder": "MCPHub",
    "mcpRouterBaseUrl": "URL de base",
    "mcpRouterBaseUrlDescription": "URL de base pour l'API MCPRouter",
    "mcpRouterBaseUrlPlaceholder": "https://api.mcprouter.to/v1",
    "systemSettings": "Paramètres système",
    "nameSeparatorLabel": "Séparateur de noms",
    "nameSeparatorDescription": "Caractère utilisé pour séparer le nom du serveur et le nom de l'outil/prompt (par défaut : -)",
    "enableSessionRebuild": "Activer la reconstruction de session serveur",
    "enableSessionRebuildDescription": "Lorsqu'il est activé, applique le code de reconstruction de session serveur amélioré pour une meilleure expérience de gestion de session",
    "restartRequired": "Configuration enregistrée. Il est recommandé de redémarrer l'application pour s'assurer que tous les services chargent correctement les nouveaux paramètres.",
    "exportMcpSettings": "Exporter les paramètres",
    "mcpSettingsJson": "JSON des paramètres MCP",
    "mcpSettingsJsonDescription": "Afficher, copier ou télécharger votre configuration mcp_settings.json actuelle pour la sauvegarde ou la migration vers d'autres outils",
    "copyToClipboard": "Copier dans le presse-papiers",
    "downloadJson": "Télécharger JSON",
    "exportSuccess": "Paramètres exportés avec succès",
    "exportError": "Échec de la récupération des paramètres",
    "enableOauthServer": "Activer le serveur OAuth",
    "enableOauthServerDescription": "Permet à MCPHub d'émettre des jetons OAuth pour les clients externes",
    "requireClientSecret": "Exiger un secret client",
    "requireClientSecretDescription": "Lorsque activé, les clients confidentiels doivent présenter un client secret (désactivez-le pour les clients PKCE publics)",
    "requireState": "Exiger le paramètre state",
    "requireStateDescription": "Refuser les demandes d'autorisation qui n'incluent pas le paramètre state",
    "accessTokenLifetime": "Durée de vie du jeton d'accès (secondes)",
    "accessTokenLifetimeDescription": "Durée pendant laquelle les jetons d'accès émis restent valides",
    "accessTokenLifetimePlaceholder": "ex. 3600",
    "refreshTokenLifetime": "Durée de vie du jeton d'actualisation (secondes)",
    "refreshTokenLifetimeDescription": "Durée pendant laquelle les jetons d'actualisation restent valides",
    "refreshTokenLifetimePlaceholder": "ex. 1209600",
    "authorizationCodeLifetime": "Durée de vie du code d'autorisation (secondes)",
    "authorizationCodeLifetimeDescription": "Temps pendant lequel les codes d'autorisation peuvent être échangés",
    "authorizationCodeLifetimePlaceholder": "ex. 300",
    "allowedScopes": "Scopes autorisés",
    "allowedScopesDescription": "Liste séparée par des virgules des scopes que les utilisateurs peuvent approuver",
    "allowedScopesPlaceholder": "ex. read, write",
    "enableDynamicRegistration": "Activer l'enregistrement dynamique",
    "dynamicRegistrationDescription": "Autoriser les clients conformes RFC 7591 à s'enregistrer via l'endpoint public",
    "dynamicRegistrationAllowedGrantTypes": "Types de flux autorisés",
    "dynamicRegistrationAllowedGrantTypesDescription": "Liste séparée par des virgules des types de flux disponibles pour les clients enregistrés dynamiquement",
    "dynamicRegistrationAllowedGrantTypesPlaceholder": "ex. authorization_code, refresh_token",
    "dynamicRegistrationAuth": "Exiger une authentification",
    "dynamicRegistrationAuthDescription": "Protège l'endpoint d'enregistrement afin que seules les requêtes authentifiées puissent créer des clients",
    "invalidNumberInput": "Veuillez saisir un nombre valide supérieur ou égal à zéro"
  },
  "mcpb": {
    "upload": "Télécharger",
    "uploadTitle": "Télécharger le bundle MCPB",
    "dropFileHere": "Déposez votre fichier .mcpb ici",
    "orClickToSelect": "ou cliquez pour sélectionner depuis votre ordinateur",
    "invalidFileType": "Veuillez sélectionner un fichier .mcpb valide",
    "noFileSelected": "Veuillez sélectionner un fichier .mcpb à télécharger",
    "uploading": "Téléchargement en cours...",
    "uploadFailed": "Échec du téléchargement du fichier MCPB",
    "installServer": "Installer le serveur MCP depuis MCPB",
    "extensionInfo": "Informations sur l'extension",
    "name": "Nom",
    "version": "Version",
    "description": "Description",
    "author": "Auteur",
    "tools": "Outils",
    "serverName": "Nom du serveur",
    "serverNamePlaceholder": "Entrez un nom pour ce serveur",
    "install": "Installer",
    "installing": "Installation en cours...",
    "installFailed": "Échec de l'installation du serveur depuis MCPB",
    "serverExistsTitle": "Le serveur existe déjà",
    "serverExistsConfirm": "Le serveur '{{serverName}}' existe déjà. Voulez-vous le remplacer par la nouvelle version ?",
    "override": "Remplacer"
  },
  "jsonImport": {
    "button": "Importer",
    "title": "Importer des serveurs depuis JSON",
    "inputLabel": "Configuration JSON du serveur",
    "inputHelp": "Collez votre configuration JSON de serveur. Prend en charge les types de serveurs STDIO, SSE et HTTP (streamable-http).",
    "preview": "Aperçu",
    "previewTitle": "Aperçu des serveurs à importer",
    "import": "Importer",
    "importing": "Importation en cours...",
    "invalidFormat": "Format JSON invalide. Le JSON doit contenir un objet 'mcpServers'.",
    "parseError": "Échec de l'analyse du JSON. Veuillez vérifier le format et réessayer.",
    "addFailed": "Échec de l'ajout du serveur",
    "importFailed": "Échec de l'importation des serveurs",
    "partialSuccess": "{{count}} serveur(s) sur {{total}} importé(s) avec succès. Certains serveurs ont échoué :"
  },
  "groupImport": {
    "button": "Importer",
    "title": "Importer des groupes depuis JSON",
    "inputLabel": "Configuration JSON des groupes",
    "inputHelp": "Collez votre configuration JSON de groupes. Chaque groupe peut contenir une liste de serveurs.",
    "preview": "Aperçu",
    "previewTitle": "Aperçu des groupes à importer",
    "import": "Importer",
    "importing": "Importation en cours...",
    "invalidFormat": "Format JSON invalide. Le JSON doit contenir un tableau 'groups'.",
    "missingName": "Chaque groupe doit avoir un champ 'name'.",
    "parseError": "Échec de l'analyse du JSON. Veuillez vérifier le format et réessayer.",
    "addFailed": "Échec de l'ajout du groupe",
    "importFailed": "Échec de l'importation des groupes",
    "partialSuccess": "{{count}} groupe(s) sur {{total}} importé(s) avec succès. Certains groupes ont échoué :"
  },
  "users": {
    "add": "Ajouter un utilisateur",
    "addNew": "Ajouter un nouvel utilisateur",
    "edit": "Modifier l'utilisateur",
    "delete": "Supprimer l'utilisateur",
    "create": "Créer un utilisateur",
    "update": "Mettre à jour l'utilisateur",
    "username": "Nom d'utilisateur",
    "email": "E-mail",
    "emailPlaceholder": "Entrer l'e-mail (optionnel)",
    "password": "Mot de passe",
    "newPassword": "Nouveau mot de passe",
    "confirmPassword": "Confirmer le mot de passe",
    "changePassword": "Changer le mot de passe",
    "adminRole": "Administrateur",
    "admin": "Admin",
    "user": "Utilisateur",
    "role": "Rôle",
    "actions": "Actions",
    "addFirst": "Ajoutez votre premier utilisateur",
    "permissions": "Permissions",
    "adminPermissions": "Accès complet au système",
    "userPermissions": "Accès limité",
    "currentUser": "Vous",
    "noUsers": "Aucun utilisateur trouvé",
    "adminRequired": "Un accès administrateur est requis pour gérer les utilisateurs",
    "usernameRequired": "Le nom d'utilisateur est requis",
    "passwordRequired": "Le mot de passe est requis",
    "passwordTooShort": "Le mot de passe doit comporter au moins 6 caractères",
    "passwordMismatch": "Les mots de passe ne correspondent pas",
    "usernamePlaceholder": "Entrez le nom d'utilisateur",
    "passwordPlaceholder": "Entrez le mot de passe",
    "newPasswordPlaceholder": "Laissez vide pour conserver le mot de passe actuel",
    "confirmPasswordPlaceholder": "Confirmez le nouveau mot de passe",
    "createError": "Échec de la création de l'utilisateur",
    "updateError": "Échec de la mise à jour de l'utilisateur",
    "deleteError": "Échec de la suppression de l'utilisateur",
    "statsError": "Échec de la récupération des statistiques utilisateur",
    "deleteConfirmation": "Êtes-vous sûr de vouloir supprimer l'utilisateur '{{username}}' ? Cette action est irréversible.",
    "confirmDelete": "Supprimer l'utilisateur",
    "deleteWarning": "Êtes-vous sûr de vouloir supprimer l'utilisateur '{{username}}' ? Cette action est irréversible."
  },
  "api": {
    "errors": {
      "readonly": "Lecture seule pour l'environnement de démonstration",
      "invalid_credentials": "Nom d'utilisateur ou mot de passe invalide",
      "serverNameRequired": "Le nom du serveur est requis",
      "serverConfigRequired": "La configuration du serveur est requise",
      "serverConfigInvalid": "La configuration du serveur doit inclure une URL, une URL de spécification OpenAPI ou un schéma, ou une commande avec des arguments",
      "serverTypeInvalid": "Le type de serveur doit être l'un des suivants : stdio, sse, streamable-http, openapi",
      "urlRequiredForType": "L'URL est requise pour le type de serveur {{type}}",
      "openapiSpecRequired": "L'URL de la spécification OpenAPI ou le schéma est requis pour le type de serveur openapi",
      "headersInvalidFormat": "Les en-têtes doivent être un objet",
      "headersNotSupportedForStdio": "Les en-têtes ne sont pas pris en charge pour le type de serveur stdio",
      "serverNotFound": "Serveur non trouvé",
      "failedToRemoveServer": "Serveur non trouvé ou échec de la suppression",
      "internalServerError": "Erreur interne du serveur",
      "failedToGetServers": "Échec de la récupération des informations sur les serveurs",
      "failedToGetServerSettings": "Échec de la récupération des paramètres du serveur",
      "failedToGetServerConfig": "Échec de la récupération de la configuration du serveur",
      "failedToSaveSettings": "Échec de l'enregistrement des paramètres",
      "toolNameRequired": "Le nom du serveur et le nom de l'outil sont requis",
      "descriptionMustBeString": "La description doit être une chaîne de caractères",
      "groupIdRequired": "L'ID de groupe est requis",
      "groupNameRequired": "Le nom du groupe est requis",
      "groupNotFound": "Groupe non trouvé",
      "groupIdAndServerNameRequired": "L'ID de groupe和le nom du serveur sont requis",
      "groupOrServerNotFound": "Groupe ou serveur non trouvé",
      "toolsMustBeAllOrArray": "Les outils doivent être \"all\" ou un tableau de chaînes de caractères",
      "serverNameAndToolNameRequired": "Le nom du serveur et le nom de l'outil sont requis",
      "usernameRequired": "Le nom d'utilisateur est requis",
      "userNotFound": "Utilisateur non trouvé",
      "failedToGetUsers": "Échec de la récupération des informations sur les utilisateurs",
      "failedToGetUserInfo": "Échec de la récupération des informations sur l'utilisateur",
      "failedToGetUserStats": "Échec de la récupération des statistiques de l'utilisateur",
      "marketServerNameRequired": "Le nom du serveur du marché est requis",
      "marketServerNotFound": "Serveur du marché non trouvé",
      "failedToGetMarketServers": "Échec de la récupération des informations sur les serveurs du marché",
      "failedToGetMarketServer": "Échec de la récupération des informations sur le serveur du marché",
      "failedToGetMarketCategories": "Échec de la récupération des catégories du marché",
      "failedToGetMarketTags": "Échec de la récupération des tags du marché",
      "failedToSearchMarketServers": "Échec de la recherche des serveurs du marché",
      "failedToFilterMarketServers": "Échec du filtrage des serveurs du marché",
      "failedToProcessMcpbFile": "Échec du traitement du fichier MCPB"
    },
    "success": {
      "serverCreated": "Serveur créé avec succès",
      "serverUpdated": "Serveur mis à jour avec succès",
      "serverRemoved": "Serveur supprimé avec succès",
      "serverToggled": "État du serveur basculé avec succès",
      "toolToggled": "Outil {{name}} {{action}} avec succès",
      "toolDescriptionUpdated": "Description de l'outil {{name}} mise à jour avec succès",
      "systemConfigUpdated": "Configuration système mise à jour avec succès",
      "groupCreated": "Groupe créé avec succès",
      "groupUpdated": "Groupe mis à jour avec succès",
      "groupDeleted": "Groupe supprimé avec succès",
      "serverAddedToGroup": "Serveur ajouté au groupe avec succès",
      "serverRemovedFromGroup": "Serveur supprimé du groupe avec succès",
      "serverToolsUpdated": "Outils du serveur mis à jour avec succès"
    }
  },
  "oauthCallback": {
    "authorizationFailed": "Échec de l'autorisation",
    "authorizationFailedError": "Erreur",
    "authorizationFailedDetails": "Détails",
    "invalidRequest": "Requête invalide",
    "missingStateParameter": "Paramètre d'état OAuth requis manquant.",
    "missingCodeParameter": "Paramètre de code d'autorisation requis manquant.",
    "serverNotFound": "Serveur introuvable",
    "serverNotFoundMessage": "Impossible de trouver le serveur associé à cette demande d'autorisation.",
    "sessionExpiredMessage": "La session d'autorisation a peut-être expiré. Veuillez réessayer l'autorisation.",
    "authorizationSuccessful": "Autorisation réussie",
    "server": "Serveur",
    "status": "État",
    "connected": "Connecté",
    "successMessage": "Le serveur a été autorisé et connecté avec succès.",
    "autoCloseMessage": "Cette fenêtre se fermera automatiquement dans 3 secondes...",
    "closeNow": "Fermer maintenant",
    "connectionError": "Erreur de connexion",
    "connectionErrorMessage": "L'autorisation a réussi, mais la connexion au serveur a échoué.",
    "reconnectMessage": "Veuillez essayer de vous reconnecter à partir du tableau de bord.",
    "configurationError": "Erreur de configuration",
    "configurationErrorMessage": "Le transport du serveur ne prend pas en charge OAuth finishAuth(). Veuillez vous assurer que le serveur est configuré avec le transport streamable-http.",
    "internalError": "Erreur interne",
    "internalErrorMessage": "Une erreur inattendue s'est produite lors du traitement du callback OAuth.",
    "closeWindow": "Fermer la fenêtre"
  },
  "builtinPrompts": {
    "add": "Ajouter un prompt",
    "addNew": "Ajouter un nouveau prompt",
    "edit": "Modifier le prompt",
    "delete": "Supprimer",
    "noPrompts": "Aucun prompt intégré configuré",
    "addFirst": "Ajoutez votre premier prompt",
    "name": "Nom",
    "namePlaceholder": "ex. code-review",
    "title": "Titre",
    "titlePlaceholder": "ex. Prompt de revue de code",
    "description": "Description",
    "descriptionPlaceholder": "Brève description du prompt",
    "template": "Modèle",
    "templatePlaceholder": "Entrez le texte du modèle avec des marqueurs {{paramètre}}...",
    "templateHint": "Utilisez {{paramName}} pour les paramètres du modèle",
    "arguments": "Arguments",
    "addArgument": "Ajouter un argument",
    "argName": "Nom",
    "argDescription": "Description",
    "argRequired": "Requis",
    "enabled": "Activé",
    "active": "Actif",
    "inactive": "Inactif",
    "nameRequired": "Le nom est requis",
    "templateRequired": "Le modèle est requis",
    "fetchError": "Échec du chargement des prompts intégrés",
    "createError": "Échec de la création du prompt",
    "updateError": "Échec de la mise à jour du prompt",
    "deleteError": "Échec de la suppression du prompt",
    "saveError": "Échec de l'enregistrement du prompt",
    "confirmDelete": "Supprimer le prompt",
    "deleteWarning": "Êtes-vous sûr de vouloir supprimer le prompt \"{{name}}\" ? Cette action est irréversible."
  },
  "builtinResources": {
    "add": "Ajouter une ressource",
    "addNew": "Ajouter une nouvelle ressource",
    "edit": "Modifier la ressource",
    "delete": "Supprimer",
    "noResources": "Aucune ressource intégrée configurée",
    "addFirst": "Ajoutez votre première ressource",
    "uri": "URI",
    "uriPlaceholder": "ex. resource://docs/guide",
    "name": "Nom",
    "namePlaceholder": "ex. Guide utilisateur",
    "description": "Description",
    "descriptionPlaceholder": "Brève description de la ressource",
    "mimeType": "Type MIME",
    "content": "Contenu",
    "contentPlaceholder": "Entrez le contenu de la ressource...",
    "enabled": "Activé",
    "active": "Actif",
    "inactive": "Inactif",
    "descriptionUpdateSuccess": "Description de la ressource mise à jour avec succès",
    "descriptionUpdateFailed": "Échec de la mise à jour de la description de la ressource",
    "restoreDefault": "Restaurer par défaut",
    "restoreDefaultSuccess": "La description de la ressource a été restaurée à sa valeur par défaut",
    "restoreDefaultFailed": "Échec de la restauration de la description par défaut de la ressource",
    "uriRequired": "L'URI est requis",
    "contentRequired": "Le contenu est requis",
    "fetchError": "Échec du chargement des ressources intégrées",
    "createError": "Échec de la création de la ressource",
    "updateError": "Échec de la mise à jour de la ressource",
    "deleteError": "Échec de la suppression de la ressource",
    "saveError": "Échec de l'enregistrement de la ressource",
    "confirmDelete": "Supprimer la ressource",
    "deleteWarning": "Êtes-vous sûr de vouloir supprimer la ressource \"{{name}}\" ? Cette action est irréversible."
  },
  "activity": {
    "title": "Activité",
    "totalCalls": "Total des appels",
    "successCount": "Réussites",
    "errorCount": "Échecs",
    "avgDuration": "Durée moyenne",
    "timestamp": "Horodatage",
    "server": "Serveur",
    "tool": "Outil",
    "duration": "Durée",
    "status": "Statut",
    "group": "Groupe",
    "key": "Clé API",
    "sourceIp": "IP source",
    "input": "Entrée",
    "output": "Sortie",
    "details": "Détails de l’activité",
    "errorMessage": "Message d’erreur",
    "searchServer": "Serveur...",
    "searchTool": "Outil...",
    "searchStatus": "Statut...",
    "searchGroup": "Groupe...",
    "searchKeyName": "Clé API...",
    "keyName": "Nom de la clé API",
    "allStatus": "Tous les statuts",
    "statusSuccess": "Succès",
    "statusError": "Erreur",
    "noData": "Aucune activité disponible",
    "fetchError": "Impossible de charger les données d’activité",
    "cleanup": "Nettoyer",
    "confirmCleanup": "Voulez-vous vraiment supprimer les activités de plus de 30 jours ?",
    "cleanupSuccess": "{{count}} anciennes activités supprimées",
    "cleanupError": "Échec du nettoyage des anciennes activités",
    "notAvailable": "Le suivi des activités est disponible uniquement en mode base de données"
  },
  "template": {
    "exportButton": "Exporter le modèle",
    "importButton": "Importer le modèle",
    "exportTitle": "Exporter le modèle de configuration",
    "importTitle": "Importer le modèle de configuration",
    "name": "Nom du modèle",
    "nameRequired": "Le nom du modèle est requis",
    "namePlaceholder": "Ex. : Outils de développement frontend",
    "description": "Description",
    "descriptionPlaceholder": "Ex. : Serveurs MCP standards pour le développement frontend",
    "selectGroups": "Sélectionner les groupes",
    "selectGroupsHelp": "Laisser vide pour exporter tous les groupes",
    "selectAll": "Tout sélectionner",
    "deselectAll": "Tout désélectionner",
    "includeDisabled": "Inclure les serveurs désactivés",
    "exportNote": "Les secrets (clés API, tokens, mots de passe) seront remplacés par des références ${PLACEHOLDER}. Les destinataires devront fournir leurs propres identifiants.",
    "export": "Exporter",
    "exporting": "Exportation...",
    "exportFailed": "Échec de l'exportation du modèle",
    "import": "Importer",
    "importing": "Importation...",
    "importFailed": "Échec de l'importation du modèle",
    "invalidFormat": "Format de modèle invalide. Doit contenir les champs version, name, servers et groups.",
    "parseError": "Échec de l'analyse JSON. Veuillez vérifier le format et réessayer.",
    "uploadFile": "Télécharger le fichier modèle",
    "or": "ou",
    "pasteJson": "Coller le JSON du modèle",
    "pastePlaceholder": "Collez le contenu de votre fichier .mcphub-template.json ici...",
    "version": "Version",
    "createdAt": "Créé le",
    "servers": "Serveurs",
    "groups": "Groupes",
    "serversInGroup": "serveur(s)",
    "envVarsNeeded": "Variables d'environnement requises — définissez-les avant d'utiliser les serveurs importés :",
    "importResult": "Serveurs : {{serversCreated}} créés, {{serversSkipped}} ignorés. Groupes : {{groupsCreated}} créés, {{groupsSkipped}} ignorés."
  }
}
