about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--app/javascript/mastodon/locales/fr.json46
-rw-r--r--app/views/user_mailer/confirmation_instructions.fr.html.erb4
-rw-r--r--app/views/user_mailer/confirmation_instructions.fr.text.erb6
-rw-r--r--app/views/user_mailer/reset_password_instructions.fr.html.erb6
-rw-r--r--app/views/user_mailer/reset_password_instructions.fr.text.erb6
-rw-r--r--config/locales/activerecord.fr.yml12
-rw-r--r--config/locales/devise.fr.yml16
-rw-r--r--config/locales/doorkeeper.fr.yml54
-rw-r--r--config/locales/fr.yml130
-rw-r--r--config/locales/simple_form.fr.yml24
10 files changed, 163 insertions, 141 deletions
diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json
index fd2b30444..cb7e1b5a7 100644
--- a/app/javascript/mastodon/locales/fr.json
+++ b/app/javascript/mastodon/locales/fr.json
@@ -31,10 +31,10 @@
   "column_header.unpin": "Retirer",
   "column_subheading.navigation": "Navigation",
   "column_subheading.settings": "Paramètres",
-  "compose_form.lock_disclaimer": "Votre compte n'est pas {locked}. Tout le monde peut vous suivre et voir vos pouets restreints.",
+  "compose_form.lock_disclaimer": "Votre compte n’est pas {locked}. Tout le monde peut vous suivre et voir vos pouets restreints.",
   "compose_form.lock_disclaimer.lock": "verrouillé",
-  "compose_form.placeholder": "Qu’avez-vous en tête ?",
-  "compose_form.privacy_disclaimer": "Votre statut privé va être transmis aux personnes mentionnées sur {domains}. Avez-vous confiance en {domainsCount, plural, one {ce serveur} other {ces serveurs}} pour ne pas divulguer votre statut ? Les statuts privés ne fonctionnent que sur les instances de Mastodon. Si {domains} {domainsCount, plural, one {n’est pas une instance de Mastodon} other {ne sont pas des instances de Mastodon}}, il n’y aura aucune indication que votre statut est privé, et il pourrait être partagé ou rendu visible d’une autre manière à d’autres personnes imprévues.",
+  "compose_form.placeholder": "Qu’avez-vous en tête ?",
+  "compose_form.privacy_disclaimer": "Votre statut privé va être transmis aux personnes mentionnées sur {domains}. Avez-vous confiance en {domainsCount, plural, one {ce serveur} other {ces serveurs}} pour ne pas divulguer votre statut ? Les statuts privés ne fonctionnent que sur les instances de Mastodon. Si {domains} {domainsCount, plural, one {n’est pas une instance de Mastodon} other {ne sont pas des instances de Mastodon}}, il n’y aura aucune indication que votre statut est privé, et il pourrait être partagé ou rendu visible d’une autre manière à d’autres personnes imprévues.",
   "compose_form.publish": "Pouet ",
   "compose_form.publish_loud": "{publish}!",
   "compose_form.sensitive": "Marquer le média comme délicat",
@@ -42,13 +42,13 @@
   "compose_form.spoiler_placeholder": "Avertissement",
   "confirmation_modal.cancel": "Annuler",
   "confirmations.block.confirm": "Bloquer",
-  "confirmations.block.message": "Confirmez vous le blocage de {name} ?",
+  "confirmations.block.message": "Confirmez vous le blocage de {name} ?",
   "confirmations.delete.confirm": "Supprimer",
-  "confirmations.delete.message": "Confirmez vous la suppression de ce pouet ?",
+  "confirmations.delete.message": "Confirmez vous la suppression de ce pouet ?",
   "confirmations.domain_block.confirm": "Masquer le domaine entier",
-  "confirmations.domain_block.message": "Êtes-vous vraiment, vraiment sûr⋅e de vouloir bloquer {domain} en entier ? Dans la plupart des cas, quelques blocages ou silenciations ciblés sont suffisants et préférables.",
+  "confirmations.domain_block.message": "Êtes-vous vraiment, vraiment sûr⋅e de vouloir bloquer {domain} en entier ? Dans la plupart des cas, quelques blocages ou silenciations ciblés sont suffisants et préférables.",
   "confirmations.mute.confirm": "Silencer",
-  "confirmations.mute.message": "Confirmez vous la silenciation {name} ?",
+  "confirmations.mute.message": "Confirmez vous la silenciation {name} ?",
   "emoji_button.activity": "Activités",
   "emoji_button.flags": "Drapeaux",
   "emoji_button.food": "Boire et manger",
@@ -59,20 +59,20 @@
   "emoji_button.search": "Recherche…",
   "emoji_button.symbols": "Symboles",
   "emoji_button.travel": "Lieux et voyages",
-  "empty_column.community": "Le fil public local est vide. Écrivez-donc quelque chose pour le remplir !",
+  "empty_column.community": "Le fil public local est vide. Écrivez-donc quelque chose pour le remplir !",
   "empty_column.hashtag": "Il n’y a encore aucun contenu relatif à ce hashtag",
   "empty_column.home": "Vous ne suivez encore personne. Visitez {public} ou bien utilisez la recherche pour vous connecter à d’autres utilisateur⋅ice⋅s.",
   "empty_column.home.inactivity": "Votre accueil est vide. Si vous ne vous êtes pas connecté⋅e depuis un moment, il se remplira automatiquement très bientôt.",
   "empty_column.home.public_timeline": "le fil public",
   "empty_column.notifications": "Vous n’avez pas encore de notification. Interagissez avec d’autres utilisateur⋅ice⋅s pour débuter la conversation.",
-  "empty_column.public": "Il n’y a rien ici ! Écrivez quelque chose publiquement, ou bien suivez manuellement des utilisateur⋅ice⋅s d’autres instances pour remplir le fil public.",
+  "empty_column.public": "Il n’y a rien ici ! Écrivez quelque chose publiquement, ou bien suivez manuellement des utilisateur⋅ice⋅s d’autres instances pour remplir le fil public.",
   "follow_request.authorize": "Autoriser",
   "follow_request.reject": "Rejeter",
   "getting_started.appsshort": "Applications",
   "getting_started.faq": "FAQ",
   "getting_started.heading": "Pour commencer",
   "getting_started.open_source_notice": "Mastodon est un logiciel libre. Vous pouvez contribuer et envoyer vos commentaires et rapports de bogues via {github} sur GitHub.",
