about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--app/assets/javascripts/components/containers/mastodon.jsx3
-rw-r--r--app/assets/javascripts/components/locales/fr.jsx54
-rw-r--r--app/helpers/settings_helper.rb1
-rw-r--r--config/application.rb2
-rw-r--r--config/locales/devise.fr.yml60
-rw-r--r--config/locales/doorkeeper.fr.yml112
-rw-r--r--config/locales/fr.yml59
-rw-r--r--config/locales/simple_form.de.yml6
-rw-r--r--config/locales/simple_form.en.yml2
-rw-r--r--config/locales/simple_form.es.yml4
-rw-r--r--config/locales/simple_form.fr.yml28
11 files changed, 323 insertions, 8 deletions
diff --git a/app/assets/javascripts/components/containers/mastodon.jsx b/app/assets/javascripts/components/containers/mastodon.jsx
index 3528ef81c..87c7c65f3 100644
--- a/app/assets/javascripts/components/containers/mastodon.jsx
+++ b/app/assets/javascripts/components/containers/mastodon.jsx
@@ -38,6 +38,7 @@ import { IntlProvider, addLocaleData } from 'react-intl';
 import en from 'react-intl/locale-data/en';
 import de from 'react-intl/locale-data/de';
 import es from 'react-intl/locale-data/es';
+import fr from 'react-intl/locale-data/fr';
 import getMessagesForLocale from '../locales';
 
 const store = configureStore();
@@ -46,7 +47,7 @@ const browserHistory = useRouterHistory(createBrowserHistory)({
   basename: '/web'
 });
 
