From d0a217eb92aec7278685e17b04a1e109081785db Mon Sep 17 00:00:00 2001 From: Sylvhem Date: Sat, 12 Aug 2017 01:33:30 +0200 Subject: Minor fixes in the French translation (#4580) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Ajout de traductions manquantes Ajoute des traductions pour les chaînes n’en ayant pas en version 1.5.1. Add translations for the strings that are missing them in 1.5.1. * Remplace « ' » par « ’ » Retire de la traduction les apostrophes droites « ' » (U+0027) au profit des apostrophes typographiques « ’ » (U+2019). En typographie française, les apostrophes typographiques sont utilisées à la place des apostrophes droites. La traduction était incohérente et utilisait les deux. Remove from the translation all the vertical apostrophes (U+0027) in favor of the curly ones (U+2019). In French typography, typographic apostrophes are used instead of vertical ones. The translation was incoherent and used both. * Ajout d’espaces insécables Ajoute des espaces insécables suivant les régles nécessaires en typographie française. Add non-breaking spaces following rules of French typography. * Remplace « status » par « statut » Remplace le mot anglais « status » par sa traduction française « statut ». Replace the English word "status" by its French translation "statut". * Correction de la politique de confidentialité Apporte diverses corrections à la traduction de la politique de confidentialité. Add various fixes to the privacy policy's translation. * Remplace « mentionné » par « mentionné·e » Harmonise la traduction en remplaçant « mentionné » par sa forme épicène. Harmonize the translation by replacing "mentionné" (sure) by its epicene form. * Remplace « Coup d’œil » par « Jeter un coup d’œil… » Remplace la première traduction par une forme plus proche de la version originelle. Replace the first translation by something closer to the original version. * Remplace « Bon Appétoot ! » par « Bon appouetit ! » Remplace « Bon Appétoot ! » par « Bon appouetit ! » pour essayer de conserver le jeu de mot. Replace « Bon Appétoot ! » by « Bon appouetit ! » to keep the pun. * Remplace « Bon Appétoot ! » par « Bon appouetit ! » (2) Remplace « Bon Appétoot ! » par « Bon appouetit ! » pour essayer de conserver le jeu de mot. Replace « Bon Appétoot ! » by « Bon appouetit ! » to keep the pun.f * Corrections Corrige des fautes d’orthographe et change « appouetit » pour « appouétit ». Correct some mistakes and change "appouetit" to "appouétit". --- config/locales/fr.yml | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) (limited to 'config/locales/fr.yml') diff --git a/config/locales/fr.yml b/config/locales/fr.yml index d7aa41497..38be6dce8 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -187,7 +187,7 @@ fr: nsfw_off: NSFW OFF nsfw_on: NSFW ON execute: Exécuter - failed_to_execute: Erreur d'exécution + failed_to_execute: Erreur d’exécution media: hide: Masquer les médias show: Montrer les médias @@ -231,11 +231,11 @@ fr: error: Malheureusement, il y a eu une erreur en cherchant les détails du compte distant follow: Suivre follow_request: 'Vous avez demandé à suivre:' - following: 'Youpi! Vous suivez :' + following: 'Youpi ! Vous suivez :' post_follow: close: Ou bien, vous pouvez fermer cette fenêtre. - return: Retour au profil de l'utilisateur⋅trice - web: Retour à l'interface web + return: Retour au profil de l’utilisateur⋅trice + web: Retour à l’interface web title: Suivre %{acct} datetime: distance_in_words: @@ -282,7 +282,7 @@ 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. Vos status privés seront diffusés à toutes les instances des utilisateur⋅ice⋅s qui vous suivent. 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. + explanation_html: Si vous voulez être sûr⋅e que vos statuts restent privés, vous devez savoir qui vous suit. Vos statuts privés seront diffusés à toutes les instances des utilisateur⋅ice⋅s qui vous suivent. 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 @@ -290,7 +290,7 @@ fr: 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 qu’une vraie confidentialité ne peut être atteinte que par un chiffrement de bout-en-bout. - 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_html: N’importe qui peut vous suivre et voir vos statuts 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 ! @@ -311,7 +311,7 @@ fr: landing_strip_signup_html: Si ce n’est pas le cas, vous pouvez en créer un ici. media_attachments: validations: - images_and_video: Impossible de joindre une vidéo à un status contenant déjà des images + 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: @@ -334,30 +334,30 @@ fr: subject: 'Abonné⋅es en attente : %{name}' mention: body: "%{name} vous a mentionné⋅e dans :" - subject: "%{name} vous a mentionné" + subject: "%{name} vous a mentionné·e" reblog: - body: "%{name} a partagé votre status :" - subject: "%{name} a partagé votre status" + body: "%{name} a partagé votre statut :" + subject: "%{name} a partagé votre statut" pagination: next: Suivant prev: Précédent push_notifications: favourite: - title: "%{name} à mis votre status en favori" + title: "%{name} à mis votre statut en favori" follow: title: "%{name} vous suit" mention: action_boost: Partager action_expand: Montrer plus action_favourite: Ajouter aux favoris - title: "%{name} vous a mentionné" + title: "%{name} vous a mentionné·e" reblog: - title: "%{name} a partagé⋅e votre status" + title: "%{name} a partagé⋅e votre statut" subscribed: body: Vous pouvez désormais recevoir des notifications push. title: Abonnements aux notifications push remote_follow: - acct: Entrez votre pseudo@instance depuis lequel vous voulez suivre ce⋅tte utilisateur⋅trice + acct: Entrez votre pseudo@instance depuis lequel vous voulez suivre ce⋅tte utilisateur⋅rice missing_resource: L’URL de redirection n’a pas pu être trouvée proceed: Continuez pour suivre prompt: 'Vous allez suivre :' @@ -417,18 +417,18 @@ fr: show_more: Afficher plus visibilities: private: Abonné⋅es uniquement - private_long: Seul⋅es vos abonné⋅es verront vos status + private_long: Seul⋅es vos abonné⋅es verront vos statuts public: Public - public_long: Tout le monde peut voir vos status + public_long: Tout le monde peut voir vos statuts unlisted: Public sans être affiché sur le fil public - unlisted_long: Tout le monde peut voir vos status mais ils ne seront pas sur listés sur les fils publics + unlisted_long: Tout le monde peut voir vos statuts mais ils ne seront pas sur listés sur les fils publics stream_entries: click_to_show: Cliquer pour afficher reblogged: partagé sensitive_content: Contenu sensible terms: - body_html: "

Politique de confidentialité

\n\n

Quelles données collectons-nous?

\n\n

Nous collectons des données lorsque vous vous enregistrez sur notre site et les récoltons lorsque vous participez dans le forum en lisant, écrivant, et évaluant le contenu partagé ici.

\n\n

Lors de l'enregistrement sur notre site, il peut vous être demandé de renseigner votre nom et adresse e-mail. Vous pouvez, cependant, visiter notre site sans inscription. Votre adresse e-mail devra être vérifiée grâce à un e-mail contenant un lien unique. Si ce lien est visité, nous savons que vous contrôlez cette adresse e-mail.

\n\n

Lors de l'inscription et de la publication de statuts, nous enregistrons l'adresse IP de laquelle le(s) status viennent. Nous pouvons également conserver des historiques serveurs qui contiendront l'adresse IP de chaque requête adressée à notre serveur.

\n\n

Que faisons-nous avec vos données?

\n\n

Toute information que nous collectons pourra être utilisée d'une des manières suivantes :

\n\n\n\n

Comment protégeons-nous vos données?

\n \n

Nous appliquons une multitude de mesures afin de maintenir la sécurité de vos données personnelles lorsque vous entrez, soumettez, ou accédez à ces dernières.

\n\n

Quelle est notre politique de conservation des données?

\n\n

Nous nous efforçons de:

\n\n\n\n

Utilisons nous des \"cookies\"?

\n\n

Oui. Les cookies sont de petits fichiers qu'un site ou prestataires de services transfèrent sur le disque dur de votre ordinateur par le biais de votre navigateur Web (si ce dernier le permet). Ces cookies permettent au site de reconnaître votre navigateur et, si vous disposez d'un compte, l'associer à votre compte.

\n\n

Nous utilisons les cookies pour enregistrer vos préférences pour de futures visites, compiler des données agrégées à propos du trafic et des interactions effectuées sur le site afin de proposer une meilleure expérience dans le futur. Nous pouvons contracter les services d'acteurs tiers afin de nous aider à mieux comprendre les visiteurs de notre site. Ces acteurs ont l'autorisation d'utiliser ces données seulement à des fins d'améliorations.

\n\n

Divulguons-nous des données à des acteurs tiers ?

\n\n

Nous n'échangeons pas, ne vendons pas ni effectuons de quelconques transferts avec des acteurs tiers d'informations permettant de vous identifier personnellement. Cela n'inclut pas les acteurs de confiance qui nous aident à gérer notre entreprise et à vous servir tant que ces acteurs s'accordent à garder lesdites informations confidentielles. Nous pouvons être amenés à délivrer vos informations lorsque jugé adéquat afin de respecter la loi, d'appliquer la politique de notre site, ou afin de protéger nos droits, ceux des autres, notre propriété ou sécurité. Cependant, aucune information permettant l'identification de nos visiteurs ne sera divulguée à des fins publicitaires, commerciales ou tout autre usage.

\n\n

Liens vers des acteurs tiers

\n\n

Nous pouvons être amenés à inclure ou offrir les services ou produits d'acteurs tiers sur notre site. Ces acteurs tiers possèdent leur propre politique de confidentialité. Nous ne sommes donc pas responsables du contenu ou activités desdits acteurs. Néanmoins, nous cherchons à protéger l'intégrité de notre site et sommes ouverts à toute remarque concernant ces acteurs.

\n\n

Children's Online Privacy Protection Act

\n\n

Notre site, nos produits et services sont tous dirigés à l'usage de personnes étant âgés de 13 ans ou plus. Si ce serveur est hébergé aux États-Unis et que vous êtes âgé⋅e de moins de 13 ans, au vu du COPPA (Children's Online Privacy Protection Act) n'utilisez pas ce site.