-  "getting_started.userguide": "Guide d'utilisation",
+  "getting_started.userguide": "Guide d’utilisation",
   "home.column_settings.advanced": "Avancé",
   "home.column_settings.basic": "Basique",
   "home.column_settings.filter_regex": "Filtrer avec une expression rationnelle",
@@ -93,17 +93,17 @@
   "navigation_bar.mutes": "Comptes silencés",
   "navigation_bar.preferences": "Préférences",
   "navigation_bar.public_timeline": "Fil public global",
-  "notification.favourite": "{name} a ajouté à ses favoris :",
+  "notification.favourite": "{name} a ajouté à ses favoris :",
   "notification.follow": "{name} vous suit.",
-  "notification.mention": "{name} vous a mentionné⋅e :",
-  "notification.reblog": "{name} a partagé votre statut :",
+  "notification.mention": "{name} vous a mentionné⋅e :",
+  "notification.reblog": "{name} a partagé votre statut :",
   "notifications.clear": "Nettoyer",
-  "notifications.clear_confirmation": "Voulez-vous vraiment supprimer toutes vos notifications ?",
+  "notifications.clear_confirmation": "Voulez-vous vraiment supprimer toutes vos notifications ?",
   "notifications.column_settings.alert": "Notifications locales",
-  "notifications.column_settings.favourite": "Favoris :",
-  "notifications.column_settings.follow": "Nouveaux⋅elles abonn⋅é⋅s :",
-  "notifications.column_settings.mention": "Mentions :",
-  "notifications.column_settings.reblog": "Partages :",
+  "notifications.column_settings.favourite": "Favoris :",
+  "notifications.column_settings.follow": "Nouveaux⋅elles abonn⋅é⋅s :",
+  "notifications.column_settings.mention": "Mentions :",
+  "notifications.column_settings.reblog": "Partages :",
   "notifications.column_settings.show": "Afficher dans la colonne",
   "notifications.column_settings.sound": "Émettre un son",
   "onboarding.done": "Effectué",
@@ -112,18 +112,18 @@
   "onboarding.page_four.home": "L’Accueil affiche les posts de tou⋅te⋅s les utilisateur⋅ice⋅s que vous suivez",
   "onboarding.page_four.notifications": "Les Notifications vous informent lorsque quelqu’un interagit avec vous",
   "onboarding.page_one.federation": "Mastodon est un réseau social qui appartient à tou⋅te⋅s.",
-  "onboarding.page_one.handle": "Vous êtes sur {domain}, une des nombreuses instances indépendantes de Mastodon. Votre nom d'utilisateur⋅ice complet est {handle}",
-  "onboarding.page_one.welcome": "Bienvenue sur Mastodon !",
+  "onboarding.page_one.handle": "Vous êtes sur {domain}, une des nombreuses instances indépendantes de Mastodon. Votre nom d’utilisateur⋅ice complet est {handle}",
+  "onboarding.page_one.welcome": "Bienvenue sur Mastodon !",
   "onboarding.page_six.admin": "L’administrateur⋅trice de votre instance est {admin}",
   "onboarding.page_six.almost_done": "Nous y sommes presque…",
   "onboarding.page_six.appetoot": "Bon Appetoot!",
   "onboarding.page_six.apps_available": "De nombreuses {apps} sont disponibles pour iOS, Android et autres. Et maintenant… Bon Appetoot!",
   "onboarding.page_six.github": "Mastodon est un logiciel libre, gratuit et open-source. Vous pouvez rapporter des bogues, suggérer des fonctionnalités, ou contribuer à son développement sur {github}.",
   "onboarding.page_six.guidelines": "règles de la communauté",
-  "onboarding.page_six.read_guidelines": "S’il vous plaît, n’oubliez pas de lire les {guidelines} !",
+  "onboarding.page_six.read_guidelines": "S’il vous plaît, n’oubliez pas de lire les {guidelines} !",
   "onboarding.page_six.various_app": "applications mobiles",
   "onboarding.page_three.profile": "Modifiez votre profil pour changer votre avatar, votre description ainsi que votre nom. Vous y trouverez également d’autres préférences.",
-  "onboarding.page_three.search": "Utilisez la barre de recherche pour trouver des utilisateur⋅ice⋅s et regarder des hashtags tels que {illustration} et {introductions}. Pour trouver quelqu’un qui n’est pas sur cette instance, utilisez son nom d'utilisateur⋅ice complet.",
+  "onboarding.page_three.search": "Utilisez la barre de recherche pour trouver des utilisateur⋅ice⋅s et regarder des hashtags tels que {illustration} et {introductions}. Pour trouver quelqu’un qui n’est pas sur cette instance, utilisez son nom d’utilisateur⋅ice complet.",
   "onboarding.page_two.compose": "Écrivez depuis la colonne de composition. Vous pouvez ajouter des images, changer les réglages de confidentialité, et ajouter des avertissements de contenu (Content Warning) grâce aux icônes en dessous.",
   "onboarding.skip": "Passer",
   "privacy.change": "Ajuster la confidentialité du message",
@@ -151,7 +151,7 @@
   "status.mute_conversation": "Masquer la conversation",
   "status.open": "Déplier ce statut",
   "status.reblog": "Partager",
-  "status.reblogged_by": "{name} a partagé :",
+  "status.reblogged_by": "{name} a partagé :",
   "status.reply": "Répondre",
   "status.replyAll": "Répondre au fil",
   "status.report": "Signaler @{name}",
diff --git a/app/views/user_mailer/confirmation_instructions.fr.html.erb b/app/views/user_mailer/confirmation_instructions.fr.html.erb
index b0b3d0f51..fe3f0a010 100644
--- a/app/views/user_mailer/confirmation_instructions.fr.html.erb
+++ b/app/views/user_mailer/confirmation_instructions.fr.html.erb
@@ -5,10 +5,10 @@
 <p>Pour confirmer votre inscription, merci de cliquer sur le lien suivant : <br>
 <%= link_to 'Confirmer mon compte', confirmation_url(@resource, confirmation_token: @token) %></p>
 
-<p>Après votre première connexion, vous pourrez accéder à la documentation de l'outil.</p>
+<p>Après votre première connexion, vous pourrez accéder à la documentation de l’outil.</p>
 
 <p>Pensez également à jeter un œil à nos <%= link_to 'conditions d\'utilisation', terms_url %>.</p>
 
 <p>Amicalement,</p>
 