-addLocaleData([...en, ...de, ...es]);
+addLocaleData([...en, ...de, ...es, ...fr]);
 
 const Mastodon = React.createClass({
 
diff --git a/app/assets/javascripts/components/locales/fr.jsx b/app/assets/javascripts/components/locales/fr.jsx
new file mode 100644
index 000000000..d6e24c523
--- /dev/null
+++ b/app/assets/javascripts/components/locales/fr.jsx
@@ -0,0 +1,54 @@
+const fr = {
+  "column_back_button.label": "Retour",
+  "lightbox.close": "Fermer",
+  "loading_indicator.label": "Chargement…",
+  "status.mention": "Mentionner",
+  "status.delete": "Effacer",
+  "status.reply": "Répondre",
+  "status.reblog": "Partager",
+  "status.favourite": "Ajouter aux favoris",
+  "status.reblogged_by": "{name} a partagé",
+  "video_player.toggle_sound": "Mettre/Couper le son",
+  "account.mention": "Mentionner",
+  "account.edit_profile": "Modifier le profil",
+  "account.unblock": "Débloquer",
+  "account.unfollow": "Se désabonner",
+  "account.block": "Bloquer",
+  "account.follow": "S’abonner",
+  "account.posts": "Statuts",
+  "account.follows": "Abonnements",
+  "account.followers": "Abonnés",
+  "account.follows_you": "Vous suit",
+  "getting_started.heading": "Pour commencer",
+  "getting_started.about_addressing": "Vous pouvez vous abonner aux statuts de quelqu’un en entrant dans le champs de recherche leur nom d’utilisateur et le domaine de leur instance, séparés par un @ à la manière d’une adresse courriel.",
+  "getting_started.about_shortcuts": "Si cette personne utilise la même instance que vous, le nom d’utilisateur suffit. C’est le même principe pour mentionner quelqu’un dans vos statuts.",
+  "getting_started.about_developer": "Pour s’abonner au développeur de ce projet, c’est Gargron@mastodon.social",
+  "column.home": "Accueil",
+  "column.mentions": "Mentions",
+  "column.public": "Fil public",
+  "column.notifications": "Notifications",
+  "tabs_bar.compose": "Composer",
+  "tabs_bar.home": "Accueil",
+  "tabs_bar.mentions": "Mentions",
+  "tabs_bar.public": "Public",
+  "tabs_bar.notifications": "Notifications",
+  "compose_form.placeholder": "Qu’avez vous en tête ?",
+  "compose_form.publish": "Publier",
+  "navigation_bar.settings": "Paramètres",
+  "navigation_bar.public_timeline": "Public",
+  "navigation_bar.logout": "Se déconnecter",
+  "reply_indicator.cancel": "Annuler",
+  "search.placeholder": "Chercher",
+  "search.account": "Compte",
+  "search.hashtag": "Mot-clé",
+  "suggestions_box.who_to_follow": "Suggestions",
+  "suggestions_box.refresh": "Rafraîchir",
+  "upload_button.label": "Joindre un média",
+  "upload_form.undo": "Annuler",
+  "notification.follow": "{name} s’est abonné⋅e à vos statuts",
+  "notification.favourite": "{name} a ajouté votre statut à ses favoris",
+  "notification.reblog": "{name} a partagé votre statut",
+  "notification.mention": "{name} vous a mentionné⋅e"
+};
+
+export default fr;
diff --git a/app/helpers/settings_helper.rb b/app/helpers/settings_helper.rb
index 66ecc56c6..75ee2f8d9 100644
--- a/app/helpers/settings_helper.rb
+++ b/app/helpers/settings_helper.rb
@@ -5,6 +5,7 @@ module SettingsHelper
     en: 'English',
     de: 'Deutsch',
     es: 'Español',
+    fr: 'Français',
   }.freeze
 
   def human_locale(locale)
diff --git a/config/application.rb b/config/application.rb
index c53d78a4c..7ba13bfbe 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -20,7 +20,7 @@ module Mastodon
 
     # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
     # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
-    config.i18n.available_locales = [:en, :de, :es]
+    config.i18n.available_locales = [:en, :de, :es, :fr]
     config.i18n.default_locale    = :en
 
     # config.paths.add File.join('app', 'api'), glob: File.join('**', '*.rb')
diff --git a/config/locales/devise.fr.yml b/config/locales/devise.fr.yml
new file mode 100644
index 000000000..b64601e7b
--- /dev/null
+++ b/config/locales/devise.fr.yml
@@ -0,0 +1,60 @@
+---
+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 e-mail existe dans notre base de données, vous allez bientôt recevoir un e-mail contenant les instructions de confirmation de votre compte.
+    failure:
+      already_authenticated: Vous êtes déjà connecté
+      inactive: Votre compte n'est pas encore activé.
+      invalid: Email ou mot de passe incorrect.
+      last_attempt: Vous avez droit à une tentative avant que votre compte ne soit verrouillé.
+      locked: Votre compte est verrouillé.
+      not_found_in_database: Email ou mot de passe invalide.
+      timeout: Votre session est expirée. Veuillez vous reconnecter pour continuer.
+      unauthenticated: Vous devez vous connecter ou vous inscrire pour continuer.
+      unconfirmed: Vous devez valider votre compte pour continuer.
+    mailer:
+      confirmation_instructions:
+        subject: Instructions de confirmation
+      password_change:
+        subject: Votre mot de passe a été modifié avec succés.
+      reset_password_instructions:
+        subject: Instructions pour changer le mot de passe
+      unlock_instructions:
+        subject: Instructions pour déverrouiller le compte
+    omniauth_callbacks:
+      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 e-mail de réinitialisation de mot de passe. Si vous êtes passé par un e-mail 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 e-mail existe dans notre base de données, vous allez recevoir un lien de réinitialisation par e-mail
+      updated: Votre mot de passe a été édité avec succès, vous êtes maintenant connecté
+      updated_not_active: Votre mot de passe a été changé avec succès.
+    registrations:
+      destroyed: Votre compte a été supprimé avec succès. Nous espérons vous revoir bientôt.
+      signed_up: Bienvenue, vous êtes connecté.
+      signed_up_but_inactive: Vous êtes bien enregistré. Vous ne pouvez cependant pas vous connecter car votre compte n'est pas encore activé.
+      signed_up_but_locked: Vous êtes bien enregistré. Vous ne pouvez cependant pas vous connecter car votre compte est verrouillé.
+      signed_up_but_unconfirmed: Un message contenant un lien de confirmation a été envoyé à votre adresse email. Ouvrez ce lien pour activer votre compte.
+      update_needs_confirmation: Votre compte a bien été mis à jour mais nous devons vérifier votre nouvelle adresse email. Merci de vérifier vos emails et de cliquer sur le lien de confirmation pour finaliser la validation de votre nouvelle adresse.
+      updated: Votre compte a été modifié avec succès.
+    sessions:
+      already_signed_out: Déconnecté.
+      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 email contenant les instructions pour le déverrouiller.
+      unlocked: Votre compte a été déverrouillé avec succès, vous êtes maintenant connecté.
+  errors:
+    messages:
+      already_confirmed: a déjà été validé(e), veuillez essayer de vous connecter
+      confirmation_period_expired: à confirmer dans les %{period}, merci de faire une nouvelle demande
+      expired: a expiré, merci d'en faire une nouvelle demande
+      not_found: n'a pas été trouvé(e)
+      not_locked: n'était pas verrouillé(e)
+      not_saved:
+        one: '1 erreur a empêché ce(tte) %{resource} d''être sauvegardé(e) :'
diff --git a/config/locales/doorkeeper.fr.yml b/config/locales/doorkeeper.fr.yml
new file mode 100644
index 000000000..c04e378b6
--- /dev/null
+++ b/config/locales/doorkeeper.fr.yml
@@ -0,0 +1,112 @@
+---
+fr:
+  activerecord:
+    attributes:
+      doorkeeper/application:
+        name: Nom
+        redirect_uri: L'URL de redirection
+    errors:
+      models:
+        doorkeeper/application:
+          attributes:
+            redirect_uri:
+              fragment_present: ne peut contenir un fragment.
+              invalid_uri: doit être une URL valide.
+              relative_uri: doit être une URL absolue.
+              secured_uri: doit être une URL HTTP/SSL.
+  doorkeeper:
+    applications:
+      buttons:
+        authorize: Autoriser
+        cancel: Annuler
+        destroy: Détruire
+        edit: Modifier
+        submit: Envoyer
+      confirmations:
+        destroy: Êtes-vous certain?
+      edit:
+        title: Modifier l'application
+      form:
+        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:
+      index:
+        callback_url: URL de retour d'appel
+        name: Nom
+        new: Nouvelle application
+        title: Vos applications
+      new:
+        title: Nouvelle application
+      show:
+        actions: Actions
+        application_id: ID de l'application
+        callback_urls: URL du retour d'appel
+        scopes:
+        secret: Secret
+        title: 'Application : %{name}'
+    authorizations:
+      buttons:
+        authorize: Autoriser
+        deny: Refuser
+      error:
+        title: Une erreur est survenue
+      new:
+        able_to: Cette application pourra
+        prompt: Autorisez %{client_name} à utiliser votre compte?
+        title: Autorisation requise
+      show:
+        title: Code d'autorisation
+    authorized_applications:
+      buttons:
+        revoke: Annuler
+      confirmations:
+        revoke: Êtes-vous certain?
+      index:
+        application: Application
+        created_at: Créé le
+        date_format: "%Y-%m-%d %H:%M:%S"
+        title: Vos applications autorisées
+    errors:
+      messages:
+        access_denied: Le propriétaire de la ressource ou le serveur d'autorisation a refusé la demande.
+        credential_flow_not_configured: Le flux des identifiants du mot de passe du propriétaire de la ressource a échoué en raison de 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 demande d'autorisation, ou a été émis à un autre client.
+        invalid_redirect_uri: L'URL de redirection n'est pas valide.
+        invalid_request: La demande manque 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 du propriétaire de la ressource ne sont pas valides, ou le propriétaire de la ressource ne peut être trouvé
+        invalid_scope: Le scope demandé n'est pas valide, est inconnu, ou est mal formé.
+        invalid_token:
+          expired: Le jeton d'accès a expiré
+          revoked: Le jeton d'accès a été annulé
+          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é en raison de Doorkeeper.configure.resource_owner_authenticator n'est pas configuré.
+        server_error: Le serveur d'autorisation a rencontré une condition inattendue qui l'a empêché de remplir la demande.
+        temporarily_unavailable: Le serveur d'autorisation est actuellement incapable de traiter la demande à cause d'une surcharge ou d'un entretien temporaire du serveur.
+        unauthorized_client: Le client n'est pas autorisé à effectuer cette demande à 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:
+          notice: Application créée.
+        destroy:
+          notice: Application supprimée.
+        update:
+          notice: Application mise à jour.
+      authorized_applications:
+        destroy:
+          notice: Application annulée.
+    layouts:
+      admin:
+        nav:
+          applications: Applications
+          oauth2_provider: Fournisseur OAuth2
+      application:
+        title: Autorisation OAuth requise
+    scopes:
+      follow:
+      read:
+      write:
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
new file mode 100644
index 000000000..c9258381c
--- /dev/null
+++ b/config/locales/fr.yml
@@ -0,0 +1,59 @@
+---
+fr:
+  about:
+    about_instance: "<em>%{instance}</em> est une instance de Mastodon."
+    about_mastodon: "Mastodon est un serveur <em>libre</em> de réseautage social. Alternative <em>décentralisée</em> aux plateformes commerciales, la monopolisation de vos communications par une entreprise unique est évitée. Tout un chacun peut faire tourner Mastodon et participer au <em>réseau social</em> de manière transparente."
+    get_started: "Rejoindre le réseau"
+    source_code: "Code source"
+    terms: "Conditions d’utilisation"
+  accounts:
+    follow: "S’abonner"
+    followers: "Abonnés"
+    following: "Abonnements"
+    nothing_here: "Rien à voir ici&nbsp;!"
+    people_followed_by: "Personnes auxquelles %{name} est abonné⋅e"
+    people_who_follow: "Personnes abonnées à %{name}"
+    posts: "Statuts"
+    unfollow: "Se désabonner"
+  application_mailer:
+    signature: "Notifications de Mastodon depuis %{instance}"
+  auth:
+    change_password: "Changer de mot de passe"
+    didnt_get_confirmation: "Vous n’avez pas reçu les consignes de confirmation&nbsp;?"
+    forgot_password: "Mode passe oublié&nbsp;?"
+    login: "Se connecter"
+    register: "S’inscrire"
+    resend_confirmation: "Envoyer à nouveau les consignes de confirmation"
+    reset_password: "Réinitialiser le mot de passe"
+    set_new_password: "Établir le nouveau mot de passe"
+  generic:
+    changes_saved_msg: "Les modifications ont été enregistrées avec succès&nbsp;!"
+    powered_by: "propulsé par %{link}"
+    save_changes: "Enregistrer les modifications"
+    validation_errors:
+      one: "Quelque chose ne va pas&nbsp;! Vérifiez l’erreur ci-dessous."
+      other: "Quelques choses ne vont pas&nbsp;! Vérifiez les erreurs ci-dessous."
+  notification_mailer:
+    favourite:
+      body: "%{name} a ajouté votre statut à ses favoris&nbsp;:"
+      subject: "%{name} a ajouté votre statut à ses favoris"
+    follow:
+      body: "%{name} s’est abonné⋅e à vos statuts&nbsp;!"
+      subject: "%{name} s’est abonné⋅e à vos statuts"
+    mention:
+      body: "%{name} vous a mentionné⋅e dans&nbsp;:"
+      subject: "%{name} vous a mentionné⋅e"
+    reblog:
+      body: "%{name} a partagé votre statut&nbsp;:"
+      subject: "%{name} a partagé votre statut"
+  pagination:
+    next: "Suivant"
+    prev: "Précédent"
+  settings:
+    edit_profile: "Modifier le profil"
+    preferences: "Préférences"
+  stream_entries:
+    favourited: "a ajouté à ses favoris un statut de"
+    is_now_following: "s’est abonné⋅e à"
+  will_paginate:
+    page_gap: "&hellip;"
diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml
index 65714dbd5..36c5141a2 100644
--- a/config/locales/simple_form.de.yml
+++ b/config/locales/simple_form.de.yml
@@ -14,15 +14,15 @@ de:
         new_password: Neues Passwort
         note: Über mich
         password: Passwort
-        username: Nutzername
         silenced: Öffentliche Beiträge nicht auflisten
+        username: Nutzername
       notification_emails:
         favourite: E-mail senden, wenn jemand meinen Beitrag favorisiert
         follow: E-mail senden, wenn mir jemand folgt
         mention: E-mail senden, wenn mich jemand erwähnt
         reblog: E-mail senden, wenn jemand meinen Beitrag teilt
-    'no': 'Nein'
+    'no': Nein
     required:
       mark: "*"
       text: Pflichtfeld
-    'yes': 'Ja'
+    'yes': Ja
diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml
index 5b66fccd5..a7d958c06 100644
--- a/config/locales/simple_form.en.yml
+++ b/config/locales/simple_form.en.yml
@@ -14,8 +14,8 @@ en:
         new_password: New password
         note: Bio
         password: Password
-        username: Username
         silenced: Unlisted mode
+        username: Username
       notification_emails:
         favourite: Send e-mail when someone favourites your status
         follow: Send e-mail when someone follows you
diff --git a/config/locales/simple_form.es.yml b/config/locales/simple_form.es.yml
index 1909474a1..bfe000b33 100644
--- a/config/locales/simple_form.es.yml
+++ b/config/locales/simple_form.es.yml
@@ -14,8 +14,8 @@ es:
         new_password: Nueva contraseña
         note: Biografía
         password: Contraseña
-        username: Nombre de usuario
         silenced: No listado
+        username: Nombre de usuario
       notification_emails:
         favourite: Enviar correo electrónico cuando alguien de a favorito en su publicación
         follow: Enviar correo electrónico cuando alguien le siga
@@ -25,4 +25,4 @@ es:
     required:
       mark: "*"
       text: necesario
-    'yes': 'Sí'
+    'yes': Sí
diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml
new file mode 100644
index 000000000..7333c9e11
--- /dev/null
+++ b/config/locales/simple_form.fr.yml
@@ -0,0 +1,28 @@
+---
+fr:
+  simple_form:
+    labels:
+      defaults:
+        avatar: Image de profil
+        confirm_new_password: Confirmation du nouveau mot de passe
+        confirm_password: Confirmation du mot de passe
+        current_password: Mot de passe actuel
+        display_name: Nom public
+        email: Adresse courriel
+        header: Image d’en-tête
+        locale: Langue
+        new_password: Nouveau mot de passe
+        note: Présentation
+        password: Mot de passe
+        silenced: Ne pas apparaître dans le fil public
+        username: Nom d’utilisateur
+      notification_emails:
+        favourite: Envoyer un courriel lorsque quelqu’un ajoute un de mes statuts à ses favoris
+        follow: Envoyer un courriel lorsque quelqu’un s’abonne à mes statuts
+        mention: Envoyer un courriel lorsque quelqu’un me mentionne
+        reblog: Envoyer un courriel lorsque quelqu’un partage un de mes statuts
+    'no': Non
+    required:
+      mark: "*"
+      text: Champs requis
+    'yes': Oui