diff --git a/src/locales/translated/fr.json b/src/locales/translated/fr.json index e319cfd7..14e6b096 100644 --- a/src/locales/translated/fr.json +++ b/src/locales/translated/fr.json @@ -1,1899 +1,1899 @@ { "credentials": { - "credentialsViewer": "Credentials Viewer", - "manageYourSSHCredentials": "Manage your SSH credentials securely", - "addCredential": "Add Credential", - "createCredential": "Create Credential", - "editCredential": "Edit Credential", - "viewCredential": "View Credential", - "duplicateCredential": "Duplicate Credential", - "deleteCredential": "Delete Credential", - "updateCredential": "Update Credential", - "credentialName": "Credential Name", - "credentialDescription": "Description", - "username": "Username", - "searchCredentials": "Search credentials...", - "selectFolder": "Select Folder", - "selectAuthType": "Select Auth Type", - "allFolders": "All Folders", - "allAuthTypes": "All Auth Types", - "uncategorized": "Uncategorized", + "credentialsViewer": "Visionneuse des identifiants", + "manageYourSSHCredentials": "Gérez vos identifiants SSH en toute sécurité", + "addCredential": "Ajouter un mot de passe", + "createCredential": "Créer un mot de passe", + "editCredential": "Modifier les informations d'identification", + "viewCredential": "Voir les informations d'identification", + "duplicateCredential": "Identification dupliquée", + "deleteCredential": "Supprimer les informations d'identification", + "updateCredential": "Mettre à jour les informations d'identification", + "credentialName": "Nom de l'authentification", + "credentialDescription": "Libellé", + "username": "Nom d'utilisateur", + "searchCredentials": "Rechercher des identifiants...", + "selectFolder": "Sélectionner un dossier", + "selectAuthType": "Sélectionnez le type d'authentification", + "allFolders": "Tous les dossiers", + "allAuthTypes": "Tous les types d'authentification", + "uncategorized": "Non catégorisé", "totalCredentials": "Total", - "keyBased": "Key-based", - "passwordBased": "Password-based", - "folders": "Folders", - "noCredentialsMatchFilters": "No credentials match your filters", - "noCredentialsYet": "No credentials created yet", - "createFirstCredential": "Create your first credential", - "failedToFetchCredentials": "Failed to fetch credentials", - "credentialDeletedSuccessfully": "Credential deleted successfully", - "failedToDeleteCredential": "Failed to delete credential", - "confirmDeleteCredential": "Are you sure you want to delete credential \"{{name}}\"?", - "credentialCreatedSuccessfully": "Credential created successfully", - "credentialUpdatedSuccessfully": "Credential updated successfully", - "failedToSaveCredential": "Failed to save credential", - "failedToFetchCredentialDetails": "Failed to fetch credential details", - "failedToFetchHostsUsing": "Failed to fetch hosts using this credential", - "loadingCredentials": "Loading credentials...", - "retry": "Retry", - "noCredentials": "No Credentials", - "noCredentialsMessage": "You haven't added any credentials yet. Click \"Add Credential\" to get started.", - "sshCredentials": "SSH Credentials", - "credentialsCount": "{{count}} credentials", - "refresh": "Refresh", - "passwordRequired": "Password is required", - "sshKeyRequired": "SSH key is required", - "credentialAddedSuccessfully": "Credential \"{{name}}\" added successfully", - "general": "General", - "description": "Description", - "folder": "Folder", + "keyBased": "Basé sur les clés", + "passwordBased": "Basé sur un mot de passe", + "folders": "Dossiers", + "noCredentialsMatchFilters": "Aucun identifiant ne correspond à vos filtres", + "noCredentialsYet": "Aucun mot de passe créé pour le moment", + "createFirstCredential": "Créez votre premier mot de passe", + "failedToFetchCredentials": "Impossible de récupérer les identifiants", + "credentialDeletedSuccessfully": "Identification supprimée avec succès", + "failedToDeleteCredential": "Échec de la suppression des identifiants", + "confirmDeleteCredential": "Êtes-vous sûr de vouloir supprimer les informations d'identification \"{{name}}\" ?", + "credentialCreatedSuccessfully": "Identification créée avec succès", + "credentialUpdatedSuccessfully": "Identification mise à jour avec succès", + "failedToSaveCredential": "Échec de l'enregistrement des informations d'identification", + "failedToFetchCredentialDetails": "Impossible de récupérer les détails des informations d'identification", + "failedToFetchHostsUsing": "Impossible de récupérer les hôtes utilisant cet identifiant", + "loadingCredentials": "Chargement des identifiants...", + "retry": "Réessayer", + "noCredentials": "Pas d'authentification", + "noCredentialsMessage": "Vous n'avez pas encore ajouté d'identifiants. Cliquez sur \"Ajouter un identifiant\" pour commencer.", + "sshCredentials": "Identifiants SSH", + "credentialsCount": "Identifiants {{count}}", + "refresh": "Rafraîchir", + "passwordRequired": "Le mot de passe est requis", + "sshKeyRequired": "La clé SSH est requise", + "credentialAddedSuccessfully": "Les identifiants «{{name}}» ont été ajoutés avec succès", + "general": "Généraux", + "description": "Libellé", + "folder": "Répertoire", "tags": "Tags", - "addTagsSpaceToAdd": "Add tags (press space to add)", - "password": "Password", - "key": "Key", - "sshPrivateKey": "SSH Private Key", - "upload": "Upload", - "updateKey": "Update Key", - "keyPassword": "Key Password", - "keyType": "Key Type", + "addTagsSpaceToAdd": "Ajouter des tags (appuyez sur l'espace pour ajouter)", + "password": "Mot de passe", + "key": "Clés", + "sshPrivateKey": "Clé privée SSH", + "upload": "Charger", + "updateKey": "Mettre à jour la clé", + "keyPassword": "Mot de passe de la clé", + "keyType": "Type de clé", "keyTypeRSA": "RSA", "keyTypeECDSA": "ECDSA", "keyTypeEd25519": "Ed25519", - "basicInfo": "Basic Info", - "authentication": "Authentication", - "organization": "Organization", - "basicInformation": "Basic Information", - "basicInformationDescription": "Enter the basic information for this credential", - "authenticationMethod": "Authentication Method", - "authenticationMethodDescription": "Choose how you want to authenticate with SSH servers", - "organizationDescription": "Organize your credentials with folders and tags", - "enterCredentialName": "Enter credential name", - "enterCredentialDescription": "Enter description (optional)", - "enterUsername": "Enter username", - "nameIsRequired": "Credential name is required", - "usernameIsRequired": "Username is required", - "authenticationType": "Authentication Type", - "passwordAuthDescription": "Use password authentication", - "sshKeyAuthDescription": "Use SSH key authentication", - "passwordIsRequired": "Password is required", - "sshKeyIsRequired": "SSH key is required", - "sshKeyType": "SSH Key Type", - "privateKey": "Private Key", - "enterPassword": "Enter password", - "enterPrivateKey": "Enter private key", - "keyPassphrase": "Key Passphrase", - "enterKeyPassphrase": "Enter key passphrase (optional)", - "keyPassphraseOptional": "Optional: leave empty if your key has no passphrase", - "leaveEmptyToKeepCurrent": "Leave empty to keep current value", - "uploadKeyFile": "Upload Key File", - "generateKeyPairButton": "Generate Key Pair", - "generateKeyPair": "Generate Key Pair", - "generateKeyPairDescription": "Generate a new SSH key pair. If you want to protect the key with a passphrase, enter it in the Key Password field below first.", - "deploySSHKey": "Deploy SSH Key", - "deploySSHKeyDescription": "Deploy public key to target server", - "sourceCredential": "Source Credential", - "targetHost": "Target Host", - "deploymentProcess": "Deployment Process", - "deploymentProcessDescription": "This will safely add the public key to the target host's ~/.ssh/authorized_keys file without overwriting existing keys. The operation is reversible.", - "chooseHostToDeploy": "Choose a host to deploy to...", - "deploying": "Deploying...", - "name": "Name", - "noHostsAvailable": "No hosts available", - "noHostsMatchSearch": "No hosts match your search", - "sshKeyGenerationNotImplemented": "SSH key generation feature coming soon", - "connectionTestingNotImplemented": "Connection testing feature coming soon", - "testConnection": "Test Connection", - "selectOrCreateFolder": "Select or create folder", - "noFolder": "No folder", - "orCreateNewFolder": "Or create new folder", - "addTag": "Add tag", - "saving": "Saving...", - "credentialId": "Credential ID", - "overview": "Overview", - "security": "Security", + "basicInfo": "Informations de base", + "authentication": "Authentification", + "organization": "Organisation", + "basicInformation": "Informations de base", + "basicInformationDescription": "Entrez les informations de base pour cet identifiant", + "authenticationMethod": "Méthode d'authentification", + "authenticationMethodDescription": "Choisissez comment vous voulez vous authentifier avec les serveurs SSH", + "organizationDescription": "Organisez vos identifiants avec des dossiers et des tags", + "enterCredentialName": "Entrez le nom de l'identifiant", + "enterCredentialDescription": "Entrez la description (facultatif)", + "enterUsername": "Entrez le nom d'utilisateur", + "nameIsRequired": "Le nom de l'identifiant est requis", + "usernameIsRequired": "Le nom d'utilisateur est requis", + "authenticationType": "Type d'authentification", + "passwordAuthDescription": "Utiliser l'authentification par mot de passe", + "sshKeyAuthDescription": "Utiliser l'authentification par clé SSH", + "passwordIsRequired": "Le mot de passe est requis", + "sshKeyIsRequired": "La clé SSH est requise", + "sshKeyType": "Type de clé SSH", + "privateKey": "Clé privée", + "enterPassword": "Entrez le mot de passe", + "enterPrivateKey": "Entrez la clé privée", + "keyPassphrase": "Mot de passe de la clé", + "enterKeyPassphrase": "Entrez le mot de passe de la clé (facultatif)", + "keyPassphraseOptional": "Facultatif : laisser vide si votre clé n'a pas de mot de passe", + "leaveEmptyToKeepCurrent": "Laisser vide pour conserver la valeur actuelle", + "uploadKeyFile": "Charger un fichier de clé", + "generateKeyPairButton": "Générer une paire de clés", + "generateKeyPair": "Générer une paire de clés", + "generateKeyPairDescription": "Générer une nouvelle paire de clés SSH. Si vous voulez protéger la clé avec une phrase de passe, saisissez-la dans le champ Mot de passe de la clé ci-dessous d'abord.", + "deploySSHKey": "Déployer la clé SSH", + "deploySSHKeyDescription": "Déployer la clé publique sur le serveur cible", + "sourceCredential": "Identification source", + "targetHost": "Hôte cible", + "deploymentProcess": "Processus de déploiement", + "deploymentProcessDescription": "Ceci ajoutera la clé publique au fichier ~/.ssh/authorized_keys de l'hôte cible sans écraser les clés existantes. L'opération est réversible.", + "chooseHostToDeploy": "Choisissez un hôte à déployer vers...", + "deploying": "Déploiement...", + "name": "Nom", + "noHostsAvailable": "Aucun hôte disponible", + "noHostsMatchSearch": "Aucun hôte ne correspond à votre recherche", + "sshKeyGenerationNotImplemented": "Fonction de génération de clés SSH bientôt disponible", + "connectionTestingNotImplemented": "Fonctionnalité de test de connexion à venir bientôt", + "testConnection": "Tester la connexion", + "selectOrCreateFolder": "Sélectionner ou créer un dossier", + "noFolder": "Aucun dossier", + "orCreateNewFolder": "Ou créer un nouveau dossier", + "addTag": "Ajouter un tag", + "saving": "Sauvegarde en cours...", + "credentialId": "ID de l'identifiant", + "overview": "Aperçu", + "security": "Sécurité", "usage": "Usage", - "securityDetails": "Security Details", - "securityDetailsDescription": "View encrypted credential information", - "credentialSecured": "Credential Secured", - "credentialSecuredDescription": "All sensitive data is encrypted with AES-256", - "passwordAuthentication": "Password Authentication", - "keyAuthentication": "Key Authentication", - "securityReminder": "Security Reminder", - "securityReminderText": "Never share your credentials. All data is encrypted at rest.", - "hostsUsingCredential": "Hosts Using This Credential", - "noHostsUsingCredential": "No hosts are currently using this credential", - "timesUsed": "Times Used", - "lastUsed": "Last Used", - "connectedHosts": "Connected Hosts", - "created": "Created", - "lastModified": "Last Modified", - "usageStatistics": "Usage Statistics", - "copiedToClipboard": "{{field}} copied to clipboard", - "failedToCopy": "Failed to copy to clipboard", - "sshKey": "SSH Key", - "createCredentialDescription": "Create a new SSH credential for secure access", - "editCredentialDescription": "Update the credential information", - "listView": "List", - "folderView": "Folders", - "unknownCredential": "Unknown", + "securityDetails": "Détails de sécurité", + "securityDetailsDescription": "Voir les informations d'identification chiffrées", + "credentialSecured": "Identification sécurisée", + "credentialSecuredDescription": "Toutes les données sensibles sont chiffrées avec AES-256", + "passwordAuthentication": "Authentification par mot de passe", + "keyAuthentication": "Authentification de clé", + "securityReminder": "Rappel de sécurité", + "securityReminderText": "Ne partagez jamais vos identifiants. Toutes les données sont chiffrées au repos.", + "hostsUsingCredential": "Hôtes utilisant ce mot de passe", + "noHostsUsingCredential": "Aucun hôte n'utilise actuellement cet identifiant", + "timesUsed": "Nombre de fois utilisées", + "lastUsed": "Dernière utilisation", + "connectedHosts": "Hôtes connectés", + "created": "Créé", + "lastModified": "Dernière modification", + "usageStatistics": "Statistiques d'utilisation", + "copiedToClipboard": "{{field}} copié dans le presse-papiers", + "failedToCopy": "Échec de la copie dans le presse-papiers", + "sshKey": "Clé SSH", + "createCredentialDescription": "Créer un nouvel identifiant SSH pour un accès sécurisé", + "editCredentialDescription": "Mettre à jour les informations d'identification", + "listView": "Liste", + "folderView": "Dossiers", + "unknownCredential": "Inconnu", "confirmRemoveFromFolder": "Are you sure you want to remove \"{{name}}\" from folder \"{{folder}}\"? The credential will be moved to \"Uncategorized\".", - "removedFromFolder": "Credential \"{{name}}\" removed from folder successfully", - "failedToRemoveFromFolder": "Failed to remove credential from folder", - "folderRenamed": "Folder \"{{oldName}}\" renamed to \"{{newName}}\" successfully", - "failedToRenameFolder": "Failed to rename folder", - "movedToFolder": "Credential \"{{name}}\" moved to \"{{folder}}\" successfully", - "failedToMoveToFolder": "Failed to move credential to folder", - "sshPublicKey": "SSH Public Key", - "publicKeyNote": "Public key is optional but recommended for key validation", - "publicKeyUploaded": "Public Key Uploaded", - "uploadPublicKey": "Upload Public Key", - "uploadPrivateKeyFile": "Upload Private Key File", - "uploadPublicKeyFile": "Upload Public Key File", - "privateKeyRequiredForGeneration": "Private key is required to generate public key", - "failedToGeneratePublicKey": "Failed to generate public key", - "generatePublicKey": "Generate from Private Key", - "publicKeyGeneratedSuccessfully": "Public key generated successfully", - "detectedKeyType": "Detected key type", - "detectingKeyType": "detecting...", - "optional": "Optional", - "generateKeyPairNew": "Generate New Key Pair", - "generateEd25519": "Generate Ed25519", - "generateECDSA": "Generate ECDSA", - "generateRSA": "Generate RSA", + "removedFromFolder": "Identification «{{name}}» retirée du dossier avec succès", + "failedToRemoveFromFolder": "Impossible de supprimer les informations d'identification du dossier", + "folderRenamed": "Le dossier \"{{oldName}}\" a été renommé en \"{{newName}}\" avec succès", + "failedToRenameFolder": "Impossible de renommer le dossier", + "movedToFolder": "Les identifiants «{{name}}» ont été déplacés vers «{{folder}}» avec succès", + "failedToMoveToFolder": "Impossible de déplacer les identifiants vers le dossier", + "sshPublicKey": "Clé publique SSH", + "publicKeyNote": "La clé publique est optionnelle mais recommandée pour la validation de la clé", + "publicKeyUploaded": "Clé publique téléchargée", + "uploadPublicKey": "Télécharger la clé publique", + "uploadPrivateKeyFile": "Charger un fichier de clé privée", + "uploadPublicKeyFile": "Charger un fichier de clé publique", + "privateKeyRequiredForGeneration": "La clé privée est requise pour générer une clé publique", + "failedToGeneratePublicKey": "Impossible de générer la clé publique", + "generatePublicKey": "Générer à partir de la clé privée", + "publicKeyGeneratedSuccessfully": "Clé publique générée avec succès", + "detectedKeyType": "Type de clé détecté", + "detectingKeyType": "Détection en cours...", + "optional": "Optionnel", + "generateKeyPairNew": "Générer une nouvelle paire de clés", + "generateEd25519": "Générer Ed25519", + "generateECDSA": "Générer un ECDSA", + "generateRSA": "Générer un RSA", "keyTypeEcdsaP256": "ECDSA P-256 (SSH)", "keyTypeEcdsaP384": "ECDSA P-384 (SSH)", "keyTypeEcdsaP521": "ECDSA P-521 (SSH)", "keyTypeDsa": "DSA (SSH)", - "keyTypeRsaSha256": "RSA-SHA2-256", + "keyTypeRsaSha256": "SHA2-256 RSA", "keyTypeRsaSha512": "RSA-SHA2-512", - "keyPairGeneratedSuccessfully": "{{keyType}} key pair generated successfully", - "failedToGenerateKeyPair": "Failed to generate key pair", - "generateKeyPairNote": "Generate a new SSH key pair directly. This will replace any existing keys in the form.", - "invalidKey": "Invalid Key", - "detectionError": "Detection Error", - "removing": "Removing:", - "clickToEditCredential": "Click to edit credential", - "dragToMoveBetweenFolders": "Drag to move between folders", - "keyBasedOnlyForDeployment": "Only SSH key-based credentials can be deployed", - "publicKeyRequiredForDeployment": "Public key is required for deployment", - "selectTargetHost": "Please select a target host", - "keyDeployedSuccessfully": "SSH key deployed successfully", - "deploymentFailed": "Deployment failed", - "failedToDeployKey": "Failed to deploy SSH key", - "clickToRenameFolder": "Click to rename folder", - "renameFolder": "Rename folder", + "keyPairGeneratedSuccessfully": "La paire de clés {{keyType}} a été générée avec succès", + "failedToGenerateKeyPair": "Impossible de générer la paire de clés", + "generateKeyPairNote": "Générer une nouvelle paire de clés SSH directement. Cela remplacera toutes les clés existantes dans le formulaire.", + "invalidKey": "Clé invalide", + "detectionError": "Erreur de détection", + "removing": "Supprimer:", + "clickToEditCredential": "Cliquer pour modifier les identifiants", + "dragToMoveBetweenFolders": "Faites glisser pour vous déplacer entre les dossiers", + "keyBasedOnlyForDeployment": "Seuls les identifiants basés sur la clé SSH peuvent être déployés", + "publicKeyRequiredForDeployment": "La clé publique est requise pour le déploiement", + "selectTargetHost": "Veuillez sélectionner un hôte cible", + "keyDeployedSuccessfully": "Clé SSH déployée avec succès", + "deploymentFailed": "Échec du déploiement", + "failedToDeployKey": "Échec du déploiement de la clé SSH", + "clickToRenameFolder": "Cliquez pour renommer le dossier", + "renameFolder": "Renommer le dossier", "idLabel": "ID:" }, "dragIndicator": { - "error": "Error: {{error}}", - "dragging": "Dragging {{fileName}}", - "preparing": "Preparing {{fileName}}", - "readySingle": "Ready to download {{fileName}}", - "readyMultiple": "Ready to download {{count}} files", - "batchDrag": "Drag {{count}} files to desktop", - "dragToDesktop": "Drag to desktop", - "canDragAnywhere": "You can drag files anywhere on your desktop" + "error": "Erreur: {{error}}", + "dragging": "Glisser sur {{fileName}}", + "preparing": "Préparation de {{fileName}}", + "readySingle": "Prêt à télécharger {{fileName}}", + "readyMultiple": "Prêt à télécharger les fichiers {{count}}", + "batchDrag": "Faites glisser les fichiers {{count}} vers le bureau", + "dragToDesktop": "Faites glisser vers le bureau", + "canDragAnywhere": "Vous pouvez faire glisser des fichiers n'importe où sur votre bureau" }, "sshTools": { - "title": "SSH Tools", - "closeTools": "Close SSH Tools", - "keyRecording": "Key Recording", - "startKeyRecording": "Start Key Recording", - "stopKeyRecording": "Stop Key Recording", - "selectTerminals": "Select terminals:", - "typeCommands": "Type commands (all keys supported):", - "commandsWillBeSent": "Commands will be sent to {{count}} selected terminal(s).", - "settings": "Settings", - "enableRightClickCopyPaste": "Enable right‑click copy/paste", - "shareIdeas": "Have ideas for what should come next for ssh tools? Share them on", + "title": "Outils SSH", + "closeTools": "Fermer les outils SSH", + "keyRecording": "Enregistrement de la clé", + "startKeyRecording": "Démarrer l'enregistrement de la clé", + "stopKeyRecording": "Arrêter l'enregistrement de la clé", + "selectTerminals": "Sélectionnez les terminaux:", + "typeCommands": "Commandes de type (toutes les clés sont supportées) :", + "commandsWillBeSent": "Les commandes seront envoyées aux terminaux sélectionnés {{count}}.", + "settings": "Réglages", + "enableRightClickCopyPaste": "Activer le clic-droit copier/coller", + "shareIdeas": "Vous avez des idées pour ce qui devrait venir pour les outils ssh ? Partagez-les sur", "scripts": { - "inputPlaceholder": "e.g., System Commands, Docker Scripts" + "inputPlaceholder": "ex: Commandes système, Scripts Docker" } }, "snippets": { - "title": "Snippets", - "new": "New Snippet", - "create": "Create Snippet", - "edit": "Edit Snippet", - "run": "Run", - "empty": "No snippets yet", - "emptyHint": "Create a snippet to save commonly used commands", - "searchSnippets": "Search snippets...", - "name": "Name", - "description": "Description", - "content": "Command", - "namePlaceholder": "e.g., Restart Nginx", - "descriptionPlaceholder": "Optional description", - "contentPlaceholder": "e.g., sudo systemctl restart nginx", - "nameRequired": "Name is required", - "contentRequired": "Command is required", - "createDescription": "Create a new command snippet for quick execution", - "editDescription": "Edit this command snippet", - "deleteConfirmTitle": "Delete Snippet", - "deleteConfirmDescription": "Are you sure you want to delete \"{{name}}\"?", - "createSuccess": "Snippet created successfully", - "updateSuccess": "Snippet updated successfully", - "deleteSuccess": "Snippet deleted successfully", - "createFailed": "Failed to create snippet", - "updateFailed": "Failed to update snippet", - "deleteFailed": "Failed to delete snippet", - "failedToFetch": "Failed to fetch snippets", - "executeSuccess": "Executing: {{name}}", - "copySuccess": "Copied \"{{name}}\" to clipboard", - "runTooltip": "Execute this snippet in the terminal", - "copyTooltip": "Copy snippet to clipboard", - "editTooltip": "Edit this snippet", - "deleteTooltip": "Delete this snippet", - "newFolder": "New Folder", - "reorderSameFolder": "Can only reorder snippets within the same folder", - "reorderSuccess": "Snippets reordered successfully", - "reorderFailed": "Failed to reorder snippets", - "deleteFolderConfirm": "Delete folder \"{{name}}\"? All snippets will be moved to Uncategorized.", - "deleteFolderSuccess": "Folder deleted successfully", - "deleteFolderFailed": "Failed to delete folder", - "updateFolderSuccess": "Folder updated successfully", - "createFolderSuccess": "Folder created successfully", - "updateFolderFailed": "Failed to update folder", - "createFolderFailed": "Failed to create folder", - "selectTerminals": "Select Terminals (optional)", - "executeOnSelected": "Execute on {{count}} selected terminal(s)", - "executeOnCurrent": "Execute on current terminal (click to select multiple)", - "folder": "Folder", - "selectFolder": "Select a folder or leave empty", - "noFolder": "No folder (Uncategorized)", - "folderName": "Folder Name", - "folderNameRequired": "Folder name is required", - "folderColor": "Folder Color", - "folderIcon": "Folder Icon", - "preview": "Preview", - "updateFolder": "Update Folder", - "createFolder": "Create Folder", - "editFolder": "Edit Folder", - "editFolderDescription": "Customize your snippet folder", - "createFolderDescription": "Organize your snippets into folders" + "title": "Extraits", + "new": "Nouveau Snippet", + "create": "Créer un snippet", + "edit": "Modifier le Snippet", + "run": "Exécuter", + "empty": "Pas encore de snippets", + "emptyHint": "Créer un snippet pour enregistrer les commandes couramment utilisées", + "searchSnippets": "Rechercher des snippets...", + "name": "Nom", + "description": "Libellé", + "content": "Commandes", + "namePlaceholder": "ex: Redémarrer Nginx", + "descriptionPlaceholder": "Description facultative", + "contentPlaceholder": "ex: sudo systemctl redémarrage nginx", + "nameRequired": "Le nom est requis", + "contentRequired": "La commande est requise", + "createDescription": "Créer un nouveau snippet de commande pour une exécution rapide", + "editDescription": "Modifier ce snippet de commande", + "deleteConfirmTitle": "Supprimer le snippet", + "deleteConfirmDescription": "Êtes-vous sûr de vouloir supprimer \"{{name}} \" ?", + "createSuccess": "Snippet créé avec succès", + "updateSuccess": "Snippet mis à jour avec succès", + "deleteSuccess": "Snippet supprimé avec succès", + "createFailed": "Impossible de créer un snippet", + "updateFailed": "Échec de la mise à jour du snippet", + "deleteFailed": "Impossible de supprimer le snippet", + "failedToFetch": "Impossible de récupérer les modules de texte", + "executeSuccess": "Exécution : {{name}}", + "copySuccess": "Copié «{{name}}» dans le presse-papiers", + "runTooltip": "Exécuter ce snippet dans le terminal", + "copyTooltip": "Copier le snippet dans le presse-papiers", + "editTooltip": "Modifier ce snippet", + "deleteTooltip": "Supprimer ce snippet", + "newFolder": "Nouveau dossier", + "reorderSameFolder": "Ne peut que réorganiser les extraits dans le même dossier", + "reorderSuccess": "Extraits réordonnés avec succès", + "reorderFailed": "Impossible de réorganiser les extraits de texte", + "deleteFolderConfirm": "Supprimer le dossier \"{{name}}\" ? Tous les snippets seront déplacés vers Uncategorized.", + "deleteFolderSuccess": "Dossier supprimé avec succès", + "deleteFolderFailed": "Échec de la suppression du dossier", + "updateFolderSuccess": "Dossier mis à jour avec succès", + "createFolderSuccess": "Dossier créé avec succès", + "updateFolderFailed": "Échec de la mise à jour du dossier", + "createFolderFailed": "Impossible de créer le dossier", + "selectTerminals": "Sélectionnez les terminaux (facultatif)", + "executeOnSelected": "Exécuter sur {{count}} terminaux(s) sélectionné(s)", + "executeOnCurrent": "Exécuter sur le terminal actuel (cliquez pour en sélectionner plusieurs)", + "folder": "Répertoire", + "selectFolder": "Sélectionnez un dossier ou laissez vide", + "noFolder": "Aucun dossier (non catégorisé)", + "folderName": "Nom du dossier", + "folderNameRequired": "Le nom du dossier est requis", + "folderColor": "Couleur du dossier", + "folderIcon": "Icône du dossier", + "preview": "Aperçu", + "updateFolder": "Mettre à jour le dossier", + "createFolder": "Créer un dossier", + "editFolder": "Modifier le dossier", + "editFolderDescription": "Personnaliser votre dossier de snippet", + "createFolderDescription": "Organiser vos modules de texte dans des dossiers" }, "commandHistory": { - "title": "History", - "searchPlaceholder": "Search commands...", - "noTerminal": "No active terminal", - "noTerminalHint": "Open a terminal to see its command history.", - "empty": "No command history yet", - "emptyHint": "Execute commands in the active terminal to build its history.", - "noResults": "No commands found", - "noResultsHint": "No commands matching \"{{query}}\"", - "deleteSuccess": "Command deleted from history", - "deleteFailed": "Failed to delete command.", - "deleteTooltip": "Delete command", - "tabHint": "Use Tab in Terminal to autocomplete from command history if enabled in User Profile", - "authRequiredRefresh": "Authentication required. Please refresh the page.", - "dataAccessLockedReauth": "Data access locked. Please re-authenticate.", - "loading": "Loading command history...", - "error": "Error Loading History" + "title": "Historique", + "searchPlaceholder": "Rechercher des commandes...", + "noTerminal": "Aucun terminal actif", + "noTerminalHint": "Ouvrez un terminal pour voir l'historique de ses commandes.", + "empty": "Aucun historique de commande pour le moment", + "emptyHint": "Exécutez des commandes dans le terminal actif pour construire son historique.", + "noResults": "Aucune commande trouvée", + "noResultsHint": "Aucune commande correspondant à \"{{query}}\"", + "deleteSuccess": "Commande supprimée de l'historique", + "deleteFailed": "Impossible de supprimer la commande.", + "deleteTooltip": "Supprimer la commande", + "tabHint": "Utilisez Tab dans le Terminal pour compléter automatiquement à partir de l'historique des commandes si activé dans le Profil de l'utilisateur", + "authRequiredRefresh": "Authentification requise. Veuillez actualiser la page.", + "dataAccessLockedReauth": "Accès aux données verrouillé. Veuillez vous authentifier.", + "loading": "Chargement de l'historique des commandes...", + "error": "Erreur lors du chargement de l'historique" }, "splitScreen": { - "title": "Split Screen", - "none": "None", - "twoSplit": "2-Way", - "threeSplit": "3-Way", - "fourSplit": "4-Way", - "availableTabs": "Available Tabs", - "dragTabsHint": "Drag tabs to the layout cells below to assign them", - "layout": "Split Screen Layout", - "dropHere": "Drop tab here", - "apply": "Apply Split", - "clear": "Clear Split", - "selectMode": "Select a split screen mode", - "helpText": "Choose how many tabs you want to view at once", - "success": "Split screen applied successfully", - "cleared": "Split screen cleared", + "title": "Écran partagé", + "none": "Aucun", + "twoSplit": "2-Voie", + "threeSplit": "3-Voie", + "fourSplit": "4 Voies", + "availableTabs": "Onglets disponibles", + "dragTabsHint": "Faites glisser les onglets vers les cellules de mise en page ci-dessous pour les assigner", + "layout": "Diviser la disposition de l'écran", + "dropHere": "Déposer l'onglet ici", + "apply": "Appliquer le Split", + "clear": "Vider le partage", + "selectMode": "Sélectionnez un mode écran partagé", + "helpText": "Choisissez le nombre d'onglets que vous voulez voir en même temps", + "success": "Écran partagé appliqué avec succès", + "cleared": "Écran partagé effacé", "error": { - "noAssignments": "Please assign at least one tab to the layout", - "fillAllSlots": "Please fill all {{count}} slots before applying" + "noAssignments": "Veuillez assigner au moins un onglet à la mise en page", + "fillAllSlots": "Veuillez remplir tous les emplacements {{count}} avant de postuler" } }, "homepage": { - "loggedInTitle": "Logged in!", - "loggedInMessage": "You are logged in! Use the sidebar to access all available tools. To get started, create an SSH Host in the SSH Manager tab. Once created, you can connect to that host using the other apps in the sidebar.", - "failedToLoadAlerts": "Failed to load alerts", - "failedToDismissAlert": "Failed to dismiss alert" + "loggedInTitle": "Connecté !", + "loggedInMessage": "Vous êtes connecté ! Utilisez la barre latérale pour accéder à tous les outils disponibles. Pour commencer, créez un hôte SSH dans l'onglet Gestionnaire SSH. Une fois créé, vous pouvez vous connecter à cet hôte en utilisant les autres applications de la barre latérale.", + "failedToLoadAlerts": "Impossible de charger les alertes", + "failedToDismissAlert": "Échec de la suppression de l'alerte" }, "serverConfig": { - "title": "Server Configuration", - "description": "Configure the Termix server URL to connect to your backend services", - "serverUrl": "Server URL", - "enterServerUrl": "Please enter a server URL", - "testConnectionFirst": "Please test the connection first", - "connectionSuccess": "Connection successful!", - "connectionFailed": "Connection failed", - "connectionError": "Connection error occurred", - "connected": "Connected", - "disconnected": "Disconnected", - "configSaved": "Configuration saved successfully", - "saveFailed": "Failed to save configuration", - "saveError": "Error saving configuration", - "saving": "Saving...", - "saveConfig": "Save Configuration", - "helpText": "Enter the URL where your Termix server is running (e.g., http://localhost:30001 or https://your-server.com)", - "warning": "Warning", - "notValidatedWarning": "URL not validated - ensure it's correct", - "changeServer": "Change Server", - "mustIncludeProtocol": "Server URL must start with http:// or https://" + "title": "Configuration du serveur", + "description": "Configurer l'URL du serveur Termix pour vous connecter à vos services backend", + "serverUrl": "URL du serveur", + "enterServerUrl": "Veuillez entrer une URL de serveur", + "testConnectionFirst": "Veuillez d'abord tester la connexion", + "connectionSuccess": "Connexion réussie!", + "connectionFailed": "Échec de la connexion", + "connectionError": "Une erreur de connexion s'est produite", + "connected": "Connecté", + "disconnected": "Déconnecté", + "configSaved": "Configuration enregistrée avec succès", + "saveFailed": "Échec de l'enregistrement de la configuration", + "saveError": "Erreur lors de l'enregistrement de la configuration", + "saving": "Sauvegarde en cours...", + "saveConfig": "Enregistrer la configuration", + "helpText": "Entrez l'URL où fonctionne votre serveur Termix (par exemple, http://localhost:30001 ou https://votre-serveur.com)", + "warning": "Avertissement", + "notValidatedWarning": "URL non validée - assurez-vous que c'est correct", + "changeServer": "Changer de serveur", + "mustIncludeProtocol": "L'URL du serveur doit commencer par http:// ou https://" }, "versionCheck": { - "error": "Version Check Error", - "checkFailed": "Failed to check for updates", - "upToDate": "App is Up to Date", - "currentVersion": "You are running version {{version}}", - "updateAvailable": "Update Available", - "newVersionAvailable": "A new version is available! You are running {{current}}, but {{latest}} is available.", - "releasedOn": "Released on {{date}}", - "downloadUpdate": "Download Update", - "dismiss": "Dismiss", - "checking": "Checking for updates...", - "checkUpdates": "Check for Updates", - "checkingUpdates": "Checking for updates...", - "refresh": "Refresh", - "updateRequired": "Update Required", - "updateDismissed": "Update notification dismissed", - "noUpdatesFound": "No updates found" + "error": "Erreur de vérification de version", + "checkFailed": "Impossible de vérifier les mises à jour", + "upToDate": "L'application est à jour", + "currentVersion": "Vous utilisez la version {{version}}", + "updateAvailable": "Mise à jour disponible", + "newVersionAvailable": "Une nouvelle version est disponible ! Vous utilisez {{current}}, mais {{latest}} est disponible.", + "releasedOn": "Publié sur {{date}}", + "downloadUpdate": "Télécharger la mise à jour", + "dismiss": "Refuser", + "checking": "Vérification des mises à jour...", + "checkUpdates": "Vérifier les mises à jour", + "checkingUpdates": "Vérification des mises à jour...", + "refresh": "Rafraîchir", + "updateRequired": "Mise à jour requise", + "updateDismissed": "Notification de mise à jour rejetée", + "noUpdatesFound": "Aucune mise à jour trouvée" }, "common": { - "close": "Close", + "close": "Fermer", "minimize": "Minimize", - "online": "Online", - "offline": "Offline", - "continue": "Continue", - "maintenance": "Maintenance", - "degraded": "Degraded", - "discord": "Discord", - "error": "Error", - "warning": "Warning", - "info": "Info", - "success": "Success", - "loading": "Loading...", - "required": "Required", - "optional": "Optional", - "connect": "Connect", - "connecting": "Connecting...", - "creating": "Creating...", - "clear": "Clear", - "toggleSidebar": "Toggle Sidebar", + "online": "En ligne", + "offline": "Hors ligne", + "continue": "Continuer", + "maintenance": "Entretien", + "degraded": "Dégradé", + "discord": "Discord.", + "error": "Erreur", + "warning": "Avertissement", + "info": "Infos", + "success": "Succès", + "loading": "Chargement en cours...", + "required": "Requis", + "optional": "Optionnel", + "connect": "Connecter", + "connecting": "Connexion en cours...", + "creating": "Création en cours...", + "clear": "Nettoyer", + "toggleSidebar": "Activer/désactiver la barre latérale", "sidebar": "Sidebar", - "home": "Home", - "expired": "Expired", - "expiresToday": "Expires today", - "expiresTomorrow": "Expires in {{days}} days", - "updateAvailable": "Update Available", - "sshPath": "SSH Path", - "localPath": "Local Path", + "home": "Domicile", + "expired": "Expiré", + "expiresToday": "Expire aujourd'hui", + "expiresTomorrow": "Expire dans {{days}} jours", + "updateAvailable": "Mise à jour disponible", + "sshPath": "Chemin SSH", + "localPath": "Chemin local", "appName": "Termix", "resetSidebarWidth": "Reset sidebar width", - "dragToResizeSidebar": "Drag to resize sidebar", - "noAuthCredentials": "No authentication credentials available for this SSH host", - "noReleases": "No Releases", - "updatesAndReleases": "Updates & Releases", - "newVersionAvailable": "A new version ({{version}}) is available.", - "failedToFetchUpdateInfo": "Failed to fetch update information", - "preRelease": "Pre-release", - "loginFailed": "Login failed", - "noReleasesFound": "No releases found.", - "yourBackupCodes": "Your Backup Codes", - "sendResetCode": "Send Reset Code", - "verifyCode": "Verify Code", - "resetPassword": "Reset Password", + "dragToResizeSidebar": "Glisser pour redimensionner la barre latérale", + "noAuthCredentials": "Aucun identifiant d'authentification disponible pour cet hôte SSH", + "noReleases": "Aucune publication", + "updatesAndReleases": "Mises à jour et versions", + "newVersionAvailable": "Une nouvelle version ({{version}}) est disponible.", + "failedToFetchUpdateInfo": "Impossible de récupérer les informations de mise à jour", + "preRelease": "Pré-version", + "loginFailed": "Échec de la connexion", + "noReleasesFound": "Aucune version trouvée.", + "yourBackupCodes": "Vos codes de sauvegarde", + "sendResetCode": "Envoyer le code de réinitialisation", + "verifyCode": "Vérifier le code", + "resetPassword": "Réinitialiser le mot de passe", "resetCode": "Reset Code", - "newPassword": "New Password", - "folder": "Folder", - "file": "File", - "renamedSuccessfully": "renamed successfully", - "deletedSuccessfully": "deleted successfully", - "noTunnelConnections": "No tunnel connections configured", - "sshTools": "SSH Tools", - "english": "English", - "chinese": "Chinese", - "german": "German", - "cancel": "Cancel", - "username": "Username", - "name": "Name", - "login": "Login", - "logout": "Logout", - "register": "Register", - "password": "Password", + "newPassword": "Nouveau mot de passe", + "folder": "Répertoire", + "file": "Fichier", + "renamedSuccessfully": "renommé avec succès", + "deletedSuccessfully": "supprimé avec succès", + "noTunnelConnections": "Aucune connexion tunnel configurée", + "sshTools": "Outils SSH", + "english": "Anglais", + "chinese": "Chinois", + "german": "Allemand", + "cancel": "Abandonner", + "username": "Nom d'utilisateur", + "name": "Nom", + "login": "Se connecter", + "logout": "Déconnexion", + "register": "Inscription", + "password": "Mot de passe", "version": "Version", - "confirmPassword": "Confirm Password", - "back": "Back", - "email": "Email", - "submit": "Submit", - "change": "Change", - "save": "Save", - "saving": "Saving...", - "delete": "Delete", - "edit": "Edit", - "add": "Add", - "search": "Search", - "confirm": "Confirm", - "yes": "Yes", - "no": "No", - "ok": "OK", - "enabled": "Enabled", - "disabled": "Disabled", + "confirmPassword": "Confirmer le mot de passe", + "back": "Précédent", + "email": "Courriel", + "submit": "Soumettre", + "change": "Changement", + "save": "Enregistrer", + "saving": "Sauvegarde en cours...", + "delete": "Supprimez", + "edit": "Editer", + "add": "Ajouter", + "search": "Chercher", + "confirm": "Valider", + "yes": "Oui", + "no": "Non", + "ok": "Ok", + "enabled": "Activé", + "disabled": "Désactivé", "important": "Important", - "notEnabled": "Not Enabled", - "settingUp": "Setting up...", - "next": "Next", - "previous": "Previous", - "refresh": "Refresh", - "settings": "Settings", - "profile": "Profile", - "help": "Help", - "about": "About", - "language": "Language", - "autoDetect": "Auto-detect", - "changeAccountPassword": "Change your account password", - "passwordResetTitle": "Password Reset", - "passwordResetDescription": "You are about to reset your password. This will log you out of all active sessions.", - "enterSixDigitCode": "Enter the 6-digit code from the docker container logs for user:", - "enterNewPassword": "Enter your new password for user:", - "passwordsDoNotMatch": "Passwords do not match", - "passwordMinLength": "Password must be at least 6 characters long", - "passwordResetSuccess": "Password reset successfully! You can now log in with your new password.", - "failedToInitiatePasswordReset": "Failed to initiate password reset", - "failedToVerifyResetCode": "Failed to verify reset code", - "failedToCompletePasswordReset": "Failed to complete password reset", + "notEnabled": "Non activé", + "settingUp": "Paramétrage en cours...", + "next": "Suivant", + "previous": "Précédent", + "refresh": "Rafraîchir", + "settings": "Réglages", + "profile": "Profil", + "help": "Aide", + "about": "À propos de", + "language": "Langue", + "autoDetect": "Détection automatique", + "changeAccountPassword": "Changer le mot de passe de votre compte", + "passwordResetTitle": "Réinitialisation du mot de passe", + "passwordResetDescription": "Vous êtes sur le point de réinitialiser votre mot de passe. Cela vous déconnectera de toutes les sessions actives.", + "enterSixDigitCode": "Entrez le code à 6 chiffres du journal du conteneur docker pour l'utilisateur :", + "enterNewPassword": "Entrez votre nouveau mot de passe pour l'utilisateur :", + "passwordsDoNotMatch": "Les mots de passe ne correspondent pas", + "passwordMinLength": "Le mot de passe doit comporter au moins 6 caractères", + "passwordResetSuccess": "Mot de passe réinitialisé avec succès ! Vous pouvez maintenant vous connecter avec votre nouveau mot de passe.", + "failedToInitiatePasswordReset": "Échec de la réinitialisation du mot de passe", + "failedToVerifyResetCode": "Impossible de vérifier le code de réinitialisation", + "failedToCompletePasswordReset": "Échec de la réinitialisation du mot de passe", "documentation": "Documentation", - "retry": "Retry", - "checking": "Checking...", - "checkingDatabase": "Checking database connection...", + "retry": "Réessayer", + "checking": "Vérification...", + "checkingDatabase": "Vérification de la connexion à la base de données...", "actions": "Actions", - "remove": "Remove", + "remove": "Retirer", "revoke": "Revoke", - "create": "Create" + "create": "Créer" }, "nav": { - "home": "Home", - "hosts": "Hosts", - "credentials": "Credentials", + "home": "Domicile", + "hosts": "Hôtes", + "credentials": "Identifiants", "terminal": "Terminal", "docker": "Docker", "tunnels": "Tunnels", - "fileManager": "File Manager", - "serverStats": "Server Stats", - "admin": "Admin", - "userProfile": "User Profile", - "tools": "Tools", - "snippets": "Snippets", + "fileManager": "Gestionnaire de fichiers", + "serverStats": "Statistiques du serveur", + "admin": "Administrateur", + "userProfile": "Profil de l'utilisateur", + "tools": "Outils", + "snippets": "Extraits", "newTab": "New Tab", - "splitScreen": "Split Screen", - "closeTab": "Close Tab", - "sshManager": "SSH Manager", - "hostManager": "Host Manager", - "cannotSplitTab": "Cannot split this tab", + "splitScreen": "Écran partagé", + "closeTab": "Fermer l'onglet", + "sshManager": "Gestionnaire SSH", + "hostManager": "Responsable d'hôte", + "cannotSplitTab": "Impossible de diviser cet onglet", "tabNavigation": "Tab Navigation", "hostTabTitle": "{{username}}@{{ip}}:{{port}}" }, "admin": { - "title": "Admin Settings", + "title": "Paramètres de l'administrateur", "oidc": "OIDC", - "users": "Users", - "userManagement": "User Management", - "makeAdmin": "Make Admin", - "removeAdmin": "Remove Admin", - "deleteUser": "Delete user {{username}}? This cannot be undone.", - "allowRegistration": "Allow Registration", - "oidcSettings": "OIDC Settings", - "clientId": "Client ID", - "clientSecret": "Client Secret", - "issuerUrl": "Issuer URL", - "authorizationUrl": "Authorization URL", - "tokenUrl": "Token URL", - "updateSettings": "Update Settings", - "confirmDelete": "Are you sure you want to delete this user?", - "confirmMakeAdmin": "Are you sure you want to make {{username}} an admin?", - "confirmRemoveAdmin": "Are you sure you want to remove admin status from {{username}}?", - "externalAuthentication": "External Authentication (OIDC)", - "configureExternalProvider": "Configure external identity provider for OIDC/OAuth2 authentication.", - "userIdentifierPath": "User Identifier Path", - "displayNamePath": "Display Name Path", - "scopes": "Scopes", - "saving": "Saving...", - "saveConfiguration": "Save Configuration", + "users": "Utilisateurs", + "userManagement": "Gestion des utilisateurs", + "makeAdmin": "Rendre administrateur", + "removeAdmin": "Supprimer l'administrateur", + "deleteUser": "Supprimer l'utilisateur {{username}}? Cette action est irréversible.", + "allowRegistration": "Autoriser l'enregistrement", + "oidcSettings": "Paramètres OIDC", + "clientId": "ID du client", + "clientSecret": "Secret du client", + "issuerUrl": "URL de l'émetteur", + "authorizationUrl": "URL d'autorisation", + "tokenUrl": "URL du jeton", + "updateSettings": "Mettre à jour les paramètres", + "confirmDelete": "Êtes-vous sûr de vouloir supprimer cet utilisateur ?", + "confirmMakeAdmin": "Êtes-vous sûr de vouloir faire de {{username}} un administrateur?", + "confirmRemoveAdmin": "Êtes-vous sûr de vouloir supprimer le statut d'administrateur de {{username}}?", + "externalAuthentication": "Authentification externe (OIDC)", + "configureExternalProvider": "Configurer le fournisseur d’identité externe pour l’authentification OIDC/OAuth2.", + "userIdentifierPath": "Chemin d'accès de l'utilisateur", + "displayNamePath": "Afficher le chemin du nom", + "scopes": "Portées", + "saving": "Sauvegarde en cours...", + "saveConfiguration": "Enregistrer la configuration", "reset": "Reset", - "success": "Success", - "loading": "Loading...", - "refresh": "Refresh", - "loadingUsers": "Loading users...", - "username": "Username", - "type": "Type", + "success": "Succès", + "loading": "Chargement en cours...", + "refresh": "Rafraîchir", + "loadingUsers": "Chargement des utilisateurs...", + "username": "Nom d'utilisateur", + "type": "Type de texte", "actions": "Actions", - "external": "External", - "local": "Local", - "adminManagement": "Admin Management", - "makeUserAdmin": "Make User Admin", - "adding": "Adding...", - "currentAdmins": "Current Admins", - "adminBadge": "Admin", - "removeAdminButton": "Remove Admin", - "general": "General", - "userRegistration": "User Registration", - "allowNewAccountRegistration": "Allow new account registration", - "allowPasswordLogin": "Allow username/password login", - "missingRequiredFields": "Missing required fields: {{fields}}", - "oidcConfigurationUpdated": "OIDC configuration updated successfully!", - "failedToFetchOidcConfig": "Failed to fetch OIDC configuration", - "failedToFetchRegistrationStatus": "Failed to fetch registration status", - "failedToFetchPasswordLoginStatus": "Failed to fetch password login status", - "failedToFetchUsers": "Failed to fetch users", - "oidcConfigurationDisabled": "OIDC configuration disabled successfully!", - "failedToUpdateOidcConfig": "Failed to update OIDC configuration", - "failedToDisableOidcConfig": "Failed to disable OIDC configuration", - "enterUsernameToMakeAdmin": "Enter username to make admin", - "userIsNowAdmin": "User {{username}} is now an admin", - "failedToMakeUserAdmin": "Failed to make user admin", - "removeAdminStatus": "Remove admin status from {{username}}?", - "adminStatusRemoved": "Admin status removed from {{username}}", - "failedToRemoveAdminStatus": "Failed to remove admin status", - "userDeletedSuccessfully": "User {{username}} deleted successfully", - "failedToDeleteUser": "Failed to delete user", - "overrideUserInfoUrl": "Override User Info URL (not required)", - "failedToFetchSessions": "Failed to fetch sessions", - "sessionRevokedSuccessfully": "Session revoked successfully", - "failedToRevokeSession": "Failed to revoke session", - "confirmRevokeSession": "Are you sure you want to revoke this session?", - "confirmRevokeAllSessions": "Are you sure you want to revoke all sessions for this user?", - "failedToRevokeSessions": "Failed to revoke sessions", - "sessionsRevokedSuccessfully": "Sessions revoked successfully", - "linkToPasswordAccount": "Link to Password Account", - "linkOIDCDialogTitle": "Link OIDC Account to Password Account", - "linkOIDCDialogDescription": "Link {{username}} (OIDC user) to an existing password account. This will enable dual authentication for the password account.", - "createUser": "Create User", - "createUserDescription": "Create a new local user with username and password", - "enterUsername": "Enter username", - "enterPassword": "Enter password", - "userCreatedSuccessfully": "User {{username}} created successfully", - "failedToCreateUser": "Failed to create user", - "manageUser": "Manage User", - "manageUserDescription": "Manage user settings, roles, and permissions", - "authType": "Authentication Type", - "adminStatus": "Admin Status", - "userId": "User ID", - "regularUser": "Regular User", - "adminPrivileges": "Administrator Privileges", - "administratorRole": "Administrator Role", - "administratorRoleDescription": "Grant full system access and management privileges", - "passwordManagement": "Password Management", - "passwordResetWarning": "Resetting a user's password will delete all their data (SSH hosts, credentials, settings). This action cannot be undone.", - "resetUserPassword": "Reset User Password", - "resettingPassword": "Resetting...", - "passwordResetInitiated": "Password reset initiated for {{username}}. Reset code sent.", - "failedToResetPassword": "Failed to initiate password reset", - "sessionManagement": "Session Management", - "revokeAllSessions": "Revoke All Sessions", - "revokeAllSessionsDescription": "Force logout from all devices and sessions", - "revoking": "Revoking...", - "revoke": "Revoke All", - "dangerZone": "Danger Zone", - "deleteUserTitle": "Delete User Account", - "deleteUserWarning": "Permanently delete this user account and all associated data. This action cannot be undone.", - "deleting": "Deleting...", - "cannotDeleteSelf": "You cannot delete your own account", - "cannotRemoveLastAdmin": "Cannot remove the last administrator", - "cannotRemoveOwnAdmin": "You cannot remove your own admin privileges", - "cannotModifyOwnAdminStatus": "You cannot modify your own admin status", - "dualAuth": "Dual Auth", - "externalOIDC": "External (OIDC)", - "localPassword": "Local Password", - "confirmRevokeOwnSessions": "Are you sure you want to revoke all your own sessions? You will be logged out.", - "linkOIDCWarningTitle": "Warning: OIDC User Data Will Be Deleted", - "linkOIDCActionDeleteUser": "Delete the OIDC user account and all their data", - "linkOIDCActionAddCapability": "Add OIDC login capability to the target password account", - "linkOIDCActionDualAuth": "Allow the password account to login with both password and OIDC", - "linkTargetUsernameLabel": "Target Password Account Username", - "linkTargetUsernamePlaceholder": "Enter username of password account", - "linkAccountsButton": "Link Accounts", - "linkingAccounts": "Linking...", - "accountsLinkedSuccessfully": "OIDC user {{oidcUsername}} has been linked to {{targetUsername}}", - "failedToLinkAccounts": "Failed to link accounts", - "linkTargetUsernameRequired": "Target username is required", - "unlinkOIDCTitle": "Unlink OIDC Authentication", - "unlinkOIDCDescription": "Remove OIDC authentication from {{username}}? The user will only be able to login with username/password after this.", - "unlinkOIDCSuccess": "OIDC unlinked from {{username}}", - "failedToUnlinkOIDC": "Failed to unlink OIDC", - "databaseSecurity": "Database Security", - "encryptionStatus": "Encryption Status", - "encryptionEnabled": "Encryption Enabled", - "enabled": "Enabled", - "disabled": "Disabled", - "keyId": "Key ID", - "created": "Created", - "migrationStatus": "Migration Status", - "migrationCompleted": "Migration completed", - "migrationRequired": "Migration required", - "deviceProtectedMasterKey": "Environment-Protected Master Key", - "legacyKeyStorage": "Legacy Key Storage", - "masterKeyEncryptedWithDeviceFingerprint": "Master key encrypted with environment fingerprint (KEK protection active)", - "keyNotProtectedByDeviceBinding": "Key not protected by environment binding (upgrade recommended)", + "external": "Externe", + "local": "Locale", + "adminManagement": "Gestion des administrateurs", + "makeUserAdmin": "Rendre l'administrateur de l'utilisateur", + "adding": "Ajout en cours...", + "currentAdmins": "Administrateurs actuels", + "adminBadge": "Administrateur", + "removeAdminButton": "Supprimer l'administrateur", + "general": "Généraux", + "userRegistration": "Inscription de l'utilisateur", + "allowNewAccountRegistration": "Autoriser l'enregistrement d'un nouveau compte", + "allowPasswordLogin": "Autoriser le nom d'utilisateur/mot de passe", + "missingRequiredFields": "Champs obligatoires manquants : {{fields}}", + "oidcConfigurationUpdated": "Configuration OIDC mise à jour avec succès !", + "failedToFetchOidcConfig": "Impossible de récupérer la configuration OIDC", + "failedToFetchRegistrationStatus": "Impossible de récupérer le statut d'enregistrement", + "failedToFetchPasswordLoginStatus": "Impossible de récupérer le statut de connexion du mot de passe", + "failedToFetchUsers": "Impossible de récupérer les utilisateurs", + "oidcConfigurationDisabled": "Configuration OIDC désactivée avec succès !", + "failedToUpdateOidcConfig": "Échec de la mise à jour de la configuration OIDC", + "failedToDisableOidcConfig": "Impossible de désactiver la configuration OIDC", + "enterUsernameToMakeAdmin": "Entrez le nom d'utilisateur pour devenir administrateur", + "userIsNowAdmin": "L'utilisateur {{username}} est maintenant un administrateur", + "failedToMakeUserAdmin": "Impossible de rendre l'administrateur de l'utilisateur", + "removeAdminStatus": "Supprimer le statut d'administrateur de {{username}}?", + "adminStatusRemoved": "Le statut administrateur a été supprimé de {{username}}", + "failedToRemoveAdminStatus": "Impossible de supprimer le statut d'administrateur", + "userDeletedSuccessfully": "Utilisateur {{username}} supprimé avec succès", + "failedToDeleteUser": "Échec de la suppression de l'utilisateur", + "overrideUserInfoUrl": "Remplacer l'URL des informations de l'utilisateur (pas obligatoire)", + "failedToFetchSessions": "Impossible de récupérer les sessions", + "sessionRevokedSuccessfully": "Session révoquée avec succès", + "failedToRevokeSession": "Échec de la révocation de la session", + "confirmRevokeSession": "Êtes-vous sûr de vouloir révoquer cette session ?", + "confirmRevokeAllSessions": "Êtes-vous sûr de vouloir révoquer toutes les sessions pour cet utilisateur ?", + "failedToRevokeSessions": "Impossible de révoquer les sessions", + "sessionsRevokedSuccessfully": "Sessions révoquées avec succès", + "linkToPasswordAccount": "Lien vers le compte de mot de passe", + "linkOIDCDialogTitle": "Lier le compte OIDC au compte de mot de passe", + "linkOIDCDialogDescription": "Lier {{username}} (utilisateur OIDC) à un compte de mot de passe existant. Cela permettra une double authentification pour le compte de mot de passe.", + "createUser": "Créer un utilisateur", + "createUserDescription": "Créer un nouvel utilisateur local avec le nom d'utilisateur et le mot de passe", + "enterUsername": "Entrez le nom d'utilisateur", + "enterPassword": "Entrez le mot de passe", + "userCreatedSuccessfully": "Utilisateur {{username}} créé avec succès", + "failedToCreateUser": "Impossible de créer l'utilisateur", + "manageUser": "Gérer l'utilisateur", + "manageUserDescription": "Gérer les paramètres, rôles et autorisations des utilisateurs", + "authType": "Type d'authentification", + "adminStatus": "Statut de l'administrateur", + "userId": "Identifiant de l'utilisateur", + "regularUser": "Utilisateur normal", + "adminPrivileges": "Privilèges d'Administrateur", + "administratorRole": "Rôle Administrateur", + "administratorRoleDescription": "Accorder des privilèges d'accès et de gestion au système complet", + "passwordManagement": "Gestion des mots de passe", + "passwordResetWarning": "La réinitialisation du mot de passe d'un utilisateur supprimera toutes ses données (hôtes, identifiants, paramètres). Cette action ne peut pas être annulée.", + "resetUserPassword": "Réinitialiser le mot de passe de l'utilisateur", + "resettingPassword": "Réinitialisation en cours...", + "passwordResetInitiated": "Réinitialisation du mot de passe initiée pour {{username}}. Code de réinitialisation envoyé.", + "failedToResetPassword": "Échec de la réinitialisation du mot de passe", + "sessionManagement": "Gestion de session", + "revokeAllSessions": "Révoquer toutes les sessions", + "revokeAllSessionsDescription": "Forcer la déconnexion de tous les appareils et sessions", + "revoking": "En cours de révocation...", + "revoke": "Révoquer tout", + "dangerZone": "Zone de danger", + "deleteUserTitle": "Supprimer le compte utilisateur", + "deleteUserWarning": "Supprimer définitivement ce compte utilisateur et toutes les données associées. Cette action ne peut pas être annulée.", + "deleting": "Suppression en cours...", + "cannotDeleteSelf": "Vous ne pouvez pas supprimer votre propre compte", + "cannotRemoveLastAdmin": "Impossible de supprimer le dernier administrateur", + "cannotRemoveOwnAdmin": "Vous ne pouvez pas supprimer vos propres privilèges d'administration", + "cannotModifyOwnAdminStatus": "Vous ne pouvez pas modifier votre propre statut d'administrateur", + "dualAuth": "Double Auth", + "externalOIDC": "Externe (OIDC)", + "localPassword": "Mot de passe local", + "confirmRevokeOwnSessions": "Êtes-vous sûr de vouloir révoquer toutes vos propres sessions ? Vous serez déconnecté.", + "linkOIDCWarningTitle": "Attention : les données des utilisateurs OIDC seront supprimées", + "linkOIDCActionDeleteUser": "Supprimer le compte utilisateur OIDC et toutes ses données", + "linkOIDCActionAddCapability": "Ajouter la capacité de connexion OIDC au compte de mot de passe cible", + "linkOIDCActionDualAuth": "Autoriser le compte de mot de passe à se connecter avec le mot de passe et OIDC", + "linkTargetUsernameLabel": "Nom d'utilisateur du compte de mot de passe cible", + "linkTargetUsernamePlaceholder": "Entrez le nom d'utilisateur du compte de mot de passe", + "linkAccountsButton": "Lier les comptes", + "linkingAccounts": "Liaison...", + "accountsLinkedSuccessfully": "L'utilisateur OIDC {{oidcUsername}} a été lié à {{targetUsername}}", + "failedToLinkAccounts": "Impossible de lier les comptes", + "linkTargetUsernameRequired": "Le nom d'utilisateur cible est requis", + "unlinkOIDCTitle": "Délier l'authentification OIDC", + "unlinkOIDCDescription": "Supprimer l'authentification OIDC de {{username}}? L'utilisateur ne pourra se connecter qu'avec le nom d'utilisateur/mot de passe après cela.", + "unlinkOIDCSuccess": "OIDC dissocié de {{username}}", + "failedToUnlinkOIDC": "Impossible de dissocier OIDC", + "databaseSecurity": "Sécurité de la base de données", + "encryptionStatus": "Statut du cryptage", + "encryptionEnabled": "Chiffrement activé", + "enabled": "Activé", + "disabled": "Désactivé", + "keyId": "ID de la clé", + "created": "Créé", + "migrationStatus": "Statut de la migration", + "migrationCompleted": "Migration terminée", + "migrationRequired": "Migration requise", + "deviceProtectedMasterKey": "Clé principale protégée par l'environnement", + "legacyKeyStorage": "Stockage de clés hérité", + "masterKeyEncryptedWithDeviceFingerprint": "Clé maîtresse chiffrée avec empreinte écologique (protection KEK active)", + "keyNotProtectedByDeviceBinding": "Clé non protégée par la liaison de l'environnement (mise à jour recommandée)", "valid": "Valid", - "initializeDatabaseEncryption": "Initialize Database Encryption", - "enableAes256EncryptionWithDeviceBinding": "Enable AES-256 encryption with environment-bound master key protection. This creates enterprise-grade security for SSH keys, passwords, and authentication tokens.", - "featuresEnabled": "Features enabled:", - "aes256GcmAuthenticatedEncryption": "AES-256-GCM authenticated encryption", - "deviceFingerprintMasterKeyProtection": "Environment fingerprint master key protection (KEK)", - "pbkdf2KeyDerivation": "PBKDF2 key derivation with 100K iterations", - "automaticKeyManagement": "Automatic key management and rotation", - "initializing": "Initializing...", - "initializeEnterpriseEncryption": "Initialize Enterprise Encryption", - "migrateExistingData": "Migrate Existing Data", - "encryptExistingUnprotectedData": "Encrypt existing unprotected data in your database. This process is safe and creates automatic backups.", - "testMigrationDryRun": "Verify Encryption Compatibility", - "migrating": "Migrating...", - "migrateData": "Migrate Data", - "securityInformation": "Security Information", - "sshPrivateKeysEncryptedWithAes256": "SSH private keys and passwords are encrypted with AES-256-GCM", - "userAuthTokensProtected": "User authentication tokens and 2FA secrets are protected", - "masterKeysProtectedByDeviceFingerprint": "Master encryption keys are protected by device fingerprint (KEK)", - "keysBoundToServerInstance": "Keys are bound to current server environment (migratable via environment variables)", - "pbkdf2HkdfKeyDerivation": "PBKDF2 + HKDF key derivation with 100K iterations", - "backwardCompatibleMigration": "All data remains backward compatible during migration", - "enterpriseGradeSecurityActive": "Enterprise-Grade Security Active", - "masterKeysProtectedByDeviceBinding": "Your master encryption keys are protected by environment fingerprinting. This uses server hostname, paths, and other environment info to generate protection keys. To migrate servers, set the DB_ENCRYPTION_KEY environment variable on the new server.", + "initializeDatabaseEncryption": "Initialiser le chiffrement de la base de données", + "enableAes256EncryptionWithDeviceBinding": "Activez le chiffrement AES-256 avec une protection par clé maîtresse liée à l'environnement. Cela crée une sécurité de niveau entreprise pour les clés SSH, les mots de passe et les jetons d'authentification.", + "featuresEnabled": "Fonctionnalités activées :", + "aes256GcmAuthenticatedEncryption": "Chiffrement authentifié AES-256-GCM", + "deviceFingerprintMasterKeyProtection": "Protection des clés maître d'empreinte (KEK) pour l'environnement", + "pbkdf2KeyDerivation": "Dérivation de clé PBKDF2 avec 100K itérations", + "automaticKeyManagement": "Gestion et rotation automatique des clés", + "initializing": "Initialisation en cours...", + "initializeEnterpriseEncryption": "Initialiser le chiffrement d'entreprise", + "migrateExistingData": "Migrer les données existantes", + "encryptExistingUnprotectedData": "Chiffrez les données non protégées existantes dans votre base de données. Ce processus est sécurisé et crée des sauvegardes automatiques.", + "testMigrationDryRun": "Vérifier la compatibilité du cryptage", + "migrating": "Migration en cours...", + "migrateData": "Migrer les données", + "securityInformation": "Informations de sécurité", + "sshPrivateKeysEncryptedWithAes256": "Les clés privées SSH et les mots de passe sont chiffrés avec AES-256-GCM", + "userAuthTokensProtected": "Les jetons d'authentification des utilisateurs et les secrets 2FA sont protégés", + "masterKeysProtectedByDeviceFingerprint": "Les clés de chiffrement maître sont protégées par l'empreinte digitale de l'appareil (KEK)", + "keysBoundToServerInstance": "Les clés sont liées à l'environnement serveur actuel (migrable via des variables d'environnement)", + "pbkdf2HkdfKeyDerivation": "PBKDF2 + HKDF dérivation de clé avec 100K itérations", + "backwardCompatibleMigration": "Toutes les données restent rétrocompatibles pendant la migration", + "enterpriseGradeSecurityActive": "Sécurité de niveau entreprise active", + "masterKeysProtectedByDeviceBinding": "Vos clés de chiffrement maître sont protégées par l'empreinte écologique. Cela utilise le nom d'hôte du serveur, les chemins et d'autres informations sur l'environnement pour générer des clés de protection. Pour migrer des serveurs, définissez la variable d'environnement DB_ENCRYPTION_KEY sur le nouveau serveur.", "important": "Important", - "keepEncryptionKeysSecure": "Ensure data security: regularly backup your database files and server configuration. To migrate to a new server, set the DB_ENCRYPTION_KEY environment variable on the new environment, or maintain the same hostname and directory structure.", - "loadingEncryptionStatus": "Loading encryption status...", - "testMigrationDescription": "Verify that existing data can be safely migrated to encrypted format without actually modifying any data", - "serverMigrationGuide": "Server Migration Guide", - "migrationInstructions": "To migrate encrypted data to a new server: 1) Backup database files, 2) Set environment variable DB_ENCRYPTION_KEY=\"your-key\" on new server, 3) Restore database files", - "environmentProtection": "Environment Protection", - "environmentProtectionDesc": "Protects encryption keys based on server environment info (hostname, paths, etc.), migratable via environment variables", - "verificationCompleted": "Compatibility verification completed - no data was changed", - "verificationInProgress": "Verification completed", - "dataMigrationCompleted": "Data migration completed successfully!", - "verificationFailed": "Compatibility verification failed", - "migrationFailed": "Migration failed", - "runningVerification": "Running compatibility verification...", - "startingMigration": "Starting migration...", - "hardwareFingerprintSecurity": "Hardware Fingerprint Security", - "hardwareBoundEncryption": "Hardware-Bound Encryption Active", - "masterKeysNowProtectedByHardwareFingerprint": "Master keys are now protected by real hardware fingerprinting instead of environment variables", - "cpuSerialNumberDetection": "CPU serial number detection", - "motherboardUuidIdentification": "Motherboard UUID identification", - "diskSerialNumberVerification": "Disk serial number verification", - "biosSerialNumberCheck": "BIOS serial number check", - "stableMacAddressFiltering": "Stable MAC address filtering", - "databaseFileEncryption": "Database File Encryption", - "dualLayerProtection": "Dual-Layer Protection Active", - "bothFieldAndFileEncryptionActive": "Both field-level and file-level encryption are now active for maximum security", - "fieldLevelAes256Encryption": "Field-level AES-256 encryption for sensitive data", - "fileLevelDatabaseEncryption": "File-level database encryption with hardware binding", - "hardwareBoundFileKeys": "Hardware-bound file encryption keys", - "automaticEncryptedBackups": "Automatic encrypted backup creation", - "createEncryptedBackup": "Create Encrypted Backup", - "creatingBackup": "Creating Backup...", - "backupCreated": "Backup Created", - "encryptedBackupCreatedSuccessfully": "Encrypted backup created successfully", - "backupCreationFailed": "Backup creation failed", - "databaseMigration": "Database Migration", - "exportForMigration": "Export for Migration", - "exportDatabaseForHardwareMigration": "Export database as SQLite file with decrypted data for migration to new hardware", + "keepEncryptionKeysSecure": "Assurez la sécurité des données : sauvegardez régulièrement vos fichiers de base de données et la configuration du serveur. Pour migrer vers un nouveau serveur, définissez la variable d'environnement DB_ENCRYPTION_KEY sur le nouvel environnement, ou maintenez la même structure de nom d'hôte et de répertoire.", + "loadingEncryptionStatus": "Chargement de l'état du chiffrement...", + "testMigrationDescription": "Vérifiez que les données existantes peuvent être migrées en toute sécurité vers un format chiffré sans pour autant modifier les données", + "serverMigrationGuide": "Guide de migration du serveur", + "migrationInstructions": "Pour migrer des données chiffrées vers un nouveau serveur: 1) Sauvegarder les fichiers de base de données, 2) Définir la variable d'environnement DB_ENCRYPTION_KEY=\"votre-clé\" sur le nouveau serveur, 3) Restaurer les fichiers de la base de données", + "environmentProtection": "Protection de l'environnement", + "environmentProtectionDesc": "Protège les clés de chiffrement basées sur les informations de l'environnement du serveur (nom d'hôte, chemins, etc.), migrables via des variables d'environnement", + "verificationCompleted": "Vérification de la compatibilité terminée - aucune donnée n'a été modifiée", + "verificationInProgress": "Vérification terminée", + "dataMigrationCompleted": "La migration des données s'est terminée avec succès !", + "verificationFailed": "La vérification de la compatibilité a échoué", + "migrationFailed": "La migration a échoué", + "runningVerification": "Vérification de la compatibilité...", + "startingMigration": "Démarrage de la migration...", + "hardwareFingerprintSecurity": "Sécurité des empreintes digitales matérielles", + "hardwareBoundEncryption": "Chiffrement matériel actif", + "masterKeysNowProtectedByHardwareFingerprint": "Les clés maîtresses sont maintenant protégées par une véritable empreinte digitale matérielle au lieu des variables d'environnement", + "cpuSerialNumberDetection": "Détection du numéro de série du CPU", + "motherboardUuidIdentification": "Identification UUID de la carte mère", + "diskSerialNumberVerification": "Vérification du numéro de série du disque", + "biosSerialNumberCheck": "Vérification du numéro de série du BIOS", + "stableMacAddressFiltering": "Filtrage stable des adresses MAC", + "databaseFileEncryption": "Chiffrement des fichiers de la base de données", + "dualLayerProtection": "Protection à double couche active", + "bothFieldAndFileEncryptionActive": "Le niveau du champ et le chiffrement au niveau du fichier sont maintenant actifs pour une sécurité maximale", + "fieldLevelAes256Encryption": "Chiffrement au niveau du champ AES-256 pour les données sensibles", + "fileLevelDatabaseEncryption": "Chiffrement de la base de données au niveau des fichiers avec liaison matérielle", + "hardwareBoundFileKeys": "Clés de chiffrement de fichiers reliées au matériel", + "automaticEncryptedBackups": "Création automatique de sauvegarde chiffrée", + "createEncryptedBackup": "Créer une sauvegarde chiffrée", + "creatingBackup": "Création de la sauvegarde...", + "backupCreated": "Sauvegarde créée", + "encryptedBackupCreatedSuccessfully": "Sauvegarde chiffrée créée avec succès", + "backupCreationFailed": "La création de la sauvegarde a échoué", + "databaseMigration": "Migration de la base de données", + "exportForMigration": "Exporter pour la migration", + "exportDatabaseForHardwareMigration": "Exporter la base de données en fichier SQLite avec des données déchiffrées pour la migration vers un nouveau matériel", "exportDatabase": "Export SQLite Database", - "exporting": "Exporting...", - "exportCreated": "SQLite Export Created", - "exportContainsDecryptedData": "SQLite export contains decrypted data - keep secure!", - "databaseExportedSuccessfully": "SQLite database exported successfully", - "databaseExportFailed": "SQLite database export failed", - "importFromMigration": "Import from Migration", - "importDatabaseFromAnotherSystem": "Import SQLite database from another system or hardware", + "exporting": "Exportation en cours...", + "exportCreated": "Export SQLite créé", + "exportContainsDecryptedData": "L'export SQLite contient des données déchiffrées - gardez la sécurité !", + "databaseExportedSuccessfully": "Base de données SQLite exportée avec succès", + "databaseExportFailed": "L'exportation de la base de données SQLite a échoué", + "importFromMigration": "Importer depuis la migration", + "importDatabaseFromAnotherSystem": "Importer une base de données SQLite depuis un autre système ou matériel", "importDatabase": "Import SQLite Database", - "importing": "Importing...", - "selectedFile": "Selected SQLite File", - "importWillReplaceExistingData": "SQLite import will replace existing data - backup recommended!", - "pleaseSelectImportFile": "Please select a SQLite import file", - "databaseImportedSuccessfully": "SQLite database imported successfully", - "databaseImportFailed": "SQLite database import failed", - "manageEncryptionAndBackups": "Manage encryption keys, database security, and backup operations", - "activeSecurityFeatures": "Currently active security measures and protections", - "deviceBindingTechnology": "Advanced hardware-based key protection technology", - "backupAndRecovery": "Secure backup creation and database recovery options", - "crossSystemDataTransfer": "Export and import databases across different systems", - "noMigrationNeeded": "No migration needed", - "encryptionKey": "Encryption Key", - "keyProtection": "Key Protection", - "active": "Active", - "legacy": "Legacy", - "dataStatus": "Data Status", - "encrypted": "Encrypted", - "needsMigration": "Needs Migration", - "ready": "Ready", - "initializeEncryption": "Initialize Encryption", - "initialize": "Initialize", - "test": "Test", - "migrate": "Migrate", - "backup": "Backup", - "createBackup": "Create Backup", - "exportImport": "Export/Import", - "export": "Export", - "import": "Import", - "passwordRequired": "Password required", - "confirmExport": "Confirm Export", - "exportDescription": "Export SSH hosts and credentials as SQLite file", - "importDescription": "Import SQLite file with incremental merge (skips duplicates)", - "criticalWarning": "Critical Warning", - "cannotDisablePasswordLoginWithoutOIDC": "Cannot disable password login without OIDC configured! You must configure OIDC authentication before disabling password login, or you will lose access to Termix.", - "confirmDisablePasswordLogin": "Are you sure you want to disable password login? Make sure OIDC is properly configured and working before proceeding, or you will lose access to your Termix instance.", - "passwordLoginDisabled": "Password login disabled successfully", - "passwordLoginAndRegistrationDisabled": "Password login and new account registration disabled successfully", - "requiresPasswordLogin": "Requires password login enabled", - "passwordLoginDisabledWarning": "Password login is disabled. Ensure OIDC is properly configured or you will not be able to log in to Termix.", - "oidcRequiredWarning": "CRITICAL: Password login is disabled. If you reset or misconfigure OIDC, you will lose all access to Termix and brick your instance. Only proceed if you are absolutely certain.", - "confirmDisableOIDCWarning": "WARNING: You are about to disable OIDC while password login is also disabled. This will brick your Termix instance and you will lose all access. Are you absolutely sure you want to proceed?", - "failedToUpdatePasswordLoginStatus": "Failed to update password login status", - "loadingSessions": "Loading sessions...", - "noActiveSessions": "No active sessions found.", - "device": "Device", - "user": "User", - "lastActive": "Last Active", - "expires": "Expires", + "importing": "Importation en cours...", + "selectedFile": "Fichier SQLite sélectionné", + "importWillReplaceExistingData": "L'importation de SQLite remplacera les données existantes - sauvegarde recommandée !", + "pleaseSelectImportFile": "Veuillez sélectionner un fichier d'import SQLite", + "databaseImportedSuccessfully": "Base de données SQLite importée avec succès", + "databaseImportFailed": "Échec de l'importation de la base de données SQLite", + "manageEncryptionAndBackups": "Gérer les clés de chiffrement, la sécurité des bases de données et les opérations de sauvegarde", + "activeSecurityFeatures": "Mesures et protections de sécurité actuellement actives", + "deviceBindingTechnology": "Technologie avancée de protection des clés basée sur le matériel", + "backupAndRecovery": "Options de création de sauvegarde sécurisée et de restauration de base de données", + "crossSystemDataTransfer": "Exporter et importer des bases de données sur différents systèmes", + "noMigrationNeeded": "Aucune migration nécessaire", + "encryptionKey": "Clé de chiffrement", + "keyProtection": "Protection des clés", + "active": "Actif", + "legacy": "Héritage", + "dataStatus": "Statut des données", + "encrypted": "Chiffré", + "needsMigration": "Besoin de migration", + "ready": "Prêt", + "initializeEncryption": "Initialiser le chiffrement", + "initialize": "Initialiser", + "test": "Tester", + "migrate": "Migrer", + "backup": "Sauvegarde", + "createBackup": "Créer une sauvegarde", + "exportImport": "Exporter/Importer", + "export": "Exportation", + "import": "Importation", + "passwordRequired": "Mot de passe requis", + "confirmExport": "Confirmer l'exportation", + "exportDescription": "Exporter les hôtes SSH et les identifiants en tant que fichier SQLite", + "importDescription": "Importer un fichier SQLite avec fusion incrémentale (ignore les doublons)", + "criticalWarning": "Avertissement critique", + "cannotDisablePasswordLoginWithoutOIDC": "Impossible de désactiver la connexion avec le mot de passe sans OIDC configuré ! Vous devez configurer l'authentification OIDC avant de désactiver la connexion par mot de passe, ou vous perdrez l'accès à Termix.", + "confirmDisablePasswordLogin": "Êtes-vous sûr de vouloir désactiver la connexion par mot de passe ? Assurez-vous que OIDC est correctement configuré et fonctionne avant de continuer, ou vous perdrez l'accès à votre instance Termix.", + "passwordLoginDisabled": "Mot de passe désactivé avec succès", + "passwordLoginAndRegistrationDisabled": "La connexion au mot de passe et l'enregistrement du nouveau compte ont été désactivés avec succès", + "requiresPasswordLogin": "Nécessite que le mot de passe soit activé", + "passwordLoginDisabledWarning": "La connexion au mot de passe est désactivée. Assurez-vous que OIDC est correctement configuré ou que vous ne pourrez pas vous connecter à Termix.", + "oidcRequiredWarning": "CRITIQUE : La connexion par mot de passe est désactivée. Si vous réinitialisez ou déconfigurez OIDC, vous perdrez tous les accès à Termix et brickez votre instance. Ne procédez que si vous êtes absolument certain.", + "confirmDisableOIDCWarning": "AVERTISSEMENT : Vous êtes sur le point de désactiver OIDC alors que la connexion au mot de passe est également désactivée. Cela va briquer votre instance Termix et vous perdrez tous les accès. Êtes-vous absolument sûr de vouloir continuer ?", + "failedToUpdatePasswordLoginStatus": "Impossible de mettre à jour le statut de connexion du mot de passe", + "loadingSessions": "Chargement des sessions...", + "noActiveSessions": "Aucune session active trouvée.", + "device": "Appareil", + "user": "Utilisateur", + "lastActive": "Dernier Actif", + "expires": "Expire", "revoked": "Revoked", - "revokeAllUserSessionsTitle": "Revoke all sessions for this user", - "revokeAll": "Revoke All", - "linkOidcToPasswordAccount": "Link OIDC Account to Password Account", - "linkOidcToPasswordAccountDescription": "Link {{username}} (OIDC user) to an existing password account. This will enable dual authentication for the password account.", - "linkOidcWarningTitle": "Warning: OIDC User Data Will Be Deleted", - "linkOidcWarningDescription": "This action will:", - "linkOidcActionDeleteUser": "Delete the OIDC user account and all their data", - "linkOidcActionAddCapability": "Add OIDC login capability to the target password account", - "linkOidcActionDualAuth": "Allow the password account to login with both password and OIDC", - "passwordMinLength": "Password must be at least 6 characters", - "currentRoles": "Current Roles", - "noRolesAssigned": "No roles assigned", - "assignNewRole": "Assign New Role" + "revokeAllUserSessionsTitle": "Révoquer toutes les sessions pour cet utilisateur", + "revokeAll": "Révoquer tout", + "linkOidcToPasswordAccount": "Lier le compte OIDC au compte de mot de passe", + "linkOidcToPasswordAccountDescription": "Lier {{username}} (utilisateur OIDC) à un compte de mot de passe existant. Cela permettra une double authentification pour le compte de mot de passe.", + "linkOidcWarningTitle": "Attention : les données des utilisateurs OIDC seront supprimées", + "linkOidcWarningDescription": "Cette action vaudra :", + "linkOidcActionDeleteUser": "Supprimer le compte utilisateur OIDC et toutes ses données", + "linkOidcActionAddCapability": "Ajouter la capacité de connexion OIDC au compte de mot de passe cible", + "linkOidcActionDualAuth": "Autoriser le compte de mot de passe à se connecter avec le mot de passe et OIDC", + "passwordMinLength": "Le mot de passe doit comporter au moins 6 caractères", + "currentRoles": "Rôles actuels", + "noRolesAssigned": "Aucun rôle assigné", + "assignNewRole": "Assigner un nouveau rôle" }, "hosts": { - "title": "Host Manager", - "sshHosts": "SSH Hosts", - "noHosts": "No SSH Hosts", - "noHostsMessage": "You haven't added any SSH hosts yet. Click \"Add Host\" to get started.", - "loadingHosts": "Loading hosts...", - "failedToLoadHosts": "Failed to load hosts", - "retry": "Retry", - "refresh": "Refresh", - "optional": "Optional", - "hostsCount": "{{count}} hosts", - "importJson": "Import JSON", - "importing": "Importing...", - "importJsonTitle": "Import SSH Hosts from JSON", - "importJsonDesc": "Upload a JSON file to bulk import multiple SSH hosts (max 100).", - "downloadSample": "Download Sample", - "formatGuide": "Format Guide", - "exportCredentialWarning": "Warning: Host \"{{name}}\" uses credential authentication. The exported file will not include the credential data and will need to be manually reconfigured after import. Do you want to continue?", - "exportSensitiveDataWarning": "Warning: Host \"{{name}}\" contains sensitive authentication data (password/SSH key). The exported file will include this data in plaintext. Please keep the file secure and delete it after use. Do you want to continue?", - "uncategorized": "Uncategorized", - "confirmDelete": "Are you sure you want to delete \"{{name}}\" ?", - "failedToDeleteHost": "Failed to delete host", - "failedToExportHost": "Failed to export host. Please ensure you're logged in and have access to the host data.", - "jsonMustContainHosts": "JSON must contain a \"hosts\" array or be an array of hosts", - "noHostsInJson": "No hosts found in JSON file", - "maxHostsAllowed": "Maximum 100 hosts allowed per import", - "importCompleted": "Import completed: {{success}} successful, {{failed}} failed", - "importFailed": "Import failed", - "importError": "Import error", - "failedToImportJson": "Failed to import JSON file", - "connectionDetails": "Connection Details", - "organization": "Organization", - "ipAddress": "IP Address", + "title": "Responsable d'hôte", + "sshHosts": "Hôtes SSH", + "noHosts": "Aucun hôte SSH", + "noHostsMessage": "Vous n'avez pas encore ajouté d'hôtes SSH. Cliquez sur \"Ajouter Hôte\" pour commencer.", + "loadingHosts": "Chargement des hôtes...", + "failedToLoadHosts": "Impossible de charger les hôtes", + "retry": "Réessayer", + "refresh": "Rafraîchir", + "optional": "Optionnel", + "hostsCount": "Hôtes {{count}}", + "importJson": "Importer JSON", + "importing": "Importation en cours...", + "importJsonTitle": "Importer les hôtes SSH depuis JSON", + "importJsonDesc": "Télécharger un fichier JSON pour importer en masse plusieurs hôtes SSH (max 100).", + "downloadSample": "Télécharger un exemple", + "formatGuide": "Guide de formatage", + "exportCredentialWarning": "Attention : l'hôte «{{name}}» utilise l'authentification des identifiants. Le fichier exporté n'inclura pas les données d'identification et devra être reconfiguré manuellement après l'importation. Voulez-vous continuer ?", + "exportSensitiveDataWarning": "Attention : L'hôte \"{{name}}\" contient des données d'authentification sensibles (clé mot de passe/SSH). Le fichier exporté inclura ces données en clair. Gardez le fichier sécurisé et supprimez-le après utilisation. Voulez-vous continuer?", + "uncategorized": "Non catégorisé", + "confirmDelete": "Êtes-vous sûr de vouloir supprimer \"{{name}}\" ?", + "failedToDeleteHost": "Échec de la suppression de l'hôte", + "failedToExportHost": "Impossible d'exporter l'hôte. Veuillez vous assurer que vous êtes connecté et que vous avez accès aux données de l'hôte.", + "jsonMustContainHosts": "Le JSON doit contenir un tableau \"hosts\" ou être un tableau d'hôtes", + "noHostsInJson": "Aucun hôte trouvé dans le fichier JSON", + "maxHostsAllowed": "Maximum 100 hôtes autorisés par import", + "importCompleted": "Importation terminée : {{success}} réussie, {{failed}} a échoué", + "importFailed": "Importation échouée", + "importError": "Erreur d'importation", + "failedToImportJson": "Impossible d'importer le fichier JSON", + "connectionDetails": "Détails de la connexion", + "organization": "Organisation", + "ipAddress": "Adresse IP", "port": "Port", - "name": "Name", - "username": "Username", - "folder": "Folder", + "name": "Nom", + "username": "Nom d'utilisateur", + "folder": "Répertoire", "tags": "Tags", - "pin": "Pin", + "pin": "Épingler", "notes": "Notes", - "expirationDate": "Expiration Date", - "passwordRequired": "Password is required when using password authentication", - "sshKeyRequired": "SSH Private Key is required when using key authentication", - "keyTypeRequired": "Key Type is required when using key authentication", - "mustSelectValidSshConfig": "Must select a valid SSH configuration from the list", - "addHost": "Add Host", - "editHost": "Edit Host", - "cloneHost": "Clone Host", - "updateHost": "Update Host", - "hostUpdatedSuccessfully": "Host \"{{name}}\" updated successfully!", + "expirationDate": "Date d'expiration", + "passwordRequired": "Le mot de passe est requis lorsque vous utilisez l'authentification par mot de passe", + "sshKeyRequired": "La clé privée SSH est requise lors de l'utilisation de l'authentification par clé", + "keyTypeRequired": "Le type de clé est requis lors de l'utilisation de l'authentification par clé", + "mustSelectValidSshConfig": "Vous devez sélectionner une configuration SSH valide dans la liste", + "addHost": "Ajouter un hôte", + "editHost": "Modifier l'hôte", + "cloneHost": "Cloner l'hôte", + "updateHost": "Mettre à jour l'hôte", + "hostUpdatedSuccessfully": "Hôte \"{{name}}\" mis à jour avec succès !", "hostAddedSuccessfully": "Host \"{{name}}\" added successfully!", "hostDeletedSuccessfully": "Host \"{{name}}\" deleted successfully!", - "failedToSaveHost": "Failed to save host. Please try again.", - "savingHost": "Saving host...", - "updatingHost": "Updating host...", - "cloningHost": "Cloning host...", - "enableTerminal": "Enable Terminal", - "enableTerminalDesc": "Enable/disable host visibility in Terminal tab", - "enableTunnel": "Enable Tunnel", - "enableTunnelDesc": "Enable/disable host visibility in Tunnel tab", - "enableFileManager": "Enable File Manager", - "enableFileManagerDesc": "Enable/disable host visibility in File Manager tab", - "enableDockerDesc": "Enable/disable host visibility in Docker tab", - "enableDocker": "Enable Docker", - "defaultPath": "Default Path", - "defaultPathDesc": "Default directory when opening file manager for this host", - "tunnelConnections": "Tunnel Connections", - "connection": "Connection", - "remove": "Remove", - "sourcePort": "Source Port", - "sourcePortDesc": " (Source refers to the Current Connection Details in the General tab)", - "endpointPort": "Endpoint Port", - "endpointSshConfig": "Endpoint SSH Configuration", - "tunnelForwardDescription": "This tunnel will forward traffic from port {{sourcePort}} on the source machine (current connection details in general tab) to port {{endpointPort}} on the endpoint machine.", - "maxRetries": "Max Retries", - "maxRetriesDescription": "Maximum number of retry attempts for tunnel connection.", - "retryInterval": "Retry Interval (seconds)", - "retryIntervalDescription": "Time to wait between retry attempts.", - "autoStartContainer": "Auto Start on Container Launch", - "autoStartDesc": "Automatically start this tunnel when the container launches", - "addConnection": "Add Tunnel Connection", - "sshpassRequired": "Sshpass Required For Password Authentication", - "sshpassRequiredDesc": "For password authentication in tunnels, sshpass must be installed on the system.", - "otherInstallMethods": "Other installation methods:", - "debianUbuntuEquivalent": "(Debian/Ubuntu) or the equivalent for your OS.", - "or": "or", + "failedToSaveHost": "Échec de l'enregistrement de l'hôte. Veuillez réessayer.", + "savingHost": "Enregistrement de l'hôte...", + "updatingHost": "Mise à jour de l'hôte...", + "cloningHost": "Clonage de l'hôte...", + "enableTerminal": "Activer le Terminal", + "enableTerminalDesc": "Activer/désactiver la visibilité de l'hôte dans l'onglet Terminal", + "enableTunnel": "Activer le tunnel", + "enableTunnelDesc": "Activer/désactiver la visibilité de l'hôte dans l'onglet Tunnel", + "enableFileManager": "Activer le gestionnaire de fichiers", + "enableFileManagerDesc": "Activer/désactiver la visibilité de l'hôte dans l'onglet Gestionnaire de fichiers", + "enableDockerDesc": "Activer/désactiver la visibilité de l'hôte dans l'onglet Docker", + "enableDocker": "Activer Docker", + "defaultPath": "Chemin par défaut", + "defaultPathDesc": "Répertoire par défaut lors de l'ouverture du gestionnaire de fichiers pour cet hôte", + "tunnelConnections": "Connexions Tunnel", + "connection": "Raccordement", + "remove": "Retirer", + "sourcePort": "Port source", + "sourcePortDesc": " (Source se réfère aux détails de connexion en cours dans l'onglet Général)", + "endpointPort": "Port de terminaison", + "endpointSshConfig": "Configuration SSH du point d'extrémité", + "tunnelForwardDescription": "Ce tunnel acheminera le trafic depuis le port {{sourcePort}} sur la machine source (détails de connexion actuels dans l'onglet général) vers le port {{endpointPort}} sur la machine d'extrémité.", + "maxRetries": "Nombre maximum de tentatives", + "maxRetriesDescription": "Nombre maximum de tentatives de nouvelle tentative de connexion au tunnel.", + "retryInterval": "Intervalle de réessai (secondes)", + "retryIntervalDescription": "Temps d'attente entre les deux tentatives.", + "autoStartContainer": "Démarrage automatique au lancement du conteneur", + "autoStartDesc": "Démarrer automatiquement ce tunnel lorsque le conteneur démarre", + "addConnection": "Ajouter une connexion Tunnel", + "sshpassRequired": "Sshpass requis pour l'authentification par mot de passe", + "sshpassRequiredDesc": "Pour l'authentification par mot de passe dans les tunnels, sshpass doit être installé sur le système.", + "otherInstallMethods": "Autres méthodes d'installation :", + "debianUbuntuEquivalent": "(Debian/Ubuntu) ou l'équivalent pour votre système d'exploitation.", + "or": "ou", "centosRhelFedora": "CentOS/RHEL/Fedora", "macos": "macOS", - "windows": "Windows", - "sshServerConfigRequired": "SSH Server Configuration Required", - "sshServerConfigDesc": "For tunnel connections, the SSH server must be configured to allow port forwarding:", - "gatewayPortsYes": "to bind remote ports to all interfaces", - "allowTcpForwardingYes": "to enable port forwarding", - "permitRootLoginYes": "if using root user for tunneling", - "editSshConfig": "Edit /etc/ssh/sshd_config and restart SSH: sudo systemctl restart sshd", - "upload": "Upload", - "authentication": "Authentication", - "password": "Password", - "key": "Key", - "credential": "Credential", - "none": "None", - "selectCredential": "Select Credential", - "selectCredentialPlaceholder": "Choose a credential...", - "credentialRequired": "Credential is required when using credential authentication", - "credentialDescription": "Selecting a credential will overwrite the current username and use the credential's authentication details.", - "cannotChangeAuthAsSharedUser": "Cannot change authentication as shared user", - "sshPrivateKey": "SSH Private Key", - "keyPassword": "Key Password", - "keyType": "Key Type", - "autoDetect": "Auto-detect", + "windows": "Fenêtres", + "sshServerConfigRequired": "Configuration du serveur SSH requise", + "sshServerConfigDesc": "Pour les connexions de tunnels, le serveur SSH doit être configuré pour permettre la redirection de port :", + "gatewayPortsYes": "pour lier les ports distants à toutes les interfaces", + "allowTcpForwardingYes": "pour activer la redirection de port", + "permitRootLoginYes": "si vous utilisez l'utilisateur root pour le tunneling", + "editSshConfig": "Editer /etc/ssh/sshd_config et redémarrer SSH: sudo systemctl redémarrer sshd", + "upload": "Charger", + "authentication": "Authentification", + "password": "Mot de passe", + "key": "Clés", + "credential": "Identification", + "none": "Aucun", + "selectCredential": "Sélectionner les informations d'identification", + "selectCredentialPlaceholder": "Choisissez un identifiant...", + "credentialRequired": "Les informations d'identification sont requises lors de l'utilisation de l'authentification", + "credentialDescription": "La sélection d'un identifiant écrasera le nom d'utilisateur actuel et utilisera les informations d'authentification des identifiants.", + "cannotChangeAuthAsSharedUser": "Impossible de changer l'authentification en tant qu'utilisateur partagé", + "sshPrivateKey": "Clé privée SSH", + "keyPassword": "Mot de passe de la clé", + "keyType": "Type de clé", + "autoDetect": "Détection automatique", "rsa": "RSA", "ed25519": "ED25519", "ecdsaNistP256": "ECDSA NIST P-256", "ecdsaNistP384": "ECDSA NIST P-384", "ecdsaNistP521": "ECDSA NIST P-521", "dsa": "DSA", - "rsaSha2256": "RSA SHA2-256", + "rsaSha2256": "SHA2-256 RSA", "rsaSha2512": "RSA SHA2-512", - "uploadFile": "Upload File", - "pasteKey": "Paste Key", - "updateKey": "Update Key", - "existingKey": "Existing Key (click to change)", - "existingCredential": "Existing Credential (click to change)", - "addTagsSpaceToAdd": "add tags (space to add)", + "uploadFile": "Charger un fichier", + "pasteKey": "Coller la clé", + "updateKey": "Mettre à jour la clé", + "existingKey": "Clé existante (cliquez pour modifier)", + "existingCredential": "Identification existante (cliquez pour modifier)", + "addTagsSpaceToAdd": "ajouter des tags (espace à ajouter)", "terminalBadge": "Terminal", "tunnelBadge": "Tunnel", - "fileManagerBadge": "File Manager", - "general": "General", + "fileManagerBadge": "Gestionnaire de fichiers", + "general": "Généraux", "terminal": "Terminal", "tunnel": "Tunnel", - "fileManager": "File Manager", - "serverStats": "Server Stats", - "hostViewer": "Host Viewer", - "enableServerStats": "Enable Server Stats", - "enableServerStatsDesc": "Enable/disable server statistics collection for this host", - "displayItems": "Display Items", - "displayItemsDesc": "Choose which metrics to display on the server stats page", - "enableCpu": "CPU Usage", - "enableMemory": "Memory Usage", - "enableDisk": "Disk Usage", - "enableNetwork": "Network Statistics (Coming Soon)", - "enableProcesses": "Process Count (Coming Soon)", - "enableUptime": "Uptime (Coming Soon)", - "enableHostname": "Hostname (Coming Soon)", - "enableOs": "Operating System (Coming Soon)", - "customCommands": "Custom Commands (Coming Soon)", - "customCommandsDesc": "Define custom shutdown and reboot commands for this server", - "shutdownCommand": "Shutdown Command", - "rebootCommand": "Reboot Command", - "confirmRemoveFromFolder": "Are you sure you want to remove \"{{name}}\" from folder \"{{folder}}\"? The host will be moved to \"No Folder\".", - "removedFromFolder": "Host \"{{name}}\" removed from folder successfully", - "failedToRemoveFromFolder": "Failed to remove host from folder", - "folderRenamed": "Folder \"{{oldName}}\" renamed to \"{{newName}}\" successfully", - "failedToRenameFolder": "Failed to rename folder", - "editFolderAppearance": "Edit Folder Appearance", - "editFolderAppearanceDesc": "Customize the color and icon for folder", - "folderColor": "Folder Color", - "folderIcon": "Folder Icon", - "preview": "Preview", - "folderAppearanceUpdated": "Folder appearance updated successfully", - "failedToUpdateFolderAppearance": "Failed to update folder appearance", - "deleteAllHostsInFolder": "Delete All Hosts in Folder", - "confirmDeleteAllHostsInFolder": "Are you sure you want to delete all {{count}} hosts in folder \"{{folder}}\"? This action cannot be undone.", - "allHostsInFolderDeleted": "Deleted {{count}} hosts from folder \"{{folder}}\" successfully", - "failedToDeleteHostsInFolder": "Failed to delete hosts in folder", - "movedToFolder": "Host \"{{name}}\" moved to \"{{folder}}\" successfully", - "failedToMoveToFolder": "Failed to move host to folder", - "clickToRenameFolder": "Click to rename folder", - "renameFolder": "Rename folder", - "removeFromFolder": "Remove from folder \"{{folder}}\"", - "editHostTooltip": "Edit host", - "deleteHostTooltip": "Delete host", - "exportHostTooltip": "Export host", - "cloneHostTooltip": "Clone host", - "clickToEditHost": "Click to edit host", - "dragToMoveBetweenFolders": "Drag to move between folders", - "exportedHostConfig": "Exported host configuration for {{name}}", - "openTerminal": "Open Terminal", - "openFileManager": "Open File Manager", - "openTunnels": "Open Tunnels", - "openServerDetails": "Open Server Details", - "statistics": "Statistics", - "enabledWidgets": "Enabled Widgets", - "openServerStats": "Open Server Stats", - "enabledWidgetsDesc": "Select which statistics widgets to display for this host", - "monitoringConfiguration": "Monitoring Configuration", - "monitoringConfigurationDesc": "Configure how often server statistics and status are checked", - "statusCheckEnabled": "Enable Status Monitoring", - "statusCheckEnabledDesc": "Check if the server is online or offline", - "statusCheckInterval": "Status Check Interval", - "statusCheckIntervalDesc": "How often to check if host is online (5s - 1h)", - "metricsEnabled": "Enable Metrics Monitoring", - "metricsEnabledDesc": "Collect CPU, RAM, disk, and other system statistics", - "metricsInterval": "Metrics Collection Interval", - "metricsIntervalDesc": "How often to collect server statistics (5s - 1h)", - "intervalSeconds": "seconds", + "fileManager": "Gestionnaire de fichiers", + "serverStats": "Statistiques du serveur", + "hostViewer": "Visionneuse Hôte", + "enableServerStats": "Activer les statistiques du serveur", + "enableServerStatsDesc": "Activer/désactiver la collecte des statistiques du serveur pour cet hôte", + "displayItems": "Afficher les éléments", + "displayItemsDesc": "Choisir les métriques à afficher sur la page des statistiques du serveur", + "enableCpu": "Usage du CPU", + "enableMemory": "Utilisation de la mémoire", + "enableDisk": "Utilisation du disque", + "enableNetwork": "Statistiques du réseau (à venir)", + "enableProcesses": "Nombre de processus (à venir)", + "enableUptime": "Temps de disponibilité (à venir)", + "enableHostname": "Nom d'hôte (à venir)", + "enableOs": "Système d'exploitation (à venir)", + "customCommands": "Commandes personnalisées (à venir)", + "customCommandsDesc": "Définir des commandes personnalisées d'arrêt et de redémarrage pour ce serveur", + "shutdownCommand": "Commande d'arrêt", + "rebootCommand": "Commande de redémarrage", + "confirmRemoveFromFolder": "Êtes-vous sûr de vouloir supprimer \"{{name}}\" du dossier \"{{folder}}\" ? L'hôte sera déplacé vers \"Aucun dossier\".", + "removedFromFolder": "L'hôte «{{name}}» a été retiré du dossier avec succès", + "failedToRemoveFromFolder": "Impossible de supprimer l'hôte du dossier", + "folderRenamed": "Le dossier \"{{oldName}}\" a été renommé en \"{{newName}}\" avec succès", + "failedToRenameFolder": "Impossible de renommer le dossier", + "editFolderAppearance": "Modifier l'apparence du dossier", + "editFolderAppearanceDesc": "Personnaliser la couleur et l'icône du dossier", + "folderColor": "Couleur du dossier", + "folderIcon": "Icône du dossier", + "preview": "Aperçu", + "folderAppearanceUpdated": "Apparence du dossier mise à jour avec succès", + "failedToUpdateFolderAppearance": "Échec de la mise à jour de l'apparence du dossier", + "deleteAllHostsInFolder": "Supprimer tous les hôtes du dossier", + "confirmDeleteAllHostsInFolder": "Êtes-vous sûr de vouloir supprimer tous les hôtes {{count}} du dossier \"{{folder}}\" ? Cette action ne peut pas être annulée.", + "allHostsInFolderDeleted": "Hôtes {{count}} supprimés du dossier \"{{folder}}\" avec succès", + "failedToDeleteHostsInFolder": "Impossible de supprimer les hôtes dans le dossier", + "movedToFolder": "L'hôte «{{name}}» a été déplacé vers «{{folder}}» avec succès", + "failedToMoveToFolder": "Impossible de déplacer l'hôte vers le dossier", + "clickToRenameFolder": "Cliquez pour renommer le dossier", + "renameFolder": "Renommer le dossier", + "removeFromFolder": "Retirer du dossier \"{{folder}}\"", + "editHostTooltip": "Modifier l'hôte", + "deleteHostTooltip": "Supprimer l'hôte", + "exportHostTooltip": "Exporter l'hôte", + "cloneHostTooltip": "Cloner l'hôte", + "clickToEditHost": "Cliquez pour modifier l'hôte", + "dragToMoveBetweenFolders": "Faites glisser pour vous déplacer entre les dossiers", + "exportedHostConfig": "Configuration de l'hôte exporté pour {{name}}", + "openTerminal": "Ouvrir le terminal", + "openFileManager": "Ouvrir le gestionnaire de fichiers", + "openTunnels": "Tunnels ouverts", + "openServerDetails": "Détails de l'Open Server", + "statistics": "Statistiques", + "enabledWidgets": "Widgets activés", + "openServerStats": "Statistiques du serveur ouvert", + "enabledWidgetsDesc": "Sélectionnez les widgets de statistiques à afficher pour cet hôte", + "monitoringConfiguration": "Configuration de la surveillance", + "monitoringConfigurationDesc": "Configurer la fréquence de vérification des statistiques et de l'état du serveur", + "statusCheckEnabled": "Activer la surveillance de l'état", + "statusCheckEnabledDesc": "Vérifier si le serveur est en ligne ou hors ligne", + "statusCheckInterval": "Intervalle de vérification de l'état", + "statusCheckIntervalDesc": "À quelle fréquence vérifier si l'hôte est en ligne (5s - 1h)", + "metricsEnabled": "Activer la surveillance des métriques", + "metricsEnabledDesc": "Collecter des statistiques CPU, RAM, disque et autres systèmes", + "metricsInterval": "Intervalle de collecte des métriques", + "metricsIntervalDesc": "Fréquence de collecte des statistiques du serveur (5s - 1h)", + "intervalSeconds": "secondes", "intervalMinutes": "minutes", - "intervalValidation": "Monitoring intervals must be between 5 seconds and 1 hour (3600 seconds)", - "monitoringDisabled": "Server monitoring is disabled for this host", - "enableMonitoring": "Enable monitoring in Host Manager → Statistics tab", - "monitoringDisabledBadge": "Monitoring Off", - "statusMonitoring": "Status", - "metricsMonitoring": "Metrics", - "terminalCustomization": "Terminal Customization", - "appearance": "Appearance", - "behavior": "Behavior", - "advanced": "Advanced", - "themePreview": "Theme Preview", - "theme": "Theme", - "selectTheme": "Select theme", - "chooseColorTheme": "Choose a color theme for the terminal", - "fontFamily": "Font Family", + "intervalValidation": "Les intervalles de surveillance doivent être compris entre 5 secondes et 1 heure (3600 secondes)", + "monitoringDisabled": "La surveillance du serveur est désactivée pour cet hôte", + "enableMonitoring": "Activer la surveillance dans l'onglet Gestionnaire d'hôtes → Statistiques", + "monitoringDisabledBadge": "Surveillance désactivée", + "statusMonitoring": "Statut", + "metricsMonitoring": "Métriques", + "terminalCustomization": "Personnalisation du terminal", + "appearance": "Apparence", + "behavior": "Comportement", + "advanced": "Avancé", + "themePreview": "Aperçu du thème", + "theme": "Thème", + "selectTheme": "Sélectionner un thème", + "chooseColorTheme": "Choisissez un thème de couleur pour le terminal", + "fontFamily": "Famille de police", "selectFont": "Select font", - "selectFontDesc": "Select the font to use in the terminal", + "selectFontDesc": "Sélectionnez la police à utiliser dans le terminal", "fontSize": "Font Size", - "fontSizeValue": "Font Size: {{value}}px", - "adjustFontSize": "Adjust the terminal font size", - "letterSpacing": "Letter Spacing", - "letterSpacingValue": "Letter Spacing: {{value}}px", - "adjustLetterSpacing": "Adjust spacing between characters", - "lineHeight": "Line Height", - "lineHeightValue": "Line Height: {{value}}", - "adjustLineHeight": "Adjust spacing between lines", - "cursorStyle": "Cursor Style", - "selectCursorStyle": "Select cursor style", - "cursorStyleBlock": "Block", - "cursorStyleUnderline": "Underline", - "cursorStyleBar": "Bar", - "chooseCursorAppearance": "Choose the cursor appearance", - "cursorBlink": "Cursor Blink", - "enableCursorBlink": "Enable cursor blinking animation", - "scrollbackBuffer": "Scrollback Buffer", - "scrollbackBufferValue": "Scrollback Buffer: {{value}} lines", - "scrollbackBufferDesc": "Number of lines to keep in scrollback history", - "bellStyle": "Bell Style", - "selectBellStyle": "Select bell style", - "bellStyleNone": "None", - "bellStyleSound": "Sound", - "bellStyleVisual": "Visual", - "bellStyleBoth": "Both", - "bellStyleDesc": "How to handle terminal bell (BEL character, \\x07). Programs trigger this when completing tasks, encountering errors, or for notifications. \"Sound\" plays an audio beep, \"Visual\" flashes the screen briefly, \"Both\" does both, \"None\" disables bell alerts.", - "rightClickSelectsWord": "Right Click Selects Word", - "rightClickSelectsWordDesc": "Right-clicking selects the word under cursor", - "fastScrollModifier": "Fast Scroll Modifier", - "selectModifier": "Select modifier", + "fontSizeValue": "Taille de la police : {{value}}px", + "adjustFontSize": "Ajuster la taille de la police du terminal", + "letterSpacing": "Espacement des lettres", + "letterSpacingValue": "Espacement de la lettre : {{value}}px", + "adjustLetterSpacing": "Ajuster l'espacement entre les caractères", + "lineHeight": "Hauteur de la ligne", + "lineHeightValue": "Hauteur de la ligne : {{value}}", + "adjustLineHeight": "Ajuster l'espacement entre les lignes", + "cursorStyle": "Style du curseur", + "selectCursorStyle": "Sélectionner le style du curseur", + "cursorStyleBlock": "Bloquer", + "cursorStyleUnderline": "Souligné", + "cursorStyleBar": "Barre", + "chooseCursorAppearance": "Choisir l'apparence du curseur", + "cursorBlink": "Clignotement du curseur", + "enableCursorBlink": "Activer l'animation de clignotement du curseur", + "scrollbackBuffer": "Défilement du tampon", + "scrollbackBufferValue": "Tampon de défilement arrière: Lignes {{value}}", + "scrollbackBufferDesc": "Nombre de lignes à conserver dans l'historique du défilement", + "bellStyle": "Style de la cloche", + "selectBellStyle": "Sélectionner le style de la cloche", + "bellStyleNone": "Aucun", + "bellStyleSound": "Sonnerie", + "bellStyleVisual": "Visuel", + "bellStyleBoth": "Les deux", + "bellStyleDesc": "Comment gérer la cloche du terminal (caractère BEL, \\x07). Les programmes déclenchent cela lors de la réalisation des tâches, de la rencontre d'erreurs ou des notifications. \"Son\" joue un bip audio, \"Visual\" clignote l'écran brièvement, \"Les deux\" fait les deux, \"Aucun\" désactive les alertes de cloches.", + "rightClickSelectsWord": "Clic droit sélectionne le mot", + "rightClickSelectsWordDesc": "Un clic droit sélectionne le mot sous le curseur", + "fastScrollModifier": "Modificateur de défilement rapide", + "selectModifier": "Sélectionner le modificateur", "modifierAlt": "Alt", "modifierCtrl": "Ctrl", - "modifierShift": "Shift", - "fastScrollModifierDesc": "Modifier key for fast scrolling", - "fastScrollSensitivity": "Fast Scroll Sensitivity", - "fastScrollSensitivityValue": "Fast Scroll Sensitivity: {{value}}", - "fastScrollSensitivityDesc": "Scroll speed multiplier when modifier is held", - "minimumContrastRatio": "Minimum Contrast Ratio", - "minimumContrastRatioValue": "Minimum Contrast Ratio: {{value}}", - "minimumContrastRatioDesc": "Automatically adjust colors for better readability", - "sshAgentForwarding": "SSH Agent Forwarding", - "sshAgentForwardingDesc": "Forward SSH authentication agent to remote host", - "backspaceMode": "Backspace Mode", - "selectBackspaceMode": "Select backspace mode", + "modifierShift": "Maj", + "fastScrollModifierDesc": "Modifier la touche de défilement rapide", + "fastScrollSensitivity": "Sensibilité au défilement rapide", + "fastScrollSensitivityValue": "Sensibilité au défilement rapide: {{value}}", + "fastScrollSensitivityDesc": "Multiplicateur de vitesse de défilement lorsque le modificateur est maintenu", + "minimumContrastRatio": "Ratio de contraste minimum", + "minimumContrastRatioValue": "Ratio de contraste minimum: {{value}}", + "minimumContrastRatioDesc": "Ajuster automatiquement les couleurs pour une meilleure lisibilité", + "sshAgentForwarding": "Transfert d'Agent SSH", + "sshAgentForwardingDesc": "Transférer l'agent d'authentification SSH vers l'hôte distant", + "backspaceMode": "Mode Retour arrière", + "selectBackspaceMode": "Sélectionner le mode backspace", "backspaceModeNormal": "Normal (DEL)", "backspaceModeControlH": "Control-H (^H)", - "backspaceModeDesc": "Backspace key behavior for compatibility", - "startupSnippet": "Startup Snippet", - "selectSnippet": "Select snippet", - "searchSnippets": "Search snippets...", - "snippetNone": "None", - "noneAuthTitle": "Keyboard-Interactive Authentication", - "noneAuthDescription": "This authentication method will use keyboard-interactive authentication when connecting to the SSH server.", - "noneAuthDetails": "Keyboard-interactive authentication allows the server to prompt you for credentials during connection. This is useful for servers that require multi-factor authentication or if you do not want to save credentials locally.", - "forceKeyboardInteractive": "Force Keyboard-Interactive", - "forceKeyboardInteractiveDesc": "Forces the use of keyboard-interactive authentication. This is sometimes required for servers that use Two-Factor Authentication (TOTP/2FA).", - "overrideCredentialUsername": "Override Credential Username", - "overrideCredentialUsernameDesc": "Use a different username than the one stored in the credential. This allows you to use the same credential with different usernames.", - "jumpHosts": "Jump Hosts", - "jumpHostsDescription": "Jump hosts (also known as bastion hosts) allow you to connect to a target server through one or more intermediate servers. This is useful for accessing servers behind firewalls or in private networks.", - "jumpHostChain": "Jump Host Chain", - "addJumpHost": "Add Jump Host", - "selectServer": "Select Server", - "searchServers": "Search servers...", - "noServerFound": "No server found", - "jumpHostsOrder": "Connections will be made in order: Jump Host 1 → Jump Host 2 → ... → Target Server", - "socks5Proxy": "SOCKS5 Proxy", - "socks5Description": "Configure SOCKS5 proxy for SSH connection. All traffic will be routed through the specified proxy server.", - "enableSocks5": "Enable SOCKS5 Proxy", - "enableSocks5Description": "Use SOCKS5 proxy for this SSH connection", - "socks5Host": "Proxy Host", - "socks5Port": "Proxy Port", - "socks5Username": "Proxy Username", - "socks5Password": "Proxy Password", - "socks5UsernameOptional": "Optional: leave empty if proxy doesn't require authentication", - "socks5PasswordOptional": "Optional: leave empty if proxy doesn't require authentication", - "socks5ProxyChain": "Proxy Chain", - "socks5ProxyChainDescription": "Configure a chain of SOCKS proxies. Each proxy in the chain will connect through the previous one.", - "socks5ProxyMode": "Proxy Mode", - "socks5UseSingleProxy": "Use Single Proxy", - "socks5UseProxyChain": "Use Proxy Chain", - "socks5UsePreset": "Use Saved Preset", - "socks5SelectPreset": "Select Preset", - "socks5ManagePresets": "Manage Presets", + "backspaceModeDesc": "Comportement de la clé backspace pour la compatibilité", + "startupSnippet": "Snippet de démarrage", + "selectSnippet": "Sélectionner un snippet", + "searchSnippets": "Rechercher des snippets...", + "snippetNone": "Aucun", + "noneAuthTitle": "Authentification interactive du clavier", + "noneAuthDescription": "Cette méthode d'authentification utilisera l'authentification interactive au clavier lors de la connexion au serveur SSH.", + "noneAuthDetails": "L'authentification interactive au clavier permet au serveur de vous demander des informations d'identification pendant la connexion. Ceci est utile pour les serveurs qui nécessitent une authentification multi-facteurs ou si vous ne voulez pas enregistrer les identifiants localement.", + "forceKeyboardInteractive": "Forcer l'interaction du clavier", + "forceKeyboardInteractiveDesc": "Force l'utilisation de l'authentification interactive au clavier. Ceci est parfois nécessaire pour les serveurs qui utilisent l'authentification à deux facteurs (TOTP/2FA).", + "overrideCredentialUsername": "Remplacer le nom d'utilisateur de l'identifiant", + "overrideCredentialUsernameDesc": "Utilisez un nom d'utilisateur différent de celui enregistré dans l'identifiant. Cela vous permet d'utiliser le même identifiant avec différents noms d'utilisateurs.", + "jumpHosts": "Hôtes de saut", + "jumpHostsDescription": "Les hôtes de saut (également appelés hôtes bastion) vous permettent de vous connecter à un serveur cible via un ou plusieurs serveurs intermédiaires. Ceci est utile pour accéder à des serveurs derrière des pare-feu ou dans des réseaux privés.", + "jumpHostChain": "Chaîne de saut d'hôte", + "addJumpHost": "Ajouter l'hôte de saut", + "selectServer": "Sélectionner un serveur", + "searchServers": "Rechercher des serveurs...", + "noServerFound": "Aucun serveur trouvé", + "jumpHostsOrder": "Les connexions seront effectuées dans l'ordre : Saut Hôte 1 → Hôte de saut 2 → ... → Serveur cible", + "socks5Proxy": "Proxy SOCKS5", + "socks5Description": "Configurer le proxy SOCKS5 pour la connexion SSH. Tout le trafic sera acheminé via le serveur proxy spécifié.", + "enableSocks5": "Activer le proxy SOCKS5", + "enableSocks5Description": "Utiliser le proxy SOCKS5 pour cette connexion SSH", + "socks5Host": "Hôte du Proxy", + "socks5Port": "Port du proxy", + "socks5Username": "Nom d'utilisateur du proxy", + "socks5Password": "Mot de passe du proxy", + "socks5UsernameOptional": "Optionnel: laisser vide si le proxy ne nécessite pas d'authentification", + "socks5PasswordOptional": "Optionnel: laisser vide si le proxy ne nécessite pas d'authentification", + "socks5ProxyChain": "Chaîne de Proxy", + "socks5ProxyChainDescription": "Configurez une chaîne de proxys SOCKS. Chaque proxy de la chaîne se connectera à travers le précédent.", + "socks5ProxyMode": "Mode Proxy", + "socks5UseSingleProxy": "Utiliser un proxy unique", + "socks5UseProxyChain": "Utiliser la chaîne de proxy", + "socks5UsePreset": "Utiliser le préréglage enregistré", + "socks5SelectPreset": "Sélectionner le préréglage", + "socks5ManagePresets": "Gérer les préréglages", "socks5ProxyNode": "Proxy {{number}}", - "socks5AddProxy": "Add Proxy to Chain", - "socks5RemoveProxy": "Remove Proxy", - "socks5ProxyType": "Proxy Type", - "socks5SaveAsPreset": "Save as Preset", - "socks5SavePresetTitle": "Save Proxy Chain as Preset", - "socks5SavePresetDescription": "Save the current proxy chain configuration as a reusable preset", - "socks5PresetName": "Preset Name", - "socks5PresetDescription": "Description (optional)", - "socks5PresetCreated": "Proxy chain preset created", - "socks5PresetUpdated": "Proxy chain preset updated", - "socks5PresetDeleted": "Proxy chain preset deleted", - "socks5PresetSaved": "Preset \"{{name}}\" saved successfully", - "socks5PresetSaveError": "Failed to save preset", - "socks5PresetNameRequired": "Preset name is required", - "socks5EmptyChainError": "Cannot save an empty proxy chain", - "socks5ProxyChainEmpty": "Add at least one proxy to the chain", - "socks5HostDescription": "Hostname or IP address of the SOCKS proxy server", - "socks5PortDescription": "Port number of the SOCKS proxy server (default: 1080)", - "addProxyNode": "Add Proxy Node", - "noProxyNodes": "No proxy nodes configured. Click 'Add Proxy Node' to add one.", - "proxyNode": "Proxy Node", - "proxyType": "Proxy Type", - "quickActions": "Quick Actions", - "quickActionsDescription": "Quick actions allow you to create custom buttons that execute SSH snippets on this server. These buttons will appear at the top of the Server Stats page for quick access.", - "quickActionsList": "Quick Actions List", - "addQuickAction": "Add Quick Action", - "quickActionName": "Action name", - "noSnippetFound": "No snippet found", - "quickActionsOrder": "Quick action buttons will appear in the order listed above on the Server Stats page", - "advancedAuthSettings": "Advanced Authentication Settings", - "sudoPasswordAutoFill": "Sudo Password Auto-Fill", - "sudoPasswordAutoFillDesc": "Automatically offer to insert SSH password when sudo prompts for password", - "sudoPassword": "Sudo Password", - "sudoPasswordDesc": "Optional password for sudo commands (useful with key authentication)", + "socks5AddProxy": "Ajouter un proxy à la chaîne", + "socks5RemoveProxy": "Supprimer le proxy", + "socks5ProxyType": "Type de proxy", + "socks5SaveAsPreset": "Enregistrer en tant que préréglage", + "socks5SavePresetTitle": "Enregistrer la chaîne de proxy comme préréglage", + "socks5SavePresetDescription": "Enregistrer la configuration actuelle de la chaîne de proxy comme un préréglage réutilisable", + "socks5PresetName": "Nom du préréglage", + "socks5PresetDescription": "Description (facultatif)", + "socks5PresetCreated": "Préréglage de la chaîne de proxy créé", + "socks5PresetUpdated": "Préréglage de la chaîne de proxy mis à jour", + "socks5PresetDeleted": "Préréglage de la chaîne de proxy supprimé", + "socks5PresetSaved": "Le préréglage «{{name}}» a été enregistré avec succès", + "socks5PresetSaveError": "Échec de l'enregistrement du préréglage", + "socks5PresetNameRequired": "Le nom du préréglage est requis", + "socks5EmptyChainError": "Impossible d'enregistrer une chaîne de proxy vide", + "socks5ProxyChainEmpty": "Ajouter au moins un proxy à la chaîne", + "socks5HostDescription": "Nom d'hôte ou adresse IP du serveur proxy SOCKS", + "socks5PortDescription": "Numéro de port du serveur proxy SOCKS (par défaut: 1080)", + "addProxyNode": "Ajouter un noeud Proxy", + "noProxyNodes": "Aucun noeud proxy configuré. Cliquez sur 'Ajouter un noeud Proxy' pour en ajouter un.", + "proxyNode": "Noeud Proxy", + "proxyType": "Type de proxy", + "quickActions": "Actions rapides", + "quickActionsDescription": "Les actions rapides vous permettent de créer des boutons personnalisés qui exécutent des extraits SSH sur ce serveur. Ces boutons apparaîtront en haut de la page des statistiques du serveur pour un accès rapide.", + "quickActionsList": "Liste des actions rapides", + "addQuickAction": "Ajouter une action rapide", + "quickActionName": "Nom de l'action", + "noSnippetFound": "Aucun snippet trouvé", + "quickActionsOrder": "Les boutons d'action rapide apparaîtront dans l'ordre indiqué ci-dessus sur la page des statistiques du serveur", + "advancedAuthSettings": "Paramètres avancés d'authentification", + "sudoPasswordAutoFill": "Remplissage automatique du mot de passe Sudo", + "sudoPasswordAutoFillDesc": "Proposer automatiquement d'insérer le mot de passe SSH lorsque sudo demande le mot de passe", + "sudoPassword": "Mot de passe Sudo", + "sudoPasswordDesc": "Mot de passe optionnel pour les commandes sudo (utile avec l'authentification de la clé)", "socks4": "SOCKS4", "socks5": "SOCKS5", - "executeSnippetOnConnect": "Execute a snippet when the terminal connects", - "autoMosh": "Auto-MOSH", - "autoMoshDesc": "Automatically run MOSH command on connect", - "moshCommand": "MOSH Command", - "moshCommandDesc": "The MOSH command to execute", - "environmentVariables": "Environment Variables", - "environmentVariablesDesc": "Set custom environment variables for the terminal session", - "variableName": "Variable name", - "variableValue": "Value", - "addVariable": "Add Variable", + "executeSnippetOnConnect": "Exécuter un snippet lorsque le terminal se connecte", + "autoMosh": "MOSH automatique", + "autoMoshDesc": "Lancer automatiquement la commande MOSH à la connexion", + "moshCommand": "Commande MOSH", + "moshCommandDesc": "La commande MOSH à exécuter", + "environmentVariables": "Variables d'environnement", + "environmentVariablesDesc": "Définir des variables d'environnement personnalisées pour la session de terminal", + "variableName": "Nom de la variable", + "variableValue": "Valeur", + "addVariable": "Ajouter une variable", "docker": "Docker", - "openDocker": "Open Docker", - "notEnabled": "Docker is not enabled for this host. Enable it in Host Settings to use Docker features.", - "validating": "Validating Docker...", - "error": "Error", - "errorCode": "Error code: {{code}}", + "openDocker": "Ouvrir Docker", + "notEnabled": "Docker n'est pas activé pour cet hôte. Activez-le dans les paramètres de l'hôte pour utiliser les fonctionnalités Docker.", + "validating": "Validation de Docker...", + "error": "Erreur", + "errorCode": "Code d'erreur: {{code}}", "version": "Docker v{{version}}", - "current": "Current", - "used_limit": "Used / Limit", - "percentage": "Percentage", + "current": "Actuel", + "used_limit": "Utilisé / Limite", + "percentage": "Pourcentage", "input": "Input", - "output": "Output", - "read": "Read", - "write": "Write", + "output": "Sortie", + "read": "Lu", + "write": "Écrire", "pids": "PIDs", "id": "ID", - "state": "State", + "state": "État", "console": "Console", - "containerMustBeRunning": "Container must be running to connect to console", - "authenticationRequired": "Authentication required", - "connectedTo": "Connected to {{containerName}}", - "disconnected": "Disconnected", - "consoleError": "Console error", - "errorMessage": "Error: {{message}}", - "failedToConnect": "Failed to connect to console", - "disconnectedFromContainer": "Disconnected from container console.", - "containerNotRunning": "Container is not running", - "startContainerToAccess": "Start the container to access the console", - "selectShell": "Select shell", - "bash": "Bash", + "containerMustBeRunning": "Le conteneur doit être en cours d'exécution pour se connecter à la console", + "authenticationRequired": "Authentification requise", + "connectedTo": "Connecté à {{containerName}}", + "disconnected": "Déconnecté", + "consoleError": "Erreur de la console", + "errorMessage": "Erreur: {{message}}", + "failedToConnect": "Impossible de se connecter à la console", + "disconnectedFromContainer": "Déconnecté de la console conteneur.", + "containerNotRunning": "Le conteneur n'est pas en cours d'exécution", + "startContainerToAccess": "Démarrez le conteneur pour accéder à la console", + "selectShell": "Sélectionner une coquille", + "bash": "Frappe", "sh": "Sh", - "ash": "Ash", - "connecting": "Connecting...", - "connect": "Connect", - "disconnect": "Disconnect", - "notConnected": "Not connected", - "clickToConnect": "Click Connect to start an interactive shell", - "connectingTo": "Connecting to {{containerName}}...", - "containerMustBeRunningToViewStats": "Container must be running to view stats", - "failedToFetchStats": "Failed to fetch stats", - "noContainersFound": "No containers found", - "noContainersFoundHint": "Start by creating containers on your server", - "searchPlaceholder": "Search by name, image, or ID...", - "filterByStatusPlaceholder": "Filter by status", - "allContainersCount": "All ({{count}})", + "ash": "Cendre", + "connecting": "Connexion en cours...", + "connect": "Connecter", + "disconnect": "Déconnecter", + "notConnected": "Non connecté", + "clickToConnect": "Cliquez sur Connecter pour démarrer un shell interactif", + "connectingTo": "Connexion à {{containerName}}...", + "containerMustBeRunningToViewStats": "Le conteneur doit être en cours d'exécution pour afficher les statistiques", + "failedToFetchStats": "Impossible de récupérer les statistiques", + "noContainersFound": "Aucun conteneur trouvé", + "noContainersFoundHint": "Commencez par créer des conteneurs sur votre serveur", + "searchPlaceholder": "Recherche par nom, image ou ID...", + "filterByStatusPlaceholder": "Filtrer par statut", + "allContainersCount": "Tout ({{count}})", "statusCount": "{{status}} ({{count}})", - "noContainersMatchFilters": "No containers match your filters", - "noContainersMatchFiltersHint": "Try adjusting your search or filter", - "containerStarted": "Container {{name}} started", - "failedToStartContainer": "Failed to start container: {{error}}", - "containerStopped": "Container {{name}} stopped", - "failedToStopContainer": "Failed to stop container: {{error}}", - "containerRestarted": "Container {{name}} restarted", - "failedToRestartContainer": "Failed to restart container: {{error}}", - "containerUnpaused": "Container {{name}} unpaused", - "containerPaused": "Container {{name}} paused", - "failedToTogglePauseContainer": "Failed to {{action}} container: {{error}}", - "containerRemoved": "Container {{name}} removed", - "failedToRemoveContainer": "Failed to remove container: {{error}}", + "noContainersMatchFilters": "Aucun conteneur ne correspond à vos filtres", + "noContainersMatchFiltersHint": "Essayez d'ajuster votre recherche ou votre filtre", + "containerStarted": "Le conteneur {{name}} a commencé", + "failedToStartContainer": "Impossible de démarrer le conteneur : {{error}}", + "containerStopped": "Conteneur {{name}} arrêté", + "failedToStopContainer": "Impossible d'arrêter le conteneur : {{error}}", + "containerRestarted": "Le conteneur {{name}} a redémarré", + "failedToRestartContainer": "Impossible de redémarrer le conteneur : {{error}}", + "containerUnpaused": "Le conteneur {{name}} a été rétabli", + "containerPaused": "Conteneur {{name}} suspendu", + "failedToTogglePauseContainer": "Échec du conteneur {{action}} : {{error}}", + "containerRemoved": "Conteneur {{name}} supprimé", + "failedToRemoveContainer": "Impossible de supprimer le conteneur : {{error}}", "image": "Image:", "idLabel": "ID:", - "ports": "Ports:", - "noPorts": "None", - "created": "Created:", - "start": "Start", - "stop": "Stop", + "ports": "Ports :", + "noPorts": "Aucun", + "created": "Créé :", + "start": "Début", + "stop": "Arrêter", "unpause": "Unpause", - "pause": "Pause", - "restart": "Restart", - "removeContainer": "Remove Container", - "confirmRemoveContainer": "Are you sure you want to remove container \"{{name}}\"?", - "runningContainerWarning": "Warning: This container is currently running and will be force-removed.", - "removing": "Removing:", - "containerNotFound": "Container not found", - "backToList": "Back to list", - "logs": "Logs", + "pause": "Mettre en pause", + "restart": "Redémarrer", + "removeContainer": "Supprimer le conteneur", + "confirmRemoveContainer": "Êtes-vous sûr de vouloir supprimer le conteneur \"{{name}} \" ?", + "runningContainerWarning": "Attention : ce conteneur est actuellement en cours d'exécution et sera supprimé de force.", + "removing": "Supprimer:", + "containerNotFound": "Conteneur introuvable", + "backToList": "Retour à la liste", + "logs": "Journaux", "stats": "Stats", "consoleTab": "Console", - "failedToFetchLogs": "Failed to fetch logs: {{error}}", - "failedToDownloadLogs": "Failed to download logs: {{error}}", - "linesToShow": "Lines to show", - "last50Lines": "Last 50 lines", - "last100Lines": "Last 100 lines", - "last500Lines": "Last 500 lines", - "last1000Lines": "Last 1000 lines", - "allLogs": "All logs", - "showTimestamps": "Show Timestamps", - "autoRefresh": "Auto Refresh", - "filterLogsPlaceholder": "Filter logs...", - "noLogsAvailable": "No logs available" + "failedToFetchLogs": "Impossible de récupérer les logs : {{error}}", + "failedToDownloadLogs": "Impossible de télécharger les journaux : {{error}}", + "linesToShow": "Lignes à afficher", + "last50Lines": "50 dernières lignes", + "last100Lines": "100 dernières lignes", + "last500Lines": "500 dernières lignes", + "last1000Lines": "1000 dernières lignes", + "allLogs": "Tous les logs", + "showTimestamps": "Afficher les horodatages", + "autoRefresh": "Rafraîchissement automatique", + "filterLogsPlaceholder": "Filtrer les journaux...", + "noLogsAvailable": "Aucun journal disponible" }, "terminal": { "title": "Terminal", - "connect": "Connect to Host", - "disconnect": "Disconnect", - "clear": "Clear", - "copy": "Copy", - "paste": "Paste", - "find": "Find", - "fullscreen": "Fullscreen", - "splitHorizontal": "Split Horizontal", - "splitVertical": "Split Vertical", - "closePanel": "Close Panel", - "reconnect": "Reconnect", - "sessionEnded": "Session Ended", - "connectionLost": "Connection Lost", - "error": "ERROR: {{message}}", - "disconnected": "Disconnected", - "connectionClosed": "Connection closed", - "connectionError": "Connection error: {{message}}", - "connected": "Connected", - "sshConnected": "SSH connection established", - "authError": "Authentication failed: {{message}}", - "unknownError": "Unknown error occurred", - "messageParseError": "Failed to parse server message", - "websocketError": "WebSocket connection error", - "connecting": "Connecting...", - "reconnecting": "Reconnecting... ({{attempt}}/{{max}})", - "reconnected": "Reconnected successfully", - "maxReconnectAttemptsReached": "Maximum reconnection attempts reached", - "connectionTimeout": "Connection timeout", + "connect": "Se connecter à l'hôte", + "disconnect": "Déconnecter", + "clear": "Nettoyer", + "copy": "Copie", + "paste": "Coller", + "find": "Chercher", + "fullscreen": "Plein écran", + "splitHorizontal": "Séparer horizontalement", + "splitVertical": "Diviser verticalement", + "closePanel": "Fermer le panneau", + "reconnect": "Reconnecter", + "sessionEnded": "Session terminée", + "connectionLost": "Connexion perdue", + "error": "ERREUR : {{message}}", + "disconnected": "Déconnecté", + "connectionClosed": "Connexion fermée", + "connectionError": "Erreur de connexion : {{message}}", + "connected": "Connecté", + "sshConnected": "Connexion SSH établie", + "authError": "Échec de l'authentification : {{message}}", + "unknownError": "Une erreur inconnue s'est produite", + "messageParseError": "Impossible d'analyser le message du serveur", + "websocketError": "Erreur de connexion WebSocket", + "connecting": "Connexion en cours...", + "reconnecting": "Reconnexion en cours... ({{attempt}}/{{max}})", + "reconnected": "Reconnexion réussie", + "maxReconnectAttemptsReached": "Nombre maximum de tentatives de reconnexion atteint", + "connectionTimeout": "Délai de connexion dépassé", "terminalTitle": "Terminal - {{host}}", "terminalWithPath": "Terminal - {{host}}:{{path}}", - "runTitle": "Running {{command}} - {{host}}", - "totpRequired": "Two-Factor Authentication Required", - "totpCodeLabel": "Verification Code", + "runTitle": "Exécution {{command}} - {{host}}", + "totpRequired": "Authentification à deux facteurs requise", + "totpCodeLabel": "Code de vérification", "totpPlaceholder": "000000", - "totpVerify": "Verify", - "sudoPasswordPopupTitle": "Insert Password?", - "sudoPasswordPopupHint": "Press Enter to insert, Esc to dismiss", + "totpVerify": "Vérifier", + "sudoPasswordPopupTitle": "Insérer un mot de passe ?", + "sudoPasswordPopupHint": "Appuyez sur Entrée pour insérer, Échap pour rejeter", "sudoPasswordPopupConfirm": "Insert", - "sudoPasswordPopupDismiss": "Dismiss" + "sudoPasswordPopupDismiss": "Refuser" }, "fileManager": { - "title": "File Manager", - "file": "File", - "folder": "Folder", - "connectToSsh": "Connect to SSH to use file operations", - "uploadFile": "Upload File", - "downloadFile": "Download", - "extractArchive": "Extract Archive", - "extractingArchive": "Extracting {{name}}...", - "archiveExtractedSuccessfully": "{{name}} extracted successfully", - "extractFailed": "Extract failed", - "compressFile": "Compress File", - "compressFiles": "Compress Files", - "compressFilesDesc": "Compress {{count}} items into an archive", - "archiveName": "Archive Name", - "enterArchiveName": "Enter archive name...", - "compressionFormat": "Compression Format", - "selectedFiles": "Selected files", - "andMoreFiles": "and {{count}} more...", - "compress": "Compress", - "compressingFiles": "Compressing {{count}} items into {{name}}...", - "filesCompressedSuccessfully": "{{name}} created successfully", - "compressFailed": "Compression failed", - "edit": "Edit", - "preview": "Preview", - "previous": "Previous", - "next": "Next", - "pageXOfY": "Page {{current}} of {{total}}", - "zoomOut": "Zoom Out", - "zoomIn": "Zoom In", - "newFile": "New File", - "newFolder": "New Folder", - "rename": "Rename", - "renameItem": "Rename Item", - "deleteItem": "Delete Item", - "currentPath": "Current Path", - "uploadFileTitle": "Upload File", - "maxFileSize": "Max: 1GB (JSON) / 5GB (Binary) - Large files supported", - "removeFile": "Remove File", - "clickToSelectFile": "Click to select a file", - "chooseFile": "Choose File", - "uploading": "Uploading...", - "downloading": "Downloading...", - "uploadingFile": "Uploading {{name}}...", - "uploadingLargeFile": "Uploading large file {{name}} ({{size}})...", - "downloadingFile": "Downloading {{name}}...", - "creatingFile": "Creating {{name}}...", - "creatingFolder": "Creating {{name}}...", - "deletingItem": "Deleting {{type}} {{name}}...", - "renamingItem": "Renaming {{type}} {{oldName}} to {{newName}}...", - "createNewFile": "Create New File", - "fileName": "File Name", - "creating": "Creating...", - "createFile": "Create File", - "createNewFolder": "Create New Folder", - "folderName": "Folder Name", - "createFolder": "Create Folder", - "warningCannotUndo": "Warning: This action cannot be undone", - "itemPath": "Item Path", - "thisIsDirectory": "This is a directory (will delete recursively)", - "deleting": "Deleting...", - "currentPathLabel": "Current Path", - "newName": "New Name", - "thisIsDirectoryRename": "This is a directory", - "renaming": "Renaming...", - "fileUploadedSuccessfully": "File \"{{name}}\" uploaded successfully", - "failedToUploadFile": "Failed to upload file", - "fileDownloadedSuccessfully": "File \"{{name}}\" downloaded successfully", - "failedToDownloadFile": "Failed to download file", - "noFileContent": "No file content received", - "filePath": "File Path", - "fileCreatedSuccessfully": "File \"{{name}}\" created successfully", - "failedToCreateFile": "Failed to create file", - "folderCreatedSuccessfully": "Folder \"{{name}}\" created successfully", - "failedToCreateFolder": "Failed to create folder", - "failedToCreateItem": "Failed to create item", - "operationFailed": "{{operation}} operation failed for {{name}}: {{error}}", - "failedToResolveSymlink": "Failed to resolve symlink", - "itemDeletedSuccessfully": "{{type}} deleted successfully", - "itemsDeletedSuccessfully": "{{count}} items deleted successfully", - "failedToDeleteItems": "Failed to delete items", - "dragFilesToUpload": "Drop files here to upload", - "emptyFolder": "This folder is empty", - "itemCount": "{{count}} items", - "selectedCount": "{{count}} selected", - "searchFiles": "Search files...", - "upload": "Upload", - "selectHostToStart": "Select a host to start file management", - "failedToConnect": "Failed to connect to SSH", - "failedToLoadDirectory": "Failed to load directory", - "noSSHConnection": "No SSH connection available", - "enterFolderName": "Enter folder name:", - "enterFileName": "Enter file name:", - "copy": "Copy", - "cut": "Cut", - "paste": "Paste", - "copyPath": "Copy Path", - "copyPaths": "Copy Paths", - "delete": "Delete", - "properties": "Properties", - "refresh": "Refresh", - "downloadFiles": "Download {{count}} files to Browser", - "copyFiles": "Copy {{count}} items", - "cutFiles": "Cut {{count}} items", - "deleteFiles": "Delete {{count}} items", - "filesCopiedToClipboard": "{{count}} items copied to clipboard", - "filesCutToClipboard": "{{count}} items cut to clipboard", - "pathCopiedToClipboard": "Path copied to clipboard", - "pathsCopiedToClipboard": "{{count}} paths copied to clipboard", - "failedToCopyPath": "Failed to copy path to clipboard", - "movedItems": "Moved {{count}} items", - "failedToDeleteItem": "Failed to delete item", - "itemRenamedSuccessfully": "{{type}} renamed successfully", - "failedToRenameItem": "Failed to rename item", - "download": "Download", + "title": "Gestionnaire de fichiers", + "file": "Fichier", + "folder": "Répertoire", + "connectToSsh": "Se connecter à SSH pour utiliser les opérations de fichiers", + "uploadFile": "Charger un fichier", + "downloadFile": "Télécharger", + "extractArchive": "Extraire les archives", + "extractingArchive": "Extraction de {{name}}...", + "archiveExtractedSuccessfully": "{{name}} extrait avec succès", + "extractFailed": "L'extraction a échoué", + "compressFile": "Compresser le fichier", + "compressFiles": "Compresser les fichiers", + "compressFilesDesc": "Compresser les éléments {{count}} dans une archive", + "archiveName": "Nom de l'archive", + "enterArchiveName": "Entrez le nom de l'archive...", + "compressionFormat": "Format de compression", + "selectedFiles": "Fichiers sélectionnés", + "andMoreFiles": "et {{count}} de plus...", + "compress": "Compresser", + "compressingFiles": "Compression des éléments {{count}} en {{name}}...", + "filesCompressedSuccessfully": "{{name}} créé avec succès", + "compressFailed": "La compression a échoué", + "edit": "Editer", + "preview": "Aperçu", + "previous": "Précédent", + "next": "Suivant", + "pageXOfY": "Page {{current}} de {{total}}", + "zoomOut": "Zoom arrière", + "zoomIn": "Zoom avant", + "newFile": "Nouveau fichier", + "newFolder": "Nouveau dossier", + "rename": "Renommer", + "renameItem": "Renommer l'élément", + "deleteItem": "Supprimer l'élément", + "currentPath": "Chemin actuel", + "uploadFileTitle": "Charger un fichier", + "maxFileSize": "Max: 1Go (JSON) / 5Go (Binary) - Fichiers volumineux pris en charge", + "removeFile": "Supprimer le fichier", + "clickToSelectFile": "Cliquez pour sélectionner un fichier", + "chooseFile": "Choisir un fichier", + "uploading": "Téléversement...", + "downloading": "Téléchargement...", + "uploadingFile": "Envoi de {{name}}...", + "uploadingLargeFile": "Téléchargement du fichier volumineux {{name}} ({{size}})...", + "downloadingFile": "Téléchargement de {{name}}...", + "creatingFile": "Création de {{name}}...", + "creatingFolder": "Création de {{name}}...", + "deletingItem": "Suppression de {{type}} {{name}}...", + "renamingItem": "Renommage de {{type}} {{oldName}} en {{newName}}...", + "createNewFile": "Créer un nouveau fichier", + "fileName": "Nom du fichier", + "creating": "Création en cours...", + "createFile": "Créer un fichier", + "createNewFolder": "Créer un nouveau dossier", + "folderName": "Nom du dossier", + "createFolder": "Créer un dossier", + "warningCannotUndo": "Attention : cette action ne peut pas être annulée", + "itemPath": "Chemin de l'élément", + "thisIsDirectory": "Ceci est un répertoire (supprimera récursivement)", + "deleting": "Suppression en cours...", + "currentPathLabel": "Chemin actuel", + "newName": "Nouveau nom", + "thisIsDirectoryRename": "Ceci est un répertoire", + "renaming": "Renommage en cours...", + "fileUploadedSuccessfully": "Le fichier «{{name}}» a été téléchargé avec succès", + "failedToUploadFile": "Impossible de télécharger le fichier", + "fileDownloadedSuccessfully": "Le fichier «{{name}}» a été téléchargé avec succès", + "failedToDownloadFile": "Impossible de télécharger le fichier", + "noFileContent": "Aucun contenu de fichier reçu", + "filePath": "Chemin du fichier", + "fileCreatedSuccessfully": "Le fichier \"{{name}}\" a été créé avec succès", + "failedToCreateFile": "Impossible de créer le fichier", + "folderCreatedSuccessfully": "Le dossier \"{{name}}\" a été créé avec succès", + "failedToCreateFolder": "Impossible de créer le dossier", + "failedToCreateItem": "Impossible de créer l'élément", + "operationFailed": "L'opération {{operation}} a échoué pour {{name}}: {{error}}", + "failedToResolveSymlink": "Impossible de résoudre le lien symbolique", + "itemDeletedSuccessfully": "{{type}} supprimé avec succès", + "itemsDeletedSuccessfully": "Les éléments {{count}} ont été supprimés avec succès", + "failedToDeleteItems": "Impossible de supprimer les éléments", + "dragFilesToUpload": "Déposez les fichiers ici pour les télécharger", + "emptyFolder": "Ce dossier est vide", + "itemCount": "Articles {{count}}", + "selectedCount": "{{count}} sélectionné", + "searchFiles": "Rechercher des fichiers...", + "upload": "Charger", + "selectHostToStart": "Sélectionnez un hôte pour démarrer la gestion des fichiers", + "failedToConnect": "Impossible de se connecter à SSH", + "failedToLoadDirectory": "Impossible de charger le répertoire", + "noSSHConnection": "Aucune connexion SSH disponible", + "enterFolderName": "Entrez le nom du dossier :", + "enterFileName": "Entrez le nom du fichier :", + "copy": "Copie", + "cut": "Couper", + "paste": "Coller", + "copyPath": "Copier le chemin", + "copyPaths": "Copier les chemins", + "delete": "Supprimez", + "properties": "Propriétés", + "refresh": "Rafraîchir", + "downloadFiles": "Télécharger les fichiers {{count}} vers le navigateur", + "copyFiles": "Copier les éléments {{count}}", + "cutFiles": "Couper les éléments {{count}}", + "deleteFiles": "Supprimer les éléments {{count}}", + "filesCopiedToClipboard": "Les éléments {{count}} ont été copiés dans le presse-papiers", + "filesCutToClipboard": "{{count}} éléments découpés dans le presse-papiers", + "pathCopiedToClipboard": "Chemin copié dans le presse-papiers", + "pathsCopiedToClipboard": "Chemins {{count}} copiés dans le presse-papiers", + "failedToCopyPath": "Impossible de copier le chemin vers le presse-papiers", + "movedItems": "Éléments {{count}} déplacés", + "failedToDeleteItem": "Échec de la suppression de l'élément", + "itemRenamedSuccessfully": "{{type}} renommé avec succès", + "failedToRenameItem": "Impossible de renommer l'élément", + "download": "Télécharger", "permissions": "Permissions", - "size": "Size", - "modified": "Modified", - "path": "Path", - "confirmDelete": "Are you sure you want to delete {{name}}?", - "uploadSuccess": "File uploaded successfully", - "uploadFailed": "File upload failed", - "downloadSuccess": "File downloaded successfully", - "downloadFailed": "File download failed", - "permissionDenied": "Permission denied", - "checkDockerLogs": "Check the Docker logs for detailed error information", - "internalServerError": "Internal server error occurred", - "serverError": "Server Error", - "error": "Error", - "requestFailed": "Request failed with status code", - "unknownFileError": "unknown", - "cannotReadFile": "Cannot read file", - "noSshSessionId": "No SSH session ID available", - "noFilePath": "No file path available", - "noCurrentHost": "No current host available", - "fileSavedSuccessfully": "File saved successfully", - "saveTimeout": "Save operation timed out. The file may have been saved successfully, but the operation took too long to complete. Check the Docker logs for confirmation.", - "failedToSaveFile": "Failed to save file", - "deletedSuccessfully": "deleted successfully", - "connectToServer": "Connect to a Server", - "selectServerToEdit": "Select a server from the sidebar to start editing files", - "fileOperations": "File Operations", - "confirmDeleteMessage": "Are you sure you want to delete {{name}}?", - "confirmDeleteSingleItem": "Are you sure you want to permanently delete \"{{name}}\"?", - "confirmDeleteMultipleItems": "Are you sure you want to permanently delete {{count}} items?", - "confirmDeleteMultipleItemsWithFolders": "Are you sure you want to permanently delete {{count}} items? This includes folders and their contents.", - "confirmDeleteFolder": "Are you sure you want to permanently delete the folder \"{{name}}\" and all its contents?", - "deleteDirectoryWarning": "This will delete the folder and all its contents.", - "actionCannotBeUndone": "This action cannot be undone.", - "permanentDeleteWarning": "This action cannot be undone. The item(s) will be permanently deleted from the server.", - "recent": "Recent", - "pinned": "Pinned", - "folderShortcuts": "Folder Shortcuts", - "noRecentFiles": "No recent files.", - "noPinnedFiles": "No pinned files.", - "enterFolderPath": "Enter folder path", - "noShortcuts": "No shortcuts.", - "searchFilesAndFolders": "Search files and folders...", - "noFilesOrFoldersFound": "No files or folders found.", - "failedToConnectSSH": "Failed to connect to SSH", - "failedToReconnectSSH": "Failed to reconnect SSH session", - "failedToListFiles": "Failed to list files", - "fetchHomeDataTimeout": "Fetch home data timed out", - "sshStatusCheckTimeout": "SSH status check timed out", - "sshReconnectionTimeout": "SSH reconnection timed out", - "saveOperationTimeout": "Save operation timed out", - "cannotSaveFile": "Cannot save file", - "dragSystemFilesToUpload": "Drag system files here to upload", - "dragFilesToWindowToDownload": "Drag files outside window to download", - "openTerminalHere": "Open Terminal Here", - "run": "Run", - "saveToSystem": "Save as...", - "selectLocationToSave": "Select Location to Save", - "openTerminalInFolder": "Open Terminal in This Folder", - "openTerminalInFileLocation": "Open Terminal at File Location", + "size": "Taille", + "modified": "Modifié", + "path": "Chemin d'accès", + "confirmDelete": "Êtes-vous sûr de vouloir supprimer {{name}}?", + "uploadSuccess": "Fichier téléchargé avec succès", + "uploadFailed": "Échec de l'envoi du fichier", + "downloadSuccess": "Fichier téléchargé avec succès", + "downloadFailed": "Échec du téléchargement du fichier", + "permissionDenied": "Autorisation refusée", + "checkDockerLogs": "Consultez les journaux Docker pour plus d'informations sur les erreurs", + "internalServerError": "Une erreur interne du serveur s'est produite", + "serverError": "Erreur serveur", + "error": "Erreur", + "requestFailed": "La requête a échoué avec le code de statut", + "unknownFileError": "inconnue", + "cannotReadFile": "Impossible de lire le fichier", + "noSshSessionId": "Aucun ID de session SSH disponible", + "noFilePath": "Aucun chemin de fichier disponible", + "noCurrentHost": "Aucun hôte actuel disponible", + "fileSavedSuccessfully": "Fichier enregistré avec succès", + "saveTimeout": "L'opération d'enregistrement a expiré. Le fichier a peut-être été enregistré avec succès, mais l'opération a pris trop de temps à se terminer. Vérifiez les logs Docker pour la confirmation.", + "failedToSaveFile": "Échec de l'enregistrement du fichier", + "deletedSuccessfully": "supprimé avec succès", + "connectToServer": "Se connecter à un serveur", + "selectServerToEdit": "Sélectionnez un serveur dans la barre latérale pour commencer à éditer des fichiers", + "fileOperations": "Opérations sur les fichiers", + "confirmDeleteMessage": "Êtes-vous sûr de vouloir supprimer {{name}}?", + "confirmDeleteSingleItem": "Êtes-vous sûr de vouloir supprimer définitivement \"{{name}} \" ?", + "confirmDeleteMultipleItems": "Êtes-vous sûr de vouloir supprimer définitivement les éléments {{count}}?", + "confirmDeleteMultipleItemsWithFolders": "Êtes-vous sûr de vouloir supprimer définitivement les éléments {{count}} ? Cela inclut les dossiers et leur contenu.", + "confirmDeleteFolder": "Êtes-vous sûr de vouloir supprimer définitivement le dossier \"{{name}}\" et tout son contenu ?", + "deleteDirectoryWarning": "Ceci supprimera le dossier et tout son contenu.", + "actionCannotBeUndone": "Cette action ne peut être annulée.", + "permanentDeleteWarning": "Cette action ne peut pas être annulée. Le(s) élément(s) seront définitivement supprimés du serveur.", + "recent": "Récentes", + "pinned": "Épinglé", + "folderShortcuts": "Raccourcis du dossier", + "noRecentFiles": "Aucun fichier récent.", + "noPinnedFiles": "Aucun fichier épinglé.", + "enterFolderPath": "Entrez le chemin du dossier", + "noShortcuts": "Aucun raccourci.", + "searchFilesAndFolders": "Rechercher des fichiers et des dossiers...", + "noFilesOrFoldersFound": "Aucun fichier ou dossier trouvé.", + "failedToConnectSSH": "Impossible de se connecter à SSH", + "failedToReconnectSSH": "Échec de la reconnexion de la session SSH", + "failedToListFiles": "Impossible de lister les fichiers", + "fetchHomeDataTimeout": "Extraction des données de la maison expirée", + "sshStatusCheckTimeout": "Délai de vérification du statut SSH dépassé", + "sshReconnectionTimeout": "Reconnexion SSH expirée", + "saveOperationTimeout": "L'opération de sauvegarde a expiré", + "cannotSaveFile": "Impossible d'enregistrer le fichier", + "dragSystemFilesToUpload": "Glissez ici les fichiers système pour les télécharger", + "dragFilesToWindowToDownload": "Faites glisser les fichiers en dehors de la fenêtre pour télécharger", + "openTerminalHere": "Ouvrir le Terminal ici", + "run": "Exécuter", + "saveToSystem": "Enregistrer sous...", + "selectLocationToSave": "Sélectionnez l'emplacement à enregistrer", + "openTerminalInFolder": "Ouvrir le terminal dans ce dossier", + "openTerminalInFileLocation": "Ouvrir le terminal à l'emplacement du fichier", "terminalWithPath": "Terminal - {{host}}:{{path}}", - "runningFile": "Running - {{file}}", - "onlyRunExecutableFiles": "Can only run executable files", - "noHostSelected": "No host selected", - "starred": "Starred", - "shortcuts": "Shortcuts", - "directories": "Directories", - "removedFromRecentFiles": "Removed \"{{name}}\" from recent files", - "removeFailed": "Remove failed", - "unpinnedSuccessfully": "Unpinned \"{{name}}\" successfully", - "unpinFailed": "Unpin failed", - "removedShortcut": "Removed shortcut \"{{name}}\"", - "removeShortcutFailed": "Remove shortcut failed", - "clearedAllRecentFiles": "Cleared all recent files", - "clearFailed": "Clear failed", - "removeFromRecentFiles": "Remove from recent files", - "clearAllRecentFiles": "Clear all recent files", - "unpinFile": "Unpin file", - "removeShortcut": "Remove shortcut", - "saveFilesToSystem": "Save {{count}} files as...", - "pinFile": "Pin file", - "addToShortcuts": "Add to shortcuts", - "downloadToDefaultLocation": "Download to default location", - "pasteFailed": "Paste failed", - "noUndoableActions": "No undoable actions", - "undoCopySuccess": "Undid copy operation: Deleted {{count}} copied files", - "undoCopyFailedDelete": "Undo failed: Could not delete any copied files", - "undoCopyFailedNoInfo": "Undo failed: Could not find copied file information", - "undoMoveSuccess": "Undid move operation: Moved {{count}} files back to original location", - "undoMoveFailedMove": "Undo failed: Could not move any files back", - "undoMoveFailedNoInfo": "Undo failed: Could not find moved file information", - "undoDeleteNotSupported": "Delete operation cannot be undone: Files have been permanently deleted from server", - "undoTypeNotSupported": "Unsupported undo operation type", - "undoOperationFailed": "Undo operation failed", - "unknownError": "Unknown error", - "enterPath": "Enter path...", - "editPath": "Edit path", - "confirm": "Confirm", - "cancel": "Cancel", - "find": "Find...", - "replaceWith": "Replace with...", - "replace": "Replace", - "replaceAll": "Replace All", - "downloadInstead": "Download Instead", - "keyboardShortcuts": "Keyboard Shortcuts", - "searchAndReplace": "Search & Replace", - "editing": "Editing", + "runningFile": "En cours d'exécution - {{file}}", + "onlyRunExecutableFiles": "Peut uniquement exécuter des fichiers exécutables", + "noHostSelected": "Aucun hôte sélectionné", + "starred": "Favoris", + "shortcuts": "Raccourcis", + "directories": "Répertoires", + "removedFromRecentFiles": "Suppression de «{{name}}» des fichiers récents", + "removeFailed": "La suppression a échoué", + "unpinnedSuccessfully": "Déépinglé avec succès \"{{name}}\"", + "unpinFailed": "Échec de la dépinglage", + "removedShortcut": "Raccourci \"{{name}} \" supprimé", + "removeShortcutFailed": "La suppression du raccourci a échoué", + "clearedAllRecentFiles": "Tous les fichiers récents ont été effacés", + "clearFailed": "Échec de l'effacement", + "removeFromRecentFiles": "Supprimer des fichiers récents", + "clearAllRecentFiles": "Effacer tous les fichiers récents", + "unpinFile": "Désépingler fichier", + "removeShortcut": "Supprimer le raccourci", + "saveFilesToSystem": "Enregistrer les fichiers {{count}} sous...", + "pinFile": "Épingler le fichier", + "addToShortcuts": "Ajouter aux raccourcis", + "downloadToDefaultLocation": "Télécharger vers l'emplacement par défaut", + "pasteFailed": "Échec du collage", + "noUndoableActions": "Aucune action annulable", + "undoCopySuccess": "Opération de copie annulée : fichiers copiés {{count}} supprimés", + "undoCopyFailedDelete": "Échec de l'annulation : impossible de supprimer les fichiers copiés", + "undoCopyFailedNoInfo": "Échec de l'annulation : impossible de trouver les informations sur le fichier copié", + "undoMoveSuccess": "Opération de déplacement annulée : les fichiers {{count}} ont été déplacés vers l'emplacement d'origine", + "undoMoveFailedMove": "Échec de l'annulation : impossible de déplacer les fichiers en arrière", + "undoMoveFailedNoInfo": "Échec de l'annulation : impossible de trouver les informations sur le fichier déplacé", + "undoDeleteNotSupported": "L'opération de suppression ne peut pas être annulée : les fichiers ont été définitivement supprimés du serveur", + "undoTypeNotSupported": "Type d'opération d'annulation non pris en charge", + "undoOperationFailed": "Échec de l'annulation de l'opération", + "unknownError": "Erreur inconnue", + "enterPath": "Entrez le chemin...", + "editPath": "Modifier le chemin d'accès", + "confirm": "Valider", + "cancel": "Abandonner", + "find": "Rechercher...", + "replaceWith": "Remplacer par...", + "replace": "Remplacer", + "replaceAll": "Remplacer tout", + "downloadInstead": "Télécharger plutôt", + "keyboardShortcuts": "Raccourcis clavier", + "searchAndReplace": "Recherche & Remplacer", + "editing": "Édition en cours", "navigation": "Navigation", "code": "Code", - "search": "Search", - "findNext": "Find Next", - "findPrevious": "Find Previous", - "save": "Save", - "selectAll": "Select All", - "undo": "Undo", - "redo": "Redo", - "goToLine": "Go to Line", - "moveLineUp": "Move Line Up", - "moveLineDown": "Move Line Down", - "toggleComment": "Toggle Comment", - "indent": "Indent", - "outdent": "Outdent", + "search": "Chercher", + "findNext": "Rechercher suivant", + "findPrevious": "Trouver le Précédent", + "save": "Enregistrer", + "selectAll": "Tout sélectionner", + "undo": "Annuler", + "redo": "Refaire", + "goToLine": "Aller à la ligne", + "moveLineUp": "Déplacer la ligne vers le haut", + "moveLineDown": "Déplacer la ligne vers le bas", + "toggleComment": "Basculer le commentaire", + "indent": "Indentation", + "outdent": "En retrait", "autoComplete": "Auto Complete", - "imageLoadError": "Failed to load image", - "rotate": "Rotate", - "originalSize": "Original Size", - "startTyping": "Start typing...", - "unknownSize": "Unknown size", - "fileIsEmpty": "File is empty", - "largeFileWarning": "Large File Warning", - "largeFileWarningDesc": "This file is {{size}} in size, which may cause performance issues when opened as text.", - "fileNotFoundAndRemoved": "File \"{{name}}\" not found and has been removed from recent/pinned files", - "failedToLoadFile": "Failed to load file: {{error}}", - "serverErrorOccurred": "Server error occurred. Please try again later.", - "autoSaveFailed": "Auto-save failed", - "fileAutoSaved": "File auto-saved", - "moveFileFailed": "Failed to move {{name}}", - "moveOperationFailed": "Move operation failed", - "canOnlyCompareFiles": "Can only compare two files", - "comparingFiles": "Comparing files: {{file1}} and {{file2}}", - "dragFailed": "Drag operation failed", - "filePinnedSuccessfully": "File \"{{name}}\" pinned successfully", - "pinFileFailed": "Failed to pin file", - "fileUnpinnedSuccessfully": "File \"{{name}}\" unpinned successfully", - "unpinFileFailed": "Failed to unpin file", - "shortcutAddedSuccessfully": "Folder shortcut \"{{name}}\" added successfully", - "addShortcutFailed": "Failed to add shortcut", - "operationCompletedSuccessfully": "{{operation}} {{count}} items successfully", - "operationCompleted": "{{operation}} {{count}} items", - "downloadFileSuccess": "File {{name}} downloaded successfully", - "downloadFileFailed": "Download failed", - "moveTo": "Move to {{name}}", - "diffCompareWith": "Diff compare with {{name}}", - "dragOutsideToDownload": "Drag outside window to download ({{count}} files)", - "newFolderDefault": "NewFolder", - "newFileDefault": "NewFile.txt", - "successfullyMovedItems": "Successfully moved {{count}} items to {{target}}", - "move": "Move", - "searchInFile": "Search in file (Ctrl+F)", - "showKeyboardShortcuts": "Show keyboard shortcuts", - "startWritingMarkdown": "Start writing your markdown content...", - "loadingFileComparison": "Loading file comparison...", + "imageLoadError": "Impossible de charger l'image", + "rotate": "Faire pivoter", + "originalSize": "Taille originale", + "startTyping": "Commencez à taper...", + "unknownSize": "Taille inconnue", + "fileIsEmpty": "Le fichier est vide", + "largeFileWarning": "Avertissement de fichier volumineux", + "largeFileWarningDesc": "Ce fichier est de taille {{size}} en taille, ce qui peut causer des problèmes de performance lorsqu'il est ouvert en tant que texte.", + "fileNotFoundAndRemoved": "Le fichier «{{name}}» est introuvable et a été supprimé des fichiers récents/épinglés", + "failedToLoadFile": "Impossible de charger le fichier : {{error}}", + "serverErrorOccurred": "Une erreur de serveur s'est produite. Veuillez réessayer plus tard.", + "autoSaveFailed": "Échec de la sauvegarde automatique", + "fileAutoSaved": "Fichier enregistré automatiquement", + "moveFileFailed": "Impossible de déplacer {{name}}", + "moveOperationFailed": "Échec de l'opération de déplacement", + "canOnlyCompareFiles": "Peut seulement comparer deux fichiers", + "comparingFiles": "Comparaison des fichiers : {{file1}} et {{file2}}", + "dragFailed": "Échec de l'opération de glissement", + "filePinnedSuccessfully": "Le fichier \"{{name}}\" a été épinglé avec succès", + "pinFileFailed": "Impossible d'épingler le fichier", + "fileUnpinnedSuccessfully": "Le fichier \"{{name}}\" a été déépinglé avec succès", + "unpinFileFailed": "Échec de la déverrouillage du fichier", + "shortcutAddedSuccessfully": "Raccourci du dossier \"{{name}}\" ajouté avec succès", + "addShortcutFailed": "Impossible d'ajouter le raccourci", + "operationCompletedSuccessfully": "{{operation}} {{count}} éléments avec succès", + "operationCompleted": "Articles {{operation}} {{count}}", + "downloadFileSuccess": "Fichier {{name}} téléchargé avec succès", + "downloadFileFailed": "Échec du téléchargement", + "moveTo": "Déplacer vers {{name}}", + "diffCompareWith": "Comparaison de différences avec {{name}}", + "dragOutsideToDownload": "Faites glisser vers l'extérieur de la fenêtre pour télécharger (fichiers{{count}})", + "newFolderDefault": "Nouveau dossier", + "newFileDefault": "Nouveau fichier.txt", + "successfullyMovedItems": "Les éléments {{count}} ont été déplacés avec succès vers {{target}}", + "move": "Déplacer", + "searchInFile": "Rechercher dans le fichier (Ctrl+F)", + "showKeyboardShortcuts": "Afficher les raccourcis clavier", + "startWritingMarkdown": "Commencez à écrire votre contenu de markdown...", + "loadingFileComparison": "Chargement de la comparaison de fichiers...", "reload": "Reload", - "compare": "Compare", - "sideBySide": "Side by Side", - "inline": "Inline", - "fileComparison": "File Comparison: {{file1}} vs {{file2}}", - "fileTooLarge": "File too large: {{error}}", - "sshConnectionFailed": "SSH connection failed. Please check your connection to {{name}} ({{ip}}:{{port}})", - "loadFileFailed": "Failed to load file: {{error}}", - "connectedSuccessfully": "Connected successfully", - "totpVerificationFailed": "TOTP verification failed", - "verificationCodePrompt": "Verification code:", - "changePermissions": "Change Permissions", - "changePermissionsDesc": "Modify file permissions for", - "currentPermissions": "Current Permissions", - "newPermissions": "New Permissions", - "owner": "Owner", - "group": "Group", - "others": "Others", - "read": "Read", - "write": "Write", - "execute": "Execute", - "permissionsChangedSuccessfully": "Permissions changed successfully", - "failedToChangePermissions": "Failed to change permissions" + "compare": "Comparer", + "sideBySide": "Côté à côte", + "inline": "En ligne", + "fileComparison": "Comparaison de fichiers : {{file1}} vs {{file2}}", + "fileTooLarge": "Fichier trop volumineux: {{error}}", + "sshConnectionFailed": "La connexion SSH a échoué. Veuillez vérifier votre connexion à {{name}} ({{ip}}:{{port}})", + "loadFileFailed": "Impossible de charger le fichier : {{error}}", + "connectedSuccessfully": "Connecté avec succès", + "totpVerificationFailed": "La vérification TOTP a échoué", + "verificationCodePrompt": "Code de vérification :", + "changePermissions": "Modifier les permissions", + "changePermissionsDesc": "Modifier les permissions de fichier pour", + "currentPermissions": "Autorisations actuelles", + "newPermissions": "Nouvelles autorisations", + "owner": "Propriétaire", + "group": "Groupes", + "others": "Autres", + "read": "Lu", + "write": "Écrire", + "execute": "Exécuter", + "permissionsChangedSuccessfully": "Permissions modifiées avec succès", + "failedToChangePermissions": "Impossible de modifier les autorisations" }, "tunnel": { - "noTunnelsConfigured": "No Tunnels Configured", - "configureTunnelsInHostSettings": "Configure tunnel connections in the Host Manager to get started" + "noTunnelsConfigured": "Pas de tunnels configurés", + "configureTunnelsInHostSettings": "Configurer les connexions de tunnels dans le Gestionnaire d'Hôtes pour commencer" }, "tunnels": { - "title": "SSH Tunnels", - "noSshTunnels": "No SSH Tunnels", - "createFirstTunnelMessage": "You haven't created any SSH tunnels yet. Configure tunnel connections in the Host Manager to get started.", - "connected": "Connected", - "disconnected": "Disconnected", - "connecting": "Connecting...", - "disconnecting": "Disconnecting...", - "unknownTunnelStatus": "Unknown", - "statusUnknown": "Unknown", - "unknown": "Unknown", - "error": "Error", - "failed": "Failed", - "retrying": "Retrying", - "waiting": "Waiting", - "waitingForRetry": "Waiting for retry", - "retryingConnection": "Retrying connection", - "canceling": "Canceling...", - "connect": "Connect", - "disconnect": "Disconnect", - "cancel": "Cancel", + "title": "Tunnels SSH", + "noSshTunnels": "Pas de tunnels SSH", + "createFirstTunnelMessage": "Vous n'avez pas encore créé de tunnels SSH. Configurez les connexions de tunnels dans le Gestionnaire d'Hôtes pour commencer.", + "connected": "Connecté", + "disconnected": "Déconnecté", + "connecting": "Connexion en cours...", + "disconnecting": "Déconnexion...", + "unknownTunnelStatus": "Inconnu", + "statusUnknown": "Inconnu", + "unknown": "Inconnu", + "error": "Erreur", + "failed": "Echoué", + "retrying": "Réessayer", + "waiting": "En attente", + "waitingForRetry": "En attente d'une nouvelle tentative", + "retryingConnection": "Nouvelle tentative de connexion", + "canceling": "Annulation...", + "connect": "Connecter", + "disconnect": "Déconnecter", + "cancel": "Abandonner", "port": "Port", - "attempt": "Attempt {{current}} of {{max}}", - "nextRetryIn": "Next retry in {{seconds}} seconds", - "checkDockerLogs": "Check your Docker logs for the error reason, join the", - "orCreate": "or create a ", - "noTunnelConnections": "No tunnel connections configured", - "tunnelConnections": "Tunnel Connections", - "addTunnel": "Add Tunnel", - "editTunnel": "Edit Tunnel", - "deleteTunnel": "Delete Tunnel", - "tunnelName": "Tunnel Name", - "localPort": "Local Port", - "remoteHost": "Remote Host", - "remotePort": "Remote Port", - "autoStart": "Auto Start", - "status": "Status", - "active": "Active", - "inactive": "Inactive", - "start": "Start", - "stop": "Stop", - "restart": "Restart", - "connectionType": "Connection Type", - "local": "Local", - "remote": "Remote", - "dynamic": "Dynamic", - "unknownConnectionStatus": "Unknown", + "attempt": "Tentative {{current}} de {{max}}", + "nextRetryIn": "Prochaine tentative dans {{seconds}} secondes", + "checkDockerLogs": "Vérifiez vos logs Docker pour la raison de l'erreur, rejoignez le", + "orCreate": "ou créer un ", + "noTunnelConnections": "Aucune connexion tunnel configurée", + "tunnelConnections": "Connexions Tunnel", + "addTunnel": "Ajouter un tunnel", + "editTunnel": "Modifier le tunnel", + "deleteTunnel": "Supprimer le tunnel", + "tunnelName": "Nom du tunnel", + "localPort": "Port local", + "remoteHost": "Hôte distant", + "remotePort": "Port distant", + "autoStart": "Démarrage automatique", + "status": "Statut", + "active": "Actif", + "inactive": "Inactif", + "start": "Début", + "stop": "Arrêter", + "restart": "Redémarrer", + "connectionType": "Type de connexion", + "local": "Locale", + "remote": "Distante", + "dynamic": "Dynamique", + "unknownConnectionStatus": "Inconnu", "portMapping": "Port {{sourcePort}} → {{endpointHost}}:{{endpointPort}}", - "endpointHostNotFound": "Endpoint host not found", - "discord": "Discord", - "githubIssue": "GitHub issue", - "forHelp": "for help" + "endpointHostNotFound": "Hôte du point d'extrémité introuvable", + "discord": "Discord.", + "githubIssue": "Problème GitHub", + "forHelp": "pour de l'aide" }, "serverStats": { - "title": "Server Statistics", - "cpu": "CPU", - "memory": "Memory", - "disk": "Disk", - "network": "Network", - "uptime": "Uptime", - "loadAverage": "Avg: {{avg1}}, {{avg5}}, {{avg15}}", - "processes": "Processes", - "connections": "Connections", + "title": "Statistiques du serveur", + "cpu": "UC", + "memory": "Mémoire", + "disk": "Disque", + "network": "Réseau", + "uptime": "Délai de disponibilité", + "loadAverage": "Moyenne : {{avg1}}, {{avg5}}, {{avg15}}", + "processes": "Processus", + "connections": "Connexions", "usage": "Usage", - "available": "Available", + "available": "Disponible", "total": "Total", - "free": "Free", - "used": "Used", - "percentage": "Percentage", - "refreshStatusAndMetrics": "Refresh status and metrics", - "refreshStatus": "Refresh Status", - "fileManagerAlreadyOpen": "File Manager already open for this host", - "openFileManager": "Open File Manager", - "cpuCores_one": "{{count}} CPU", - "cpuCores_other": "{{count}} CPUs", + "free": "Gratuit", + "used": "Utilisé", + "percentage": "Pourcentage", + "refreshStatusAndMetrics": "Rafraîchir l'état et les paramètres", + "refreshStatus": "Actualiser le statut", + "fileManagerAlreadyOpen": "Gestionnaire de fichiers déjà ouvert pour cet hôte", + "openFileManager": "Ouvrir le gestionnaire de fichiers", + "cpuCores_one": "CPU {{count}}", + "cpuCores_other": "Processeurs {{count}}", "naCpus": "N/A CPU(s)", - "loadAverageNA": "Avg: N/A", - "cpuUsage": "CPU Usage", - "memoryUsage": "Memory Usage", - "diskUsage": "Disk Usage", - "rootStorageSpace": "Root Storage Space", - "of": "of", - "feedbackMessage": "Have ideas for what should come next for server management? Share them on", - "failedToFetchHostConfig": "Failed to fetch host configuration", - "failedToFetchStatus": "Failed to fetch server status", - "failedToFetchMetrics": "Failed to fetch server metrics", - "failedToFetchHomeData": "Failed to fetch home data", - "loadingMetrics": "Loading metrics...", - "connecting": "Connecting...", - "refreshing": "Refreshing...", - "serverOffline": "Server Offline", - "cannotFetchMetrics": "Cannot fetch metrics from offline server", - "totpRequired": "TOTP Authentication Required", - "totpUnavailable": "Server Stats unavailable for TOTP-enabled servers", - "totpVerified": "TOTP verified, metrics collection started", - "totpFailed": "TOTP verification failed", - "totpInvalidCode": "Invalid verification code", - "totpCancelled": "Metrics collection cancelled", - "authenticationFailed": "Authentication failed", - "noneAuthNotSupported": "Server Stats does not support 'none' authentication type.", - "load": "Load", - "editLayout": "Edit Layout", - "cancelEdit": "Cancel", - "addWidget": "Add Widget", - "saveLayout": "Save Layout", - "unsavedChanges": "Unsaved changes", - "layoutSaved": "Layout saved successfully", - "failedToSaveLayout": "Failed to save layout", - "systemInfo": "System Information", + "loadAverageNA": "Moyenne : N/A", + "cpuUsage": "Usage du CPU", + "memoryUsage": "Utilisation de la mémoire", + "diskUsage": "Utilisation du disque", + "rootStorageSpace": "Espace de stockage racine", + "of": "de", + "feedbackMessage": "Vous avez des idées pour ce qui devrait venir pour la gestion de serveur? Partagez-les sur", + "failedToFetchHostConfig": "Impossible de récupérer la configuration de l'hôte", + "failedToFetchStatus": "Impossible de récupérer le statut du serveur", + "failedToFetchMetrics": "Impossible de récupérer les métriques du serveur", + "failedToFetchHomeData": "Impossible de récupérer les données de la maison", + "loadingMetrics": "Chargement des métriques...", + "connecting": "Connexion en cours...", + "refreshing": "Rafraîchissement...", + "serverOffline": "Serveur hors ligne", + "cannotFetchMetrics": "Impossible de récupérer les métriques depuis le serveur hors ligne", + "totpRequired": "Authentification TOTP requise", + "totpUnavailable": "Statistiques du serveur indisponibles pour les serveurs TOTP", + "totpVerified": "TOTP vérifié, la collection de métriques a commencé", + "totpFailed": "La vérification TOTP a échoué", + "totpInvalidCode": "Code de vérification invalide", + "totpCancelled": "Collecte des métriques annulée", + "authenticationFailed": "Échec de l'authentification", + "noneAuthNotSupported": "Les statistiques du serveur ne supportent pas le type d'authentification 'none'.", + "load": "Charger", + "editLayout": "Modifier la mise en page", + "cancelEdit": "Abandonner", + "addWidget": "Ajouter un Widget", + "saveLayout": "Enregistrer la mise en page", + "unsavedChanges": "Modifications non enregistrées", + "layoutSaved": "Mise en page enregistrée avec succès", + "failedToSaveLayout": "Échec de l'enregistrement de la mise en page", + "systemInfo": "Informations du système", "hostname": "Hostname", - "operatingSystem": "Operating System", - "kernel": "Kernel", - "totalUptime": "Total Uptime", - "seconds": "seconds", - "networkInterfaces": "Network Interfaces", - "noInterfacesFound": "No network interfaces found", - "totalProcesses": "Total Processes", - "running": "Running", - "noProcessesFound": "No processes found", - "loginStats": "SSH Login Statistics", - "totalLogins": "Total Logins", - "uniqueIPs": "Unique IPs", - "recentSuccessfulLogins": "Recent Successful Logins", - "recentFailedAttempts": "Recent Failed Attempts", - "noRecentLoginData": "No recent login data", - "from": "from", - "quickActions": "Quick Actions", - "executeQuickAction": "Execute {{name}}", - "executingQuickAction": "Executing {{name}}...", - "quickActionSuccess": "{{name}} completed successfully", - "quickActionFailed": "{{name}} failed", - "quickActionError": "Failed to execute {{name}}" + "operatingSystem": "Système d'exploitation", + "kernel": "Noyau", + "totalUptime": "Temps de disponibilité total", + "seconds": "secondes", + "networkInterfaces": "Interfaces réseau", + "noInterfacesFound": "Aucune interface réseau trouvée", + "totalProcesses": "Total des Processus", + "running": "En cours d'exécution", + "noProcessesFound": "Aucun processus trouvé", + "loginStats": "Statistiques de connexion SSH", + "totalLogins": "Nombre total de connexions", + "uniqueIPs": "IPs uniques", + "recentSuccessfulLogins": "Connexions Récentes Récents", + "recentFailedAttempts": "Tentatives récentes échouées", + "noRecentLoginData": "Aucune donnée de connexion récente", + "from": "de", + "quickActions": "Actions rapides", + "executeQuickAction": "Exécuter {{name}}", + "executingQuickAction": "Exécution de {{name}}...", + "quickActionSuccess": "{{name}} terminé avec succès", + "quickActionFailed": "{{name}} a échoué", + "quickActionError": "Impossible d'exécuter {{name}}" }, "auth": { - "tagline": "SSH SERVER MANAGER", - "description": "Secure, powerful, and intuitive SSH connection management", - "welcomeBack": "Welcome back to TERMIX", - "createAccount": "Create your TERMIX account", - "continueExternal": "Continue with external provider", - "loginTitle": "Login to Termix", - "registerTitle": "Create Account", - "loginButton": "Login", - "registerButton": "Register", - "forgotPassword": "Forgot Password?", - "rememberMe": "Remember Me", - "noAccount": "Don't have an account?", - "hasAccount": "Already have an account?", - "loginSuccess": "Login successful", - "loginFailed": "Login failed", - "registerSuccess": "Registration successful", - "registerFailed": "Registration failed", - "logoutSuccess": "Logged out successfully", - "invalidCredentials": "Invalid username or password", - "accountCreated": "Account created successfully", - "passwordReset": "Password reset link sent", - "twoFactorAuth": "Two-Factor Authentication", - "enterCode": "Enter verification code", - "backupCode": "Or use backup code", - "verifyCode": "Verify Code", - "redirectingToApp": "Redirecting to app...", - "enableTwoFactor": "Enable Two-Factor Authentication", - "disableTwoFactor": "Disable Two-Factor Authentication", - "scanQRCode": "Scan this QR code with your authenticator app", - "backupCodes": "Backup Codes", - "saveBackupCodes": "Save these backup codes in a safe place", - "twoFactorEnabledSuccess": "Two-factor authentication enabled successfully!", - "twoFactorDisabled": "Two-factor authentication disabled", - "newBackupCodesGenerated": "New backup codes generated", - "backupCodesDownloaded": "Backup codes downloaded", - "pleaseEnterSixDigitCode": "Please enter a 6-digit code", - "invalidVerificationCode": "Invalid verification code", - "failedToDisableTotp": "Failed to disable TOTP", - "failedToGenerateBackupCodes": "Failed to generate backup codes", - "enterPassword": "Enter your password", - "lockedOidcAuth": "Locked (OIDC Auth)", - "twoFactorTitle": "Two-Factor Authentication", - "twoFactorProtected": "Your account is protected with two-factor authentication", - "twoFactorActive": "Two-factor authentication is currently active on your account", - "disable2FA": "Disable 2FA", - "disableTwoFactorWarning": "Disabling two-factor authentication will make your account less secure", - "passwordOrTotpCode": "Password or TOTP Code", - "or": "Or", - "generateNewBackupCodesText": "Generate new backup codes if you've lost your existing ones", - "generateNewBackupCodes": "Generate New Backup Codes", - "yourBackupCodes": "Your Backup Codes", - "download": "Download", - "setupTwoFactorTitle": "Set Up Two-Factor Authentication", - "sshAuthenticationRequired": "SSH Authentication Required", - "sshNoKeyboardInteractive": "Keyboard-Interactive Authentication Unavailable", - "sshAuthenticationFailed": "Authentication Failed", - "sshAuthenticationTimeout": "Authentication Timeout", - "sshNoKeyboardInteractiveDescription": "The server does not support keyboard-interactive authentication. Please provide your password or SSH key.", - "sshAuthFailedDescription": "The provided credentials were incorrect. Please try again with valid credentials.", - "sshTimeoutDescription": "The authentication attempt timed out. Please try again.", - "sshProvideCredentialsDescription": "Please provide your SSH credentials to connect to this server.", - "sshPasswordDescription": "Enter the password for this SSH connection.", - "sshKeyPasswordDescription": "If your SSH key is encrypted, enter the passphrase here.", - "step1ScanQR": "Step 1: Scan the QR code with your authenticator app", - "manualEntryCode": "Manual Entry Code", - "cannotScanQRText": "If you can't scan the QR code, enter this code manually in your authenticator app", - "nextVerifyCode": "Next: Verify Code", - "verifyAuthenticator": "Verify Your Authenticator", - "step2EnterCode": "Step 2: Enter the 6-digit code from your authenticator app", - "verificationCode": "Verification Code", - "back": "Back", - "verifyAndEnable": "Verify and Enable", - "saveBackupCodesTitle": "Save Your Backup Codes", - "step3StoreCodesSecurely": "Step 3: Store these codes in a safe place", - "importantBackupCodesText": "Save these backup codes in a secure location. You can use them to access your account if you lose your authenticator device.", - "completeSetup": "Complete Setup", - "notEnabledText": "Two-factor authentication adds an extra layer of security by requiring a code from your authenticator app when signing in.", - "enableTwoFactorButton": "Enable Two-Factor Authentication", - "addExtraSecurityLayer": "Add an extra layer of security to your account", - "firstUser": "First User", - "firstUserMessage": "You are the first user and will be made an admin. You can view admin settings in the sidebar user dropdown. If you think this is a mistake, check the docker logs, or create a GitHub issue.", - "external": "External", - "loginWithExternal": "Login with External Provider", - "loginWithExternalDesc": "Login using your configured external identity provider", - "externalNotSupportedInElectron": "External authentication is not supported in the Electron app yet. Please use the web version for OIDC login.", - "resetPasswordButton": "Reset Password", - "sendResetCode": "Send Reset Code", - "resetCodeDesc": "Enter your username to receive a password reset code. The code will be logged in the docker container logs.", + "tagline": "GESTION DU SERVEUR SSH", + "description": "Gestion de connexion SSH sécurisée, puissante et intuitive", + "welcomeBack": "Bienvenue sur TERMIX", + "createAccount": "Créez votre compte TERMIX", + "continueExternal": "Continuer avec le fournisseur externe", + "loginTitle": "Se connecter à Termix", + "registerTitle": "Créer un compte", + "loginButton": "Se connecter", + "registerButton": "Inscription", + "forgotPassword": "Mot de passe oublié ?", + "rememberMe": "Se souvenir de moi", + "noAccount": "Vous n'avez pas de compte ?", + "hasAccount": "Vous avez déjà un compte ?", + "loginSuccess": "Connexion réussie", + "loginFailed": "Échec de la connexion", + "registerSuccess": "Inscription réussie", + "registerFailed": "L'enregistrement a échoué", + "logoutSuccess": "Déconnexion réussie", + "invalidCredentials": "Nom d'utilisateur ou mot de passe invalide", + "accountCreated": "Compte créé avec succès", + "passwordReset": "Lien de réinitialisation du mot de passe envoyé", + "twoFactorAuth": "Authentification à deux facteurs", + "enterCode": "Entrez le code de vérification", + "backupCode": "Ou utilisez le code de sauvegarde", + "verifyCode": "Vérifier le code", + "redirectingToApp": "Redirection vers l'application...", + "enableTwoFactor": "Activer l'authentification à deux facteurs", + "disableTwoFactor": "Désactiver l'authentification à deux facteurs", + "scanQRCode": "Scannez ce code QR avec votre application d'authentification", + "backupCodes": "Codes de sauvegarde", + "saveBackupCodes": "Enregistrez ces codes de sauvegarde dans un endroit sûr", + "twoFactorEnabledSuccess": "Authentification à deux facteurs activée avec succès !", + "twoFactorDisabled": "Authentification à deux facteurs désactivée", + "newBackupCodesGenerated": "Nouveaux codes de sauvegarde générés", + "backupCodesDownloaded": "Code de sauvegarde téléchargé", + "pleaseEnterSixDigitCode": "Veuillez entrer un code à 6 chiffres", + "invalidVerificationCode": "Code de vérification invalide", + "failedToDisableTotp": "Impossible de désactiver TOTP", + "failedToGenerateBackupCodes": "Impossible de générer des codes de sauvegarde", + "enterPassword": "Entrez votre mot de passe", + "lockedOidcAuth": "Verrouillé (Auteur OIDC)", + "twoFactorTitle": "Authentification à deux facteurs", + "twoFactorProtected": "Votre compte est protégé par l'authentification à deux facteurs", + "twoFactorActive": "L'authentification à deux facteurs est actuellement active sur votre compte", + "disable2FA": "Désactiver l'A2F", + "disableTwoFactorWarning": "Désactiver l'authentification à deux facteurs rendra votre compte moins sécurisé", + "passwordOrTotpCode": "Mot de passe ou code TOTP", + "or": "Ou", + "generateNewBackupCodesText": "Générer de nouveaux codes de sauvegarde si vous avez perdu vos codes existants", + "generateNewBackupCodes": "Générer de nouveaux codes de sauvegarde", + "yourBackupCodes": "Vos codes de sauvegarde", + "download": "Télécharger", + "setupTwoFactorTitle": "Configurer l'authentification à deux facteurs", + "sshAuthenticationRequired": "Authentification SSH requise", + "sshNoKeyboardInteractive": "Authentification interactive du clavier indisponible", + "sshAuthenticationFailed": "Échec de l'authentification", + "sshAuthenticationTimeout": "Délai d'authentification dépassé", + "sshNoKeyboardInteractiveDescription": "Le serveur ne supporte pas l'authentification interactive. Veuillez fournir votre mot de passe ou votre clé SSH.", + "sshAuthFailedDescription": "Les identifiants fournis sont incorrects. Veuillez réessayer avec des identifiants valides.", + "sshTimeoutDescription": "La tentative d'authentification a expiré. Veuillez réessayer.", + "sshProvideCredentialsDescription": "Veuillez fournir vos identifiants SSH pour vous connecter à ce serveur.", + "sshPasswordDescription": "Entrez le mot de passe de cette connexion SSH.", + "sshKeyPasswordDescription": "Si votre clé SSH est chiffrée, entrez le mot de passe ici.", + "step1ScanQR": "Étape 1 : Scannez le code QR avec votre application d'authentification", + "manualEntryCode": "Code d'entrée manuel", + "cannotScanQRText": "Si vous ne pouvez pas scanner le code QR, saisissez ce code manuellement dans votre application d'authentification", + "nextVerifyCode": "Suivant : Vérifier le code", + "verifyAuthenticator": "Vérifiez votre authentificateur", + "step2EnterCode": "Étape 2 : Entrez le code à 6 chiffres de votre application d'authentification", + "verificationCode": "Code de vérification", + "back": "Précédent", + "verifyAndEnable": "Vérifier et activer", + "saveBackupCodesTitle": "Enregistrer vos codes de sauvegarde", + "step3StoreCodesSecurely": "Étape 3 : Stockez ces codes dans un endroit sûr", + "importantBackupCodesText": "Enregistrez ces codes de sauvegarde dans un emplacement sécurisé. Vous pouvez les utiliser pour accéder à votre compte si vous perdez votre appareil d'authentification.", + "completeSetup": "Terminer la configuration", + "notEnabledText": "L'authentification à deux facteurs ajoute une couche de sécurité supplémentaire en exigeant un code de votre application d'authentificateur lors de la connexion.", + "enableTwoFactorButton": "Activer l'authentification à deux facteurs", + "addExtraSecurityLayer": "Ajoutez une couche de sécurité supplémentaire à votre compte", + "firstUser": "Premier utilisateur", + "firstUserMessage": "Vous êtes le premier utilisateur à devenir administrateur. Vous pouvez voir les paramètres d'administration dans la liste déroulante de l'utilisateur de la barre latérale. Si vous pensez que c'est une erreur, consultez les journaux de docker ou créez un problème GitHub.", + "external": "Externe", + "loginWithExternal": "Se connecter avec un fournisseur externe", + "loginWithExternalDesc": "Connectez-vous en utilisant votre fournisseur d'identité externe configuré", + "externalNotSupportedInElectron": "L'authentification externe n'est pas encore prise en charge dans l'application Electron. Veuillez utiliser la version web pour la connexion OIDC.", + "resetPasswordButton": "Réinitialiser le mot de passe", + "sendResetCode": "Envoyer le code de réinitialisation", + "resetCodeDesc": "Entrez votre nom d'utilisateur pour recevoir un code de réinitialisation de mot de passe. Le code sera enregistré dans les journaux du conteneur docker.", "resetCode": "Reset Code", - "verifyCodeButton": "Verify Code", - "enterResetCode": "Enter the 6-digit code from the docker container logs for user:", - "goToLogin": "Go to Login", - "newPassword": "New Password", - "confirmNewPassword": "Confirm Password", - "enterNewPassword": "Enter your new password for user:", - "signUp": "Sign Up", - "mobileApp": "Mobile App", - "loggingInToMobileApp": "Logging in to the mobile app", - "desktopApp": "Desktop App", - "loggingInToDesktopApp": "Logging in to the desktop app", - "loggingInToDesktopAppViaWeb": "Logging in to the desktop app via web interface", - "loadingServer": "Loading server...", - "authenticating": "Authenticating...", - "dataLossWarning": "Resetting your password this way will delete all your saved SSH hosts, credentials, and other encrypted data. This action cannot be undone. Only use this if you have forgotten your password and are not logged in.", - "authenticationDisabled": "Authentication Disabled", - "authenticationDisabledDesc": "All authentication methods are currently disabled. Please contact your administrator.", - "passwordResetSuccess": "Password Reset Successful", - "passwordResetSuccessDesc": "Your password has been reset successfully. You can now log in with your new password." + "verifyCodeButton": "Vérifier le code", + "enterResetCode": "Entrez le code à 6 chiffres du journal du conteneur docker pour l'utilisateur :", + "goToLogin": "Aller à la connexion", + "newPassword": "Nouveau mot de passe", + "confirmNewPassword": "Confirmer le mot de passe", + "enterNewPassword": "Entrez votre nouveau mot de passe pour l'utilisateur :", + "signUp": "S'inscrire", + "mobileApp": "Application mobile", + "loggingInToMobileApp": "Connexion à l'application mobile", + "desktopApp": "Application de bureau", + "loggingInToDesktopApp": "Connexion à l'application de bureau", + "loggingInToDesktopAppViaWeb": "Connexion à l'application de bureau via l'interface web", + "loadingServer": "Chargement du serveur...", + "authenticating": "Authentification...", + "dataLossWarning": "La réinitialisation de votre mot de passe supprimera ainsi tous vos hôtes, identifiants et autres données chiffrées SSH enregistrées. Cette action ne peut pas être annulée. Utilisez cette action uniquement si vous avez oublié votre mot de passe et que vous n'êtes pas connecté.", + "authenticationDisabled": "Authentification désactivée", + "authenticationDisabledDesc": "Toutes les méthodes d'authentification sont actuellement désactivées. Veuillez contacter votre administrateur.", + "passwordResetSuccess": "Mot de passe réinitialisé avec succès", + "passwordResetSuccessDesc": "Votre mot de passe a été réinitialisé avec succès. Vous pouvez maintenant vous connecter avec votre nouveau mot de passe." }, "errors": { - "notFound": "Page not found", - "unauthorized": "Unauthorized access", - "forbidden": "Access forbidden", - "serverError": "Server error", - "networkError": "Network error", - "databaseConnection": "Could not connect to the database", - "unknownError": "Unknown error", - "loginFailed": "Login failed", - "failedPasswordReset": "Failed to initiate password reset", - "failedVerifyCode": "Failed to verify reset code", - "failedCompleteReset": "Failed to complete password reset", + "notFound": "Page introuvable", + "unauthorized": "Accès non autorisé", + "forbidden": "Accès interdit", + "serverError": "Erreur serveur", + "networkError": "Erreur réseau", + "databaseConnection": "Impossible de se connecter à la base de données", + "unknownError": "Erreur inconnue", + "loginFailed": "Échec de la connexion", + "failedPasswordReset": "Échec de la réinitialisation du mot de passe", + "failedVerifyCode": "Impossible de vérifier le code de réinitialisation", + "failedCompleteReset": "Échec de la réinitialisation du mot de passe", "invalidTotpCode": "Invalid TOTP code", - "failedOidcLogin": "Failed to start OIDC login", - "failedUserInfo": "Failed to get user info after OIDC login", - "oidcAuthFailed": "OIDC authentication failed", - "noTokenReceived": "No token received from login", - "invalidAuthUrl": "Invalid authorization URL received from backend", + "failedOidcLogin": "Impossible de démarrer la connexion OIDC", + "failedUserInfo": "Impossible d'obtenir les informations de l'utilisateur après la connexion OIDC", + "oidcAuthFailed": "Échec de l'authentification OIDC", + "noTokenReceived": "Aucun jeton reçu de la connexion", + "invalidAuthUrl": "URL d'autorisation invalide reçue du backend", "invalidInput": "Invalid input", - "requiredField": "This field is required", - "minLength": "Minimum length is {{min}}", - "maxLength": "Maximum length is {{max}}", - "invalidEmail": "Invalid email address", - "passwordMismatch": "Passwords do not match", - "passwordLoginDisabled": "Username/password login is currently disabled", - "weakPassword": "Password is too weak", - "usernameExists": "Username already exists", - "emailExists": "Email already exists", - "loadFailed": "Failed to load data", - "saveError": "Failed to save", - "sessionExpired": "Session expired - please log in again" + "requiredField": "Ce champ est obligatoire", + "minLength": "La longueur minimale est {{min}}", + "maxLength": "La longueur maximale est {{max}}", + "invalidEmail": "Adresse e-mail invalide", + "passwordMismatch": "Les mots de passe ne correspondent pas", + "passwordLoginDisabled": "Le nom d'utilisateur / mot de passe est actuellement désactivé", + "weakPassword": "Le mot de passe est trop faible", + "usernameExists": "Ce nom d'utilisateur existe déjà", + "emailExists": "L'adresse e-mail existe déjà", + "loadFailed": "Impossible de charger les données", + "saveError": "Échec de l'enregistrement", + "sessionExpired": "La session a expiré - veuillez vous reconnecter" }, "messages": { - "saveSuccess": "Saved successfully", - "saveError": "Failed to save", - "deleteSuccess": "Deleted successfully", - "deleteError": "Failed to delete", - "updateSuccess": "Updated successfully", - "updateError": "Failed to update", - "copySuccess": "Copied to clipboard", - "copyError": "Failed to copy", - "copiedToClipboard": "{{item}} copied to clipboard", - "connectionEstablished": "Connection established", - "connectionClosed": "Connection closed", - "reconnecting": "Reconnecting...", - "processing": "Processing...", - "pleaseWait": "Please wait...", - "registrationDisabled": "New account registration is currently disabled by an admin. Please log in or contact an administrator.", - "databaseConnected": "Database connected successfully", - "databaseConnectionFailed": "Failed to connect to the database server", - "checkServerConnection": "Please check your server connection and try again", - "resetCodeSent": "Reset code sent to Docker logs", - "codeVerified": "Code verified successfully", - "passwordResetSuccess": "Password reset successfully", - "loginSuccess": "Login successful", - "registrationSuccess": "Registration successful" + "saveSuccess": "Enregistré avec succès", + "saveError": "Échec de l'enregistrement", + "deleteSuccess": "Supprimé avec succès", + "deleteError": "Échec de la suppression", + "updateSuccess": "Mis à jour avec succès", + "updateError": "Échec de la mise à jour", + "copySuccess": "Copié dans le presse-papiers", + "copyError": "Échec de la copie", + "copiedToClipboard": "{{item}} copié dans le presse-papiers", + "connectionEstablished": "Connexion établie", + "connectionClosed": "Connexion fermée", + "reconnecting": "Reconnexion en cours...", + "processing": "Traitement en cours...", + "pleaseWait": "Veuillez patienter...", + "registrationDisabled": "L'enregistrement d'un nouveau compte est actuellement désactivé par un administrateur. Veuillez vous connecter ou contacter un administrateur.", + "databaseConnected": "La base de données est connectée avec succès", + "databaseConnectionFailed": "Impossible de se connecter au serveur de base de données", + "checkServerConnection": "Veuillez vérifier votre connexion au serveur et réessayer", + "resetCodeSent": "Réinitialiser le code envoyé aux logs Docker", + "codeVerified": "Code vérifié avec succès", + "passwordResetSuccess": "Mot de passe réinitialisé avec succès", + "loginSuccess": "Connexion réussie", + "registrationSuccess": "Inscription réussie" }, "profile": { - "title": "User Profile", - "description": "Manage your account settings and security", - "security": "Security", - "changePassword": "Change Password", - "twoFactorAuth": "Two-Factor Authentication", - "accountInfo": "Account Information", - "role": "Role", - "admin": "Administrator", - "user": "User", - "authMethod": "Authentication Method", - "local": "Local", - "external": "External (OIDC)", - "externalAndLocal": "Dual Auth", - "selectPreferredLanguage": "Select your preferred language for the interface", - "fileColorCoding": "File Color Coding", - "fileColorCodingDesc": "Color-code files by type: folders (red), files (blue), symlinks (green)", - "commandAutocomplete": "Command Autocomplete", - "commandAutocompleteDesc": "Enable Tab key autocomplete suggestions for terminal commands based on your command history", - "defaultSnippetFoldersCollapsed": "Collapse Snippet Folders by Default", - "defaultSnippetFoldersCollapsedDesc": "When enabled, all snippet folders will be collapsed when you open the snippets tab", - "terminalSyntaxHighlighting": "Terminal Syntax Highlighting", - "showHostTags": "Show Host Tags", - "showHostTagsDesc": "Display tags under each host in the sidebar. Disable to hide all tags.", - "account": "Account", - "appearance": "Appearance", - "languageLocalization": "Language & Localization", - "fileManagerSettings": "File Manager", + "title": "Profil de l'utilisateur", + "description": "Gérer les paramètres et la sécurité de votre compte", + "security": "Sécurité", + "changePassword": "Changer le mot de passe", + "twoFactorAuth": "Authentification à deux facteurs", + "accountInfo": "Informations sur le compte", + "role": "Rôle", + "admin": "Administrateur", + "user": "Utilisateur", + "authMethod": "Méthode d'authentification", + "local": "Locale", + "external": "Externe (OIDC)", + "externalAndLocal": "Double Auth", + "selectPreferredLanguage": "Sélectionnez votre langue préférée pour l'interface", + "fileColorCoding": "Codage des couleurs du fichier", + "fileColorCodingDesc": "Fichiers de code couleur par type: dossiers (rouge), fichiers (bleu), liens symboliques (vert)", + "commandAutocomplete": "Auto-complétion de commande", + "commandAutocompleteDesc": "Activer les suggestions de saisie automatique des touches Tab pour les commandes de terminal basées sur l'historique de vos commandes", + "defaultSnippetFoldersCollapsed": "Réduire les dossiers de snippet par défaut", + "defaultSnippetFoldersCollapsedDesc": "Lorsque cette option est activée, tous les dossiers de snippet seront réduits lorsque vous ouvrez l'onglet snippets", + "terminalSyntaxHighlighting": "Coloration syntaxique du terminal", + "showHostTags": "Afficher les tags de l'hôte", + "showHostTagsDesc": "Afficher les tags sous chaque hôte dans la barre latérale. Désactiver pour masquer tous les tags.", + "account": "Compte client", + "appearance": "Apparence", + "languageLocalization": "Langue et localisation", + "fileManagerSettings": "Gestionnaire de fichiers", "terminalSettings": "Terminal", - "hostSidebarSettings": "Host & Sidebar", - "snippetsSettings": "Snippets", - "currentPassword": "Current Password", - "passwordChangedSuccess": "Password changed successfully! Please log in again.", - "failedToChangePassword": "Failed to change password. Please check your current password and try again.", - "theme": "Theme", - "themeLight": "Light", - "themeDark": "Dark", - "themeSystem": "System", - "appearanceDesc": "Select the color theme for the application", - "terminalSyntaxHighlightingDesc": "Automatically highlight commands, paths, IPs, and log levels in terminal output" + "hostSidebarSettings": "Hôte et barre latérale", + "snippetsSettings": "Extraits", + "currentPassword": "Mot de passe actuel", + "passwordChangedSuccess": "Mot de passe modifié avec succès ! Veuillez vous reconnecter.", + "failedToChangePassword": "Impossible de modifier le mot de passe. Veuillez vérifier votre mot de passe actuel et réessayez.", + "theme": "Thème", + "themeLight": "Lumière", + "themeDark": "Sombre", + "themeSystem": "Système", + "appearanceDesc": "Sélectionnez le thème de couleur pour l'application", + "terminalSyntaxHighlightingDesc": "Mettre automatiquement en surbrillance les commandes, chemins, IPs et niveaux de log dans la sortie du terminal" }, "user": { - "failedToLoadVersionInfo": "Failed to load version information" + "failedToLoadVersionInfo": "Impossible de charger les informations de version" }, "placeholders": { "enterCode": "000000", @@ -1901,502 +1901,502 @@ "port": "22", "maxRetries": "3", "retryInterval": "10", - "language": "Language", - "username": "username", - "hostname": "host name", - "folder": "folder", - "password": "password", - "keyPassword": "key password", - "sudoPassword": "sudo password (optional)", - "notes": "add notes about this host...", - "expirationDate": "Select expiration date", - "pastePrivateKey": "Paste your private key here...", - "pastePublicKey": "Paste your public key here...", - "credentialName": "My SSH Server", - "description": "SSH credential description", - "searchCredentials": "Search credentials by name, username, or tags...", - "sshConfig": "endpoint ssh configuration", + "language": "Langue", + "username": "nom d'utilisateur", + "hostname": "nom d'hôte", + "folder": "Répertoire", + "password": "mot de passe", + "keyPassword": "mot de passe de la clé", + "sudoPassword": "sudo mot de passe (facultatif)", + "notes": "ajouter des notes sur cet hôte...", + "expirationDate": "Sélectionnez la date d'expiration", + "pastePrivateKey": "Collez votre clé privée ici...", + "pastePublicKey": "Collez votre clé publique ici...", + "credentialName": "Mon serveur SSH", + "description": "Description des identifiants SSH", + "searchCredentials": "Rechercher les identifiants par nom, nom d'utilisateur ou tags...", + "sshConfig": "configuration ssh du point de terminaison", "homePath": "/home", - "clientId": "your-client-id", - "clientSecret": "your-client-secret", - "authUrl": "https://your-provider.com/application/o/authorize/", - "redirectUrl": "https://your-provider.com/application/o/termix/", - "tokenUrl": "https://your-provider.com/application/o/token/", - "userIdField": "sub", - "usernameField": "name", - "scopes": "openid email profile", - "userinfoUrl": "https://your-provider.com/application/o/userinfo/", - "enterUsername": "Enter username to make admin", - "searchHosts": "Search hosts by name, username, IP, folder, tags...", - "enterPassword": "Enter your password", + "clientId": "votre-client-id", + "clientSecret": "votre-client-secret", + "authUrl": "https://votre-fournisseur.com/application/o/authorize/", + "redirectUrl": "https://votre-fournisseur.com/application/o/termix/", + "tokenUrl": "https://votre-fournisseur.com/application/o/token/", + "userIdField": "sous", + "usernameField": "Nom", + "scopes": "Profil e-mail openid", + "userinfoUrl": "https://votre-fournisseur.com/application/o/userinfo/", + "enterUsername": "Entrez le nom d'utilisateur pour devenir administrateur", + "searchHosts": "Rechercher les hôtes par nom, nom d'utilisateur, IP, répertoire, tags...", + "enterPassword": "Entrez votre mot de passe", "totpCode": "6-digit TOTP code", - "searchHostsAny": "Search hosts (try: tag:prod, user:root, ip:192.168)...", - "confirmPassword": "Enter your password to confirm", - "typeHere": "Type here", - "fileName": "Enter file name (e.g., example.txt)", - "folderName": "Enter folder name", - "fullPath": "Enter full path to item", - "currentPath": "Enter current path to item", - "newName": "Enter new name", + "searchHostsAny": "Rechercher des hôtes (essayez: tag:prod, user:root, ip:192.168)...", + "confirmPassword": "Entrez votre mot de passe pour confirmer", + "typeHere": "Tapez ici", + "fileName": "Entrez le nom du fichier (par exemple, exemple.txt)", + "folderName": "Entrez le nom du dossier", + "fullPath": "Entrez le chemin complet vers l'élément", + "currentPath": "Entrez le chemin d'accès actuel à l'élément", + "newName": "Entrez un nouveau nom", "socks5Host": "127.0.0.1", - "socks5Username": "proxy username", - "socks5Password": "proxy password", - "socks5PresetName": "e.g., Work VPN Chain", - "socks5PresetDescription": "e.g., Proxy chain for accessing work servers", - "moshCommand": "mosh user@server", + "socks5Username": "nom d'utilisateur du proxy", + "socks5Password": "mot de passe du proxy", + "socks5PresetName": "ex: Chaîne VPN Work", + "socks5PresetDescription": "par exemple, chaîne de proxy pour accéder aux serveurs de travail", + "moshCommand": "utilisateur@serveur mosh", "defaultPort": "22", "defaultEndpointPort": "224", "defaultMaxRetries": "3", "defaultRetryInterval": "10" }, "leftSidebar": { - "failedToLoadHosts": "Failed to load hosts", - "noFolder": "No Folder", - "passwordRequired": "Password is required", - "failedToDeleteAccount": "Failed to delete account", - "failedToMakeUserAdmin": "Failed to make user admin", - "userIsNowAdmin": "User {{username}} is now an admin", - "removeAdminConfirm": "Are you sure you want to remove admin status from {{username}}?", - "deleteUserConfirm": "Are you sure you want to delete user {{username}}? This action cannot be undone.", - "deleteAccount": "Delete Account", - "closeDeleteAccount": "Close Delete Account", - "deleteAccountWarning": "This action cannot be undone. This will permanently delete your account and all associated data.", - "deleteAccountWarningDetails": "Deleting your account will remove all your data including SSH hosts, configurations, and settings. This action is irreversible.", - "deleteAccountWarningShort": "This action is not reversible and will permanently delete your account.", - "cannotDeleteAccount": "Cannot Delete Account", - "lastAdminWarning": "You are the last admin user. You cannot delete your account as this would leave the system without any administrators. Please make another user an admin first, or contact system support.", - "confirmPassword": "Confirm Password", - "deleting": "Deleting...", - "cancel": "Cancel" + "failedToLoadHosts": "Impossible de charger les hôtes", + "noFolder": "Aucun dossier", + "passwordRequired": "Le mot de passe est requis", + "failedToDeleteAccount": "Échec de la suppression du compte", + "failedToMakeUserAdmin": "Impossible de rendre l'administrateur de l'utilisateur", + "userIsNowAdmin": "L'utilisateur {{username}} est maintenant un administrateur", + "removeAdminConfirm": "Êtes-vous sûr de vouloir supprimer le statut d'administrateur de {{username}}?", + "deleteUserConfirm": "Êtes-vous sûr de vouloir supprimer l'utilisateur {{username}}? Cette action ne peut pas être annulée.", + "deleteAccount": "Supprimer le compte", + "closeDeleteAccount": "Fermer le compte de suppression", + "deleteAccountWarning": "Cette action ne peut pas être annulée. Cela supprimera définitivement votre compte et toutes les données associées.", + "deleteAccountWarningDetails": "La suppression de votre compte supprimera toutes vos données, y compris les hôtes SSH, les configurations et les paramètres. Cette action est irréversible.", + "deleteAccountWarningShort": "Cette action n'est pas réversible et supprimera définitivement votre compte.", + "cannotDeleteAccount": "Impossible de supprimer le compte", + "lastAdminWarning": "Vous êtes le dernier utilisateur administrateur. Vous ne pouvez pas supprimer votre compte car cela quitterait le système sans administrateurs. Veuillez d'abord faire un autre utilisateur un administrateur, ou contacter le support système.", + "confirmPassword": "Confirmer le mot de passe", + "deleting": "Suppression en cours...", + "cancel": "Abandonner" }, "interface": { "sidebar": "Sidebar", - "toggleSidebar": "Toggle Sidebar", - "close": "Close", - "online": "Online", - "offline": "Offline", - "maintenance": "Maintenance", - "degraded": "Degraded", - "noTunnelConnections": "No tunnel connections configured", - "discord": "Discord", - "connectToSshForOperations": "Connect to SSH to use file operations", - "uploadFile": "Upload File", - "newFile": "New File", - "newFolder": "New Folder", - "rename": "Rename", - "deleteItem": "Delete Item", - "createNewFile": "Create New File", - "createNewFolder": "Create New Folder", - "renameItem": "Rename Item", - "clickToSelectFile": "Click to select a file", - "noSshHosts": "No SSH Hosts", - "sshHosts": "SSH Hosts", - "importSshHosts": "Import SSH Hosts from JSON", - "clientId": "Client ID", - "clientSecret": "Client Secret", - "error": "Error", - "warning": "Warning", - "deleteAccount": "Delete Account", - "closeDeleteAccount": "Close Delete Account", - "cannotDeleteAccount": "Cannot Delete Account", - "confirmPassword": "Confirm Password", - "deleting": "Deleting...", - "externalAuth": "External Authentication (OIDC)", - "configureExternalProvider": "Configure external identity provider for", - "waitingForRetry": "Waiting for retry", - "retryingConnection": "Retrying connection", - "resetSplitSizes": "Reset split sizes", - "sshManagerAlreadyOpen": "SSH Manager already open", - "disabledDuringSplitScreen": "Disabled during split screen", - "unknown": "Unknown", - "connected": "Connected", - "disconnected": "Disconnected", - "maxRetriesExhausted": "Max retries exhausted", - "endpointHostNotFound": "Endpoint host not found", - "administrator": "Administrator", - "user": "User", - "external": "External", - "local": "Local", - "saving": "Saving...", - "saveConfiguration": "Save Configuration", - "loading": "Loading...", - "refresh": "Refresh", - "adding": "Adding...", - "makeAdmin": "Make Admin", - "verifying": "Verifying...", - "verifyAndEnable": "Verify and Enable", - "secretKey": "Secret key", + "toggleSidebar": "Activer/désactiver la barre latérale", + "close": "Fermer", + "online": "En ligne", + "offline": "Hors ligne", + "maintenance": "Entretien", + "degraded": "Dégradé", + "noTunnelConnections": "Aucune connexion tunnel configurée", + "discord": "Discord.", + "connectToSshForOperations": "Se connecter à SSH pour utiliser les opérations de fichiers", + "uploadFile": "Charger un fichier", + "newFile": "Nouveau fichier", + "newFolder": "Nouveau dossier", + "rename": "Renommer", + "deleteItem": "Supprimer l'élément", + "createNewFile": "Créer un nouveau fichier", + "createNewFolder": "Créer un nouveau dossier", + "renameItem": "Renommer l'élément", + "clickToSelectFile": "Cliquez pour sélectionner un fichier", + "noSshHosts": "Aucun hôte SSH", + "sshHosts": "Hôtes SSH", + "importSshHosts": "Importer les hôtes SSH depuis JSON", + "clientId": "ID du client", + "clientSecret": "Secret du client", + "error": "Erreur", + "warning": "Avertissement", + "deleteAccount": "Supprimer le compte", + "closeDeleteAccount": "Fermer le compte de suppression", + "cannotDeleteAccount": "Impossible de supprimer le compte", + "confirmPassword": "Confirmer le mot de passe", + "deleting": "Suppression en cours...", + "externalAuth": "Authentification externe (OIDC)", + "configureExternalProvider": "Configurer le fournisseur d'identité externe pour", + "waitingForRetry": "En attente d'une nouvelle tentative", + "retryingConnection": "Nouvelle tentative de connexion", + "resetSplitSizes": "Réinitialiser les tailles divisées", + "sshManagerAlreadyOpen": "SSH Manager déjà ouvert", + "disabledDuringSplitScreen": "Désactivé pendant l'écran partagé", + "unknown": "Inconnu", + "connected": "Connecté", + "disconnected": "Déconnecté", + "maxRetriesExhausted": "Nombre maximum de tentatives épuisées", + "endpointHostNotFound": "Hôte du point d'extrémité introuvable", + "administrator": "Administrateur", + "user": "Utilisateur", + "external": "Externe", + "local": "Locale", + "saving": "Sauvegarde en cours...", + "saveConfiguration": "Enregistrer la configuration", + "loading": "Chargement en cours...", + "refresh": "Rafraîchir", + "adding": "Ajout en cours...", + "makeAdmin": "Rendre administrateur", + "verifying": "Vérification...", + "verifyAndEnable": "Vérifier et activer", + "secretKey": "Clé secrète", "totpQrCode": "TOTP QR Code", - "passwordRequired": "Password is required when using password authentication", - "sshKeyRequired": "SSH Private Key is required when using key authentication", - "keyTypeRequired": "Key Type is required when using key authentication", - "validSshConfigRequired": "Must select a valid SSH configuration from the list", - "updateHost": "Update Host", - "addHost": "Add Host", - "editHost": "Edit Host", - "pinConnection": "Pin Connection", - "authentication": "Authentication", - "password": "Password", - "key": "Key", - "sshPrivateKey": "SSH Private Key", - "keyPassword": "Key Password", - "keyType": "Key Type", - "enableTerminal": "Enable Terminal", - "enableTunnel": "Enable Tunnel", - "enableFileManager": "Enable File Manager", - "defaultPath": "Default Path", - "tunnelConnections": "Tunnel Connections", - "maxRetries": "Max Retries", - "upload": "Upload", - "updateKey": "Update Key", + "passwordRequired": "Le mot de passe est requis lorsque vous utilisez l'authentification par mot de passe", + "sshKeyRequired": "La clé privée SSH est requise lors de l'utilisation de l'authentification par clé", + "keyTypeRequired": "Le type de clé est requis lors de l'utilisation de l'authentification par clé", + "validSshConfigRequired": "Vous devez sélectionner une configuration SSH valide dans la liste", + "updateHost": "Mettre à jour l'hôte", + "addHost": "Ajouter un hôte", + "editHost": "Modifier l'hôte", + "pinConnection": "Épingler la connexion", + "authentication": "Authentification", + "password": "Mot de passe", + "key": "Clés", + "sshPrivateKey": "Clé privée SSH", + "keyPassword": "Mot de passe de la clé", + "keyType": "Type de clé", + "enableTerminal": "Activer le Terminal", + "enableTunnel": "Activer le tunnel", + "enableFileManager": "Activer le gestionnaire de fichiers", + "defaultPath": "Chemin par défaut", + "tunnelConnections": "Connexions Tunnel", + "maxRetries": "Nombre maximum de tentatives", + "upload": "Charger", + "updateKey": "Mettre à jour la clé", "productionFolder": "Production", - "databaseServer": "Database Server", - "developmentServer": "Development Server", - "developmentFolder": "Development", - "webServerProduction": "Web Server - Production", - "unknownError": "Unknown error", - "failedToInitiatePasswordReset": "Failed to initiate password reset", - "failedToVerifyResetCode": "Failed to verify reset code", - "failedToCompletePasswordReset": "Failed to complete password reset", + "databaseServer": "Serveur de base de données", + "developmentServer": "Serveur de développement", + "developmentFolder": "Développement", + "webServerProduction": "Serveur Web - Production", + "unknownError": "Erreur inconnue", + "failedToInitiatePasswordReset": "Échec de la réinitialisation du mot de passe", + "failedToVerifyResetCode": "Impossible de vérifier le code de réinitialisation", + "failedToCompletePasswordReset": "Échec de la réinitialisation du mot de passe", "invalidTotpCode": "Invalid TOTP code", - "failedToStartOidcLogin": "Failed to start OIDC login", - "failedToGetUserInfoAfterOidc": "Failed to get user info after OIDC login", - "loginWithExternalProvider": "Login with external provider", - "loginWithExternal": "Login with External Provider", - "sendResetCode": "Send Reset Code", - "verifyCode": "Verify Code", - "resetPassword": "Reset Password", - "login": "Login", - "signUp": "Sign Up", - "failedToUpdateOidcConfig": "Failed to update OIDC configuration", - "failedToMakeUserAdmin": "Failed to make user admin", - "failedToStartTotpSetup": "Failed to start TOTP setup", - "invalidVerificationCode": "Invalid verification code", - "failedToDisableTotp": "Failed to disable TOTP", - "failedToGenerateBackupCodes": "Failed to generate backup codes" + "failedToStartOidcLogin": "Impossible de démarrer la connexion OIDC", + "failedToGetUserInfoAfterOidc": "Impossible d'obtenir les informations de l'utilisateur après la connexion OIDC", + "loginWithExternalProvider": "Connexion avec un fournisseur externe", + "loginWithExternal": "Se connecter avec un fournisseur externe", + "sendResetCode": "Envoyer le code de réinitialisation", + "verifyCode": "Vérifier le code", + "resetPassword": "Réinitialiser le mot de passe", + "login": "Se connecter", + "signUp": "S'inscrire", + "failedToUpdateOidcConfig": "Échec de la mise à jour de la configuration OIDC", + "failedToMakeUserAdmin": "Impossible de rendre l'administrateur de l'utilisateur", + "failedToStartTotpSetup": "Impossible de démarrer la configuration TOTP", + "invalidVerificationCode": "Code de vérification invalide", + "failedToDisableTotp": "Impossible de désactiver TOTP", + "failedToGenerateBackupCodes": "Impossible de générer des codes de sauvegarde" }, "mobile": { - "selectHostToStart": "Select a host to start your terminal session", - "limitedSupportMessage": "Website mobile support is still in progress. Use the mobile app for a better experience.", - "mobileAppInProgress": "Mobile app is in progress", - "mobileAppInProgressDesc": "We're working on a dedicated mobile app to provide a better experience on mobile devices.", - "viewMobileAppDocs": "Install Mobile App", - "mobileAppDocumentation": "Mobile App Documentation" + "selectHostToStart": "Sélectionnez un hôte pour démarrer votre session de terminal", + "limitedSupportMessage": "Le support du site web mobile est toujours en cours. Utilisez l'application mobile pour une meilleure expérience.", + "mobileAppInProgress": "Application mobile en cours", + "mobileAppInProgressDesc": "Nous travaillons sur une application mobile dédiée pour fournir une meilleure expérience sur les appareils mobiles.", + "viewMobileAppDocs": "Installer l'application mobile", + "mobileAppDocumentation": "Documentation de l'application mobile" }, "dashboard": { - "title": "Dashboard", + "title": "Tableau de bord", "github": "GitHub", - "support": "Support", - "discord": "Discord", - "donate": "Donate", - "serverOverview": "Server Overview", + "support": "Soutien", + "discord": "Discord.", + "donate": "Faire un don", + "serverOverview": "Vue d'ensemble du serveur", "version": "Version", - "upToDate": "Up to Date", - "updateAvailable": "Update Available", - "uptime": "Uptime", - "database": "Database", - "healthy": "Healthy", - "error": "Error", - "totalServers": "Total Servers", - "totalTunnels": "Total Tunnels", - "totalCredentials": "Total Credentials", - "recentActivity": "Recent Activity", + "upToDate": "À jour", + "updateAvailable": "Mise à jour disponible", + "uptime": "Délai de disponibilité", + "database": "Base de données", + "healthy": "Sain", + "error": "Erreur", + "totalServers": "Serveurs totaux", + "totalTunnels": "Tunnels totaux", + "totalCredentials": "Identifiants totaux", + "recentActivity": "Activité récente", "reset": "Reset", - "loadingRecentActivity": "Loading recent activity...", - "noRecentActivity": "No recent activity", - "quickActions": "Quick Actions", - "addHost": "Add Host", - "addCredential": "Add Credential", - "adminSettings": "Admin Settings", - "userProfile": "User Profile", - "serverStats": "Server Stats", - "loadingServerStats": "Loading server stats...", - "noServerData": "No server data available", - "cpu": "CPU", + "loadingRecentActivity": "Chargement de l'activité récente...", + "noRecentActivity": "Aucune activité récente", + "quickActions": "Actions rapides", + "addHost": "Ajouter un hôte", + "addCredential": "Ajouter un mot de passe", + "adminSettings": "Paramètres de l'administrateur", + "userProfile": "Profil de l'utilisateur", + "serverStats": "Statistiques du serveur", + "loadingServerStats": "Chargement des statistiques du serveur...", + "noServerData": "Aucune donnée de serveur disponible", + "cpu": "UC", "ram": "RAM", "notAvailable": "N/A" }, "rbac": { - "shareHost": "Share Host", - "shareHostTitle": "Share Host Access", - "shareHostDescription": "Grant temporary or permanent access to this host", - "targetUser": "Target User", - "selectUser": "Select a user to share with", - "duration": "Duration", - "durationHours": "Duration (hours)", - "neverExpires": "Never expires", - "permissionLevel": "Permission Level", + "shareHost": "Partager l'hôte", + "shareHostTitle": "Partager l'accès à l'hôte", + "shareHostDescription": "Accorder un accès temporaire ou permanent à cet hôte", + "targetUser": "Utilisateur cible", + "selectUser": "Sélectionnez un utilisateur avec qui partager", + "duration": "Durée", + "durationHours": "Durée (heures)", + "neverExpires": "N'expire jamais", + "permissionLevel": "Niveau de permission", "permissionLevels": { - "readonly": "Read-Only", - "readonlyDesc": "Can view only, no command input", - "restricted": "Restricted", - "restrictedDesc": "Blocks dangerous commands (passwd, rm -rf, etc.)", - "monitored": "Monitored", - "monitoredDesc": "Records all commands but doesn't block (Recommended)", - "full": "Full Access", - "fullDesc": "No restrictions (Not recommended)" + "readonly": "Lecture seule", + "readonlyDesc": "Visualisation seule, aucune entrée de commande", + "restricted": "Restreint", + "restrictedDesc": "Bloque les commandes dangereuses (passwd, rm -rf, etc.)", + "monitored": "Surveillé", + "monitoredDesc": "Enregistre toutes les commandes mais ne bloque pas (Recommandé)", + "full": "Accès complet", + "fullDesc": "Aucune restriction (non recommandée)" }, - "blockedCommands": "Blocked Commands", - "blockedCommandsPlaceholder": "Enter commands to block, e.g., passwd, rm, dd", - "maxSessionDuration": "Max Session Duration (minutes)", - "createTempUser": "Create Temporary User", - "createTempUserDesc": "Creates a restricted user on the server instead of sharing your credentials. Requires sudo access. Most secure option.", - "expiresAt": "Expires At", - "expiresIn": "Expires in {{hours}} hours", - "expired": "Expired", - "grantedBy": "Granted By", - "accessLevel": "Access Level", - "lastAccessed": "Last Accessed", - "accessCount": "Access Count", - "revokeAccess": "Revoke Access", - "confirmRevokeAccess": "Are you sure you want to revoke access for {{username}}?", - "hostSharedSuccessfully": "Host shared successfully with {{username}}", - "hostAccessUpdated": "Host access updated", - "failedToShareHost": "Failed to share host", - "accessRevokedSuccessfully": "Access revoked successfully", - "failedToRevokeAccess": "Failed to revoke access", - "shared": "Shared", - "sharedHosts": "Shared Hosts", - "sharedWithMe": "Shared With Me", - "noSharedHosts": "No hosts shared with you", - "owner": "Owner", - "viewAccessList": "View Access List", - "accessList": "Access List", - "noAccessGranted": "No access has been granted for this host", - "noAccessGrantedMessage": "No users have been granted access to this host yet", - "manageAccessFor": "Manage access for", - "totalAccessRecords": "{{count}} access record(s)", - "neverAccessed": "Never", - "timesAccessed": "{{count}} time(s)", + "blockedCommands": "Commandes bloquées", + "blockedCommandsPlaceholder": "Entrez les commandes à bloquer, par exemple, passwd, rm, dd", + "maxSessionDuration": "Durée maximale de la session (minutes)", + "createTempUser": "Créer un utilisateur temporaire", + "createTempUserDesc": "Crée un utilisateur restreint sur le serveur au lieu de partager vos identifiants. Nécessite un accès sudo. Option la plus sécurisée.", + "expiresAt": "Expire à", + "expiresIn": "Expire dans {{hours}} heures", + "expired": "Expiré", + "grantedBy": "Accepté par", + "accessLevel": "Niveau d'accès", + "lastAccessed": "Dernier accès", + "accessCount": "Nombre d'accès", + "revokeAccess": "Révoquer l'accès", + "confirmRevokeAccess": "Êtes-vous sûr de vouloir révoquer l'accès pour {{username}}?", + "hostSharedSuccessfully": "Hôte partagé avec {{username}} avec succès", + "hostAccessUpdated": "Accès à l'hôte mis à jour", + "failedToShareHost": "Impossible de partager l'hôte", + "accessRevokedSuccessfully": "Accès révoqué avec succès", + "failedToRevokeAccess": "Impossible de révoquer l'accès", + "shared": "Partagé", + "sharedHosts": "Hôtes partagés", + "sharedWithMe": "Partagé avec moi", + "noSharedHosts": "Aucun hôte partagé avec vous", + "owner": "Propriétaire", + "viewAccessList": "Voir la liste d'accès", + "accessList": "Liste d'accès", + "noAccessGranted": "Aucun accès n'a été accordé à cet hôte", + "noAccessGrantedMessage": "Aucun utilisateur n'a encore été autorisé à accéder à cet hôte", + "manageAccessFor": "Gérer l'accès pour", + "totalAccessRecords": "Enregistrement(s) d'accès {{count}}", + "neverAccessed": "Jamais", + "timesAccessed": "{{count}} fois(s)", "daysRemaining": "{{days}} day(s)", - "hoursRemaining": "{{hours}} hour(s)", - "failedToFetchAccessList": "Failed to fetch access list", - "currentAccess": "Current Access", - "securityWarning": "Security Warning", - "securityWarningMessage": "Sharing credentials gives the user full access to perform any operations on the server, including changing passwords and deleting files. Only share with trusted users.", - "tempUserRecommended": "We recommend enabling 'Create Temporary User' for better security.", - "roleManagement": "Role Management", - "manageRoles": "Manage Roles", - "manageRolesFor": "Manage roles for {{username}}", - "assignRole": "Assign Role", - "removeRole": "Remove Role", - "userRoles": "User Roles", + "hoursRemaining": "{{hours}} heure(s)", + "failedToFetchAccessList": "Impossible de récupérer la liste d'accès", + "currentAccess": "Accès actuel", + "securityWarning": "Avertissement de sécurité", + "securityWarningMessage": "Le partage des identifiants donne à l'utilisateur un accès complet pour effectuer toutes les opérations sur le serveur, y compris modifier les mots de passe et supprimer les fichiers. Ne partager qu'avec les utilisateurs de confiance.", + "tempUserRecommended": "Nous vous recommandons d'activer \"Créer un utilisateur temporaire\" pour une meilleure sécurité.", + "roleManagement": "Gestion des rôles", + "manageRoles": "Gérer les rôles", + "manageRolesFor": "Gérer les rôles pour {{username}}", + "assignRole": "Assigner un rôle", + "removeRole": "Supprimer le rôle", + "userRoles": "Rôles de l'utilisateur", "permissions": "Permissions", - "systemRole": "System Role", - "customRole": "Custom Role", - "roleAssignedSuccessfully": "Role assigned to {{username}} successfully", - "failedToAssignRole": "Failed to assign role", - "roleRemovedSuccessfully": "Role removed from {{username}} successfully", - "failedToRemoveRole": "Failed to remove role", - "cannotRemoveSystemRole": "Cannot remove system role", - "cannotShareWithSelf": "Cannot share host with yourself", - "noCustomRolesToAssign": "No custom roles available. System roles are auto-assigned.", - "credentialSharingWarning": "Credential Authentication Not Supported for Sharing", - "credentialRequired": "Credential is required when sharing a host", - "credentialRequiredDescription": "This host does not use credential-based authentication. In order to share hosts, due to per-user-encryption, the host must use credential based authentication.", - "auditLogs": "Audit Logs", - "viewAuditLogs": "View Audit Logs", + "systemRole": "Rôle du système", + "customRole": "Rôle personnalisé", + "roleAssignedSuccessfully": "Rôle assigné à {{username}} avec succès", + "failedToAssignRole": "Échec de l'attribution du rôle", + "roleRemovedSuccessfully": "Rôle retiré de {{username}} avec succès", + "failedToRemoveRole": "Impossible de supprimer le rôle", + "cannotRemoveSystemRole": "Impossible de supprimer le rôle système", + "cannotShareWithSelf": "Impossible de partager l'hôte avec vous-même", + "noCustomRolesToAssign": "Aucun rôle personnalisé disponible. Les rôles système sont auto-assignés.", + "credentialSharingWarning": "Authentification non prise en charge pour le partage", + "credentialRequired": "Les identifiants sont requis lors du partage d'un hôte", + "credentialRequiredDescription": "Cet hôte n'utilise pas l'authentification basée sur les identifiants. Afin de partager des hôtes, en raison du chiffrement par utilisateur, l'hôte doit utiliser une authentification basée sur les identifiants.", + "auditLogs": "Journaux d'audit", + "viewAuditLogs": "Voir les journaux d'audit", "action": "Action", - "resourceType": "Resource Type", - "resourceName": "Resource Name", - "timestamp": "Timestamp", - "ipAddress": "IP Address", - "userAgent": "User Agent", - "success": "Success", - "failed": "Failed", - "details": "Details", - "noAuditLogs": "No audit logs available", - "sessionRecordings": "Session Recordings", - "viewRecording": "View Recording", - "downloadRecording": "Download Recording", - "dangerousCommand": "Dangerous Command Detected", - "commandBlocked": "Command Blocked", - "terminateSession": "Terminate Session", - "sessionTerminated": "Session terminated by host owner", - "sharedAccessExpired": "Your shared access to this host has expired", - "sharedAccessExpiresIn": "Shared access expires in {{hours}} hours", + "resourceType": "Type de ressource", + "resourceName": "Nom de la ressource", + "timestamp": "Horodatage", + "ipAddress": "Adresse IP", + "userAgent": "Agent Utilisateur", + "success": "Succès", + "failed": "Echoué", + "details": "Détails du produit", + "noAuditLogs": "Aucun journal d'audit disponible", + "sessionRecordings": "Enregistrements de session", + "viewRecording": "Voir l'enregistrement", + "downloadRecording": "Télécharger l'enregistrement", + "dangerousCommand": "Commande dangereuse détectée", + "commandBlocked": "Commande bloquée", + "terminateSession": "Terminer la session", + "sessionTerminated": "Session terminée par le propriétaire de l'hôte", + "sharedAccessExpired": "Votre accès partagé à cet hôte a expiré", + "sharedAccessExpiresIn": "L'accès partagé expire dans {{hours}} heures", "roles": { - "label": "Roles", - "admin": "Administrator", - "user": "User" + "label": "Rôles", + "admin": "Administrateur", + "user": "Utilisateur" }, - "createRole": "Create Role", - "editRole": "Edit Role", - "roleName": "Role Name", - "displayName": "Display Name", - "description": "Description", - "assignRoles": "Assign Roles", - "userRoleAssignment": "User-Role Assignment", - "selectUserPlaceholder": "Select a user", - "searchUsers": "Search users...", - "noUserFound": "No user found", - "currentRoles": "Current Roles", - "noRolesAssigned": "No roles assigned", - "assignNewRole": "Assign New Role", - "selectRolePlaceholder": "Select a role", - "searchRoles": "Search roles...", - "noRoleFound": "No role found", - "assign": "Assign", - "roleCreatedSuccessfully": "Role created successfully", - "roleUpdatedSuccessfully": "Role updated successfully", - "roleDeletedSuccessfully": "Role deleted successfully", - "failedToLoadRoles": "Failed to load roles", - "failedToSaveRole": "Failed to save role", - "failedToDeleteRole": "Failed to delete role", - "roleDisplayNameRequired": "Role display name is required", - "roleNameRequired": "Role name is required", - "roleNameHint": "Use lowercase letters, numbers, underscores, and hyphens only", - "displayNamePlaceholder": "Developer", - "descriptionPlaceholder": "Software developers and engineers", - "confirmDeleteRole": "Delete Role", - "confirmDeleteRoleDescription": "Are you sure you want to delete the role '{{name}}'? This action cannot be undone.", - "confirmRemoveRole": "Remove Role", - "confirmRemoveRoleDescription": "Are you sure you want to remove this role from the user?", - "editRoleDescription": "Update role information", - "createRoleDescription": "Create a new custom role for grouping users", - "assignRolesDescription": "Manage role assignments for users", - "noRoles": "No roles found", - "selectRole": "Select Role", - "type": "Type", - "user": "User", - "role": "Role", - "saveHostFirst": "Save Host First", - "saveHostFirstDescription": "Please save the host before configuring sharing settings.", - "shareWithUser": "Share with User", - "shareWithRole": "Share with Role", - "share": "Share", + "createRole": "Créer un rôle", + "editRole": "Modifier le rôle", + "roleName": "Nom du rôle", + "displayName": "Nom affiché", + "description": "Libellé", + "assignRoles": "Assigner des rôles", + "userRoleAssignment": "Affectation de rôle utilisateur", + "selectUserPlaceholder": "Sélectionnez un utilisateur", + "searchUsers": "Rechercher des utilisateurs...", + "noUserFound": "Aucun utilisateur trouvé", + "currentRoles": "Rôles actuels", + "noRolesAssigned": "Aucun rôle assigné", + "assignNewRole": "Assigner un nouveau rôle", + "selectRolePlaceholder": "Sélectionnez un rôle", + "searchRoles": "Rechercher des rôles...", + "noRoleFound": "Aucun rôle trouvé", + "assign": "Affecter", + "roleCreatedSuccessfully": "Rôle créé avec succès", + "roleUpdatedSuccessfully": "Rôle mis à jour avec succès", + "roleDeletedSuccessfully": "Rôle supprimé avec succès", + "failedToLoadRoles": "Impossible de charger les rôles", + "failedToSaveRole": "Impossible d'enregistrer le rôle", + "failedToDeleteRole": "Impossible de supprimer le rôle", + "roleDisplayNameRequired": "Le nom d'affichage du rôle est requis", + "roleNameRequired": "Le nom du rôle est requis", + "roleNameHint": "Utilisez uniquement des minuscules, des chiffres, des tirets bas et des traits d'union", + "displayNamePlaceholder": "Développeur", + "descriptionPlaceholder": "Développeurs de logiciels et ingénieurs", + "confirmDeleteRole": "Supprimer le rôle", + "confirmDeleteRoleDescription": "Êtes-vous sûr de vouloir supprimer le rôle '{{name}}' ? Cette action ne peut pas être annulée.", + "confirmRemoveRole": "Supprimer le rôle", + "confirmRemoveRoleDescription": "Êtes-vous sûr de vouloir supprimer ce rôle de l'utilisateur ?", + "editRoleDescription": "Mettre à jour les informations du rôle", + "createRoleDescription": "Créer un nouveau rôle personnalisé pour le groupement d'utilisateurs", + "assignRolesDescription": "Gérer les affectations de rôle pour les utilisateurs", + "noRoles": "Aucun rôle trouvé", + "selectRole": "Sélectionner un rôle", + "type": "Type de texte", + "user": "Utilisateur", + "role": "Rôle", + "saveHostFirst": "Enregistrer l'hôte en premier", + "saveHostFirstDescription": "Veuillez enregistrer l'hôte avant de configurer les paramètres de partage.", + "shareWithUser": "Partager avec l'utilisateur", + "shareWithRole": "Partager avec le rôle", + "share": "Partager", "target": "Target", - "expires": "Expires", - "never": "Never", - "noAccessRecords": "No access records found", - "sharedSuccessfully": "Shared successfully", - "failedToShare": "Failed to share", - "confirmRevokeAccessDescription": "Are you sure you want to revoke this access?", - "hours": "hours", - "sharing": "Sharing", - "selectUserAndRole": "Please select both a user and a role", - "view": "View Only", - "viewDesc": "Due to the Termix encryption system, other permission levels will come at a later date" + "expires": "Expire", + "never": "Jamais", + "noAccessRecords": "Aucun accès trouvé", + "sharedSuccessfully": "Partagé avec succès", + "failedToShare": "Échec du partage", + "confirmRevokeAccessDescription": "Êtes-vous sûr de vouloir révoquer cet accès ?", + "hours": "heures", + "sharing": "Partage en cours", + "selectUserAndRole": "Veuillez sélectionner à la fois un utilisateur et un rôle", + "view": "Voir seulement", + "viewDesc": "En raison du système de cryptage Termix, d'autres niveaux d'autorisation arriveront à une date ultérieure" }, "commandPalette": { - "searchPlaceholder": "Search for hosts or quick actions...", - "recentActivity": "Recent Activity", + "searchPlaceholder": "Rechercher des hôtes ou des actions rapides...", + "recentActivity": "Activité récente", "navigation": "Navigation", - "addHost": "Add Host", - "addCredential": "Add Credential", - "adminSettings": "Admin Settings", - "userProfile": "User Profile", - "updateLog": "Update Log", - "hosts": "Hosts", - "openServerDetails": "Open Server Details", - "openFileManager": "Open File Manager", - "edit": "Edit", - "links": "Links", + "addHost": "Ajouter un hôte", + "addCredential": "Ajouter un mot de passe", + "adminSettings": "Paramètres de l'administrateur", + "userProfile": "Profil de l'utilisateur", + "updateLog": "Journal de mise à jour", + "hosts": "Hôtes", + "openServerDetails": "Détails de l'Open Server", + "openFileManager": "Ouvrir le gestionnaire de fichiers", + "edit": "Editer", + "links": "Liens", "github": "GitHub", - "support": "Support", - "discord": "Discord", - "donate": "Donate", - "press": "Press", - "toToggle": "to toggle", - "close": "Close", - "hostManager": "Host Manager", - "pressToToggle": "Press Left Shift twice to open the command palette" + "support": "Soutien", + "discord": "Discord.", + "donate": "Faire un don", + "press": "Presse", + "toToggle": "activer/désactiver", + "close": "Fermer", + "hostManager": "Responsable d'hôte", + "pressToToggle": "Appuyez deux fois sur Shift gauche pour ouvrir la palette de commandes" }, "docker": { - "notEnabled": "Docker is not enabled for this host", - "validating": "Validating Docker...", - "connectingToHost": "Connecting to host...", - "error": "Error", - "errorCode": "Error code: {{code}}", + "notEnabled": "Docker n'est pas activé pour cet hôte", + "validating": "Validation de Docker...", + "connectingToHost": "Connexion à l'hôte...", + "error": "Erreur", + "errorCode": "Code d'erreur: {{code}}", "version": "Docker {{version}}", - "containerStarted": "Container {{name}} started", - "failedToStartContainer": "Failed to start container {{name}}", - "containerStopped": "Container {{name}} stopped", - "failedToStopContainer": "Failed to stop container {{name}}", - "containerRestarted": "Container {{name}} restarted", - "failedToRestartContainer": "Failed to restart container {{name}}", - "containerPaused": "Container {{name}} paused", - "containerUnpaused": "Container {{name}} unpaused", - "failedToTogglePauseContainer": "Failed to toggle pause state for container {{name}}", - "containerRemoved": "Container {{name}} removed", - "failedToRemoveContainer": "Failed to remove container {{name}}", + "containerStarted": "Le conteneur {{name}} a commencé", + "failedToStartContainer": "Impossible de démarrer le conteneur {{name}}", + "containerStopped": "Conteneur {{name}} arrêté", + "failedToStopContainer": "Impossible d’arrêter le conteneur {{name}}", + "containerRestarted": "Le conteneur {{name}} a redémarré", + "failedToRestartContainer": "Impossible de redémarrer le conteneur {{name}}", + "containerPaused": "Conteneur {{name}} suspendu", + "containerUnpaused": "Le conteneur {{name}} a été rétabli", + "failedToTogglePauseContainer": "Impossible d'activer/désactiver l'état de pause du conteneur {{name}}", + "containerRemoved": "Conteneur {{name}} supprimé", + "failedToRemoveContainer": "Impossible de supprimer le conteneur {{name}}", "image": "Image", "idLabel": "ID", "ports": "Ports", - "noPorts": "No ports", - "created": "Created", - "start": "Start", - "stop": "Stop", - "pause": "Pause", + "noPorts": "Aucun port", + "created": "Créé", + "start": "Début", + "stop": "Arrêter", + "pause": "Mettre en pause", "unpause": "Unpause", - "restart": "Restart", - "remove": "Remove", - "removeContainer": "Remove Container", - "confirmRemoveContainer": "Are you sure you want to remove the container '{{name}}'? This action cannot be undone.", - "runningContainerWarning": "Warning: This container is currently running. Removing it will stop the container first.", - "removing": "Removing...", - "loadingContainers": "Loading containers...", - "noContainersFound": "No containers found", - "noContainersFoundHint": "No Docker containers are available on this host", - "searchPlaceholder": "Search containers...", - "filterByStatusPlaceholder": "Filter by status", - "allContainersCount": "All ({{count}})", + "restart": "Redémarrer", + "remove": "Retirer", + "removeContainer": "Supprimer le conteneur", + "confirmRemoveContainer": "Êtes-vous sûr de vouloir supprimer le conteneur '{{name}}' ? Cette action ne peut pas être annulée.", + "runningContainerWarning": "Avertissement: Ce conteneur est en cours d'exécution. Le retirer arrêtera le conteneur en premier.", + "removing": "Suppression en cours...", + "loadingContainers": "Chargement des conteneurs...", + "noContainersFound": "Aucun conteneur trouvé", + "noContainersFoundHint": "Aucun conteneur Docker n'est disponible sur cet hôte", + "searchPlaceholder": "Rechercher dans les conteneurs...", + "filterByStatusPlaceholder": "Filtrer par statut", + "allContainersCount": "Tout ({{count}})", "statusCount": "{{status}} ({{count}})", - "noContainersMatchFilters": "No containers match your filters", - "noContainersMatchFiltersHint": "Try adjusting your search or filter criteria", - "containerMustBeRunningToViewStats": "Container must be running to view statistics", - "failedToFetchStats": "Failed to fetch container statistics", - "containerNotRunning": "Container not running", - "startContainerToViewStats": "Start the container to view statistics", - "loadingStats": "Loading statistics...", - "errorLoadingStats": "Error loading statistics", - "noStatsAvailable": "No statistics available", - "cpuUsage": "CPU Usage", - "current": "Current", - "memoryUsage": "Memory Usage", - "usedLimit": "Used / Limit", - "percentage": "Percentage", - "networkIo": "Network I/O", + "noContainersMatchFilters": "Aucun conteneur ne correspond à vos filtres", + "noContainersMatchFiltersHint": "Essayez d'ajuster vos critères de recherche ou de filtre", + "containerMustBeRunningToViewStats": "Le conteneur doit être en cours d'exécution pour afficher les statistiques", + "failedToFetchStats": "Impossible de récupérer les statistiques du conteneur", + "containerNotRunning": "Conteneur non en cours d'exécution", + "startContainerToViewStats": "Lancer le conteneur pour afficher les statistiques", + "loadingStats": "Chargement des statistiques...", + "errorLoadingStats": "Erreur lors du chargement des statistiques", + "noStatsAvailable": "Aucune statistique disponible", + "cpuUsage": "Usage du CPU", + "current": "Actuel", + "memoryUsage": "Utilisation de la mémoire", + "usedLimit": "Utilisé / Limite", + "percentage": "Pourcentage", + "networkIo": "E/S réseau", "input": "Input", - "output": "Output", - "blockIo": "Block I/O", - "read": "Read", - "write": "Write", + "output": "Sortie", + "blockIo": "Bloquer E/S", + "read": "Lu", + "write": "Écrire", "pids": "PIDs", - "containerInformation": "Container Information", - "name": "Name", + "containerInformation": "Informations sur le conteneur", + "name": "Nom", "id": "ID", - "state": "State", - "disconnectedFromContainer": "Disconnected from container", - "containerMustBeRunning": "Container must be running to access console", - "authenticationRequired": "Authentication required", - "verificationCodePrompt": "Enter verification code", - "totpVerificationFailed": "TOTP verification failed. Please try again.", - "connectedTo": "Connected to {{containerName}}", - "disconnected": "Disconnected", - "consoleError": "Console error", - "errorMessage": "Error: {{message}}", - "failedToConnect": "Failed to connect to container", + "state": "État", + "disconnectedFromContainer": "Déconnecté du conteneur", + "containerMustBeRunning": "Le conteneur doit être en cours d'exécution pour accéder à la console", + "authenticationRequired": "Authentification requise", + "verificationCodePrompt": "Entrez le code de vérification", + "totpVerificationFailed": "La vérification TOTP a échoué. Veuillez réessayer.", + "connectedTo": "Connecté à {{containerName}}", + "disconnected": "Déconnecté", + "consoleError": "Erreur de la console", + "errorMessage": "Erreur: {{message}}", + "failedToConnect": "Impossible de se connecter au conteneur", "console": "Console", - "selectShell": "Select shell", - "bash": "Bash", - "sh": "sh", - "ash": "ash", - "connecting": "Connecting...", - "connect": "Connect", - "disconnect": "Disconnect", - "notConnected": "Not connected", - "clickToConnect": "Click connect to start a shell session", - "connectingTo": "Connecting to {{containerName}}...", - "containerNotFound": "Container not found", - "backToList": "Back to List", - "logs": "Logs", + "selectShell": "Sélectionner une coquille", + "bash": "Frappe", + "sh": "shu", + "ash": "cendres", + "connecting": "Connexion en cours...", + "connect": "Connecter", + "disconnect": "Déconnecter", + "notConnected": "Non connecté", + "clickToConnect": "Cliquez sur Se connecter pour démarrer une session shell", + "connectingTo": "Connexion à {{containerName}}...", + "containerNotFound": "Conteneur introuvable", + "backToList": "Retour à la liste", + "logs": "Journaux", "stats": "Stats", "consoleTab": "Console", - "startContainerToAccess": "Start the container to access the console" + "startContainerToAccess": "Démarrez le conteneur pour accéder à la console" }, "theme": { - "switchToLight": "Switch to Light", - "switchToDark": "Switch to Dark" + "switchToLight": "Basculer vers la lumière", + "switchToDark": "Basculer vers Sombre" } }