-<p>L'équipe <%= @instance %></p>
\ No newline at end of file
+<p>L’équipe <%= @instance %></p>
diff --git a/app/views/user_mailer/confirmation_instructions.fr.text.erb b/app/views/user_mailer/confirmation_instructions.fr.text.erb
index cf8e39689..7730715f8 100644
--- a/app/views/user_mailer/confirmation_instructions.fr.text.erb
+++ b/app/views/user_mailer/confirmation_instructions.fr.text.erb
@@ -5,10 +5,10 @@ Vous venez de vous créer un compte sur <%= @instance %> et nous vous en remerci
 Pour confirmer votre inscription, merci de cliquer sur le lien suivant :
 <%= confirmation_url(@resource, confirmation_token: @token) %>
 
-Après votre première connexion, vous pourrez accéder à la documentation de l'outil.
+Après votre première connexion, vous pourrez accéder à la documentation de l’outil.
 
-Pour rappel, nos conditions d'utilisation sont indiquées ici <%= terms_url %>
+Pour rappel, nos conditions d’utilisation sont indiquées ici <%= terms_url %>
 
 Amicalement,
 
-L'équipe <%= @instance %>
\ No newline at end of file
+L’équipe <%= @instance %>
diff --git a/app/views/user_mailer/reset_password_instructions.fr.html.erb b/app/views/user_mailer/reset_password_instructions.fr.html.erb
index 95789e387..db55c5884 100644
--- a/app/views/user_mailer/reset_password_instructions.fr.html.erb
+++ b/app/views/user_mailer/reset_password_instructions.fr.html.erb
@@ -1,8 +1,8 @@
 <p>Bonjour <%= @resource.email %>&nbsp;!</p>
 
-<p>Quelqu'un a demandé à réinitialiser votre mot de passe sur Mastodon. Vous pouvez effectuer la réinitialisation en cliquant sur le lien ci-dessous.</p>
+<p>Quelqu’un a demandé à réinitialiser votre mot de passe sur Mastodon. Vous pouvez effectuer la réinitialisation en cliquant sur le lien ci-dessous.</p>
 
 <p><%= link_to 'Modifier mon mot de passe', edit_password_url(@resource, reset_password_token: @token) %></p>
 
-<p>Si vous n'êtes pas à l'origine de cette demande, vous pouvez ignorer ce message.</p>
-<p>Votre mot de passe ne sera pas modifié tant que vous n'accéderez pas au lien ci-dessus et n'en choisirez pas un nouveau.</p>
+<p>Si vous n’êtes pas à l’origine de cette demande, vous pouvez ignorer ce message.</p>
+<p>Votre mot de passe ne sera pas modifié tant que vous n’accéderez pas au lien ci-dessus et n’en choisirez pas un nouveau.</p>
diff --git a/app/views/user_mailer/reset_password_instructions.fr.text.erb b/app/views/user_mailer/reset_password_instructions.fr.text.erb
index 73160cb4c..07fa3644a 100644
--- a/app/views/user_mailer/reset_password_instructions.fr.text.erb
+++ b/app/views/user_mailer/reset_password_instructions.fr.text.erb
@@ -1,8 +1,8 @@
 Bonjour <%= @resource.email %> !
 
-Quelqu'un a demandé à réinitialiser votre mot de passe sur Mastodon. Vous pouvez effectuer la réinitialisation en cliquant sur le lien ci-dessous.
+Quelqu’un a demandé à réinitialiser votre mot de passe sur Mastodon. Vous pouvez effectuer la réinitialisation en cliquant sur le lien ci-dessous.
 
 <%= edit_password_url(@resource, reset_password_token: @token) %>
 
-Si vous n'êtes pas à l'origine de cette demande, vous pouvez ignorer ce message.
-Votre mot de passe ne sera pas modifié tant que vous n'accéderez pas au lien ci-dessus et n'en choisirez pas un nouveau.
+Si vous n’êtes pas à l’origine de cette demande, vous pouvez ignorer ce message.
+Votre mot de passe ne sera pas modifié tant que vous n’accéderez pas au lien ci-dessus et n’en choisirez pas un nouveau.
diff --git a/config/locales/activerecord.fr.yml b/config/locales/activerecord.fr.yml
new file mode 100644
index 000000000..858777c0e
--- /dev/null
+++ b/config/locales/activerecord.fr.yml
@@ -0,0 +1,12 @@
+fr:
+  activerecord:
+    errors:
+      models:
+        account:
+          attributes:
+            username:
+              invalid: seulement des lettres, des nombres et des tirets bas
+        status:
+          attributes:
+            reblog:
+              taken: du statut existe déjà
diff --git a/config/locales/devise.fr.yml b/config/locales/devise.fr.yml
index c4dbc62e0..6805e4f38 100644
--- a/config/locales/devise.fr.yml
+++ b/config/locales/devise.fr.yml
@@ -3,8 +3,8 @@ fr:
   devise:
     confirmations:
       confirmed: Votre compte a été validé.
-      send_instructions: Vous allez recevoir les instructions nécessaires à la confirmation de votre compte dans quelques minutes.
-      send_paranoid_instructions: Si votre adresse e-mail existe dans notre base de données, vous allez bientôt recevoir un courriel contenant les instructions de confirmation de votre compte.
+      send_instructions: Vous allez recevoir les instructions nécessaires à la confirmation de votre compte dans quelques minutes. S’il vous plaît, dans le cas où vous ne recevriez pas ce message, vérifiez votre dossier d’indésirables.
+      send_paranoid_instructions: Si votre adresse électronique existe dans notre base de données, vous allez bientôt recevoir un courriel contenant les instructions de confirmation de votre compte. S’il vous plaît, dans le cas où vous ne recevriez pas ce message, vérifiez votre dossier d’indésirables.
     failure:
       already_authenticated: Vous êtes déjà connecté⋅e
       inactive: Votre compte n’est pas encore activé.
@@ -25,12 +25,12 @@ fr:
       unlock_instructions:
         subject: Instructions pour déverrouiller votre compte
     omniauth_callbacks:
