diff --git a/src/locales/fr.json b/src/locales/fr.json
new file mode 100644
index 000000000..c796445dc
--- /dev/null
+++ b/src/locales/fr.json
@@ -0,0 +1,172 @@
+{
+ "consent.action-accept": "Autoriser",
+ "consent.action-reject": "Refuser",
+ "consent.description": "N'accordez des permissions que si vous faites confiance à ce site ou à cette application. Vous n'avez pas besoin d'accepter toutes les permissions.",
+ "consent.privacy-policy-label": "Politique de confidentialité",
+ "consent.remember-label": "Mémoriser cette décision pour la prochaine fois. L'application ne pourra pas demander des permissions supplémentaires sans votre consentement.",
+ "consent.remember-tooltip": "mémoriser ma décision",
+ "consent.requested-permissions-label": "L'application demande l'accès aux permissions suivantes :",
+ "consent.terms-of-service-label": "Conditions d'utilisation",
+ "error.back-button": "Revenir en arrière",
+ "error.description": "Une erreur est survenue avec le message suivant :",
+ "error.support-email-link": "Si le problème persiste, veuillez contacter {contactSupportEmail}",
+ "error.title": "Une erreur est survenue",
+ "error.title-internal-server-error": "Erreur interne du serveur",
+ "error.title-not-found": "404 - Page non trouvée",
+ "identities.messages.1010001": "Se connecter",
+ "identities.messages.1010002": "Se connecter avec {provider}",
+ "identities.messages.1010003": "Veuillez confirmer cette action en vérifiant que c'est bien vous.",
+ "identities.messages.1010004": "Veuillez terminer le deuxième défi d'authentification.",
+ "identities.messages.1010005": "Vérifier",
+ "identities.messages.1010006": "Code d'authentification",
+ "identities.messages.1010007": "Code de récupération de secours",
+ "identities.messages.1010008": "Utiliser une clé de sécurité",
+ "identities.messages.1010009": "Utiliser un authentificateur",
+ "identities.messages.1010010": "Utiliser un code de récupération de secours",
+ "identities.messages.1010011": "Continuer avec la clé de sécurité",
+ "identities.messages.1010012": "Préparez votre appareil WebAuthn (par exemple, une clé de sécurité, un scanner biométrique, ...) et appuyez sur Continuer.",
+ "identities.messages.1010013": "Continuer",
+ "identities.messages.1010014": "Un e-mail contenant un code a été envoyé à l'adresse e-mail que vous avez fournie. Si vous n'avez pas reçu d'e-mail, vérifiez l'orthographe de l'adresse et réessayez la connexion.",
+ "identities.messages.1010015": "Se connecter avec un code",
+ "identities.messages.1040001": "S'inscrire",
+ "identities.messages.1040002": "S'inscrire avec {provider}",
+ "identities.messages.1040003": "Continuer",
+ "identities.messages.1040004": "S'inscrire avec une clé de sécurité",
+ "identities.messages.1040005": "Un e-mail contenant un code a été envoyé à l'adresse e-mail que vous avez fournie. Si vous n'avez pas reçu d'e-mail, vérifiez l'orthographe de l'adresse et réessayez l'inscription.",
+ "identities.messages.1040006": "S'inscrire avec un code",
+ "identities.messages.1050001": "Vos modifications ont été enregistrées avec succès !",
+ "identities.messages.1050002": "Lier {provider}",
+ "identities.messages.1050003": "Délier {provider}",
+ "identities.messages.1050004": "Délier l'application d'authentification TOTP",
+ "identities.messages.1050005": "Code QR de l'application d'authentification",
+ "identities.messages.1050006": "{secret}",
+ "identities.messages.1050007": "Afficher les codes de récupération de secours",
+ "identities.messages.1050008": "Générer de nouveaux codes de récupération de secours",
+ "identities.messages.1050009": "{secret}",
+ "identities.messages.1050010": "Ce sont vos codes de récupération de secours. Veuillez les conserver dans un endroit sûr !",
+ "identities.messages.1050011": "Confirmer les codes de récupération de secours",
+ "identities.messages.1050012": "Ajouter une clé de sécurité",
+ "identities.messages.1050013": "Nom de la clé de sécurité",
+ "identities.messages.1050014": "Utilisé",
+ "identities.messages.1050015": "{secrets_list}",
+ "identities.messages.1050016": "Désactiver cette méthode",
+ "identities.messages.1050017": "Il s'agit de votre code secret de l'application d'authentification. Utilisez-le si vous ne pouvez pas scanner le code QR.",
+ "identities.messages.1050018": "Supprimer la clé de sécurité \"{display_name}\"",
+ "identities.messages.1060001": "Vous avez réussi à récupérer votre compte. Veuillez changer votre mot de passe ou configurer une méthode de connexion alternative (par exemple, une connexion sociale) dans les prochaines {privileged_session_expires_at_unix_until_minutes} minutes.",
+ "identities.messages.1060002": "Un e-mail contenant un lien de récupération a été envoyé à l'adresse e-mail que vous avez fournie. Si vous n'avez pas reçu d'e-mail, vérifiez l'orthographe de l'adresse et assurez-vous d'utiliser l'adresse avec laquelle vous vous êtes enregistré.",
+ "identities.messages.1060003": "Un e-mail contenant un code de récupération a été envoyé à l'adresse e-mail que vous avez fournie. Si vous n'avez pas reçu d'e-mail, vérifiez l'orthographe de l'adresse et assurez-vous d'utiliser l'adresse avec laquelle vous vous êtes enregistré.",
+ "identities.messages.1070001": "Mot de passe",
+ "identities.messages.1070002": "{title}",
+ "identities.messages.1070003": "Enregistrer",
+ "identities.messages.1070004": "ID",
+ "identities.messages.1070005": "Soumettre",
+ "identities.messages.1070006": "Vérifier le code",
+ "identities.messages.1070007": "E-mail",
+ "identities.messages.1070008": "Renvoyer le code",
+ "identities.messages.1070009": "Continuer",
+ "identities.messages.1070010": "Code de récupération",
+ "identities.messages.1070011": "Code de vérification",
+ "identities.messages.1070012": "Code d'inscription",
+ "identities.messages.1070013": "Code de connexion",
+ "identities.messages.1080001": "Un e-mail contenant un lien de vérification a été envoyé à l'adresse e-mail que vous avez fournie. Si vous n'avez pas reçu d'e-mail, vérifiez l'orthographe de l'adresse et assurez-vous d'utiliser l'adresse avec laquelle vous vous êtes enregistré.",
+ "identities.messages.1080002": "Vous avez réussi à vérifier votre adresse e-mail.",
+ "identities.messages.1080003": "Un e-mail contenant un code de vérification a été envoyé à l'adresse e-mail que vous avez fournie. Si vous n'avez pas reçu d'e-mail, vérifiez l'orthographe de l'adresse et assurez-vous d'utiliser l'adresse avec laquelle vous vous êtes enregistré.",
+ "identities.messages.4000001": "{reason}",
+ "identities.messages.4000002": "La propriété {property} est manquante.",
+ "identities.messages.4000003": "La longueur doit être >= {min_length}, mais a été {actual_length}",
+ "identities.messages.4000004": "Ne correspond pas au motif \"{pattern}\"",
+ "identities.messages.4000005": "Le mot de passe ne peut pas être utilisé en raison de {reason}.",
+ "identities.messages.4000006": "Les informations d'identification fournies sont invalides. Veuillez vérifier les fautes d'orthographe dans votre mot de passe ou nom d'utilisateur, adresse e-mail ou numéro de téléphone.",
+ "identities.messages.4000007": "Un compte avec le même identifiant (e-mail, téléphone, nom d'utilisateur, ...) existe déjà.",
+ "identities.messages.4000008": "Le code d'authentification fourni est invalide. Veuillez réessayer.",
+ "identities.messages.4000009": "Impossible de trouver des identifiants de connexion. Avez-vous oublié de les configurer ? Cela peut également être dû à une mauvaise configuration du serveur.",
+ "identities.messages.4000010": "Le compte n'est pas encore actif. Avez-vous oublié de vérifier votre adresse e-mail ?",
+ "identities.messages.4000011": "Vous n'avez pas configuré de dispositif TOTP.",
+ "identities.messages.4000012": "Ce code de récupération de secours a déjà été utilisé.",
+ "identities.messages.4000013": "Vous n'avez pas configuré de dispositif WebAuthn.",
+ "identities.messages.4000014": "Vous n'avez pas configuré de codes de récupération de secours.",
+ "identities.messages.4000015": "Ce compte n'existe pas ou n'a pas configuré de clé de sécurité.",
+ "identities.messages.4000016": "Le code de récupération de secours n'est pas valide.",
+ "identities.messages.4000017": "La longueur doit être <= {max_length}, mais a été {actual_length}",
+ "identities.messages.4000018": "Doit être >= {minimum} mais a été {actual}",
+ "identities.messages.4000019": "Doit être > {minimum} mais a été {actual}",
+ "identities.messages.4000020": "Doit être <= {maximum} mais a été {actual}",
+ "identities.messages.4000021": "Doit être < {maximum} mais a été {actual}",
+ "identities.messages.4000022": "{actual} n'est pas multiple de {base}",
+ "identities.messages.4000023": "Un maximum de {max_items} éléments est autorisé, mais {actual_items} éléments ont été trouvés",
+ "identities.messages.4000024": "Un minimum de {min_items} éléments est autorisé, mais {actual_items} éléments ont été trouvés",
+ "identities.messages.4000025": "Les éléments aux indices {index_a} et {index_b} sont égaux",
+ "identities.messages.4000026": "Les types autorisés étaient {allowed_types_list}, mais le type actuel est {actual_type}",
+ "identities.messages.4000027": "Un compte avec le même identifiant (e-mail, téléphone, nom d'utilisateur, ...) existe déjà. Veuillez vous connecter à votre compte existant et lier votre profil social dans la page des paramètres.",
+ "identities.messages.4000028": "Vous avez essayé de vous connecter avec {credential_identifier_hint} qui est déjà utilisé par un autre compte. Vous pouvez vous connecter en utilisant {available_credential_types_list}. Vous pouvez vous connecter en utilisant l'un des fournisseurs de connexion sociale suivants : {Available_oidc_providers_list}.",
+ "identities.messages.4000029": "Doit être égal à la constante {expected}",
+ "identities.messages.4000030": "Échec de la constante",
+ "identities.messages.4000031": "Le mot de passe ne peut pas être utilisé car il est trop similaire à l'identifiant.",
+ "identities.messages.4000032": "Le mot de passe doit comporter au moins {min_length} caractères, mais en comporte {actual_length}.",
+ "identities.messages.4000033": "Le mot de passe doit comporter au plus {max_length} caractères, mais en comporte {actual_length}.",
+ "identities.messages.4000034": "Le mot de passe a été trouvé dans des violations de données et ne doit plus être utilisé.",
+ "identities.messages.4000035": "Ce compte n'existe pas ou n'a pas configuré de connexion avec code.",
+ "identities.messages.4000036": "Les traits fournis ne correspondent pas aux traits associés précédemment à ce flux.",
+ "identities.messages.4010001": "Le flux de connexion a expiré il y a {expired_at_unix_since_minutes} minutes, veuillez réessayer.",
+ "identities.messages.4010002": "Impossible de trouver une stratégie pour vous connecter. Avez-vous rempli correctement le formulaire ?",
+ "identities.messages.4010003": "Impossible de trouver une stratégie pour vous inscrire. Avez-vous rempli correctement le formulaire ?",
+ "identities.messages.4010004": "Impossible de trouver une stratégie pour mettre à jour vos paramètres. Avez-vous rempli correctement le formulaire ?",
+ "identities.messages.4010005": "Impossible de trouver une stratégie pour récupérer votre compte. Avez-vous rempli correctement le formulaire ?",
+ "identities.messages.4010006": "Impossible de trouver une stratégie pour vérifier votre compte. Avez-vous rempli correctement le formulaire ?",
+ "identities.messages.4010007": "La demande a déjà été effectuée avec succès et ne peut pas être réessayée.",
+ "identities.messages.4010008": "Le code de connexion est invalide ou a déjà été utilisé. Veuillez réessayer.",
+ "identities.messages.4040001": "Le flux d'inscription a expiré il y a {expired_at_unix_since_minutes} minutes, veuillez réessayer.",
+ "identities.messages.4040002": "La demande a déjà été effectuée avec succès et ne peut pas être réessayée.",
+ "identities.messages.4040003": "Le code d'inscription est invalide ou a déjà été utilisé. Veuillez réessayer.",
+ "identities.messages.4050001": "Le flux de paramètres a expiré il y a {expired_at_unix_since_minutes} minutes, veuillez réessayer.",
+ "identities.messages.4060001": "La demande a déjà été effectuée avec succès et ne peut pas être réessayée.",
+ "identities.messages.4060002": "Le flux de récupération a atteint un état d'échec et doit être réessayé.",
+ "identities.messages.4060004": "Le jeton de récupération est invalide ou a déjà été utilisé. Veuillez réessayer le flux.",
+ "identities.messages.4060005": "Le flux de récupération a expiré il y a {expired_at_unix_since_minutes} minutes, veuillez réessayer.",
+ "identities.messages.4060006": "Le code de récupération est invalide ou a déjà été utilisé. Veuillez réessayer.",
+ "identities.messages.4070001": "Le jeton de vérification est invalide ou a déjà été utilisé. Veuillez réessayer le flux.",
+ "identities.messages.4070002": "La demande a déjà été effectuée avec succès et ne peut pas être réessayée.",
+ "identities.messages.4070003": "Le flux de vérification a atteint un état d'échec et doit être réessayé.",
+ "identities.messages.4070005": "Le flux de vérification a expiré il y a {expired_at_unix_since_minutes} minutes, veuillez réessayer.",
+ "identities.messages.4070006": "Le code de vérification est invalide ou a déjà été utilisé. Veuillez réessayer.",
+ "identities.messages.5000001": "{reason}",
+ "login.forgot-password": "Mot de passe oublié ?",
+ "login.logged-in-as-label": "Vous êtes connecté en tant que :",
+ "login.logout-button": "Déconnexion",
+ "login.logout-label": "Quelque chose ne fonctionne pas ?",
+ "login.registration-button": "S'inscrire",
+ "login.registration-label": "Vous n'avez pas de compte ?",
+ "login.subtitle-oauth2": "Pour vous authentifier sur {clientName}",
+ "login.title": "Se connecter",
+ "login.title-aal2": "Authentification à deux facteurs",
+ "login.title-refresh": "Confirmez que c'est bien vous",
+ "logout.accept-button": "Oui",
+ "logout.reject-button": "Non",
+ "logout.title": "Souhaitez-vous vous déconnecter ?",
+ "recovery.login-button": "Se connecter",
+ "recovery.login-label": "Vous souvenez-vous de vos informations d'identification ?",
+ "recovery.title": "Récupérer votre compte",
+ "registration.login-button": "Se connecter",
+ "registration.login-label": "Vous avez déjà un compte ?",
+ "registration.subtitle-oauth2": "Pour vous authentifier sur {clientName}",
+ "registration.title": "Créer un compte",
+ "settings.navigation-backup-codes": "Codes de secours 2FA",
+ "settings.navigation-logout": "Déconnexion",
+ "settings.navigation-oidc": "Connexion sociale",
+ "settings.navigation-password": "Mot de passe",
+ "settings.navigation-profile": "Profil",
+ "settings.navigation-totp": "Application d'authentification TOTP",
+ "settings.navigation-webauthn": "Tokens matériels",
+ "settings.subtitle-instructions": "Ici, vous pouvez gérer les paramètres liés à votre compte. Gardez à l'esprit que certaines actions nécessitent une nouvelle authentification.",
+ "settings.title": "Paramètres du compte",
+ "settings.title-lookup-secret": "Gérer les codes de récupération 2FA",
+ "settings.title-navigation": "Paramètres du compte",
+ "settings.title-oidc": "Connexion sociale",
+ "settings.title-password": "Changer le mot de passe",
+ "settings.title-profile": "Paramètres de profil",
+ "settings.title-totp": "Gérer l'application d'authentification TOTP 2FA",
+ "settings.title-webauthn": "Gérer les tokens matériels",
+ "verification.registration-button": "S'inscrire",
+ "verification.registration-label": "Vous n'avez pas de compte ?",
+ "verification.title": "Vérifiez votre compte"
+}