\n\n

Votre consentement

\n\n

En utilisant notre site, vous consentez à la politique de confiedentialité de notre site Web.

\n\n

Changements de notre politique de confidentialité

\n\n

Si nous décidons d'apporter des changements à notre politique de confidentialité, nous les mettrons à disposition sur cette page.

\n\n

Ce document est distribué sous licence CC-BY-SA. Il a été mis à jour pour la dernière fois le 31 Mai 2013. Il a été traduit en français en Juillet 2017.

\n\n

Originellement adapté à partir de la politique de confidentialité de Discourse

.\n" - title: "%{instance} Conditions d'utilisations et Politique de confidentialité" + body_html: "

Politique de confidentialité

\n\n

Quelles données collectons-nous ?

\n\n

Nous collectons des données lorsque vous vous enregistrez sur notre site et les récoltons lorsque vous participez dans le forum en lisant, écrivant, et évaluant le contenu partagé ici.

\n\n

Lors de l’enregistrement sur notre site, il peut vous être demandé de renseigner votre nom et adresse électronique. Vous pouvez, cependant, visiter notre site sans inscription. Votre adresse électronique devra être vérifiée grâce à un courriel contenant un lien unique. Si ce lien est visité, nous savons que vous contrôlez cette adresse.

\n\n

Lors de l’inscription et de la publication de statuts, nous enregistrons l’adresse IP de laquelle les statuts proviennent. Nous pouvons également conserver des historiques serveurs qui contiendront l’adresse IP de chaque requête adressée à notre serveur.

\n\n

Que faisons-nous avec vos données ?

\n\n

Toute information que nous collectons pourra être utilisée d’une des manières suivantes :

\n\n\n\n

Comment protégeons-nous vos données ?

\n \n

Nous appliquons une multitude de mesures afin de maintenir la sécurité de vos données personnelles lorsque vous entrez, soumettez, ou accédez à ces dernières.

\n\n

Quelle est notre politique de conservation des données ?

\n\n

Nous nous efforçons de :

\n\n\n\n

Utilisons nous des « cookies » ?

\n\n

Oui. Les cookies sont de petits fichiers qu’un site ou prestataires de services transfèrent sur le disque dur de votre ordinateur par le biais de votre navigateur Web (si ce dernier le permet). Ces cookies permettent au site de reconnaître votre navigateur et, si vous disposez d’un compte, de l’associer à celui-ci.

\n\n

Nous utilisons les cookies pour enregistrer vos préférences pour de futures visites, compiler des données agrégées à propos du trafic et des interactions effectuées sur le site afin de proposer une meilleure expérience dans le futur. Nous pouvons contracter les services d’acteurs tiers afin de nous aider à mieux comprendre les visiteurs de notre site. Ces acteurs ont l’autorisation d’utiliser ces données seulement à des fins d’améliorations.

\n\n

Divulguons-nous des données à des acteurs tiers ?

\n\n

Nous n’échangeons pas, ne vendons pas ni effectuons de quelconques transferts avec des acteurs tiers d’informations permettant de vous identifier personnellement. Cela n’inclut pas les acteurs de confiance qui nous aident à gérer notre entreprise et à vous servir tant que ces acteurs s’accordent à garder lesdites informations confidentielles. Nous pouvons être amenés à délivrer vos informations lorsque jugé adéquat afin de respecter la loi, d’appliquer la politique de notre site, ou afin de protéger nos droits, ceux des autres, notre propriété ou sécurité. Cependant, aucune information permettant l’identification de nos visiteurs ne sera divulguée à des fins publicitaires, commerciales ou tout autre usage.

\n\n

Liens vers des acteurs tiers

\n\n

Nous pouvons être amenés à inclure ou offrir les services ou produits d’acteurs tiers sur notre site. Ces acteurs tiers possèdent leur propre politique de confidentialité. Nous ne sommes donc pas responsables du contenu ou activités desdits acteurs. Néanmoins, nous cherchons à protéger l’intégrité de notre site et sommes ouverts à toute remarque concernant ces acteurs.

\n\n

Children's Online Privacy Protection Act

\n\n