-      failure: 'Nous n’avons pas pu vous authentifier via %{kind} : ''%{reason}''.'
+      failure: 'Nous n’avons pas pu vous authentifier via %{kind} : ''%{reason}''.'
       success: Authentifié avec succès via %{kind}.
     passwords:
-      no_token: Vous ne pouvez accéder à cette page sans passer par un courriel de réinitialisation de mot de passe. Si vous êtes passé⋅e par un courriel de ce type, assurez-vous d'utiliser l'URL complète.
-      send_instructions: Vous allez recevoir les instructions de réinitialisation du mot de passe dans quelques instants
-      send_paranoid_instructions: Si votre addresse e-mail existe dans notre base de données, vous allez recevoir un lien de réinitialisation par courriel
+      no_token: Vous ne pouvez accéder à cette page sans passer par un courriel de réinitialisation de mot de passe. Si vous êtes passé⋅e par un courriel de ce type, assurez-vous d’utiliser l’URL complète.
+      send_instructions: Vous allez recevoir les instructions de réinitialisation du mot de passe dans quelques instants. S’il vous plaît, dans le cas où vous ne recevriez pas ce message, vérifiez votre dossier d’indésirables.
+      send_paranoid_instructions: Si votre addresse électronique existe dans notre base de données, vous allez recevoir un lien de réinitialisation par courriel. S’il vous plaît, dans le cas où vous ne recevriez pas ce message, vérifiez votre dossier d’indésirables.
       updated: Votre mot de passe a été modifié avec succès, vous êtes maintenant connecté⋅e
       updated_not_active: Votre mot de passe a été modifié avec succès.
     registrations:
@@ -46,8 +46,8 @@ fr:
       signed_in: Connecté.
       signed_out: Déconnecté.
     unlocks:
-      send_instructions: Vous allez recevoir les instructions nécessaires au déverrouillage de votre compte dans quelques instants
-      send_paranoid_instructions: Si votre compte existe, vous allez bientôt recevoir un courriel contenant les instructions pour le déverrouiller.
+      send_instructions: Vous allez recevoir les instructions nécessaires au déverrouillage de votre compte dans quelques instants. S’il vous plaît, dans le cas où vous ne recevriez pas ce message, vérifiez votre dossier d’indésirables.
+      send_paranoid_instructions: Si votre compte existe, vous allez bientôt recevoir un courriel contenant les instructions pour le déverrouiller. S’il vous plaît, dans le cas où vous ne recevriez pas ce message, vérifiez votre dossier d’indésirables.
       unlocked: Votre compte a été déverrouillé avec succès, vous êtes maintenant connecté⋅e.
   errors:
     messages:
diff --git a/config/locales/doorkeeper.fr.yml b/config/locales/doorkeeper.fr.yml
index 24538bc48..0e74532c1 100644
--- a/config/locales/doorkeeper.fr.yml
+++ b/config/locales/doorkeeper.fr.yml
@@ -6,12 +6,12 @@ fr:
         remote_follow:
           attributes:
             acct:
-              blank: Le nom d'utilisateur ne doit pas être vide
+              blank: Le nom d’utilisateur ne doit pas être vide
   activerecord:
     attributes:
       doorkeeper/application:
         name: Nom
-        redirect_uri: L'URL de redirection
+        redirect_uri: L’URL de redirection
     errors:
       messages:
         record_invalid: Données invalides
@@ -50,17 +50,17 @@ fr:
         edit: Modifier
         submit: Envoyer
       confirmations:
-        destroy: Êtes-vous certain ?
+        destroy: Êtes-vous certain·e ?
       edit:
-        title: Modifier l'application
+        title: Modifier l’application
       form:
-        error: Oups ! Vérifier votre formulaire pour des erreurs possibles
+        error: Oups ! Vérifier votre formulaire pour des erreurs possibles
       help:
         native_redirect_uri: Utiliser %{native_redirect_uri} pour les tests locaux
         redirect_uri: Utiliser une ligne par URL
         scopes: Séparer les portées avec des espaces. Laisser vide pour utiliser les portées par défaut.
       index:
-        callback_url: URL de retour d'appel
+        callback_url: URL de retour d’appel
         name: Nom
         new: Nouvelle application
         title: Vos applications
@@ -68,11 +68,11 @@ fr:
         title: Nouvelle application
       show:
         actions: Actions
-        application_id: ID de l'application
-        callback_urls: URL du retour d'appel
+        application_id: ID de l’application
+        callback_urls: URL du retour d’appel
         scopes: Portées
         secret: Secret
-        title: 'Application : %{name}'
+        title: 'Application : %{name}'
     authorizations:
       buttons:
         authorize: Autoriser
@@ -81,15 +81,15 @@ fr:
         title: Une erreur est survenue
       new:
         able_to: Cette application pourra
-        prompt: Autoriser %{client_name} à utiliser votre compte ?
+        prompt: Autoriser %{client_name} à utiliser votre compte ?
         title: Autorisation requise
       show:
-        title: Code d'autorisation
+        title: Code d’autorisation
     authorized_applications:
       buttons:
         revoke: Annuler
       confirmations:
-        revoke: Êtes-vous certain ?
+        revoke: Êtes-vous certain·e ?
       index:
         application: Application
         created_at: Créé le
@@ -98,24 +98,24 @@ fr:
         title: Vos applications autorisées
     errors:
       messages:
-        access_denied: Le propriétaire de la ressource ou le serveur d'autorisation a refusé la requête.
-        credential_flow_not_configured: Le flux des identifiants du mot de passe du propriétaire de la ressource a échoué car Doorkeeper.configure.resource_owner_from_credentials n'est pas configuré.
-        invalid_client: L'authentification du client a échoué à cause d'un client inconnu, d'aucune authentification de client incluse ou d'une méthode d'authentification non prise en charge.
-        invalid_grant: Le consentement d'autorisation accordé n'est pas valide, a expiré, est annulé, ne concorde pas avec l'URL de redirection utilisée dans la requête d'autorisation ou a été émis à un autre client.
-        invalid_redirect_uri: L'URL de redirection n'est pas valide.
+        access_denied: Le propriétaire de la ressource ou le serveur d’autorisation a refusé la requête.
+        credential_flow_not_configured: Le flux des identifiants du mot de passe du propriétaire de la ressource a échoué car Doorkeeper.configure.resource_owner_from_credentials n’est pas configuré.
+        invalid_client: L’authentification du client a échoué à cause d’un client inconnu, d’aucune authentification de client incluse ou d’une méthode d’authentification non prise en charge.
+        invalid_grant: Le consentement d’autorisation accordé n’est pas valide, a expiré, est annulé, ne concorde pas avec l’URL de redirection utilisée dans la requête d’autorisation ou a été émis à un autre client.
+        invalid_redirect_uri: L’URL de redirection n’est pas valide.
         invalid_request: La requête omet un paramètre requis, inclut une valeur de paramètre non prise en charge ou est autrement mal formée.
         invalid_resource_owner: Les identifiants fournis par le propriétaire de la ressource ne sont pas valides ou le propriétaire de la ressource ne peut être trouvé
