diff --git a/messages/fr-FR.json b/messages/fr-FR.json
index 2447dd93..73af61cc 100644
--- a/messages/fr-FR.json
+++ b/messages/fr-FR.json
@@ -56,6 +56,9 @@
"sitesBannerTitle": "Se connecter à n'importe quel réseau",
"sitesBannerDescription": "Un site est une connexion à un réseau distant qui permet à Pangolin de fournir aux utilisateurs l'accès à des ressources, publiques ou privées, n'importe où. Installez le connecteur de réseau du site (Newt) partout où vous pouvez exécuter un binaire ou un conteneur pour établir la connexion.",
"sitesBannerButtonText": "Installer le site",
+ "approvalsBannerTitle": "Approuver ou refuser l'accès à l'appareil",
+ "approvalsBannerDescription": "Examinez et approuvez ou refusez les demandes d'accès à l'appareil des utilisateurs. Lorsque les autorisations de l'appareil sont requises, les utilisateurs doivent obtenir l'approbation de l'administrateur avant que leurs appareils puissent se connecter aux ressources de votre organisation.",
+ "approvalsBannerButtonText": "En savoir plus",
"siteCreate": "Créer un nœud",
"siteCreateDescription2": "Suivez les étapes ci-dessous pour créer et connecter un nouveau nœud",
"siteCreateDescription": "Créer un nouveau site pour commencer à connecter des ressources",
@@ -257,6 +260,8 @@
"accessRolesSearch": "Chercher des rôles...",
"accessRolesAdd": "Ajouter un rôle",
"accessRoleDelete": "Supprimer le rôle",
+ "accessApprovalsManage": "Gérer les approbations",
+ "accessApprovalsDescription": "Voir et gérer les approbations en attente pour accéder à cette organisation",
"description": "Libellé",
"inviteTitle": "Invitations actives",
"inviteDescription": "Gérer les invitations des autres utilisateurs à rejoindre l'organisation",
@@ -450,6 +455,18 @@
"selectDuration": "Sélectionner la durée",
"selectResource": "Sélectionner une ressource",
"filterByResource": "Filtrer par ressource",
+ "selectApprovalState": "Sélectionnez l'État d'Approbation",
+ "filterByApprovalState": "Filtrer par État d'Approbation",
+ "approvalListEmpty": "Aucune approbation",
+ "approvalState": "État d'approbation",
+ "approve": "Approuver",
+ "approved": "Approuvé",
+ "denied": "Refusé",
+ "deniedApproval": "Approbation refusée",
+ "all": "Tous",
+ "deny": "Refuser",
+ "viewDetails": "Voir les détails",
+ "requestingNewDeviceApproval": "a demandé un nouvel appareil",
"resetFilters": "Réinitialiser les filtres",
"totalBlocked": "Demandes bloquées par le Pangolin",
"totalRequests": "Total des demandes",
@@ -729,16 +746,28 @@
"countries": "Pays",
"accessRoleCreate": "Créer un rôle",
"accessRoleCreateDescription": "Créer un nouveau rôle pour regrouper les utilisateurs et gérer leurs permissions.",
+ "accessRoleEdit": "Modifier le rôle",
+ "accessRoleEditDescription": "Modifier les informations du rôle.",
"accessRoleCreateSubmit": "Créer un rôle",
"accessRoleCreated": "Rôle créé",
"accessRoleCreatedDescription": "Le rôle a été créé avec succès.",
"accessRoleErrorCreate": "Échec de la création du rôle",
"accessRoleErrorCreateDescription": "Une erreur s'est produite lors de la création du rôle.",
+ "accessRoleUpdateSubmit": "Mettre à jour un rôle",
+ "accessRoleUpdated": "Rôle mis à jour",
+ "accessRoleUpdatedDescription": "Le rôle a été mis à jour avec succès.",
+ "accessApprovalUpdated": "Approbation traitée",
+ "accessApprovalApprovedDescription": "Définir la décision de la demande d'approbation à approuver.",
+ "accessApprovalDeniedDescription": "Définir la décision de la demande d'approbation comme refusée.",
+ "accessRoleErrorUpdate": "Impossible de mettre à jour le rôle",
+ "accessRoleErrorUpdateDescription": "Une erreur s'est produite lors de la mise à jour du rôle.",
+ "accessApprovalErrorUpdate": "Impossible de traiter l'approbation",
+ "accessApprovalErrorUpdateDescription": "Une erreur s'est produite lors du traitement de l'approbation.",
"accessRoleErrorNewRequired": "Un nouveau rôle est requis",
"accessRoleErrorRemove": "Échec de la suppression du rôle",
"accessRoleErrorRemoveDescription": "Une erreur s'est produite lors de la suppression du rôle.",
"accessRoleName": "Nom du rôle",
- "accessRoleQuestionRemove": "Vous êtes sur le point de supprimer le rôle {name}. Cette action est irréversible.",
+ "accessRoleQuestionRemove": "Vous êtes sur le point de supprimer le rôle `{name}`. Vous ne pouvez pas annuler cette action.",
"accessRoleRemove": "Supprimer le rôle",
"accessRoleRemoveDescription": "Retirer un rôle de l'organisation",
"accessRoleRemoveSubmit": "Supprimer le rôle",
@@ -960,7 +989,7 @@
"passwordResetSmtpRequired": "Veuillez contacter votre administrateur",
"passwordResetSmtpRequiredDescription": "Un code de réinitialisation du mot de passe est requis pour réinitialiser votre mot de passe. Veuillez contacter votre administrateur pour obtenir de l'aide.",
"passwordBack": "Retour au mot de passe",
- "loginBack": "Retour à la connexion",
+ "loginBack": "Revenir à la page de connexion principale",
"signup": "S'inscrire",
"loginStart": "Connectez-vous pour commencer",
"idpOidcTokenValidating": "Validation du jeton OIDC",
@@ -1118,6 +1147,10 @@
"actionUpdateIdpOrg": "Mettre à jour une organisation IDP",
"actionCreateClient": "Créer un client",
"actionDeleteClient": "Supprimer le client",
+ "actionArchiveClient": "Archiver le client",
+ "actionUnarchiveClient": "Désarchiver le client",
+ "actionBlockClient": "Bloquer le client",
+ "actionUnblockClient": "Débloquer le client",
"actionUpdateClient": "Mettre à jour le client",
"actionListClients": "Liste des clients",
"actionGetClient": "Obtenir le client",
@@ -1134,14 +1167,14 @@
"searchProgress": "Rechercher...",
"create": "Créer",
"orgs": "Organisations",
- "loginError": "Une erreur s'est produite lors de la connexion",
- "loginRequiredForDevice": "La connexion est requise pour authentifier votre appareil.",
+ "loginError": "Une erreur inattendue s'est produite. Veuillez réessayer.",
+ "loginRequiredForDevice": "La connexion est requise pour votre appareil.",
"passwordForgot": "Mot de passe oublié ?",
"otpAuth": "Authentification à deux facteurs",
"otpAuthDescription": "Entrez le code de votre application d'authentification ou l'un de vos codes de secours à usage unique.",
"otpAuthSubmit": "Soumettre le code",
"idpContinue": "Ou continuer avec",
- "otpAuthBack": "Retour à la connexion",
+ "otpAuthBack": "Retour au mot de passe",
"navbar": "Menu de navigation",
"navbarDescription": "Menu de navigation principal de l'application",
"navbarDocsLink": "Documentation",
@@ -1189,6 +1222,7 @@
"sidebarOverview": "Aperçu",
"sidebarHome": "Domicile",
"sidebarSites": "Nœuds",
+ "sidebarApprovals": "Demandes d'approbation",
"sidebarResources": "Ressource",
"sidebarProxyResources": "Publique",
"sidebarClientResources": "Privé",
@@ -1205,7 +1239,7 @@
"sidebarIdentityProviders": "Fournisseurs d'identité",
"sidebarLicense": "Licence",
"sidebarClients": "Clients",
- "sidebarUserDevices": "Utilisateurs",
+ "sidebarUserDevices": "Périphériques utilisateur",
"sidebarMachineClients": "Machines",
"sidebarDomains": "Domaines",
"sidebarGeneral": "Gérer",
@@ -1277,6 +1311,7 @@
"setupErrorCreateAdmin": "Une erreur s'est produite lors de la création du compte administrateur du serveur.",
"certificateStatus": "Statut du certificat",
"loading": "Chargement",
+ "loadingAnalytics": "Chargement de l'analyse",
"restart": "Redémarrer",
"domains": "Domaines",
"domainsDescription": "Créer et gérer les domaines disponibles dans l'organisation",
@@ -1304,6 +1339,7 @@
"refreshError": "Échec de l'actualisation des données",
"verified": "Vérifié",
"pending": "En attente",
+ "pendingApproval": "En attente d'approbation",
"sidebarBilling": "Facturation",
"billing": "Facturation",
"orgBillingDescription": "Gérer les informations de facturation et les abonnements",
@@ -1420,7 +1456,7 @@
"securityKeyRemoveSuccess": "Clé de sécurité supprimée avec succès",
"securityKeyRemoveError": "Échec de la suppression de la clé de sécurité",
"securityKeyLoadError": "Échec du chargement des clés de sécurité",
- "securityKeyLogin": "Continuer avec une clé de sécurité",
+ "securityKeyLogin": "Utiliser la clé de sécurité",
"securityKeyAuthError": "Échec de l'authentification avec la clé de sécurité",
"securityKeyRecommendation": "Envisagez d'enregistrer une autre clé de sécurité sur un appareil différent pour vous assurer de ne pas être bloqué de votre compte.",
"registering": "Enregistrement...",
@@ -1547,6 +1583,8 @@
"IntervalSeconds": "Intervalle sain",
"timeoutSeconds": "Délai d'attente (sec)",
"timeIsInSeconds": "Le temps est exprimé en secondes",
+ "requireDeviceApproval": "Exiger les autorisations de l'appareil",
+ "requireDeviceApprovalDescription": "Les utilisateurs ayant ce rôle ont besoin de nouveaux périphériques approuvés par un administrateur avant de pouvoir se connecter et accéder aux ressources.",
"retryAttempts": "Tentatives de réessai",
"expectedResponseCodes": "Codes de réponse attendus",
"expectedResponseCodesDescription": "Code de statut HTTP indiquant un état de santé satisfaisant. Si non renseigné, 200-300 est considéré comme satisfaisant.",
@@ -1876,7 +1914,7 @@
"orgAuthChooseIdpDescription": "Choisissez votre fournisseur d'identité pour continuer",
"orgAuthNoIdpConfigured": "Cette organisation n'a aucun fournisseur d'identité configuré. Vous pouvez vous connecter avec votre identité Pangolin à la place.",
"orgAuthSignInWithPangolin": "Se connecter avec Pangolin",
- "orgAuthSignInToOrg": "Connectez-vous à une organisation",
+ "orgAuthSignInToOrg": "Se connecter à une organisation",
"orgAuthSelectOrgTitle": "Connexion à l'organisation",
"orgAuthSelectOrgDescription": "Entrez votre identifiant d'organisation pour continuer",
"orgAuthOrgIdPlaceholder": "votre-organisation",
@@ -2232,6 +2270,8 @@
"deviceCodeInvalidFormat": "Le code doit contenir 9 caractères (par exemple, A1AJ-N5JD)",
"deviceCodeInvalidOrExpired": "Code invalide ou expiré",
"deviceCodeVerifyFailed": "Impossible de vérifier le code de l'appareil",
+ "deviceCodeValidating": "Validation du code de l'appareil...",
+ "deviceCodeVerifying": "Vérification de l'autorisation de l'appareil...",
"signedInAs": "Connecté en tant que",
"deviceCodeEnterPrompt": "Entrez le code affiché sur l'appareil",
"continue": "Continuer",
@@ -2244,7 +2284,7 @@
"deviceOrganizationsAccess": "Accès à toutes les organisations auxquelles votre compte a accès",
"deviceAuthorize": "Autoriser {applicationName}",
"deviceConnected": "Appareil connecté !",
- "deviceAuthorizedMessage": "L'appareil est autorisé à accéder à votre compte.",
+ "deviceAuthorizedMessage": "L'appareil est autorisé à accéder à votre compte. Veuillez retourner à l'application client.",
"pangolinCloud": "Nuage de Pangolin",
"viewDevices": "Voir les appareils",
"viewDevicesDescription": "Gérer vos appareils connectés",
@@ -2306,6 +2346,7 @@
"identifier": "Identifiant",
"deviceLoginUseDifferentAccount": "Pas vous ? Utilisez un autre compte.",
"deviceLoginDeviceRequestingAccessToAccount": "Un appareil demande l'accès à ce compte.",
+ "loginSelectAuthenticationMethod": "Sélectionnez une méthode d'authentification pour continuer.",
"noData": "Aucune donnée",
"machineClients": "Clients Machines",
"install": "Installer",
@@ -2394,5 +2435,92 @@
"maintenanceScreenTitle": "Service temporairement indisponible",
"maintenanceScreenMessage": "Nous rencontrons actuellement des difficultés techniques. Veuillez vérifier ultérieurement.",
"maintenanceScreenEstimatedCompletion": "Achèvement estimé :",
- "createInternalResourceDialogDestinationRequired": "La destination est requise"
+ "createInternalResourceDialogDestinationRequired": "La destination est requise",
+ "available": "Disponible",
+ "archived": "Archivé",
+ "noArchivedDevices": "Aucun périphérique archivé trouvé",
+ "deviceArchived": "Appareil archivé",
+ "deviceArchivedDescription": "L'appareil a été archivé avec succès.",
+ "errorArchivingDevice": "Erreur lors de l'archivage du périphérique",
+ "failedToArchiveDevice": "Impossible d'archiver l'appareil",
+ "deviceQuestionArchive": "Êtes-vous sûr de vouloir archiver cet appareil ?",
+ "deviceMessageArchive": "Le périphérique sera archivé et retiré de la liste des périphériques actifs.",
+ "deviceArchiveConfirm": "Dispositif d'archivage",
+ "archiveDevice": "Dispositif d'archivage",
+ "archive": "Archive",
+ "deviceUnarchived": "Appareil désarchivé",
+ "deviceUnarchivedDescription": "L'appareil a été désarchivé avec succès.",
+ "errorUnarchivingDevice": "Erreur lors de la désarchivage du périphérique",
+ "failedToUnarchiveDevice": "Échec de la désarchivage de l'appareil",
+ "unarchive": "Désarchiver",
+ "archiveClient": "Archiver le client",
+ "archiveClientQuestion": "Êtes-vous sûr de vouloir archiver ce client?",
+ "archiveClientMessage": "Le client sera archivé et retiré de votre liste de clients actifs.",
+ "archiveClientConfirm": "Archiver le client",
+ "blockClient": "Bloquer le client",
+ "blockClientQuestion": "Êtes-vous sûr de vouloir bloquer ce client?",
+ "blockClientMessage": "L'appareil sera forcé de se déconnecter si vous êtes actuellement connecté. Vous pourrez débloquer l'appareil plus tard.",
+ "blockClientConfirm": "Bloquer le client",
+ "active": "Actif",
+ "usernameOrEmail": "Nom d'utilisateur ou email",
+ "selectYourOrganization": "Sélectionnez votre organisation",
+ "signInTo": "Se connecter à",
+ "signInWithPassword": "Continuer avec le mot de passe",
+ "noAuthMethodsAvailable": "Aucune méthode d'authentification disponible pour cette organisation.",
+ "enterPassword": "Entrez votre mot de passe",
+ "enterMfaCode": "Entrez le code de votre application d'authentification",
+ "securityKeyRequired": "Veuillez utiliser votre clé de sécurité pour vous connecter.",
+ "needToUseAnotherAccount": "Besoin d'un autre compte ?",
+ "loginLegalDisclaimer": "En cliquant sur les boutons ci-dessous, vous reconnaissez avoir lu, compris et accepté les Conditions d'utilisation et la Politique de confidentialité.",
+ "termsOfService": "Conditions d'utilisation",
+ "privacyPolicy": "Politique de confidentialité",
+ "userNotFoundWithUsername": "Aucun utilisateur trouvé avec ce nom d'utilisateur.",
+ "verify": "Vérifier",
+ "signIn": "Se connecter",
+ "forgotPassword": "Mot de passe oublié ?",
+ "orgSignInTip": "Si vous vous êtes déjà connecté, vous pouvez entrer votre nom d'utilisateur ou votre e-mail ci-dessus pour vous authentifier auprès du fournisseur d'identité de votre organisation. C'est plus facile !",
+ "continueAnyway": "Continuer quand même",
+ "dontShowAgain": "Ne plus afficher",
+ "orgSignInNotice": "Le saviez-vous ?",
+ "signupOrgNotice": "Vous essayez de vous connecter ?",
+ "signupOrgTip": "Essayez-vous de vous connecter par l'intermédiaire du fournisseur d'identité de votre organisme?",
+ "signupOrgLink": "Connectez-vous ou inscrivez-vous avec votre organisation à la place",
+ "verifyEmailLogInWithDifferentAccount": "Utiliser un compte différent",
+ "logIn": "Se connecter",
+ "deviceInformation": "Informations sur l'appareil",
+ "deviceInformationDescription": "Informations sur l'appareil et l'agent",
+ "platform": "Plateforme",
+ "macosVersion": "Version macOS",
+ "windowsVersion": "Version de Windows",
+ "iosVersion": "Version iOS",
+ "androidVersion": "Version d'Android",
+ "osVersion": "Version du système d'exploitation",
+ "kernelVersion": "Version du noyau",
+ "deviceModel": "Modèle de l'appareil",
+ "serialNumber": "Numéro de série",
+ "hostname": "Hostname",
+ "firstSeen": "Première vue",
+ "lastSeen": "Dernière vue",
+ "deviceSettingsDescription": "Afficher les informations et les paramètres de l'appareil",
+ "devicePendingApprovalDescription": "Cet appareil est en attente d'approbation",
+ "deviceBlockedDescription": "Cet appareil est actuellement bloqué. Il ne pourra se connecter à aucune ressource à moins d'être débloqué.",
+ "unblockClient": "Débloquer le client",
+ "unblockClientDescription": "L'appareil a été débloqué",
+ "unarchiveClient": "Désarchiver le client",
+ "unarchiveClientDescription": "L'appareil a été désarchivé",
+ "block": "Bloquer",
+ "unblock": "Débloquer",
+ "deviceActions": "Actions de l'appareil",
+ "deviceActionsDescription": "Gérer le statut et l'accès de l'appareil",
+ "devicePendingApprovalBannerDescription": "Cet appareil est en attente d'approbation. Il ne sera pas en mesure de se connecter aux ressources jusqu'à ce qu'il soit approuvé.",
+ "connected": "Connecté",
+ "disconnected": "Déconnecté",
+ "approvalsEmptyStateTitle": "Approbations de l'appareil non activées",
+ "approvalsEmptyStateDescription": "Activer les autorisations de l'appareil pour les rôles qui nécessitent l'approbation de l'administrateur avant que les utilisateurs puissent connecter de nouveaux appareils.",
+ "approvalsEmptyStateStep1Title": "Aller aux Rôles",
+ "approvalsEmptyStateStep1Description": "Accédez aux paramètres de rôles de votre organisation pour configurer les autorisations de l'appareil.",
+ "approvalsEmptyStateStep2Title": "Activer les autorisations de l'appareil",
+ "approvalsEmptyStateStep2Description": "Modifier un rôle et activer l'option 'Exiger les autorisations de l'appareil'. Les utilisateurs avec ce rôle auront besoin de l'approbation de l'administrateur pour les nouveaux appareils.",
+ "approvalsEmptyStatePreviewDescription": "Aperçu: Lorsque cette option est activée, les demandes de périphérique en attente apparaîtront ici pour vérification",
+ "approvalsEmptyStateButtonText": "Gérer les rôles"
}