Notre site, nos produits et services sont tous destinés à l’usage de personnes âgées de 13 ans ou plus. Si ce serveur est hébergé aux États-Unis et que vous êtes âgé⋅e de moins de 13 ans, au vu du COPPA (Children's Online Privacy Protection Act) n’utilisez pas ce site.

\n\n

Votre consentement

\n\n

En utilisant notre site, vous consentez à la présente politique de confidentialité.

\n\n

Changements de notre politique de confidentialité

\n\n

Si nous décidons d’apporter des changements à notre politique de confidentialité, nous les publierons sur cette page.

\n\n

Ce document est distribué sous licence CC-BY-SA. Il a été mis à jour pour la dernière fois le 31 mai 2013. Il a été traduit en français en juillet 2017.

\n\n

Originellement adapté à partir de la politique de confidentialité de Discourse.

\n" + title: "%{instance} Conditions d’utilisations et politique de confidentialité" time: formats: default: "%d %b %Y, %H:%M" @@ -451,4 +451,4 @@ fr: users: invalid_email: L’adresse courriel est invalide invalid_otp_token: Le code d’authentification à deux facteurs est invalide - signed_in_as: 'Connecté·e en tant que :' + signed_in_as: 'Connecté·e en tant que :' -- cgit From 11a7507318ff9bffbed9e4423ef86ada8c43a992 Mon Sep 17 00:00:00 2001 From: Yamagishi Kazutoshi Date: Wed, 23 Aug 2017 01:31:42 +0900 Subject: Add delete account link for French (#4659) --- config/locales/fr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'config/locales/fr.yml') diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 38be6dce8..a7c5bf144 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -217,7 +217,7 @@ fr: agreement_html: En vous inscrivant, vous souscrivez à nos conditions d’utilisation ainsi qu’à notre politique de confidentialité. 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. + 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é ? invalid_reset_password_token: Le lien de réinitialisation du mot de passe est invalide ou a expiré. Merci de réessayer. -- cgit From 74437c6bff8d704fbb5664fe7f1b5e78e16ad086 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Fri, 1 Sep 2017 13:35:23 +0200 Subject: Refactor Web::PushSubscription, remove welcome message (#4524) * Refactor Web::PushSubscription, remove welcome message * Add missing helper * Use locale of the receiver on push notifications (#4519) * Remove unused translations * Fix dir on notifications --- .../service_worker/web_push_notifications.js | 26 ++-- app/models/session_activation.rb | 1 + app/models/web/push_subscription.rb | 158 +++---------------- app/serializers/web/notification_serializer.rb | 168 +++++++++++++++++++++ config/locales/ca.yml | 76 +--------- config/locales/en.yml | 3 - config/locales/fa.yml | 3 - config/locales/fr.yml | 3 - config/locales/ja.yml | 3 - config/locales/nl.yml | 3 - config/locales/oc.yml | 3 - config/locales/pl.yml | 5 - config/locales/ru.yml | 3 - 13 files changed, 204 insertions(+), 251 deletions(-) create mode 100644 app/serializers/web/notification_serializer.rb (limited to 'config/locales/fr.yml') diff --git a/app/javascript/mastodon/service_worker/web_push_notifications.js b/app/javascript/mastodon/service_worker/web_push_notifications.js index acb85f626..f63cff335 100644 --- a/app/javascript/mastodon/service_worker/web_push_notifications.js +++ b/app/javascript/mastodon/service_worker/web_push_notifications.js @@ -31,8 +31,8 @@ const notify = options => const group = cloneNotification(notifications[0]); group.title = formatGroupTitle(group.data.message, group.data.count + 1); - group.body = `${options.title}\n${group.body}`; - group.data = { ...group.data, count: group.data.count + 1 }; + group.body = `${options.title}\n${group.body}`; + group.data = { ...group.data, count: group.data.count + 1 }; return self.registration.showNotification(group.title, group); } @@ -43,18 +43,18 @@ const notify = options => const handlePush = (event) => { const options = event.data.json(); - options.body = options.data.nsfw || options.data.content; - options.image = options.image || undefined; // Null results in a network request (404) + options.body = options.data.nsfw || options.data.content; + options.dir = options.data.dir; + options.image = options.image || undefined; // Null results in a network request (404) options.timestamp = options.timestamp && new Date(options.timestamp); const expandAction = options.data.actions.find(action => action.todo === 'expand'); if (expandAction) { - options.actions = [expandAction]; - options.hiddenActions = options.data.actions.filter(action => action !== expandAction); - + options.actions = [expandAction]; + options.hiddenActions = options.data.actions.filter(action => action !== expandAction); options.data.hiddenImage = options.image; - options.image = undefined; + options.image = undefined; } else { options.actions = options.data.actions; } @@ -75,8 +75,8 @@ const cloneNotification = (notification) => { const expandNotification = (notification) => { const nextNotification = cloneNotification(notification); - nextNotification.body = notification.data.content; - nextNotification.image = notification.data.hiddenImage; + nextNotification.body = notification.data.content; + nextNotification.image = notification.data.hiddenImage; nextNotification.actions = notification.data.actions.filter(action => action.todo !== 'expand'); return self.registration.showNotification(nextNotification.title, nextNotification); @@ -105,8 +105,7 @@ const openUrl = url => const webClients = clientList.filter(client => /\/web\//.test(client.url)); if (webClients.length !== 0) { - const client = findBestClient(webClients); - + const client = findBestClient(webClients); const { pathname } = new URL(url); if (pathname.startsWith('/web/')) { @@ -126,8 +125,7 @@ const openUrl = url => }); const removeActionFromNotification = (notification, action) => { - const actions = notification.actions.filter(act => act.action !== action.action); - + const actions = notification.actions.filter(act => act.action !== action.action); const nextNotification = cloneNotification(notification); nextNotification.actions = actions; diff --git a/app/models/session_activation.rb b/app/models/session_activation.rb index 7eb16af8f..c1645223b 100644 --- a/app/models/session_activation.rb +++ b/app/models/session_activation.rb @@ -25,6 +25,7 @@ # class SessionActivation < ApplicationRecord + belongs_to :user, inverse_of: :session_activations, required: true belongs_to :access_token, class_name: 'Doorkeeper::AccessToken', dependent: :destroy belongs_to :web_push_subscription, class_name: 'Web::PushSubscription', dependent: :destroy diff --git a/app/models/web/push_subscription.rb b/app/models/web/push_subscription.rb index e76f61278..79f782114 100644 --- a/app/models/web/push_subscription.rb +++ b/app/models/web/push_subscription.rb @@ -13,59 +13,14 @@ # require 'webpush' -require_relative '../../models/setting' class Web::PushSubscription < ApplicationRecord - include RoutingHelper - include StreamEntriesHelper - include ActionView::Helpers::TranslationHelper - include ActionView::Helpers::SanitizeHelper - has_one :session_activation - before_create :send_welcome_notification - def push(notification) - name = display_name notification.from_account - title = title_str(name, notification) - body = body_str notification - dir = dir_str body - url = url_str notification - image = image_str notification - actions = actions_arr notification - - access_token = actions.empty? ? nil : find_or_create_access_token(notification).token - nsfw = notification.target_status.nil? || notification.target_status.spoiler_text.empty? ? nil : notification.target_status.spoiler_text - - # TODO: Make sure that the payload does not exceed 4KB - Webpush::PayloadTooLarge - Webpush.payload_send( - message: JSON.generate( - title: title, - dir: dir, - image: image, - badge: full_asset_url('badge.png', skip_pipeline: true), - tag: notification.id, - timestamp: notification.created_at, - icon: notification.from_account.avatar_static_url, - data: { - content: decoder.decode(strip_tags(body)), - nsfw: nsfw.nil? ? nil : decoder.decode(strip_tags(nsfw)), - url: url, - actions: actions, - access_token: access_token, - message: translate('push_notifications.group.title'), # Do not pass count, will be formatted in the ServiceWorker - } - ), - endpoint: endpoint, - p256dh: key_p256dh, - auth: key_auth, - vapid: { - subject: "mailto:#{Setting.site_contact_email}", - private_key: Rails.configuration.x.vapid_private_key, - public_key: Rails.configuration.x.vapid_public_key, - }, - ttl: 40 * 60 * 60 # 48 hours - ) + I18n.with_locale(session_activation.user.locale || I18n.default_locale) do + push_payload(message_from(notification), 48.hours.seconds) + end end def pushable?(notification) @@ -73,120 +28,47 @@ class Web::PushSubscription < ApplicationRecord end def as_payload - payload = { - id: id, - endpoint: endpoint, - } - + payload = { id: id, endpoint: endpoint } payload[:alerts] = data['alerts'] if data && data.key?('alerts') - payload end - private - - def title_str(name, notification) - case notification.type - when :mention then translate('push_notifications.mention.title', name: name) - when :follow then translate('push_notifications.follow.title', name: name) - when :favourite then translate('push_notifications.favourite.title', name: name) - when :reblog then translate('push_notifications.reblog.title', name: name) - end - end - - def body_str(notification) - case notification.type - when :mention then notification.target_status.text - when :follow then notification.from_account.note - when :favourite then notification.target_status.text - when :reblog then notification.target_status.text - end - end - - def url_str(notification) - case notification.type - when :mention then web_url("statuses/#{notification.target_status.id}") - when :follow then web_url("accounts/#{notification.from_account.id}") - when :favourite then web_url("statuses/#{notification.target_status.id}") - when :reblog then web_url("statuses/#{notification.target_status.id}") - end + def access_token + find_or_create_access_token.token end - def actions_arr(notification) - actions = - case notification.type - when :mention then [ - { - title: translate('push_notifications.mention.action_favourite'), - icon: full_asset_url('web-push-icon_favourite.png', skip_pipeline: true), - todo: 'request', - method: 'POST', - action: "/api/v1/statuses/#{notification.target_status.id}/favourite", - }, - ] - else [] - end - - should_hide = notification.type.equal?(:mention) && !notification.target_status.nil? && (notification.target_status.sensitive || !notification.target_status.spoiler_text.empty?) - can_boost = notification.type.equal?(:mention) && !notification.target_status.nil? && !notification.target_status.hidden? - - if should_hide - actions.insert(0, title: translate('push_notifications.mention.action_expand'), icon: full_asset_url('web-push-icon_expand.png', skip_pipeline: true), todo: 'expand', action: 'expand') - end - - if can_boost - actions << { title: translate('push_notifications.mention.action_boost'), icon: full_asset_url('web-push-icon_reblog.png', skip_pipeline: true), todo: 'request', method: 'POST', action: "/api/v1/statuses/#{notification.target_status.id}/reblog" } - end - - actions - end - - def image_str(notification) - return nil if notification.target_status.nil? || notification.target_status.media_attachments.empty? - - full_asset_url(notification.target_status.media_attachments.first.file.url(:small)) - end + private - def dir_str(body) - rtl?(body) ? 'rtl' : 'ltr' - end + def push_payload(message, ttl = 5.minutes.seconds) + # TODO: Make sure that the payload does not + # exceed 4KB - Webpush::PayloadTooLarge - def send_welcome_notification Webpush.payload_send( - message: JSON.generate( - title: translate('push_notifications.subscribed.title'), - icon: full_asset_url('android-chrome-192x192.png', skip_pipeline: true), - badge: full_asset_url('badge.png', skip_pipeline: true), - data: { - content: translate('push_notifications.subscribed.body'), - actions: [], - url: web_url('notifications'), - message: translate('push_notifications.group.title'), # Do not pass count, will be formatted in the ServiceWorker - } - ), + message: Oj.dump(message), endpoint: endpoint, p256dh: key_p256dh, auth: key_auth, + ttl: ttl, vapid: { subject: "mailto:#{Setting.site_contact_email}", private_key: Rails.configuration.x.vapid_private_key, public_key: Rails.configuration.x.vapid_public_key, - }, - ttl: 5 * 60 # 5 minutes + } ) end - def find_or_create_access_token(notification) + def message_from(notification) + serializable_resource = ActiveModelSerializers::SerializableResource.new(notification, serializer: Web::NotificationSerializer, scope: self, scope_name: :current_push_subscription) + serializable_resource.as_json + end + + def find_or_create_access_token Doorkeeper::AccessToken.find_or_create_for( Doorkeeper::Application.find_by(superapp: true), - notification.account.user.id, + session_activation.user_id, Doorkeeper::OAuth::Scopes.from_string('read write follow'), Doorkeeper.configuration.access_token_expires_in, Doorkeeper.configuration.refresh_token_enabled? ) end - - def decoder - @decoder ||= HTMLEntities.new - end end diff --git a/app/serializers/web/notification_serializer.rb b/app/serializers/web/notification_serializer.rb new file mode 100644 index 000000000..0fe75f3a8 --- /dev/null +++ b/app/serializers/web/notification_serializer.rb @@ -0,0 +1,168 @@ +# frozen_string_literal: true + +class Web::NotificationSerializer < ActiveModel::Serializer + include StreamEntriesHelper + + class DataSerializer < ActiveModel::Serializer + include RoutingHelper + include StreamEntriesHelper + include ActionView::Helpers::SanitizeHelper + + attributes :content, :nsfw, :url, :actions, + :access_token, :message + + def content + decoder.decode(strip_tags(body)) + end + + def dir + rtl?(body) ? 'rtl' : 'ltr' + end + + def nsfw + return if object.target_status.nil? + object.target_status.spoiler_text.presence + end + + def url + case object.type + when :mention + web_url("statuses/#{object.target_status.id}") + when :follow + web_url("accounts/#{object.from_account.id}") + when :favourite + web_url("statuses/#{object.target_status.id}") + when :reblog + web_url("statuses/#{object.target_status.id}") + end + end + + def actions + return @actions if defined?(@actions) + + @actions = [] + + if object.type == :mention + @actions << expand_action if collapsed? + @actions << favourite_action + @actions << reblog_action if rebloggable? + end + + @actions + end + + def access_token + return if actions.empty? + current_push_subscription.access_token + end + + def message + I18n.t('push_notifications.group.title') + end + + private + + def body + case object.type + when :mention + object.target_status.text + when :follow + object.from_account.note + when :favourite + object.target_status.text + when :reblog + object.target_status.text + end + end + + def decoder + @decoder ||= HTMLEntities.new + end + + def expand_action + { + title: I18n.t('push_notifications.mention.action_expand'), + icon: full_asset_url('web-push-icon_expand.png', skip_pipeline: true), + todo: 'expand', + action: 'expand', + } + end + + def favourite_action + { + title: I18n.t('push_notifications.mention.action_favourite'), + icon: full_asset_url('web-push-icon_favourite.png', skip_pipeline: true), + todo: 'request', + method: 'POST', + action: "/api/v1/statuses/#{object.target_status.id}/favourite", + } + end + + def reblog_action + { + title: I18n.t('push_notifications.mention.action_boost'), + icon: full_asset_url('web-push-icon_reblog.png', skip_pipeline: true), + todo: 'request', + method: 'POST', + action: "/api/v1/statuses/#{object.target_status.id}/reblog", + } + end + + def collapsed? + !object.target_status.nil? && (object.target_status.sensitive? || object.target_status.spoiler_text.present?) + end + + def rebloggable? + !object.target_status.nil? && !object.target_status.hidden? + end + end + + attributes :title, :dir, :image, :badge, :tag, + :timestamp, :icon + + has_one :data + + def title + case object.type + when :mention + I18n.t('push_notifications.mention.title', name: name) + when :follow + I18n.t('push_notifications.follow.title', name: name) + when :favourite + I18n.t('push_notifications.favourite.title', name: name) + when :reblog + I18n.t('push_notifications.reblog.title', name: name) + end + end + + def image + return if object.target_status.nil? || object.target_status.media_attachments.empty? + full_asset_url(object.target_status.media_attachments.first.file.url(:small)) + end + + def badge + full_asset_url('badge.png', skip_pipeline: true) + end + + def tag + object.id + end + + def timestamp + object.created_at + end + + def icon + object.from_account.avatar_static_url + end + + def data + object + end + + private + + def name + display_name(object.from_account) + end +end diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 58d7a6638..089d6dfa6 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -21,7 +21,7 @@ ca: real_conversation_body: Amb 500 caràcters a la teva disposició i suport per a continguts granulars i avisos multimèdia, pots expressar-te de la manera que vulguis. real_conversation_title: Construït per a converses reals within_reach_body: Diverses aplicacions per a iOS, Android i altres plataformes gràcies a un ecosistema API amable amb el desenvolupador, et permet mantenir-te al dia amb els teus amics en qualsevol lloc.. - within_reach_title: Sempre a l'abast + within_reach_title: Sempre a l'abast find_another_instance: Troba altres instàncies generic_description: "%{domain} és un servidor a la xarxa" hosted_on: Mastodon allotjat a %{domain} @@ -215,7 +215,7 @@ ca: body: "%{reporter} ha informat de %{target}" subject: Nou informe per a %{instance} (#%{id}) application_mailer: - salutation: '%{name},' + salutation: "%{name}," settings: 'Canviar preferències de correu: %{link}' signature: Notificacions de Mastodon desde %{instance} view: 'Vista:' @@ -358,9 +358,6 @@ ca: title: "%{name} t'ha mencionat" reblog: title: "%{name} t'ha retootejat" - subscribed: - body: Ara pots rebre notificacions push. - title: Subscripció registrada remote_follow: acct: Escriu el usuari@domini de la persona que vols seguir missing_resource: No s'ha pogut trobar la URL de redirecció necessaria per el compte. @@ -432,74 +429,7 @@ ca: reblogged: retooteado sensitive_content: Contingut sensible terms: - body_html: | -

Política de privacitat

- -

Quina informació recollim?

- -

Recopilem informació teva quan et registres en aquesta instància i recopilem dades quan participes en el fòrum llegint, escrivint i avaluant el contingut aquí compartit.

- -

En registrar-te en aquesta instància, se't pot demanar que introduexisu el teu nom i l'adreça de correu electrònic. També pots visitar el nostre lloc sense registrar-te. La teva adreça de correu electrònic es verificarà mitjançant un correu electrònic que conté un enllaç únic. Si es visita aquest enllaç, sabem que controles l'adreça de correu electrònic.

- -

Quan es registra i publica, registrem l'adreça IP de la qual es va originar la publicació. També podrem conservar els registres del servidor que inclouen l'adreça IP de cada sol·licitud al nostre servidor.

- -

Per a què utilitzem la teva informació?

- -

Qualsevol de la informació que recopilem de tu pot utilitzar-se d'una de les maneres següents:

- -
    -
  • Per a personalitzar la teva experiència — la teva informació ens ajuda a respondre millor a les teves necessitats individuals.
  • -
  • Per millorar el nostre lloc — ens esforcem contínuament per millorar les nostres ofertes de llocs basats en la informació i els comentaris que rebem de tu.
  • -
  • Per millorar el servei al client — la teva informació ens ajuda a respondre més eficaçment a les teves sol·licituds de servei al client i a les necessitats de suport.
  • -
  • Per enviar correus electrònics periòdics — l'adreça electrònica que proporcionis es pot utilitzar per enviar-te informació, notificacions que sol·licitis sobre canvis en temes o en resposta al teu nom d'usuari, respondre a les consultes i/o altres sol·licituds o preguntes.
  • -
- -

Com protegim la teva informació?

- -

Implementem diverses mesures de seguretat per mantenir la seguretat de la teva informació personal quan introdueixes, envies o accedeixes a la teva informació personal.

- -

Quina és la nostre política de retenció de dades?

- -

Farem un esforç de bona fe per a:

- -
    -
  • Conserva els registres de servidor que continguin l'adreça IP de totes les sol·licituds a aquest servidor no més de 90 dies.
  • -
  • Conserva les adreces IP associades als usuaris registrats i les seves publicacions no més de 5 anys.
  • -
- -

Utilitzem galetes?

- -

Sí. Les cookies són fitxers petits que un lloc o el proveïdor de serveis transfereix al disc dur del vostre ordinador a través del navegador web (si ho permet). Aquestes galetes permeten al lloc reconèixer el vostre navegador i, si teniu un compte registrat, associar-lo al vostre compte registrat.

- -

Utilitzem cookies per comprendre i desar les vostres preferències per a futures visites i compilar dades agregades sobre el trànsit del lloc i la interacció del lloc, de manera que podrem oferir millors experiències i eines del lloc en el futur. Podem contractar amb proveïdors de serveis de tercers per ajudar-nos a comprendre millor els visitants del nostre lloc. Aquests proveïdors de serveis no estan autoritzats a utilitzar la informació recollida en nom nostre, excepte per ajudar-nos a dur a terme i millorar el nostre negoci.

- -

Publiquem informació al exterior?

- -

No venem, comercialitzem ni transmetem a tercers la vostra informació d'identificació personal. Això no inclou tercers de confiança que ens ajudin a operar el nostre lloc, a dur a terme el nostre negoci o a fer-ho, sempre que aquestes parts acceptin mantenir confidencial aquesta informació. També podem publicar la vostra informació quan creiem que l'alliberament és apropiat per complir amb la llei, fer complir les polítiques del nostre lloc o protegir els nostres drets o altres drets, propietat o seguretat. No obstant això, la informació de visitant que no sigui personalment identificable es pot proporcionar a altres parts per a la comercialització, la publicitat o altres usos.

- -

Vincles de tercers

- -

De tant en tant, segons el nostre criteri, podem incloure o oferir productes o serveis de tercers al nostre lloc. Aquests llocs de tercers tenen polítiques de privadesa separades i independents. Per tant, no tenim responsabilitat ni responsabilitat civil pel contingut i les activitats d'aquests llocs enllaçats. No obstant això, busquem protegir la integritat del nostre lloc i donem la benvinguda a qualsevol comentari sobre aquests llocs.

- -

Compliment de la Llei de protecció de la privacitat en línia dels nens

- -

El nostre lloc, productes i serveis estan dirigits a persones que tenen almenys 13 anys. Si aquest servidor es troba als EUA, i teniu menys de 13 anys, segons els requisits de COPPA (Children's Online Privacy Protection Act) no feu servir aquest lloc.

- -

Només la política de privacitat en línia

- -

Aquesta política de privacitat en línia només s'aplica a la informació recopilada a través del nostre lloc i no a la informació recopilada fora de línia.

- - - -

En utilitzar el nostre lloc, accepta la política de privadesa del nostre lloc web.

- -

Canvis a la nostra política de privacitat

- -

Si decidim canviar la nostra política de privadesa, publicarem aquests canvis en aquesta pàgina.

- -

Aquest document és CC-BY-SA. Es va actualitzar per última vegada el 31 de maig de 2013.

- -

Originalment adaptat a la política de privadesa del Discurs.

+ body_html: "

Política de privacitat

\n\n

Quina informació recollim?

\n\n

Recopilem informació teva quan et registres en aquesta instància i recopilem dades quan participes en el fòrum llegint, escrivint i avaluant el contingut aquí compartit.

\n\n

En registrar-te en aquesta instància, se't pot demanar que introduexisu el teu nom i l'adreça de correu electrònic. També pots visitar el nostre lloc sense registrar-te. La teva adreça de correu electrònic es verificarà mitjançant un correu electrònic que conté un enllaç únic. Si es visita aquest enllaç, sabem que controles l'adreça de correu electrònic.

\n\n

Quan es registra i publica, registrem l'adreça IP de la qual es va originar la publicació. També podrem conservar els registres del servidor que inclouen l'adreça IP de cada sol·licitud al nostre servidor.

\n\n

Per a què utilitzem la teva informació?

\n\n

Qualsevol de la informació que recopilem de tu pot utilitzar-se d'una de les maneres següents:

\n\n
    \n
  • Per a personalitzar la teva experiència — la teva informació ens ajuda a respondre millor a les teves necessitats individuals.
  • \n
  • Per millorar el nostre lloc — ens esforcem contínuament per millorar les nostres ofertes de llocs basats en la informació i els comentaris que rebem de tu.
  • \n
  • Per millorar el servei al client — la teva informació ens ajuda a respondre més eficaçment a les teves sol·licituds de servei al client i a les necessitats de suport.
  • \n
  • Per enviar correus electrònics periòdics — l'adreça electrònica que proporcionis es pot utilitzar per enviar-te informació, notificacions que sol·licitis sobre canvis en temes o en resposta al teu nom d'usuari, respondre a les consultes i/o altres sol·licituds o preguntes.
  • \n
\n\n

Com protegim la teva informació?

\n\n

Implementem diverses mesures de seguretat per mantenir la seguretat de la teva informació personal quan introdueixes, envies o accedeixes a la teva informació personal.

\n\n

Quina és la nostre política de retenció de dades?

\n\n

Farem un esforç de bona fe per a:

\n\n
    \n
  • Conserva els registres de servidor que continguin l'adreça IP de totes les sol·licituds a aquest servidor no més de 90 dies.
  • \n
  • Conserva les adreces IP associades als usuaris registrats i les seves publicacions no més de 5 anys.
  • \n
\n\n

Utilitzem galetes?

\n\n

Sí. Les cookies són fitxers petits que un lloc o el proveïdor de serveis transfereix al disc dur del vostre ordinador a través del navegador web (si ho permet). Aquestes galetes permeten al lloc reconèixer el vostre navegador i, si teniu un compte registrat, associar-lo al vostre compte registrat.

\n\n

Utilitzem cookies per comprendre i desar les vostres preferències per a futures visites i compilar dades agregades sobre el trànsit del lloc i la interacció del lloc, de manera que podrem oferir millors experiències i eines del lloc en el futur. Podem contractar amb proveïdors de serveis de tercers per ajudar-nos a comprendre millor els visitants del nostre lloc. Aquests proveïdors de serveis no estan autoritzats a utilitzar la informació recollida en nom nostre, excepte per ajudar-nos a dur a terme i millorar el nostre negoci.

\n\n

Publiquem informació al exterior?

\n\n

No venem, comercialitzem ni transmetem a tercers la vostra informació d'identificació personal. Això no inclou tercers de confiança que ens ajudin a operar el nostre lloc, a dur a terme el nostre negoci o a fer-ho, sempre que aquestes parts acceptin mantenir confidencial aquesta informació. També podem publicar la vostra informació quan creiem que l'alliberament és apropiat per complir amb la llei, fer complir les polítiques del nostre lloc o protegir els nostres drets o altres drets, propietat o seguretat. No obstant això, la informació de visitant que no sigui personalment identificable es pot proporcionar a altres parts per a la comercialització, la publicitat o altres usos.

\n\n

Vincles de tercers

\n\n

De tant en tant, segons el nostre criteri, podem incloure o oferir productes o serveis de tercers al nostre lloc. Aquests llocs de tercers tenen polítiques de privadesa separades i independents. Per tant, no tenim responsabilitat ni responsabilitat civil pel contingut i les activitats d'aquests llocs enllaçats. No obstant això, busquem protegir la integritat del nostre lloc i donem la benvinguda a qualsevol comentari sobre aquests llocs.

\n\n

Compliment de la Llei de protecció de la privacitat en línia dels nens

\n\n

El nostre lloc, productes i serveis estan dirigits a persones que tenen almenys 13 anys. Si aquest servidor es troba als EUA, i teniu menys de 13 anys, segons els requisits de COPPA (Children's Online Privacy Protection Act) no feu servir aquest lloc.

\n\n

Només la política de privacitat en línia

\n\n

Aquesta política de privacitat en línia només s'aplica a la informació recopilada a través del nostre lloc i no a la informació recopilada fora de línia.

\n\n

El vostre consentiment

\n\n

En utilitzar el nostre lloc, accepta la política de privadesa del nostre lloc web.

\n\n

Canvis a la nostra política de privacitat

\n\n

Si decidim canviar la nostra política de privadesa, publicarem aquests canvis en aquesta pàgina.

\n\n

Aquest document és CC-BY-SA. Es va actualitzar per última vegada el 31 de maig de 2013.

\n\n

Originalment adaptat a la política de privadesa del Discurs.

\n" title: "%{instance} Condicions del servei i política de privadesa" time: formats: diff --git a/config/locales/en.yml b/config/locales/en.yml index 1a9926edd..2599b6078 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -382,9 +382,6 @@ en: title: "%{name} mentioned you" reblog: title: "%{name} boosted your status" - subscribed: - body: You can now receive push notifications. - title: Subscription registered! remote_follow: acct: Enter your username@domain you want to follow from missing_resource: Could not find the required redirect URL for your account diff --git a/config/locales/fa.yml b/config/locales/fa.yml index 0c575e23e..6959134a6 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -357,9 +357,6 @@ fa: title: "%{name} از شما نام برد" reblog: title: "%{name} نوشتهٔ شما را بازبوقید" - subscribed: - body: از این به بعد سرور می‌تواندبه شما اعلان‌های تازه بفرستد . - title: عضویت ثبت شد! remote_follow: acct: نشانی حساب username@domain خود را این‌جا بنویسید missing_resource: نشانی اینترنتی برای رسیدن به حساب شما پیدا نشد diff --git a/config/locales/fr.yml b/config/locales/fr.yml index a7c5bf144..6d7479cc9 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -353,9 +353,6 @@ fr: title: "%{name} vous a mentionné·e" reblog: title: "%{name} a partagé⋅e votre statut" - subscribed: - body: Vous pouvez désormais recevoir des notifications push. - title: Abonnements aux notifications push remote_follow: acct: Entrez votre pseudo@instance depuis lequel vous voulez suivre ce⋅tte utilisateur⋅rice missing_resource: L’URL de redirection n’a pas pu être trouvée diff --git a/config/locales/ja.yml b/config/locales/ja.yml index e4b18529c..4f6f92866 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -381,9 +381,6 @@ ja: title: "%{name} さんから返信がありました" reblog: title: あなたのトゥートが %{name} さんにブーストされました - subscribed: - body: あなたはプッシュ通知を受け取ることが出来ます - title: Subscription が登録されました remote_follow: acct: あなたの ユーザー名@ドメイン を入力してください missing_resource: リダイレクト先が見つかりませんでした diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 6562767a9..e738d5662 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -353,9 +353,6 @@ nl: title: "%{name} vermeldde jou" reblog: title: "%{name} boostte jouw toot" - subscribed: - body: Je kan nu pushmeldingen ontvangen. - title: Aanmelding bevestigd! remote_follow: acct: Geef jouw account@domein.tld op waarvandaan je wilt volgen missing_resource: Kon vereiste doorverwijzings-URL voor jouw account niet vinden diff --git a/config/locales/oc.yml b/config/locales/oc.yml index 99c377f18..ba7993d7c 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -448,9 +448,6 @@ oc: title: "%{name} vos a mencionat" reblog: title: "%{name} a partejat vòstre estatut" - subscribed: - body: Podètz ara recebre las notificacions push. - title: Abonament enregistrat ! remote_follow: acct: Picatz vòstre utilizaire@instància que cal utilizar per sègre aqueste utilizaire missing_resource: URL de redireccion pas trobada diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 9f0d9bb29..2b2cbb26b 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -224,8 +224,6 @@ pl: settings: 'Zmień ustawienia powiadamiania: %{link}' signature: Powiadomienie Mastodona z instancji %{instance} view: 'Zobacz:' - applications: - invalid_url: Ten URL jest nieprawidłowy applications: created: Pomyślnie utworzono aplikację destroyed: Pomyślnie usunięto aplikację @@ -375,9 +373,6 @@ pl: title: "%{name} wspomniał o Tobie" reblog: title: "%{name} podbił Twój status" - subscribed: - body: Otrzymujesz teraz powiadomienia push. - title: Zarejestrowano subskrypcję! remote_follow: acct: Podaj swój adres (nazwa@domena), z którego chcesz śledzić missing_resource: Nie udało się znaleźć adresu przekierowania z Twojej domeny diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 0156f0e95..5c87ebf26 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -278,9 +278,6 @@ ru: title: Вас упомянул(а) %{name} reblog: title: "%{name} продвинул(а) Ваш статус" - subscribed: - body: Теперь Вы можете получать push-уведомления. - title: Подписка зарегистрирована! remote_follow: acct: Введите username@domain, откуда Вы хотите подписаться missing_resource: Поиск требуемого перенаправления URL для Вашего аккаунта завершился неудачей -- cgit From 1a0df58878430d340381112deffcc4c6e68b2529 Mon Sep 17 00:00:00 2001 From: Damien Erambert Date: Fri, 1 Sep 2017 05:09:01 -0700 Subject: Update FR locales (#4714) * Make the fr locales up-to-date with the last changes (new profile view, applications) * Use the same wording for toots in fr.yml and fr.json * Translate the pin related strings * Translate pin-related locales on the front-end * Add missing locales in doorkeeper.fr.yml and remove un-used ones * Change "posts" back to "status" in the /about/more page in fr.yml * Fix typos for "status" in fr.yml * fix typo for "status" in fr.json * Remove duplicate string * Non-breaking space before punctuation * 'Better' translation for "unpin" * Put back 'pouet' where it was already * Fix * Fix --- app/javascript/mastodon/locales/fr.json | 6 +++--- config/locales/doorkeeper.fr.yml | 29 ++--------------------------- config/locales/fr.yml | 31 ++++++++++++++++++++++++++++++- 3 files changed, 35 insertions(+), 31 deletions(-) (limited to 'config/locales/fr.yml') diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 479b8de7d..c6862669b 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -43,7 +43,7 @@ "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 privés.", "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.", @@ -168,7 +168,7 @@ "status.mention": "Mentionner", "status.mute_conversation": "Masquer la conversation", "status.open": "Déplier ce statut", - "status.pin": "Pin on profile", + "status.pin": "Épingler sur le profil", "status.reblog": "Partager", "status.reblogged_by": "{name} a partagé :", "status.reply": "Répondre", @@ -180,7 +180,7 @@ "status.show_less": "Replier", "status.show_more": "Déplier", "status.unmute_conversation": "Ne plus masquer la conversation", - "status.unpin": "Unpin from profile", + "status.unpin": "Retirer du profil", "tabs_bar.compose": "Composer", "tabs_bar.federated_timeline": "Fil public global", "tabs_bar.home": "Accueil", diff --git a/config/locales/doorkeeper.fr.yml b/config/locales/doorkeeper.fr.yml index 0e74532c1..487018209 100644 --- a/config/locales/doorkeeper.fr.yml +++ b/config/locales/doorkeeper.fr.yml @@ -1,28 +1,14 @@ --- fr: - activemodel: - errors: - models: - remote_follow: - attributes: - acct: - blank: Le nom d’utilisateur ne doit pas être vide activerecord: attributes: doorkeeper/application: name: Nom redirect_uri: L’URL de redirection + scope: Portée + website: Site Web de l'application errors: - messages: - record_invalid: Données invalides models: - account: - attributes: - note: - too_long: Description trop longue - username: - blank: Identifiant vide - taken: Identifiant déjà pris doorkeeper/application: attributes: redirect_uri: @@ -30,17 +16,6 @@ fr: invalid_uri: doit être une URL valide. relative_uri: doit être une URL absolue. secured_uri: doit être une URL HTTP/SSL. - user: - attributes: - email: - blank: Courriel vide - invalid: Courriel invalide - taken: Courriel pris - password: - blank: Mot de passe vide - too_short: Mot de passe trop court - password_confirmation: - confirmation: Le mot de passe ne correspond pas doorkeeper: applications: buttons: diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 6d7479cc9..2c289471d 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -5,9 +5,14 @@ fr: about_this: À propos closed_registrations: Les inscriptions sont actuellement fermées sur cette instance. Cependant, vous pouvez trouver une autre instance sur laquelle vous créer un compte et à partir de laquelle vous pourrez accéder au même réseau. contact: Contact + contact_missing: Manquant + contact_unavailable: Non disponible description_headline: Qu’est-ce que %{domain} ? domain_count_after: autres instances domain_count_before: Connectés à + extended_description_html: | +

Un bon endroit pour les règles

+

La description étendue n'a pas été remplie.

features: humane_approach_body: Ayant appris des échecs d’autres réseaux, Mastodon à l’ambition de combattre l’abus des médias sociaux en effectuant des choix de conception éthiques. humane_approach_title: Une approche plus humaine @@ -23,7 +28,7 @@ fr: learn_more: En savoir plus other_instances: Liste des instances source_code: Code source - status_count_after: posts + status_count_after: statuts status_count_before: Ayant publié user_count_after: utilisateur⋅ice⋅s user_count_before: Abrite @@ -32,12 +37,16 @@ fr: follow: Suivre followers: Abonné⋅es following: Abonnements + media: Médias nothing_here: Rien à voir ici ! people_followed_by: Personnes suivies par %{name} people_who_follow: Personnes qui suivent %{name} posts: Statuts + posts_with_replies: Statuts & réponses remote_follow: Suivre à distance reserved_username: Ce nom d’utilisateur⋅ice est réservé + roles: + admin: Admin unfollow: Ne plus suivre admin: accounts: @@ -52,6 +61,7 @@ fr: feed_url: URL du flux followers: Abonné⋅es follows: Abonnements + inbox_url: URL d'entrée ip: Adresse IP location: all: Tous @@ -71,8 +81,10 @@ fr: alphabetic: Alphabétique most_recent: Plus récent title: Tri + outbox_url: URL de sortie perform_full_suspension: Effectuer une suspension complète profile_url: URL du profil + protocol: Protocole public: Public push_subscription_expires: Expiration de l’abonnement PuSH redownload: Rafraîchir les avatars @@ -104,12 +116,14 @@ fr: 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: "Silence rendra les messages des comptes concernés invisibles à ceux qui ne les suivent pas. Suspend supprimera tout le contenu des comptes concernés, les médias, et les données du profil." + noop: Aucune silence: Masqué 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. severities: + noop: Aucune silence: Masquer suspend: Suspendre severity: Séverité @@ -212,7 +226,13 @@ fr: signature: Notifications de Mastodon depuis %{instance} view: 'Voir :' applications: + created: Application créée avec succès + destroyed: Application supprimée avec succès invalid_url: L’URL fournie est invalide + regenerate_token: Regénérer le jeton d'accès + token_regenerated: Jeton d'accès regénéré avec succès + warning: Soyez prudent⋅e avec ces données. Ne les partagez pas ! + your_token: Votre jeton d'accès auth: agreement_html: En vous inscrivant, vous souscrivez à nos conditions d’utilisation ainsi qu’à notre politique de confidentialité. change_password: Sécurité @@ -346,6 +366,8 @@ fr: title: "%{name} à mis votre statut en favori" follow: title: "%{name} vous suit" + group: + title: "%{count} notifications" mention: action_boost: Partager action_expand: Montrer plus @@ -401,6 +423,7 @@ fr: authorized_apps: Applications autorisées back: Retour vers Mastodon delete: Suppression de compte + development: Développement edit_profile: Modifier le profil export: Export de données followers: Abonné⋅es autorisé⋅es @@ -408,9 +431,14 @@ fr: preferences: Préférences settings: Réglages two_factor_authentication: Identification à deux facteurs + your_apps: Vos applications statuses: open_in_web: Ouvrir sur le web over_character_limit: limite de caractères dépassée de %{max} caractères + pin_errors: + ownership: Vous ne pouvez pas épingler un statut ne vous appartenant pas + private: Les statuts non-publics ne peuvent pas être épinglés + reblog: Un partage ne peut pas être épinglé show_more: Afficher plus visibilities: private: Abonné⋅es uniquement @@ -421,6 +449,7 @@ fr: unlisted_long: Tout le monde peut voir vos statuts mais ils ne seront pas sur listés sur les fils publics stream_entries: click_to_show: Cliquer pour afficher + pinned: Statut épinglé reblogged: partagé sensitive_content: Contenu sensible terms: -- cgit From 0b32338e3f276e2aa6bd55162753f1b418283dbc Mon Sep 17 00:00:00 2001 From: m4sk1n Date: Sat, 2 Sep 2017 01:52:28 +0200 Subject: Add link to 'noscript' message (#4561) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add link to 'noscript' message Signed-off-by: Marcin Mikołajczak * remove indent --- app/views/home/index.html.haml | 2 +- config/locales/ca.yml | 2 +- config/locales/en.yml | 2 +- config/locales/fa.yml | 2 +- config/locales/fr.yml | 2 +- config/locales/ja.yml | 2 +- config/locales/ko.yml | 2 +- config/locales/nl.yml | 2 +- config/locales/oc.yml | 2 +- config/locales/pl.yml | 2 +- config/locales/ru.yml | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) (limited to 'config/locales/fr.yml') diff --git a/app/views/home/index.html.haml b/app/views/home/index.html.haml index 75fe59f00..6c93281db 100644 --- a/app/views/home/index.html.haml +++ b/app/views/home/index.html.haml @@ -9,4 +9,4 @@ = image_tag asset_pack_path('logo.svg'), alt: 'Mastodon' %div - = t('errors.noscript') + = t('errors.noscript_html') diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 089d6dfa6..b6bff8288 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -275,7 +275,7 @@ ca: content: La verificació de seguretat ha fallat. Bloquejes les galetes? title: La verificació de seguretat ha fallat '429': Estrangulat - noscript: Per utilitzar Mastodon si us plau activa JavaScript. + noscript_html: Per utilitzar Mastodon si us plau activa JavaScript. exports: blocks: Persones que has bloquejat csv: CSV diff --git a/config/locales/en.yml b/config/locales/en.yml index 2599b6078..4160745f8 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -288,7 +288,7 @@ en: content: Security verification failed. Are you blocking cookies? title: Security verification failed '429': Throttled - noscript: To use the Mastodon web application, please enable JavaScript. Alternatively, find a native app for Mastodon for your platform. + noscript_html: To use the Mastodon web application, please enable JavaScript. Alternatively, try one of the native apps for Mastodon for your platform. exports: blocks: You block csv: CSV diff --git a/config/locales/fa.yml b/config/locales/fa.yml index 6959134a6..08ffb4484 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -274,7 +274,7 @@ fa: content: تأیید امنیتی انجام نشد. آیا مرورگر شما کوکی‌ها را مسدود می‌کند؟ title: تأیید امنیتی شکست خورد '429': درخواست‌های بیش از حد - noscript: برای استفاده از نسخهٔ تحت وب ماستدون، لطفاً جاوااسکریپت را فعال کنید. یا به جایش می‌توانید یک اپ ماستدون را به‌کار ببرید. + noscript_html: برای استفاده از نسخهٔ تحت وب ماستدون، لطفاً جاوااسکریپت را فعال کنید. یا به جایش می‌توانید یک اپ ماستدون را به‌کار ببرید. exports: blocks: حساب‌های مسدودشده csv: CSV diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 2c289471d..8029d8bd5 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -293,7 +293,7 @@ fr: 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 + noscript_html: Pour utiliser Mastodon, veuillez activer JavaScript exports: blocks: Vous bloquez csv: CSV diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 4f6f92866..8a0fb5f52 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -287,7 +287,7 @@ ja: content: セキュリティ認証に失敗しました。Cookieをブロックしていませんか? title: セキュリティ認証に失敗 '429': リクエストの制限に達しました。 - noscript: Mastodonのウェブアプリケーションを利用する場合はJavaScriptを有効にしてください。またはあなたのプラットフォーム向けのMastodonネイティブアプリを探すことができます。 + noscript_html: Mastodonのウェブアプリケーションを利用する場合はJavaScriptを有効にしてください。またはあなたのプラットフォーム向けのMastodonネイティブアプリを探すことができます。 exports: blocks: ブロック csv: CSV diff --git a/config/locales/ko.yml b/config/locales/ko.yml index f3bde5bbb..f98059526 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -220,7 +220,7 @@ ko: content: 보안 인증에 실패했습니다. Cookie를 차단하고 있진 않습니까? title: 보안 인증 실패 '429': 요청 횟수 제한에 도달했습니다. - noscript: Mastodon을 사용하기 위해서는 JavaScript를 켜 주십시오. + noscript_html: Mastodon을 사용하기 위해서는 JavaScript를 켜 주십시오. exports: blocks: 차단 csv: CSV diff --git a/config/locales/nl.yml b/config/locales/nl.yml index e738d5662..50ae5508b 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -272,7 +272,7 @@ nl: content: Veiligheidsverificatie mislukt. Blokkeer je toevallig cookies? title: Veiligheidsverificatie mislukt '429': Te veel verbindingsaanvragen. - noscript: Schakel JavaScript in om de webapplicatie van Mastodon te gebruiken. Als alternatief kan je een Mastodon-app zoeken voor jouw platform. + noscript_html: Schakel JavaScript in om de webapplicatie van Mastodon te gebruiken. Als alternatief kan je een Mastodon-app zoeken voor jouw platform. exports: blocks: Jij blokkeert csv: CSV diff --git a/config/locales/oc.yml b/config/locales/oc.yml index ba7993d7c..019d3b196 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -365,7 +365,7 @@ oc: content: Verificacion de seguretat fracassada. Blocatz los cookies ? title: Verificacion de seguretat fracassada '429': Lo servidor mòla (subrecargada) - noscript: Per utilizar l’aplicacion Mastodon, mercés d’activar JavaScript. Autrament podètz utilizar una aplicacion nativa Mastodon per vòstra plataforma. + noscript_html: Per utilizar l’aplicacion web de Mastodon, mercés d’activar JavaScript. O podètz utilizar una aplicacion per vòstra plataforma coma alernativa. exports: blocks: Personas que blocatz csv: CSV diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 2b2cbb26b..bf6d19db0 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -286,7 +286,7 @@ pl: content: Sprawdzanie bezpieczeństwa nie powiodło się. Czy blokujesz pliki cookie? title: Sprawdzanie bezpieczeństwa nie powiodło się '429': Uduszono - noscript: Aby korzystać z aplikacji Mastodon, włącz JavaScript. Możesz też skorzystać z natywnej aplikacji obsługującej Twoje urządzenie. + noscript_html: Aby korzystać z aplikacji Mastodon, włącz JavaScript. Możesz też skorzystać z jednej z natywnych aplikacji obsługującej Twoje urządzenie. exports: blocks: Blokujesz csv: CSV diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 5c87ebf26..52cb71c60 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -193,7 +193,7 @@ ru: content: Проверка безопасности не удалась. Возможно, Вы блокируете cookies? title: Проверка безопасности не удалась. '429': Слишком много запросов - noscript: Для работы с Mastodon, пожалуйста, включите JavaScript. + noscript_html: Для работы с Mastodon, пожалуйста, включите JavaScript. exports: blocks: Список блокировки csv: CSV -- cgit From 8b12e3cc7f3d0876b7cfd57999e70fd001c6c45c Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sun, 3 Sep 2017 15:17:34 +0200 Subject: Fix short number locales (#4790) Overwrite values from rails-i18n by manually overwriting in every locale. We want numbers like 1.5K in every language --- config/locales/ar.yml | 11 +++++++++++ config/locales/bg.yml | 11 +++++++++++ config/locales/ca.yml | 11 +++++++++++ config/locales/de.yml | 11 +++++++++++ config/locales/eo.yml | 11 +++++++++++ config/locales/es.yml | 11 +++++++++++ config/locales/fa.yml | 11 +++++++++++ config/locales/fi.yml | 11 +++++++++++ config/locales/fr.yml | 11 +++++++++++ config/locales/he.yml | 11 +++++++++++ config/locales/hr.yml | 11 +++++++++++ config/locales/hu.yml | 11 +++++++++++ config/locales/id.yml | 11 +++++++++++ config/locales/io.yml | 11 +++++++++++ config/locales/it.yml | 11 +++++++++++ config/locales/ko.yml | 11 +++++++++++ config/locales/nl.yml | 11 +++++++++++ config/locales/no.yml | 11 +++++++++++ config/locales/oc.yml | 2 +- config/locales/pl.yml | 11 +++++++++++ config/locales/pt-BR.yml | 11 +++++++++++ config/locales/pt.yml | 11 +++++++++++ config/locales/ru.yml | 11 +++++++++++ config/locales/th.yml | 11 +++++++++++ config/locales/tr.yml | 11 +++++++++++ config/locales/uk.yml | 11 +++++++++++ config/locales/zh-CN.yml | 11 +++++++++++ config/locales/zh-HK.yml | 11 +++++++++++ config/locales/zh-TW.yml | 11 +++++++++++ 29 files changed, 309 insertions(+), 1 deletion(-) (limited to 'config/locales/fr.yml') diff --git a/config/locales/ar.yml b/config/locales/ar.yml index 575c5114c..cda9a2fda 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -108,6 +108,17 @@ ar: reblog: body: 'Your status was boosted by %{name}:' subject: "%{name} boosted your status" + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T + unit: '' pagination: next: التالي prev: السابق diff --git a/config/locales/bg.yml b/config/locales/bg.yml index e7c3e1ef6..13d0394a3 100644 --- a/config/locales/bg.yml +++ b/config/locales/bg.yml @@ -108,6 +108,17 @@ bg: reblog: body: 'Твоята публикация беше споделена от %{name}:' subject: "%{name} сподели публикацията ти" + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T + unit: '' pagination: next: Напред prev: Назад diff --git a/config/locales/ca.yml b/config/locales/ca.yml index b6bff8288..6a92b7f1b 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -340,6 +340,17 @@ ca: reblog: body: "%{name} ha retootejat el teu estat" subject: "%{name} ha retootejat el teu estat" + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T + unit: '' pagination: next: Pròxim prev: Anterior diff --git a/config/locales/de.yml b/config/locales/de.yml index 379eb8e42..de6c86737 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -239,6 +239,17 @@ de: reblog: body: 'Dein Beitrag wurde von %{name} geteilt:' subject: "%{name} teilte deinen Beitrag." + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T + unit: '' pagination: next: Vorwärts prev: Zurück diff --git a/config/locales/eo.yml b/config/locales/eo.yml index f8b5ec0ac..21def0c5f 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -103,6 +103,17 @@ eo: reblog: body: "%{name} diskonigis vian mesaĝon:" subject: "%{name} diskonigis vian mesaĝon" + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T + unit: '' pagination: next: Sekva prev: Malsekva diff --git a/config/locales/es.yml b/config/locales/es.yml index d2d1de14f..a02330521 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -108,6 +108,17 @@ es: reblog: body: "%{name} ha retooteado tu estado" subject: "%{name} ha retooteado tu estado" + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T + unit: '' pagination: next: Próximo prev: Anterior diff --git a/config/locales/fa.yml b/config/locales/fa.yml index 08ffb4484..ba726fc75 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -339,6 +339,17 @@ fa: reblog: body: "%{name} نوشتهٔ شما را بازبوقید:" subject: "%{name} نوشتهٔ شما را بازبوقید" + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T + unit: '' pagination: next: بعدی prev: قبلی diff --git a/config/locales/fi.yml b/config/locales/fi.yml index b748f7184..08ae90447 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -103,6 +103,17 @@ fi: reblog: body: 'Sinun statustasi boostasi %{name}:' subject: "%{name} boostasi statustasi" + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T + unit: '' pagination: next: Seuraava prev: Edellinen diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 8029d8bd5..6198a5454 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -358,6 +358,17 @@ fr: reblog: body: "%{name} a partagé votre statut :" subject: "%{name} a partagé votre statut" + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T + unit: '' pagination: next: Suivant prev: Précédent diff --git a/config/locales/he.yml b/config/locales/he.yml index f04e8ad62..84d6d8468 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -264,6 +264,17 @@ he: reblog: body: 'חצרוצך הודהד על ידי %{name}:' subject: חצרוצך הודהד על ידי%{name} + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T + unit: '' pagination: next: הבא prev: הקודם diff --git a/config/locales/hr.yml b/config/locales/hr.yml index 52a8bd35f..581912420 100644 --- a/config/locales/hr.yml +++ b/config/locales/hr.yml @@ -105,6 +105,17 @@ hr: reblog: body: 'Tvoj status je potaknut od %{name}:' subject: "%{name} je potakao tvoj status" + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T + unit: '' pagination: next: Sljedeći prev: Prošli diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 53319a673..77551223f 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -45,6 +45,17 @@ hu: reblog: body: 'Az állapotod reblogolta %{name}:' subject: "%{name} reblogolta az állapotod" + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T + unit: '' pagination: next: Következő prev: Előző diff --git a/config/locales/id.yml b/config/locales/id.yml index c76b3d6bb..f3a6649d1 100644 --- a/config/locales/id.yml +++ b/config/locales/id.yml @@ -254,6 +254,17 @@ id: reblog: body: 'Status anda di-boost oleh %{name}:' subject: "%{name} mem-boost status anda" + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T + unit: '' pagination: next: Selanjutnya prev: Sebelumnya diff --git a/config/locales/io.yml b/config/locales/io.yml index 112771ee4..4114e5231 100644 --- a/config/locales/io.yml +++ b/config/locales/io.yml @@ -239,6 +239,17 @@ io: reblog: body: "%{name} diskonocigis tua mesajo:" subject: "%{name} diskonocigis tua mesajo" + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T + unit: '' pagination: next: Sequanta prev: Preiranta diff --git a/config/locales/it.yml b/config/locales/it.yml index 75d56362a..ec0209bc1 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -108,6 +108,17 @@ it: reblog: body: 'Il tuo status è stato condiviso da %{name}:' subject: "%{name} ha condiviso il tuo status" + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T + unit: '' pagination: next: Avanti prev: Indietro diff --git a/config/locales/ko.yml b/config/locales/ko.yml index f98059526..d6f4b1565 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -285,6 +285,17 @@ ko: reblog: body: "%{name} 님이 내 Toot을 부스트 했습니다:" subject: "%{name} 님이 내 Toot을 부스트 했습니다" + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T + unit: '' pagination: next: 다음 prev: 이전 diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 50ae5508b..2b7a1a511 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -337,6 +337,17 @@ nl: reblog: body: 'Jouw toot werd door %{name} geboost:' subject: "%{name} boostte jouw toot" + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T + unit: '' pagination: next: Volgende prev: Vorige diff --git a/config/locales/no.yml b/config/locales/no.yml index 996ea1d97..207f86afc 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -257,6 +257,17 @@ reblog: body: 'Din status ble fremhevd av %{name}:' subject: "%{name} fremhevde din status" + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T + unit: '' pagination: next: Neste prev: Forrige diff --git a/config/locales/oc.yml b/config/locales/oc.yml index d077175ae..c3807428b 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -459,7 +459,7 @@ oc: action_favourite: Ajustar als favorits title: "%{name} vos a mencionat" reblog: - title: "%{name} a partejat vòstre estatut" + title: "%{name} a partejat vòstre estatut" remote_follow: acct: Picatz vòstre utilizaire@instància que cal utilizar per sègre aqueste utilizaire missing_resource: URL de redireccion pas trobada diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 246028f9b..842baef45 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -355,6 +355,17 @@ pl: reblog: body: 'Twój wpis został podbity przez %{name}:' subject: Twój wpis został podbity przez %{name} + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T + unit: '' pagination: next: Następna prev: Poprzednia diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 6dec2b50a..750120299 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -255,6 +255,17 @@ pt-BR: reblog: body: 'O seu post foi reblogado por %{name}:' subject: "%{name} reblogou o seu post" + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T + unit: '' pagination: next: Next prev: Prev diff --git a/config/locales/pt.yml b/config/locales/pt.yml index f6dd32200..140f6b71b 100644 --- a/config/locales/pt.yml +++ b/config/locales/pt.yml @@ -182,6 +182,17 @@ pt: reblog: body: 'O teu post foi partilhado por %{name}:' subject: "%{name} partilhou o teu post" + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T + unit: '' pagination: next: Seguinte prev: Anterior diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 52cb71c60..9ca08831e 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -262,6 +262,17 @@ ru: reblog: body: 'Ваш статус был продвинут %{name}:' subject: "%{name} продвинул(а) Ваш статус" + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T + unit: '' pagination: next: След prev: Пред diff --git a/config/locales/th.yml b/config/locales/th.yml index 9d0887928..2db3aee8a 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -257,6 +257,17 @@ th: reblog: body: 'Your status was boosted by %{name}:' subject: "%{name} boosted your status" + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T + unit: '' pagination: next: ต่อไป prev: ย้อนกลับ diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 91ef9544c..6aff78fa1 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -255,6 +255,17 @@ tr: reblog: body: "%{name} durumunuzu boost etti:" subject: "%{name} durumunuzu boost etti" + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T + unit: '' pagination: next: Sonraki prev: Önceki diff --git a/config/locales/uk.yml b/config/locales/uk.yml index 4d12ddf4e..995a682a7 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -250,6 +250,17 @@ uk: reblog: body: 'Ваш статус було передмухнуто %{name}:' subject: "%{name} передмухнув ваш статус" + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T + unit: '' pagination: next: Далі prev: Назад diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 0672202a2..95c24d0bc 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -261,6 +261,17 @@ zh-CN: reblog: body: 你的嘟文得到 %{name} 的转嘟 subject: "%{name} 转嘟(嘟嘟滴)了你的嘟文" + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T + unit: '' pagination: next: 下一页 prev: 上一页 diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml index 9d6c74008..aa6b1ea6a 100644 --- a/config/locales/zh-HK.yml +++ b/config/locales/zh-HK.yml @@ -256,6 +256,17 @@ zh-HK: reblog: body: 你的文章得到 %{name} 的轉推 subject: "%{name} 轉推了你的文章" + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T + unit: '' pagination: next: 下一頁 prev: 上一頁 diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 7065acf9a..299a92da7 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -211,6 +211,17 @@ zh-TW: reblog: body: 您的文章被 %{name} 轉推 subject: "%{name} 轉推了您的文章" + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T + unit: '' pagination: next: 下一頁 prev: 上一頁 -- cgit