-        invalid_scope: La portée demandée n'est pas valide, est inconnue ou mal formée.
+        invalid_scope: La portée demandée n’est pas valide, est inconnue ou mal formée.
         invalid_token:
-          expired: Le jeton d'accès a expiré
-          revoked: Le jeton d'accès a été révoqué
-          unknown: Le jeton d'accès n'est pas valide
-        resource_owner_authenticator_not_configured: La recherche du propriétaire de la ressource a échoué car Doorkeeper.configure.resource_owner_authenticator n'est pas configuré.
-        server_error: Le serveur d'autorisation a rencontré une condition inattendue l'empêchant de faire aboutir la requête.
-        temporarily_unavailable: Le serveur d'autorisation est actuellement incapable de traiter la requête à cause d'une surcharge ou d'une maintenance temporaire du serveur.
-        unauthorized_client: Le client n'est pas autorisé à effectuer cette requête à l'aide de cette méthode.
-        unsupported_grant_type: Le type de consentement d'autorisation n'est pas pris en charge par le serveur d'autorisation.
-        unsupported_response_type: Le serveur d'autorisation ne prend pas en charge ce type de réponse.
+          expired: Le jeton d’accès a expiré
+          revoked: Le jeton d’accès a été révoqué
+          unknown: Le jeton d’accès n’est pas valide
+        resource_owner_authenticator_not_configured: La recherche du propriétaire de la ressource a échoué car Doorkeeper.configure.resource_owner_authenticator n’est pas configuré.
+        server_error: Le serveur d’autorisation a rencontré une condition inattendue l’empêchant de faire aboutir la requête.
+        temporarily_unavailable: Le serveur d’autorisation est actuellement incapable de traiter la requête à cause d’une surcharge ou d’une maintenance temporaire du serveur.
+        unauthorized_client: Le client n’est pas autorisé à effectuer cette requête à l’aide de cette méthode.
+        unsupported_grant_type: Le type de consentement d’autorisation n’est pas pris en charge par le serveur d’autorisation.
+        unsupported_response_type: Le serveur d’autorisation ne prend pas en charge ce type de réponse.
     flash:
       applications:
         create:
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index 5a3e0c552..fcf5f6f9e 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -7,7 +7,7 @@ fr:
     business_email: Courriel professionnel
     closed_registrations: Les inscriptions sont actuellement fermées sur cette instance.
     contact: Contact
-    description_headline: Qu'est-ce que %{domain} ?
+    description_headline: Qu’est-ce que %{domain} ?
     domain_count_after: autres instances
     domain_count_before: Connectés à
     features:
@@ -34,12 +34,12 @@ fr:
     follow: Suivre
     followers: Abonné⋅es
     following: Abonnements
-    nothing_here: Rien à voir ici !
+    nothing_here: Rien à voir ici !
     people_followed_by: Personnes suivies par %{name}
     people_who_follow: Personnes qui suivent %{name}
     posts: Statuts
     remote_follow: Suivre à distance
-    reserved_username: Ce nom d'utilisateur⋅ice est réservé
+    reserved_username: Ce nom d’utilisateur⋅ice est réservé
     unfollow: Ne plus suivre
   activitypub:
     activity:
@@ -48,14 +48,14 @@ fr:
       create:
         name: "%{account_name} a créé une note."
     outbox:
-      name: "Boîte d'envoi de %{account_name}"
-      summary: Liste d'activités de %{account_name}
+      name: "Boîte d’envoi de %{account_name}"
+      summary: Liste d’activités de %{account_name}
   admin:
     accounts:
-      are_you_sure: Êtes-vous certain⋅e ?
+      are_you_sure: Êtes-vous certain⋅e ?
       confirm: Confirmer
       confirmed: Confirmé
-      disable_two_factor_authentication: Désactiver l'authentification à deux facteurs
+      disable_two_factor_authentication: Désactiver l’authentification à deux facteurs
       display_name: Nom affiché
       domain: Domaine
       edit: Éditer
@@ -85,7 +85,7 @@ fr:
       perform_full_suspension: Effectuer une suspension complète
       profile_url: URL du profil
       public: Public
-      push_subscription_expires: Expiration de l'abonnement PuSH
+      push_subscription_expires: Expiration de l’abonnement PuSH
       redownload: Rafraîchir les avatars
       reset: Réinitialiser
       reset_password: Réinitialiser le mot de passe
@@ -98,12 +98,12 @@ fr:
         targeted_reports: Signalements créés visant ce compte
       silence: Rendre muet
       statuses: Statuts
-      subscribe: S'abonner
+      subscribe: S’abonner
       title: Comptes
       undo_silenced: Annuler le silence
       undo_suspension: Annuler la suspension
       unsubscribe: Se désabonner
-      username: Nom d'utilisateur⋅ice
+      username: Nom d’utilisateur⋅ice
       web: Web
     domain_blocks:
       add_new: Ajouter
@@ -112,14 +112,14 @@ fr:
       domain: Domaine
       new:
         create: Créer le blocage
-        hint: Le blocage de domaine n'empêchera pas la création de comptes dans la base de données, mais il appliquera automatiquement et rétrospectivement des méthodes de modération spécifiques sur ces comptes.
+        hint: Le blocage de domaine n’empêchera pas la création de comptes dans la base de données, mais il appliquera automatiquement et rétrospectivement des méthodes de modération spécifiques sur ces comptes.
         severity:
           desc_html: "<strong>Silence</strong> rendra les messages des comptes concernés invisibles à ceux qui ne les suivent pas. <strong>Suspend</strong> supprimera tout le contenu des comptes concernés, les médias, et les données du profil."
           silence: Muet
           suspend: Suspendre
         title: Nouveau blocage de domaine
       reject_media: Fichiers média rejetés
