From 2beeea1e7d023c87130a41d344ed2be91294eaf1 Mon Sep 17 00:00:00 2001 From: Akihiko Odaki Date: Fri, 18 May 2018 22:30:45 +0900 Subject: [PATCH 01/17] Change Japanese translation for privacy.private.short (#7535) The old translation means "hidden," but it is vague in terms that it does not specify the scope status is hidden. The new translation is a literal translation of "Followers-only," without such ambiguity. --- app/javascript/mastodon/locales/ja.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 882e1b527..8be04cf73 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -211,7 +211,7 @@ "privacy.direct.long": "メンションしたユーザーだけに公開", "privacy.direct.short": "ダイレクト", "privacy.private.long": "フォロワーだけに公開", - "privacy.private.short": "非公開", + "privacy.private.short": "フォロワー限定", "privacy.public.long": "公開TLに投稿する", "privacy.public.short": "公開", "privacy.unlisted.long": "公開TLで表示しない", From 9422b3e0d8a06044658cf15f8fffae43fabb5684 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Fri, 18 May 2018 15:56:57 +0200 Subject: [PATCH 02/17] Fix double-encoding of display name in title and e-mails (#7534) --- app/helpers/stream_entries_helper.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/helpers/stream_entries_helper.rb b/app/helpers/stream_entries_helper.rb index 707c8e26c..a91a28935 100644 --- a/app/helpers/stream_entries_helper.rb +++ b/app/helpers/stream_entries_helper.rb @@ -5,7 +5,11 @@ module StreamEntriesHelper EMBEDDED_ACTION = 'embed' def display_name(account, **options) - Formatter.instance.format_display_name(account, options) + if options[:custom_emojify] + Formatter.instance.format_display_name(account, options) + else + account.display_name.presence || account.username + end end def account_description(account) From 97f02f2c088f2d3ac6f1232f995cb99aac8df776 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 19 May 2018 00:23:19 +0200 Subject: [PATCH 03/17] Do not raise delivery failure on 4xx errors, increase stoplight threshold (#7541) * Do not raise delivery failure on 4xx errors, increase stoplight threshold Stoplight failure threshold from 3 to 10 Status code 429 will raise a failure/get retried * Oops --- app/workers/activitypub/delivery_worker.rb | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/app/workers/activitypub/delivery_worker.rb b/app/workers/activitypub/delivery_worker.rb index adffd1d3b..9b278eb72 100644 --- a/app/workers/activitypub/delivery_worker.rb +++ b/app/workers/activitypub/delivery_worker.rb @@ -3,6 +3,9 @@ class ActivityPub::DeliveryWorker include Sidekiq::Worker + STOPLIGHT_FAILURE_THRESHOLD = 10 + STOPLIGHT_COOLDOWN = 60 + sidekiq_options queue: 'push', retry: 16, dead: false HEADERS = { 'Content-Type' => 'application/activity+json' }.freeze @@ -31,17 +34,23 @@ class ActivityPub::DeliveryWorker def perform_request light = Stoplight(@inbox_url) do build_request.perform do |response| - raise Mastodon::UnexpectedResponseError, response unless response_successful?(response) + raise Mastodon::UnexpectedResponseError, response unless response_successful?(response) || response_error_unsalvageable?(response) end end - light.run + light.with_threshold(STOPLIGHT_FAILURE_THRESHOLD) + .with_cool_off_time(STOPLIGHT_COOLDOWN) + .run end def response_successful?(response) response.code > 199 && response.code < 300 end + def response_error_unsalvageable?(response) + response.code > 399 && response.code < 500 && response.code != 429 + end + def failure_tracker @failure_tracker ||= DeliveryFailureTracker.new(@inbox_url) end From 0b1f88cfd5fb88b392c7b959467ffdb087868f7d Mon Sep 17 00:00:00 2001 From: MIYAGI Hikaru Date: Sat, 19 May 2018 09:20:43 +0900 Subject: [PATCH 04/17] Upgrade posix-spawn to master (#7542) --- Gemfile | 2 +- Gemfile.lock | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index d4e707fe1..cab4c4139 100644 --- a/Gemfile +++ b/Gemfile @@ -61,7 +61,7 @@ gem 'nsa', '~> 0.2' gem 'oj', '~> 3.5' gem 'ostatus2', '~> 2.0' gem 'ox', '~> 2.9' -gem 'posix-spawn', '0.3.12' +gem 'posix-spawn', git: 'https://github.com/rtomayko/posix-spawn', ref: '58465d2e213991f8afb13b984854a49fcdcc980c' gem 'pundit', '~> 1.1' gem 'premailer-rails' gem 'rack-attack', '~> 5.2' diff --git a/Gemfile.lock b/Gemfile.lock index 3c798d8ca..f7a377d45 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,3 +1,10 @@ +GIT + remote: https://github.com/rtomayko/posix-spawn + revision: 58465d2e213991f8afb13b984854a49fcdcc980c + ref: 58465d2e213991f8afb13b984854a49fcdcc980c + specs: + posix-spawn (0.3.13) + GIT remote: https://github.com/tmm1/http_parser.rb revision: 54b17ba8c7d8d20a16dfc65d1775241833219cf2 @@ -387,7 +394,6 @@ GEM pghero (2.1.0) activerecord pkg-config (1.3.0) - posix-spawn (0.3.12) powerpack (0.1.1) premailer (1.11.1) addressable @@ -711,7 +717,7 @@ DEPENDENCIES pg (~> 1.0) pghero (~> 2.1) pkg-config (~> 1.3) - posix-spawn (= 0.3.12) + posix-spawn! premailer-rails private_address_check (~> 0.4.1) pry-byebug (~> 3.6) From 7871d29aff992162d4558e1db25d2f78f65ab38c Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 19 May 2018 02:51:29 +0200 Subject: [PATCH 05/17] Skip pagination logic for pinned account timelines in reducer (#7540) Fix #7516 --- app/javascript/mastodon/reducers/timelines.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/javascript/mastodon/reducers/timelines.js b/app/javascript/mastodon/reducers/timelines.js index b09d78b0f..916a091eb 100644 --- a/app/javascript/mastodon/reducers/timelines.js +++ b/app/javascript/mastodon/reducers/timelines.js @@ -33,6 +33,11 @@ const expandNormalizedTimeline = (state, timeline, statuses, next, isPartial) => if (!statuses.isEmpty()) { mMap.update('items', ImmutableList(), oldIds => { const newIds = statuses.map(status => status.get('id')); + + if (timeline.indexOf(':pinned') !== -1) { + return newIds; + } + const lastIndex = oldIds.findLastIndex(id => id !== null && compareId(id, newIds.last()) >= 0) + 1; const firstIndex = oldIds.take(lastIndex).findLastIndex(id => id !== null && compareId(id, newIds.first()) > 0); From 138512d20414de5782deca515b35d1d4f5406e1c Mon Sep 17 00:00:00 2001 From: bsky Date: Sat, 19 May 2018 19:16:52 +0900 Subject: [PATCH 06/17] Remove outline (#7543) --- app/javascript/styles/mastodon/components.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 61c38ce80..90325be9c 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -3181,6 +3181,7 @@ a.status-card { &.active { background: $ui-highlight-color; color: $primary-text-color; + outline: 0; .privacy-dropdown__option__content { color: $primary-text-color; From 1951ff41b33b264fd8179998648c3cbbf2834cd5 Mon Sep 17 00:00:00 2001 From: Akihiko Odaki Date: Sat, 19 May 2018 21:45:58 +0900 Subject: [PATCH 07/17] Do not override the default push notification settings (#6037) --- .../mastodon/actions/push_notifications/registerer.js | 7 ------- 1 file changed, 7 deletions(-) diff --git a/app/javascript/mastodon/actions/push_notifications/registerer.js b/app/javascript/mastodon/actions/push_notifications/registerer.js index 82fe4519a..b0f42b6a2 100644 --- a/app/javascript/mastodon/actions/push_notifications/registerer.js +++ b/app/javascript/mastodon/actions/push_notifications/registerer.js @@ -51,13 +51,6 @@ export function register () { return (dispatch, getState) => { dispatch(setBrowserSupport(supportsPushNotifications)); - if (me && !pushNotificationsSetting.get(me)) { - const alerts = getState().getIn(['push_notifications', 'alerts']); - if (alerts) { - pushNotificationsSetting.set(me, { alerts: alerts }); - } - } - if (supportsPushNotifications) { if (!getApplicationServerKey()) { console.error('The VAPID public key is not set. You will not be able to receive Web Push Notifications.'); From 4b94e9c65efd227c58f8be9b3db6b667d403ed3c Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 19 May 2018 14:46:47 +0200 Subject: [PATCH 08/17] Improve payload format of Web Push API now that it's open (#7521) > Good lord what is happening in there Previously the contents of the Web Push API payloads closely resembled the structure of JavaScript's [Notification](https://developer.mozilla.org/en-US/docs/Web/API/Notification). But now that the API is open to non-browser apps, and given that there is no required coupling between contents of the payload and a Notification object, here is how I changed the payload: ```json { "access_token": "...", "preferred_locale": "en", "notification_id": "12345", "notification_type": "follow", "title": "So and so followed you", "body": "This is my bio", "icon": "https://example.com/avatar.png" } ``` The title, body and icon attributes are included as a fallback so you can construct a minimal notification if you cannot perform a network request to the API to get more data. --- .../mastodon/actions/notifications.js | 1 + app/javascript/mastodon/locales/ar.json | 1 + app/javascript/mastodon/locales/bg.json | 1 + app/javascript/mastodon/locales/ca.json | 1 + app/javascript/mastodon/locales/co.json | 1 + app/javascript/mastodon/locales/de.json | 1 + .../mastodon/locales/defaultMessages.json | 6 +- app/javascript/mastodon/locales/el.json | 1 + app/javascript/mastodon/locales/en.json | 1 + app/javascript/mastodon/locales/eo.json | 1 + app/javascript/mastodon/locales/es.json | 1 + app/javascript/mastodon/locales/eu.json | 1 + app/javascript/mastodon/locales/fa.json | 1 + app/javascript/mastodon/locales/fi.json | 1 + app/javascript/mastodon/locales/fr.json | 1 + app/javascript/mastodon/locales/gl.json | 1 + app/javascript/mastodon/locales/he.json | 1 + app/javascript/mastodon/locales/hr.json | 1 + app/javascript/mastodon/locales/hu.json | 1 + app/javascript/mastodon/locales/hy.json | 1 + app/javascript/mastodon/locales/id.json | 1 + app/javascript/mastodon/locales/io.json | 1 + app/javascript/mastodon/locales/it.json | 1 + app/javascript/mastodon/locales/ja.json | 1 + app/javascript/mastodon/locales/ko.json | 1 + app/javascript/mastodon/locales/nl.json | 1 + app/javascript/mastodon/locales/no.json | 1 + app/javascript/mastodon/locales/oc.json | 1 + app/javascript/mastodon/locales/pl.json | 1 + app/javascript/mastodon/locales/pt-BR.json | 1 + app/javascript/mastodon/locales/pt.json | 1 + app/javascript/mastodon/locales/ru.json | 1 + app/javascript/mastodon/locales/sk.json | 1 + app/javascript/mastodon/locales/sl.json | 1 + app/javascript/mastodon/locales/sr-Latn.json | 1 + app/javascript/mastodon/locales/sr.json | 1 + app/javascript/mastodon/locales/sv.json | 1 + app/javascript/mastodon/locales/te.json | 1 + app/javascript/mastodon/locales/th.json | 1 + app/javascript/mastodon/locales/tr.json | 1 + app/javascript/mastodon/locales/uk.json | 1 + app/javascript/mastodon/locales/zh-CN.json | 1 + app/javascript/mastodon/locales/zh-HK.json | 1 + app/javascript/mastodon/locales/zh-TW.json | 1 + .../service_worker/web_push_locales.js | 30 +++ .../service_worker/web_push_notifications.js | 188 +++++++++++------- app/models/web/push_subscription.rb | 21 +- .../web/notification_serializer.rb | 163 ++------------- config/locales/ar.yml | 13 -- config/locales/ca.yml | 14 -- config/locales/co.yml | 14 -- config/locales/de.yml | 14 -- config/locales/en.yml | 14 -- config/locales/eo.yml | 14 -- config/locales/es.yml | 14 -- config/locales/fa.yml | 14 -- config/locales/fi.yml | 14 -- config/locales/fr.yml | 14 -- config/locales/gl.yml | 14 -- config/locales/hu.yml | 14 -- config/locales/it.yml | 12 -- config/locales/ja.yml | 14 -- config/locales/ko.yml | 14 -- config/locales/nl.yml | 14 -- config/locales/no.yml | 14 -- config/locales/oc.yml | 14 -- config/locales/pl.yml | 14 -- config/locales/pt-BR.yml | 14 -- config/locales/pt.yml | 14 -- config/locales/ru.yml | 14 -- config/locales/sk.yml | 14 -- config/locales/sr-Latn.yml | 14 -- config/locales/sr.yml | 14 -- config/locales/sv.yml | 14 -- config/locales/zh-CN.yml | 14 -- config/locales/zh-HK.yml | 14 -- 76 files changed, 217 insertions(+), 623 deletions(-) create mode 100644 app/javascript/mastodon/service_worker/web_push_locales.js diff --git a/app/javascript/mastodon/actions/notifications.js b/app/javascript/mastodon/actions/notifications.js index 641ad0e14..3f95f6667 100644 --- a/app/javascript/mastodon/actions/notifications.js +++ b/app/javascript/mastodon/actions/notifications.js @@ -22,6 +22,7 @@ export const NOTIFICATIONS_SCROLL_TOP = 'NOTIFICATIONS_SCROLL_TOP'; defineMessages({ mention: { id: 'notification.mention', defaultMessage: '{name} mentioned you' }, + group: { id: 'notifications.group', defaultMessage: '{count} notifications' }, }); const fetchRelatedRelationships = (dispatch, notifications) => { diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 1199c9535..bb4189514 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "الترقيّات:", "notifications.column_settings.show": "إعرِضها في عمود", "notifications.column_settings.sound": "أصدر صوتا", + "notifications.group": "{count} notifications", "onboarding.done": "تم", "onboarding.next": "التالي", "onboarding.page_five.public_timelines": "تُعرَض في الخيط الزمني المحلي المشاركات العامة المحررة من طرف جميع المسجلين في {domain}. أما في الخيط الزمني الموحد ، فإنه يتم عرض جميع المشاركات العامة المنشورة من طرف جميع الأشخاص المتابَعين من طرف أعضاء {domain}. هذه هي الخيوط الزمنية العامة، وهي طريقة رائعة للتعرف أشخاص جدد.", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index dd747ab3b..aeb4f09da 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Споделяния:", "notifications.column_settings.show": "Покажи в колона", "notifications.column_settings.sound": "Play sound", + "notifications.group": "{count} notifications", "onboarding.done": "Done", "onboarding.next": "Next", "onboarding.page_five.public_timelines": "The local timeline shows public posts from everyone on {domain}. The federated timeline shows public posts from everyone who people on {domain} follow. These are the Public Timelines, a great way to discover new people.", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 68fc4a44c..4bf8ad1c6 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Impulsos:", "notifications.column_settings.show": "Mostrar en la columna", "notifications.column_settings.sound": "Reproduïr so", + "notifications.group": "{count} notifications", "onboarding.done": "Fet", "onboarding.next": "Següent", "onboarding.page_five.public_timelines": "La línia de temps local mostra missatges públics de tothom de {domain}. La línia de temps federada mostra els missatges públics de tothom que la gent de {domain} segueix. Aquests són les línies de temps Públiques, una bona manera de descobrir noves persones.", diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json index 9d8d950a8..8d924f973 100644 --- a/app/javascript/mastodon/locales/co.json +++ b/app/javascript/mastodon/locales/co.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Spartere:", "notifications.column_settings.show": "Mustrà indè a colonna", "notifications.column_settings.sound": "Sunà", + "notifications.group": "{count} notifications", "onboarding.done": "Fatta", "onboarding.next": "Siguente", "onboarding.page_five.public_timelines": "A linea pubblica lucale mostra statuti pubblichi da tuttu u mondu nant'à {domain}. A linea pubblica glubale mostra ancu quelli di a ghjente seguitata da l'utilizatori di {domain}. Quesse sò una bona manera d'incuntrà nove parsone.", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index fe5bc4443..84b815d50 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Geteilte Beiträge:", "notifications.column_settings.show": "In der Spalte anzeigen", "notifications.column_settings.sound": "Ton abspielen", + "notifications.group": "{count} notifications", "onboarding.done": "Fertig", "onboarding.next": "Weiter", "onboarding.page_five.public_timelines": "Die lokale Zeitleiste zeigt alle Beiträge von Leuten, die auch auf {domain} sind. Das gesamte bekannte Netz zeigt Beiträge von allen, denen von Leuten auf {domain} gefolgt wird. Zusammen sind sie die öffentlichen Zeitleisten, ein guter Weg, um neue Leute zu finden.", diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json index 49b287928..e2f3ac6dd 100644 --- a/app/javascript/mastodon/locales/defaultMessages.json +++ b/app/javascript/mastodon/locales/defaultMessages.json @@ -17,6 +17,10 @@ { "defaultMessage": "{name} mentioned you", "id": "notification.mention" + }, + { + "defaultMessage": "{count} notifications", + "id": "notifications.group" } ], "path": "app/javascript/mastodon/actions/notifications.json" @@ -870,7 +874,7 @@ "id": "compose_form.hashtag_warning" }, { - "defaultMessage": "This toot will only be visible to all the mentioned users.", + "defaultMessage": "This toot will only be sent to all the mentioned users. However, the operators of your instance and any receiving instances may see this message.", "id": "compose_form.direct_message_warning" } ], diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index d1421be76..6e8aa0e24 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", + "notifications.group": "{count} notifications", "onboarding.done": "Done", "onboarding.next": "Next", "onboarding.page_five.public_timelines": "The local timeline shows public posts from everyone on {domain}. The federated timeline shows public posts from everyone who people on {domain} follow. These are the Public Timelines, a great way to discover new people.", diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 478caaaf8..11589d797 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", + "notifications.group": "{count} notifications", "onboarding.done": "Done", "onboarding.next": "Next", "onboarding.page_five.public_timelines": "The local timeline shows public posts from everyone on {domain}. The federated timeline shows public posts from everyone who people on {domain} follow. These are the Public Timelines, a great way to discover new people.", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index d5ddc23d4..479fc6c6e 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Diskonigoj:", "notifications.column_settings.show": "Montri en kolumno", "notifications.column_settings.sound": "Eligi sonon", + "notifications.group": "{count} notifications", "onboarding.done": "Farita", "onboarding.next": "Sekva", "onboarding.page_five.public_timelines": "La loka tempolinio montras publikajn mesaĝojn de ĉiuj en {domain}. La fratara tempolinio montras publikajn mesaĝojn de ĉiuj, kiuj estas sekvataj de homoj en {domain}. Tio estas la publikaj tempolinioj, kio estas bona maniero por malkovri novajn homojn.", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 8aac2d77d..233e46561 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Retoots:", "notifications.column_settings.show": "Mostrar en columna", "notifications.column_settings.sound": "Reproducir sonido", + "notifications.group": "{count} notifications", "onboarding.done": "Listo", "onboarding.next": "Siguiente", "onboarding.page_five.public_timelines": "La línea de tiempo local muestra toots públicos de todos en {domain}. La línea de tiempo federada muestra toots públicos de cualquiera a quien la gente de {domain} siga. Estas son las líneas de tiempo públicas, una buena forma de conocer gente nueva.", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index e927547e3..773d69287 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", + "notifications.group": "{count} notifications", "onboarding.done": "Done", "onboarding.next": "Next", "onboarding.page_five.public_timelines": "The local timeline shows public posts from everyone on {domain}. The federated timeline shows public posts from everyone who people on {domain} follow. These are the Public Timelines, a great way to discover new people.", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index e19b1cd85..957046c27 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "بازبوق‌ها:", "notifications.column_settings.show": "نمایش در ستون", "notifications.column_settings.sound": "پخش صدا", + "notifications.group": "{count} notifications", "onboarding.done": "پایان", "onboarding.next": "بعدی", "onboarding.page_five.public_timelines": "نوشته‌های محلی یعنی نوشته‌های همهٔ کاربران {domain}. نوشته‌های همه‌جا یعنی نوشته‌های همهٔ کسانی که کاربران {domain} آن‌ها را پی می‌گیرند. این فهرست‌های عمومی راه خوبی برای یافتن کاربران تازه هستند.", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index cfe9c4f33..55b9da70a 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Buustit:", "notifications.column_settings.show": "Näytä sarakkeessa", "notifications.column_settings.sound": "Äänimerkki", + "notifications.group": "{count} notifications", "onboarding.done": "Valmis", "onboarding.next": "Seuraava", "onboarding.page_five.public_timelines": "Paikallisella aikajanalla näytetään instanssin {domain} kaikkien käyttäjien julkiset julkaisut. Yleisellä aikajanalla näytetään kaikkien instanssin {domain} käyttäjien seuraamien käyttäjien julkiset julkaisut. Nämä julkiset aikajanat ovat loistavia paikkoja löytää uusia ihmisiä.", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index c4a41583c..44464cbc3 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Partages :", "notifications.column_settings.show": "Afficher dans la colonne", "notifications.column_settings.sound": "Émettre un son", + "notifications.group": "{count} notifications", "onboarding.done": "Effectué", "onboarding.next": "Suivant", "onboarding.page_five.public_timelines": "Le fil public global affiche les messages de toutes les personnes suivies par les membres de {domain}. Le fil public local est identique, mais se limite aux membres de {domain}.", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 1eaaebc53..aa7ba0d1e 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Promocións:", "notifications.column_settings.show": "Mostrar en columna", "notifications.column_settings.sound": "Reproducir son", + "notifications.group": "{count} notifications", "onboarding.done": "Feito", "onboarding.next": "Seguinte", "onboarding.page_five.public_timelines": "A liña de tempo local mostra as publicacións públicas de todos en {domain}. A liña de tempo federada mostra as publicacións públicas de todos os que as persoas en {domain} seguen. Estas son as Liñas de tempo públicas, unha boa forma de descubrir novas persoas.", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index a4bcba8ff..324ea725e 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "הדהודים:", "notifications.column_settings.show": "הצגה בטור", "notifications.column_settings.sound": "שמע מופעל", + "notifications.group": "{count} notifications", "onboarding.done": "יציאה", "onboarding.next": "הלאה", "onboarding.page_five.public_timelines": "ציר הזמן המקומי מראה הודעות פומביות מכל באי קהילת {domain}. ציר הזמן העולמי מראה הודעות פומביות מאת כי מי שבאי קהילת {domain} עוקבים אחריו. אלו צירי הזמן הפומביים, דרך נהדרת לגלות אנשים חדשים.", diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json index bd1dfac4c..0216d0837 100644 --- a/app/javascript/mastodon/locales/hr.json +++ b/app/javascript/mastodon/locales/hr.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Boostovi:", "notifications.column_settings.show": "Prikaži u stupcu", "notifications.column_settings.sound": "Sviraj zvuk", + "notifications.group": "{count} notifications", "onboarding.done": "Učinjeno", "onboarding.next": "Sljedeće", "onboarding.page_five.public_timelines": "Lokalni timeline prikazuje javne postove sviju od svakog na {domain}. Federalni timeline prikazuje javne postove svakog koga ljudi na {domain} slijede. To su Javni Timelineovi, sjajan način za otkriti nove ljude.", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 5059a45d4..795c9b7cd 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Rebloggolások:", "notifications.column_settings.show": "Oszlopban mutatás", "notifications.column_settings.sound": "Hang lejátszása", + "notifications.group": "{count} notifications", "onboarding.done": "Befejezve", "onboarding.next": "Következő", "onboarding.page_five.public_timelines": "A helyi idővonal mindenkinek a publikus posztját mutatja a(z) {domain}-n. A federált idővonal mindenki publikus posztját mutatja akit {domain} felhasználói követnek. Ezek a publikus idővonalak, nagyszerű mód új emberek megismerésére.", diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index 7fe723892..2c7496d89 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Տարածածներից՝", "notifications.column_settings.show": "Ցուցադրել սյունում", "notifications.column_settings.sound": "Ձայն հանել", + "notifications.group": "{count} notifications", "onboarding.done": "Պատրաստ է", "onboarding.next": "Հաջորդ", "onboarding.page_five.public_timelines": "Տեղական հոսքը ցույց է տալիս {domain} տիրույթից բոլորի հրապարակային թթերը։ Դաշնային հոսքը ցույց է տալիս հրապարակային թթերը բոլորից, ում {domain} տիրույթի մարդիկ հետեւում են։ Սրանք Հրապարակային հոսքերն են՝ նոր մարդկանց բացահայտելու հրաշալի միջոց։", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index 07b26a0a5..2fcd5c482 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Boost:", "notifications.column_settings.show": "Tampilkan dalam kolom", "notifications.column_settings.sound": "Mainkan suara", + "notifications.group": "{count} notifications", "onboarding.done": "Selesei", "onboarding.next": "Selanjutnya", "onboarding.page_five.public_timelines": "Linimasa lokal menampilkan semua postingan publik dari semua orang di {domain}. Linimasa gabungan menampilkan postingan publik dari semua orang yang diikuti oleh {domain}. Ini semua adalah Linimasa Publik, cara terbaik untuk bertemu orang lain.", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index a8ab72339..9d429bda8 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Repeti:", "notifications.column_settings.show": "Montrar en kolumno", "notifications.column_settings.sound": "Plear sono", + "notifications.group": "{count} notifications", "onboarding.done": "Done", "onboarding.next": "Next", "onboarding.page_five.public_timelines": "The local timeline shows public posts from everyone on {domain}. The federated timeline shows public posts from everyone who people on {domain} follow. These are the Public Timelines, a great way to discover new people.", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 8bd652864..64baf5440 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Post condivisi:", "notifications.column_settings.show": "Mostra in colonna", "notifications.column_settings.sound": "Riproduci suono", + "notifications.group": "{count} notifications", "onboarding.done": "Fatto", "onboarding.next": "Prossimo", "onboarding.page_five.public_timelines": "La timeline locale mostra i post pubblici di tutti gli utenti di {domain}. La timeline federata mostra i post pubblici di tutti gli utenti seguiti da quelli di {domain}. Queste sono le timeline pubbliche, che vi danno grandi possibilità di scoprire nuovi utenti.", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 8be04cf73..95f8438d5 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "ブースト:", "notifications.column_settings.show": "カラムに表示", "notifications.column_settings.sound": "通知音を再生", + "notifications.group": "{count} notifications", "onboarding.done": "完了", "onboarding.next": "次へ", "onboarding.page_five.public_timelines": "連合タイムラインでは{domain}の人がフォローしているMastodon全体での公開投稿を表示します。同じくローカルタイムラインでは{domain}のみの公開投稿を表示します。", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index fc13a5b5b..bb6f3558c 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "부스트:", "notifications.column_settings.show": "컬럼에 표시", "notifications.column_settings.sound": "효과음 재생", + "notifications.group": "{count} notifications", "onboarding.done": "완료", "onboarding.next": "다음", "onboarding.page_five.public_timelines": "연합 타임라인에서는 {domain}의 사람들이 팔로우 중인 Mastodon 전체 인스턴스의 공개 포스트를 표시합니다. 로컬 타임라인에서는 {domain} 만의 공개 포스트를 표시합니다.", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 047583ce2..63a452377 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "In kolom tonen", "notifications.column_settings.sound": "Geluid afspelen", + "notifications.group": "{count} notifications", "onboarding.done": "Klaar", "onboarding.next": "Volgende", "onboarding.page_five.public_timelines": "De lokale tijdlijn toont openbare toots van iedereen op {domain}. De globale tijdlijn toont openbare toots van iedereen die door gebruikers van {domain} worden gevolgd, dus ook mensen van andere Mastodonservers. Dit zijn de openbare tijdlijnen en vormen een uitstekende manier om nieuwe mensen te leren kennen.", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index 05dae0630..1496afb83 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Fremhevet:", "notifications.column_settings.show": "Vis i kolonne", "notifications.column_settings.sound": "Spill lyd", + "notifications.group": "{count} notifications", "onboarding.done": "Ferdig", "onboarding.next": "Neste", "onboarding.page_five.public_timelines": "Den lokale tidslinjen viser offentlige poster fra alle på {domain}. Felles tidslinje viser offentlige poster fra alle som brukere på {domain} følger. Dette er de offentlige tidslinjene, et fint sted å oppdage nye brukere.", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index 615af998f..3ae29129f 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Partatges :", "notifications.column_settings.show": "Mostrar dins la colomna", "notifications.column_settings.sound": "Emetre un son", + "notifications.group": "{count} notifications", "onboarding.done": "Sortir", "onboarding.next": "Seguent", "onboarding.page_five.public_timelines": "Lo flux local mòstra los estatuts publics del monde de vòstra instància, aquí {domain}. Lo flux federat mòstra los estatuts publics de la gent que los de {domain} sègon. Son los fluxes publics, un bon biais de trobar de mond.", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index 0df36f969..be5693bc9 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Podbicia:", "notifications.column_settings.show": "Pokaż w kolumnie", "notifications.column_settings.sound": "Odtwarzaj dźwięk", + "notifications.group": "{count} notifications", "onboarding.done": "Gotowe", "onboarding.next": "Dalej", "onboarding.page_five.public_timelines": "Lokalna oś czasu zawiera wszystkie publiczne wpisy z {domain}. Globalna oś czasu wyświetla publiczne wpisy śledzonych przez członków {domain}. Są to publiczne osie czasu – najlepszy sposób na poznanie nowych osób.", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 2360c41e7..26ae5ef30 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Compartilhamento:", "notifications.column_settings.show": "Mostrar nas colunas", "notifications.column_settings.sound": "Reproduzir som", + "notifications.group": "{count} notifications", "onboarding.done": "Pronto", "onboarding.next": "Próximo", "onboarding.page_five.public_timelines": "A timeline local mostra postagens públicas de todos os usuários no {domain}. A timeline federada mostra todas as postagens de todas as pessoas que pessoas no {domain} seguem. Estas são as timelines públicas, uma ótima maneira de conhecer novas pessoas.", diff --git a/app/javascript/mastodon/locales/pt.json b/app/javascript/mastodon/locales/pt.json index 3ac92dd57..02ffc825c 100644 --- a/app/javascript/mastodon/locales/pt.json +++ b/app/javascript/mastodon/locales/pt.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Partilhas:", "notifications.column_settings.show": "Mostrar nas colunas", "notifications.column_settings.sound": "Reproduzir som", + "notifications.group": "{count} notifications", "onboarding.done": "Pronto", "onboarding.next": "Próximo", "onboarding.page_five.public_timelines": "A timeline local mostra as publicações de todos os utilizadores em {domain}. A timeline global mostra as publicações de todas as pessoas que pessoas em {domain} seguem. Estas são as timelines públicas, uma óptima forma de conhecer novas pessoas.", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 5cf983b83..ca8574578 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Продвижения:", "notifications.column_settings.show": "Показывать в колонке", "notifications.column_settings.sound": "Проигрывать звук", + "notifications.group": "{count} notifications", "onboarding.done": "Готово", "onboarding.next": "Далее", "onboarding.page_five.public_timelines": "Локальная лента показывает публичные посты всех пользователей {domain}. Глобальная лента показывает публичные посты всех людей, на которых подписаны пользователи {domain}. Это - публичные ленты, отличный способ найти новые знакомства.", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 4f7969bd3..cf9ead5e7 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Boosty:", "notifications.column_settings.show": "Zobraziť v stĺpci", "notifications.column_settings.sound": "Prehrať zvuk", + "notifications.group": "{count} notifications", "onboarding.done": "Koniec", "onboarding.next": "Ďalej", "onboarding.page_five.public_timelines": "Lokálna časová os zobrazuje verejné správy od všetkých na {domain}. Federovaná časová os zobrazuje verejné správy od všetkých tých, čo následujú užívatrľov {domain} z iných serverov. Tieto sú takzvané Verejné Časové Osi, výborná možnosť ako nájsť a spoznať nových ľudí.", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index 69b416258..dbad35c34 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", + "notifications.group": "{count} notifications", "onboarding.done": "Done", "onboarding.next": "Next", "onboarding.page_five.public_timelines": "The local timeline shows public posts from everyone on {domain}. The federated timeline shows public posts from everyone who people on {domain} follow. These are the Public Timelines, a great way to discover new people.", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 490b3a51a..bc54a0865 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Podrški:", "notifications.column_settings.show": "Prikaži u koloni", "notifications.column_settings.sound": "Puštaj zvuk", + "notifications.group": "{count} notifications", "onboarding.done": "Gotovo", "onboarding.next": "Sledeće", "onboarding.page_five.public_timelines": "Lokalna lajna prikazuje sve javne statuse od svih na domenu {domain}. Federisana lajna prikazuje javne statuse od svih ljudi koje prate korisnici sa domena {domain}. Ovo su javne lajne, sjajan način da otkrijete nove ljude.", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index b331f9f48..5cdeb24fc 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Подршки:", "notifications.column_settings.show": "Прикажи у колони", "notifications.column_settings.sound": "Пуштај звук", + "notifications.group": "{count} notifications", "onboarding.done": "Готово", "onboarding.next": "Следеће", "onboarding.page_five.public_timelines": "Локална лајна приказује све јавне статусе од свих на домену {domain}. Федерисана лајна приказује јавне статусе од свих људи које прате корисници са домена {domain}. Ово су јавне лајне, сјајан начин да откријете нове људе.", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 36b200764..579921046 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Knuffar:", "notifications.column_settings.show": "Visa i kolumnen", "notifications.column_settings.sound": "Spela upp ljud", + "notifications.group": "{count} notifications", "onboarding.done": "Klart", "onboarding.next": "Nästa", "onboarding.page_five.public_timelines": "Den lokala tidslinjen visar offentliga inlägg från alla på {domain}. Den förenade tidslinjen visar offentliga inlägg från alla personer på {domain} som följer. Dom här offentliga tidslinjerna är ett bra sätt att upptäcka nya människor.", diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json index 038ac6abb..55415da81 100644 --- a/app/javascript/mastodon/locales/te.json +++ b/app/javascript/mastodon/locales/te.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", + "notifications.group": "{count} notifications", "onboarding.done": "Done", "onboarding.next": "Next", "onboarding.page_five.public_timelines": "The local timeline shows public posts from everyone on {domain}. The federated timeline shows public posts from everyone who people on {domain} follow. These are the Public Timelines, a great way to discover new people.", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 8d24395af..243941caf 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", + "notifications.group": "{count} notifications", "onboarding.done": "Done", "onboarding.next": "Next", "onboarding.page_five.public_timelines": "The local timeline shows public posts from everyone on {domain}. The federated timeline shows public posts from everyone who people on {domain} follow. These are the Public Timelines, a great way to discover new people.", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index a377e7b74..c6d27b609 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Boost’lar:", "notifications.column_settings.show": "Bildirimlerde göster", "notifications.column_settings.sound": "Ses çal", + "notifications.group": "{count} notifications", "onboarding.done": "Tamam", "onboarding.next": "Sıradaki", "onboarding.page_five.public_timelines": "Yerel zaman tüneli, bu sunucudaki herkesten gelen gönderileri gösterir.Federe zaman tüneli, kullanıcıların diğer sunuculardan takip ettiği kişilerin herkese açık gönderilerini gösterir. Bunlar herkese açık zaman tünelleridir ve yeni insanlarla tanışmak için harika yerlerdir. The federated timeline shows public posts from everyone who people on {domain} follow. These are the Public Timelines, a great way to discover new ", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 613d1a00d..2e174e186 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Передмухи:", "notifications.column_settings.show": "Показати в колонці", "notifications.column_settings.sound": "Відтворювати звук", + "notifications.group": "{count} notifications", "onboarding.done": "Готово", "onboarding.next": "Далі", "onboarding.page_five.public_timelines": "Локальна стрічка показує публічні пости усіх користувачів {domain}. Глобальна стрічка показує публічні пости усіх людей, на яких підписані користувачі {domain}. Це публичні стрічки, відмінний спосіб знайти нових людей.", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 073dbe6cb..254d078eb 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "当有人转嘟了你的嘟文时:", "notifications.column_settings.show": "在通知栏显示", "notifications.column_settings.sound": "播放音效", + "notifications.group": "{count} notifications", "onboarding.done": "出发!", "onboarding.next": "下一步", "onboarding.page_five.public_timelines": "“本站时间轴”显示的是由本站({domain})用户发布的所有公开嘟文。“跨站公共时间轴”显示的的是由本站用户关注对象所发布的所有公开嘟文。这些就是寻人好去处的公共时间轴啦。", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 9334b5d20..9fb8aa2f9 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "轉推你的文章:", "notifications.column_settings.show": "在通知欄顯示", "notifications.column_settings.sound": "播放音效", + "notifications.group": "{count} notifications", "onboarding.done": "開始使用", "onboarding.next": "繼續", "onboarding.page_five.public_timelines": "「本站時間軸」顯示在 {domain} 各用戶的公開文章。「跨站時間軸」顯示在 {domain} 各人關注的所有用戶(包括其他服務站)的公開文章。這些都是「公共時間軸」,是認識新朋友的好地方。", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 0f4d04947..ae917a5ac 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "轉推:", "notifications.column_settings.show": "顯示在欄位中", "notifications.column_settings.sound": "播放音效", + "notifications.group": "{count} notifications", "onboarding.done": "完成", "onboarding.next": "下一步", "onboarding.page_five.public_timelines": "本地時間軸顯示 {domain} 上所有人的公開貼文。聯盟時間軸顯示 {domain} 上所有人關注的公開貼文。這就是公開時間軸,發現新朋友的好地方。", diff --git a/app/javascript/mastodon/service_worker/web_push_locales.js b/app/javascript/mastodon/service_worker/web_push_locales.js new file mode 100644 index 000000000..ce96ae297 --- /dev/null +++ b/app/javascript/mastodon/service_worker/web_push_locales.js @@ -0,0 +1,30 @@ +/* @preval */ + +const fs = require('fs'); +const path = require('path'); + +const filtered = {}; +const filenames = fs.readdirSync(path.resolve(__dirname, '../locales')); + +filenames.forEach(filename => { + if (!filename.match(/\.json$/) || filename.match(/defaultMessages|whitelist/)) return; + + const content = fs.readFileSync(path.resolve(__dirname, `../locales/${filename}`), 'utf-8'); + const full = JSON.parse(content); + const locale = filename.split('.')[0]; + + filtered[locale] = { + 'notification.favourite': full['notification.favourite'] || '', + 'notification.follow': full['notification.follow'] || '', + 'notification.mention': full['notification.mention'] || '', + 'notification.reblog': full['notification.reblog'] || '', + + 'status.show_more': full['status.show_more'] || '', + 'status.reblog': full['status.reblog'] || '', + 'status.favourite': full['status.favourite'] || '', + + 'notifications.group': full['notifications.group'] || '', + }; +}); + +module.exports = JSON.parse(JSON.stringify(filtered)); diff --git a/app/javascript/mastodon/service_worker/web_push_notifications.js b/app/javascript/mastodon/service_worker/web_push_notifications.js index f63cff335..16eaefcbb 100644 --- a/app/javascript/mastodon/service_worker/web_push_notifications.js +++ b/app/javascript/mastodon/service_worker/web_push_notifications.js @@ -1,36 +1,32 @@ +import IntlMessageFormat from 'intl-messageformat'; +import locales from './web_push_locales'; + const MAX_NOTIFICATIONS = 5; const GROUP_TAG = 'tag'; -// Avoid loading intl-messageformat and dealing with locales in the ServiceWorker -const formatGroupTitle = (message, count) => message.replace('%{count}', count); - const notify = options => self.registration.getNotifications().then(notifications => { - if (notifications.length === MAX_NOTIFICATIONS) { - // Reached the maximum number of notifications, proceed with grouping + if (notifications.length >= MAX_NOTIFICATIONS) { // Reached the maximum number of notifications, proceed with grouping const group = { - title: formatGroupTitle(options.data.message, notifications.length + 1), - body: notifications - .sort((n1, n2) => n1.timestamp < n2.timestamp) - .map(notification => notification.title).join('\n'), + title: formatMessage('notifications.group', options.data.preferred_locale, { count: notifications.length + 1 }), + body: notifications.sort((n1, n2) => n1.timestamp < n2.timestamp).map(notification => notification.title).join('\n'), badge: '/badge.png', icon: '/android-chrome-192x192.png', tag: GROUP_TAG, data: { url: (new URL('/web/notifications', self.location)).href, count: notifications.length + 1, - message: options.data.message, + preferred_locale: options.data.preferred_locale, }, }; notifications.forEach(notification => notification.close()); return self.registration.showNotification(group.title, group); - } else if (notifications.length === 1 && notifications[0].tag === GROUP_TAG) { - // Already grouped, proceed with appending the notification to the group - const group = cloneNotification(notifications[0]); + } else if (notifications.length === 1 && notifications[0].tag === GROUP_TAG) { // Already grouped, proceed with appending the notification to the group + const group = { ...notifications[0] }; - group.title = formatGroupTitle(group.data.message, group.data.count + 1); + group.title = formatMessage('notifications.group', options.data.preferred_locale, { count: group.data.count + 1 }); group.body = `${options.title}\n${group.body}`; group.data = { ...group.data, count: group.data.count + 1 }; @@ -40,57 +36,87 @@ const notify = options => return self.registration.showNotification(options.title, options); }); -const handlePush = (event) => { - const options = event.data.json(); +const fetchFromApi = (path, method, accessToken) => { + const url = (new URL(path, self.location)).href; - 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.data.hiddenImage = options.image; - options.image = undefined; - } else { - options.actions = options.data.actions; - } - - event.waitUntil(notify(options)); -}; - -const cloneNotification = (notification) => { - const clone = { }; - - for(var k in notification) { - clone[k] = notification[k]; - } - - return clone; -}; - -const expandNotification = (notification) => { - const nextNotification = cloneNotification(notification); - - 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); -}; - -const makeRequest = (notification, action) => - fetch(action.action, { + return fetch(url, { headers: { - 'Authorization': `Bearer ${notification.data.access_token}`, + 'Authorization': `Bearer ${accessToken}`, 'Content-Type': 'application/json', }, - method: action.method, + + method: method, credentials: 'include', - }); + }).then(res => { + if (res.ok) { + return res; + } else { + throw new Error(res.status); + } + }).then(res => res.json()); +}; + +const formatMessage = (messageId, locale, values = {}) => + (new IntlMessageFormat(locales[locale][messageId], locale)).format(values); + +const handlePush = (event) => { + const { access_token, notification_id, preferred_locale, title, body, icon } = event.data.json(); + + // Placeholder until more information can be loaded + event.waitUntil( + notify({ + title, + body, + icon, + tag: notification_id, + timestamp: new Date(), + badge: '/badge.png', + data: { access_token, preferred_locale, url: '/web/notifications' }, + }).then(() => fetchFromApi(`/api/v1/notifications/${notification_id}`, 'get', access_token)).then(notification => { + const options = {}; + + options.title = formatMessage(`notification.${notification.type}`, preferred_locale, { name: notification.account.display_name.length > 0 ? notification.account.display_name : notification.account.username }); + options.body = notification.status && notification.status.content; + options.icon = notification.account.avatar_static; + options.timestamp = notification.created_at && new Date(notification.created_at); + options.tag = notification.id; + options.badge = '/badge.png'; + options.image = notification.status && notification.status.media_attachments.length > 0 && notification.status.media_attachments[0].preview_url || undefined; + options.data = { access_token, preferred_locale, id: notification.status ? notification.status.id : notification.account.id, url: notification.status ? `/web/statuses/${notification.status.id}` : `/web/accounts/${notification.account.id}` }; + + if (notification.status && notification.status.sensitive) { + options.data.hiddenBody = notification.status.content; + options.data.hiddenImage = notification.status.media_attachments.length > 0 && notification.status.media_attachments[0].preview_url; + + options.body = undefined; + options.image = undefined; + options.actions = [actionExpand(preferred_locale)]; + } else if (notification.status) { + options.actions = [actionReblog(preferred_locale), actionFavourite(preferred_locale)]; + } + + return notify(options); + }) + ); +}; + +const actionExpand = preferred_locale => ({ + action: 'expand', + icon: '/web-push-icon_expand.png', + title: formatMessage('status.show_more', preferred_locale), +}); + +const actionReblog = preferred_locale => ({ + action: 'reblog', + icon: '/web-push-icon_reblog.png', + title: formatMessage('status.reblog', preferred_locale), +}); + +const actionFavourite = preferred_locale => ({ + action: 'favourite', + icon: '/web-push-icon_favourite.png', + title: formatMessage('status.favourite', preferred_locale), +}); const findBestClient = clients => { const focusedClient = clients.find(client => client.focused); @@ -99,6 +125,24 @@ const findBestClient = clients => { return focusedClient || visibleClient || clients[0]; }; +const expandNotification = notification => { + const newNotification = { ...notification }; + + newNotification.body = newNotification.data.hiddenBody; + newNotification.image = newNotification.data.hiddenImage; + newNotification.actions = [actionReblog(notification.data.preferred_locale), actionFavourite(notification.data.preferred_locale)]; + + return self.registration.showNotification(newNotification.title, newNotification); +}; + +const removeActionFromNotification = (notification, action) => { + const newNotification = { ...notification }; + + newNotification.actions = newNotification.actions.filter(item => item.action !== action); + + return self.registration.showNotification(newNotification.title, newNotification); +}; + const openUrl = url => self.clients.matchAll({ type: 'window' }).then(clientList => { if (clientList.length !== 0) { @@ -124,27 +168,19 @@ const openUrl = url => return self.clients.openWindow(url); }); -const removeActionFromNotification = (notification, action) => { - const actions = notification.actions.filter(act => act.action !== action.action); - const nextNotification = cloneNotification(notification); - - nextNotification.actions = actions; - - return self.registration.showNotification(nextNotification.title, nextNotification); -}; - const handleNotificationClick = (event) => { const reactToNotificationClick = new Promise((resolve, reject) => { if (event.action) { - const action = event.notification.data.actions.find(({ action }) => action === event.action); - - if (action.todo === 'expand') { + if (event.action === 'expand') { resolve(expandNotification(event.notification)); - } else if (action.todo === 'request') { - resolve(makeRequest(event.notification, action) - .then(() => removeActionFromNotification(event.notification, action))); + } else if (event.action === 'reblog') { + const { data } = event.notification; + resolve(fetchFromApi(`/api/v1/statuses/${data.id}/reblog`, 'post', data.access_token).then(() => removeActionFromNotification(event.notification, 'reblog'))); + } else if (event.action === 'favourite') { + const { data } = event.notification; + resolve(fetchFromApi(`/api/v1/statuses/${data.id}/favourite`, 'post', data.access_token).then(() => removeActionFromNotification(event.notification, 'favourite'))); } else { - reject(`Unknown action: ${action.todo}`); + reject(`Unknown action: ${event.action}`); } } else { event.notification.close(); diff --git a/app/models/web/push_subscription.rb b/app/models/web/push_subscription.rb index df549c6d3..7da3428fe 100644 --- a/app/models/web/push_subscription.rb +++ b/app/models/web/push_subscription.rb @@ -21,8 +21,8 @@ class Web::PushSubscription < ApplicationRecord has_one :session_activation def push(notification) - I18n.with_locale(associated_user.locale || I18n.default_locale) do - push_payload(message_from(notification), 48.hours.seconds) + I18n.with_locale(associated_user&.locale || I18n.default_locale) do + push_payload(payload_for_notification(notification), 48.hours.seconds) end end @@ -46,16 +46,13 @@ class Web::PushSubscription < ApplicationRecord @associated_access_token = if access_token_id.nil? find_or_create_access_token.token else - access_token + access_token.token end end private def push_payload(message, ttl = 5.minutes.seconds) - # TODO: Make sure that the payload does not - # exceed 4KB - Webpush::PayloadTooLarge - Webpush.payload_send( message: Oj.dump(message), endpoint: endpoint, @@ -70,16 +67,20 @@ class Web::PushSubscription < ApplicationRecord ) end - def message_from(notification) - serializable_resource = ActiveModelSerializers::SerializableResource.new(notification, serializer: Web::NotificationSerializer, scope: self, scope_name: :current_push_subscription) - serializable_resource.as_json + def payload_for_notification(notification) + ActiveModelSerializers::SerializableResource.new( + notification, + serializer: Web::NotificationSerializer, + scope: self, + scope_name: :current_push_subscription + ).as_json end def find_or_create_access_token Doorkeeper::AccessToken.find_or_create_for( Doorkeeper::Application.find_by(superapp: true), session_activation.user_id, - Doorkeeper::OAuth::Scopes.from_string('read write follow'), + Doorkeeper::OAuth::Scopes.from_string('read write follow push'), Doorkeeper.configuration.access_token_expires_in, Doorkeeper.configuration.refresh_token_enabled? ) diff --git a/app/serializers/web/notification_serializer.rb b/app/serializers/web/notification_serializer.rb index 31c703832..f3c4ffc47 100644 --- a/app/serializers/web/notification_serializer.rb +++ b/app/serializers/web/notification_serializer.rb @@ -2,168 +2,37 @@ class Web::NotificationSerializer < ActiveModel::Serializer include RoutingHelper - include StreamEntriesHelper + include ActionView::Helpers::TextHelper + include ActionView::Helpers::SanitizeHelper - class DataSerializer < ActiveModel::Serializer - include RoutingHelper - include StreamEntriesHelper - include ActionView::Helpers::SanitizeHelper + attributes :access_token, :preferred_locale, :notification_id, + :notification_type, :icon, :title, :body - attributes :content, :nsfw, :url, :actions, - :access_token, :message, :dir - - 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.associated_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 + def access_token + current_push_subscription.associated_access_token end - attributes :title, :image, :badge, :tag, - :timestamp, :icon - - has_one :data, serializer: DataSerializer - - 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 + def preferred_locale + current_push_subscription.associated_user&.locale || I18n.default_locale 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 + def notification_id object.id end - def timestamp - object.created_at + def notification_type + object.type end def icon - object.from_account.avatar_static_url + full_asset_url(object.from_account.avatar_static_url) end - def data - object + def title + I18n.t("notification_mailer.#{object.type}.subject", name: object.from_account.display_name.presence || object.from_account.username) end - private - - def name - display_name(object.from_account) + def body + truncate(strip_tags(object.target_status&.spoiler_text&.presence || object.target_status&.text || object.from_account.note), length: 140) end end diff --git a/config/locales/ar.yml b/config/locales/ar.yml index 194d91cb0..f187bd6ac 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -576,19 +576,6 @@ ar: other: إعدادات أخرى publishing: النشر web: الويب - push_notifications: - favourite: - title: أعجب %{name} بمنشورك - follow: - title: "%{name} من متتبعيك الآن" - group: - title: "%{count} إخطارات" - mention: - action_boost: ترقية - action_expand: عرض المزيد - title: أشار إليك %{name} - reblog: - title: قام %{name} بترقية منشورك remote_follow: acct: قم بإدخال عنوان حسابك username@domain الذي من خلاله تود المتابعة missing_resource: تعذر العثور على رابط التحويل المطلوب الخاص بحسابك diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 97b52cfa5..4e051bc36 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -594,20 +594,6 @@ ca: other: Altre publishing: Publicació web: Web - push_notifications: - favourite: - title: "%{name} ha marcat com a preferit el teu estat" - follow: - title: "%{name} ara et segueix" - group: - title: "%{count} notificacions" - mention: - action_boost: Retooteja - action_expand: Mostra'n més - action_favourite: Preferit - title: "%{name} t'ha mencionat" - reblog: - title: "%{name} t'ha retootejat" remote_follow: acct: Escriu el teu usuari@domini des del qual vols seguir missing_resource: No s'ha pogut trobar la URL de redirecció necessaria per al compte diff --git a/config/locales/co.yml b/config/locales/co.yml index 637491d6b..32661b2c5 100644 --- a/config/locales/co.yml +++ b/config/locales/co.yml @@ -593,20 +593,6 @@ co: other: Altre publishing: Pubblicazione web: Web - push_notifications: - favourite: - title: "%{name} hà aghjuntu u vostru statutu à i so favuriti" - follow: - title: "%{name} vi seguita" - group: - title: "%{count} nutificazioni" - mention: - action_boost: Sparte - action_expand: Vede di più - action_favourite: Aghjunghje à i favuriti - title: "%{name} v’hà mintuvatu·a" - reblog: - title: "%{name} hà spartutu u vostru statutu" remote_follow: acct: Entrate u vostru cugnome@istanza da induve vulete siguità stu contu missing_resource: Ùn avemu pussutu à truvà l’indirizzu di ridirezzione diff --git a/config/locales/de.yml b/config/locales/de.yml index c0254f73f..75c8b11cf 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -594,20 +594,6 @@ de: other: Weiteres publishing: Beiträge web: Web - push_notifications: - favourite: - title: "%{name} hat deinen Beitrag favorisiert" - follow: - title: "%{name} folgt dir nun" - group: - title: "%{count} Benachrichtigungen" - mention: - action_boost: Teilen - action_expand: Mehr anzeigen - action_favourite: Favorisieren - title: "%{name} hat dich erwähnt" - reblog: - title: "%{name} hat deinen Beitrag geteilt" remote_follow: acct: Profilname@Domain, von wo aus du dieser Person folgen möchtest missing_resource: Die erforderliche Weiterleitungs-URL für dein Konto konnte nicht gefunden werden diff --git a/config/locales/en.yml b/config/locales/en.yml index 0257241cf..b9429dbee 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -595,20 +595,6 @@ en: other: Other publishing: Publishing web: Web - push_notifications: - favourite: - title: "%{name} favourited your status" - follow: - title: "%{name} is now following you" - group: - title: "%{count} notifications" - mention: - action_boost: Boost - action_expand: Show more - action_favourite: Favourite - title: "%{name} mentioned you" - reblog: - title: "%{name} boosted your status" 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/eo.yml b/config/locales/eo.yml index 0903e3517..892070914 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -596,20 +596,6 @@ eo: other: Aliaj aferoj publishing: Publikado web: Reto - push_notifications: - favourite: - title: "%{name} stelumis vian mesaĝon" - follow: - title: "%{name} eksekvis vin" - group: - title: "%{count} sciigoj" - mention: - action_boost: Diskonigi - action_expand: Montri pli - action_favourite: Stelumi - title: "%{name} menciis vin" - reblog: - title: "%{name} diskonigis vian mesaĝon" remote_follow: acct: Enmetu vian uzantnomo@domajno de kie vi volas sekvi missing_resource: La URL de plusendado ne estis trovita diff --git a/config/locales/es.yml b/config/locales/es.yml index 593716b16..3e22e2643 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -593,20 +593,6 @@ es: other: Otros publishing: Publicación web: Web - push_notifications: - favourite: - title: "%A {name} le gustó tu estado" - follow: - title: "%{name} te ha empezado a seguir" - group: - title: "%{count} notificaciones" - mention: - action_boost: Retoot - action_expand: Mostrar más - action_favourite: Me Gusta - title: "%{name} te mencionó" - reblog: - title: "%{name} boosteó tu estado" remote_follow: acct: Ingesa tu usuario@dominio desde el que quieres seguir missing_resource: No se pudo encontrar la URL de redirección requerida para tu cuenta diff --git a/config/locales/fa.yml b/config/locales/fa.yml index 1a8372d63..b73f2401d 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -593,20 +593,6 @@ fa: other: سایر publishing: انتشار web: وب - push_notifications: - favourite: - title: "%{name} نوشتهٔ شما را پسندید" - follow: - title: "%{name} هم‌اینک پیگیر شماست" - group: - title: "%{count} اعلان" - mention: - action_boost: بازبوق - action_expand: نمایش بیشتر - action_favourite: پسندیدن - title: "%{name} از شما نام برد" - reblog: - title: "%{name} نوشتهٔ شما را بازبوقید" remote_follow: acct: نشانی حساب username@domain خود را این‌جا بنویسید missing_resource: نشانی اینترنتی برای رسیدن به حساب شما پیدا نشد diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 68a239ba3..1e02efbd2 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -590,20 +590,6 @@ fi: other: Muut publishing: Julkaiseminen web: Web - push_notifications: - favourite: - title: "%{name} tykkäsi tilastasi" - follow: - title: "%{name} seuraa nyt sinua" - group: - title: "%{count} ilmoitusta" - mention: - action_boost: Buustaa - action_expand: Näytä lisää - action_favourite: Tykkää - title: "%{nimi} mainitsi sinut" - reblog: - title: "%{name} buustasi tilaasi" remote_follow: acct: Syötä se käyttäjätunnus@verkkotunnus, josta haluat seurata missing_resource: Vaadittavaa uudelleenohjaus-URL:ää tiliisi ei löytynyt diff --git a/config/locales/fr.yml b/config/locales/fr.yml index f8f9026c8..4265a7248 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -594,20 +594,6 @@ fr: other: Autre publishing: Publication web: Web - push_notifications: - favourite: - title: "%{name} a mis votre statut en favori" - follow: - title: "%{name} vous suit" - group: - title: "%{count} notifications" - mention: - action_boost: Partager - action_expand: Montrer plus - action_favourite: Ajouter aux favoris - title: "%{name} vous a mentionné·e" - reblog: - title: "%{name} a partagé votre statut" remote_follow: acct: Entrez votre pseudo@instance depuis lequel vous voulez suivre cet·te utilisateur⋅ice missing_resource: L’URL de redirection n’a pas pu être trouvée diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 6cf83ca27..d38cffb96 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -594,20 +594,6 @@ gl: other: Outro publishing: Publicando web: Web - push_notifications: - favourite: - title: "%{name} marcou favorito o seu estado" - follow: - title: "%{name} agora está a seguila" - group: - title: "%{count} notificacións" - mention: - action_boost: Promover - action_expand: Mostar máis - action_favourite: Favorito - title: "%{name} mencionouna" - reblog: - title: "%{name} promoveu un dos seus estados" remote_follow: acct: Introduza o seu nomedeusuaria@dominio desde onde quere facer seguimento missing_resource: Non se puido atopar o URL de redirecionamento requerido para a súa conta diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 0cd0021c1..41093aa43 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -531,20 +531,6 @@ hu: other: Egyéb publishing: Közzététel web: Web - push_notifications: - favourite: - title: "%{name} a kedvenceihez adta a tülköd" - follow: - title: "%{name} mostantól követ téged" - group: - title: "%{count} értesítés" - mention: - action_boost: Reblog - action_expand: Mutass többet - action_favourite: Kedvencekhez adás - title: "%{name} megemlített téged" - reblog: - title: "%{name} reblogolta a tülköd" remote_follow: acct: Írd be a felhasználódat, amelyről követni szeretnéd felhasznalonev@domain formátumban missing_resource: A fiókodnál nem található a szükséges átirányítási URL diff --git a/config/locales/it.yml b/config/locales/it.yml index b53645c9f..a761bff4e 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -506,18 +506,6 @@ it: other: Altro publishing: Pubblicazione web: Web - push_notifications: - favourite: - title: "%{name} ha segnato il tuo status come apprezzato" - follow: - title: "%{name} ha iniziato a seguirti" - group: - title: "%{count} notifiche" - mention: - action_expand: Mostra altro - action_favourite: Apprezzato - reblog: - title: "%{name} ha condiviso il tuo status" remote_follow: acct: Inserisci il tuo username@dominio da cui vuoi seguire questo utente missing_resource: Impossibile trovare l'URL di reindirizzamento richiesto per il tuo account diff --git a/config/locales/ja.yml b/config/locales/ja.yml index b6c8f7bcc..cb7340dde 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -594,20 +594,6 @@ ja: other: その他 publishing: 投稿 web: ウェブ - push_notifications: - favourite: - title: あなたのトゥートが %{name} さんにお気に入り登録されました - follow: - title: "%{name} さんにフォローされました" - group: - title: "%{count} 件の通知" - mention: - action_boost: ブースト - action_expand: もっと見る - action_favourite: お気に入り - title: "%{name} さんから返信がありました" - reblog: - title: あなたのトゥートが %{name} さんにブーストされました remote_follow: acct: あなたの ユーザー名@ドメイン を入力してください missing_resource: リダイレクト先が見つかりませんでした diff --git a/config/locales/ko.yml b/config/locales/ko.yml index c0da95db3..38f411dd5 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -596,20 +596,6 @@ ko: other: 기타 publishing: 퍼블리싱 web: 웹 - push_notifications: - favourite: - title: "%{name} 님이 당신의 툿를 즐겨찾기에 등록했습니다" - follow: - title: "%{name} 님이 나를 팔로우 하고 있습니다" - group: - title: "%{count} 건의 알림" - mention: - action_boost: 부스트 - action_expand: 더보기 - action_favourite: 즐겨찾기 - title: "%{name} 님이 답장을 보냈습니다" - reblog: - title: "%{name} 님이 당신의 툿을 부스트 했습니다" remote_follow: acct: 아이디@도메인을 입력해 주십시오 missing_resource: 리디렉션 대상을 찾을 수 없습니다 diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 53468a67d..7ec512d9e 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -594,20 +594,6 @@ nl: other: Overig publishing: Publiceren web: Webapp - push_notifications: - favourite: - title: "%{name} markeerde jouw toot als favoriet" - follow: - title: "%{name} volgt jou nu" - group: - title: "%{count} meldingen" - mention: - action_boost: Boost - action_expand: Meer tonen - action_favourite: Favoriet - title: "%{name} vermeldde jou" - reblog: - title: "%{name} boostte jouw toot" 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/no.yml b/config/locales/no.yml index 837042f85..eb1d27a19 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -531,20 +531,6 @@ other: Annet publishing: Publisering web: Web - push_notifications: - favourite: - title: "%{name} favoriserte din status" - follow: - title: "%{name} følger deg nå" - group: - title: "%{count} varslinger" - mention: - action_boost: Fremhev - action_expand: Vis mer - action_favourite: Favoritter - title: "%{name} nevnte deg" - reblog: - title: "%{name} fremhevde din status" remote_follow: acct: Tast inn brukernavn@domene som du vil følge fra missing_resource: Kunne ikke finne URLen for din konto diff --git a/config/locales/oc.yml b/config/locales/oc.yml index c9a33aad6..4a8453457 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -668,20 +668,6 @@ oc: other: Autre publishing: Publicar web: Interfàcia Web - push_notifications: - favourite: - title: "%{name} a mes vòstre estatut en favorit" - follow: - title: "%{name} vos sèc ara" - group: - title: "%{count} notificacions" - mention: - action_boost: Partejar - action_expand: Ne veire mai - action_favourite: Ajustar als favorits - title: "%{name} vos a mencionat" - reblog: - 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 e465388e2..15dfdf740 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -603,20 +603,6 @@ pl: other: Pozostałe publishing: Publikowanie web: Sieć - push_notifications: - favourite: - title: "%{name} dodał Twój wpis do ulubionych" - follow: - title: "%{name} zaczął Cię śledzić" - group: - title: "%{count} powiadomień" - mention: - action_boost: Podbij - action_expand: Pokaż więcej - action_favourite: Dodaj do ulubionych - title: "%{name} wspomniał o Tobie" - reblog: - title: "%{name} podbił Twój wpis" 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/pt-BR.yml b/config/locales/pt-BR.yml index 702236198..cf7584999 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -593,20 +593,6 @@ pt-BR: other: Outro publishing: Publicação web: Web - push_notifications: - favourite: - title: "%{name} favoritou a sua postagem" - follow: - title: "%{name} está te seguindo" - group: - title: "%{count} notificações" - mention: - action_boost: Compartilhar - action_expand: Mostrar mais - action_favourite: Favoritar - title: "%{name} mencionou você" - reblog: - title: "%{name} compartilhou a sua postagem" remote_follow: acct: Insira o seu usuário@domínio do qual você quer seguir missing_resource: Não foi possível encontrar a URL de direcionamento para a sua conta diff --git a/config/locales/pt.yml b/config/locales/pt.yml index 7c10124ff..a1370c91d 100644 --- a/config/locales/pt.yml +++ b/config/locales/pt.yml @@ -534,20 +534,6 @@ pt: other: Outro publishing: Publicação web: Web - push_notifications: - favourite: - title: "%{name} adicionou o teu post aos favoritos" - follow: - title: "%{name} começou a seguir-te" - group: - title: "%{count} notificações" - mention: - action_boost: Partilhar - action_expand: Mostrar mais - action_favourite: Adicionar aos favoritos - title: "%{name} mencionou-te" - reblog: - title: "%{name} partilhou o teu post" remote_follow: acct: Entre seu usuário@domínio do qual quer seguir missing_resource: Não foi possível achar a URL de redirecionamento para sua conta diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 2363bba12..19b844612 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -606,20 +606,6 @@ ru: other: Другое publishing: Публикация web: WWW - push_notifications: - favourite: - title: Ваш статус понравился %{name} - follow: - title: "%{name} теперь подписан(а) на Вас" - group: - title: "%{count} уведомлений" - mention: - action_boost: Продвинуть - action_expand: Развернуть - action_favourite: Нравится - title: Вас упомянул(а) %{name} - reblog: - title: "%{name} продвинул(а) Ваш статус" remote_follow: acct: Введите username@domain, откуда Вы хотите подписаться missing_resource: Поиск требуемого перенаправления URL для Вашего аккаунта завершился неудачей diff --git a/config/locales/sk.yml b/config/locales/sk.yml index 8debd87ff..3e1300b2b 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -591,20 +591,6 @@ sk: other: Ostatné publishing: Publikovanie web: Web - push_notifications: - favourite: - title: "%{name} si obľúbil/a tvoj príspevok" - follow: - title: "%{name} ťa teraz následuje" - group: - title: "%{count} notifikácie" - mention: - action_boost: Pozdvihni - action_expand: Ukáž viac - action_favourite: Obľúbené - title: "%{name} ťa spomenul/a" - reblog: - title: "%{name} vyzdvihli tvoj príspevok" remote_follow: acct: Napíš svoju prezývku@doménu z ktorej chceš následovať missing_resource: Nemôžeme nájsť potrebnú presmerovaciu adresu k tvojmu účtu diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml index 0c7756c53..15c6b00ac 100644 --- a/config/locales/sr-Latn.yml +++ b/config/locales/sr-Latn.yml @@ -525,20 +525,6 @@ sr-Latn: other: Ostali publishing: Objavljivanje web: Veb - push_notifications: - favourite: - title: "%{name} je stavio Vaš status za omiljeni" - follow: - title: "%{name} Vas je zapratio" - group: - title: "%{count} obaveštenja" - mention: - action_boost: Podrži - action_expand: Prikaži još - action_favourite: Omiljeni - title: "%{name} Vas je pomenuo" - reblog: - title: "%{name} je podržao(la) Vaš status" remote_follow: acct: Unesite Vaš korisnik@domen sa koga želite da pratite missing_resource: Ne mogu da nađem zahtevanu adresu preusmeravanja za Vaš nalog diff --git a/config/locales/sr.yml b/config/locales/sr.yml index 1cb87ff30..d34a2ecbf 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -525,20 +525,6 @@ sr: other: Остали publishing: Објављивање web: Веб - push_notifications: - favourite: - title: "%{name} је ставио Ваш статус за омиљени" - follow: - title: "%{name} Вас је запратио" - group: - title: "%{count} обавештења" - mention: - action_boost: Подржи - action_expand: Прикажи још - action_favourite: Омиљени - title: "%{name} Вас је поменуо" - reblog: - title: "%{name} је подржао(ла) Ваш статус" remote_follow: acct: Унесите Ваш корисник@домен са кога желите да пратите missing_resource: Не могу да нађем захтевану адресу преусмеравања за Ваш налог diff --git a/config/locales/sv.yml b/config/locales/sv.yml index 1b0965655..73645d013 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -592,20 +592,6 @@ sv: other: Annat publishing: Publicering web: Webb - push_notifications: - favourite: - title: "%{name} favoriserade din status" - follow: - title: "%{name} följer nu dig" - group: - title: "%{count} meddelanden" - mention: - action_boost: Knuffa - action_expand: Visa mer - action_favourite: Favoriter - title: "%{name} nämnde dig" - reblog: - title: "%{name} boostade din status" remote_follow: acct: Ange ditt användarnamn@domän du vill följa från missing_resource: Det gick inte att hitta den begärda omdirigeringsadressen för ditt konto diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 5eca9e6a5..9f98a893d 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -523,20 +523,6 @@ zh-CN: other: 其他 publishing: 发布 web: 站内 - push_notifications: - favourite: - title: "%{name} 收藏了你的嘟文" - follow: - title: "%{name} 关注了你" - group: - title: "%{count} 条新通知" - mention: - action_boost: 转嘟 - action_expand: 显示更多 - action_favourite: 收藏 - title: "%{name} 提到了你" - reblog: - title: "%{name} 转嘟了你的嘟文" remote_follow: acct: 请输入你的“用户名@实例域名” missing_resource: 无法确定你的帐户的跳转 URL diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml index 04df558b1..14eedc9ba 100644 --- a/config/locales/zh-HK.yml +++ b/config/locales/zh-HK.yml @@ -593,20 +593,6 @@ zh-HK: other: 其他 publishing: 發佈 web: 站内 - push_notifications: - favourite: - title: "%{name} 收藏了你的文章" - follow: - title: "%{name} 關注了你" - group: - title: "%{count} 條新通知" - mention: - action_boost: 轉推 - action_expand: 顯示更多 - action_favourite: 收藏 - title: "%{name} 提到了你" - reblog: - title: "%{name} 轉推了你的文章" remote_follow: acct: 請輸入你的︰用戶名稱@服務點域名 missing_resource: 無法找到你用戶的轉接網址 From 587da93152aa68f4ebe3285155aea5642f517d40 Mon Sep 17 00:00:00 2001 From: takayamaki Date: Sat, 19 May 2018 21:47:44 +0900 Subject: [PATCH 09/17] checking http status code with range (#7544) --- app/workers/activitypub/delivery_worker.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/workers/activitypub/delivery_worker.rb b/app/workers/activitypub/delivery_worker.rb index 9b278eb72..323a9f85b 100644 --- a/app/workers/activitypub/delivery_worker.rb +++ b/app/workers/activitypub/delivery_worker.rb @@ -44,11 +44,11 @@ class ActivityPub::DeliveryWorker end def response_successful?(response) - response.code > 199 && response.code < 300 + (200...300).cover?(response.code) end def response_error_unsalvageable?(response) - response.code > 399 && response.code < 500 && response.code != 429 + (400...500).cover?(response.code) && response.code != 429 end def failure_tracker From 93c66f0c03c27ee02b9875c3c051d9bf50b33e19 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 19 May 2018 16:10:55 +0200 Subject: [PATCH 10/17] In footer, replace text "Mastodon" with logo (#7545) --- app/javascript/styles/mastodon/footer.scss | 8 ++++++++ app/views/layouts/public.html.haml | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/app/javascript/styles/mastodon/footer.scss b/app/javascript/styles/mastodon/footer.scss index dd3c1b688..fe2d40c0c 100644 --- a/app/javascript/styles/mastodon/footer.scss +++ b/app/javascript/styles/mastodon/footer.scss @@ -26,5 +26,13 @@ text-decoration: none; } } + + img { + margin: 0 4px; + position: relative; + bottom: -1px; + height: 18px; + vertical-align: top; + } } } diff --git a/app/views/layouts/public.html.haml b/app/views/layouts/public.html.haml index 63cc3c7a7..600290297 100644 --- a/app/views/layouts/public.html.haml +++ b/app/views/layouts/public.html.haml @@ -12,6 +12,6 @@ - else %span.footer__domain= link_to site_hostname, root_path %span.powered-by - != t('generic.powered_by', link: link_to('Mastodon', 'https://joinmastodon.org')) + != t('generic.powered_by', link: link_to('https://joinmastodon.org') { image_tag asset_pack_path('logo_full.svg'), alt: 'Mastodon' }) = render template: 'layouts/application' From 1bbe12254d450aadf343ea337287f5e4b6ce5e80 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 19 May 2018 18:37:33 +0200 Subject: [PATCH 11/17] Improve direct message warning again (#7546) --- .../features/compose/containers/warning_container.js | 10 +++++++++- app/javascript/mastodon/locales/en.json | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/features/compose/containers/warning_container.js b/app/javascript/mastodon/features/compose/containers/warning_container.js index 88f816da4..8200a319f 100644 --- a/app/javascript/mastodon/features/compose/containers/warning_container.js +++ b/app/javascript/mastodon/features/compose/containers/warning_container.js @@ -17,11 +17,19 @@ const WarningWrapper = ({ needsLockWarning, hashtagWarning, directMessageWarning if (needsLockWarning) { return }} />} />; } + if (hashtagWarning) { return } />; } + if (directMessageWarning) { - return } />; + const message = ( + + + + ); + + return ; } return null; diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 11589d797..85bfd11dd 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -60,7 +60,7 @@ "column_header.unpin": "Unpin", "column_subheading.navigation": "Navigation", "column_subheading.settings": "Settings", - "compose_form.direct_message_warning": "This toot will only be sent to the mentioned users. However, the operators of yours and any of the receiving instances may inspect this message.", + "compose_form.direct_message_warning": "This toot will only be sent to the mentioned users.", "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", "compose_form.lock_disclaimer.lock": "locked", From bcbb6aa46ff6f7c634b38e71bd719ccf52b84172 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 19 May 2018 18:38:10 +0200 Subject: [PATCH 12/17] Bump version to 2.4.0rc4 --- lib/mastodon/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb index 874dfedb7..a08a7bf1e 100644 --- a/lib/mastodon/version.rb +++ b/lib/mastodon/version.rb @@ -21,7 +21,7 @@ module Mastodon end def flags - 'rc3' + 'rc4' end def to_a From 4e1400cecb33743335fcf88b4d128aa1954c6c63 Mon Sep 17 00:00:00 2001 From: Akihiko Odaki Date: Sun, 20 May 2018 02:22:11 +0900 Subject: [PATCH 13/17] Cache media only when storage can be freed (#7547) --- app/javascript/mastodon/service_worker/entry.js | 4 ++-- app/javascript/mastodon/storage/modifier.js | 10 ++++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/app/javascript/mastodon/service_worker/entry.js b/app/javascript/mastodon/service_worker/entry.js index 5955e9146..ce42271a9 100644 --- a/app/javascript/mastodon/service_worker/entry.js +++ b/app/javascript/mastodon/service_worker/entry.js @@ -1,4 +1,4 @@ -import { freeStorage } from '../storage/modifier'; +import { freeStorage, storageFreeable } from '../storage/modifier'; import './web_push_notifications'; function openSystemCache() { @@ -49,7 +49,7 @@ self.addEventListener('fetch', function(event) { return response; })); - } else if (process.env.CDN_HOST ? url.host === process.env.CDN_HOST : url.pathname.startsWith('/system/')) { + } else if (storageFreeable && process.env.CDN_HOST ? url.host === process.env.CDN_HOST : url.pathname.startsWith('/system/')) { event.respondWith(openSystemCache().then(cache => { return cache.match(event.request.url).then(cached => { if (cached === undefined) { diff --git a/app/javascript/mastodon/storage/modifier.js b/app/javascript/mastodon/storage/modifier.js index a42b6ab12..9fadabef4 100644 --- a/app/javascript/mastodon/storage/modifier.js +++ b/app/javascript/mastodon/storage/modifier.js @@ -4,6 +4,11 @@ const accountAssetKeys = ['avatar', 'avatar_static', 'header', 'header_static']; const storageMargin = 8388608; const storeLimit = 1024; +// navigator.storage is not present on: +// Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.100 Safari/537.36 Edge/16.16299 +// estimate method is not present on Chrome 57.0.2987.98 on Linux. +export const storageFreeable = 'storage' in navigator && 'estimate' in navigator.storage; + function openCache() { // ServiceWorker and Cache API is not available on iOS 11 // https://webkit.org/status/#specification-service-workers @@ -182,10 +187,7 @@ export function putStatuses(records) { } export function freeStorage() { - // navigator.storage is not present on: - // Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.100 Safari/537.36 Edge/16.16299 - // estimate method is not present on Chrome 57.0.2987.98 on Linux. - return 'storage' in navigator && 'estimate' in navigator.storage && navigator.storage.estimate().then(({ quota, usage }) => { + return storageFreeable && navigator.storage.estimate().then(({ quota, usage }) => { if (usage + storageMargin < quota) { return null; } From 50db1062521b1e436fc090483ad49acf8de8340d Mon Sep 17 00:00:00 2001 From: Ash Furrow Date: Sat, 19 May 2018 13:36:23 -0400 Subject: [PATCH 14/17] Disables autocorrect/autocapitalize on remote username field. (#7549) --- app/views/remote_follow/new.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/remote_follow/new.html.haml b/app/views/remote_follow/new.html.haml index fa48e5e62..fc5c4da20 100644 --- a/app/views/remote_follow/new.html.haml +++ b/app/views/remote_follow/new.html.haml @@ -7,7 +7,7 @@ = simple_form_for @remote_follow, as: :remote_follow, url: account_remote_follow_path(@account) do |f| = render 'shared/error_messages', object: @remote_follow - = f.input :acct, placeholder: t('remote_follow.acct') + = f.input :acct, placeholder: t('remote_follow.acct'), input_html: { autocapitalize: 'none', autocorrect: 'off' } .actions = f.button :button, t('remote_follow.proceed'), type: :submit From 5910eb9b61da6eacf6b534d831da6e2f698e2703 Mon Sep 17 00:00:00 2001 From: Peter Date: Sat, 19 May 2018 19:46:18 +0100 Subject: [PATCH 15/17] Add :few keys for sk lang plurals (#7551) * Add :few keys for sk lang plurals * i18n-tasks normalize --- config/locales/devise.sk.yml | 1 + config/locales/simple_form.sk.yml | 2 ++ config/locales/sk.yml | 12 ++++++++++-- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/config/locales/devise.sk.yml b/config/locales/devise.sk.yml index e9c5dd455..4bbc723e9 100644 --- a/config/locales/devise.sk.yml +++ b/config/locales/devise.sk.yml @@ -78,5 +78,6 @@ sk: not_found: nenájdený not_locked: nebol uzamknutý not_saved: + few: "%{resource} nebol uložený kôli %{count} chybám:" one: "%{resource} nebol uložený kôli chybe:" other: "%{resource} nebol uložený kôli %{count} chybám:" diff --git a/config/locales/simple_form.sk.yml b/config/locales/simple_form.sk.yml index 6992094db..00a8489de 100644 --- a/config/locales/simple_form.sk.yml +++ b/config/locales/simple_form.sk.yml @@ -7,12 +7,14 @@ sk: bot: Varuje užívateľov, že daný účet nerepreyentuje ozajstného človeka digest: Odoslané iba v prípade dlhodobej neprítomnosti, a len ak ste obdŕžali nejaké osobné správy kým ste boli preč display_name: + few: Ostávajú ti %{count} znaky one: Ostáva ti 1 znak other: Ostáva ti %{count} znakov fields: Môžeš mať 4 položky na svojom profile zobrazené vo forme tabuľky header: PNG, GIF alebo JPG. Maximálne 2MB. Bude zmenšený na 700x335px locked: Musíte manuálne schváliť sledujúcich note: + few: Ostávajú ti %{count} znaky one: Ostáva vám 1 znak other: Ostáva ti %{count} znakov setting_noindex: Ovplyvňuje verejný profil a statusy diff --git a/config/locales/sk.yml b/config/locales/sk.yml index 3e1300b2b..2d2a87aae 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -227,6 +227,7 @@ sk: severity: Závažnosť show: affected_accounts: + few: "%{count} účty v databáze ovplyvnených" one: Jeden účet v databáze ovplyvnený other: "%{count} účtov v databáze ovplyvnených" retroactive: @@ -478,6 +479,7 @@ sk: lock_link: Zamknite svoj účet purge: Odstrániť následovateľa success: + few: Počas utišovania sledovateľov z %{count} domén... one: Počas utišovania sledovateľov z jednej domény... other: Počas utišovania sledovateľov z %{count} domén... true_privacy_html: Prosím majte na vedomí, 1 že ozajstné súkromie sa dá dosiahnúť iba za pomoci end-to-end enkrypcie 2. @@ -488,8 +490,9 @@ sk: powered_by: poháňané vďaka %{link} save_changes: Uložiť zmeny validation_errors: + few: Niečo ešte stále nieje v poriadku! Prosím skontroluj všetky %{count} chyby one: Niečo nieje úplne v poriadku! Prosím skontroluj chybu - other: Niečo ešte stále nieje v poriadku! Prosím skontroluj všetky %{count} chyby + other: Niečo ešte stále nieje v poriadku! Prosím skontroluj všetkých %{count} chýb imports: preface: Môžeš importovať dáta ktoré si exportoval/a z iného Mastodon serveru, ako sú napríklad zoznamy ľudí ktorých sleduješ, alebo blokuješ. success: Tvoje dáta boli nahraté úspešne, a budú teraz spracované v danom čase @@ -512,6 +515,7 @@ sk: expires_in_prompt: Nikdy generate: Vygeneruj max_uses: + few: "%{count} použitia" one: jedno použitie other: "%{count} použití" max_uses_prompt: Bez limitov @@ -542,11 +546,13 @@ sk: body: Tu nájdete krátky súhrn správ ktoré ste zmeškali od svojej poslednj návštevi od %{since} mention: "%{name} ťa spomenul/a v:" new_followers_summary: + few: Taktiež, získal/a si %{count} nových následovníkov za tú dobu čo si bol/a preč. Yay! one: Taktiež, získal/a si jedného nového následovníka zatiaľ čo si bol/a preč. Yay! other: Taktiež, získal/a si %{count} nových následovníkov za tú dobu čo si bol/a preč. Yay! subject: + few: "%{count} nové notifikácie od tvojej poslednej návštevy \U0001F418" one: "1 nová notifikácia od tvojej poslednej návštevy \U0001F418" - other: "%{count} nové notifikácie od tvojej poslednej návštevy \U0001F418" + other: "%{count} nových notifikácií od tvojej poslednej návštevy \U0001F418" title: Zatiaľ čo si bol/a preč… favourite: body: 'Tvoj príspevok bol uložený medi obľúbené užívateľa %{name}:' @@ -640,9 +646,11 @@ sk: attached: description: 'Priložené: %{attached}' image: + few: "%{count} obrázky" one: "%{count} obrázok" other: "%{count} obrázkov" video: + few: "%{count} videá" one: "%{count} video" other: "%{count} videí" content_warning: 'Varovanie o obsahu: %{warning}' From 8378b72ebacc51e5e090faa527462b801e4c2803 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 19 May 2018 21:05:08 +0200 Subject: [PATCH 16/17] Ensure push subscription is immediately removed when application is revoked (#7548) * Ensure push subscription is immediately removed when application is revoked * When token is revoked from app, unsubscribe too --- .../authorized_applications_controller.rb | 5 ++++ app/controllers/oauth/tokens_controller.rb | 14 +++++++++++ app/models/web/push_subscription.rb | 9 ++++++++ config/routes.rb | 4 +++- ...authorized_applications_controller_spec.rb | 20 ++++++++++++++++ .../oauth/tokens_controller_spec.rb | 23 +++++++++++++++++++ .../web_push_subscription_fabricator.rb | 2 +- spec/fabricators/web_setting_fabricator.rb | 3 +-- 8 files changed, 76 insertions(+), 4 deletions(-) create mode 100644 app/controllers/oauth/tokens_controller.rb create mode 100644 spec/controllers/oauth/tokens_controller_spec.rb diff --git a/app/controllers/oauth/authorized_applications_controller.rb b/app/controllers/oauth/authorized_applications_controller.rb index 395fbc51b..0c28d194b 100644 --- a/app/controllers/oauth/authorized_applications_controller.rb +++ b/app/controllers/oauth/authorized_applications_controller.rb @@ -8,6 +8,11 @@ class Oauth::AuthorizedApplicationsController < Doorkeeper::AuthorizedApplicatio include Localized + def destroy + Web::PushSubscription.unsubscribe_for(params[:id], current_resource_owner) + super + end + private def store_current_location diff --git a/app/controllers/oauth/tokens_controller.rb b/app/controllers/oauth/tokens_controller.rb new file mode 100644 index 000000000..fa6d58f25 --- /dev/null +++ b/app/controllers/oauth/tokens_controller.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +class Oauth::TokensController < Doorkeeper::TokensController + def revoke + unsubscribe_for_token if authorized? && token.accessible? + super + end + + private + + def unsubscribe_for_token + Web::PushSubscription.where(access_token_id: token.id).delete_all + end +end diff --git a/app/models/web/push_subscription.rb b/app/models/web/push_subscription.rb index 7da3428fe..867bc9519 100644 --- a/app/models/web/push_subscription.rb +++ b/app/models/web/push_subscription.rb @@ -50,6 +50,15 @@ class Web::PushSubscription < ApplicationRecord end end + class << self + def unsubscribe_for(application_id, resource_owner) + access_token_ids = Doorkeeper::AccessToken.where(application_id: application_id, resource_owner_id: resource_owner.id, revoked_at: nil) + .pluck(:id) + + where(access_token_id: access_token_ids).delete_all + end + end + private def push_payload(message, ttl = 5.minutes.seconds) diff --git a/config/routes.rb b/config/routes.rb index bd9d09226..3042b5ea0 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -14,7 +14,9 @@ Rails.application.routes.draw do end use_doorkeeper do - controllers authorizations: 'oauth/authorizations', authorized_applications: 'oauth/authorized_applications' + controllers authorizations: 'oauth/authorizations', + authorized_applications: 'oauth/authorized_applications', + tokens: 'oauth/tokens' end get '.well-known/host-meta', to: 'well_known/host_meta#show', as: :host_meta, defaults: { format: 'xml' } diff --git a/spec/controllers/oauth/authorized_applications_controller_spec.rb b/spec/controllers/oauth/authorized_applications_controller_spec.rb index f967b507f..901e538e9 100644 --- a/spec/controllers/oauth/authorized_applications_controller_spec.rb +++ b/spec/controllers/oauth/authorized_applications_controller_spec.rb @@ -39,4 +39,24 @@ describe Oauth::AuthorizedApplicationsController do include_examples 'stores location for user' end end + + describe 'DELETE #destroy' do + let!(:user) { Fabricate(:user) } + let!(:application) { Fabricate(:application) } + let!(:access_token) { Fabricate(:accessible_access_token, application: application, resource_owner_id: user.id) } + let!(:web_push_subscription) { Fabricate(:web_push_subscription, user: user, access_token: access_token) } + + before do + sign_in user, scope: :user + post :destroy, params: { id: application.id } + end + + it 'revokes access tokens for the application' do + expect(Doorkeeper::AccessToken.where(application: application).first.revoked_at).to_not be_nil + end + + it 'removes subscriptions for the application\'s access tokens' do + expect(Web::PushSubscription.where(user: user).count).to eq 0 + end + end end diff --git a/spec/controllers/oauth/tokens_controller_spec.rb b/spec/controllers/oauth/tokens_controller_spec.rb new file mode 100644 index 000000000..ba8e367a6 --- /dev/null +++ b/spec/controllers/oauth/tokens_controller_spec.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Oauth::TokensController, type: :controller do + describe 'POST #revoke' do + let!(:user) { Fabricate(:user) } + let!(:access_token) { Fabricate(:accessible_access_token, resource_owner_id: user.id) } + let!(:web_push_subscription) { Fabricate(:web_push_subscription, user: user, access_token: access_token) } + + before do + post :revoke, params: { token: access_token.token } + end + + it 'revokes the token' do + expect(access_token.reload.revoked_at).to_not be_nil + end + + it 'removes web push subscription for token' do + expect(Web::PushSubscription.where(access_token: access_token).count).to eq 0 + end + end +end diff --git a/spec/fabricators/web_push_subscription_fabricator.rb b/spec/fabricators/web_push_subscription_fabricator.rb index 72d11b77c..97f90675d 100644 --- a/spec/fabricators/web_push_subscription_fabricator.rb +++ b/spec/fabricators/web_push_subscription_fabricator.rb @@ -1,4 +1,4 @@ -Fabricator(:web_push_subscription) do +Fabricator(:web_push_subscription, from: Web::PushSubscription) do endpoint Faker::Internet.url key_p256dh Faker::Internet.password key_auth Faker::Internet.password diff --git a/spec/fabricators/web_setting_fabricator.rb b/spec/fabricators/web_setting_fabricator.rb index e5136829b9..369b86bc1 100644 --- a/spec/fabricators/web_setting_fabricator.rb +++ b/spec/fabricators/web_setting_fabricator.rb @@ -1,3 +1,2 @@ -Fabricator('Web::Setting') do - +Fabricator(:web_setting, from: Web::Setting) do end From 6aa5ea1b5dff54941682cb006ac2b11ab7b77988 Mon Sep 17 00:00:00 2001 From: Yamagishi Kazutoshi Date: Sun, 20 May 2018 04:42:21 +0900 Subject: [PATCH 17/17] Weblate translations (2018-05-20) (#7552) * Translated using Weblate (French) Currently translated at 100.0% (76 of 76 strings) Translation: Mastodon/Doorkeeper Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/fr/ * Translated using Weblate (Italian) Currently translated at 100.0% (76 of 76 strings) Translation: Mastodon/Doorkeeper Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/it/ * Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (295 of 295 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/pt_BR/ * Translated using Weblate (Dutch) Currently translated at 100.0% (64 of 64 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/nl/ * Translated using Weblate (Catalan) Currently translated at 100.0% (64 of 64 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/ca/ * Translated using Weblate (French) Currently translated at 100.0% (64 of 64 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/fr/ * Translated using Weblate (Dutch) Currently translated at 100.0% (295 of 295 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/nl/ * Translated using Weblate (Catalan) Currently translated at 100.0% (295 of 295 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/ca/ * Translated using Weblate (Catalan) Currently translated at 100.0% (628 of 628 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ca/ * Translated using Weblate (Galician) Currently translated at 100.0% (295 of 295 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/gl/ * Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (76 of 76 strings) Translation: Mastodon/Doorkeeper Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/pt_BR/ * Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (295 of 295 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/pt_BR/ * Translated using Weblate (Portuguese (Brazil)) Currently translated at 99.6% (625 of 627 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/pt_BR/ * Translated using Weblate (Italian) Currently translated at 100.0% (295 of 295 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/it/ * Translated using Weblate (Italian) Currently translated at 83.7% (525 of 627 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/it/ * Translated using Weblate (Japanese) Currently translated at 100.0% (76 of 76 strings) Translation: Mastodon/Doorkeeper Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/ja/ * Translated using Weblate (Galician) Currently translated at 100.0% (64 of 64 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/gl/ * Translated using Weblate (Galician) Currently translated at 100.0% (64 of 64 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/gl/ * Translated using Weblate (Galician) Currently translated at 100.0% (627 of 627 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/gl/ * Translated using Weblate (Galician) Currently translated at 100.0% (628 of 628 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/gl/ * Translated using Weblate (Dutch) Currently translated at 100.0% (295 of 295 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/nl/ * Translated using Weblate (Japanese) Currently translated at 93.7% (60 of 64 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/ja/ * Translated using Weblate (Galician) Currently translated at 100.0% (295 of 295 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/gl/ * Translated using Weblate (Japanese) Currently translated at 100.0% (295 of 295 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/ja/ * Translated using Weblate (French) Currently translated at 99.5% (624 of 627 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/fr/ * Translated using Weblate (French) Currently translated at 100.0% (295 of 295 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/fr/ * Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (295 of 295 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/pt_BR/ * Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (64 of 64 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/pt_BR/ * Translated using Weblate (French) Currently translated at 99.6% (625 of 627 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/fr/ * Translated using Weblate (Catalan) Currently translated at 100.0% (66 of 66 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/ca/ * Translated using Weblate (Galician) Currently translated at 100.0% (66 of 66 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/gl/ * Translated using Weblate (Japanese) Currently translated at 93.9% (62 of 66 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/ja/ * Translated using Weblate (Japanese) Currently translated at 99.8% (627 of 628 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/ * Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (66 of 66 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/pt_BR/ * Translated using Weblate (Portuguese (Brazil)) Currently translated at 99.6% (626 of 628 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/pt_BR/ * Translated using Weblate (French) Currently translated at 100.0% (66 of 66 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/fr/ * Translated using Weblate (Dutch) Currently translated at 100.0% (66 of 66 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/nl/ * Translated using Weblate (Dutch) Currently translated at 100.0% (628 of 628 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/nl/ * Translated using Weblate (Slovak) Currently translated at 100.0% (295 of 295 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/sk/ * Translated using Weblate (French) Currently translated at 99.6% (626 of 628 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/fr/ * Translated using Weblate (Swedish) Currently translated at 99.5% (625 of 628 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/sv/ * Translated using Weblate (Slovak) Currently translated at 98.4% (65 of 66 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/sk/ * Translated using Weblate (Swedish) Currently translated at 95.4% (63 of 66 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/sv/ * Translated using Weblate (Japanese) Currently translated at 99.8% (627 of 628 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/ * Translated using Weblate (Persian) Currently translated at 100.0% (66 of 66 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/fa/ * Translated using Weblate (Persian) Currently translated at 100.0% (62 of 62 strings) Translation: Mastodon/Devise Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/devise/fa/ * Translated using Weblate (Persian) Currently translated at 100.0% (76 of 76 strings) Translation: Mastodon/Doorkeeper Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/fa/ * Translated using Weblate (Persian) Currently translated at 100.0% (62 of 62 strings) Translation: Mastodon/Devise Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/devise/fa/ * i18n-tasks normalize && i18n-tasks remove-unused && yarn manage:translations --- app/javascript/mastodon/locales/ar.json | 1 + app/javascript/mastodon/locales/bg.json | 1 + app/javascript/mastodon/locales/ca.json | 3 +- app/javascript/mastodon/locales/co.json | 1 + app/javascript/mastodon/locales/de.json | 1 + .../mastodon/locales/defaultMessages.json | 6 +- app/javascript/mastodon/locales/el.json | 1 + app/javascript/mastodon/locales/en.json | 1 + app/javascript/mastodon/locales/eo.json | 1 + app/javascript/mastodon/locales/es.json | 1 + app/javascript/mastodon/locales/eu.json | 1 + app/javascript/mastodon/locales/fa.json | 1 + app/javascript/mastodon/locales/fi.json | 1 + app/javascript/mastodon/locales/fr.json | 3 +- app/javascript/mastodon/locales/gl.json | 69 +++++++++--------- app/javascript/mastodon/locales/he.json | 1 + app/javascript/mastodon/locales/hr.json | 1 + app/javascript/mastodon/locales/hu.json | 1 + app/javascript/mastodon/locales/hy.json | 1 + app/javascript/mastodon/locales/id.json | 1 + app/javascript/mastodon/locales/io.json | 1 + app/javascript/mastodon/locales/it.json | 71 ++++++++++--------- app/javascript/mastodon/locales/ja.json | 3 +- app/javascript/mastodon/locales/ko.json | 1 + app/javascript/mastodon/locales/nl.json | 3 +- app/javascript/mastodon/locales/no.json | 1 + app/javascript/mastodon/locales/oc.json | 1 + app/javascript/mastodon/locales/pl.json | 1 + app/javascript/mastodon/locales/pt-BR.json | 7 +- app/javascript/mastodon/locales/pt.json | 1 + app/javascript/mastodon/locales/ru.json | 1 + app/javascript/mastodon/locales/sk.json | 3 +- app/javascript/mastodon/locales/sl.json | 1 + app/javascript/mastodon/locales/sr-Latn.json | 1 + app/javascript/mastodon/locales/sr.json | 1 + app/javascript/mastodon/locales/sv.json | 1 + app/javascript/mastodon/locales/te.json | 1 + app/javascript/mastodon/locales/th.json | 1 + app/javascript/mastodon/locales/tr.json | 1 + app/javascript/mastodon/locales/uk.json | 1 + app/javascript/mastodon/locales/zh-CN.json | 1 + app/javascript/mastodon/locales/zh-HK.json | 1 + app/javascript/mastodon/locales/zh-TW.json | 1 + config/locales/ca.yml | 1 + config/locales/devise.fa.yml | 12 ++++ config/locales/doorkeeper.fa.yml | 1 + config/locales/doorkeeper.fr.yml | 1 + config/locales/doorkeeper.it.yml | 1 + config/locales/doorkeeper.ja.yml | 1 + config/locales/doorkeeper.pt-BR.yml | 1 + config/locales/fr.yml | 6 +- config/locales/gl.yml | 5 +- config/locales/it.yml | 42 +++++++++-- config/locales/ja.yml | 6 +- config/locales/nl.yml | 1 + config/locales/pt-BR.yml | 3 + config/locales/simple_form.ca.yml | 4 +- config/locales/simple_form.fa.yml | 4 ++ config/locales/simple_form.fr.yml | 4 +- config/locales/simple_form.gl.yml | 6 +- config/locales/simple_form.ja.yml | 4 +- config/locales/simple_form.nl.yml | 4 +- config/locales/simple_form.pt-BR.yml | 4 +- config/locales/simple_form.sk.yml | 3 +- config/locales/simple_form.sv.yml | 3 +- config/locales/sv.yml | 8 ++- 66 files changed, 228 insertions(+), 99 deletions(-) diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index bb4189514..9827ac5f0 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -61,6 +61,7 @@ "column_subheading.navigation": "التصفح", "column_subheading.settings": "الإعدادات", "compose_form.direct_message_warning": "لن يَظهر هذا التبويق إلا للمستخدمين المذكورين.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "هذا التبويق لن يُدرَج تحت أي وسم كان بما أنه غير مُدرَج. لا يُسمح بالبحث إلّا عن التبويقات العمومية عن طريق الوسوم.", "compose_form.lock_disclaimer": "حسابك ليس {locked}. يمكن لأي شخص متابعتك و عرض المنشورات.", "compose_form.lock_disclaimer.lock": "مقفل", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index aeb4f09da..caba7703d 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -61,6 +61,7 @@ "column_subheading.navigation": "Navigation", "column_subheading.settings": "Settings", "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", "compose_form.lock_disclaimer.lock": "locked", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 4bf8ad1c6..7181589ec 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -60,7 +60,8 @@ "column_header.unpin": "No fixis", "column_subheading.navigation": "Navegació", "column_subheading.settings": "Configuració", - "compose_form.direct_message_warning": "Aquest toot només serà visible per a tots els usuaris esmentats.", + "compose_form.direct_message_warning": "Aquest toot només serà enviat als usuaris esmentats. De totes maneres, els operadors de la teva o de qualsevol de les instàncies receptores poden inspeccionar aquest missatge.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "Aquest toot no es mostrarà en cap etiqueta ja que no està llistat. Només els toots públics poden ser cercats per etiqueta.", "compose_form.lock_disclaimer": "El teu compte no està bloquejat {locked}. Tothom pot seguir-te i veure els teus missatges a seguidors.", "compose_form.lock_disclaimer.lock": "blocat", diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json index 8d924f973..c6de9d016 100644 --- a/app/javascript/mastodon/locales/co.json +++ b/app/javascript/mastodon/locales/co.json @@ -61,6 +61,7 @@ "column_subheading.navigation": "Navigazione", "column_subheading.settings": "Parametri", "compose_form.direct_message_warning": "Solu l'utilizatori mintuvati puderenu vede stu statutu.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "Stu statutu ùn hè \"Micca listatu\" è ùn sarà micca listatu indè e circate da hashtag. Per esse vistu in quesse, u statutu deve esse \"Pubblicu\".", "compose_form.lock_disclaimer": "U vostru contu ùn hè micca {locked}. Tuttu u mondu pò seguitavi è vede i vostri statuti privati.", "compose_form.lock_disclaimer.lock": "privatu", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 84b815d50..4d89ea704 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -61,6 +61,7 @@ "column_subheading.navigation": "Navigation", "column_subheading.settings": "Einstellungen", "compose_form.direct_message_warning": "Dieser Beitrag wird nur für die erwähnten Nutzer sichtbar sein.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "Dieser Beitrag wird nicht unter einen dieser Hashtags sichtbar sein, solange er ungelistet ist. Bei einer Suche kann er nicht gefunden werden.", "compose_form.lock_disclaimer": "Dein Profil ist nicht {locked}. Wer dir folgen will, kann das jederzeit tun und dann auch deine privaten Beiträge sehen.", "compose_form.lock_disclaimer.lock": "gesperrt", diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json index e2f3ac6dd..d2ec8e710 100644 --- a/app/javascript/mastodon/locales/defaultMessages.json +++ b/app/javascript/mastodon/locales/defaultMessages.json @@ -874,8 +874,12 @@ "id": "compose_form.hashtag_warning" }, { - "defaultMessage": "This toot will only be sent to all the mentioned users. However, the operators of your instance and any receiving instances may see this message.", + "defaultMessage": "This toot will only be sent to all the mentioned users.", "id": "compose_form.direct_message_warning" + }, + { + "defaultMessage": "Learn more", + "id": "compose_form.direct_message_warning_learn_more" } ], "path": "app/javascript/mastodon/features/compose/containers/warning_container.json" diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 6e8aa0e24..c547b2e28 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -61,6 +61,7 @@ "column_subheading.navigation": "Πλοήγηση", "column_subheading.settings": "Ρυθμίσεις", "compose_form.direct_message_warning": "Αυτό το τουτ θα εμφανίζεται μόνο σε όλους τους αναφερόμενους χρήστες.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "Αυτό το τουτ δεν θα εμφανίζεται κάτω από καμία ταμπέλα καθώς είναι αφανές. Μόνο τα δημόσια τουτ μπορούν να αναζητηθούν ανά ταμπέλα.", "compose_form.lock_disclaimer": "Ο λογαριασμός σου δεν είναι {locked}. Οποιοσδήποτε μπορεί να σε ακολουθήσει για να δει τις δημοσιεύσεις σας προς τους ακολούθους σας.", "compose_form.lock_disclaimer.lock": "κλειδωμένος", diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 85bfd11dd..caec0cbd3 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -61,6 +61,7 @@ "column_subheading.navigation": "Navigation", "column_subheading.settings": "Settings", "compose_form.direct_message_warning": "This toot will only be sent to the mentioned users.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", "compose_form.lock_disclaimer.lock": "locked", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 479fc6c6e..2715b80c9 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -61,6 +61,7 @@ "column_subheading.navigation": "Navigado", "column_subheading.settings": "Agordado", "compose_form.direct_message_warning": "Tiu mesaĝo videblos nur por ĉiuj menciitaj uzantoj.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "Ĉi tiu mesaĝo ne estos listigita per ajna kradvorto. Nur publikaj mesaĝoj estas serĉeblaj per kradvortoj.", "compose_form.lock_disclaimer": "Via konta ne estas {locked}. Iu ajn povas sekvi vin por vidi viajn mesaĝojn, kiuj estas nur por sekvantoj.", "compose_form.lock_disclaimer.lock": "ŝlosita", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 233e46561..668f437b9 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -61,6 +61,7 @@ "column_subheading.navigation": "Navegación", "column_subheading.settings": "Ajustes", "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "Este toot no se mostrará bajo hashtags porque no es público. Sólo los toots públicos se pueden buscar por hashtag.", "compose_form.lock_disclaimer": "Tu cuenta no está bloqueada. Todos pueden seguirte para ver tus toots solo para seguidores.", "compose_form.lock_disclaimer.lock": "bloqueado", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index 773d69287..8ec140753 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -61,6 +61,7 @@ "column_subheading.navigation": "Navigation", "column_subheading.settings": "Settings", "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", "compose_form.lock_disclaimer.lock": "locked", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index 957046c27..605961a01 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -61,6 +61,7 @@ "column_subheading.navigation": "گشت و گذار", "column_subheading.settings": "تنظیمات", "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", "compose_form.lock_disclaimer": "حساب شما {locked} نیست. هر کسی می‌تواند پیگیر شما شود و نوشته‌های ویژهٔ پیگیران شما را ببیند.", "compose_form.lock_disclaimer.lock": "قفل", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 55b9da70a..ead1eb8c4 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -61,6 +61,7 @@ "column_subheading.navigation": "Navigaatio", "column_subheading.settings": "Asetukset", "compose_form.direct_message_warning": "Tämä tuuttaus näkyy vain mainituille käyttäjille.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "Tämä tuuttaus ei näy hashtag-hauissa, koska se on listaamaton. Hashtagien avulla voi hakea vain julkisia tuuttauksia.", "compose_form.lock_disclaimer": "Tilisi ei ole {locked}. Kuka tahansa voi seurata tiliäsi ja nähdä vain seuraajille rajaamasi julkaisut.", "compose_form.lock_disclaimer.lock": "lukittu", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 44464cbc3..c05cb40c1 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -61,6 +61,7 @@ "column_subheading.navigation": "Navigation", "column_subheading.settings": "Paramètres", "compose_form.direct_message_warning": "Ce pouet sera uniquement envoyé qu'aux personnes mentionnées. Cependant, l'administration de votre instance et des instances réceptrices pourront inspecter ce message.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "Ce pouet ne sera pas listé dans les recherches par hashtag car sa visibilité est réglée sur \"non-listé\". Seuls les pouets avec une visibilité \"publique\" peuvent être recherchés par hashtag.", "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é", @@ -181,7 +182,7 @@ "notifications.column_settings.favourite": "Favoris :", "notifications.column_settings.follow": "Nouveaux⋅elles abonné⋅e·s :", "notifications.column_settings.mention": "Mentions :", - "notifications.column_settings.push": "Notifications push", + "notifications.column_settings.push": "Notifications", "notifications.column_settings.push_meta": "Cet appareil", "notifications.column_settings.reblog": "Partages :", "notifications.column_settings.show": "Afficher dans la colonne", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index aa7ba0d1e..90447ad4c 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -2,10 +2,10 @@ "account.badges.bot": "Bot", "account.block": "Bloquear @{name}", "account.block_domain": "Ocultar calquer contido de {domain}", - "account.blocked": "Blocked", - "account.direct": "Direct message @{name}", + "account.blocked": "Bloqueada", + "account.direct": "Mensaxe directa @{name}", "account.disclaimer_full": "A información inferior podería mostrar un perfil incompleto da usuaria.", - "account.domain_blocked": "Domain hidden", + "account.domain_blocked": "Dominio agochado", "account.edit_profile": "Editar perfil", "account.follow": "Seguir", "account.followers": "Seguidoras", @@ -17,7 +17,7 @@ "account.moved_to": "{name} marchou a:", "account.mute": "Acalar @{name}", "account.mute_notifications": "Acalar as notificacións de @{name}", - "account.muted": "Muted", + "account.muted": "Acalada", "account.posts": "Toots", "account.posts_with_replies": "Toots e respostas", "account.report": "Informar sobre @{name}", @@ -30,8 +30,8 @@ "account.unmute": "Non acalar @{name}", "account.unmute_notifications": "Desbloquear as notificacións de @{name}", "account.view_full_profile": "Ver o perfil completo", - "alert.unexpected.message": "An unexpected error occurred.", - "alert.unexpected.title": "Oops!", + "alert.unexpected.message": "Aconteceu un fallo non agardado.", + "alert.unexpected.title": "Vaia!", "boost_modal.combo": "Pulse {combo} para saltar esto a próxima vez", "bundle_column_error.body": "Houbo un fallo mentras se cargaba este compoñente.", "bundle_column_error.retry": "Inténteo de novo", @@ -41,8 +41,8 @@ "bundle_modal_error.retry": "Inténteo de novo", "column.blocks": "Usuarias bloqueadas", "column.community": "Liña temporal local", - "column.direct": "Direct messages", - "column.domain_blocks": "Hidden domains", + "column.direct": "Mensaxes directas", + "column.domain_blocks": "Dominios agochados", "column.favourites": "Favoritas", "column.follow_requests": "Peticións de seguimento", "column.home": "Inicio", @@ -60,17 +60,18 @@ "column_header.unpin": "Soltar", "column_subheading.navigation": "Navegación", "column_subheading.settings": "Axustes", - "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", + "compose_form.direct_message_warning": "Este toot enviarase só as usuarias mencionadas. Porén, a súa proveedora de internet e calquera das instancias receptoras poderían examinar esta mensaxe.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "Esta mensaxe non será listada baixo ningunha etiqueta xa que está marcada como non listada. Só os toots públicos poden buscarse por etiquetas.", "compose_form.lock_disclaimer": "A súa conta non está {locked}. Calquera pode seguila para ver as súas mensaxes só-para-seguidoras.", "compose_form.lock_disclaimer.lock": "bloqueado", "compose_form.placeholder": "A qué andas?", "compose_form.publish": "Toot", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", - "compose_form.spoiler.marked": "Text is hidden behind warning", - "compose_form.spoiler.unmarked": "Text is not hidden", + "compose_form.sensitive.marked": "Medios marcados como sensibles", + "compose_form.sensitive.unmarked": "Os medios non están marcados como sensibles", + "compose_form.spoiler.marked": "O texto está agochado tras un aviso", + "compose_form.spoiler.unmarked": "O texto non está agochado", "compose_form.spoiler_placeholder": "Escriba o aviso aquí", "confirmation_modal.cancel": "Cancelar", "confirmations.block.confirm": "Bloquear", @@ -102,7 +103,7 @@ "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viaxes e Lugares", "empty_column.community": "A liña temporal local está baldeira. Escriba algo de xeito público para que rule!", - "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", + "empty_column.direct": "Aínda non ten mensaxes directas. Cando envíe ou reciba unha, aparecerá aquí.", "empty_column.hashtag": "Aínda non hai nada con esta etiqueta.", "empty_column.home": "A súa liña temporal de inicio está baldeira! Visite {public} ou utilice a busca para atopar outras usuarias.", "empty_column.home.public_timeline": "a liña temporal pública", @@ -136,7 +137,7 @@ "keyboard_shortcuts.mention": "para mencionar o autor", "keyboard_shortcuts.reply": "para responder", "keyboard_shortcuts.search": "para centrar a busca", - "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", + "keyboard_shortcuts.toggle_hidden": "mostrar/agochar un texto detrás do AC", "keyboard_shortcuts.toot": "escribir un toot novo", "keyboard_shortcuts.unfocus": "quitar o foco do área de escritura/busca", "keyboard_shortcuts.up": "ir hacia arriba na lista", @@ -154,12 +155,12 @@ "loading_indicator.label": "Cargando...", "media_gallery.toggle_visible": "Ocultar", "missing_indicator.label": "Non atopado", - "missing_indicator.sublabel": "This resource could not be found", + "missing_indicator.sublabel": "Non se puido atopar o recurso", "mute_modal.hide_notifications": "Esconder notificacións deste usuario?", "navigation_bar.blocks": "Usuarias bloqueadas", "navigation_bar.community_timeline": "Liña temporal local", - "navigation_bar.direct": "Direct messages", - "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.direct": "Mensaxes directas", + "navigation_bar.domain_blocks": "Dominios agochados", "navigation_bar.edit_profile": "Editar perfil", "navigation_bar.favourites": "Favoritas", "navigation_bar.follow_requests": "Peticións de seguimento", @@ -217,37 +218,37 @@ "privacy.public.short": "Pública", "privacy.unlisted.long": "Non publicar en liñas temporais públicas", "privacy.unlisted.short": "Non listada", - "regeneration_indicator.label": "Loading…", - "regeneration_indicator.sublabel": "Your home feed is being prepared!", + "regeneration_indicator.label": "Cargando…", + "regeneration_indicator.sublabel": "Estase a preparar a súa liña temporal de inicio!", "relative_time.days": "{number}d", "relative_time.hours": "{number}h", "relative_time.just_now": "agora", "relative_time.minutes": "{number}m", "relative_time.seconds": "{number}s", "reply_indicator.cancel": "Cancelar", - "report.forward": "Forward to {target}", - "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", - "report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:", + "report.forward": "Reenviar a {target}", + "report.forward_hint": "A conta pertence a outro servidor. Enviar unha copia anónima do informe alí tamén?", + "report.hint": "O informe enviarase a moderación da súa instancia. Abaixo pode explicar a razón pola que está a información:", "report.placeholder": "Comentarios adicionais", "report.submit": "Enviar", "report.target": "Informar {target}", "search.placeholder": "Buscar", "search_popout.search_format": "Formato de busca avanzada", - "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", + "search_popout.tips.full_text": "Texto simple devolve estados que vostede escribeu, promoveu, marcou favoritos, ou foi mencionada, así como nomes de usuaria coincidentes, nomes públicos e etiquetas.", "search_popout.tips.hashtag": "etiqueta", "search_popout.tips.status": "estado", "search_popout.tips.text": "Texto simple devolve coincidencias con nomes públicos, nomes de usuaria e etiquetas", "search_popout.tips.user": "usuaria", - "search_results.accounts": "People", - "search_results.hashtags": "Hashtags", + "search_results.accounts": "Xente", + "search_results.hashtags": "Etiquetas", "search_results.statuses": "Toots", "search_results.total": "{count, number} {count,plural,one {result} outros {results}}", "standalone.public_title": "Ollada dentro...", "status.block": "Block @{name}", - "status.cancel_reblog_private": "Unboost", + "status.cancel_reblog_private": "Non promover", "status.cannot_reblog": "Esta mensaxe non pode ser promovida", "status.delete": "Eliminar", - "status.direct": "Direct message @{name}", + "status.direct": "Mensaxe directa @{name}", "status.embed": "Incrustar", "status.favourite": "Favorita", "status.load_more": "Cargar máis", @@ -258,9 +259,9 @@ "status.mute_conversation": "Acalar conversa", "status.open": "Expandir este estado", "status.pin": "Fixar no perfil", - "status.pinned": "Pinned toot", + "status.pinned": "Toot fixado", "status.reblog": "Promover", - "status.reblog_private": "Boost to original audience", + "status.reblog_private": "Promover a audiencia orixinal", "status.reblogged_by": "{name} promoveu", "status.reply": "Resposta", "status.replyAll": "Resposta a conversa", @@ -269,21 +270,21 @@ "status.sensitive_warning": "Contido sensible", "status.share": "Compartir", "status.show_less": "Mostrar menos", - "status.show_less_all": "Show less for all", + "status.show_less_all": "Mostrar menos para todas", "status.show_more": "Mostrar máis", - "status.show_more_all": "Show more for all", + "status.show_more_all": "Mostrar máis para todas", "status.unmute_conversation": "Non acalar a conversa", "status.unpin": "Despegar do perfil", "tabs_bar.federated_timeline": "Federado", "tabs_bar.home": "Inicio", "tabs_bar.local_timeline": "Local", "tabs_bar.notifications": "Notificacións", - "tabs_bar.search": "Search", + "tabs_bar.search": "Buscar", "ui.beforeunload": "O borrador perderase se sae de Mastodon.", "upload_area.title": "Arrastre e solte para subir", "upload_button.label": "Engadir medios", "upload_form.description": "Describa para deficientes visuais", - "upload_form.focus": "Crop", + "upload_form.focus": "Recortar", "upload_form.undo": "Eliminar", "upload_progress.label": "Subindo...", "video.close": "Pechar video", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 324ea725e..5da3e9ebb 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -61,6 +61,7 @@ "column_subheading.navigation": "ניווט", "column_subheading.settings": "אפשרויות", "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", "compose_form.lock_disclaimer": "חשבונך אינו {locked}. כל אחד יוכל לעקוב אחריך כדי לקרוא את הודעותיך המיועדות לעוקבים בלבד.", "compose_form.lock_disclaimer.lock": "נעול", diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json index 0216d0837..6486284ec 100644 --- a/app/javascript/mastodon/locales/hr.json +++ b/app/javascript/mastodon/locales/hr.json @@ -61,6 +61,7 @@ "column_subheading.navigation": "Navigacija", "column_subheading.settings": "Postavke", "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", "compose_form.lock_disclaimer": "Tvoj račun nije {locked}. Svatko te može slijediti kako bi vidio postove namijenjene samo tvojim sljedbenicima.", "compose_form.lock_disclaimer.lock": "zaključan", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 795c9b7cd..6c04eced6 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -61,6 +61,7 @@ "column_subheading.navigation": "Navigáció", "column_subheading.settings": "Beállítások", "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "Ezen tülkölés nem fog megjelenni semmilyen hashtag alatt mivel listázatlan. Csak a publikus tülkölések kereshetőek hashtag-el.", "compose_form.lock_disclaimer": "Az ön fiókja nincs {locked}. Bárki követni tud, hogy megtekintse a kizárt követőknek szánt üzeneteid.", "compose_form.lock_disclaimer.lock": "lezárva", diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index 2c7496d89..f1f4df968 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -61,6 +61,7 @@ "column_subheading.navigation": "Նավարկություն", "column_subheading.settings": "Կարգավորումներ", "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "Այս թութը չի հաշվառվի որեւէ պիտակի տակ, քանզի այն ծածուկ է։ Միայն հրապարակային թթերը հնարավոր է որոնել պիտակներով։", "compose_form.lock_disclaimer": "Քո հաշիվը {locked} չէ։ Յուրաքանչյուր ոք կարող է հետեւել քեզ եւ տեսնել միայն հետեւողների համար նախատեսված գրառումները։", "compose_form.lock_disclaimer.lock": "փակ", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index 2fcd5c482..e0fa959b0 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -61,6 +61,7 @@ "column_subheading.navigation": "Navigasi", "column_subheading.settings": "Pengaturan", "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "Toot ini tidak akan ada dalam daftar tagar manapun karena telah di set sebagai tidak terdaftar. Hanya postingan publik yang bisa dicari dengan tagar.", "compose_form.lock_disclaimer": "Akun anda tidak {locked}. Semua orang dapat mengikuti anda untuk melihat postingan khusus untuk pengikut anda.", "compose_form.lock_disclaimer.lock": "terkunci", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index 9d429bda8..616232c3e 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -61,6 +61,7 @@ "column_subheading.navigation": "Navigation", "column_subheading.settings": "Settings", "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", "compose_form.lock_disclaimer.lock": "locked", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 64baf5440..6bf9c73a6 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -4,7 +4,7 @@ "account.block_domain": "Nascondi tutto da {domain}", "account.blocked": "Bloccato", "account.direct": "Direct Message @{name}", - "account.disclaimer_full": "Il profilo dell'utente mostrato qui sotto potrebbe essere incompleto", + "account.disclaimer_full": "Il profilo dell'utente mostrato qui sotto potrebbe essere incompleto.", "account.domain_blocked": "Dominio nascosto", "account.edit_profile": "Modifica profilo", "account.follow": "Segui", @@ -61,14 +61,15 @@ "column_subheading.navigation": "Navigation", "column_subheading.settings": "Impostazioni", "compose_form.direct_message_warning": "Questo toot sarà visibile solo a tutti gli utenti citati.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "Questo toot non è listato, quindi non sarà trovato nelle ricerche per hashtag. Solo i toot pubblici possono essere cercati per hashtag.", "compose_form.lock_disclaimer": "Il tuo account non è {bloccato}. Chiunque può decidere di seguirti per vedere i tuoi post per soli seguaci.", "compose_form.lock_disclaimer.lock": "bloccato", "compose_form.placeholder": "A cosa stai pensando?", "compose_form.publish": "Toot", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.marked": "Questo media è contrassegnato come sensibile.", - "compose_form.sensitive.unmarked": "Questo media non è contrassegnato come sensibile.", + "compose_form.sensitive.marked": "Questo media è contrassegnato come sensibile", + "compose_form.sensitive.unmarked": "Questo media non è contrassegnato come sensibile", "compose_form.spoiler.marked": "Il testo è nascosto dall'avviso", "compose_form.spoiler.unmarked": "Il testo non è nascosto", "compose_form.spoiler_placeholder": "Content warning", @@ -108,7 +109,7 @@ "empty_column.home.public_timeline": "la timeline pubblica", "empty_column.list": "Non c'è niente in questo elenco ancora. Quando i membri di questo elenco postano nuovi stati, questi appariranno qui.", "empty_column.notifications": "Non hai ancora nessuna notifica. Interagisci con altri per iniziare conversazioni.", - "empty_column.public": "Qui non c'è nulla! Scrivi qualcosa pubblicamente, o aggiungi utenti da altri server per riempire questo spazio.", + "empty_column.public": "Qui non c'è nulla! Scrivi qualcosa pubblicamente, o aggiungi utenti da altri server per riempire questo spazio", "follow_request.authorize": "Autorizza", "follow_request.reject": "Rifiuta", "getting_started.appsshort": "App", @@ -225,8 +226,8 @@ "relative_time.minutes": "{number}m", "relative_time.seconds": "{number}s", "reply_indicator.cancel": "Annulla", - "report.forward": "Forward to {target}", - "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", + "report.forward": "Inoltra a {target}", + "report.forward_hint": "Questo account appartiene a un altro server. Mandare anche là una copia anonima del rapporto?", "report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:", "report.placeholder": "Commenti aggiuntivi", "report.submit": "Invia", @@ -239,60 +240,60 @@ "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", "search_popout.tips.user": "user", "search_results.accounts": "People", - "search_results.hashtags": "Hashtags", - "search_results.statuses": "Toots", + "search_results.hashtags": "Hashtag", + "search_results.statuses": "Toot", "search_results.total": "{count} {count, plural, one {risultato} other {risultati}}", - "standalone.public_title": "A look inside...", + "standalone.public_title": "Un'occhiata all'interno...", "status.block": "Block @{name}", - "status.cancel_reblog_private": "Unboost", - "status.cannot_reblog": "This post cannot be boosted", + "status.cancel_reblog_private": "Annulla condivisione", + "status.cannot_reblog": "Questo post non può essere condiviso", "status.delete": "Elimina", - "status.direct": "Direct message @{name}", - "status.embed": "Embed", + "status.direct": "Messaggio diretto @{name}", + "status.embed": "Incorpora", "status.favourite": "Apprezzato", "status.load_more": "Mostra di più", "status.media_hidden": "Allegato nascosto", "status.mention": "Nomina @{name}", - "status.more": "More", - "status.mute": "Mute @{name}", - "status.mute_conversation": "Mute conversation", + "status.more": "Altro", + "status.mute": "Silenzia @{name}", + "status.mute_conversation": "Silenzia conversazione", "status.open": "Espandi questo post", - "status.pin": "Pin on profile", - "status.pinned": "Pinned toot", + "status.pin": "Fissa in cima sul profilo", + "status.pinned": "Toot fissato in cima", "status.reblog": "Condividi", "status.reblog_private": "Boost to original audience", "status.reblogged_by": "{name} ha condiviso", "status.reply": "Rispondi", - "status.replyAll": "Reply to thread", + "status.replyAll": "Rispondi alla conversazione", "status.report": "Segnala @{name}", "status.sensitive_toggle": "Clicca per vedere", "status.sensitive_warning": "Materiale sensibile", - "status.share": "Share", + "status.share": "Condividi", "status.show_less": "Mostra meno", - "status.show_less_all": "Show less for all", + "status.show_less_all": "Mostra meno per tutti", "status.show_more": "Mostra di più", - "status.show_more_all": "Show more for all", - "status.unmute_conversation": "Unmute conversation", - "status.unpin": "Unpin from profile", + "status.show_more_all": "Mostra di più per tutti", + "status.unmute_conversation": "Annulla silenzia conversazione", + "status.unpin": "Non fissare in cima al profilo", "tabs_bar.federated_timeline": "Federazione", "tabs_bar.home": "Home", "tabs_bar.local_timeline": "Locale", "tabs_bar.notifications": "Notifiche", - "tabs_bar.search": "Search", - "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", + "tabs_bar.search": "Cerca", + "ui.beforeunload": "La bozza andrà persa se esci da Mastodon.", "upload_area.title": "Trascina per caricare", "upload_button.label": "Aggiungi file multimediale", - "upload_form.description": "Describe for the visually impaired", - "upload_form.focus": "Crop", + "upload_form.description": "Descrizione per utenti con disabilità visive", + "upload_form.focus": "Rifila", "upload_form.undo": "Cancella", "upload_progress.label": "Sto caricando...", - "video.close": "Close video", - "video.exit_fullscreen": "Exit full screen", - "video.expand": "Expand video", + "video.close": "Chiudi video", + "video.exit_fullscreen": "Esci da modalità a schermo intero", + "video.expand": "Espandi video", "video.fullscreen": "Full screen", - "video.hide": "Hide video", - "video.mute": "Mute sound", + "video.hide": "Nascondi video", + "video.mute": "Silenzia suono", "video.pause": "Pause", - "video.play": "Play", - "video.unmute": "Unmute sound" + "video.play": "Avvia", + "video.unmute": "Riattiva suono" } diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 95f8438d5..09dc62432 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -60,7 +60,8 @@ "column_header.unpin": "ピン留めを外す", "column_subheading.navigation": "ナビゲーション", "column_subheading.settings": "設定", - "compose_form.direct_message_warning": "このトゥートはメンションされた人だけが見ることができます。", + "compose_form.direct_message_warning": "このトゥートはメンションされた人にのみ送信されます。ただし送受信したインスタンスの管理者が検査するかもしれません。", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "このトゥートは未収載なのでハッシュタグの一覧に表示されません。公開トゥートだけがハッシュタグで検索できます。", "compose_form.lock_disclaimer": "あなたのアカウントは{locked}になっていません。誰でもあなたをフォローすることができ、フォロワー限定の投稿を見ることができます。", "compose_form.lock_disclaimer.lock": "非公開", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index bb6f3558c..66657abcd 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -61,6 +61,7 @@ "column_subheading.navigation": "내비게이션", "column_subheading.settings": "설정", "compose_form.direct_message_warning": "이 툿은 멘션 된 유저들에게만 보여집니다.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "이 툿은 어떤 해시태그로도 검색 되지 않습니다. 전체공개로 게시 된 툿만이 해시태그로 검색 될 수 있습니다.", "compose_form.lock_disclaimer": "이 계정은 {locked}로 설정 되어 있지 않습니다. 누구나 이 계정을 팔로우 할 수 있으며, 팔로워 공개의 포스팅을 볼 수 있습니다.", "compose_form.lock_disclaimer.lock": "비공개", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 63a452377..8ddf47f3f 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -60,7 +60,8 @@ "column_header.unpin": "Losmaken", "column_subheading.navigation": "Navigatie", "column_subheading.settings": "Instellingen", - "compose_form.direct_message_warning": "Deze toot zal alleen zichtbaar zijn voor alle vermelde gebruikers.", + "compose_form.direct_message_warning": "Deze toot wordt alleen naar vermelde gebruikers verstuurd. Echter, de beheerders en moderatoren van jouw en de ontvangende Mastodonserver(s) kunnen dit bericht mogelijk wel bekijken.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "Deze toot valt niet onder een hashtag te bekijken, omdat deze niet op openbare tijdlijnen wordt getoond. Alleen openbare toots kunnen via hashtags gevonden worden.", "compose_form.lock_disclaimer": "Jouw account is niet {locked}. Iedereen kan jou volgen en kan de toots zien die je alleen aan jouw volgers hebt gericht.", "compose_form.lock_disclaimer.lock": "besloten", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index 1496afb83..ab755a3e8 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -61,6 +61,7 @@ "column_subheading.navigation": "Navigasjon", "column_subheading.settings": "Innstillinger", "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "Denne tuten blir ikke listet under noen emneknagger da den er ulistet. Kun offentlige tuter kan søktes etter med emneknagg.", "compose_form.lock_disclaimer": "Din konto er ikke {locked}. Hvem som helst kan følge deg og se dine private poster.", "compose_form.lock_disclaimer.lock": "låst", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index 3ae29129f..9378cfa8f 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -61,6 +61,7 @@ "column_subheading.navigation": "Navigacion", "column_subheading.settings": "Paramètres", "compose_form.direct_message_warning": "Aqueste tut serà pas que visibile pel monde mencionat.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "Aqueste tut serà pas ligat a cap etiqueta estant qu’es pas listat. Òm pas cercar que los tuts publics per etiqueta.", "compose_form.lock_disclaimer": "Vòstre compte es pas {locked}. Tot lo mond pòt vos sègre e veire los estatuts reservats als seguidors.", "compose_form.lock_disclaimer.lock": "clavat", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index be5693bc9..34c4c7218 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -61,6 +61,7 @@ "column_subheading.navigation": "Nawigacja", "column_subheading.settings": "Ustawienia", "compose_form.direct_message_warning": "Ten wpis będzie widoczny tylko dla wszystkich wspomnianych użytkowników.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "Ten wpis nie będzie widoczny pod podanymi hashtagami, ponieważ jest oznaczony jako niewidoczny. Tylko publiczne wpisy mogą zostać znalezione z użyciem hashtagów.", "compose_form.lock_disclaimer": "Twoje konto nie jest {locked}. Każdy, kto Cię śledzi, może wyświetlać Twoje wpisy przeznaczone tylko dla śledzących.", "compose_form.lock_disclaimer.lock": "zablokowane", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 26ae5ef30..82bbd17a3 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -1,5 +1,5 @@ { - "account.badges.bot": "Bot", + "account.badges.bot": "Robô", "account.block": "Bloquear @{name}", "account.block_domain": "Esconder tudo de {domain}", "account.blocked": "Bloqueado", @@ -60,7 +60,8 @@ "column_header.unpin": "Desafixar", "column_subheading.navigation": "Navegação", "column_subheading.settings": "Configurações", - "compose_form.direct_message_warning": "Este toot só será visível a todos os usuários mencionados.", + "compose_form.direct_message_warning": "Este toot só será enviado aos usuários mencionados. No entanto, a administração da sua instância e das instâncias dos usuários mencionados podem inspecionar essa mensagem.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "Esse toot não será listado em nenhuma hashtag por ser não listado. Somente toots públicos podem ser pesquisados por hashtag.", "compose_form.lock_disclaimer": "A sua conta não está {locked}. Qualquer pessoa pode te seguir e visualizar postagens direcionadas a apenas seguidores.", "compose_form.lock_disclaimer.lock": "trancada", @@ -284,7 +285,7 @@ "upload_button.label": "Adicionar mídia", "upload_form.description": "Descreva a imagem para deficientes visuais", "upload_form.focus": "Recortar", - "upload_form.undo": "Desfazer", + "upload_form.undo": "Remover", "upload_progress.label": "Salvando...", "video.close": "Fechar vídeo", "video.exit_fullscreen": "Sair da tela cheia", diff --git a/app/javascript/mastodon/locales/pt.json b/app/javascript/mastodon/locales/pt.json index 02ffc825c..6463d001d 100644 --- a/app/javascript/mastodon/locales/pt.json +++ b/app/javascript/mastodon/locales/pt.json @@ -61,6 +61,7 @@ "column_subheading.navigation": "Navegação", "column_subheading.settings": "Preferências", "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "Esta pulbicacção não será listada em nenhuma hashtag por ser não listada. Somente publicações públicas podem ser pesquisadas por hashtag.", "compose_form.lock_disclaimer": "A tua conta não está {locked}. Qualquer pessoa pode seguir-te e ver as publicações direcionadas apenas a seguidores.", "compose_form.lock_disclaimer.lock": "bloqueada", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index ca8574578..6c7926ffe 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -61,6 +61,7 @@ "column_subheading.navigation": "Навигация", "column_subheading.settings": "Настройки", "compose_form.direct_message_warning": "Этот статус будет виден только упомянутым пользователям.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "Этот пост не будет показывается в поиске по хэштегу, т.к. он непубличный. Только публичные посты можно найти в поиске по хэштегу.", "compose_form.lock_disclaimer": "Ваш аккаунт не {locked}. Любой человек может подписаться на Вас и просматривать посты для подписчиков.", "compose_form.lock_disclaimer.lock": "закрыт", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index cf9ead5e7..6ac646bee 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -60,7 +60,8 @@ "column_header.unpin": "Odopnúť", "column_subheading.navigation": "Navigácia", "column_subheading.settings": "Nastavenia", - "compose_form.direct_message_warning": "Tento príspevok bude videný výhradne iba spomenutými užívateľmi.", + "compose_form.direct_message_warning": "Tento príspevok bude videný výhradne iba spomenutými užívateľmi. Ber ale na vedomie že správci tvojej a všetkých iných zahrnutých instancií majú možnosť skontrolovať túto správu.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "Tento toot nebude zobrazený pod žiadným haštagom lebo nieje listovaný. Iba verejné tooty môžu byť nájdené podľa haštagu.", "compose_form.lock_disclaimer": "Váš účet nie je zamknutý. Ktokoľvek ťa môže nasledovať a vidieť tvoje správy pre sledujúcich.", "compose_form.lock_disclaimer.lock": "zamknutý", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index dbad35c34..edd5ab62b 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -61,6 +61,7 @@ "column_subheading.navigation": "Navigacija", "column_subheading.settings": "Nastavitve", "compose_form.direct_message_warning": "Ta tut bo viden le vsem omenjenim uporabnikom.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "Ta tut ne bo naveden pod nobenim hashtagom, ker ni dodan hashtag. Samo javne tute lahko iščete pod hashtagom.", "compose_form.lock_disclaimer": "Vaš račun ni {locked}. Vsakdo vam lahko sledi in si ogleda objave, ki so namenjene samo sledilcem.", "compose_form.lock_disclaimer.lock": "zaklenjen", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index bc54a0865..2a9d3737d 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -61,6 +61,7 @@ "column_subheading.navigation": "Navigacija", "column_subheading.settings": "Postavke", "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", "compose_form.lock_disclaimer": "Vaš nalog nije {locked}. Svako može da Vas zaprati i da vidi objave namenjene samo Vašim pratiocima.", "compose_form.lock_disclaimer.lock": "zaključan", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index 5cdeb24fc..b53f1ecc9 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -61,6 +61,7 @@ "column_subheading.navigation": "Навигација", "column_subheading.settings": "Поставке", "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", "compose_form.lock_disclaimer": "Ваш налог није {locked}. Свако може да Вас запрати и да види објаве намењене само Вашим пратиоцима.", "compose_form.lock_disclaimer.lock": "закључан", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 579921046..dbe2c182e 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -61,6 +61,7 @@ "column_subheading.navigation": "Navigation", "column_subheading.settings": "Inställningar", "compose_form.direct_message_warning": "Denna toot kommer endast vara synlig för nämnda användare.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "Denna toot kommer inte att listas under någon hashtag eftersom den är onoterad. Endast offentliga toots kan sökas med hashtag.", "compose_form.lock_disclaimer": "Ditt konto är inte {locked}. Vemsomhelst kan följa dig och även se dina inlägg skrivna för endast dina följare.", "compose_form.lock_disclaimer.lock": "låst", diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json index 55415da81..52bd41935 100644 --- a/app/javascript/mastodon/locales/te.json +++ b/app/javascript/mastodon/locales/te.json @@ -61,6 +61,7 @@ "column_subheading.navigation": "Navigation", "column_subheading.settings": "Settings", "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", "compose_form.lock_disclaimer.lock": "locked", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 243941caf..32aa24080 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -61,6 +61,7 @@ "column_subheading.navigation": "Navigation", "column_subheading.settings": "Settings", "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", "compose_form.lock_disclaimer.lock": "locked", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index c6d27b609..b73157e27 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -61,6 +61,7 @@ "column_subheading.navigation": "Navigasyon", "column_subheading.settings": "Ayarlar", "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", "compose_form.lock_disclaimer": "Hesabınız {locked} değil. Sadece takipçilerle paylaştığınız gönderileri görebilmek için sizi herhangi bir kullanıcı takip edebilir.", "compose_form.lock_disclaimer.lock": "kilitli", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 2e174e186..b301c6827 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -61,6 +61,7 @@ "column_subheading.navigation": "Навігація", "column_subheading.settings": "Налаштування", "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", "compose_form.lock_disclaimer": "Ваш акаунт не {locked}. Кожен може підписатися на Вас та бачити Ваші приватні пости.", "compose_form.lock_disclaimer.lock": "приватний", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 254d078eb..455f1f828 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -61,6 +61,7 @@ "column_subheading.navigation": "导航", "column_subheading.settings": "设置", "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "这条嘟文被设置为“不公开”,因此它不会出现在任何话题标签的列表下。只有公开的嘟文才能通过话题标签进行搜索。", "compose_form.lock_disclaimer": "你的帐户没有{locked}。任何人都可以在关注你后立即查看仅关注者可见的嘟文。", "compose_form.lock_disclaimer.lock": "开启保护", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 9fb8aa2f9..18be17792 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -61,6 +61,7 @@ "column_subheading.navigation": "瀏覽", "column_subheading.settings": "設定", "compose_form.direct_message_warning": "這文章只有被提及的用戶才可以看到。", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "這文章因為不是公開,所以不會被標籤搜索。只有公開的文章才會被標籤搜索。", "compose_form.lock_disclaimer": "你的用戶狀態為「{locked}」,任何人都能立即關注你,然後看到「只有關注者能看」的文章。", "compose_form.lock_disclaimer.lock": "公共", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index ae917a5ac..3222c035a 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -61,6 +61,7 @@ "column_subheading.navigation": "瀏覽", "column_subheading.settings": "設定", "compose_form.direct_message_warning": "此則推文只會被所有提到的使用者看見。", + "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "此則推文將不會在任何主題標籤中看見,只有公開的推文可以用主題標籤來搜尋。", "compose_form.lock_disclaimer": "你的帳號沒有{locked}。任何人都可以關注你,看到發給關注者的貼文。", "compose_form.lock_disclaimer.lock": "上鎖", diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 4e051bc36..b501e61e1 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -40,6 +40,7 @@ ca: following: Seguint media: Mèdia moved_html: "%{name} s'ha mogut a %{new_profile_link}:" + network_hidden: Aquesta informació no està disponible nothing_here: No hi ha res aquí! people_followed_by: Usuaris seguits per %{name} people_who_follow: Usuaris que segueixen %{name} diff --git a/config/locales/devise.fa.yml b/config/locales/devise.fa.yml index 8e95a3d94..e6e16b4b4 100644 --- a/config/locales/devise.fa.yml +++ b/config/locales/devise.fa.yml @@ -17,9 +17,21 @@ fa: unconfirmed: برای ادامه باید نشانی ایمیل خود را تأیید کنید. mailer: confirmation_instructions: + action: تأیید نشانی ایمیل + explanation: شما با این نشانی ایمیل حسابی در %{host} باز کرده‌اید. با یک کلیک می‌توانید این حساب را فعال کنید. اگر شما چنین کاری نکردید، لطفاً این ایمیل را نادیده بگیرید. + extra_html: لطفاً همچنین قانون‌های این سرور و شرایط کاربری آن را ببینید. subject: 'ماستدون: راهنمایی برای تأیید %{instance}' + title: تأیید نشانی ایمیل + email_changed: + explanation: 'نشانی ایمیل حساب شما تغییر می‌کند به:' + extra: اگر شما ایمیل خود را عوض نکردید، شاید کسی به حساب شما دسترسی پیدا کرده است. در این صورت لطفاً هر چه زودتر رمز حسابتان را عوض کنید. اگر رمزتان دیگر کار نمی‌کند، لطفاً با مدیر سرور تماس بگیرید. + subject: 'ماستدون: نشانی ایمیل عوض شد' + title: نشانی ایمیل تازه password_change: + explanation: رمز حساب شما تغییر کرد. + extra: اگر شما رمز حسابتان را تغییر ندادید، شاید کسی به حساب شما دسترسی پیدا کرده است. در این صورت لطفاً هر چه زودتر رمز حسابتان را عوض کنید. اگر رمزتان دیگر کار نمی‌کند، لطفاً با مدیر سرور تماس بگیرید. subject: 'ماستدون: رمزتان عوض شد' + title: رمزتان عوض شد reconfirmation_instructions: explanation: نشانی تازه را تأیید کنید تا ایمیل‌تان عوض شود. extra: اگر شما باعث این تغییر نبودید، لطفاً این ایمیل را نادیده بگیرید. تا زمانی که شما پیوند بالا را باز نکنید، نشانی ایمیل مربوط به حساب شما عوض نخواهد شد. diff --git a/config/locales/doorkeeper.fa.yml b/config/locales/doorkeeper.fa.yml index 7e6a04ea8..2293f1115 100644 --- a/config/locales/doorkeeper.fa.yml +++ b/config/locales/doorkeeper.fa.yml @@ -115,5 +115,6 @@ fa: title: درخواست اجازهٔ OAuth scopes: follow: پیگیری، مسدودسازی، لغو مسدودسازی، و لغو پیگیری حساب‌ها + push: برای حساب خود اعلان‌های لحظه‌ای دریافت کنید read: خواندن اطلاعات حساب شما write: انتشار مطالب از طرف شما diff --git a/config/locales/doorkeeper.fr.yml b/config/locales/doorkeeper.fr.yml index a5d9b9e03..0c68dfa01 100644 --- a/config/locales/doorkeeper.fr.yml +++ b/config/locales/doorkeeper.fr.yml @@ -116,5 +116,6 @@ fr: title: Autorisation OAuth requise scopes: follow: s’abonner, se désabonner, bloquer et débloquer des comptes + push: recevoir des notifications pour votre compte read: lire les données de votre compte write: poster en votre nom diff --git a/config/locales/doorkeeper.it.yml b/config/locales/doorkeeper.it.yml index 50b2c9780..ce6fa07d2 100644 --- a/config/locales/doorkeeper.it.yml +++ b/config/locales/doorkeeper.it.yml @@ -115,5 +115,6 @@ it: title: Autorizzazione OAuth richiesta scopes: follow: seguire, bloccare, sbloccare e smettere di seguire account + push: ricevi notifiche push per il tuo account read: leggere le informazioni del tuo account write: pubblicare post in tua vece diff --git a/config/locales/doorkeeper.ja.yml b/config/locales/doorkeeper.ja.yml index 96956c60f..9c9098976 100644 --- a/config/locales/doorkeeper.ja.yml +++ b/config/locales/doorkeeper.ja.yml @@ -115,5 +115,6 @@ ja: title: OAuth認証 scopes: follow: アカウントのフォロー, ブロック, ブロック解除, フォロー解除 + push: アカウントへのプッシュ通知の受信 read: アカウントからのデータの読み取り write: アカウントへのデータの書き込み diff --git a/config/locales/doorkeeper.pt-BR.yml b/config/locales/doorkeeper.pt-BR.yml index f3da6fcd1..8d3ce8a29 100644 --- a/config/locales/doorkeeper.pt-BR.yml +++ b/config/locales/doorkeeper.pt-BR.yml @@ -115,5 +115,6 @@ pt-BR: title: Autorização OAuth obrigatória scopes: follow: seguir, bloquear, desbloquear e deixar de seguir outras contas + push: receber notificações push para a sua conta read: ler os dados da sua conta write: postar em seu nome diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 4265a7248..753fd6bd7 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -40,6 +40,7 @@ fr: following: Abonnements media: Médias moved_html: "%{name} a changé de compte pour %{new_profile_link} :" + network_hidden: Cette information n'est pas disponible nothing_here: Rien à voir ici ! people_followed_by: Personnes suivies par %{name} people_who_follow: Personnes qui suivent %{name} @@ -618,7 +619,7 @@ fr: micro_messenger: MicroMessenger nokia: Nokia S40 Ovi Browser opera: Opera - otter: Otter + otter: Loutre phantom_js: PhantomJS qq: QQ Browser safari: Safari @@ -668,6 +669,7 @@ fr: video: one: "%{count} vidéo" other: "%{count} vidéos" + boosted_from_html: Repartagé depuis %{acct_link} content_warning: 'Attention au contenu : %{warning}' disallowed_hashtags: one: 'contient un hashtag désactivé : %{tags}' @@ -737,7 +739,7 @@ fr: tip_federated_timeline: La chronologie fédérée est une vue en direct du réseau Mastodon. Mais elle n'inclut que les personnes auxquelles vos voisin·es sont abonné·es, donc elle n'est pas complète. tip_following: Vous suivez les administrateurs et administratrices de votre serveur par défaut. Pour trouver d'autres personnes intéressantes, consultez les chronologies locales et fédérées. tip_local_timeline: La chronologie locale est une vue des personnes sur %{instance}. Ce sont vos voisines et voisins immédiats ! - tip_mobile_webapp: Si votre navigateur mobile vous propose d'ajouter Mastodon à votre écran d'accueil, vous pouvez recevoir des notifications push. Il agit comme une application native de bien des façons ! + tip_mobile_webapp: Si votre navigateur mobile vous propose d'ajouter Mastodon à votre écran d'accueil, vous pouvez recevoir des notifications. Il agit comme une application native de bien des façons ! tips: Astuces title: Bienvenue à bord, %{name} ! users: diff --git a/config/locales/gl.yml b/config/locales/gl.yml index d38cffb96..87c10def0 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -30,9 +30,9 @@ gl: other_instances: Listado de instancias source_code: Código fonte status_count_after: estados - status_count_before: Quen escribeu + status_count_before: Que publicaron user_count_after: usuarias - user_count_before: Inicio de + user_count_before: Fogar de what_is_mastodon: Qué é Mastodon? accounts: follow: Seguir @@ -40,6 +40,7 @@ gl: following: Seguindo media: Medios moved_html: "%{name} mudouse a %{new_profile_link}:" + network_hidden: A información non está dispoñible nothing_here: Nada por aquí! people_followed_by: Personas que segue %{name} people_who_follow: Personas que seguen a %{name} diff --git a/config/locales/it.yml b/config/locales/it.yml index a761bff4e..db754b2b2 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -1,6 +1,7 @@ --- it: about: + about_hashtag_html: Questi sono i toot pubblici etichettati con #%{hashtag}. Puoi interagire con loro se hai un account nel fediverse. about_mastodon_html: Mastodon è un social network gratuito e open-source. Un'alternativa decentralizzata alle piattaforme commerciali che evita che una singola compagnia monopolizzi il tuo modo di comunicare. Scegli un server di cui ti fidi — qualunque sia la tua scelta, potrai interagire con chiunque altro. Chiunque può sviluppare un suo server Mastodon e partecipare alla vita del social network. about_this: A proposito di questo server administered_by: 'Amministrato da:' @@ -11,6 +12,9 @@ it: description_headline: Cos'è %{domain}? domain_count_after: altri server domain_count_before: Connesso a + extended_description_html: | +

Un buon posto per le regole

+

La descrizione estesa non è ancora stata preparata.

features: humane_approach_body: Imparando dai fallimenti degli altri networks, Mastodon mira a fare scelte di design etico per combattere l'abuso dei social media. humane_approach_title: Un approccio più umano @@ -45,11 +49,12 @@ it: reserved_username: Il nome utente è riservato roles: admin: Amministratore + bot: Bot moderator: Mod unfollow: Non seguire più admin: account_moderation_notes: - create: Crea + create: Lascia nota created_msg: Nota di moderazione creata con successo! delete: Elimina destroyed_msg: Nota di moderazione distrutta con successo! @@ -127,6 +132,9 @@ it: staff: Staff user: Utente search: Cerca + show: + created_reports: Rapporti creati da questo account + targeted_reports: Rapporti che riguardano questo account silence: Silenzia statuses: Stati subscribe: Sottoscrivi @@ -139,16 +147,22 @@ it: web: Web action_logs: actions: + assigned_to_self_report: "%{name} ha assegnato il rapporto %{target} a se stesso" change_email_user: "%{name} ha cambiato l'indirizzo email per l'utente %{target}" confirm_user: "%{name} ha confermato l'indirizzo email per l'utente %{target}" create_custom_emoji: "%{name} ha caricato un nuovo emoji %{target}" create_domain_block: "%{name} ha bloccato il dominio %{target}" + destroy_domain_block: "%{name} ha sbloccato il dominio %{target}" + destroy_status: "%{name} ha eliminato lo status di %{target}" + disable_2fa_user: "%{name} ha disabilitato l'obbligo dei due fattori per l'utente %{target}" disable_custom_emoji: "%{name} ha disabilitato l'emoji %{target}" disable_user: "%{name} ha disabilitato il login per l'utente %{target}" enable_custom_emoji: "%{name} ha abilitato l'emoji %{target}" enable_user: "%{name} ha abilitato il login per l'utente %{target}" remove_avatar_user: "%{name} ha eliminato l'avatar di %{target}" + reopen_report: "%{name} ha riaperto il rapporto %{target}" reset_password_user: "%{name} ha reimpostato la password dell'utente %{target}" + resolve_report: "%{name} ha risolto il rapporto %{target}" silence_account: "%{name} ha silenziato l'account di %{target}" suspend_account: "%{name} ha sospeso l'account di %{target}" unsilence_account: "%{name} ha de-silenziato l'account di %{target}" @@ -245,7 +259,10 @@ it: create_and_resolve: Risolvi con nota create_and_unresolve: Riapri con nota delete: Elimina + reopen: Riapri rapporto + report: 'Rapporto #%{id}' report_contents: Contenuti + reported_by: Inviato da resolved: Risolto silence_account: Silenzia account status: Stato @@ -275,11 +292,13 @@ it: title: Apri la cancellazione dell'account min_invite_role: disabled: Nessuno + title: Permetti inviti da open: desc_html: Consenti a chiunque di creare un account title: Apri registrazioni show_known_fediverse_at_about_page: desc_html: Quando attivato, mostra nell'anteprima i toot da tutte le istanze conosciute. Altrimenti mostra solo i toot locali. + title: Mostra la fediverse conosciuta nell'anteprima della timeline show_staff_badge: title: Mostra badge staff site_description: @@ -294,8 +313,8 @@ it: back_to_account: Torna alla pagina dell'account batch: delete: Elimina - nsfw_off: NSFW OFF - nsfw_on: NSFW ON + nsfw_off: Segna come non sensibile + nsfw_on: Segna come sensibile failed_to_execute: Impossibile eseguire media: title: Media @@ -385,7 +404,7 @@ it: archive_takeout: date: Data download: Scarica il tuo archivio - hint_html: Puoi richiedere un archivio dei tuoi toot e media caricati. I dati esportati sono in formato ActivityPub, leggibili da qualunque software che segue questo standard. + hint_html: Puoi richiedere un archivio dei tuoi toot e media caricati. I dati esportati sono in formato ActivityPub, leggibili da qualunque software che segue questo standard. Puoi richiedere un archivio ogni 7 giorni. in_progress: Creazione archivio... request: Richiedi il tuo archivio size: Dimensioni @@ -429,10 +448,13 @@ it: '86400': 1 giorno expires_in_prompt: Mai generate: Genera + max_uses: + other: "%{count} utilizzi" max_uses_prompt: Nessun limite prompt: Genera dei link e forniscili ad altri per concedere l'accesso a questa istanza table: expires_at: Scade + uses: Utilizzi title: Invita persone landing_strip_html: "%{name} è un utente su %{link_to_root_path}. Puoi seguirlo o interagire con lui se possiedi un account ovunque nel fediverse." landing_strip_signup_html: Se non possiedi un account, puoi iscriverti qui. @@ -453,7 +475,7 @@ it: notification_mailer: digest: action: Vedi tutte le notifiche - body: 'Ecco un breve riassunto di quello che ti sei perso su %{instance} dalla tua ultima visita del %{since}:' + body: Ecco un breve riassunto di quello che ti sei perso dalla tua ultima visita del %{since} mention: "%{name} ti ha menzionato:" new_followers_summary: one: E inoltre hai ricevuto un nuovo seguace mentre eri assente! Urrà! @@ -515,9 +537,12 @@ it: error: Errore title: Titolo sessions: + activity: Ultima attività browser: Browser browsers: blackberry: Blackberry + chrome: Chrome + generic: Browser sconosciuto current_session: Sessione corrente description: "%{browser} su %{platform}" platforms: @@ -538,6 +563,10 @@ it: two_factor_authentication: Autenticazione a due fattori your_apps: Le tue applicazioni statuses: + attached: + video: + one: "%{count} video" + other: "%{count} video" open_in_web: Apri sul Web over_character_limit: Limite caratteri superato di %{max} pin_errors: @@ -558,8 +587,11 @@ it: pinned: Toot fissato in cima reblogged: condiviso sensitive_content: Materiale sensibile + terms: + title: "%{instance} Termini di servizio e politica della privacy" themes: contrast: Contrasto elevato + default: Mastodon time: formats: default: "%b %d, %Y, %H:%M" diff --git a/config/locales/ja.yml b/config/locales/ja.yml index cb7340dde..f1f43efe9 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -40,6 +40,7 @@ ja: following: フォロー中 media: メディア moved_html: "%{name} さんは引っ越しました %{new_profile_link}:" + network_hidden: この情報は利用できません nothing_here: 何もありません! people_followed_by: "%{name} さんがフォロー中のアカウント" people_who_follow: "%{name} さんをフォロー中のアカウント" @@ -668,6 +669,7 @@ ja: video: one: "%{count} 本の動画" other: "%{count} 本の動画" + boosted_from_html: "%{acct_link} からブースト" content_warning: '閲覧注意: %{warning}' disallowed_hashtags: one: '許可されていないハッシュタグが含まれています: %{tags}' @@ -701,7 +703,7 @@ ja:
  • 基本的なアカウント情報: 当サイトに登録すると、ユーザー名・メールアドレス・パスワードの入力を求められることがあります。また表示名や自己紹介・プロフィール画像・ヘッダー画像といった追加のプロフィールを登録できます。ユーザー名・表示名・自己紹介・プロフィール画像・ヘッダー画像は常に公開されます。
  • 投稿・フォロー・その他公開情報: フォローしているユーザーの一覧は一般公開されます。フォロワーも同様です。メッセージを投稿する際、日時だけでなく投稿に使用したアプリケーション名も記録されます。メッセージには写真や動画といった添付メディアを含むことがあります。「公開」や「未収載」の投稿は一般公開されます。プロフィールに投稿を載せるとそれもまた公開情報となります。投稿はフォロワーに配信されます。場合によっては他のサーバーに配信され、そこにコピーが保存されることを意味します。投稿を削除した場合も同様にフォロワーに配信されます。他の投稿をリブログやお気に入り登録する行動は常に公開されます。
  • -
  • 「ダイレクト」と「非公開」投稿: すべての投稿はサーバーに保存され、処理されます。「非公開」投稿はフォロワーと投稿に書かれたユーザーに配信されます。「ダイレクト」投稿は投稿に書かれたユーザーにのみ配信されます。場合によっては他のサーバーに配信され、そこにコピーが保存されることを意味します。私たちはこれらの閲覧を一部の許可された者に限定するよう誠意を持って努めます。しかし他のサーバーにおいても同様に扱われるとは限りません。したがって、相手の所属するサーバーを吟味することが重要です。設定で新しいフォロワーの承認または拒否を手動で行うよう切り替えることもできます。サーバー管理者は「ダイレクト」や「非公開」投稿も閲覧する可能性があることを忘れないでください。また受信者がスクリーンショットやコピー、もしくは共有する可能性があることを忘れないでください。いかなる危険な情報もMastodon上で共有しないでください。
  • +
  • 「ダイレクト」と「フォロワー限定」投稿: すべての投稿はサーバーに保存され、処理されます。「フォロワー限定」投稿はフォロワーと投稿に書かれたユーザーに配信されます。「ダイレクト」投稿は投稿に書かれたユーザーにのみ配信されます。場合によっては他のサーバーに配信され、そこにコピーが保存されることを意味します。私たちはこれらの閲覧を一部の許可された者に限定するよう誠意を持って努めます。しかし他のサーバーにおいても同様に扱われるとは限りません。したがって、相手の所属するサーバーを吟味することが重要です。設定で新しいフォロワーの承認または拒否を手動で行うよう切り替えることもできます。サーバー管理者は「ダイレクト」や「フォロワー限定」投稿も閲覧する可能性があることを忘れないでください。また受信者がスクリーンショットやコピー、もしくは共有する可能性があることを忘れないでください。いかなる危険な情報もMastodon上で共有しないでください。
  • IPアドレスやその他メタデータ: ログインする際IPアドレスだけでなくブラウザーアプリケーション名を記録します。ログインしたセッションはすべてユーザー設定で見直し、取り消すことができます。使用されている最新のIPアドレスは最大12ヵ月間保存されます。またサーバーへのIPアドレスを含むすべてのリクエストのログを保持することがあります。
@@ -752,7 +754,7 @@ ja:

私たちは個人を特定できる情報を外部へ販売・取引・その他方法で渡すことはありません。これには当サイトの運営・業務遂行・サービス提供を行ううえで補助する信頼できる第三者をこの機密情報の保護に同意するかぎり含みません。法令の遵守やサイトポリシーの施行、権利・財産・安全の保護に適切と判断した場合、あなたの情報を公開することがあります。

-

あなたの公開情報はネットワーク上の他のサーバーにダウンロードされることがあります。相手が異なるサーバーに所属する場合、「公開」と「非公開」投稿はフォロワーの所属するサーバーに配信され、「ダイレクト」投稿は受信者の所属するサーバーに配信されます。

+

あなたの公開情報はネットワーク上の他のサーバーにダウンロードされることがあります。相手が異なるサーバーに所属する場合、「公開」と「フォロワー限定」投稿はフォロワーの所属するサーバーに配信され、「ダイレクト」投稿は受信者の所属するサーバーに配信されます。

あなたがアカウントの使用をアプリケーションに許可すると、承認した権限の範囲内で公開プロフィール情報・フォローリスト・フォロワー・リスト・すべての投稿・お気に入り登録にアクセスできます。アプリケーションはメールアドレスやパスワードに決してアクセスできません。

diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 7ec512d9e..75e81b450 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -40,6 +40,7 @@ nl: following: Volgend media: Media moved_html: "%{name} is verhuisd naar %{new_profile_link}:" + network_hidden: Deze informatie is niet beschikbaar nothing_here: Hier is niets! people_followed_by: Mensen die %{name} volgen people_who_follow: Mensen die %{name} volgen diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index cf7584999..0946ecd20 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -40,6 +40,7 @@ pt-BR: following: Seguindo media: Mídia moved_html: "%{name} se mudou para %{new_profile_link}:" + network_hidden: Essa informação não está disponível nothing_here: Não há nada aqui! people_followed_by: Pessoas que %{name} segue people_who_follow: Pessoas que seguem %{name} @@ -49,6 +50,7 @@ pt-BR: reserved_username: Este usuário está reservado roles: admin: Administrador + bot: Robô moderator: Moderador unfollow: Deixar de seguir admin: @@ -666,6 +668,7 @@ pt-BR: video: one: "%{count} vídeo" other: "%{count} vídeos" + boosted_from_html: Compartilhada à partir de %{acct_link} content_warning: 'Aviso de conteúdo: %{warning}' disallowed_hashtags: one: 'continha a hashtag não permitida: %{tags}' diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml index 21d466918..5df7bf77b 100644 --- a/config/locales/simple_form.ca.yml +++ b/config/locales/simple_form.ca.yml @@ -4,7 +4,7 @@ ca: hints: defaults: avatar: PNG, GIF o JPG. Màxim 2MB. S'escalarà a 400x400px - bot: Informa a tothom que el compte no representa a una persona + bot: Aquest compte realitza principalment accions automatitzades i pot no estar controlat per cap persona digest: Només s'envia després d'un llarg període d'inactivitat amb un resum de les mencions que has rebut en la teva absència display_name: one: 1 càracter restant @@ -15,6 +15,7 @@ ca: note: one: 1 càracter restant other: %{count} caràcters restants + setting_hide_network: Qui tu segueixes i els que et segueixen a tu no es mostraran en el teu perfil setting_noindex: Afecta el teu perfil públic i les pàgines d'estat setting_theme: Afecta l'aspecte de Mastodon quan es visita des de qualsevol dispositiu. imports: @@ -54,6 +55,7 @@ ca: setting_default_sensitive: Marca sempre els elements multimèdia com a sensibles setting_delete_modal: Mostra la finestra de confirmació abans de suprimir un toot setting_display_sensitive_media: Mostra sempre els elements multimèdia marcats com a sensibles + setting_hide_network: Amaga la teva xarxa setting_noindex: Desactivació de la indexació del motor de cerca setting_reduce_motion: Redueix el moviment en animacions setting_system_font_ui: Utilitza el tipus de lletra predeterminat del sistema diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml index c492e5d9a..a885c9332 100644 --- a/config/locales/simple_form.fa.yml +++ b/config/locales/simple_form.fa.yml @@ -4,6 +4,7 @@ fa: hints: defaults: avatar: یکی از قالب‌های PNG یا GIF یا JPG. بیشترین اندازه ۲ مگابایت. تصویر به اندازهٔ ۴۰۰×۴۰۰ پیکسل تبدیل خواهد شد + bot: این حساب بیشتر به طور خودکار فعالیت می‌کند و نظارت پیوسته‌ای روی آن وجود ندارد digest: تنها وقتی فرستاده می‌شود که مدتی طولانی فعالیتی نداشته باشید و در این مدت برای شما پیغام خصوصی‌ای نوشته شده باشد display_name: one: 1 حرف باقی مانده @@ -14,6 +15,7 @@ fa: note: one: 1 حرف باقی مانده other: %{count} حرف باقی مانده + setting_hide_network: فهرست پیگیران شما و فهرست کسانی که شما پی می‌گیرید روی نمایهٔ شما دیده نخواهد شد setting_noindex: روی نمایهٔ عمومی و صفحهٔ نوشته‌های شما تأثیر می‌گذارد setting_theme: ظاهر ماستدون را وقتی که از هر دستگاهی به آن وارد می‌شوید تعیین می‌کند. imports: @@ -29,6 +31,7 @@ fa: value: محتوا defaults: avatar: تصویر نمایه + bot: این حساب یک ربات است confirm_new_password: تأیید رمز تازه confirm_password: تأیید رمز current_password: رمز فعلی @@ -52,6 +55,7 @@ fa: setting_default_sensitive: همیشه تصاویر را به عنوان حساس علامت بزن setting_delete_modal: پیش از پاک کردن یک نوشته پیغام تأیید نشان بده setting_display_sensitive_media: همیشه تصویرهای علامت‌زده‌شده به عنوان حساس را نمایش بده + setting_hide_network: نهفتن شبکهٔ ارتباطی setting_noindex: درخواست از موتورهای جستجو برای لغو فهرست‌سازی setting_reduce_motion: کاستن از حرکت در پویانمایی‌ها setting_system_font_ui: به‌کاربردن قلم پیش‌فرض سیستم diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml index 1c5a7b191..4e535cdf4 100644 --- a/config/locales/simple_form.fr.yml +++ b/config/locales/simple_form.fr.yml @@ -4,7 +4,7 @@ fr: hints: defaults: avatar: Au format PNG, GIF ou JPG. 2 Mo maximum. Sera réduit à 400x400px - bot: Avertit que ce compte ne représente pas une personne + bot: Ce compte exécute principalement des actions automatisées et pourrait ne pas être surveillé digest: Uniquement envoyé après une longue période d’inactivité et uniquement si vous avez reçu des messages personnels pendant votre absence display_name: one: 1 caractère restant @@ -15,6 +15,7 @@ fr: note: one: 1 caractère restant other: %{count} caractères restants + setting_hide_network: Ceux que vous suivez et ceux qui vous suivent ne seront pas affichés sur votre profil setting_noindex: Affecte votre profil public ainsi que vos statuts setting_theme: Affecte l’apparence de Mastodon quand vous êtes connecté·e depuis n’importe quel appareil. imports: @@ -54,6 +55,7 @@ fr: setting_default_sensitive: Toujours marquer les médias comme sensibles setting_delete_modal: Afficher une fenêtre de confirmation avant de supprimer un pouet setting_display_sensitive_media: Toujours afficher les médias marqués comme sensibles + setting_hide_network: Cacher votre réseau setting_noindex: Demander aux moteurs de recherche de ne pas indexer vos informations personnelles setting_reduce_motion: Réduire la vitesse des animations setting_system_font_ui: Utiliser la police par défaut du système diff --git a/config/locales/simple_form.gl.yml b/config/locales/simple_form.gl.yml index 461b8080d..6dc3da19c 100644 --- a/config/locales/simple_form.gl.yml +++ b/config/locales/simple_form.gl.yml @@ -4,17 +4,18 @@ gl: hints: defaults: avatar: PNG, GIF ou JPG. Máximo 2MB. Será reducida a 400x400px - bot: Avisa as usuarias de que a conta non representa a unha persoa + bot: Esta conta realiza principalmente accións automatizadas e podería non estar monitorizada digest: Enviar só tras un longo período de inactividade e só si recibeu algunha mensaxe personal na súa ausencia display_name: one: 1 caracter restante other: %{count} caracteres restantes fields: Pode ter ate 4 elementos no seu perfil mostrados como unha táboa header: PNG, GIF ou JPG. Máximo 2MB. Será reducida a 700x335px - locked: Require que vostede aprove as seguidoras de xeito manual + locked: Require que vostede acepte as seguidoras de xeito manual note: one: 1 caracter restante other: %{count} caracteres restantes + setting_hide_network: Non se mostrará no seu perfil quen a segue e quen a está a seguir setting_noindex: Afecta ao seu perfil público e páxinas de estado setting_theme: Afecta ao aspecto de Mastodon en calquer dispositivo cando está conectada. imports: @@ -54,6 +55,7 @@ gl: setting_default_sensitive: Marcar sempre multimedia como sensible setting_delete_modal: Solicitar confirmación antes de eliminar unha mensaxe setting_display_sensitive_media: Mostrar sempre os medios marcados como sensibles + setting_hide_network: Agochar a súa rede setting_noindex: Pedir non aparecer nas buscas dos motores de busca setting_reduce_motion: Reducir o movemento nas animacións setting_system_font_ui: Utilizar a tipografía por defecto do sistema diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml index 54a052021..a3ea25d60 100644 --- a/config/locales/simple_form.ja.yml +++ b/config/locales/simple_form.ja.yml @@ -4,13 +4,14 @@ ja: hints: defaults: avatar: 2MBまでのPNG、GIF、JPGが利用可能です。400x400pxまで縮小されます - bot: アカウントが人を表すものではないことを表示します + bot: このアカウントは主に自動で動作し、人が見ていない可能性があります digest: 長期間使用していない場合と不在時に返信を受けた場合のみ送信されます display_name: あと%{count}文字入力できます。 fields: プロフィールに表として4つまでの項目を表示することができます header: 2MBまでのPNG、GIF、JPGが利用可能です。 700x335pxまで縮小されます locked: フォロワーを手動で承認する必要があります note: あと%{count}文字入力できます。 + setting_hide_network: フォローとフォロワーの情報がプロフィールページで見られないようにします setting_noindex: 公開プロフィールおよび各投稿ページに影響します setting_theme: ログインしている全てのデバイスで適用されるデザインです。 imports: @@ -50,6 +51,7 @@ ja: setting_default_sensitive: メディアを常に閲覧注意としてマークする setting_delete_modal: トゥートを削除する前に確認ダイアログを表示する setting_display_sensitive_media: 閲覧注意としてマークされたメディアも常に表示する + setting_hide_network: 繋がりを隠す setting_noindex: 検索エンジンによるインデックスを拒否する setting_reduce_motion: アニメーションの動きを減らす setting_system_font_ui: システムのデフォルトフォントを使う diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml index fec5e7ec4..68aa0635d 100644 --- a/config/locales/simple_form.nl.yml +++ b/config/locales/simple_form.nl.yml @@ -4,7 +4,7 @@ nl: hints: defaults: avatar: PNG, GIF of JPG. Maximaal 2MB. Wordt teruggeschaald naar 400x400px - bot: Waarschuwt mensen dat dit account geen echt persoon is + bot: Dit is een geautomatiseerd account en wordt mogelijk niet gemonitord digest: Wordt alleen na een lange periode van inactiviteit verzonden en alleen wanneer je tijdens jouw afwezigheid persoonlijke berichten hebt ontvangen display_name: one: 1 teken over @@ -15,6 +15,7 @@ nl: note: one: 1 teken over other: %{count} tekens over + setting_hide_network: Wie jij volgt en wie jou volgen wordt niet op jouw profiel getoond setting_noindex: Heeft invloed op jouw openbare profiel en toots setting_theme: Heeft invloed op hoe de webapp van Mastodon eruitziet (op elk apparaat waarmee je inlogt). imports: @@ -54,6 +55,7 @@ nl: setting_default_sensitive: Media altijd als gevoelig markeren setting_delete_modal: Vraag voor het verwijderen van een toot een bevestiging setting_display_sensitive_media: Als gevoelig gemarkeerde media altijd tonen + setting_hide_network: Jouw volgers en wie je volgt verbergen setting_noindex: Jouw toots niet door zoekmachines laten indexeren setting_reduce_motion: Langzamere animaties setting_system_font_ui: Standaardlettertype van jouw systeem gebruiken diff --git a/config/locales/simple_form.pt-BR.yml b/config/locales/simple_form.pt-BR.yml index 0479c4c72..50ed5eb1a 100644 --- a/config/locales/simple_form.pt-BR.yml +++ b/config/locales/simple_form.pt-BR.yml @@ -4,7 +4,7 @@ pt-BR: hints: defaults: avatar: PNG, GIF or JPG. Arquivos de até 2MB. Eles serão diminuídos para 400x400px - bot: Informa usuários que a conta não representa uma pessoa + bot: Essa conta executa principalmente ações automatizadas e pode não ser monitorada digest: Enviado após um longo período de inatividade com um resumo das menções que você recebeu em sua ausência display_name: one: 1 caracter restante @@ -15,6 +15,7 @@ pt-BR: note: one: 1 caracter restante other: %{count} caracteres restantes + setting_hide_network: Quem você segue e quem segue você não aparecerá no seu perfil setting_noindex: Afeta seu perfil público e as páginas de suas postagens setting_theme: Afeta a aparência do Mastodon quando em sua conta em qualquer aparelho. imports: @@ -54,6 +55,7 @@ pt-BR: setting_default_sensitive: Sempre marcar mídia como sensível setting_delete_modal: Mostrar diálogo de confirmação antes de deletar uma postagem setting_display_sensitive_media: Sempre mostrar mídia marcada como sensível + setting_hide_network: Esconder suas conexões setting_noindex: Não quero ser indexado por mecanismos de busca setting_reduce_motion: Reduz movimento em animações setting_system_font_ui: Usar a fonte padrão de seu sistema diff --git a/config/locales/simple_form.sk.yml b/config/locales/simple_form.sk.yml index 00a8489de..83d388ba7 100644 --- a/config/locales/simple_form.sk.yml +++ b/config/locales/simple_form.sk.yml @@ -4,7 +4,7 @@ sk: hints: defaults: avatar: PNG, GIF alebo JPG. Maximálne 2MB. Bude zmenšený na 400x400px - bot: Varuje užívateľov, že daný účet nerepreyentuje ozajstného človeka + bot: Tento účet vykonáva hlavne zautomatizované akcie, a je pravdepodobne nespravovaný digest: Odoslané iba v prípade dlhodobej neprítomnosti, a len ak ste obdŕžali nejaké osobné správy kým ste boli preč display_name: few: Ostávajú ti %{count} znaky @@ -17,6 +17,7 @@ sk: few: Ostávajú ti %{count} znaky one: Ostáva vám 1 znak other: Ostáva ti %{count} znakov + setting_hide_network: Koho následuješ, a kto následuje teba nebude zobrazené na tvojom profile setting_noindex: Ovplyvňuje verejný profil a statusy setting_theme: Toto ovplyvňuje ako Mastodon vyzerá pri prihlásení z hociakého zariadenia. imports: diff --git a/config/locales/simple_form.sv.yml b/config/locales/simple_form.sv.yml index 81ba61fb3..f43097e55 100644 --- a/config/locales/simple_form.sv.yml +++ b/config/locales/simple_form.sv.yml @@ -4,6 +4,7 @@ sv: hints: defaults: avatar: Högst 2 MB. Kommer nedskalas till 400x400px + bot: Detta konto utför huvudsakligen automatiserade åtgärder och kanske inte övervakas digest: Skickas endast efter en lång period av inaktivitet och endast om du har fått några personliga meddelanden i din frånvaro display_name: one: 1 tecken kvar @@ -19,7 +20,7 @@ sv: imports: data: CSV-fil som exporteras från en annan Mastodon-instans sessions: - otp: Ange tvåfaktorkoden från din telefon eller använd någon av dina återställningskoder. + otp: 'Ange tvåfaktorkoden genererad från din telefonapp eller använd någon av dina återställningskoder:' user: filtered_languages: Kontrollerade språk filtreras från offentliga tidslinjer för dig labels: diff --git a/config/locales/sv.yml b/config/locales/sv.yml index 73645d013..5a81d0435 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -40,6 +40,7 @@ sv: following: Följer media: Media moved_html: "%{name} har flyttat till %{new_profile_link}:" + network_hidden: Denna information är inte tillgänglig nothing_here: Det finns inget här! people_followed_by: Personer som %{name} följer people_who_follow: Personer som följer %{name} @@ -49,6 +50,7 @@ sv: reserved_username: Användarnamnet är reserverat roles: admin: Admin + bot: Bot moderator: Moderator unfollow: Sluta följa admin: @@ -373,6 +375,7 @@ sv: admin_mailer: new_report: body: "%{reporter} har rapporterat %{target}" + body_remote: Någon från %{domain} har rapporterat %{target} subject: Ny rapport för %{instance} (#%{id}) application_mailer: notification_preferences: Ändra e-postinställningar @@ -462,7 +465,7 @@ sv: archive_takeout: date: Datum download: Ladda ner ditt arkiv - hint_html: Du kan begära ett arkiv av dina toots och uppladdad media. Den exporterade datan kommer att vara i ActivityPub-format och läsbar av kompatibel programvara. + hint_html: Du kan begära ett arkiv av dina toots och uppladdad media. Den exporterade datan kommer att vara i ActivityPub-format och läsbar av kompatibel programvara. Du kan begära ett arkiv var sjunde dag. in_progress: Kompilerar ditt arkiv... request: Efterfråga ditt arkiv size: Storlek @@ -666,6 +669,7 @@ sv: video: one: "%{count} video" other: "%{count} videor" + boosted_from_html: Boosted från %{acct_link} content_warning: 'Innehållsvarning: %{warning}' disallowed_hashtags: one: 'innehöll en otillåten hashtag: %{tags}' @@ -694,6 +698,7 @@ sv: terms: title: "%{instance} Användarvillkor och Sekretesspolicy" themes: + contrast: Hög kontrast default: Mastodon time: formats: @@ -740,5 +745,6 @@ sv: users: invalid_email: E-postadressen är ogiltig invalid_otp_token: Ogiltig tvåfaktorkod + otp_lost_help_html: Om du förlorat åtkomst till båda kan du komma i kontakt med %{email} seamless_external_login: Du är inloggad via en extern tjänst, så lösenord och e-postinställningar är inte tillgängliga. signed_in_as: 'Inloggad som:'