-      reject_media_hint: Supprime localement les fichiers média stockés et refuse d'en télécharger ultérieurement. Ne concerne pas les suspensions.
+      reject_media_hint: Supprime localement les fichiers média stockés et refuse d’en télécharger ultérieurement. Ne concerne pas les suspensions.
       severities:
         silence: Rendre muet
         suspend: Suspendre
@@ -167,10 +167,10 @@ fr:
       contact_information:
         email: Entrez une adresse courriel publique
         label: Informations de contact
-        username: Entrez un nom d'utilisateur⋅ice
+        username: Entrez un nom d’utilisateur⋅ice
       registrations:
         closed_message:
-          desc_html: Affiché sur la page d'accueil lorsque les inscriptions sont fermées<br>Vous pouvez utiliser des balises HTML
+          desc_html: Affiché sur la page d’accueil lorsque les inscriptions sont fermées<br>Vous pouvez utiliser des balises HTML
           title: Message de fermeture des inscriptions
         open:
           disabled: Désactivées
@@ -178,10 +178,10 @@ fr:
           title: Inscriptions
       setting: Paramètre
       site_description:
-        desc_html: Affichée sous la forme d'un paragraphe sur la page d'accueil et utilisée comme balise meta.<br>Vous pouvez utiliser des balises HTML, en particulier <code>&lt;a&gt;</code> et <code>&lt;em&gt;</code>.
+        desc_html: Affichée sous la forme d’un paragraphe sur la page d’accueil et utilisée comme balise meta.<br>Vous pouvez utiliser des balises HTML, en particulier <code>&lt;a&gt;</code> et <code>&lt;em&gt;</code>.
         title: Description du site
       site_description_extended:
-        desc_html: Affichée sur la page d'informations complémentaires du site<br>Vous pouvez utiliser des balises HTML
+        desc_html: Affichée sur la page d’informations complémentaires du site<br>Vous pouvez utiliser des balises HTML
         title: Description étendue du site
       site_title: Titre du site
       title: Paramètres du site
@@ -198,17 +198,17 @@ fr:
       body: "%{reporter} a signalé %{target}"
       subject: Nouveau signalement sur %{instance} (#%{id})
   application_mailer:
-    settings: 'Changer les préférences courriel : %{link}'
+    settings: 'Changer les préférences courriel : %{link}'
     signature: Notifications de Mastodon depuis %{instance}
-    view: 'Voir :'
+    view: 'Voir :'
   applications:
-    invalid_url: L'URL fournie est invalide
+    invalid_url: L’URL fournie est invalide
   auth:
-    change_password: Changer de mot de passe
+    change_password: Sécurité
     delete_account: Supprimer le compte
     delete_account_html: Si vous désirez supprimer votre compte, vous pouvez cliquer ici. Il vous sera demandé de confirmer cette action.
-    didnt_get_confirmation: Vous n’avez pas reçu les consignes de confirmation ?
-    forgot_password: Mot de passe oublié ?
+    didnt_get_confirmation: Vous n’avez pas reçu les consignes de confirmation ?
+    forgot_password: Mot de passe oublié ?
     login: Se connecter
     logout: Se déconnecter
     register: S’inscrire
@@ -218,7 +218,7 @@ fr:
   authorize_follow:
     error: Malheureusement, il y a eu une erreur en cherchant les détails du compte distant
     follow: Suivre
-    prompt_html: 'Vous (<strong>%{self}</strong>) avez demandé à suivre :'
+    prompt_html: 'Vous (<strong>%{self}</strong>) avez demandé à suivre :'
     title: Suivre %{acct}
   datetime:
     distance_in_words:
@@ -230,9 +230,9 @@ fr:
       almost_x_years:
         one: un an
         other: "%{count} ans"
-      half_a_minute: A l'instant
+      half_a_minute: À l’instant
       less_than_x_minutes: "%{count}min"
-      less_than_x_seconds: A l'instant
+      less_than_x_seconds: À l’instant
       over_x_years:
         one: un an
         other: "%{count} ans"
@@ -241,19 +241,19 @@ fr:
       x_months: "%{count}mois"
       x_seconds: "%{count}s"
   deletes:
-    bad_password_msg: Bien essayé ! Mot de passe incorrect
+    bad_password_msg: Bien essayé ! Mot de passe incorrect
     confirm_password: Entrez votre mot de passe pour vérifier votre identité
-    description_html: Cela va supprimer votre compte et le désactiver de manière <strong>permanente et irréversible</strong>. Votre nom d'utilisateur⋅ice restera réservé afin d'éviter la confusion
+    description_html: Cela va supprimer votre compte et le désactiver de manière <strong>permanente et irréversible</strong>. Votre nom d’utilisateur⋅ice restera réservé afin d’éviter la confusion
     proceed: Supprimer compte
     success_msg: Votre compte a été supprimé avec succès
-    warning_html: Seule la suppression du contenu depuis cette instance est garantie. Le contenu qui a été partagé est susceptible de laisser des traces. Les serveurs hors-lignes ainsi que ceux n'étant plus abonnés à vos publications ne mettront pas leur base de données à jour.
+    warning_html: Seule la suppression du contenu depuis cette instance est garantie. Le contenu qui a été partagé est susceptible de laisser des traces. Les serveurs hors-lignes ainsi que ceux n’étant plus abonnés à vos publications ne mettront pas leur base de données à jour.
     warning_title: Disponibilité du contenu disséminé
   errors:
-    '403': Vous n'avez pas accès à cette page.
-    '404': La page que vous recherchez n'existe pas.
-    '410': La page que vous recherchez n'existe plus.
+    '403': Vous n’avez pas accès à cette page.
+    '404': La page que vous recherchez n’existe pas.
+    '410': La page que vous recherchez n’existe plus.
     '422':
-      content: Vérification de sécurité échouée. Bloquez-vous les cookies ?
+      content: Vérification de sécurité échouée. Bloquez-vous les cookies ?
       title: Vérification de sécurité échouée
     '429': Trop de requêtes émises dans un délai donné.
     noscript: Pour utiliser Mastodon, veuillez activer JavaScript
@@ -265,70 +265,70 @@ fr:
     storage: Médias stockés
   followers:
     domain: Domaine
-    explanation_html: Si vous voulez être sûr⋅e que vos status restent privés, vous devez savoir qui vous suit. <strong>Vos status privés seront diffusés à toutes les instances des utilisateur⋅ice⋅s qui vous suivent</strong>. Vous voudrez peut-être les passer en revue et les supprimer si vous n'êtes pas sûr⋅e que votre vie privée sera respectée par l'administration ou le logiciel de ces instances.
-    followers_count: Nombre d'abonné⋅es
+    explanation_html: Si vous voulez être sûr⋅e que vos status restent privés, vous devez savoir qui vous suit. <strong>Vos status privés seront diffusés à toutes les instances des utilisateur⋅ice⋅s qui vous suivent</strong>. Vous voudrez peut-être les passer en revue et les supprimer si vous n’êtes pas sûr⋅e que votre vie privée sera respectée par l’administration ou le logiciel de ces instances.
+    followers_count: Nombre d’abonné⋅es
     lock_link: Rendez votre compte privé
-    purge: Retirer de la liste d'abonné⋅es
+    purge: Retirer de la liste d’abonné⋅es
     success:
-      one: Suppression des abonné⋅es venant d'un domaine en cours...
-      other: Suppression des abonné⋅es venant de %{count} domaines en cours...
-    true_privacy_html: Soyez conscient⋅es <strong>qu'une vraie confidentialité ne peut être atteinte que par un chiffrement de bout-en-bout</strong>.
-    unlocked_warning_html: N'importe qui peut vous suivre et voir vos status privés. %{lock_link} afin de pouvoir vérifier et rejeter des abonné⋅es.
-    unlocked_warning_title: Votre compte n'est pas privé
+      one: Suppression des abonné⋅es venant d’un domaine en cours…
+      other: Suppression des abonné⋅es venant de %{count} domaines en cours…
+    true_privacy_html: Soyez conscient⋅es <strong>qu’une vraie confidentialité ne peut être atteinte que par un chiffrement de bout-en-bout</strong>.
+    unlocked_warning_html: N’importe qui peut vous suivre et voir vos status privés. %{lock_link} afin de pouvoir vérifier et rejeter des abonné⋅es.
+    unlocked_warning_title: Votre compte n’est pas privé
   generic:
-    changes_saved_msg: Les modifications ont été enregistrées avec succès !
+    changes_saved_msg: Les modifications ont été enregistrées avec succès !
     powered_by: propulsé par %{link}
     save_changes: Enregistrer les modifications
     validation_errors:
-      one: Quelque chose ne va pas ! Vérifiez l’erreur ci-dessous.
-      other: Certaines choses ne vont pas ! Vérifiez les erreurs ci-dessous.
+      one: Quelque chose ne va pas ! Vérifiez l’erreur ci-dessous.
+      other: Certaines choses ne vont pas ! Vérifiez les erreurs ci-dessous.
   imports:
     preface: Vous pouvez importer certaines données comme les personnes que vous suivez ou bloquez sur votre compte sur cette instance à partir de fichiers créés sur une autre instance.
     success: Vos données ont été importées avec succès et seront traitées en temps et en heure
     types:
-      blocking: Liste d'utilisateur⋅ice⋅s bloqué⋅es
-      following: Liste d'utilisateur⋅ice⋅s suivi⋅es
-      muting: Liste d'utilisateur⋅ice⋅s que vous faites taire
+      blocking: Liste d’utilisateur⋅ice⋅s bloqué⋅es
+      following: Liste d’utilisateur⋅ice⋅s suivi⋅es
+      muting: Liste d’utilisateur⋅ice⋅s que vous faites taire
     upload: Importer
   landing_strip_html: <strong>%{name}</strong> utilise %{link_to_root_path}. Vous pouvez le/la suivre et interagir si vous possédez un compte quelque part dans le "fediverse".
-  landing_strip_signup_html: Si ce n'est pas le cas, vous pouvez <a href="%{sign_up_path}">en créer un ici</a>.
+  landing_strip_signup_html: Si ce n’est pas le cas, vous pouvez <a href="%{sign_up_path}">en créer un ici</a>.
   media_attachments:
     validations:
       images_and_video: Impossible de joindre une vidéo à un statut contenant déjà des images
       too_many: Impossible de joindre plus de 4 fichiers
   notification_mailer:
     digest:
-      body: 'Voici ce que vous avez raté sur ${instance} depuis votre dernière visite (%{}) :'
+      body: 'Voici ce que vous avez raté sur ${instance} depuis votre dernière visite (%{}) :'
       mention: "%{name} vous a mentionné⋅e"
       new_followers_summary:
-        one: Vous avez un⋅e nouvel⋅le abonné⋅e ! Youpi !
-        other: Vous avez %{count} nouveaux⋅elles abonné⋅e⋅s ! Incroyable !
+        one: Vous avez un⋅e nouvel⋅le abonné⋅e ! Youpi !
+        other: Vous avez %{count} nouveaux⋅elles abonné⋅e⋅s ! Incroyable !
       subject:
         one: "Une nouvelle notification depuis votre dernière visite \U0001F418"
         other: "%{count} nouvelles notifications depuis votre dernière visite \U0001F418"
     favourite:
-      body: "%{name} a ajouté votre post à ses favoris :"
+      body: "%{name} a ajouté votre post à ses favoris :"
       subject: "%{name} a ajouté votre post à ses favoris"
     follow:
-      body: "%{name} vous suit !"
+      body: "%{name} vous suit !"
       subject: "%{name} vous suit"
     follow_request:
       body: "%{name} a demandé à vous suivre"
-      subject: 'Abonné⋅es en attente : %{name}'
+      subject: 'Abonné⋅es en attente : %{name}'
     mention:
-      body: "%{name} vous a mentionné⋅e dans :"
+      body: "%{name} vous a mentionné⋅e dans :"
       subject: "%{name} vous a mentionné⋅e"
     reblog:
-      body: "%{name} a partagé votre statut :"
+      body: "%{name} a partagé votre statut :"
       subject: "%{name} a partagé votre statut"
   pagination:
     next: Suivant
     prev: Précédent
   remote_follow:
     acct: Entrez votre pseudo@instance depuis lequel vous voulez suivre ce⋅tte utilisateur⋅trice
-    missing_resource: L'URL de redirection n'a pas pu être trouvée
+    missing_resource: L’URL de redirection n’a pas pu être trouvée
     proceed: Continuez pour suivre
-    prompt: 'Vous allez suivre :'
+    prompt: 'Vous allez suivre :'
   sessions:
     activity: Dernière activité
     browser: Navigateur
@@ -376,7 +376,7 @@ fr:
     import: Import de données
     preferences: Préférences
     settings: Réglages
-    two_factor_authentication: Identification à deux facteurs (Two-factor auth)
+    two_factor_authentication: Identification à deux facteurs
   statuses:
     open_in_web: Ouvrir sur le web
     over_character_limit: limite de caractères dépassée de %{max} caractères
@@ -397,20 +397,20 @@ fr:
       default: "%d %b %Y, %H:%M"
   two_factor_authentication:
     code_hint: Entrez le code généré par votre application pour confirmer
-    description_html: Si vous activez <strong>l'identification à deux facteurs</strong>, vous devrez être en possession de votre téléphone afin de générer un code de connexion.
+    description_html: Si vous activez <strong>l’identification à deux facteurs</strong>, vous devrez être en possession de votre téléphone afin de générer un code de connexion.
     disable: Désactiver
     enable: Activer
-    enabled: L'authentification à deux facteurs est activée
+    enabled: L’authentification à deux facteurs est activée
     enabled_success: Identification à deux facteurs activée avec succès
     generate_recovery_codes: Générer les codes de récupération
     instructions_html: "<strong>Scannez ce QR code grâce à Google Authenticator, Authy ou une application similaire sur votre téléphone</strong>. Désormais, cette application générera des jetons que vous devrez saisir à chaque connexion."
     lost_recovery_codes: Les codes de récupération vous permettent de retrouver les accès à votre comptre si vous perdez votre téléphone. Si vous perdez vos codes de récupération, vous pouvez les générer à nouveau ici. Vos anciens codes de récupération seront invalidés.
-    manual_instructions: 'Si vous ne pouvez pas scanner ce QR code et devez l''entrer manuellement, voici le secret en clair :'
+    manual_instructions: 'Si vous ne pouvez pas scanner ce QR code et devez l’entrer manuellement, voici le secret en clair :'
     recovery_codes: Codes de récupération
     recovery_codes_regenerated: Codes de récupération régénérés avec succès
-    recovery_instructions_html: Si vous perdez l'accès à votre téléphone, vous pouvez utiliser un des codes de récupération ci-dessous pour récupérer l'accès à votre compte. Conservez les codes de récupération en toute sécurité, par exemple, en les imprimant et en les stockant avec vos autres documents importants.
+    recovery_instructions_html: Si vous perdez l’accès à votre téléphone, vous pouvez utiliser un des codes de récupération ci-dessous pour récupérer l’accès à votre compte. Conservez les codes de récupération en toute sécurité, par exemple, en les imprimant et en les stockant avec vos autres documents importants.
     setup: Installer
-    wrong_code: Les codes entrés sont incorrects ! L'heure du serveur et celle de votre appareil sont-elles correctes ?
+    wrong_code: Les codes entrés sont incorrects ! L’heure du serveur et celle de votre appareil sont-elles correctes ?
   users:
-    invalid_email: L'adresse courriel est invalide
-    invalid_otp_token: Le code d'authentification à deux facteurs est invalide
+    invalid_email: L’adresse courriel est invalide
+    invalid_otp_token: Le code d’authentification à deux facteurs est invalide
diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml
index 446c56947..8717a4abd 100644
--- a/config/locales/simple_form.fr.yml
+++ b/config/locales/simple_form.fr.yml
@@ -4,12 +4,20 @@ fr:
     hints:
       defaults:
         avatar: Au format PNG, GIF ou JPG. 2Mo maximum. Sera réduit à 120x120px
-        display_name: 30 caractères maximum
+        display_name:
+          one: <span class="name-counter">1</span> caractère restant
+          other: <span class="name-counter">%{count}</span> caractères restants
         header: Au format PNG, GIF ou JPG. 2Mo maximum. Sera réduit à 700x335px
-        locked: Vous devrez approuver chaque abonné⋅e et vos statuts ne s'afficheront qu'à vos abonné⋅es
-        note: 160 caractères maximum
+        locked: Vous devrez approuver chaque abonné⋅e et vos statuts ne s’afficheront qu’à vos abonné⋅es
+        note:
+          one: <span class="note-counter">1</span> caractère restant
+          other: <span class="note-counter">%{count}</span> caractères restants
       imports:
         data: Un fichier CSV généré par une autre instance de Mastodon
+      sessions:
+        otp: Entrez le code d’authentification à deux facteurs depuis votre téléphone ou utilisez un de vos codes de récupération.
+      user:
+        filtered_languages: Les langues sélectionnées seront retirées de vos fils publics.
     labels:
       defaults:
         avatar: Image de profil
@@ -21,16 +29,18 @@ fr:
         email: Adresse courriel
         header: Image d’en-tête
         locale: Langue
-        locked: Rendre le compte privé
+        locked: Verrouiller le compte
         new_password: Nouveau mot de passe
         note: Présentation
-        otp_attempt: Code d'identification à deux facteurs
+        otp_attempt: Code d’identification à deux facteurs
         password: Mot de passe
+        setting_auto_play_gif: Lire automatiquement les GIFs animés
         setting_boost_modal: Afficher un dialogue de confirmation avant de partager
         setting_default_privacy: Confidentialité des statuts
+        setting_delete_modal: Afficher un dialogue de confirmation avant de supprimer un pouet
         setting_system_font_ui: Utiliser la police par défaut du système
         severity: Séverité
-        type: Type d'import
+        type: Type d’import
         username: Identifiant
       interactions:
         must_be_follower: Masquer les notifications des personnes qui ne vous suivent pas
@@ -39,7 +49,7 @@ fr:
         digest: Envoyer des courriels récapitulatifs
         favourite: Envoyer un courriel lorsque quelqu’un ajoute mes statuts à ses favoris
         follow: Envoyer un courriel lorsque quelqu’un me suit
-        follow_request: Envoyer un courriel lorsque quelqu'un demande à me suivre
+        follow_request: Envoyer un courriel lorsque quelqu’un demande à me suivre
         mention: Envoyer un courriel lorsque quelqu’un me mentionne
         reblog: Envoyer un courriel lorsque quelqu’un partage mes statuts
     'no': Non