From 033dae3001c85dc1cfc9deb15d248c9034ef533d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 8 Jun 2026 09:04:33 +0200 Subject: [PATCH 01/44] Update dependency doorkeeper to v5.9.2 (#39308) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 4aff8dc416..dcbcb8d9b0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -210,7 +210,7 @@ GEM activerecord (>= 7.0, < 9.0) docile (1.4.1) domain_name (0.6.20240107) - doorkeeper (5.9.1) + doorkeeper (5.9.2) railties (>= 5) dotenv (3.2.0) drb (2.2.3) From a5e763c33070e5594c229b8ddedecaa7dcbae3c3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 8 Jun 2026 07:05:12 +0000 Subject: [PATCH 02/44] Update dependency ioredis to v5.11.1 (#39301) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index b6b489b702..48ba75487f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8836,8 +8836,8 @@ __metadata: linkType: hard "ioredis@npm:^5.3.2": - version: 5.11.0 - resolution: "ioredis@npm:5.11.0" + version: 5.11.1 + resolution: "ioredis@npm:5.11.1" dependencies: "@ioredis/commands": "npm:1.10.0" cluster-key-slot: "npm:1.1.1" @@ -8846,7 +8846,7 @@ __metadata: redis-errors: "npm:1.2.0" redis-parser: "npm:3.0.0" standard-as-callback: "npm:2.1.0" - checksum: 10c0/6bba1eda256bafabf581089ec24c98bccc5af614b108f13fca6672ea707c36d67e7021c4f0965cbe0294e7a3964b6dbd897a95ed7f8fe82a175531219e91b84f + checksum: 10c0/a8b27043cf2c045dfc93f40a32ce24cf9f8b57799a37f4234c4b925c365ccf131629590f94a512f546fda2ba8ed034009c94c4933ecd44c50bc166636d929fd6 languageName: node linkType: hard From ea5b613796e2a933592697181d246227d77f2179 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 8 Jun 2026 09:05:27 +0200 Subject: [PATCH 03/44] Add ability to view individual newsletters in admin UI (#39271) --- .../accounts_controller.rb | 36 ++++++++ .../admin/email_subscriptions_controller.rb | 14 ++++ app/javascript/styles/mastodon/admin.scss | 58 +++++++++++++ app/javascript/styles/mastodon/tables.scss | 10 +++ app/policies/email_subscription_policy.rb | 4 + .../email_subscriptions/_accounts.html.haml | 9 +- .../email_subscriptions/_status.html.haml | 8 ++ .../accounts/show.html.haml | 84 +++++++++++++++++++ app/views/settings/privacy/show.html.haml | 6 +- config/locales/be.yml | 2 - config/locales/cs.yml | 1 - config/locales/cy.yml | 2 - config/locales/da.yml | 2 - config/locales/de.yml | 2 - config/locales/el.yml | 2 - config/locales/en.yml | 19 ++++- config/locales/es-AR.yml | 2 - config/locales/es-MX.yml | 2 - config/locales/es.yml | 2 - config/locales/et.yml | 2 - config/locales/fa.yml | 2 - config/locales/fi.yml | 2 - config/locales/fr-CA.yml | 2 - config/locales/fr.yml | 2 - config/locales/ga.yml | 2 - config/locales/gl.yml | 2 - config/locales/he.yml | 2 - config/locales/hu.yml | 2 - config/locales/is.yml | 2 - config/locales/it.yml | 2 - config/locales/kab.yml | 2 - config/locales/lad.yml | 1 - config/locales/nan-TW.yml | 2 - config/locales/nl.yml | 2 - config/locales/nn.yml | 2 - config/locales/pt-BR.yml | 2 - config/locales/ru.yml | 1 - config/locales/sq.yml | 2 - config/locales/sv.yml | 2 - config/locales/tr.yml | 2 - config/locales/vi.yml | 2 - config/locales/zh-CN.yml | 2 - config/locales/zh-TW.yml | 2 - config/routes/admin.rb | 9 +- 44 files changed, 248 insertions(+), 72 deletions(-) create mode 100644 app/controllers/admin/email_subscriptions/accounts_controller.rb create mode 100644 app/views/admin/email_subscriptions/_status.html.haml create mode 100644 app/views/admin/email_subscriptions/accounts/show.html.haml diff --git a/app/controllers/admin/email_subscriptions/accounts_controller.rb b/app/controllers/admin/email_subscriptions/accounts_controller.rb new file mode 100644 index 0000000000..a5ae9b3920 --- /dev/null +++ b/app/controllers/admin/email_subscriptions/accounts_controller.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +class Admin::EmailSubscriptions::AccountsController < Admin::BaseController + before_action :require_enabled! + before_action :set_account + + def show + authorize :email_subscription, :show? + @email_subscriptions_count = EmailSubscription.where(account: @account).count + @email_subscriptions = EmailSubscription.where(account: @account).page(params[:page]) + end + + def enable + authorize :email_subscription, :enable? + @account.user.settings['email_subscriptions'] = true + @account.user.save! + redirect_to admin_email_subscriptions_account_path(@account.id) + end + + def disable + authorize :email_subscription, :disable? + @account.user.settings['email_subscriptions'] = false + @account.user.save! + redirect_to admin_email_subscriptions_account_path(@account.id) + end + + private + + def require_enabled! + raise ActionController::RoutingError, 'Feature disabled' unless Rails.application.config.x.email_subscriptions + end + + def set_account + @account = Account.find(params[:id]) + end +end diff --git a/app/controllers/admin/email_subscriptions_controller.rb b/app/controllers/admin/email_subscriptions_controller.rb index af71eb7012..dae7d452b8 100644 --- a/app/controllers/admin/email_subscriptions_controller.rb +++ b/app/controllers/admin/email_subscriptions_controller.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true class Admin::EmailSubscriptionsController < Admin::BaseController + before_action :set_email_subscription, only: :destroy + def index authorize :email_subscription, :index? @@ -9,6 +11,12 @@ class Admin::EmailSubscriptionsController < Admin::BaseController @accounts = Account.local.where.associated(:email_subscriptions).includes(:user) end + def destroy + authorize :email_subscription, :destroy? + @email_subscription.destroy! + redirect_to admin_email_subscriptions_account_path(@email_subscription.account_id) + end + def disable authorize :email_subscription, :disable? Setting.email_subscriptions = false @@ -20,4 +28,10 @@ class Admin::EmailSubscriptionsController < Admin::BaseController Admin::EmailSubscriptionsPurgeWorker.perform_async redirect_to admin_email_subscriptions_path, notice: I18n.t('admin.email_subscriptions.purged_msg') end + + private + + def set_email_subscription + @email_subscription = EmailSubscription.find(params[:id]) + end end diff --git a/app/javascript/styles/mastodon/admin.scss b/app/javascript/styles/mastodon/admin.scss index 836c5c60ca..7e5798ae54 100644 --- a/app/javascript/styles/mastodon/admin.scss +++ b/app/javascript/styles/mastodon/admin.scss @@ -468,6 +468,22 @@ $content-width: 840px; background-color: var(--color-bg-brand-soft); } + &.variantWarning { + background-color: var(--color-bg-warning-softest); + + .icon { + background-color: var(--color-bg-warning-soft); + } + } + + &.variantError { + background-color: var(--color-bg-error-softest); + + .icon { + background-color: var(--color-bg-error-soft); + } + } + .content { display: flex; flex-direction: column; @@ -2451,4 +2467,46 @@ a.sparkline { background: var(--color-bg-success-softest); font-size: 13px; font-weight: 600; + + &.positive { + background: var(--color-bg-success-softest); + } + + &.negative { + background: var(--color-bg-error-softest); + } +} + +.metadata { + display: flex; + gap: 40px; + margin: 16px 0; + + & > div { + display: flex; + flex-direction: column; + gap: 4px; + flex-shrink: 0; + } + + dt { + font-size: 13px; + color: var(--color-text-secondary); + } + + dd { + font-size: 16px; + font-weight: 600; + line-height: 22.4px; + + .status-badge { + box-sizing: border-box; + padding: 4px; + font-size: inherit; + height: 24px; + display: flex; + align-items: center; + justify-content: center; + } + } } diff --git a/app/javascript/styles/mastodon/tables.scss b/app/javascript/styles/mastodon/tables.scss index 0023ea353c..ff2935a46a 100644 --- a/app/javascript/styles/mastodon/tables.scss +++ b/app/javascript/styles/mastodon/tables.scss @@ -129,6 +129,10 @@ color: var(--color-text-primary); font-weight: 600; } + + .status-badge { + padding: 0; + } } &.batch-table { @@ -194,6 +198,12 @@ a.table-action-link { justify-content: center; padding: 4px; aspect-ratio: 1; + + &.table-icon-link--danger { + border-radius: 8px; + border: 1px solid var(--color-border-primary); + color: var(--color-text-error); + } } .batch-table { diff --git a/app/policies/email_subscription_policy.rb b/app/policies/email_subscription_policy.rb index 201bd72c13..3da3eedb1d 100644 --- a/app/policies/email_subscription_policy.rb +++ b/app/policies/email_subscription_policy.rb @@ -10,4 +10,8 @@ class EmailSubscriptionPolicy < ApplicationPolicy alias disable? index? alias purge? index? + + alias show? index? + + alias destroy? index? end diff --git a/app/views/admin/email_subscriptions/_accounts.html.haml b/app/views/admin/email_subscriptions/_accounts.html.haml index 456455af4e..0722453a0c 100644 --- a/app/views/admin/email_subscriptions/_accounts.html.haml +++ b/app/views/admin/email_subscriptions/_accounts.html.haml @@ -32,14 +32,13 @@ %strong %bdi= display_name(account) %td.valign-middle - - if account.user_can?(:manage_email_subscriptions) && account.user_email_subscriptions_enabled? - %span.status-badge.positive= t('.active') - - else - %span.status-badge.negative= t('.inactive') + = render 'status', account: account %td.valign-middle = account.email_subscriptions.count %td.valign-middle - if account.last_status_at.present? = l account.last_status_at + - else + \- %td.valign-middle.align-end - = link_to material_symbol('chevron_right'), admin_account_path(account.id), class: 'table-icon-link' + = link_to material_symbol('chevron_right'), admin_email_subscriptions_account_path(account.id), class: 'table-icon-link' diff --git a/app/views/admin/email_subscriptions/_status.html.haml b/app/views/admin/email_subscriptions/_status.html.haml new file mode 100644 index 0000000000..d634a5d06b --- /dev/null +++ b/app/views/admin/email_subscriptions/_status.html.haml @@ -0,0 +1,8 @@ +- if account.user_can?(:manage_email_subscriptions) && account.user_email_subscriptions_enabled? + %span.status-badge.positive= t('email_subscriptions.active') +- elsif account.user_can?(:manage_email_subscriptions) && !account.user_email_subscriptions_enabled? + %span.status-badge.negative= t('email_subscriptions.disabled') +- elsif account.user_email_subscriptions_enabled? && !account.user_can?(:manage_email_subscriptions) + %span.status-badge.negative= t('email_subscriptions.no_access') +- else + %span.status-badge.negative= t('email_subscriptions.inactive') diff --git a/app/views/admin/email_subscriptions/accounts/show.html.haml b/app/views/admin/email_subscriptions/accounts/show.html.haml new file mode 100644 index 0000000000..8f22f82739 --- /dev/null +++ b/app/views/admin/email_subscriptions/accounts/show.html.haml @@ -0,0 +1,84 @@ +- content_for :page_title do + = t('.title', name: display_name(@account)) + +- content_for :heading do + .content__heading__row + .heading-with-lead + %h1= display_name(@account) + %p.lead= acct(@account) + .content__heading__actions + = link_to t('.view_account'), admin_account_path(@account.id), class: 'button button-secondary' + - if @account.user_can?(:manage_email_subscriptions) + - if @account.user_email_subscriptions_enabled? + = link_to t('.disable_feature'), + disable_admin_email_subscriptions_account_path(@account.id), + class: 'button button-secondary button--destructive', + data: { method: 'post', confirm: t('.confirm_disable_feature', name: display_name(@account)) } + - else + = link_to t('.enable_feature'), enable_admin_email_subscriptions_account_path(@account.id), class: 'button button-secondary', data: { method: 'post' } + +%dl.metadata + %div + %dt= t('email_subscriptions.status') + %dd= render 'admin/email_subscriptions/status', account: @account + %div + %dt= t('email_subscriptions.subscribers') + %dd= number_with_delimiter @email_subscriptions_count + %div + %dt= t('admin.email_subscriptions.accounts.last_email') + %dd + - if @account.last_status_at.present? + = l(@account.last_status_at) + - else + \- + +- if !@account.user_email_subscriptions_enabled? + %aside.callout.variantError + = material_symbol 'info' + .content + .body + %p= t('.disabled') +- elsif @account.user_email_subscriptions_enabled? && !@account.user_can?(:manage_email_subscriptions) + %aside.callout.variantError + = material_symbol 'info' + .content + .body + %p= t('.no_access_html', roles_path: admin_roles_path) +- else + %aside.callout.variantWarning + = material_symbol 'warning' + .content + .body + %p= t('.consent') + +.table-wrapper + - if @email_subscriptions.empty? + .empty-state + = emptyphaunt + + .empty-state__title-and-description + .empty-state__title-and-description__title + = t('.empty.no_subscribers_yet') + .empty-state__title-and-description__description + = t('.empty.hint') + - else + %table.table + %thead + %tr + %th= t('.email') + %th= t('.date') + %th + %tbody + - @email_subscriptions.each do |email_subscription| + %tr + %td.valign-middle + = email_subscription.email + %td.valign-middle + = l(email_subscription.created_at) + %td.valign-middle.align-end + = link_to material_symbol('delete'), + admin_email_subscription_path(email_subscription), + data: { method: 'delete', confirm: t('.confirm_remove_subscriber', email: email_subscription.email, name: display_name(@account)) }, + class: 'table-icon-link table-icon-link--danger' + += paginate @email_subscriptions diff --git a/app/views/settings/privacy/show.html.haml b/app/views/settings/privacy/show.html.haml index 6de1bdfca8..c64a135597 100644 --- a/app/views/settings/privacy/show.html.haml +++ b/app/views/settings/privacy/show.html.haml @@ -57,7 +57,11 @@ %tbody %tr %th= t('email_subscriptions.status') - %td= @account.user_email_subscriptions_enabled? ? t('email_subscriptions.active') : t('email_subscriptions.inactive') + %td + - if @account.user_email_subscriptions_enabled? + %span.status-badge.positive= t('email_subscriptions.active') + - else + %span.status-badge.negative= t('email_subscriptions.inactive') %tr %th= t('email_subscriptions.subscribers') %td= number_with_delimiter @email_subscriptions_count diff --git a/config/locales/be.yml b/config/locales/be.yml index 5193b6aae7..091bf2f465 100644 --- a/config/locales/be.yml +++ b/config/locales/be.yml @@ -520,11 +520,9 @@ be: email_subscriptions: accounts: account: Уліковы запіс - active: Актыўны empty: hint: У ніводнага ўліковага запісу няма падпісчыкаў. no_lists_yet: Пакуль няма спісаў - inactive: Неактыўны last_email: Апошняя электронная пошта lead: Уліковыя запісы, якія ўключылі гэту функцыю і маюць падпісчыкаў, будуць паказаныя знізу. status: Стан diff --git a/config/locales/cs.yml b/config/locales/cs.yml index 803908b49e..5aa8b45b1e 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -508,7 +508,6 @@ cs: email_subscriptions: accounts: account: Účet - inactive: Neaktivní last_email: Poslední e-mail status: Status compliance_settings: diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 6c1ba5f89d..50a5fbd955 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -540,11 +540,9 @@ cy: email_subscriptions: accounts: account: Cyfrif - active: Gweithredol empty: hint: Does gan unrhyw gyfrifon ddim tanysgrifwyr eto. no_lists_yet: Dim rhestrau eto - inactive: Anweithredol last_email: E-bost diwethaf lead: Bydd cyfrifon sydd wedi galluogi'r nodwedd ac sydd â thanysgrifwyr yn ymddangos isod. status: Statws diff --git a/config/locales/da.yml b/config/locales/da.yml index 0ff65b712e..a60071bb5d 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -500,11 +500,9 @@ da: email_subscriptions: accounts: account: Konto - active: Aktive empty: hint: Ingen konti har abonnenter endnu. no_lists_yet: Ingen lister endnu - inactive: Inaktive last_email: Seneste e-mail lead: Nedenfor vises de konti, der har aktiveret funktionen og har abonnenter. status: Status diff --git a/config/locales/de.yml b/config/locales/de.yml index 27a49b4d79..33224000e8 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -500,11 +500,9 @@ de: email_subscriptions: accounts: account: Konto - active: Aktiviert empty: hint: Bisher wurden keine Konten abonniert. no_lists_yet: Noch keine Listen vorhanden - inactive: Deaktiviert last_email: Letzte E-Mail lead: Konten, die die Funktion aktiviert haben und abonniert wurden, werden unten angezeigt. status: Status diff --git a/config/locales/el.yml b/config/locales/el.yml index 355af8693b..1109377027 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -500,11 +500,9 @@ el: email_subscriptions: accounts: account: Λογαριασμός - active: Ενεργός empty: hint: Κανένας λογαριασμός δεν έχει συνδρομητές ακόμη. no_lists_yet: Καμία λίστα ακόμη - inactive: Ανενεργός last_email: Τελευταίο email lead: Λογαριασμοί που έχουν ενεργοποιήσει τη λειτουργία και έχουν συνδρομητές θα εμφανίζονται παρακάτω. status: Κατάσταση diff --git a/config/locales/en.yml b/config/locales/en.yml index 7bd0568fb9..95631bd86b 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -500,13 +500,26 @@ en: email_subscriptions: accounts: account: Account - active: Active empty: hint: No accounts have subscribers yet. no_lists_yet: No lists yet - inactive: Inactive last_email: Last email lead: Accounts who have enabled the feature and have subscribers will show below. + show: + confirm_disable_feature: Disable email newsletters for %{name}? Email updates will no longer be sent for this account. The user will still be able to re-enable the feature in their account settings. To permanently remove access to this feature, edit the account’s permission in Roles. + confirm_remove_subscriber: "%{email} will no longer receive emails from %{name}. This action cannot be undone." + consent: Subscribers have only consented to receiving posts via email. Do not use this list for other purposes. + date: Date of sign-up + disable_feature: Disable feature + disabled: The feature was disabled and emails are no longer being sent to this list. + email: Email address + empty: + hint: Nobody has subscribed to this account yet. + no_subscribers_yet: No subscribers yet + enable_feature: Enable feature + no_access_html: This account no longer has the permissions required to enable the feature. Change this in Roles. + title: Email newsletters of %{name} + view_account: View account status: Status subscribers: Subscribers title: Mailing lists @@ -1534,7 +1547,9 @@ en: success_html: You'll now start receiving emails when %{name} publishes new posts. Add %{sender} to your contacts so these posts don't end up in your Spam folder. title: You're signed up unsubscribe: Unsubscribe + disabled: Disabled inactive: Inactive + no_access: No access status: Status subscribers: Subscribers emoji_styles: diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index be98ad08d8..4ce9d037bd 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -500,11 +500,9 @@ es-AR: email_subscriptions: accounts: account: Cuenta - active: Activa empty: hint: Aún no hay cuentas con suscriptores. no_lists_yet: Aún no hay listas - inactive: Inactiva last_email: Último correo electrónico lead: Las cuentas que habilitaron la función y tienen suscriptores se mostrarán a continuación. status: Estado diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index 746f64655b..fc13d70dbe 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -500,11 +500,9 @@ es-MX: email_subscriptions: accounts: account: Cuenta - active: Activa empty: hint: Ninguna cuenta tiene suscriptores todavía. no_lists_yet: No hay listas todavía - inactive: Inactiva last_email: Último correo electrónico lead: A continuación se mostrarán las cuentas que hayan activado la función y tengan suscriptores. status: Estado diff --git a/config/locales/es.yml b/config/locales/es.yml index 1740f42464..20d232b5e9 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -500,11 +500,9 @@ es: email_subscriptions: accounts: account: Cuenta - active: Activa empty: hint: Aún no hay cuentas con suscriptores. no_lists_yet: Aún no hay listas - inactive: Inactiva last_email: Último correo electrónico lead: Las cuentas que han habilitado la función y tienen suscriptores se mostrarán a continuación. status: Estado diff --git a/config/locales/et.yml b/config/locales/et.yml index 1c41ade363..c5654dce02 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -500,11 +500,9 @@ et: email_subscriptions: accounts: account: Konto - active: Aktiivne empty: hint: Ühelgi kontol pole veel tellijaid. no_lists_yet: Veel pole loetelusid - inactive: Mitteaktiivne last_email: Viimane e-post lead: Allpool kuvatakse kontod, kus see funktsioon on aktiveeritud ja millel on tellijaid. status: Olek diff --git a/config/locales/fa.yml b/config/locales/fa.yml index c9b2216a35..0f0e6c3e0d 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -499,11 +499,9 @@ fa: email_subscriptions: accounts: account: حساب - active: فعّال empty: hint: هنوز هیچ حسابی مشترک نشده. no_lists_yet: هنوز سیاهه‌ای وجود ندارد - inactive: غیرفعّال last_email: آخرین رایانامه status: وضعیت subscribers: مشترکان diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 536db62ae1..46117cb556 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -500,11 +500,9 @@ fi: email_subscriptions: accounts: account: Tili - active: Käytössä empty: hint: Millään tilillä ei ole vielä tilaajia. no_lists_yet: Ei vielä listoja - inactive: Poissa käytöstä last_email: Viimeisin sähköpostiviesti lead: Alla näkyvät tilit, jotka ovat ottaneet ominaisuuden käyttöön ja joilla on tilaajia. status: Tila diff --git a/config/locales/fr-CA.yml b/config/locales/fr-CA.yml index 385791c40c..afaa55e3ce 100644 --- a/config/locales/fr-CA.yml +++ b/config/locales/fr-CA.yml @@ -500,11 +500,9 @@ fr-CA: email_subscriptions: accounts: account: Compte - active: Actif empty: hint: Aucun compte n'a d'abonné·e·s pour l'instant. no_lists_yet: Aucune liste pour l'instant - inactive: Inactif last_email: Dernier courriel lead: Les comptes ayant activé la fonctionnalité et qui ont des abonné·e·s apparaîtront ci-dessous. status: État diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 7d2ab2e99a..325ba3382b 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -500,11 +500,9 @@ fr: email_subscriptions: accounts: account: Compte - active: Actif empty: hint: Aucun compte n'a d'abonné·e·s pour l'instant. no_lists_yet: Aucune liste pour l'instant - inactive: Inactif last_email: Dernier courriel lead: Les comptes ayant activé la fonctionnalité et qui ont des abonné·e·s apparaîtront ci-dessous. status: État diff --git a/config/locales/ga.yml b/config/locales/ga.yml index 437fcd3d94..efd086f686 100644 --- a/config/locales/ga.yml +++ b/config/locales/ga.yml @@ -530,11 +530,9 @@ ga: email_subscriptions: accounts: account: Cuntas - active: Gníomhach empty: hint: Níl aon síntiúsóirí ag aon chuntas go fóill. no_lists_yet: Gan aon liostaí fós - inactive: Neamhghníomhach last_email: Ríomhphost deireanach lead: Taispeánfar thíos cuntais a bhfuil an ghné cumasaithe acu agus a bhfuil síntiúsóirí acu. status: Stádas diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 1f6849df95..22df0fe8d6 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -500,11 +500,9 @@ gl: email_subscriptions: accounts: account: Conta - active: Activa empty: hint: Aínda non hai contas con subscritoras. no_lists_yet: Aínda non hai listas - inactive: Inactiva last_email: Último correo lead: Aquí móstranse as contas que activaron esta ferramenta e teñen subscritoras. status: Estado diff --git a/config/locales/he.yml b/config/locales/he.yml index c754a48df6..0d0d706409 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -520,11 +520,9 @@ he: email_subscriptions: accounts: account: חשבון - active: פעילים empty: hint: עדיין אין מנוי לאף חשבון. no_lists_yet: אין רשימות עדיין - inactive: לא פעילים last_email: הודעת דואל אחרונה lead: חשבונות שבהם הופעלה האפשרות ויש להם מנויים יופיעו להלן. status: מצב diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 8049aee3b9..9614ae8466 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -500,11 +500,9 @@ hu: email_subscriptions: accounts: account: Fiók - active: Aktív empty: hint: Egyik fióknak sincs feliratkozója. no_lists_yet: Még nincsenek listák - inactive: Inaktív last_email: Legutóbbi e-mail lead: A fiókok, melyek bekapcsolták a funkciót, és vannak feliratkozóik, itt fognak megjelenni alább. status: Állapot diff --git a/config/locales/is.yml b/config/locales/is.yml index 4099b1307e..540072beb6 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -500,11 +500,9 @@ is: email_subscriptions: accounts: account: Aðgangur - active: Virkur empty: hint: Engir aðgangar eru ennþá með neina áskrifendur. no_lists_yet: Ennþá engir listar - inactive: Óvirkur last_email: Síðasti tölvupóstur lead: Aðgangar sem hafa virkjað eiginleikann og eru með áskrifendur munu birtast hér fyrir neðan. status: Staða diff --git a/config/locales/it.yml b/config/locales/it.yml index 491a5e909f..c0c7df8175 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -500,11 +500,9 @@ it: email_subscriptions: accounts: account: Account - active: Attivo empty: hint: Non ci sono ancora account con iscritti. no_lists_yet: Non ci sono ancora liste - inactive: Inattivo last_email: Ultima email lead: Di seguito verranno visualizzati gli account che hanno attivato la funzionalità e che hanno degli iscritti. status: Stato diff --git a/config/locales/kab.yml b/config/locales/kab.yml index 7a90eab7ba..d16c4b65a6 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -290,8 +290,6 @@ kab: email_subscriptions: accounts: account: Amiḍan - active: D urmid - inactive: D arurmid last_email: Imayl aneggaru status: Addad compliance_settings: diff --git a/config/locales/lad.yml b/config/locales/lad.yml index 271bf909ef..01496e3607 100644 --- a/config/locales/lad.yml +++ b/config/locales/lad.yml @@ -471,7 +471,6 @@ lad: email_subscriptions: accounts: account: Kuento - active: Aktivo danger_zone: disable_feature: action: Inkapasita diff --git a/config/locales/nan-TW.yml b/config/locales/nan-TW.yml index 320c7db564..587cb4a49c 100644 --- a/config/locales/nan-TW.yml +++ b/config/locales/nan-TW.yml @@ -490,11 +490,9 @@ nan-TW: email_subscriptions: accounts: account: 口座 - active: 有效ê empty: hint: Iáu無半ê口座有訂ê lâng。 no_lists_yet: Iáu無列單 - inactive: 停止使用ah last_email: 上新ê電子phue箱 lead: 有啟用tsit ê功能koh有訂ê lâng ê口座ē展示佇下kha。 status: 狀態 diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 09e152237f..9a3c7a68df 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -500,11 +500,9 @@ nl: email_subscriptions: accounts: account: Account - active: Actief empty: hint: Geen enkel account heeft nog abonnees. no_lists_yet: Nog geen lijsten - inactive: Inactief last_email: Meest recente e-mail lead: Accounts die deze functionaliteit hebben ingeschakeld en abonnees hebben, worden hieronder getoond. status: Status diff --git a/config/locales/nn.yml b/config/locales/nn.yml index a599917d50..7c0bc6104b 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -500,11 +500,9 @@ nn: email_subscriptions: accounts: account: Konto - active: Aktiv empty: hint: Ingen brukarkontoar har abonnentar enno. no_lists_yet: Ingen lister enno - inactive: Ikkje aktiv last_email: Siste epost lead: Nedanfor vil du sjå brukarkontoar som har skrudd på dette og som har abonnentar. status: Status diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index d2decc5450..4fdf40888e 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -500,11 +500,9 @@ pt-BR: email_subscriptions: accounts: account: Conta - active: Ativas empty: hint: Não há contas com inscritos ainda. no_lists_yet: Não há listas ainda - inactive: Inativas last_email: Último email lead: Contas que ativaram o recurso e têm inscritos aparecerão abaixo. status: Estado diff --git a/config/locales/ru.yml b/config/locales/ru.yml index a5418c1378..ee3a8cfa96 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -506,7 +506,6 @@ ru: email_subscriptions: accounts: account: Аккаунт - active: Актив status: Статус subscribers: Подписчики danger_zone: diff --git a/config/locales/sq.yml b/config/locales/sq.yml index 7fab3b09ee..243f9b8a10 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -500,11 +500,9 @@ sq: email_subscriptions: accounts: account: Llogari - active: Aktive empty: hint: Ende s’ka llogari me pajtimtarë. no_lists_yet: Ende pa lista - inactive: Joaktive last_email: Email-i i fundit lead: Llogaritë që kanë aktivizuar veçorinë dhe kanë pajtimtarë do të shfaqen më poshtë. status: Gjendje diff --git a/config/locales/sv.yml b/config/locales/sv.yml index 2c33894f82..4434278bb0 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -500,11 +500,9 @@ sv: email_subscriptions: accounts: account: Konto - active: Aktiv empty: hint: Inga konton har prenumeranter ännu. no_lists_yet: Inga listor ännu - inactive: Inaktiv last_email: Senaste e-post lead: Konton som har aktiverat funktionen och har prenumeranter kommer att visas nedan. status: Status diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 96b924c0ad..6115fdbdf9 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -500,11 +500,9 @@ tr: email_subscriptions: accounts: account: Hesap - active: Etkin empty: hint: Henüz hiçbir hesabın abonesi yok. no_lists_yet: Henüz liste yok - inactive: Etkin değil last_email: Son e-posta lead: Bu özelliği etkinleştirmiş ve abonesi olan hesaplar aşağıda gösterilecektir. status: Durum diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 5476b43cf9..0363073bfb 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -490,11 +490,9 @@ vi: email_subscriptions: accounts: account: Tài khoản - active: Hoạt động empty: hint: Hiện chưa có tài khoản nào có người đăng ký đọc. no_lists_yet: Chưa có danh sách nào - inactive: Không hoạt động last_email: Email gần nhất lead: Các tài khoản đã kích hoạt tính năng này và có người đăng ký sẽ hiển thị bên dưới. status: Trạng thái diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 46bffcefb6..966dc99de2 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -490,11 +490,9 @@ zh-CN: email_subscriptions: accounts: account: 账号 - active: 已生效 empty: hint: 目前还没有账号拥有订阅者。 no_lists_yet: 尚无列表 - inactive: 未生效 last_email: 最新电子邮件 lead: 已启用此功能并拥有订阅者的账号会在下方显示。 status: 状态 diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index ebe16757b6..5f0b9fd7c8 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -492,11 +492,9 @@ zh-TW: email_subscriptions: accounts: account: 帳號 - active: 生效中 empty: hint: 尚無任何擁有訂閱者之帳號。 no_lists_yet: 尚無列表 - inactive: 已停用 last_email: 最新電子郵件地址 lead: 已啟用此功能並擁有訂閱者之帳號將於下方顯示。 status: 狀態 diff --git a/config/routes/admin.rb b/config/routes/admin.rb index a48defb3b9..ee2ec7c466 100644 --- a/config/routes/admin.rb +++ b/config/routes/admin.rb @@ -26,7 +26,7 @@ namespace :admin do resources :email_domain_blocks, only: [:index, :new, :create], concerns: :batch - resources :email_subscriptions, only: [:index] do + resources :email_subscriptions, only: [:index, :destroy] do collection do post :purge post :disable @@ -36,6 +36,13 @@ namespace :admin do namespace :email_subscriptions do resource :setup, only: [:show, :create] resource :additional_footer_text, only: [:show, :update] + + resources :accounts, only: :show do + member do + post :enable + post :disable + end + end end resources :action_logs, only: [:index] From a3c6a521178027cbcccd45a909453c69900ede62 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 8 Jun 2026 10:23:55 +0200 Subject: [PATCH 04/44] New Crowdin Translations (automated) (#39314) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/en-GB.json | 31 ++ app/javascript/mastodon/locales/es-MX.json | 4 +- app/javascript/mastodon/locales/he.json | 9 + app/javascript/mastodon/locales/hu.json | 9 + app/javascript/mastodon/locales/is.json | 8 + app/javascript/mastodon/locales/it.json | 8 + app/javascript/mastodon/locales/ko.json | 302 +++++++++++++++++++- app/javascript/mastodon/locales/nan-TW.json | 10 + app/javascript/mastodon/locales/nn.json | 8 + app/javascript/mastodon/locales/pl.json | 27 +- app/javascript/mastodon/locales/sv.json | 9 + config/locales/activerecord.ko.yml | 2 + config/locales/activerecord.pl.yml | 6 + config/locales/da.yml | 1 + config/locales/de.yml | 1 + config/locales/doorkeeper.pl.yml | 2 + config/locales/doorkeeper.pt-BR.yml | 16 +- config/locales/el.yml | 1 + config/locales/es-AR.yml | 1 + config/locales/es-MX.yml | 1 + config/locales/es.yml | 1 + config/locales/fi.yml | 1 + config/locales/fr-CA.yml | 1 + config/locales/fr.yml | 1 + config/locales/ga.yml | 1 + config/locales/gl.yml | 1 + config/locales/he.yml | 1 + config/locales/is.yml | 1 + config/locales/it.yml | 1 + config/locales/ko.yml | 180 ++++++++++++ config/locales/lv.yml | 7 +- config/locales/nan-TW.yml | 6 + config/locales/nl.yml | 1 + config/locales/nn.yml | 4 + config/locales/pl.yml | 3 +- config/locales/pt-BR.yml | 57 ++-- config/locales/simple_form.ar.yml | 1 - config/locales/simple_form.az.yml | 1 - config/locales/simple_form.be.yml | 1 - config/locales/simple_form.bg.yml | 1 - config/locales/simple_form.ca.yml | 1 - config/locales/simple_form.cs.yml | 1 - config/locales/simple_form.cy.yml | 1 - config/locales/simple_form.da.yml | 1 - config/locales/simple_form.de.yml | 1 - config/locales/simple_form.el.yml | 1 - config/locales/simple_form.en-GB.yml | 1 - config/locales/simple_form.eo.yml | 1 - config/locales/simple_form.es-AR.yml | 1 - config/locales/simple_form.es-MX.yml | 1 - config/locales/simple_form.es.yml | 1 - config/locales/simple_form.et.yml | 1 - config/locales/simple_form.eu.yml | 1 - config/locales/simple_form.fa.yml | 1 - config/locales/simple_form.fi.yml | 1 - config/locales/simple_form.fo.yml | 1 - config/locales/simple_form.fr-CA.yml | 1 - config/locales/simple_form.fr.yml | 1 - config/locales/simple_form.fy.yml | 1 - config/locales/simple_form.ga.yml | 1 - config/locales/simple_form.gd.yml | 1 - config/locales/simple_form.gl.yml | 1 - config/locales/simple_form.he.yml | 1 - config/locales/simple_form.hu.yml | 1 - config/locales/simple_form.ia.yml | 1 - config/locales/simple_form.io.yml | 1 - config/locales/simple_form.is.yml | 1 - config/locales/simple_form.it.yml | 1 - config/locales/simple_form.ja.yml | 1 - config/locales/simple_form.ko.yml | 25 +- config/locales/simple_form.lt.yml | 1 - config/locales/simple_form.lv.yml | 1 - config/locales/simple_form.nl.yml | 1 - config/locales/simple_form.nn.yml | 1 - config/locales/simple_form.pl.yml | 1 - config/locales/simple_form.pt-BR.yml | 1 - config/locales/simple_form.pt-PT.yml | 1 - config/locales/simple_form.ru.yml | 1 - config/locales/simple_form.si.yml | 1 - config/locales/simple_form.sk.yml | 1 - config/locales/simple_form.sl.yml | 1 - config/locales/simple_form.sq.yml | 1 - config/locales/simple_form.sv.yml | 1 - config/locales/simple_form.tr.yml | 1 - config/locales/simple_form.uk.yml | 1 - config/locales/simple_form.vi.yml | 1 - config/locales/simple_form.zh-CN.yml | 1 - config/locales/simple_form.zh-TW.yml | 1 - config/locales/sq.yml | 1 + config/locales/sv.yml | 3 + config/locales/vi.yml | 1 + config/locales/zh-CN.yml | 1 + config/locales/zh-TW.yml | 1 + 93 files changed, 710 insertions(+), 96 deletions(-) diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index e8cb9675f3..dd92c9c378 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -2,6 +2,7 @@ "about.blocks": "Moderated servers", "about.contact": "Contact:", "about.default_locale": "Default", + "about.disclaimer": "Mastodon is free, open-source software, and a trademark of Mastodon GmbH.", "about.domain_blocks.no_reason_available": "Reason not available", "about.domain_blocks.preamble": "Mastodon generally allows you to view content from and interact with users from any other server in the Fediverse. These are the exceptions that have been made on this particular server.", "about.domain_blocks.silenced.explanation": "You will generally not see profiles and content from this server, unless you explicitly look it up or opt into it by following.", @@ -85,6 +86,7 @@ "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Media", "account.mention": "Mention @{name}", + "account.menu.add_to_collection": "Add to collection…", "account.menu.add_to_list": "Add to list…", "account.menu.block": "Block account", "account.menu.block_domain": "Block {domain}", @@ -365,10 +367,13 @@ "collection.share_modal.share_via_system": "Share to…", "collection.share_modal.title": "Share collection", "collection.share_modal.title_new": "Share your new collection!", + "collection.share_template_other": "Check out this cool collection:", + "collection.share_template_own": "Check out my new collection:", "collections.account_count": "{count, plural, one {# account} other {# accounts}}", "collections.accounts.empty_description": "Add up to {count} accounts", "collections.accounts.empty_editor_title": "No one is in this collection yet", "collections.accounts.empty_title": "This collection is empty", + "collections.add_to_collection": "Add {name} to collections", "collections.block_collection_owner": "Block account", "collections.by_account": "by {account_handle}", "collections.collection_description": "Description", @@ -391,6 +396,7 @@ "collections.detail.loading": "Loading collection…", "collections.detail.revoke_inclusion": "Remove me", "collections.detail.sensitive_content": "Sensitive content", + "collections.detail.sensitive_note": "The description and accounts may not be suitable for all viewers.", "collections.detail.share": "Share this collection", "collections.detail.you_are_in_this_collection": "You're featured in this collection", "collections.edit_details": "Edit details", @@ -421,6 +427,11 @@ "collections.search_accounts_max_reached": "You have added the maximum number of accounts", "collections.sensitive": "Sensitive", "collections.share_short": "Share", + "collections.sort_alphabetical": "Alphabetical", + "collections.sort_by": "Sort by:", + "collections.sort_date_added": "Date added", + "collections.sort_last_active": "Last active", + "collections.sort_most_followers": "Most followers", "collections.suggestions.can_not_add": "Can’t be added", "collections.suggestions.can_not_add_desc": "These accounts may have opted out of discovery, or they might be on a server that doesn’t support collections.", "collections.suggestions.must_follow": "Must follow first", @@ -573,6 +584,12 @@ "copy_icon_button.copy_this_text": "Copy link to clipboard", "copypaste.copied": "Copied", "copypaste.copy_to_clipboard": "Copy to clipboard", + "custom_homepage.about": "About", + "custom_homepage.about_this_server": "About this server", + "custom_homepage.administered_by": "Administered by", + "custom_homepage.contact": "Contact:", + "custom_homepage.latest_activity": "Latest activity", + "custom_homepage.these_are_the_latest_posts": "These are the latest 40 posts from accounts on this server.", "directory.federated": "From known fediverse", "directory.local": "From {domain} only", "directory.new_arrivals": "New arrivals", @@ -629,7 +646,9 @@ "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.bookmarked_statuses": "You don't have any bookmarked posts yet. When you bookmark one, it will show up here.", + "empty_column.collections": "{acct} has not created any collections yet.", "empty_column.collections.featured_in": "You have not been added to any collections yet.", + "empty_column.collections.featured_in_undiscoverable": "In order for people to add you to collections, you need to allow featuring in discovery experiences from Preferences > Privacy and reach", "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", "empty_column.direct": "You don't have any private mentions yet. When you send or receive one, it will show up here.", "empty_column.disabled_feed": "This feed has been disabled by your server administrators.", @@ -801,6 +820,12 @@ "keyboard_shortcuts.heading": "Keyboard Shortcuts", "keyboard_shortcuts.home": "Open home timeline", "keyboard_shortcuts.hotkey": "Hotkey", + "keyboard_shortcuts.keys.alt": "Alt", + "keyboard_shortcuts.keys.backspace": "Backspace", + "keyboard_shortcuts.keys.enter": "Enter", + "keyboard_shortcuts.keys.esc": "Esc", + "keyboard_shortcuts.keys.page_down": "Page Down", + "keyboard_shortcuts.keys.page_up": "Page Up", "keyboard_shortcuts.legend": "to display this legend", "keyboard_shortcuts.load_more": "Focus \"Load more\" button", "keyboard_shortcuts.local": "to open local timeline", @@ -832,6 +857,7 @@ "lightbox.zoom_in": "Zoom to actual size", "lightbox.zoom_out": "Zoom to fit", "limited_account_hint.action": "Show profile anyway", + "limited_account_hint.title": "This profile or server has been hidden by the moderators of {domain}.", "link_preview.author": "By {name}", "link_preview.more_from_author": "More from {name}", "link_preview.shares": "{count, plural, one {{counter} post} other {{counter} posts}}", @@ -893,6 +919,7 @@ "navigation_bar.live_feed_local": "Live feed (local)", "navigation_bar.live_feed_public": "Live feed (public)", "navigation_bar.logout": "Logout", + "navigation_bar.main": "Main", "navigation_bar.moderation": "Moderation", "navigation_bar.more": "More", "navigation_bar.mutes": "Muted users", @@ -978,6 +1005,7 @@ "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Desktop notifications", + "notifications.column_settings.collections": "Collections:", "notifications.column_settings.favourite": "Favourites:", "notifications.column_settings.filter_bar.advanced": "Display all categories", "notifications.column_settings.filter_bar.category": "Quick filter bar", @@ -997,6 +1025,7 @@ "notifications.column_settings.update": "Edits:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", + "notifications.filter.collections": "Collections", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", @@ -1170,6 +1199,7 @@ "search_popout.user": "user", "search_results.accounts": "Profiles", "search_results.all": "All", + "search_results.collections": "Collections", "search_results.hashtags": "Hashtags", "search_results.no_results": "No results.", "search_results.no_search_yet": "Try searching for posts, profiles, or hashtags.", @@ -1290,6 +1320,7 @@ "tabs_bar.menu": "Menu", "tabs_bar.notifications": "Notifications", "tabs_bar.publish": "New Post", + "tabs_bar.quick_links": "Quick links", "tabs_bar.search": "Search", "tag.remove": "Remove", "terms_of_service.effective_as_of": "Effective as of {date}", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index eacd2dce51..d41fb39106 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -646,7 +646,7 @@ "empty_column.account_unavailable": "Perfil no disponible", "empty_column.blocks": "Aún no has bloqueado a ningún usuario.", "empty_column.bookmarked_statuses": "Aún no tienes ninguna publicación guardada como marcador. Cuando guardes una, se mostrará aquí.", - "empty_column.collections": "{acct} aún no ha creado ninguna colección.", + "empty_column.collections": "{acct} todavía no ha creado ninguna colección.", "empty_column.collections.featured_in": "Aún no te han añadido a ninguna colección.", "empty_column.collections.featured_in_undiscoverable": "Para que los usuarios puedan añadirte a sus colecciones, debes habilitar la opción de aparecer en las experiencias de descubrimiento desde Preferencias > Privacidad y alcance", "empty_column.community": "La cronología local está vacía. ¡Escribe algo públicamente para ponerla en marcha!", @@ -821,7 +821,7 @@ "keyboard_shortcuts.home": "Abrir cronología principal", "keyboard_shortcuts.hotkey": "Tecla de acceso rápido", "keyboard_shortcuts.keys.alt": "Alt", - "keyboard_shortcuts.keys.backspace": "Retroceso", + "keyboard_shortcuts.keys.backspace": "Espacio", "keyboard_shortcuts.keys.enter": "Enter", "keyboard_shortcuts.keys.esc": "Escape", "keyboard_shortcuts.keys.page_down": "Re Pág", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 39991d3bc7..ef7ac819fe 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -2,6 +2,7 @@ "about.blocks": "שרתים תחת פיקוח תוכן", "about.contact": "יצירת קשר:", "about.default_locale": "ברירת המחדל", + "about.disclaimer": "מסטודון היא תוכנת קוד פתוח חינמית וסימן מסחרי של Mastodon GmbH.", "about.domain_blocks.no_reason_available": "הסיבה אינה זמינה", "about.domain_blocks.preamble": "ככלל מסטודון מאפשרת לך לצפות בתוכן ולתקשר עם משתמשים מכל שרת בפדיברס. אלו הם היוצאים מן הכלל שהוגדרו עבור השרת המסוים הזה.", "about.domain_blocks.silenced.explanation": "ככלל פרופילים ותוכן משרת זה לא יוצגו, אלא אם חיפשת אותם באופן מפורש או בחרת להשתתף בו על ידי מעקב.", @@ -645,6 +646,7 @@ "empty_column.account_unavailable": "פרופיל לא זמין", "empty_column.blocks": "עדיין לא חסמתם משתמשים אחרים.", "empty_column.bookmarked_statuses": "אין עדיין הודעות שחיבבת. כשתחבב את הראשונה, היא תופיע כאן.", + "empty_column.collections": "{acct} עוד לא יצרו אוספים.", "empty_column.collections.featured_in": "עוד לא הוסיפו אותך לאף אוסף.", "empty_column.collections.featured_in_undiscoverable": "כדי שאחרים יוכלו להוסיפך לאוספים, עליך לאפשר להופיע ב\"תגליות\" תחת העדפות > פרטיות ומידת חשיפה", "empty_column.community": "פיד השרת המקומי ריק. יש לפרסם משהו כדי שדברים יתרחילו להתגלגל!", @@ -818,6 +820,12 @@ "keyboard_shortcuts.heading": "מקשי קיצור במקלדת", "keyboard_shortcuts.home": "פתיחת ציר זמן אישי", "keyboard_shortcuts.hotkey": "מקש קיצור", + "keyboard_shortcuts.keys.alt": "Alt", + "keyboard_shortcuts.keys.backspace": "מחיקה אחורה", + "keyboard_shortcuts.keys.enter": "Enter", + "keyboard_shortcuts.keys.esc": "Esc", + "keyboard_shortcuts.keys.page_down": "Page Down", + "keyboard_shortcuts.keys.page_up": "דיפדוף מעלה", "keyboard_shortcuts.legend": "הצגת מקרא", "keyboard_shortcuts.load_more": "התמקדות בכפתור \"טען עוד\"", "keyboard_shortcuts.local": "פתיחת ציר זמן קהילתי", @@ -1191,6 +1199,7 @@ "search_popout.user": "משתמש(ת)", "search_results.accounts": "פרופילים", "search_results.all": "כל התוצאות", + "search_results.collections": "אוספים", "search_results.hashtags": "תגיות", "search_results.no_results": "אין תוצאות.", "search_results.no_search_yet": "נסו לחפש אחר הודעות, פרופילי משתמשים או תגיות.", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index dfa722d2d7..5bed9715ec 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -2,6 +2,7 @@ "about.blocks": "Moderált kiszolgálók", "about.contact": "Kapcsolat:", "about.default_locale": "Alapértelmezett", + "about.disclaimer": "A Mastodon szabad és nyílt forráskódú szoftver, a Mastodon GmbH védjegye.", "about.domain_blocks.no_reason_available": "Nem áll rendelkezésre indoklás", "about.domain_blocks.preamble": "A Mastodon általában mindenféle tartalomcserét és interakciót lehetővé tesz bármelyik másik kiszolgálóval a födiverzumban. Ezek azok a kivételek, amelyek a mi kiszolgálónkon érvényben vannak.", "about.domain_blocks.silenced.explanation": "Általában nem fogsz profilokat és tartalmat látni erről a kiszolgálóról, hacsak közvetlenül fel nem keresed vagy követed.", @@ -645,6 +646,7 @@ "empty_column.account_unavailable": "A profil nem érhető el", "empty_column.blocks": "Még senkit sem tiltottál le.", "empty_column.bookmarked_statuses": "Még nincs egyetlen könyvjelzőzött bejegyzésed sem. Ha könyvjelzőzöl egyet, itt fog megjelenni.", + "empty_column.collections": "{acct} még nem hozott létre gyűjteményt.", "empty_column.collections.featured_in": "Még nem adtak hozzá egyetlen gyűjteményhez sem.", "empty_column.collections.featured_in_undiscoverable": "Hogy mások hozzáadhassanak gyűjteményekhez, engedélyezned kell a kiemelést a felfedezési élményekben a Beállítások > Adatvédelem és elérés alatt", "empty_column.community": "A helyi idővonal üres. Tégy közzé valamit nyilvánosan, hogy elindítsd az eseményeket!", @@ -818,6 +820,12 @@ "keyboard_shortcuts.heading": "Gyorsbillentyűk", "keyboard_shortcuts.home": "Saját idővonal megnyitása", "keyboard_shortcuts.hotkey": "Gyorsbillentyű", + "keyboard_shortcuts.keys.alt": "Alt", + "keyboard_shortcuts.keys.backspace": "Backspace", + "keyboard_shortcuts.keys.enter": "Enter", + "keyboard_shortcuts.keys.esc": "Esc", + "keyboard_shortcuts.keys.page_down": "Page Down", + "keyboard_shortcuts.keys.page_up": "Page Up", "keyboard_shortcuts.legend": "Jelmagyarázat megjelenítése", "keyboard_shortcuts.load_more": "Fókuszálás a „Több betöltése” gombra", "keyboard_shortcuts.local": "Helyi idővonal megnyitása", @@ -1191,6 +1199,7 @@ "search_popout.user": "felhasználó", "search_results.accounts": "Profilok", "search_results.all": "Összes", + "search_results.collections": "Gyűjtemények", "search_results.hashtags": "Hashtagek", "search_results.no_results": "Nincs találat.", "search_results.no_search_yet": "Próbálj meg bejegyzések, profilok vagy címkék után keresni.", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index bce1167c11..47fc04c035 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -646,6 +646,7 @@ "empty_column.account_unavailable": "Notandasnið ekki tiltækt", "empty_column.blocks": "Þú hefur ekki ennþá útilokað neina notendur.", "empty_column.bookmarked_statuses": "Þú ert ekki ennþá með neinar bókamerktar færslur. Þegar þú bókamerkir færslu, mun það birtast hér.", + "empty_column.collections": "{acct} hefur enn ekki útbúið nein söfn.", "empty_column.collections.featured_in": "Þér hefur enn ekki verið bætt við nein söfn.", "empty_column.collections.featured_in_undiscoverable": "Til þess að fólk geti bætt þér í söfn þá þarftu að leyfa að þú komir upp í leitum, en það er gert í Kjörstillingar > Gagnaleynd og útbreiðsla", "empty_column.community": "Staðværa tímalínan er tóm. Skrifaðu eitthvað opinberlega til að láta boltann fara að rúlla!", @@ -819,6 +820,12 @@ "keyboard_shortcuts.heading": "Flýtileiðir á lyklaborði", "keyboard_shortcuts.home": "Opna heimatímalínu", "keyboard_shortcuts.hotkey": "Flýtilykill", + "keyboard_shortcuts.keys.alt": "Alt", + "keyboard_shortcuts.keys.backspace": "Baklykill", + "keyboard_shortcuts.keys.enter": "Enter", + "keyboard_shortcuts.keys.esc": "Esc", + "keyboard_shortcuts.keys.page_down": "Síða niður", + "keyboard_shortcuts.keys.page_up": "Síða upp", "keyboard_shortcuts.legend": "Birta þessa skýringu", "keyboard_shortcuts.load_more": "Gera \"Hlaða inn meiru\"-hnappinn virkan", "keyboard_shortcuts.local": "Opna staðværa tímalínu", @@ -1192,6 +1199,7 @@ "search_popout.user": "notandi", "search_results.accounts": "Notendasnið", "search_results.all": "Allt", + "search_results.collections": "Söfn", "search_results.hashtags": "Myllumerki", "search_results.no_results": "Engar niðurstöður.", "search_results.no_search_yet": "Prófaðu að leita að færslum, notendum eða myllumerkjum.", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 3c7dadd248..7fd6b8a425 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -646,6 +646,7 @@ "empty_column.account_unavailable": "Profilo non disponibile", "empty_column.blocks": "Non hai ancora bloccato alcun utente.", "empty_column.bookmarked_statuses": "Non hai ancora salvato nei segnalibri alcun post. Quando lo farai, apparirà qui.", + "empty_column.collections": "{acct} non ha ancora creato alcuna collezione.", "empty_column.collections.featured_in": "Non sei ancora stato/a aggiunto/a ad alcuna collezione.", "empty_column.collections.featured_in_undiscoverable": "Affinché le persone possano aggiungerti alle collezioni, è necessario consentire che il profilo sia visibile nelle esperienze di scoperta tramite Preferenze > Privacy e visibilità", "empty_column.community": "La cronologia locale è vuota. Scrivi qualcosa pubblicamente per dare inizio alla festa!", @@ -819,6 +820,12 @@ "keyboard_shortcuts.heading": "Scorciatoie da tastiera", "keyboard_shortcuts.home": "Apre la cronologia domestica", "keyboard_shortcuts.hotkey": "Tasto di scelta rapida", + "keyboard_shortcuts.keys.alt": "Alt", + "keyboard_shortcuts.keys.backspace": "Spazio", + "keyboard_shortcuts.keys.enter": "Invio", + "keyboard_shortcuts.keys.esc": "Esc", + "keyboard_shortcuts.keys.page_down": "Pagina giù", + "keyboard_shortcuts.keys.page_up": "Pagina su", "keyboard_shortcuts.legend": "Mostra questa legenda", "keyboard_shortcuts.load_more": "Evidenzia il pulsante \"Carica altro\"", "keyboard_shortcuts.local": "Apre la cronologia locale", @@ -1192,6 +1199,7 @@ "search_popout.user": "utente", "search_results.accounts": "Profili", "search_results.all": "Tutto", + "search_results.collections": "Collezioni", "search_results.hashtags": "Hashtag", "search_results.no_results": "Nessun risultato.", "search_results.no_search_yet": "Prova a cercare post, profili o hashtag.", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 4b7be7ebaf..b6fbcb711c 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -2,6 +2,7 @@ "about.blocks": "제한된 서버들", "about.contact": "연락처:", "about.default_locale": "기본", + "about.disclaimer": "Mastodon은 자유 오픈소스 소프트웨어이며, Mastodon GmbH의 상표입니다.", "about.domain_blocks.no_reason_available": "사유를 밝히지 않음", "about.domain_blocks.preamble": "마스토돈은 일반적으로 연합우주에 있는 어떤 서버의 사용자와도 게시물을 보고 응답을 할 수 있도록 허용합니다. 다음 항목들은 특정한 서버에 대해 만들어 진 예외사항입니다.", "about.domain_blocks.silenced.explanation": "명시적으로 찾아보거나 팔로우를 하기 전까지는, 이 서버에 있는 프로필이나 게시물 등을 일반적으로 볼 수 없습니다.", @@ -41,6 +42,8 @@ "account.familiar_followers_two": "{name1}, {name2} 님이 팔로우함", "account.featured": "추천", "account.featured.accounts": "프로필", + "account.featured.collections": "컬렉션", + "account.featured.new_collection": "새 컬렉션", "account.field_overflow": "내용 전체 보기", "account.filters.all": "모든 활동", "account.filters.boosts_toggle": "부스트 보기", @@ -66,17 +69,31 @@ "account.go_to_profile": "프로필로 이동", "account.hide_reblogs": "@{name}의 부스트를 숨기기", "account.in_memoriam": "고인의 계정입니다.", + "account.join_modal.day": "일", + "account.join_modal.me": "{server}에 가입한 날", + "account.join_modal.me_anniversary": "연합기념일을 축하합니다! {server}에 가입한 날은", + "account.join_modal.me_today": "내가 {server}에 처음 온 날입니다!", + "account.join_modal.other": "{name}이 {server}에 가입한 날", + "account.join_modal.other_today": "{name} 님이 {server}에 처음 온 날입니다!", + "account.join_modal.share.celebrate": "기념 게시물 공유", + "account.join_modal.share.intro": "소개 게시물 공유", + "account.join_modal.share.welcome": "환영 게시물 공유", + "account.join_modal.years": "{number, plural, other {년}}", "account.joined_short": "가입", "account.languages": "구독한 언어 변경", + "account.last_active": "최근 활동", "account.link_verified_on": "{date}에 이 링크의 소유권이 확인 됨", "account.locked_info": "이 계정의 프라이버시 설정은 잠금으로 설정되어 있습니다. 계정 소유자가 수동으로 팔로워를 승인합니다.", "account.media": "미디어", "account.mention": "@{name} 님에게 멘션", + "account.menu.add_to_collection": "컬렉션에 추가…", "account.menu.add_to_list": "리스트에 추가…", "account.menu.block": "계정 차단", "account.menu.block_domain": "{domain} 차단", "account.menu.copied": "계정 링크를 복사했습니다", "account.menu.copy": "링크 복사하기", + "account.menu.direct": "개인 멘션", + "account.menu.hide_reblogs": "타임라인에서 부스트 숨기기", "account.menu.mention": "멘션", "account.menu.mute": "계정 뮤트", "account.menu.note.description": "나에게만 보입니다", @@ -84,17 +101,35 @@ "account.menu.remove_follower": "팔로워 제거", "account.menu.report": "계정 신고", "account.menu.share": "공유하기…", + "account.menu.show_reblogs": "타임라인에 부스트 보여주기", + "account.menu.unblock": "차단 해제", + "account.menu.unblock_domain": "{domain} 차단 해제", + "account.menu.unmute": "뮤트 해제", "account.moved_to": "{name} 님은 자신의 새 계정이 다음과 같다고 표시했습니다:", "account.mute": "@{name} 뮤트", "account.mute_notifications_short": "알림 뮤트", "account.mute_short": "뮤트", "account.muted": "뮤트됨", "account.mutual": "서로 팔로우", + "account.name.copy": "핸들 복사", + "account.name.help.domain": "{domain}은 사용자의 프로필과 게시물을 호스트하는 서버입니다.", + "account.name.help.domain_self": "{domain}은 내 프로필과 게시물을 호스트하는 서버입니다.", + "account.name.help.footer": "다른 이메일 제공자를 사용하는 사람에게 이메일을 보낼 수 있듯이, 다른 마스토돈 서버에 있는 사람들과 소통할 수 있으며 다른 페디버스 앱의 누구와도 소통할 수 있습니다.", + "account.name.help.header": "핸들은 이메일과 비슷합니다", + "account.name.help.username": "{username}은 해당 서버에 있는 이 계정의 사용자명입니다. 다른 서버에 있는 누군가는 같은 사용자명을 사용할 수도 있습니다.", + "account.name.help.username_self": "{username}은 내 사용자명입니다. 다른 서버에 있는 누군가는 같은 사용자명을 사용할 수도 있습니다.", + "account.name_info": "이것은 무엇을 의미하나요?", "account.no_bio": "제공된 설명이 없습니다.", + "account.node_modal.callout": "개인 메모는 나에게만 보입니다.", + "account.node_modal.edit_title": "개인 메모 편집", + "account.node_modal.error_unknown": "메모를 저장할 수 없습니다", + "account.node_modal.field_label": "개인 노트", "account.node_modal.save": "저장", "account.node_modal.title": "개인 메모 추가", "account.note.edit_button": "편집", + "account.note.title": "개인 메모 (나에게만 보입니다)", "account.open_original_page": "원본 페이지 열기", + "account.pending": "대기 중", "account.posts": "게시물", "account.remove_from_followers": "팔로워에서 {name} 제거", "account.report": "@{name} 신고", @@ -102,6 +137,8 @@ "account.share": "@{name}의 프로필 공유", "account.show_reblogs": "@{name}의 부스트 보기", "account.statuses_counter": "{count, plural, other {게시물 {counter}개}}", + "account.timeline.pinned": "고정됨", + "account.timeline.pinned.view_all": "고정된 게시물 모두 보기", "account.unblock": "차단 해제", "account.unblock_domain": "도메인 {domain} 차단 해제", "account.unblock_domain_short": "차단 해제", @@ -111,11 +148,114 @@ "account.unmute": "@{name} 뮤트 해제", "account.unmute_notifications_short": "알림 뮤트 해제", "account.unmute_short": "뮤트 해제", + "account_edit.advanced_settings.bot_hint": "이 계정이 대부분 자동으로 작업을 수행하고 잘 확인하지 않는다는 것을 알립니다", + "account_edit.advanced_settings.bot_label": "자동화된 계정", + "account_edit.advanced_settings.title": "고급 설정", + "account_edit.bio.add_label": "자기소개 추가", + "account_edit.bio.edit_label": "자기소개 편집", + "account_edit.bio.placeholder": "다른 사람들이 나를 알아볼 수 있도록 짧은 소개를 추가하세요.", "account_edit.bio.title": "자기소개", "account_edit.bio_modal.add_title": "자기소개 추가", "account_edit.bio_modal.edit_title": "자기소개 편집", "account_edit.column_button": "완료", "account_edit.column_title": "프로필 편집", + "account_edit.custom_fields.add_label": "필드 추가", + "account_edit.custom_fields.edit_label": "필드 편집", + "account_edit.custom_fields.placeholder": "내 호칭, 외부 링크, 혹은 공유하기를 원하는 무엇이든지 추가하세요.", + "account_edit.custom_fields.reorder_button": "필드 순서 변경", + "account_edit.custom_fields.tip_content": "내가 소유한 웹사이트 링크를 추가하여 마스토돈 계정의 신뢰도를 손쉽게 높일 수 있습니다.", + "account_edit.custom_fields.tip_title": "팁: 인증된 링크 추가", + "account_edit.custom_fields.title": "사용자 정의 필드", + "account_edit.custom_fields.verified_hint": "어떻게 인증된 링크를 추가하나요?", + "account_edit.display_name.add_label": "표시되는 이름 추가", + "account_edit.display_name.edit_label": "표시되는 이름 수정", + "account_edit.display_name.placeholder": "표시되는 이름은 내 프로필과 타임라인에서 나타날 내 이름입니다.", + "account_edit.display_name.title": "표시되는 이름", + "account_edit.featured_hashtags.edit_label": "해시태그 추가", + "account_edit.featured_hashtags.placeholder": "내가 좋아하는 주제를 다른 사람들이 쉽게 찾아보고 접근할 수 있도록 해보세요.", + "account_edit.featured_hashtags.title": "추천 해시태그", + "account_edit.field_actions.delete": "필드 삭제", + "account_edit.field_actions.edit": "필드 편집", + "account_edit.field_delete_modal.confirm": "정말로 이 커스텀 필드를 삭제할까요? 이 작업은 되돌릴 수 없습니다.", + "account_edit.field_delete_modal.delete_button": "삭제", + "account_edit.field_delete_modal.title": "사용자 지정 필드를 삭제할까요?", + "account_edit.field_edit_modal.add_title": "사용자 지정 필드 추가", + "account_edit.field_edit_modal.discard_confirm": "저장 안함", + "account_edit.field_edit_modal.discard_message": "저장되지 않은 변경사항이 있습니다. 정말로 폐기하시겠습니까?", + "account_edit.field_edit_modal.edit_title": "사용자 지정 필드 편집", + "account_edit.field_edit_modal.length_warning": "추천하는 글자수 제한을 초과했습니다. 모바일 사용자는 내 프로필 전체를 볼 수 없을 수도 있습니다.", + "account_edit.field_edit_modal.link_emoji_warning": "커스텀 에모지와 url을 섞어 사용하는 것을 권장하지 않습니다. 둘 다 포함된 커스텀 필드는 사용자 혼동을 막기 위해 링크 대신 텍스트로만 보여질 것입니다.", + "account_edit.field_edit_modal.name_hint": "예시: \"개인 웹사이트\"", + "account_edit.field_edit_modal.name_label": "라벨", + "account_edit.field_edit_modal.url_warning": "링크를 추가하려면 {protocol}을 앞에 추가하세요.", + "account_edit.field_edit_modal.value_hint": "예시: \"https://example.me\"", + "account_edit.field_edit_modal.value_label": "내용", + "account_edit.field_reorder_modal.drag_cancel": "드래그가 취소되었습니다. 필드 {item}은 이동되지 않았습니다.", + "account_edit.field_reorder_modal.drag_end": "\"{item}\" 필드가 드랍되었습니다.", + "account_edit.field_reorder_modal.drag_instructions": "커스텀 필드를 재정렬하려면 스페이스나 엔터를 누르세요. 드래그 하는 동안 방향키를 이용해 위아래로 이동할 수 있습니다. 스페이스나 엔터를 다시 눌러 새 위치에 놓거나 ESC를 이용해 취소할 수 있습니다.", + "account_edit.field_reorder_modal.drag_move": "\"{item}\" 필드가 이동되었습니다.", + "account_edit.field_reorder_modal.drag_over": "필드 \"{item}\"가 \"{over}\" 위로 옮겨졌습니다.", + "account_edit.field_reorder_modal.drag_start": "\"{item}\" 필드를 집었습니다.", + "account_edit.field_reorder_modal.handle_label": "\"{item}\" 필드 드래그", + "account_edit.field_reorder_modal.title": "필드 순서 바꾸기", + "account_edit.image_alt_modal.add_title": "대체 텍스트 추가", + "account_edit.image_alt_modal.details_content": "이렇게 하세요: 하지 마세요: 예시: ", + "account_edit.image_alt_modal.details_title": "팁: 프로필 사진을 위한 대체텍스트", + "account_edit.image_alt_modal.edit_title": "대체 텍스트 편집", + "account_edit.image_alt_modal.text_hint": "대체 텍스트는 스크린 리더를 쓰는 사용자가 내 컨텐츠를 이해하는데 도움이 됩니다.", + "account_edit.image_alt_modal.text_label": "대체 텍스트", + "account_edit.image_delete_modal.confirm": "이 이미지를 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.", + "account_edit.image_delete_modal.delete_button": "삭제", + "account_edit.image_delete_modal.title": "이미지를 삭제할까요?", + "account_edit.image_edit.add_button": "이미지 추가", + "account_edit.image_edit.alt_add_button": "대체 텍스트 추가", + "account_edit.image_edit.alt_edit_button": "대체 텍스트 수정", + "account_edit.image_edit.remove_button": "이미지 삭제", + "account_edit.image_edit.replace_button": "이미지 변경", + "account_edit.item_list.delete": "{name} 삭제", + "account_edit.item_list.edit": "{name} 편집", + "account_edit.name_modal.add_title": "표시되는 이름 추가", + "account_edit.name_modal.edit_title": "표시되는 이름 수정", + "account_edit.profile_tab.button_label": "사용자 지정", + "account_edit.profile_tab.hint.description": "이 설정은 공식 앱을 사용하는 {server} 사용자가 보는 내용을 설정하지만 다른 서버나 서드파티 앱 사용자에게는 다르게 나타날 수 있습니다.", + "account_edit.profile_tab.hint.title": "환경에 따라 다르게 보일 수 있습니다", + "account_edit.profile_tab.show_featured.description": "'추천'은 다른 계정을 소개할 수 있는 선택적인 탭입니다.", + "account_edit.profile_tab.show_featured.title": "'추천' 탭 표시", + "account_edit.profile_tab.show_media.description": "'미디어' 탭은 이미지나 비디오가 들어간 게시물을 보여주는 선택적인 탭입니다.", + "account_edit.profile_tab.show_media.title": "'미디어' 탭 표시", + "account_edit.profile_tab.show_media_replies.description": "활성화 하면 미디어 탭은 내 게시물과 다른 사람에게 한 답글을 모두 보여줍니다.", + "account_edit.profile_tab.show_media_replies.title": "'미디어' 탭에 답글 포함", + "account_edit.profile_tab.show_relations.title": "팔로워와 팔로잉 표시", + "account_edit.profile_tab.subtitle": "내 프로필이 어떻게 보여질지를 원하는대로 꾸며보세요.", + "account_edit.profile_tab.title": "프로필 표시 설정", + "account_edit.save": "저장", + "account_edit.upload_modal.back": "뒤로가기", + "account_edit.upload_modal.done": "완료", + "account_edit.upload_modal.next": "다음", + "account_edit.upload_modal.step_crop.zoom": "줌", + "account_edit.upload_modal.step_upload.button": "파일 탐색", + "account_edit.upload_modal.step_upload.dragging": "드롭하여 업로드", + "account_edit.upload_modal.step_upload.header": "이미지 선택", + "account_edit.upload_modal.step_upload.hint": "WEBP, PNG, GIF 또는 JPG 형식으로 {limit}MB까지.{br}이미지는 {width}*{height}픽셀로 크기가 변경됩니다.", + "account_edit.upload_modal.title_add.avatar": "프로필 사진 추가", + "account_edit.upload_modal.title_add.header": "커버 사진 추가", + "account_edit.upload_modal.title_replace.avatar": "프로필 사진 바꾸기", + "account_edit.upload_modal.title_replace.header": "커버 사진 바꾸기", + "account_edit.verified_modal.details": "개인 웹사이트를 인증하여 마스토돈 프로필의 신뢰도를 높여보세요. 이렇게 동작합니다:", + "account_edit.verified_modal.invisible_link.details": "링크를 헤더에 추가하세요. 중요한 것은 사용자 컨텐츠를 통해 도용하는 것을 막는 rel=\"me\" 부분입니다. {tag} 대신 링크 태그를 헤더에 넣을 수도 있습니다. 하지만 HTML 코드는 자바스크립트 실행 없이 접근이 가능해야 합니다.", + "account_edit.verified_modal.invisible_link.summary": "링크를 안 보이게 할 수 있나요?", + "account_edit.verified_modal.step1.header": "아래 HTML 코드를 복사하여 웹사이트 헤더에 붙여넣으세요", + "account_edit.verified_modal.step2.details": "이미 커스텀 필드에 웹사이트를 추가했다면 다시 인증을 실행하기 위해 삭제하고 다시 추가해야 합니다.", + "account_edit.verified_modal.step2.header": "웹사이트를 커스텀 필드로 추가하세요", + "account_edit.verified_modal.title": "인증된 링크 추가하는 방법", + "account_edit_tags.add_tag": "#{tagName} 추가", + "account_edit_tags.column_title": "태그 편집", + "account_edit_tags.max_tags_reached": "추천 해시태그 최대 개수를 초과합니다.", + "account_edit_tags.search_placeholder": "해시태그를 입력하세요…", + "account_edit_tags.suggestions": "제안:", + "account_edit_tags.tag_status_count": "{count, plural, other {# 게시물}}", + "account_list.hidden_notice": "나에게만 보입니다. 남들에게 이 목록을 보여주려면 {page} > {modal} > {field}에서 설정하세요.", + "account_list.total": "{total, plural, other {#}} 계정", "admin.dashboard.daily_retention": "가입 후 일별 사용자 유지율", "admin.dashboard.monthly_retention": "가입 후 월별 사용자 유지율", "admin.dashboard.retention.average": "평균", @@ -169,12 +309,15 @@ "annual_report.summary.archetype.title_self": "당신의 특성", "annual_report.summary.close": "닫기", "annual_report.summary.copy_link": "링크 복사하기", + "annual_report.summary.followers.new_followers": "{count, plural, other {새 팔로워}}", "annual_report.summary.highlighted_post.boost_count": "이 게시물은 {count, plural,other {# 번}} 부스트되었습니다.", "annual_report.summary.highlighted_post.favourite_count": "이 게시물은 {count, plural,other {# 번}} 마음에 들었습니다.", "annual_report.summary.highlighted_post.reply_count": "이 게시물은 {count, plural, other {# 개}}의 답글을 받았습니다.", "annual_report.summary.highlighted_post.title": "가장 인기있는 게시물", "annual_report.summary.most_used_app.most_used_app": "가장 많이 사용한 앱", "annual_report.summary.most_used_hashtag.most_used_hashtag": "가장 많이 사용한 해시태그", + "annual_report.summary.most_used_hashtag.used_count": "{count, plural, other {#개의 게시물}}에서 이 해시태그를 사용했습니다.", + "annual_report.summary.most_used_hashtag.used_count_public": "{name} 님은 이 해시태그를 {count, plural,other {# 개의 게시물}}에서 사용했습니다.", "annual_report.summary.new_posts.new_posts": "새 게시물", "annual_report.summary.percentile.text": "{domain} 사용자의 상위입니다.", "annual_report.summary.percentile.we_wont_tell_bernie": "종부세는 안 걷을게요", @@ -183,11 +326,15 @@ "annual_report.summary.share_on_mastodon": "마스토돈에 공유하기", "attachments_list.unprocessed": "(처리 안 됨)", "audio.hide": "소리 숨기기", + "block_modal.no_collections": "서로를 컬렉션에 추가할 수 없습니다. 이미 존재하는 경우 해당 컬렉션에서 삭제됩니다.", "block_modal.remote_users_caveat": "우리는 {domain} 서버가 당신의 결정을 존중해 주길 부탁할 것입니다. 하지만 몇몇 서버는 차단을 다르게 취급할 수 있기 때문에 규정이 준수되는 것을 보장할 수는 없습니다. 공개 게시물은 로그인 하지 않은 사용자들에게 여전히 보여질 수 있습니다.", "block_modal.show_less": "간략히 보기", "block_modal.show_more": "더 보기", + "block_modal.they_cant_mention": "서로 멘션하거나, 팔로우하거나, 인용할 수 없습니다.", + "block_modal.they_cant_see_posts": "상대방이 내 컨텐츠를 볼 수 없게 되며 나도 상대방의 컨텐츠를 볼 수 없게 됩니다.", "block_modal.they_will_know": "자신이 차단 당했다는 사실을 확인할 수 있습니다.", "block_modal.title": "사용자를 차단할까요?", + "block_modal.you_wont_see_mentions": "해당 사용자를 멘션한 다른 사용자의 게시물을 보지 않게 됩니다.", "boost_modal.combo": "다음엔 {combo}를 눌러서 이 과정을 건너뛸 수 있습니다", "boost_modal.reblog": "게시물을 부스트할까요?", "boost_modal.undo_reblog": "게시물을 부스트 취소할까요?", @@ -203,21 +350,98 @@ "bundle_modal_error.close": "닫기", "bundle_modal_error.message": "화면을 불러오는 동안 오류가 발생했습니다.", "bundle_modal_error.retry": "다시 시도", + "callout.dismiss": "무시", "carousel.current": "페이지 {current, number} / {max, number}", "carousel.slide": "{max, number} 중 {current, number} 페이지", + "character_counter.recommended": "{currentLength}/{maxLength} 권장 글자", + "character_counter.required": "{currentLength}/{maxLength} 글자", "closed_registrations.other_server_instructions": "마스토돈은 분산화 되어 있기 때문에, 다른 서버에서 계정을 만들더라도 이 서버와 상호작용 할 수 있습니다.", "closed_registrations_modal.description": "{domain}은 현재 가입이 불가능합니다. 하지만 마스토돈을 이용하기 위해 꼭 {domain}을 사용할 필요는 없다는 사실을 인지해 두세요.", "closed_registrations_modal.find_another_server": "다른 서버 찾기", "closed_registrations_modal.preamble": "마스토돈은 분산화 되어 있습니다, 그렇기 때문에 어디에서 계정을 생성하든, 이 서버에 있는 누구와도 팔로우와 상호작용을 할 수 있습니다. 심지어는 스스로 서버를 만드는 것도 가능합니다!", "closed_registrations_modal.title": "마스토돈에서 가입", + "collection.share_modal.share_link_label": "링크 공유", + "collection.share_modal.share_via_post": "마스토돈에 게시", + "collection.share_modal.share_via_system": "공유…", + "collection.share_modal.title": "컬렉션 공유", + "collection.share_modal.title_new": "새 컬렉션을 공유하세요!", + "collection.share_template_other": "이 엄청난 컬렉션을 확인해보세요:", + "collection.share_template_own": "내 새로운 컬렉션을 확인해보세요:", + "collections.account_count": "{count, plural, other {# 계정}}", + "collections.accounts.empty_description": "최대 {count} 개의 계정 추가", + "collections.accounts.empty_editor_title": "이 컬렉션엔 아직 아무도 없습니다", + "collections.accounts.empty_title": "이 컬렉션은 비어 있습니다", + "collections.add_to_collection": "컬렉션에 {name} 님 추가", + "collections.block_collection_owner": "계정 차단", + "collections.by_account": "{account_handle} 작성", "collections.collection_description": "설명", - "collections.collection_topic": "화제", + "collections.collection_language": "언어", + "collections.collection_language_none": "없음", + "collections.collection_name": "이름", + "collections.collection_topic": "주제", + "collections.confirm_account_removal": "정말로 이 계정을 컬렉션에서 제거할까요?", + "collections.content_warning": "열람 주의", + "collections.continue": "계속", + "collections.copy_link": "링크 복사", + "collections.copy_link_confirmation": "컬렉션 링크를 복사했습니다", + "collections.create.accounts_title": "누구를 이 컬렉션에서 추천할까요?", + "collections.create.basic_details_title": "기본 정보", + "collections.create.steps": "{step}/{total} 단계", "collections.create_collection": "컬렉션 만들기", "collections.delete_collection": "컬렉션 지우기", + "collections.description_length_hint": "100 글자 제한", + "collections.detail.author_added_you_on_date": "{author} 님이 {date}에 나를 추가했습니다", + "collections.detail.loading": "컬렉션 로딩…", + "collections.detail.revoke_inclusion": "나를 제거하기", + "collections.detail.sensitive_content": "민감한 컨텐츠", + "collections.detail.sensitive_note": "정보와 계정들이 모든 사용자가 보기에 적합하지 않을 수 있습니다.", + "collections.detail.share": "이 컬렉션 공유", + "collections.detail.you_are_in_this_collection": "이 컬렉션에 추천되었습니다", + "collections.edit_details": "세부 정보 편집", + "collections.error_loading_collections": "컬렉션을 로딩하는 도중 에러가 발생하였습니다.", + "collections.hidden_accounts_description": "{count, plural, other {사용자를}} 뮤트하거나 차단했습니다", + "collections.hidden_accounts_link": "{count, plural, other {#개의 숨겨진 계정}}", + "collections.hints.accounts_counter": "계정 {count}/{max}개", + "collections.last_updated_at": "마지막 업데이트: {date}", + "collections.list.collections_with_count": "{count, plural, other {컬렉션 #개}}", + "collections.list.created_by_author": "{name} 님이 생성함", + "collections.list.created_by_you": "내가 생성함", + "collections.list.featuring_you": "나를 추천", "collections.manage_accounts": "계정 관리하기", + "collections.mark_as_sensitive": "민감함으로 설정", + "collections.mark_as_sensitive_hint": "열람 주의문구 뒤에 이 컬렉션의 설명과 계정을 숨깁니다. 컬렉션의 이름은 항상 보여집니다.", + "collections.maximum_collection_count_description": "이 서버는 {count} 개의 컬렉션 생성을 허용합니다.", + "collections.maximum_collection_count_reached": "컬렉션의 최대 개수에 도달하였습니다", + "collections.name_length_hint": "40 글자 제한", "collections.new_collection": "새 컬렉션", + "collections.pending_accounts.message": "해당 사용자나 서버의 응답을 기다리고 있는 경우 대기중으로 나타날 수 있습니다. 대기중인 계정은 나만 볼 수 있습니다.", + "collections.pending_accounts.title": "왜 대기중인 계정이 있나요?", + "collections.remove_account": "제거", + "collections.report_collection": "이 컬렉션 신고", + "collections.revoke_collection_inclusion": "이 컬렉션에서 나를 제거", + "collections.revoke_inclusion.confirmation": "\"{collection}\"에서 내가 제거되었습니다", + "collections.revoke_inclusion.error": "오류가 발생했습니다. 나중에 다시 시도하세요.", + "collections.search_accounts_label": "추가할 계정 검색", + "collections.search_accounts_max_reached": "이미 너무 많은 계정을 추가했습니다", + "collections.sensitive": "민감함", + "collections.share_short": "공유", + "collections.sort_alphabetical": "가나다순", + "collections.sort_by": "정렬:", + "collections.sort_date_added": "추가된 날짜", + "collections.sort_last_active": "최근 활동", + "collections.sort_most_followers": "팔로워 많은순", + "collections.suggestions.can_not_add": "추가할 수 없음", + "collections.suggestions.must_follow": "먼저 팔로우해야합니다", + "collections.topic_hint": "이 컬렉션의 주제가 무엇인지 다른 사용자들이 이해할 수 있도록 해시태그를 추가하세요.", + "collections.topic_special_chars_hint": "특수문자는 저장할 때 삭제됩니다", + "collections.unlisted_collections_description": "내 프로필에 나타나지 않습니다. 링크를 가진 누구나 볼 수 있습니다.", + "collections.unlisted_collections_with_count": "미등재된 컬렉션 ({count})", "collections.view_collection": "컬렉션 보기", "collections.visibility_public": "공개", + "collections.visibility_public_hint": "검색 결과나 추천이 등장하는 다른 곳에 나타날 수 있습니다.", + "collections.visibility_title": "공개범위", + "collections.visibility_unlisted": "미등재", + "collections.visibility_unlisted_hint": "링크를 가진 모두에게 보여집니다. 검색이나 추천에서 제외됩니다.", "column.about": "정보", "column.blocks": "차단한 사용자", "column.bookmarks": "북마크", @@ -237,8 +461,10 @@ "column.lists": "리스트", "column.mutes": "뮤트한 사용자", "column.notifications": "알림", + "column.other_collections": "{name} 님의 컬렉션", "column.pins": "고정된 게시물", "column.public": "연합 타임라인", + "column.your_collections": "내 컬렉션", "column_back_button.label": "돌아가기", "column_header.hide_settings": "설정 숨기기", "column_header.moveLeft_settings": "컬럼을 왼쪽으로 이동", @@ -247,7 +473,11 @@ "column_header.show_settings": "설정 보이기", "column_header.unpin": "고정 해제", "column_search.cancel": "취소", + "combobox.close_results": "결과 닫기", "combobox.loading": "불러오는 중", + "combobox.no_results_found": "검색 결과가 없습니다", + "combobox.open_results": "결과 열기", + "combobox.results_available": "{count, plural, other {#개의 추천}}이 사용 가능합니다. 위 아래 방향키를 사용하여 이동하고 엔터키로 선택하세요.", "community.column_settings.local_only": "로컬만", "community.column_settings.media_only": "미디어만", "community.column_settings.remote_only": "원격지만", @@ -281,6 +511,9 @@ "confirmations.delete.confirm": "삭제", "confirmations.delete.message": "정말로 이 게시물을 삭제하시겠습니까?", "confirmations.delete.title": "게시물을 삭제할까요?", + "confirmations.delete_collection.confirm": "삭제", + "confirmations.delete_collection.message": "이 작업은 되돌릴 수 없습니다.", + "confirmations.delete_collection.title": "\"{name}\"을 삭제할까요?", "confirmations.delete_list.confirm": "삭제", "confirmations.delete_list.message": "정말로 이 리스트를 영구적으로 삭제하시겠습니까?", "confirmations.delete_list.title": "리스트를 삭제할까요?", @@ -296,6 +529,10 @@ "confirmations.follow_to_list.confirm": "팔로우하고 리스트에 추가", "confirmations.follow_to_list.message": "리스트에 추가하려면 {name} 님을 팔로우해야 합니다.", "confirmations.follow_to_list.title": "팔로우할까요?", + "confirmations.hide_featured_tab.confirm": "탭 숨기기", + "confirmations.hide_featured_tab.intro": "언제든지 프로필 수정 > 프로필 탭 설정에서 변경할 수 있습니다.", + "confirmations.hide_featured_tab.message": "{serverName}과 마스토돈 최신 버전을 사용하는 다른 서버에서 탭을 숨깁니다. 다른 환경에선 다르게 보일 수 있습니다.", + "confirmations.hide_featured_tab.title": "\"추천\" 탭을 제거할까요?", "confirmations.logout.confirm": "로그아웃", "confirmations.logout.message": "정말로 로그아웃 하시겠습니까?", "confirmations.logout.title": "로그아웃 할까요?", @@ -319,6 +556,9 @@ "confirmations.remove_from_followers.confirm": "팔로워 제거", "confirmations.remove_from_followers.message": "{name} 님이 나를 팔로우하지 않게 됩니다. 계속할까요?", "confirmations.remove_from_followers.title": "팔로워를 제거할까요?", + "confirmations.revoke_collection_inclusion.confirm": "나를 제거하기", + "confirmations.revoke_collection_inclusion.message": "이 작업은 영구적이며 큐레이터는 나를 앞으로 다시 추가할 수 없습니다.", + "confirmations.revoke_collection_inclusion.title": "나를 이 컬렉션에서 제거할까요?", "confirmations.revoke_quote.confirm": "게시물 삭제", "confirmations.revoke_quote.message": "이 작업은 되돌릴 수 없습니다.", "confirmations.revoke_quote.title": "게시물을 지울까요?", @@ -331,13 +571,21 @@ "content_warning.hide": "게시물 숨기기", "content_warning.show": "무시하고 보기", "content_warning.show_more": "더 보기", + "content_warning.show_short": "보기", "conversation.delete": "대화 삭제", "conversation.mark_as_read": "읽은 상태로 표시", "conversation.open": "대화 보기", "conversation.with": "{names} 님과", "copy_icon_button.copied": "클립보드에 복사됨", + "copy_icon_button.copy_this_text": "클립보드에 링크 복사", "copypaste.copied": "복사됨", "copypaste.copy_to_clipboard": "클립보드에 복사", + "custom_homepage.about": "정보", + "custom_homepage.about_this_server": "이 서버에 대해", + "custom_homepage.administered_by": "관리자", + "custom_homepage.contact": "연락처:", + "custom_homepage.latest_activity": "최근 활동", + "custom_homepage.these_are_the_latest_posts": "이것은 이 서버에 있는 계정들의 최근 40개의 게시물입니다.", "directory.federated": "알려진 연합우주로부터", "directory.local": "{domain}에서만", "directory.new_arrivals": "새로운 사람들", @@ -357,6 +605,11 @@ "domain_block_modal.you_will_lose_relationships": "이 서버의 팔로워와 팔로우를 모두 잃게 됩니다.", "domain_block_modal.you_wont_see_posts": "이 서버 사용자의 게시물이나 알림을 보지 않게 됩니다.", "dropdown.empty": "옵션 선택", + "email_subscriptions.email": "이메일", + "email_subscriptions.form.action": "구독", + "email_subscriptions.submitted.title": "한 단계 더", + "email_subscriptions.validation.email.blocked": "차단된 이메일 공급자", + "email_subscriptions.validation.email.invalid": "이메일 주소가 올바르지 않습니다", "embed.instructions": "아래 코드를 복사하여 이 게시물을 사용자님의 웹사이트에 임베드하세요.", "embed.preview": "이렇게 표시됩니다:", "emoji_button.activity": "활동", @@ -374,12 +627,21 @@ "emoji_button.search_results": "검색 결과", "emoji_button.symbols": "기호", "emoji_button.travel": "여행과 장소", + "empty_column.account_featured.other": "{acct} 님은 아직 아무 것도 추천하지 않았습니다.", + "empty_column.account_featured_self.no_collections_button": "컬렉션 생성", + "empty_column.account_featured_self.no_collections_hide_tab": "대신 탭 숨기기", + "empty_column.account_featured_self.showcase_accounts": "좋아하는 계정을 남들에게 소개하세요", + "empty_column.account_featured_self.showcase_accounts_desc": "컬렉션은 다른 사람들이 페디버스에서 더 많은 것을 발견할 수 있도록 선별된 계정 목록입니다.", + "empty_column.account_featured_unknown.other": "이 계정은 아직 아무 것도 추천하지 않았습니다.", "empty_column.account_hides_collections": "이 사용자는 이 정보를 사용할 수 없도록 설정했습니다", "empty_column.account_suspended": "계정 정지됨", "empty_column.account_timeline": "이곳에는 게시물이 없습니다!", "empty_column.account_unavailable": "프로필 사용 불가", "empty_column.blocks": "아직 아무도 차단하지 않았습니다.", "empty_column.bookmarked_statuses": "아직 북마크에 저장한 게시물이 없습니다. 게시물을 북마크 지정하면 여기에 나타납니다.", + "empty_column.collections": "{acct} 님은 아직 컬렉션을 생성하지 않았습니다.", + "empty_column.collections.featured_in": "아직 어떤 컬렉션에도 추가되지 않았습니다.", + "empty_column.collections.featured_in_undiscoverable": "사람들이 나를 컬렉션에 추가하려면 그 전에 설정 > 개인정보와 도달에서 나를 발견하기 기능에서 추천하도록 허용해야 합니다", "empty_column.community": "로컬 타임라인에 아무것도 없습니다. 아무거나 적어 보세요!", "empty_column.direct": "개인 멘션이 없습니다. 보내거나 받으면 여기에 표시됩니다.", "empty_column.disabled_feed": "이 피드는 서버 관리자에 의해 비활성화되었습니다.", @@ -396,6 +658,7 @@ "empty_column.notification_requests": "깔끔합니다! 여기엔 아무 것도 없습니다. 알림을 받게 되면 설정에 따라 여기에 나타나게 됩니다.", "empty_column.notifications": "아직 알림이 없습니다. 다른 사람들이 당신에게 반응했을 때, 여기에서 볼 수 있습니다.", "empty_column.public": "여기엔 아직 아무 것도 없습니다! 공개적으로 무언가 포스팅하거나, 다른 서버의 사용자를 팔로우 해서 채워보세요", + "empty_state.no_results": "결과 없음", "error.no_hashtag_feed_access": "이 해시태그를 확인하고 팔로우하려면 가입 또는 로그인하세요.", "error.unexpected_crash.explanation": "버그 혹은 브라우저 호환성 문제로 이 페이지를 불러올 수 없습니다.", "error.unexpected_crash.explanation_addons": "이 페이지를 불러올 수 없습니다. 브라우저 확장 프로그램이나 자동 번역 도구로 인해 발생된 오류일 수 있습니다.", @@ -411,6 +674,11 @@ "featured_carousel.current": "게시물 {current, number} / {max, number}", "featured_carousel.header": "{count, plural, other {고정된 게시물}}", "featured_carousel.slide": "{max, number} 중 {current, number} 번째 게시물", + "featured_tags.more_items": "+{count}", + "featured_tags.suggestions": "최근에 {items}에 대해 게시했습니다. 이것들을 추천 해시태그에 추가할까요?", + "featured_tags.suggestions.add": "추가", + "featured_tags.suggestions.added": "언제든지 프로필 수정 > 추천 해시태그에서 추천 해시태그를 관리할 수 있습니다.", + "featured_tags.suggestions.dismiss": "괜찮습니다", "filter_modal.added.context_mismatch_explanation": "이 필터 카테고리는 당신이 이 게시물에 접근한 문맥에 적용되지 않습니다. 만약 이 문맥에서도 필터되길 원한다면, 필터를 수정해야 합니다.", "filter_modal.added.context_mismatch_title": "문맥 불일치!", "filter_modal.added.expired_explanation": "이 필터 카테고리는 만료되었습니다, 적용하려면 만료 일자를 변경할 필요가 있습니다.", @@ -452,6 +720,9 @@ "follow_suggestions.view_all": "모두 보기", "follow_suggestions.who_to_follow": "팔로우할 만한 사람", "followed_tags": "팔로우 중인 해시태그", + "followers.title": "{name} 님을 팔로우합니다", + "following.hide_other_following": "이 사용자는 팔로우 중인 다른 사용자 목록을 보여주지 않기로 했습니다", + "following.title": "{name} 님이 팔로우", "footer.about": "정보", "footer.about_mastodon": "마스토돈 정보", "footer.about_server": "{domain} 소개", @@ -463,6 +734,8 @@ "footer.source_code": "소스코드 보기", "footer.status": "상태", "footer.terms_of_service": "이용 약관", + "form_error.blank": "필드는 공백으로 둘 수 없습니다.", + "form_field.optional": "(선택사항)", "getting_started.heading": "시작하기", "hashtag.admin_moderation": "#{name}에 대한 중재화면 열기", "hashtag.browse": "#{hashtag}의 게시물 둘러보기", @@ -513,6 +786,7 @@ "info_button.label": "도움말", "info_button.what_is_alt_text": "

대체 텍스트가 무엇인가요?

대체 텍스트는 저시력자, 낮은 인터넷 대역폭 사용자, 더 자세한 문맥을 위해 이미지에 대한 설명을 제공하는 것입니다.

깔끔하고 간결하고 객관적인 대체 텍스트를 작성해 모두가 이해하기 쉽게 만들고 접근성이 높아질 수 있습니다.

", "interaction_modal.action": "{name} 님의 게시물과 상호작용하려면 이용 중인 마스토돈 서버 계정으로 로그인하세요.", + "interaction_modal.action_follow": "{name} 님을 팔로우하려면 사용중인 마스토돈 서버 계정으로 로그인해야 합니다.", "interaction_modal.go": "이동", "interaction_modal.no_account_yet": "아직 계정이 없나요?", "interaction_modal.on_another_server": "다른 서버에", @@ -528,14 +802,22 @@ "keyboard_shortcuts.column": "해당 컬럼에 포커스", "keyboard_shortcuts.compose": "작성창에 포커스", "keyboard_shortcuts.description": "설명", + "keyboard_shortcuts.direct": "개인 멘션 컬럼 열기", "keyboard_shortcuts.down": "리스트에서 아래로 이동", "keyboard_shortcuts.enter": "게시물 열기", + "keyboard_shortcuts.explore": "유행 타임라인 열기", "keyboard_shortcuts.favourite": "게시물 좋아요", "keyboard_shortcuts.favourites": "좋아요 목록 열기", "keyboard_shortcuts.federated": "연합 타임라인 열기", "keyboard_shortcuts.heading": "키보드 단축키", "keyboard_shortcuts.home": "홈 타임라인 열기", "keyboard_shortcuts.hotkey": "핫키", + "keyboard_shortcuts.keys.alt": "Alt", + "keyboard_shortcuts.keys.backspace": "백스페이스", + "keyboard_shortcuts.keys.enter": "엔터", + "keyboard_shortcuts.keys.esc": "ESC", + "keyboard_shortcuts.keys.page_down": "페이지 다운", + "keyboard_shortcuts.keys.page_up": "페이지 업", "keyboard_shortcuts.legend": "이 개요 표시", "keyboard_shortcuts.load_more": "\"더 보기\" 버튼에 포커스", "keyboard_shortcuts.local": "로컬 타임라인 열기", @@ -567,6 +849,7 @@ "lightbox.zoom_in": "실제 크기에 맞춰 보기", "lightbox.zoom_out": "화면 크기에 맞춰 보기", "limited_account_hint.action": "그래도 프로필 보기", + "limited_account_hint.title": "이 프로필 또는 서버는 {domain}의 중재자에 의해 숨겨졌습니다.", "link_preview.author": "{name}", "link_preview.more_from_author": "{name} 프로필 보기", "link_preview.shares": "{count, plural, other {{counter} 개의 게시물}}", @@ -615,6 +898,7 @@ "navigation_bar.automated_deletion": "게시물 자동 삭제", "navigation_bar.blocks": "차단한 사용자", "navigation_bar.bookmarks": "북마크", + "navigation_bar.collections": "컬렉션", "navigation_bar.direct": "개인 멘션", "navigation_bar.domain_blocks": "차단한 도메인", "navigation_bar.favourites": "좋아요", @@ -627,6 +911,7 @@ "navigation_bar.live_feed_local": "라이브 피드 (로컬)", "navigation_bar.live_feed_public": "라이브 피드 (공개)", "navigation_bar.logout": "로그아웃", + "navigation_bar.main": "메인", "navigation_bar.moderation": "중재", "navigation_bar.more": "더 보기", "navigation_bar.mutes": "뮤트한 사용자", @@ -640,6 +925,7 @@ "navigation_panel.expand_followed_tags": "팔로우 중인 해시태그 메뉴 펼치기", "navigation_panel.expand_lists": "리스트 메뉴 펼치기", "not_signed_in_indicator.not_signed_in": "이 정보에 접근하려면 로그인을 해야 합니다.", + "notification.added_to_collection": "{name} 님이 나를 컬렉션에 추가했습니다", "notification.admin.report": "{name} 님이 {target}를 신고했습니다", "notification.admin.report_account": "{name} 님이 {target}의 게시물 {count, plural, other {# 개}}를 {category} 사유로 신고했습니다", "notification.admin.report_account_other": "{name} 님이 {target}의 게시물 {count, plural, other {# 개}}를 신고했습니다", @@ -649,6 +935,7 @@ "notification.admin.sign_up.name_and_others": "{name} 외 {count, plural, other {# 명}}이 가입했습니다", "notification.annual_report.message": "{year} #Wrapstodon 이 기다리고 있습니다! 올 해 마스토돈에서 있었던 최고의 순간과 기억들을 열어보세요!", "notification.annual_report.view": "#Wrapstodon 보기", + "notification.collection_update": "{name} 님이 내가 있는 컬렉션을 수정했습니다", "notification.favourite": "{name} 님이 내 게시물을 좋아합니다", "notification.favourite.name_and_others_with_link": "{name} 외 {count, plural, other {# 명}}이 내 게시물을 좋아합니다", "notification.favourite_pm": "{name} 님이 내 개인 멘션을 마음에 들어합니다", @@ -710,6 +997,7 @@ "notifications.column_settings.admin.report": "새 신고:", "notifications.column_settings.admin.sign_up": "새로운 가입:", "notifications.column_settings.alert": "데스크탑 알림", + "notifications.column_settings.collections": "컬렉션:", "notifications.column_settings.favourite": "좋아요:", "notifications.column_settings.filter_bar.advanced": "모든 범주 표시", "notifications.column_settings.filter_bar.category": "빠른 필터 막대", @@ -729,6 +1017,7 @@ "notifications.column_settings.update": "수정내역:", "notifications.filter.all": "모두", "notifications.filter.boosts": "부스트", + "notifications.filter.collections": "컬렉션", "notifications.filter.favourites": "좋아요", "notifications.filter.follows": "팔로우", "notifications.filter.mentions": "멘션", @@ -762,12 +1051,14 @@ "notifications_permission_banner.title": "아무것도 놓치지 마세요", "onboarding.follows.back": "뒤로가기", "onboarding.follows.empty": "안타깝지만 아직은 아무 것도 보여드릴 수 없습니다. 검색을 이용하거나 둘러보기 페이지에서 팔로우 할 사람을 찾을 수 있습니다. 아니면 잠시 후에 다시 시도하세요.", + "onboarding.follows.next": "다음: 프로필 설정", "onboarding.follows.search": "검색", "onboarding.follows.title": "사람들을 팔로우하기", "onboarding.profile.discoverable": "내 프로필을 발견 가능하도록 설정", "onboarding.profile.discoverable_hint": "마스토돈의 발견하기 기능에 참여하면 게시물이 검색 결과와 유행 란에 표시될 수 있고, 비슷한 관심사를 가진 사람들에게 자신의 프로필이 추천될 수 있습니다.", "onboarding.profile.display_name": "표시되는 이름", "onboarding.profile.display_name_hint": "진짜 이름 또는 재미난 이름…", + "onboarding.profile.finish": "완료", "onboarding.profile.note": "자기소개", "onboarding.profile.note_hint": "남을 @mention 하거나 #hashtag 태그를 달 수 있습니다…", "onboarding.profile.title": "프로필 설정", @@ -839,6 +1130,7 @@ "report.category.title_account": "프로필", "report.category.title_status": "게시물", "report.close": "완료", + "report.collection_comment": "이 컬렉션을 신고하려는 이유가 무엇인가요?", "report.comment.title": "우리가 더 알아야 할 내용이 있나요?", "report.forward": "{target}에 전달", "report.forward_hint": "이 계정은 다른 서버에 있습니다. 익명화 된 사본을 해당 서버에도 전송할까요?", @@ -860,6 +1152,8 @@ "report.rules.title": "어떤 규칙을 위반했나요?", "report.statuses.subtitle": "해당하는 사항을 모두 선택", "report.statuses.title": "이 신고에 대해서 더 참고해야 할 게시물이 있나요?", + "report.submission_error": "신고를 제출할 수 없습니다", + "report.submission_error_details": "네트워크 연결을 확인하고 다시 시도해주세요.", "report.submit": "신고하기", "report.target": "{target} 신고하기", "report.thanks.take_action": "마스토돈에서 나에게 보이는 것을 조절하기 위한 몇 가지 선택사항들이 존재합니다:", @@ -897,6 +1191,7 @@ "search_popout.user": "사용자", "search_results.accounts": "프로필", "search_results.all": "전부", + "search_results.collections": "컬렉션", "search_results.hashtags": "해시태그", "search_results.no_results": "결과가 없습니다.", "search_results.no_search_yet": "게시물, 프로필, 해시태그를 검색해보세요.", @@ -907,12 +1202,15 @@ "server_banner.active_users": "활성 사용자", "server_banner.administered_by": "관리자:", "server_banner.is_one_of_many": "{domain}은 페디버스를 통해 참여할 수 있는 많은 마스토돈 서버들 중 하나입니다", + "server_banner.more_about_this_server": "이 서버에 대한 더 많은 정보", "server_banner.server_stats": "서버 통계:", "sign_in_banner.create_account": "계정 생성", "sign_in_banner.follow_anyone": "페디버스를 통해 누구든지 팔로우하고 시간순으로 게시물을 받아보세요. 알고리즘도, 광고도, 클릭을 유도하는 것들도 없습니다.", "sign_in_banner.mastodon_is": "마스토돈은 무엇이 일어나는지 받아보는 가장 좋은 수단입니다.", "sign_in_banner.sign_in": "로그인", "sign_in_banner.sso_redirect": "로그인 또는 가입하기", + "skip_links.hotkey": "단축키 {hotkey}", + "skip_links.skip_to_content": "주 내용으로 건너뛰기", "status.admin_account": "@{name}에 대한 중재 화면 열기", "status.admin_domain": "{domain}에 대한 중재 화면 열기", "status.admin_status": "중재 화면에서 이 게시물 열기", @@ -1013,7 +1311,9 @@ "tabs_bar.menu": "메뉴", "tabs_bar.notifications": "알림", "tabs_bar.publish": "새 게시물", + "tabs_bar.quick_links": "빠른 링크", "tabs_bar.search": "검색", + "tag.remove": "제거", "terms_of_service.effective_as_of": "{date}부터 적용됨", "terms_of_service.title": "이용 약관", "terms_of_service.upcoming_changes_on": "{date}에 예정된 변경사항", diff --git a/app/javascript/mastodon/locales/nan-TW.json b/app/javascript/mastodon/locales/nan-TW.json index cd93bc69d1..3b7ae6f4fc 100644 --- a/app/javascript/mastodon/locales/nan-TW.json +++ b/app/javascript/mastodon/locales/nan-TW.json @@ -2,6 +2,7 @@ "about.blocks": "Siū 管制 ê 服侍器", "about.contact": "聯絡方法:", "about.default_locale": "預設", + "about.disclaimer": "Mastodon是自由、開放原始碼ê軟體,mā是Mastodon GmbH ê商標。", "about.domain_blocks.no_reason_available": "原因bē-tàng用", "about.domain_blocks.preamble": "Mastodon一般ē允准lí看別ê fediverse 服侍器來ê聯絡人kap hām用者交流。Tsiah ê 是本服侍器建立ê例外。", "about.domain_blocks.silenced.explanation": "Lí一般buē-tàng tuì tsit ê服侍器看用戶ê紹介kap內容,除非lí明白tshiau-tshuē á是跟tuè伊。", @@ -645,6 +646,7 @@ "empty_column.account_unavailable": "個人資料bē當看", "empty_column.blocks": "Lí iáu無封鎖任何用者。", "empty_column.bookmarked_statuses": "Lí iáu無加添任何冊籤。Nā是lí加添冊籤,伊ē佇tsia顯示。", + "empty_column.collections": "{acct} iáu bē建立任何收藏。", "empty_column.collections.featured_in": "Lí iáu buē加添kàu任何收藏。", "empty_column.collections.featured_in_undiscoverable": "若beh予lâng kā lí加入去收藏,lí需要kàu偏愛ê設定 > 隱私kap資訊ê及至佇探索經驗允准推薦", "empty_column.community": "本站時間線是空ê。緊來公開PO文oh!", @@ -818,6 +820,12 @@ "keyboard_shortcuts.heading": "鍵盤ê快速key", "keyboard_shortcuts.home": "Phah開tshù ê時間線", "keyboard_shortcuts.hotkey": "快速key", + "keyboard_shortcuts.keys.alt": "Alt", + "keyboard_shortcuts.keys.backspace": "Backspace", + "keyboard_shortcuts.keys.enter": "Enter", + "keyboard_shortcuts.keys.esc": "ESC", + "keyboard_shortcuts.keys.page_down": "Page Down", + "keyboard_shortcuts.keys.page_up": "Page Up", "keyboard_shortcuts.legend": "顯示tsit篇說明", "keyboard_shortcuts.load_more": "Kā焦點suá kàu「載入其他」ê鈕仔", "keyboard_shortcuts.local": "Phah開本站ê時間線", @@ -849,6 +857,7 @@ "lightbox.zoom_in": "Tshūn-kiu kàu實際ê sài-suh", "lightbox.zoom_out": "Tshūn-kiu kàu適當ê sài-suh", "limited_account_hint.action": "一直顯示個人資料", + "limited_account_hint.title": "Tsit ê 個人資料iah是服侍器予 {domain} ê管理員tshàng起來ah。", "link_preview.author": "Tuì {name}", "link_preview.more_from_author": "看 {name} ê其他內容", "link_preview.shares": "{count, plural, one {{counter} 篇} other {{counter} 篇}}PO文", @@ -1190,6 +1199,7 @@ "search_popout.user": "用者", "search_results.accounts": "個人資料", "search_results.all": "全部", + "search_results.collections": "收藏", "search_results.hashtags": "Hashtag", "search_results.no_results": "無結果。", "search_results.no_search_yet": "請試tshiau-tshuē PO文、個人資料á是hashtag。", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 924973e0b3..6b023be070 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -646,6 +646,7 @@ "empty_column.account_unavailable": "Profil ikkje tilgjengeleg", "empty_column.blocks": "Du har ikkje blokkert nokon enno.", "empty_column.bookmarked_statuses": "Du har ikkje lagra noko bokmerke enno. Når du set bokmerke på eit innlegg, dukkar det opp her.", + "empty_column.collections": "{acct} har ikkje laga nokon samlingar enno.", "empty_column.collections.featured_in": "Du er ikkje lagt til i nokon samlingar enno.", "empty_column.collections.featured_in_undiscoverable": "For at folk skal kunna leggja deg til i samlingar, må du gje dei løyve til å oppdaga deg i Innstillingar > Personvern og rekkjevidd", "empty_column.community": "Den lokale tidslina er tom. Skriv noko offentleg å få ballen til å rulle!", @@ -819,6 +820,12 @@ "keyboard_shortcuts.heading": "Snøggtastar", "keyboard_shortcuts.home": "Opne heimetidslina", "keyboard_shortcuts.hotkey": "Snøggtast", + "keyboard_shortcuts.keys.alt": "Alt", + "keyboard_shortcuts.keys.backspace": "Rettetast", + "keyboard_shortcuts.keys.enter": "Enter", + "keyboard_shortcuts.keys.esc": "Esc", + "keyboard_shortcuts.keys.page_down": "Page Down", + "keyboard_shortcuts.keys.page_up": "Page Up", "keyboard_shortcuts.legend": "Vis denne forklaringa", "keyboard_shortcuts.load_more": "Fokuser på «Last meir»-knappen", "keyboard_shortcuts.local": "Opne lokal tidsline", @@ -1192,6 +1199,7 @@ "search_popout.user": "brukar", "search_results.accounts": "Profiler", "search_results.all": "Alt", + "search_results.collections": "Samlingar", "search_results.hashtags": "Emneknaggar", "search_results.no_results": "Ingen resultat.", "search_results.no_search_yet": "Prøv å søkja etter innlegg, profilar eller emneknaggar.", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index 14865249e7..6c62ad4ccf 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -68,8 +68,12 @@ "account.go_to_profile": "Przejdź do profilu", "account.hide_reblogs": "Ukryj podbicia od @{name}", "account.in_memoriam": "Ku pamięci.", + "account.join_modal.me": "Dołączyłeś(aś) na {server}", + "account.join_modal.me_today": "To Twój pierwszy dzień na {server}!", + "account.join_modal.other": "{name} dołączył(a) na {server}", "account.joined_short": "Dołączył(a)", "account.languages": "Zmień subskrybowane języki", + "account.last_active": "Ostatnia aktywność", "account.link_verified_on": "Własność tego odnośnika została potwierdzona {date}", "account.locked_info": "To konto jest prywatne. Właściciel ręcznie wybiera kto może go obserwować.", "account.media": "Multimedia", @@ -98,6 +102,13 @@ "account.mute_short": "Wycisz", "account.muted": "Wyciszony", "account.mutual": "Obserwujecie się wzajemnie", + "account.name.copy": "Kopiuj odnośnik", + "account.name.help.domain": "{domain} to serwer, na którym znajduje się profil i wpisy tego użytkownika.", + "account.name.help.domain_self": "{domain} to Twój serwer, na którym znajduje się Twój profil i wpisy.", + "account.name.help.footer": "Tak samo jak możesz wysyłać e-maile do osób korzystających z różnych dostawców poczty, możesz wchodzić w interakcje z osobami na innych serwerach Mastodona oraz z każdym, kto korzysta z innych aplikacji Fediwersum.", + "account.name.help.header": "Identyfikator jest jak adres e-mail", + "account.name.help.username": "{username} to nazwa użytkownika tego konta na jego serwerze. Ktoś na innym serwerze może mieć taką samą nazwę użytkownika.", + "account.name.help.username_self": "{username} to Twoja nazwa użytkownika na tym serwerze. Ktoś na innym serwerze może mieć taką samą nazwę użytkownika.", "account.name_info": "Co to oznacza?", "account.no_bio": "Brak opisu.", "account.node_modal.callout": "Osobiste notatki są widoczne tylko dla Ciebie.", @@ -157,7 +168,7 @@ "account_edit.field_actions.edit": "Edytuj pole", "account_edit.field_delete_modal.confirm": "Czy na pewno chcesz usunąć to pole niestandardowe? Tej czynności nie można cofnąć.", "account_edit.field_delete_modal.delete_button": "Usuń", - "account_edit.field_delete_modal.title": "Usuń pole niestandardowe ", + "account_edit.field_delete_modal.title": "Usuń pole niestandardowe?", "account_edit.field_edit_modal.add_title": "Dodaj pole niestandardowe", "account_edit.field_edit_modal.discard_confirm": "Odrzuć", "account_edit.field_edit_modal.discard_message": "Masz niezapisane zmiany. Czy na pewno chcesz je odrzucić?", @@ -173,6 +184,7 @@ "account_edit.image_edit.alt_edit_button": "Dodaj tekst alternatywny", "account_edit.image_edit.remove_button": "Usuń obraz", "account_edit.image_edit.replace_button": "Zastąp obraz", + "account_edit.item_list.delete": "Usuń {name}", "account_edit.profile_tab.button_label": "Dostosuj", "account_edit.profile_tab.hint.description": "Te ustawienia wpływają na to, co użytkownicy widzą na {server} w oficjalnych aplikacjach, ale mogą nie obowiązywać na innych serwerach i w aplikacjach zewnętrznych.", "account_edit.profile_tab.hint.title": "Wyświetlanie może się różnić", @@ -191,6 +203,15 @@ "account_edit.upload_modal.done": "Gotowe", "account_edit.upload_modal.next": "Następne", "account_edit.upload_modal.step_crop.zoom": "Powiększenie", + "account_edit.upload_modal.step_upload.button": "Wybierz pliki", + "account_edit.upload_modal.step_upload.header": "Wybierz obraz", + "account_edit.upload_modal.step_upload.hint": "WEBP, PNG, GIF lub JPG, maksymalnie {limit} MB.{br}Obraz zostanie przeskalowany do {width}x{height} px.", + "account_edit.upload_modal.title_add.avatar": "Dodaj zdjęcie profilowe", + "account_edit.upload_modal.title_add.header": "Dodaj zdjęcie nagłówka", + "account_edit.upload_modal.title_replace.avatar": "Zmień zdjęcie profilowe", + "account_edit.upload_modal.title_replace.header": "Zmień zdjęcie nagłówka", + "account_edit_tags.add_tag": "Dodaj #{tagName}", + "account_edit_tags.search_placeholder": "Dodaj hashtag...", "admin.dashboard.daily_retention": "Wskaźnik utrzymania użytkowników według dni od rejestracji", "admin.dashboard.monthly_retention": "Wskaźnik utrzymania użytkowników według miesięcy od rejestracji", "admin.dashboard.retention.average": "Średnia", @@ -238,6 +259,8 @@ "annual_report.summary.close": "Zamknij", "annual_report.summary.copy_link": "Skopiuj adres", "annual_report.summary.followers.new_followers": "{count, plural, one {{counter} obserwujący} few {{counter} obserwujących} many {{counter} obserwujących} other {{counter} obserwujących}}", + "annual_report.summary.highlighted_post.favourite_count": "Ten post został polubiony {count, plural, one {raz} few {# razy} many {# razy} other {# razy}}.", + "annual_report.summary.highlighted_post.reply_count": "Ten post ma {count, plural, one {jedną odpowiedź} few {# odpowiedzi} many {# odpowiedzi} other {# odpowiedzi}}.", "annual_report.summary.most_used_app.most_used_app": "najczęściej używana aplikacja", "annual_report.summary.most_used_hashtag.most_used_hashtag": "najczęściej używany hashtag", "annual_report.summary.new_posts.new_posts": "nowe wpisy", @@ -274,6 +297,7 @@ "closed_registrations_modal.preamble": "Mastodon jest zdecentralizowany, więc bez względu na to, gdzie się zarejestrujesz, będziesz w stanie obserwować i wchodzić w interakcje z innymi osobami na tym serwerze. Możesz nawet uruchomić własny serwer!", "closed_registrations_modal.title": "Rejestracja na Mastodonie", "collections.last_updated_at": "Ostatnia aktualizacja: {date}", + "collections.remove_account": "Usuń", "column.about": "O serwerze", "column.blocks": "Zablokowani", "column.bookmarks": "Zakładki", @@ -430,6 +454,7 @@ "emoji_button.search_results": "Wyniki wyszukiwania", "emoji_button.symbols": "Symbole", "emoji_button.travel": "Podróże i miejsca", + "empty_column.account_featured_self.no_collections_button": "Stwórz kolekcję", "empty_column.account_hides_collections": "Ta osoba postanowiła nie udostępniać tych informacji", "empty_column.account_suspended": "Konto zawieszone", "empty_column.account_timeline": "Brak wpisów!", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 6ffd62c62a..e021787225 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -646,6 +646,7 @@ "empty_column.account_unavailable": "Profilen ej tillgänglig", "empty_column.blocks": "Du har ännu ej blockerat några användare.", "empty_column.bookmarked_statuses": "Du har inte bokmärkt några inlägg än. När du bokmärker ett inlägg kommer det synas här.", + "empty_column.collections": "{acct} har ännu inte skapat några samlingar.", "empty_column.collections.featured_in": "Du har inte lagts till i några samlingar än.", "empty_column.collections.featured_in_undiscoverable": "För att personer ska kunna lägga till dig i samlingar, måste du tillåta att inkluderas i upptäcktsupplevelser från Inställningar> Sekretess och räckvidd", "empty_column.community": "Den lokala tidslinjen är tom. Skriv något offentligt för att sätta bollen i rullning!", @@ -819,6 +820,12 @@ "keyboard_shortcuts.heading": "Tangentbordsgenvägar", "keyboard_shortcuts.home": "Öppna Hemtidslinjen", "keyboard_shortcuts.hotkey": "Kommando", + "keyboard_shortcuts.keys.alt": "Alt", + "keyboard_shortcuts.keys.backspace": "Backsteg", + "keyboard_shortcuts.keys.enter": "Retur", + "keyboard_shortcuts.keys.esc": "Esc", + "keyboard_shortcuts.keys.page_down": "Sida ned", + "keyboard_shortcuts.keys.page_up": "Sida upp", "keyboard_shortcuts.legend": "Visa denna översikt", "keyboard_shortcuts.load_more": "Fokusera \"Ladda mer\"-knappen", "keyboard_shortcuts.local": "Öppna lokal tidslinje", @@ -850,6 +857,7 @@ "lightbox.zoom_in": "Zooma till faktisk storlek", "lightbox.zoom_out": "Zooma för att passa", "limited_account_hint.action": "Visa profil ändå", + "limited_account_hint.title": "Denna profil eller server har dolts av {domain}s moderatorer.", "link_preview.author": "Av {name}", "link_preview.more_from_author": "Mer från {name}", "link_preview.shares": "{count, plural, one {{counter} inlägg} other {{counter} inlägg}}", @@ -1191,6 +1199,7 @@ "search_popout.user": "användare", "search_results.accounts": "Profiler", "search_results.all": "Alla", + "search_results.collections": "Samlingar", "search_results.hashtags": "Hashtaggar", "search_results.no_results": "Inga resultat.", "search_results.no_search_yet": "Prova att söka efter inlägg, profiler eller hashtags.", diff --git a/config/locales/activerecord.ko.yml b/config/locales/activerecord.ko.yml index 05be315583..9d3cc01234 100644 --- a/config/locales/activerecord.ko.yml +++ b/config/locales/activerecord.ko.yml @@ -34,6 +34,8 @@ ko: invalid: 올바른 URL이 아닙니다 collection: attributes: + collection_items: + too_many: 너무 많습니다. %{count}개를 초과할 수 없습니다 tag: unusable: 사용할 수 없음 doorkeeper/application: diff --git a/config/locales/activerecord.pl.yml b/config/locales/activerecord.pl.yml index 29cace6db5..9eb587f2b5 100644 --- a/config/locales/activerecord.pl.yml +++ b/config/locales/activerecord.pl.yml @@ -32,6 +32,12 @@ pl: attributes: url: invalid: nie jest poprawnym adresem URL + collection: + attributes: + collection_items: + too_many: jest zbyt wiele, nie więcej niż %{count} dozwolone + tag: + unusable: nie mogą być użyte doorkeeper/application: attributes: website: diff --git a/config/locales/da.yml b/config/locales/da.yml index a60071bb5d..bfc9d3857e 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -1499,6 +1499,7 @@ da: your_appeal_rejected: Din appel er afvist edit_profile: other: Andre + privacy_redesign_body: Beslutningen om at vise dine følgere og dem, du følger, træffes nu direkte fra din profil. redesign_body: Profilredigering kan nu tilgås direkte fra profilsiden. redesign_button: Gå dertil redesign_title: Der er en ny måde at redigere sin profil på diff --git a/config/locales/de.yml b/config/locales/de.yml index 33224000e8..512d02ad7c 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -1499,6 +1499,7 @@ de: your_appeal_rejected: Dein Einspruch wurde abgelehnt edit_profile: other: Andere + privacy_redesign_body: Die Option, deine Follower und „Folge ich“ allen anzuzeigen oder sie vor allen zu verbergen, findest du jetzt auch direkt in deinen Profileinstellungen. redesign_body: Dein Profil kannst du jetzt direkt auf deiner Profilseite bearbeiten. redesign_button: Loslegen redesign_title: Es gibt eine brandneue Möglichkeit, das Profil zu bearbeiten diff --git a/config/locales/doorkeeper.pl.yml b/config/locales/doorkeeper.pl.yml index 85b9013747..67a0d62464 100644 --- a/config/locales/doorkeeper.pl.yml +++ b/config/locales/doorkeeper.pl.yml @@ -84,6 +84,8 @@ pl: credential_flow_not_configured: Ścieżka "Resource Owner Password Credentials" zakończyła się błędem, ponieważ Doorkeeper.configure.resource_owner_from_credentials nie został skonfigurowany. invalid_client: Autoryzacja klienta nie powiodła się z powodu nieznanego klienta, braku uwierzytelnienia klienta, lub niewspieranej metody uwierzytelniania. invalid_code_challenge_method: + one: Parametr code_challenge_method musi mieć wartość %{challenge_methods}. + other: Parametr code_challenge_method musi być jednym z %{challenge_methods}. zero: Serwer autoryzacji nie obsługuje PKCE — brak akceptowanych wartości code_challenge_method. invalid_grant: Grant uwierzytelnienia jest niepoprawny, przeterminowany, unieważniony, nie pasuje do URI przekierowwania użytego w żądaniu uwierzytelnienia, lub został wystawiony przez innego klienta. invalid_redirect_uri: URI przekierowania jest nieprawidłowy. diff --git a/config/locales/doorkeeper.pt-BR.yml b/config/locales/doorkeeper.pt-BR.yml index 1e4efbea78..3ade537870 100644 --- a/config/locales/doorkeeper.pt-BR.yml +++ b/config/locales/doorkeeper.pt-BR.yml @@ -156,17 +156,17 @@ pt-BR: admin:read:accounts: ler informações sensíveis de todas as contas admin:read:canonical_email_blocks: ler informações sensíveis de todos os blocos de e-mail canônicos admin:read:domain_allows: ler informações sensíveis de todos os domínios permitidos - admin:read:domain_blocks: ler informações sensíveis de todos os domínios bloqueados - admin:read:email_domain_blocks: ler informações sensíveis de todos os domínios de e-mail bloqueados - admin:read:ip_blocks: ler informações sensíveis de todos os endereços de IP bloqueados + admin:read:domain_blocks: ler informações sensíveis de todos os bloqueios de domínio + admin:read:email_domain_blocks: ler informações sensíveis de todos os bloqueios de domínios de e-mail + admin:read:ip_blocks: ler informações sensíveis de todos os bloqueios de endereço IP admin:read:reports: ler informações sensíveis de todas as denúncias e contas denunciadas admin:write: alterar todos os dados no servidor admin:write:accounts: executar ações de moderação em contas - admin:write:canonical_email_blocks: executar ações de moderação em blocos canônicos de e-mail - admin:write:domain_allows: executar ações de moderação em domínios permitidos - admin:write:domain_blocks: executar ações de moderação em domínios bloqueados - admin:write:email_domain_blocks: executar ações de moderação em domínios de e-mail bloqueados - admin:write:ip_blocks: executar ações de moderação em IPs bloqueados + admin:write:canonical_email_blocks: executar ações de moderação em bloqueios de e-mail canônicos + admin:write:domain_allows: executar ações de moderação na permissão de domínios + admin:write:domain_blocks: executar ações de moderação em bloqueios de domínio + admin:write:email_domain_blocks: executar ações de moderação em bloqueios de domínios de e-mail + admin:write:ip_blocks: executar ações de moderação em bloqueios de endereço IP admin:write:reports: executar ações de moderação em denúncias crypto: usar criptografia de ponta a ponta follow: alterar o relacionamento das contas diff --git a/config/locales/el.yml b/config/locales/el.yml index 1109377027..66679cecdf 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -1499,6 +1499,7 @@ el: your_appeal_rejected: Η έφεση σου απορρίφθηκε edit_profile: other: Άλλο + privacy_redesign_body: Η επιλογή να εμφανίζεις αυτούς που ακολουθείς και τους ακολούθους σου γίνεται τώρα απευθείας από το προφίλ σου. redesign_body: Η επεξεργασία προφίλ μπορεί τώρα να προσεγγιστεί απευθείας από τη σελίδα του προφίλ. redesign_button: Πηγαίνετε εκεί redesign_title: Υπάρχει μια νέα εμπειρία επεξεργασίας προφίλ diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index 4ce9d037bd..db9c1e0d76 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -1499,6 +1499,7 @@ es-AR: your_appeal_rejected: Se rechazó tu apelación edit_profile: other: Otros + privacy_redesign_body: La opción de mostrar tus seguidores y seguidores ahora se hace directamente a partir de tu perfil. redesign_body: Ahora podés acceder a la edición del perfil desde la propia página de perfil. redesign_button: Ir allí redesign_title: Hay una nueva experiencia de edición de perfil diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index fc13d70dbe..5525f212cd 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -1499,6 +1499,7 @@ es-MX: your_appeal_rejected: Tu apelación ha sido rechazada edit_profile: other: Otro + privacy_redesign_body: Ahora puedes elegir si quieres mostrar a tus seguidores y a quiénes sigues directamente desde tu perfil. redesign_body: Ahora se puede acceder a la edición del perfil directamente desde la página del perfil. redesign_button: Llévame allí redesign_title: Hay una nueva experiencia de edición de perfil diff --git a/config/locales/es.yml b/config/locales/es.yml index 20d232b5e9..ddcc6ab07d 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -1499,6 +1499,7 @@ es: your_appeal_rejected: Tu apelación ha sido rechazada edit_profile: other: Otros + privacy_redesign_body: La opción de mostrar tus perfiles seguidos y seguidores ahora se hace directamente desde tu perfil. redesign_body: Ahora puedes acceder a la edición del perfil desde la propia página de perfil. redesign_button: Llévame allí redesign_title: Hay una nueva experiencia de edición de perfil diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 46117cb556..76fb59f90c 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -1491,6 +1491,7 @@ fi: your_appeal_rejected: Valituksesi on hylätty edit_profile: other: Muut + privacy_redesign_body: Valinta seurattavien ja seurattujen näyttämiseksi tehdään nyt suoraan profiilista. redesign_body: Profiilia pääsee muokkaamaan nyt suoraan profiilisivulta. redesign_button: Siirry sinne redesign_title: Profiilin muokkauskokemus on uudistunut diff --git a/config/locales/fr-CA.yml b/config/locales/fr-CA.yml index afaa55e3ce..3199e2ed97 100644 --- a/config/locales/fr-CA.yml +++ b/config/locales/fr-CA.yml @@ -1499,6 +1499,7 @@ fr-CA: your_appeal_rejected: Votre appel a été rejeté edit_profile: other: Autre + privacy_redesign_body: Le choix de montrer vos abonnements et vos abonné·e·s est maintenant fait directement depuis votre profil. redesign_body: La modification du profil est maintenant accessible directement depuis la page de profil. redesign_button: Accéder redesign_title: Nouvelle expérience de modification du profil diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 325ba3382b..6813e5aa2c 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -1499,6 +1499,7 @@ fr: your_appeal_rejected: Votre appel a été rejeté edit_profile: other: Autre + privacy_redesign_body: Le choix de montrer vos abonnements et vos abonné·e·s est maintenant fait directement depuis votre profil. redesign_body: La modification du profil est maintenant accessible directement depuis la page de profil. redesign_button: Accéder redesign_title: Nouvelle expérience de modification du profil diff --git a/config/locales/ga.yml b/config/locales/ga.yml index efd086f686..9ca8105591 100644 --- a/config/locales/ga.yml +++ b/config/locales/ga.yml @@ -1564,6 +1564,7 @@ ga: your_appeal_rejected: Diúltaíodh do d'achomharc edit_profile: other: Eile + privacy_redesign_body: Déantar an rogha chun do leanúna agus do leanúna a thaispeáint go díreach ó do phróifíl anois. redesign_body: Is féidir rochtain a fháil ar eagarthóireacht próifíle go díreach ón leathanach próifíle anois. redesign_button: Téigh ann redesign_title: Tá taithí nua eagarthóireachta próifíle ann diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 22df0fe8d6..475ffa70a0 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -1499,6 +1499,7 @@ gl: your_appeal_rejected: A apelación foi rexeitada edit_profile: other: Outros + privacy_redesign_body: A opción para mostrar a quen segues e quen te segue agora está no teu perfil. redesign_body: Agora podes acceder á edición do perfil directamente desde a páxina do perfil. redesign_button: Ir á edición redesign_title: Hai novidades no xeito en que podes editar o perfil diff --git a/config/locales/he.yml b/config/locales/he.yml index 0d0d706409..59617180e2 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -1541,6 +1541,7 @@ he: your_appeal_rejected: ערעורך נדחה edit_profile: other: אחר + privacy_redesign_body: הבחירה אם להראות את העוקבים והנעקבים שלך עברה להפעלה ישירה מהפרופיל שלך. redesign_body: ניתן להגיע לעריכת הפרופיל ישירות מעמוד הפרופיל. redesign_button: לך לשם redesign_title: מעתה מוצעת חוויית עריכת פרופיל חדשה diff --git a/config/locales/is.yml b/config/locales/is.yml index 540072beb6..34b740247a 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -1503,6 +1503,7 @@ is: your_appeal_rejected: Áfrýjun þinni hefur verið hafnað edit_profile: other: Annað + privacy_redesign_body: Valkosturinn að birta fylgjendur þína og það sem þú fylgist með er núna framkvæmdur beint í notandasniðinu þínu. redesign_body: Núna er hægt að breyta notandasíðunni sinni beint á þeirri síðu. redesign_button: Fara þangað redesign_title: Núna er ný aðferð við að breyta notandasíðunni sinni diff --git a/config/locales/it.yml b/config/locales/it.yml index c0c7df8175..c532c596d8 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -1499,6 +1499,7 @@ it: your_appeal_rejected: Il tuo appello è stato respinto edit_profile: other: Altro + privacy_redesign_body: Ora puoi scegliere se mostrare i tuoi account seguiti e i follower direttamente dal tuo profilo. redesign_body: Ora è possibile modificare il profilo direttamente dalla pagina del profilo stesso. redesign_button: Vai lì redesign_title: È disponibile una nuova esperienza di modifica del profilo diff --git a/config/locales/ko.yml b/config/locales/ko.yml index e1eb547236..be8f0f71b3 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -53,6 +53,7 @@ ko: label: 역할 변경 no_role: 역할 없음 title: "%{username}의 역할 변경" + collections: 컬렉션 confirm: 신원 확인 confirmed: 확인됨 confirming: 확인 중 @@ -262,6 +263,7 @@ ko: demote_user_html: "%{name} 님이 사용자 %{target} 님을 강등했습니다" destroy_announcement_html: "%{name} 님이 공지 %{target}을 삭제했습니다" destroy_canonical_email_block_html: "%{name} 님이 %{target} 해시를 가진 이메일을 차단 해제했습니다" + destroy_collection_html: "%{name} 님이 %{target} 님의 컬렉션을 삭제했습니다" destroy_custom_emoji_html: "%{name} 님이 에모지 %{target}를 삭제했습니다" destroy_domain_allow_html: "%{name} 님이 %{target} 도메인과의 연합을 금지했습니다" destroy_domain_block_html: "%{name} 님이 도메인 %{target}의 차단을 해제했습니다" @@ -301,6 +303,7 @@ ko: unsilence_account_html: "%{name} 님이 %{target}의 계정에 대한 제한을 해제했습니다" unsuspend_account_html: "%{name} 님이 %{target}의 계정에 대한 정지를 해제했습니다" update_announcement_html: "%{name} 님이 공지사항 %{target}을 갱신했습니다" + update_collection_html: "%{name} 님이 %{target} 님의 컬렉션을 수정했습니다" update_custom_emoji_html: "%{name} 님이 에모지 %{target}를 업데이트 했습니다" update_domain_block_html: "%{name} 님이 %{target}에 대한 도메인 차단을 갱신했습니다" update_ip_block_html: "%{name} 님이 IP 규칙 %{target}을 수정했습니다" @@ -336,6 +339,22 @@ ko: unpublish: 게시 취소 unpublished_msg: 공지가 성공적으로 발행 취소되었습니다! updated_msg: 공지가 성공적으로 업데이트되었습니다! + collections: + accounts: 계정 + back_to_account: 계정 페이지로 돌아가기 + back_to_report: 신고 페이지로 돌아가기 + batch: + add_to_report: '신고 #%{id}에 추가' + remove_from_report: 신고에서 제거 + report: 신고 + collection_title: "%{name}의 컬렉션" + contents: 컨텐츠 + no_collection_selected: 아무 것도 선택되지 않아 어떤 컬렉션도 바뀌지 않았습니다 + number_of_accounts: + other: 계정 %{count}개 + open: 열기 + title: 계정 컬렉션 - @%{name} + view_publicly: 공개시점으로 보기 critical_update_pending: 긴급 업데이트 보류 중 custom_emojis: assign_category: 분류 지정 @@ -465,9 +484,68 @@ ko: title: 새 이메일 도메인 차단 no_email_domain_block_selected: 아무 것도 선택 되지 않아 어떤 이메일 도메인 차단도 변경되지 않았습니다 not_permitted: 허용하지 않음 + reset: 초기화 resolved_dns_records_hint_html: 도메인 네임은 다음의 MX 도메인으로 연결되어 있으며, 이메일을 받는데 필수적입니다. MX 도메인을 차단하면 같은 MX 도메인을 사용하는 어떤 이메일이라도 가입할 수 없게 되며, 보여지는 도메인이 다르더라도 적용됩니다. 주요 이메일 제공자를 차단하지 않도록 조심하세요. resolved_through_html: "%{domain}을 통해 리졸빙됨" + search: 검색 title: 차단된 이메일 도메인 + email_subscriptions: + accounts: + account: 계정 + active: 활성 + empty: + hint: 구독자를 가진 계정이 없습니다. + no_lists_yet: 리스트가 없습니다 + inactive: 비활성 + last_email: 최근 이메일 + status: 상태 + subscribers: 구독자 + title: 메일링 리스트 + additional_footer_texts: + show: + title: 추가 하단 텍스트 + compliance_settings: + additional_footer_text: + action: 관리 + hint: 뉴스레터 이메일의 최하단에만 보여지는 선택적인 텍스트 + title: 추가 하단 텍스트 + lead: 이메일 뉴스레터는 운영하는 지역에 따라 마케팅 이메일로 분류될 수 있습니다. + privacy_policy: + action: 관리 + hint: 이 정책은 모든 메일 하단에 링크됩니다 + title: 개인정보처리방침 + title: 법적 규정 준수 설정 + danger_zone: + disable_feature: + action: 비활성화 + hint: 모든 계정에 대해 기능 비활성화 + title: 기능 비활성화 + erase_all_data: + action: 데이터 삭제 + hint: 메일링 리스트에 있는 이메일을 영구적으로 삭제합니다 + title: 데이터 모두 삭제 + title: 위험한 영역 + index: + disabled: + cannot_be_enabled: 이 서버의 기술제공자가 이 기능을 활성화하지 않았습니다. + description: 이 기능은 지정된 계정들이 프로필에 위젯을 추가해 마스토돈 계정 없이도 이메일을 통해 게시물을 받아볼 수 있도록 허용합니다. + get_started: 시작하기 + title: 이메일 뉴스레터 + roles: + accounts: 계정 + edit_role: 역할 편집 + empty: + hint: 이 기능을 사용할 수 있는 권한을 가진 사람이 없습니다. + no_roles_added: 역할 추가되지 않음 + manage_roles: 역할 관리 + role_name: 역할 이름 + title: 역할 + setups: + show: + enable_feature: 기능 활성화 + important_information: 중요한 정보 + list: + 1_permission_explanation: 이 기능이 활성화 되면 관련 권한을 가진 계정은 프로필에 이메일 컬렉션을 추가할 수 있게 됩니다. export_domain_allows: new: title: 도메인 허용 목록 불러오기 @@ -648,6 +726,7 @@ ko: action_log: 감사 로그 action_taken_by: 신고 처리자 actions: + delete_description_html: 신고된 게시물 또는 컬렉션은 삭제될 것이며 이 처벌기록은 같은 계정의 향후 규정 위반에 대해 참고사항으로 쓰일 수 있도록 저장됩니다. mark_as_sensitive_description_html: 신고된 게시물의 미디어는 민감함으로 표시될 것이며 이 처벌기록은 같은 계정의 향후 규정 위반에 대해 참고사항으로 쓰일 수 있도록 저장됩니다. other_description_html: 계정 동작을 제어하고 신고된 계정과의 의사소통을 사용자 지정하기 위한 추가 옵션을 봅니다. resolve_description_html: 신고된 계정에 대해 아무런 동작도 취하지 않으며, 처벌기록이 남지 않으며, 신고는 처리됨으로 변경됩니다. @@ -667,12 +746,14 @@ ko: cancel: 취소 category: 카테고리 category_description_html: 이 계정 또는 게시물이 신고된 이유는 신고된 계정과의 의사소통 과정에 인용됩니다 + collections: 컬렉션(%{count}개) comment: none: 없음 comment_description_html: '더 많은 정보를 위해, %{name} 님이 작성했습니다:' confirm: 확정 confirm_action: "@%{acct}에 취할 중재 결정에 대한 확인" created_at: 신고 시각 + delete_and_resolve: 컨텐츠 삭제 forwarded: 전달됨 forwarded_replies_explanation: 이 신고는 리모트 사용자가 리모트 컨텐츠에 대해 신고한 것입니다. 이것은 신고된 내용이 로컬 사용자에 대한 답글이기 때문에 첨부되었습니다. forwarded_to: "%{domain}에게 전달됨" @@ -695,11 +776,13 @@ ko: report: '신고 #%{id}' reported_account: 신고 대상 계정 reported_by: 신고자 + reported_content: 신고된 컨텐츠 reported_with_application: 신고에 사용된 앱 resolved: 해결 resolved_msg: 신고를 잘 해결했습니다! skip_to_actions: 작업으로 건너뛰기 status: 상태 + statuses: 게시물 (%{count}) statuses_description_html: 문제가 되는 콘텐츠는 신고된 계정에게 인용되어 전달됩니다 summary: action_preambles: @@ -733,6 +816,7 @@ ko: categories: administration: 관리 devops: 데브옵스 + email: 이메일 invites: 초대 moderation: 중재 special: 특수 @@ -748,6 +832,7 @@ ko: administrator_description: 이 권한을 가진 사용자는 모든 권한을 우회합니다 delete_user_data: 사용자 데이터 삭제 delete_user_data_description: 사용자가 다른 사용자의 데이터를 지체 없이 삭제할 수 있도록 허용 + invite_bypass_approval: 심사 없이 사용자 초대 invite_users: 사용자 초대 invite_users_description: 사용자가 다른 사람들을 서버에 초대할 수 있도록 허용 manage_announcements: 공지 관리 @@ -758,6 +843,8 @@ ko: manage_blocks_description: 사용자가 이메일 제공자와 IP 주소를 차단할 수 있도록 허용 manage_custom_emojis: 커스텀 에모지 관리 manage_custom_emojis_description: 사용자가 서버의 커스텀 에모지를 관리할 수 있도록 허용 + manage_email_subscriptions: 이메일 구독 관리 + manage_email_subscriptions_description: 이 권한을 가진 계정들이 본인들의 계정에 이메일 뉴스레터를 활성화할 수 있도록 허용합니다 manage_federation: 연합 관리 manage_federation_description: 사용자가 다른 도메인과의 연합을 차단하거나 허용할 수 있도록 하고, 전달 가능 여부를 조정할 수 있도록 허용 manage_invites: 초대 관리 @@ -786,6 +873,7 @@ ko: view_devops_description: Sidekiq과 pgHero 대시보드에 접근할 수 있도록 허용 view_feeds: 실시간 및 화제 피드 보기 view_feeds_description: 서버 설정에 관계 없이 실시간과 해시태그 피드에 접근할 수 있도록 허용 + requires_2fa: 2단계 인증 필요 title: 역할 rules: add_new: 규칙 추가 @@ -827,6 +915,7 @@ ko: title: 사용자들이 기본적으로 검색엔진에 인덱싱되지 않도록 합니다 discovery: follow_recommendations: 팔로우 추천 + preamble: 흥미로운 콘텐츠를 노출하는 것은 마스토돈을 알지 못할 수도 있는 신규 사용자를 유입시키는 데 중요합니다. 이 서버에서 작동하는 다양한 발견하기 기능을 제어합니다. privacy: 개인정보 profile_directory: 프로필 책자 public_timelines: 공개 타임라인 @@ -843,6 +932,17 @@ ko: authenticated: 로그인한 사용자들만 disabled: 특정한 사용자 역할 필요 public: 모두 + landing_page: + hints: + about_html: 이 서버의 설명, 연락처, 규칙과 기타 정보들을 보여주는 페이지. + local_feed_html: 이 서버 사용자의 최신 게시물을 보여주는 페이지. + overview_html: 이 서버 사용자의 최근 게시물과 함께 서버의 정보를 보여주는 페이지. + trends_html: 이 서버에서 지금 인기를 얻고 있는 것들을 보여주는 페이지. + values: + about: 정보 페이지 + local_feed: 로컬 실시간 피드 + overview: 개요 + trends: 유행중 registrations: moderation_recommandation: 모두에게 가입을 열기 전에 적절하고 반응이 빠른 중재 팀을 데리고 있는지 확인해 주세요! preamble: 누가 이 서버에 계정을 만들 수 있는지 제어합니다. @@ -862,6 +962,7 @@ ko: site_uploads: delete: 업로드한 파일 삭제 destroyed_msg: 사이트 업로드를 성공적으로 삭제했습니다! + skip_to_content: 내용으로 건너뛰기 software_updates: critical_update: 긴급 — 빠른 업데이트 요망 description: 최신 수정 사항과 기능을 활용하기 위해 Mastodon 설치를 최신 상태로 유지하기를 권장합니다. 더욱이, 때로는 보안 문제를 피하기 위해 Mastodon을 적절한 시점에 긴급 업데이트해야 하는 경우도 있습니다. 따라서 Mastodon은 30분마다 업데이트를 확인하며, 이메일 알림 환경설정에 따라 사용자에게 알려드립니다. @@ -1236,6 +1337,7 @@ ko: progress: confirm: 이메일 확인 details: 세부사항 + list: 가입 절차 review: 심사 결과 rules: 규정을 수락합니다. providers: @@ -1251,6 +1353,7 @@ ko: invited_by: '당신이 받은 초대장 덕분에 %{domain}에 가입할 수 있습니다:' preamble: 다음은 %{domain}의 중재자들에 의해 설정되고 적용되는 규칙들입니다. preamble_invited: 계속하기 전에, %{domain}의 중재자들이 정해놓은 규칙들을 검토해주세요. + read_more: 더 보기 title: 몇 개의 규칙이 있습니다. title_invited: 초대를 받았습니다. security: 보안 @@ -1370,6 +1473,31 @@ ko: your_appeal_rejected: 소명이 기각되었습니다 edit_profile: other: 기타 + redesign_body: 프로필 편집은 이제 프로필 페이지에서 바로 접근할 수 있습니다. + redesign_button: 이동 + redesign_title: 새로운 프로필 편집 경험이 기다립니다 + email_subscription_mailer: + confirmation: + action: 이메일 주소 확인 + subject: 이메일 주소 확인 + notification: + create_account: 마스토돈 계정 생성 + subject: + plural: "%{name}의 새 게시물" + singular: '새 게시물: "%{excerpt}"' + title: + plural: "%{name}의 새 게시물" + singular: '새 게시물: "%{excerpt}"' + email_subscriptions: + active: 활성 + confirmations: + show: + changed_your_mind: 마음이 바뀌었나요? + title: 가입되었습니다 + unsubscribe: 구독 해제 + inactive: 비활성 + status: 상태 + subscribers: 구독자 emoji_styles: auto: 자동 native: 시스템 기본 @@ -1403,7 +1531,9 @@ ko: blocks: 차단 bookmarks: 북마크 csv: CSV + custom_filters: 필터 domain_blocks: 도메인 차단 + json: JSON lists: 리스트 mutes: 뮤트 storage: 미디어 @@ -1627,6 +1757,26 @@ ko: copy_account_note_text: '이 사용자는 %{acct}로부터 이동하였습니다. 당신의 이전 노트는 이렇습니다:' navigation: toggle_menu: 토글 메뉴 + notification_fallbacks: + added_to_collection: + title_html: "%{name} 님이 나를 컬렉션에 추가했습니다" + admin_report: + title_html: "%{name} 님이 %{target}을 신고했습니다" + admin_sign_up: + title_and_others_html: + other: "%{name} 님 외 %{count} 명이 가입했습니다" + title_html: "%{name} 님이 가입했습니다" + collection_update: + title_html: "%{name} 님이 내가 있는 컬렉션을 수정했습니다" + generic: + sign_in: 마스토돈 웹 앱으로 로그인 + summary_html: 최신 마스토돈 버전을 지원하지 않는 앱을 사용 중입니다. 모든 기능을 이용하려면 %{link}. + moderation_warning: + summary_html: 최신 마스토돈 버전을 지원하지 않는 앱을 사용 중입니다. %{link}. + title: 중재 경고를 받았습니다. + severed_relationships: + summary_html: "%{from}의 관리자가 %{target}를 정지했기 때문에 더이상 새로운 정보를 받아보거나 상호작용할 수 없습니다. %{link}를 통해 잃어버린 관계 목록을 받아볼 수 있습니다." + title: "%{name} 님과의 연결이 끊어졌습니다" notification_mailer: admin: report: @@ -1651,16 +1801,22 @@ ko: body: "%{name} 님이 나를 멘션했습니다:" subject: "%{name} 님의 멘션" title: 새 답글 + moderation_warning: + subject: 중재 경고를 받았습니다 poll: subject: "%{name}의 설문이 종료됨" quote: body: '당신의 게시물을 %{name} 님이 인용했습니다:' subject: "%{name} 님이 내 게시물을 인용했습니다" title: 새 인용 + quoted_update: + subject: "%{name} 님이 내가 인용한 게시물을 수정했습니다" reblog: body: '당신의 게시물을 %{name} 님이 부스트 했습니다:' subject: "%{name} 님이 내 게시물을 부스트 했습니다" title: 새 부스트 + severed_relationships: + subject: 중재 결정으로 인해 연결이 끊어졌습니다 status: subject: "%{name} 님이 방금 게시물을 올렸습니다" update: @@ -1713,6 +1869,7 @@ ko: posting_defaults: 게시물 기본설정 public_timelines: 공개 타임라인 privacy: + email_subscriptions: 이메일로 게시물 보내기 hint_html: "내 프로필과 게시물이 어떻게 발견될지를 제어합니다. 활성화 하면 마스토돈의 다양한 기능들이 내가 더 많은 사람에게 도달할 수 있도록 도와줍니다. 이 설정이 내 용도에 맞는지 잠시 검토하세요." privacy: 개인정보 privacy_hint_html: 다른 이들을 위해 노출할 수 있는 정보의 양을 조절합니다. 누군가는 다른 이들의 팔로우를 둘러보고 어떤 앱에서 게시물을 올렸는지 살피면서 흥미로운 프로필과 멋진 앱을 발견할 수 있지만, 누군가는 이를 숨기고 싶을 수도 있겠죠. @@ -1898,9 +2055,11 @@ ko: enabled: 오래된 게시물 자동 삭제 enabled_hint: 아래의 예외 목록에 해당하지 않는다면, 명시된 기한 이후 당신의 게시물을 자동으로 삭제합니다 exceptions: 예외 + explanation: 자동 삭제는 낮은 우선순위로 동작합니다. 임계값에 다다르고 삭제되는 사이엔 지연이 존재할 수 있습니다. ignore_favs: 좋아요 무시 ignore_reblogs: 부스트 무시 interaction_exceptions: 상호작용에 기반한 예외들 + interaction_exceptions_explanation: 잠깐동안 즐겨찾기나 부스트 임계값을 넘긴 경우 나중에 값이 감소하더라도 게시물이 남아있을 수 있습니다. keep_direct: 다이렉트 메시지 유지 keep_direct_hint: 다이렉트 메시지를 삭제하지 않습니다 keep_media: 미디어가 있는 게시물 유지 @@ -1967,7 +2126,27 @@ ko: recovery_codes: 복구 코드 recovery_codes_regenerated: 복구 코드가 다시 생성되었습니다 recovery_instructions_html: 휴대전화를 분실한 경우, 아래 복구 코드 중 하나를 사용해 계정에 접근할 수 있습니다. 복구 코드는 안전하게 보관해 주십시오. 이 코드를 인쇄해 중요한 서류와 함께 보관하는 것도 좋습니다. + resume_app_authorization: 앱 인증으로 돌아가기 + role_requirement: "%{domain}은 마스토돈을 사용하기 전에 2단계 인증을 필수로 설정해야 합니다." webauthn: 보안 키 + unsubscriptions: + create: + action: 서버 홈페이지로 이동 + email_subscription: + confirmation_html: "%{name}로부터 더이상 메일을 받지 않게 됩니다." + title: 구독이 해지되었습니다 + notification_emails: + favourite: 좋아요 알림 이메일 + follow: 팔로우 알림 이메일 + follow_request: 팔로우 요청 이메일 + mention: 멘션 알림 이메일 + reblog: 부스트 알림 이메일 + show: + action: 구독 해지 + email_subscription: + title: "%{name} 구독을 해지할까요?" + user: + title: "%{type} 구독을 해지할까요?" user_mailer: announcement_published: description: "%{domain}의 관리자가 공지사항을 게시했습니다:" @@ -2116,4 +2295,5 @@ ko: otp_required: 보안 키를 사용하기 위해서는 2단계 인증을 먼저 활성화 해 주세요 registered_on: "%{date}에 등록됨" wrapstodon: + description: "%{name} 님이 마스토돈을 어떻게 사용했는지 확인해봅시다!" title: "%{name} 님의 %{year} 랩스토돈" diff --git a/config/locales/lv.yml b/config/locales/lv.yml index 2bce60de22..68515865c4 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -709,7 +709,7 @@ lv: actions: delete_html: Noņemt aizskarošos ierakstus mark_as_sensitive_html: Atzīmēt aizskarošo ierakstu informācijas nesējus kā jūtīgus - silence_html: Ievērojami ierobežo @%{acct} sasniedzamību, padarot viņa profilu un saturu redzamu tikai cilvēkiem, kas jau seko tam vai pašrocīgi uzmeklē profilu + silence_html: Ievērojami ierobežo @%{acct} sasniedzamību, padarot profilu un saturu redzamu tikai cilvēkiem, kas jau seko vai pašrocīgi uzmeklē profilu suspend_html: apturēs @%{acct} darbību, padarot profilu un saturu nepieejamu un neiespējamu mijiedarboties ar to; close_report: 'Atzīmēt ziņojumu #%{id} kā atrisinātu' close_reports_html: atzīmēs visus ziņojumus par @%{acct} kā atrisinātus; @@ -1114,8 +1114,8 @@ lv: rotate_secret: Pagriezt noslēpumu secret: Paraksta noslēpums status: Stāvoklis - title: Tīmekļa āķi - webhook: Tīmekļa āķis + title: Tīmekļa aizķeres + webhook: Tīmekļa aizķere admin_mailer: auto_close_registrations: body: Nesenu satura pārraudzības darbību trūkuma dēļ reģistrācija %{instance} ir automātiski pārslēgta nepieciešamība pēc pašrocīgas izskatīšanas, lai novērstu %{instance} izmantošana kā platformu iespējami sliktiem dalībniekiem. Jebkurā brīdī var ieslēgt atpakaļ atvērtu reģistrēšanos. @@ -2003,6 +2003,7 @@ lv: agreement: Ar %{domain} izmantošanas tuprināšanu tiek piekrists šiem noteikumiem. Ja ir iebildumi pret atjauninātajiem noteikumiem, savu piekrišanu var atcelt jebkurā laikā ar sava konta izdzēšanu. changelog: 'Šeit īsumā ir aprakstīts, ko šis atjauninājums nozīmē:' description: 'Šis e-pasta ziņojums tika saņemts, jo mēs veicam dažas izmaiņas savos pakalpojuma izmantošanas noteikumos %{domain}. Šie atjauninājumi stāsies spēkā %{date}. Mēs aicinām pārskatīt pilnus atjauninātos noteikumus šeit:' + description_html: Šis e-pasta ziņojums tika saņemts, jo mēs veicam dažas izmaiņas savos pakalpojuma izmantošanas noteikumos %{domain}. Šie atjauninājumi stāsies spēkā %{date}. Mēs aicinām pārskatīt pilnus atjauninātos noteikumus šeit. sign_off: "%{domain} komanda" subject: Mūsu pakalpojuma izmantošanas noteikumu atjauninājumi subtitle: Mainās %{domain} pakalpojuma izmantošanas noteikumi diff --git a/config/locales/nan-TW.yml b/config/locales/nan-TW.yml index 587cb4a49c..f47c462289 100644 --- a/config/locales/nan-TW.yml +++ b/config/locales/nan-TW.yml @@ -730,6 +730,7 @@ nan-TW: action_log: 審查日誌 action_taken_by: 操作由 actions: + delete_description_html: 受檢舉ê PO文(以及/á是)收藏ē thâi掉,而且ē用tsi̍t ue̍h橫tsuā記錄,幫tsān lí提升kâng tsi̍t ê用戶未來ê違規。 mark_as_sensitive_description_html: 受檢舉ê PO文內ê媒體ē標做敏感,而且ē用tsi̍t ue̍h橫tsuā記錄,幫tsān lí提升kâng tsi̍t ê用戶未來ê違規。 other_description_html: 看其他控制tsit ê口座ê所行,kap自訂聯絡受檢舉ê口座ê選項。 resolve_description_html: Buē用行動控制受檢舉ê口座,mā無用橫tsuā記錄,而且tsit ê報告ē關掉。 @@ -756,6 +757,7 @@ nan-TW: confirm: 確認 confirm_action: 確認kā %{acct} 管理ê動作 created_at: 檢舉tī + delete_and_resolve: Thâi掉內容 forwarded: 轉送ah forwarded_replies_explanation: 本報告是tuì別站ê用者送ê,關係別站ê內容。本報告轉hōo lí,因為受檢舉ê內容是回應lí ê服侍器ê用者。 forwarded_to: 有轉送kàu %{domain} @@ -935,6 +937,10 @@ nan-TW: authenticated: Kan-ta hōo登入ê用者 disabled: 愛特別ê用者角色 public: Ta̍k lâng + landing_page: + hints: + about_html: 關係tsit臺服侍器ê敘述、聯絡資訊、規則kap其他資訊ê頁。 + local_feed_html: 展示tsit臺服侍器用者ê上新PO文ê即時內容。 registrations: moderation_recommandation: 佇開放hōo ta̍k ê lâng註冊進前,請確認lí有夠額koh主動反應ê管理團隊! preamble: 控制ē當佇lí ê服侍器註冊ê人。 diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 9a3c7a68df..6caa2d68a2 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -1499,6 +1499,7 @@ nl: your_appeal_rejected: Jouw bezwaar is afgewezen edit_profile: other: Overige + privacy_redesign_body: Je kunt nu direct op je profiel de keuze maken om jouw volgers en wie jij volgt wel of niet te tonen. redesign_body: Het bewerken van je profiel is nu toegankelijk vanaf de profielpagina. redesign_button: Ga erheen redesign_title: Er is een nieuwe manier om je profiel te bewerken diff --git a/config/locales/nn.yml b/config/locales/nn.yml index 7c0bc6104b..cce7429ef8 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -865,6 +865,7 @@ nn: manage_custom_emojis: Handtere tilpassa emojiar manage_custom_emojis_description: Let brukarar handtere tilpassa emojiar på tenaren manage_email_subscriptions: Handter epostabonnement + manage_email_subscriptions_description: Lat folk med dette løyvet få bruke epostbrev-funksjonen på kontoen sin manage_federation: Handtere føderasjon manage_federation_description: Let brukarar blokkera eller tillata føderasjon med andre domener, samt styra kva som skal leverast manage_invites: Handsam innbydingar @@ -952,6 +953,9 @@ nn: authenticated: Berre godkjende brukarar disabled: Krev ei spesifikk brukarrolle public: Alle + landing_page: + hints: + about_html: Ei side med skildring, kontaktopplysingar, reglar og andre opplysingar om denne tenaren. registrations: moderation_recommandation: Pass på at du har mange og kjappe redaktørar og moderatorar på laget ditt før du opnar for allmenn registrering! preamble: Kontroller kven som kan oppretta konto på tenaren din. diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 5c912489de..3d83a2cb84 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -1718,6 +1718,7 @@ pl: disabled_account: Twoje obecne konto nie będzie później całkowicie użyteczne. Możesz jednak uzyskać dostęp do eksportu danych i ponownie aktywować je. followers: To działanie przeniesie wszystkich Twoich obserwujących z obecnego konta na nowe only_redirect_html: Możesz też po prostu skonfigurować przekierowanie na swój profil. + other_data: Żadne inne dane nie zostaną automatycznie przeniesione (w tym Twoje posty i konta, które obserwujesz) redirect: Twoje obecne konto zostanie uaktualnione o informację o przeniesieniu i wyłączone z wyszukiwania moderation: title: Moderacja @@ -1875,7 +1876,7 @@ pl: edge: Microsoft Edge electron: Electron firefox: Firefox - generic: nieznana przeglądarka + generic: Nieznana przeglądarka huawei_browser: Przeglądarka Huawei ie: Internet Explorer micro_messenger: MicroMessenger diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 4fdf40888e..ad71ba1dde 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -31,7 +31,7 @@ pt-BR: action: Efetuar uma ação already_silenced: Esta conta já foi limitada. already_suspended: Esta conta já foi suspensa. - title: Moderar %{acct} + title: Executar ação de moderação em %{acct} account_moderation_notes: create: Deixar nota created_msg: Nota de moderação criada! @@ -53,30 +53,30 @@ pt-BR: change_role: changed_msg: Cargo alterado com sucesso! edit_roles: Gerenciar cargos do usuário - label: Alterar função + label: Alterar cargo no_role: Nenhum cargo title: Alterar cargo de %{username} collections: Coleções confirm: Confirmar confirmed: Confirmado confirming: Confirmando - custom: Personalizar + custom: Personalizado delete: Excluir dados deleted: Excluído demote: Rebaixar destroyed_msg: Os dados de %{username} estão na fila para serem excluídos em breve disable: Congelar - disable_sign_in_token_auth: Desativar autenticação via token por email + disable_sign_in_token_auth: Desativar token de autenticação por e-mail disable_two_factor_authentication: Desativar autenticação de dois fatores - disabled: Congelada + disabled: Desativada display_name: Nome de exibição domain: Domínio edit: Editar email: E-mail email_status: Estado do e-mail enable: Descongelar - enable_sign_in_token_auth: Ativar autenticação via token por email - enabled: Ativada + enable_sign_in_token_auth: Ativar token de autenticação por e-mail + enabled: Ativado enabled_msg: A conta de %{username} foi descongelada followers: Seguidores follows: Seguindo @@ -93,9 +93,9 @@ pt-BR: title: Localização login_status: Situação da conta media_attachments: Anexos de mídia - memorialize: Converter em memorial - memorialized: Convertidas em memorial - memorialized_msg: A conta de %{username} foi transformada em uma conta memorial + memorialize: Converter em memoriam + memorialized: Convertidas em memoriam + memorialized_msg: "%{username} transformada com sucesso em uma conta memorial" moderation: active: Ativa all: Todas @@ -129,8 +129,8 @@ pt-BR: remote_suspension_reversible_hint_html: A conta foi suspensa em seu servidor, e todos os dados serão removidos em %{date}. Até lá, o servidor remoto pode restaurar essa conta sem nenhum efeito negativo. Se você quer remover todos os dados desta conta imediatamente, você pode fazer isso abaixo. remove_avatar: Remover imagem de perfil remove_header: Remover capa - removed_avatar_msg: A imagem de perfil de %{username} foi removida - removed_header_msg: A capa de %{username} foi removida + removed_avatar_msg: Imagem de perfil de %{username} removida com sucesso + removed_header_msg: Imagem de capa de %{username} removida com sucesso resend_confirmation: already_confirmed: Este usuário já está confirmado send: Reenviar link de confirmação @@ -146,8 +146,8 @@ pt-BR: security_measures: only_password: Apenas senha password_and_2fa: Senha e autenticação de dois fatores - sensitive: Sensíveis - sensitized: Marcadas como sensíveis + sensitive: Marcar como sensível + sensitized: Marcada como sensível shared_inbox_url: Link da caixa de entrada compartilhada show: created_reports: Denúncias criadas @@ -165,11 +165,11 @@ pt-BR: unblock_email: Desbloquear endereço de e-mail unblocked_email_msg: O endereço de e-mail de %{username} foi desbloqueado unconfirmed_email: E-mail não confirmado - undo_sensitized: Desfazer sensível - undo_silenced: Desfazer silêncio + undo_sensitized: Desmarcar como sensível + undo_silenced: Dessilenciar undo_suspension: Desfazer suspensão - unsilenced_msg: As limitações da conta de %{username} foram removidas - unsubscribe: Cancelar inscrição + unsilenced_msg: "%{username} dessilenciado com sucesso" + unsubscribe: Desinscrever unsuspended_msg: A suspensão da conta de %{username} foi removida username: Nome de usuário view_domain: Ver resumo para o domínio @@ -186,22 +186,22 @@ pt-BR: confirm_user: Confirmar usuário create_account_warning: Criar aviso create_announcement: Criar anúncio - create_canonical_email_block: Criar bloqueio de Email + create_canonical_email_block: Criar bloqueio de e-mail create_custom_emoji: Criar emoji personalizado - create_domain_allow: Permitir domínio - create_domain_block: Bloquear domínio - create_email_domain_block: Criar Bloqueio de Domínio de Email + create_domain_allow: Criar permissão de domínio + create_domain_block: Criar bloqueio de domínio + create_email_domain_block: Criar bloqueio de domínio de e-mail create_ip_block: Criar regra de IP - create_relay: Criar Retransmissão + create_relay: Criar retransmissor create_unavailable_domain: Criar domínio indisponível - create_user_role: Criar função + create_user_role: Criar cargo create_username_block: Criar regra de usuário demote_user: Rebaixar usuário destroy_announcement: Excluir anúncio - destroy_canonical_email_block: Deletar bloqueio de Email + destroy_canonical_email_block: Excluir bloqueio de e-mail destroy_custom_emoji: Excluir emoji personalizado - destroy_domain_allow: Excluir domínio permitido - destroy_domain_block: Desbloquear domínio + destroy_domain_allow: Excluir permissão de domínio + destroy_domain_block: Excluir bloqueio de domínio destroy_email_domain_block: Deletar bloqueio de domínio Email destroy_instance: Limpar domínio destroy_ip_block: Excluir regra de IP @@ -391,7 +391,7 @@ pt-BR: title: Emojis personalizados uncategorized: Não categorizado unlist: Não listar - unlisted: Não-listado + unlisted: Não listado update_failed_msg: Não foi possível atualizar esse emoji updated_msg: Emoji atualizado! upload: Enviar @@ -1499,6 +1499,7 @@ pt-BR: your_appeal_rejected: Sua revisão foi rejeitada edit_profile: other: Outro + privacy_redesign_body: A escolha de exibir seu seguindo e seguidores agora é feita diretamente de seu perfil. redesign_body: A edição de perfil pode ser acessada diretamente a partir da página de perfil. redesign_button: Ir para lá redesign_title: Há uma nova experiência de edição de perfil diff --git a/config/locales/simple_form.ar.yml b/config/locales/simple_form.ar.yml index e28e4c38a1..fd5c90cafb 100644 --- a/config/locales/simple_form.ar.yml +++ b/config/locales/simple_form.ar.yml @@ -56,7 +56,6 @@ ar: setting_aggregate_reblogs: لا تقم بعرض المشارَكات الجديدة لمنشورات قد قُمتَ بمشاركتها سابقا (هذا الإجراء يعني المشاركات الجديدة فقط التي تلقيتَها) setting_always_send_emails: عادة لن تُرسَل إليك إشعارات البريد الإلكتروني عندما تكون نشطًا على ماستدون setting_default_sensitive: تُخفى الوسائط الحساسة تلقائيا ويمكن اظهارها عن طريق النقر عليها - setting_system_scrollbars_ui: ينطبق فقط على متصفحات سطح المكتب البنية على محرك كروم وسفاري setting_use_blurhash: الألوان التدرّجية مبنية على ألوان المرئيات المخفية ولكنها تحجب كافة التفاصيل setting_use_pending_items: إخفاء تحديثات الخط وراء نقرة بدلًا مِن التمرير التلقائي للموجزات username: يمكنك استخدام الأحرف والأرقام والسطور السفلية diff --git a/config/locales/simple_form.az.yml b/config/locales/simple_form.az.yml index 44044e9dbb..c9edd4be9b 100644 --- a/config/locales/simple_form.az.yml +++ b/config/locales/simple_form.az.yml @@ -10,7 +10,6 @@ az: setting_aggregate_reblogs: Təzəlikcə təkrar paylaşılmış göndərişlər üçün yeni təkrar paylaşımlar göstərilməsin (yalnız yeni alınan təkrar paylaşımlara təsir edir). setting_always_send_emails: Normalda, Mastodon-u aktiv olaraq istifadə etdiyiniz zaman e-poçt bildirişləri göndərilməyəcək setting_default_sensitive: Həssas media, ilkin olaraq gizlədilir və bir kliklə göstərilə bilər - setting_system_scrollbars_ui: Yalnız Safari və Chrome əaslı masaüstü brauzerlərinə tətbiq olunur setting_use_blurhash: Meyillər, gizli vizualların rənglərinə əsaslanır, ancaq detalları gizlədir setting_use_pending_items: Lenti avtomatik diyirləmək əvəzinə, zaman xətti güncəlləmələrini tək bir kliklə gizlət domain_allow: diff --git a/config/locales/simple_form.be.yml b/config/locales/simple_form.be.yml index 31d00427a2..eeb5619af4 100644 --- a/config/locales/simple_form.be.yml +++ b/config/locales/simple_form.be.yml @@ -66,7 +66,6 @@ be: setting_display_media_show_all: Паказваць усе медыя без папярэджання, у тым ліку пазначаныя як адчувальныя setting_emoji_style: Як паказваць эмодзі. "Аўтаматычны" будзе намагацца выкарыстоўваць мясцовыя эмодзі, але для састарэлых браўзераў — Twemoji. setting_quick_boosting_html: Калі ўключана, націсканне на %{boost_icon} значок пашырэння адразу пашырыць допіс замест адкрыцця меню пашырэння/цытавання. Перасоўвае дзеянне цытавання ў меню %{options_icon} (выбару). - setting_system_scrollbars_ui: Працуе толькі ў камп'ютарных браўзерах на аснове Safari і Chrome setting_use_blurhash: Градыенты заснаваны на колерах схаваных выяў, але размываюць дэталі setting_use_pending_items: Схаваць абнаўленні стужкі за клікам замест аўтаматычнага пракручвання стужкі username: Вы можаце выкарыстоўваць літары, лічбы і падкрэсліванне diff --git a/config/locales/simple_form.bg.yml b/config/locales/simple_form.bg.yml index e9f1344789..71f2be0ef7 100644 --- a/config/locales/simple_form.bg.yml +++ b/config/locales/simple_form.bg.yml @@ -57,7 +57,6 @@ bg: setting_always_send_emails: Обикновено известията по имейл няма да са изпратени при дейна употреба на Mastodon setting_default_sensitive: Деликатната мултимедия е скрита по подразбиране и може да се разкрие с едно щракване setting_emoji_style: Как се показват емоджита. "Автоматично" ще опита да използва естествените за системата емоджита, но се връща към Twemoji за остарели браузъри. - setting_system_scrollbars_ui: Прилага се само към настолни браузъри, основаващи се на Safari и Chrome setting_use_blurhash: Преливането е въз основа на цветовете на скритите визуализации, но се замъгляват подробностите setting_use_pending_items: Да се показват обновявания на часовата ос само след щракване вместо автоматично превъртане на инфоканала username: Може да ползвате букви, цифри и долни черти diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml index 57cd5387e9..cde6a8c56d 100644 --- a/config/locales/simple_form.ca.yml +++ b/config/locales/simple_form.ca.yml @@ -59,7 +59,6 @@ ca: setting_default_quote_policy_unlisted: Quan la gent et citi la seva publicació estarà amagada de les línies de temps de tendències. setting_default_sensitive: El contingut sensible està ocult per defecte i es pot mostrar fent-hi clic setting_emoji_style: Com mostrar els emojis. "Automàtic" provarà de fer servir els emojis nadius, però revertirà a twemojis en els navegadors antics. - setting_system_scrollbars_ui: S'aplica només als navegadors d'escriptori basats en Safari i Chrome setting_use_blurhash: Els degradats es basen en els colors de les imatges ocultes, però n'enfosqueixen els detalls setting_use_pending_items: Amaga les actualitzacions de la línia de temps després de fer un clic, en lloc de desplaçar-les automàticament username: Pots emprar lletres, números i subratllats diff --git a/config/locales/simple_form.cs.yml b/config/locales/simple_form.cs.yml index 0741ab2a01..b5d51d7ce8 100644 --- a/config/locales/simple_form.cs.yml +++ b/config/locales/simple_form.cs.yml @@ -62,7 +62,6 @@ cs: setting_default_sensitive: Citlivá média jsou ve výchozím stavu skryta a mohou být zobrazena kliknutím setting_emoji_style: Jak se budou zobrazovat emoji. "Auto" zkusí použít výchozí emoji, ale pro starší prohlížeče použije Twemoji. setting_quick_boosting_html: Pokud je povoleno, kliknutím na %{boost_icon} Boost ikonu okamžitě boostnete místo otevření rozbalovací nabídky boost/citace. Přemístí citaci do nabídky %{options_icon} (Možnosti). - setting_system_scrollbars_ui: Platí pouze pro desktopové prohlížeče založené na Safari nebo Chrome setting_use_blurhash: Gradienty jsou vytvořeny na základě barvev skrytých médií, ale zakrývají veškeré detaily setting_use_pending_items: Aktualizovat časovou osu až po kliknutí namísto automatického rolování kanálu username: Pouze písmena, číslice a podtržítka diff --git a/config/locales/simple_form.cy.yml b/config/locales/simple_form.cy.yml index b1cbd97ef8..7def2ed55e 100644 --- a/config/locales/simple_form.cy.yml +++ b/config/locales/simple_form.cy.yml @@ -66,7 +66,6 @@ cy: setting_display_media_show_all: Dangos yr holl gyfryngau heb rybudd, gan gynnwys cyfryngau sydd wedi'u marcio fel rhai sensitif setting_emoji_style: Sut i arddangos emojis. Bydd "Awto" yn ceisio defnyddio emoji cynhenid, ond mae'n disgyn yn ôl i Twemoji ar gyfer porwyr traddodiadol. setting_quick_boosting_html: Pan fydd wedi'i alluogi, bydd clicio ar yr eicon Hwb %{boost_icon} yn rhoi hwb ar unwaith yn lle agor y gwymplen hwb/dyfynnu. Mae'n symud y weithred dyfynnu i'r ddewislen %{options_icon} (Dewisiadau). - setting_system_scrollbars_ui: Yn berthnasol i borwyr bwrdd gwaith yn seiliedig ar Safari a Chrome yn unig setting_use_blurhash: Mae graddiannau wedi'u seilio ar liwiau'r delweddau cudd ond maen nhw'n cuddio unrhyw fanylion setting_use_pending_items: Cuddio diweddariadau llinell amser y tu ôl i glic yn lle sgrolio'n awtomatig username: Gallwch ddefnyddio nodau, rhifau a thanlinellau diff --git a/config/locales/simple_form.da.yml b/config/locales/simple_form.da.yml index 6f6c3352fa..e48d12c05d 100644 --- a/config/locales/simple_form.da.yml +++ b/config/locales/simple_form.da.yml @@ -66,7 +66,6 @@ da: setting_display_media_show_all: Vis alle medier uden advarsel, inklusive medier markeret som følsomme setting_emoji_style: Hvordan emojis skal vises. "Auto" vil forsøge at bruge indbyggede emojis, men skifter tilbage til Twemoji i ældre webbrowsere. setting_quick_boosting_html: Når aktiveret, vil klik på %{boost_icon} fremhæv-ikonet straks fremhæve i stedet for at åbne fremhæv/citér-foldudmenuen. Flytter citeringshandlingen til %{options_icon} menuen (Indstillinger). - setting_system_scrollbars_ui: Gælder kun for desktop-browsere baseret på Safari og Chrome setting_use_blurhash: Gradienter er baseret på de skjulte grafikelementers farver, men slører alle detaljer setting_use_pending_items: Skjul tidslinjeopdateringer bag et klik i stedet for brug af auto-feedrulning username: Bogstaver, cifre og understregningstegn kan benyttes diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml index fb562719f1..fc1609442c 100644 --- a/config/locales/simple_form.de.yml +++ b/config/locales/simple_form.de.yml @@ -66,7 +66,6 @@ de: setting_display_media_show_all: Alle Medien anzeigen – auch Medien, die eine Inhaltswarnung enthalten setting_emoji_style: 'Wie Emojis dargestellt werden: „Automatisch“ verwendet native Emojis, für veraltete Browser wird jedoch Twemoji verwendet.' setting_quick_boosting_html: Dadurch wird der Beitrag beim Anklicken des %{boost_icon} Teilen-Symbols sofort geteilt, anstatt das Drop-down-Menü zu öffnen. Die Möglichkeit zum Zitieren wird dabei in %{options_icon} Mehr verschoben. - setting_system_scrollbars_ui: Betrifft nur Desktop-Browser, die auf Chrome oder Safari basieren setting_use_blurhash: Der Farbverlauf basiert auf den Farben der ausgeblendeten Medien, verschleiert aber jegliche Details setting_use_pending_items: Neue Beiträge hinter einem Klick verstecken, anstatt automatisch zu scrollen username: Du kannst Buchstaben, Zahlen und Unterstriche verwenden diff --git a/config/locales/simple_form.el.yml b/config/locales/simple_form.el.yml index 346b9e320f..91803cff7b 100644 --- a/config/locales/simple_form.el.yml +++ b/config/locales/simple_form.el.yml @@ -66,7 +66,6 @@ el: setting_display_media_show_all: Εμφάνιση όλων των πολυμέσων χωρίς προειδοποίηση, συμπεριλαμβανομένων των πολυμέσων που σημαίνονται ως ευαίσθητα setting_emoji_style: Πώς να εμφανίσετε emojis. Το "Αυτόματο" θα προσπαθήσει να χρησιμοποιήσει εγγενή emoji, αλλά πέφτει πίσω στο Twemoji για προγράμματα περιήγησης παλαιού τύπου. setting_quick_boosting_html: Όταν ενεργοποιηθεί, κάνοντας κλικ στο εικονίδιο %{boost_icon} Ενίσχυση θα ενισχύσει αμέσως αντί να ανοίξει το αναπτυσσόμενο μενού ενίσχυσης/παράθεσης. Μετακινεί την ενέργεια παράθεσης στο μενού %{options_icon} (Επιλογές). - setting_system_scrollbars_ui: Ισχύει μόνο για προγράμματα περιήγησης για υπολογιστή με βάση το Safari και το Chrome setting_use_blurhash: Οι διαβαθμίσεις βασίζονται στα χρώματα του κρυμμένου πολυμέσου αλλά θολώνουν τις λεπτομέρειες setting_use_pending_items: Εμφάνιση ενημερώσεων ροής μετά από κλικ αντί για αυτόματη κύλιση της ροής username: Μπορείς να χρησιμοποιήσεις γράμματα, αριθμούς και κάτω παύλες diff --git a/config/locales/simple_form.en-GB.yml b/config/locales/simple_form.en-GB.yml index 3e819c02f0..bf65caab4f 100644 --- a/config/locales/simple_form.en-GB.yml +++ b/config/locales/simple_form.en-GB.yml @@ -66,7 +66,6 @@ en-GB: setting_display_media_show_all: Show all media without warning, including media marked as sensitive setting_emoji_style: How to display emojis. "Auto" will try using native emoji, but falls back to Twemoji for legacy browsers. setting_quick_boosting_html: When enabled, clicking on the %{boost_icon} Boost icon will immediately boost instead of opening the boost/quote dropdown menu. Relocates the quoting action to the %{options_icon} (Options) menu. - setting_system_scrollbars_ui: Applies only to desktop browsers based on Safari and Chrome setting_use_blurhash: Gradients are based on the colours of the hidden visuals but obfuscate any details setting_use_pending_items: Hide timeline updates behind a click instead of automatically scrolling the feed username: You can use letters, numbers, and underscores diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml index d7acbff0b5..e2864be64f 100644 --- a/config/locales/simple_form.eo.yml +++ b/config/locales/simple_form.eo.yml @@ -59,7 +59,6 @@ eo: setting_default_quote_policy_unlisted: Kiam homoj citas vin, ilia afiŝo ankaŭ estos kaŝita de tendencaj templinioj. setting_default_sensitive: La tiklaj vidaŭdaĵoj estas implicite kaŝitaj kaj povas esti malkaŝitaj per alklako setting_emoji_style: Kiel montri emoĝiojn. "Aŭtomata" provos uzi denaskajn emoĝiojn, sed uzas Twemoji por malnovaj retumiloj. - setting_system_scrollbars_ui: Aplikas nur por surtablaj retumiloj baziĝas de Safari kaj Chrome setting_use_blurhash: Transirojn estas bazita sur la koloroj de la kaŝitaj aŭdovidaĵoj sed ne montri iun ajn detalon setting_use_pending_items: Kaŝi tempoliniajn ĝisdatigojn malantaŭ klako anstataŭ aŭtomate rulumi la fluon username: Vi povas uzi literojn, ciferojn kaj substrekojn diff --git a/config/locales/simple_form.es-AR.yml b/config/locales/simple_form.es-AR.yml index 178a0b5700..932f70c236 100644 --- a/config/locales/simple_form.es-AR.yml +++ b/config/locales/simple_form.es-AR.yml @@ -66,7 +66,6 @@ es-AR: setting_display_media_show_all: Mostrar todos los medios sin advertir, incluyendo los medios marcados como sensibles setting_emoji_style: Cómo se mostrarán los emojis. "Automático" intentará usar emojis nativos, cambiando a Twemoji en navegadores antiguos. setting_quick_boosting_html: Al estar habilitado, haciendo clic en el ícono de adhesión %{boost_icon} vas a adherir al mensaje inmediatamente, en lugar de abrir el menú desplegable de adhesión/citas. Esto cambia la acción de citas al menú de opciones %{options_icon}. - setting_system_scrollbars_ui: Solo aplica para navegadores web de escritorio basados en Safari y Chrome setting_use_blurhash: Los gradientes se basan en los colores de las imágenes ocultas pero haciendo borrosos los detalles setting_use_pending_items: Ocultar actualizaciones de la línea temporal detrás de un clic en lugar de desplazar automáticamente el flujo username: Podés usar letras, números y subguiones ("_") diff --git a/config/locales/simple_form.es-MX.yml b/config/locales/simple_form.es-MX.yml index 631dbb4f01..489c7f19cb 100644 --- a/config/locales/simple_form.es-MX.yml +++ b/config/locales/simple_form.es-MX.yml @@ -66,7 +66,6 @@ es-MX: setting_display_media_show_all: Mostrar todos los archivos multimedia sin advertir, incluidos los marcados como sensibles setting_emoji_style: Cómo se muestran los emojis. «Automático» intentará usar emojis nativos, pero vuelve a Twemoji para los navegadores antiguos. setting_quick_boosting_html: Cuando está activado, pulsar en el icono %{boost_icon} Impulsar impulsará inmediatamente en lugar de abrir el menú desplegable Impulsar/Citas. Mueve la acción de citar al menú %{options_icon} (Opciones). - setting_system_scrollbars_ui: Solo se aplica a los navegadores de escritorio basados en Safari y Chrome setting_use_blurhash: Los degradados se basan en los colores de los elementos visuales ocultos, pero ocultan cualquier detalle setting_use_pending_items: Ocultar las actualizaciones de la línea de tiempo con un clic, en lugar de que la cronología se desplace automáticamente username: Puedes usar letras, números y guiones bajos diff --git a/config/locales/simple_form.es.yml b/config/locales/simple_form.es.yml index e173cb48f3..fcc0c38401 100644 --- a/config/locales/simple_form.es.yml +++ b/config/locales/simple_form.es.yml @@ -66,7 +66,6 @@ es: setting_display_media_show_all: Mostrar toda la multimedia sin avisos, incluyendo la marcada como sensible setting_emoji_style: Cómo se mostrarán los emojis. "Auto" intentará usar emojis nativos, cambiando a Twemoji en navegadores antiguos. setting_quick_boosting_html: Cuando está activado, pulsar en el icono %{boost_icon} Impulsar impulsará inmediatamente en lugar de abrir el menú desplegable Impulsar/Citas. Mueve la acción de citar al menú %{options_icon} (Opciones). - setting_system_scrollbars_ui: Solo aplica para navegadores de escritorio basados en Safari y Chrome setting_use_blurhash: Los gradientes se basan en los colores de las imágenes ocultas pero haciendo borrosos los detalles setting_use_pending_items: Ocultar nuevas publicaciones detrás de un clic en lugar de desplazar automáticamente el feed username: Puedes usar letras, números y guiones bajos diff --git a/config/locales/simple_form.et.yml b/config/locales/simple_form.et.yml index 9866920cc1..329679adad 100644 --- a/config/locales/simple_form.et.yml +++ b/config/locales/simple_form.et.yml @@ -66,7 +66,6 @@ et: setting_display_media_show_all: Näita alati meediat ilma hoiatuseta, ka tundlikuks märgitud meediat setting_emoji_style: See määrab emojide kuvamise viisi. Automaatse valiku puhul üritatakse kasutada platvormi või klientrakenduse oma emojisid, kuid varuvariandina jääb toimima Twemoji (näiteks vanade veebibrauserite puhul). setting_quick_boosting_html: Selle eelistuse kasutamisel, Hooandmise ikooni %{boost_icon} teeb toimingu kohe ilma avamata Hooandmise/Tsiteerimise menüüvalikut. Sel puhul tsiteerimise link leidub %{options_icon} (Valikud) menüüs. - setting_system_scrollbars_ui: Kehtib vaid Safaril ja Chrome'il põhinevatel tavaarvuti veebibrauserite puhul setting_use_blurhash: Värvid põhinevad peidetud visuaalidel, kuid hägustavad igasuguseid detaile setting_use_pending_items: Voo automaatse kerimise asemel peida ajajoone uuendused kliki taha username: Võid kasutada ladina tähti, numbreid ja allkriipsu diff --git a/config/locales/simple_form.eu.yml b/config/locales/simple_form.eu.yml index 0fa8290d6d..bf8e378c89 100644 --- a/config/locales/simple_form.eu.yml +++ b/config/locales/simple_form.eu.yml @@ -61,7 +61,6 @@ eu: setting_default_quote_policy_unlisted: Jendeak aipatzen zaituenean, bere bidalketa ere joeren denbora-lerro publikoetatik ezkutatuko da. setting_default_sensitive: Multimedia hunkigarria lehenetsita ezkutatzen da, eta sakatuz ikusi daiteke setting_emoji_style: Nola bistaratu emojiak. "Automatikoki" aukeran emoji natiboak erabiltzen saiatuko dira, baina Twemojira itzuliko dira arakatzaile zaharretarako. - setting_system_scrollbars_ui: Safari eta Chrome-n oinarritutako mahaigaineko nabigatzaileei bakarrik aplikatzen zaie setting_use_blurhash: Gradienteak ezkutatutakoaren koloreetan oinarritzen dira, baina xehetasunak ezkutatzen dituzte setting_use_pending_items: Ezkutatu denbora-lerroko eguneraketak klik baten atzean jarioa automatikoki korritu ordez username: Hizkiak, zenbakiak eta azpimarrak erabil ditzakezu diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml index 09bb0ead79..2a7c2b8e50 100644 --- a/config/locales/simple_form.fa.yml +++ b/config/locales/simple_form.fa.yml @@ -66,7 +66,6 @@ fa: setting_display_media_show_all: نمایش همهٔ رسانه‌ها بدون هشدار از جمله رسانه‌های علامت خورده به عنوان حسّاس setting_emoji_style: چگونگی نمایش شکلک‌ها. «خودکار» تلاش خواهد کرد از شکلک‌های بومی استفاده کند؛ ولی برای مرورگرهای قدیمی به توییموجی برخواهد گشت. setting_quick_boosting_html: هنگام به کار افتادن، زدن روی %{boost_icon} نقشک تقویت به جای گشودنِ فهرست پایین افتادنی تقویت و نقل، بلافاصله تقویت خواهد کرد. کنشِ نقل قول را به فهرست %{options_icon} (گزینه‌ها) منتقل می‌کند. - setting_system_scrollbars_ui: فقط برای مرورگرهای دسکتاپ مبتنی بر سافاری و کروم اعمال می شود setting_use_blurhash: سایه‌ها بر اساس رنگ‌های به‌کاررفته در تصویر پنهان‌شده ساخته می‌شوند ولی جزئیات تصویر در آن‌ها آشکار نیست setting_use_pending_items: به جای پیش‌رفتن خودکار در فهرست، به‌روزرسانی فهرست نوشته‌ها را پشت یک کلیک پنهان کن username: تنها می‌توانید از حروف، اعداد، و زیرخط استفاده کنید diff --git a/config/locales/simple_form.fi.yml b/config/locales/simple_form.fi.yml index e870e27e58..7d7ce8578c 100644 --- a/config/locales/simple_form.fi.yml +++ b/config/locales/simple_form.fi.yml @@ -66,7 +66,6 @@ fi: setting_display_media_show_all: Näytä kaikki mediasisältö varoittamatta, mukaan lukien arkaluonteiseksi merkitty sisältö setting_emoji_style: Miten emojit näkyvät. ”Automaattinen” pyrkii käyttämään natiiveja emojeita, mutta Twemoji-emojeita käytetään varavaihtoehtoina vanhoissa selaimissa. setting_quick_boosting_html: Kun käytössä, %{boost_icon} Tehosta-kuvakkeen painaminen tehostaa välittömästi sen sijaan, että Tehosta/Lainaa-pudotusvalikko avautuisi. Siirtää lainaustoiminnon %{options_icon} (Valinnat) -⁠valikkoon. - setting_system_scrollbars_ui: Koskee vain Safari- ja Chrome-pohjaisia työpöytäselaimia setting_use_blurhash: Liukuvärit perustuvat piilotettujen kuvien väreihin mutta sumentavat yksityiskohdat setting_use_pending_items: Piilota aikajanan päivitykset napsautuksen taakse syötteen automaattisen vierityksen sijaan username: Voit käyttää kirjaimia, numeroita ja alaviivoja diff --git a/config/locales/simple_form.fo.yml b/config/locales/simple_form.fo.yml index 0361c075c9..01eac89c4d 100644 --- a/config/locales/simple_form.fo.yml +++ b/config/locales/simple_form.fo.yml @@ -62,7 +62,6 @@ fo: setting_default_sensitive: Viðkvæmar miðlafílur eru fjaldar og kunnu avdúkast við einum klikki setting_emoji_style: Hvussu kenslutekn vera víst. "Sjálvvirkandi" roynir at brúka upprunalig kenslutekn, men fellir aftur á Twitter kenslutekn í eldri kagum. setting_quick_boosting_html: Tá hetta er virkið, hendir stimbranin beinanvegin tá trýst verður á %{boost_icon} Stimbranar-ímyndin, í staðin fyri at stimbranar/siterings-valmyndin verður latin um. Flytir siteringsmøguleikan til %{options_icon} (Valmøguleikar) valmyndina. - setting_system_scrollbars_ui: Er einans viðkomandi fyri skriviborðskagar grundaðir á Safari og Chrome setting_use_blurhash: Gradientar eru grundaðir á litirnar av fjaldu myndunum, men grugga allar smálutir setting_use_pending_items: Fjal tíðarlinjudagføringar aftan fyri eitt klikk heldur enn at skrulla tilføringina sjálvvirkandi username: Tú kanst brúka bókstavir, tøl og botnstrikur diff --git a/config/locales/simple_form.fr-CA.yml b/config/locales/simple_form.fr-CA.yml index 7bb4176607..ff01570280 100644 --- a/config/locales/simple_form.fr-CA.yml +++ b/config/locales/simple_form.fr-CA.yml @@ -66,7 +66,6 @@ fr-CA: setting_display_media_show_all: Afficher tous les médias sans avertissement, y compris ceux marqués comme sensibles setting_emoji_style: Manière d'afficher les émojis. Utiliser « Auto » pour essayer d'utiliser les émojis natifs, mais Twemoji sera utilisé pour les anciens navigateurs. setting_quick_boosting_html: Lorsque cette option est activée, cliquer sur l'icône de partage %{boost_icon} va immédiatement partager le message au lieu d'ouvrir le menu déroulant Partage/Citation. L'action de citation est déplacée dans le menu %{options_icon} (options). - setting_system_scrollbars_ui: S'applique uniquement aux navigateurs basés sur Safari et Chrome setting_use_blurhash: Les dégradés sont basés sur les couleurs des images cachées mais n’en montrent pas les détails setting_use_pending_items: Cacher les mises à jour des fils d’actualités derrière un clic, au lieu de les afficher automatiquement username: Vous pouvez utiliser des lettres, des chiffres, et des tirets bas diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml index d682488b9e..85ab495ea0 100644 --- a/config/locales/simple_form.fr.yml +++ b/config/locales/simple_form.fr.yml @@ -66,7 +66,6 @@ fr: setting_display_media_show_all: Afficher tous les médias sans avertissement, y compris ceux marqués comme sensibles setting_emoji_style: Manière d'afficher les émojis. Utiliser « Auto » pour essayer d'utiliser les émojis natifs, mais Twemoji sera utilisé pour les anciens navigateurs. setting_quick_boosting_html: Lorsque cette option est activée, cliquer sur l'icône de partage %{boost_icon} va immédiatement partager le message au lieu d'ouvrir le menu déroulant Partage/Citation. L'action de citation est déplacée dans le menu %{options_icon} (options). - setting_system_scrollbars_ui: S'applique uniquement aux navigateurs basés sur Safari et Chrome setting_use_blurhash: Les dégradés sont basés sur les couleurs des images cachées mais n’en montrent pas les détails setting_use_pending_items: Cacher les mises à jour des fils d’actualités derrière un clic, au lieu de les afficher automatiquement username: Vous pouvez utiliser des lettres, des chiffres, et des tirets bas diff --git a/config/locales/simple_form.fy.yml b/config/locales/simple_form.fy.yml index f2588ff3e1..bd0f663a9f 100644 --- a/config/locales/simple_form.fy.yml +++ b/config/locales/simple_form.fy.yml @@ -57,7 +57,6 @@ fy: setting_always_send_emails: Normaliter wurde der gjin e-mailmeldingen ferstjoerd wannear’t jo aktyf Mastodon brûke setting_default_sensitive: Gefoelige media wurdt standert ferstoppe en kin mei ien klik toand wurde setting_emoji_style: Wêrmei moatte emojis werjûn wurde. ‘Automatysk’ probearret de systeemeigen emojis te brûken, mar falt werom op Twemoji foar âldere browsers. - setting_system_scrollbars_ui: Allinnich fan tapassing op desktopbrowsers basearre op Safari en Chromium setting_use_blurhash: Dizige kleuroergongen binne basearre op de kleuren fan de ferstoppe media, wêrmei elk detail ferdwynt setting_use_pending_items: De tiidline wurdt bywurke troch op it oantal nije items te klikken, yn stee fan dat dizze automatysk bywurke wurdt username: Jo kinne letters, sifers en ûnderstreekjes brûke diff --git a/config/locales/simple_form.ga.yml b/config/locales/simple_form.ga.yml index a7c94a91a7..b534c7aced 100644 --- a/config/locales/simple_form.ga.yml +++ b/config/locales/simple_form.ga.yml @@ -66,7 +66,6 @@ ga: setting_display_media_show_all: Taispeáin na meáin go léir gan rabhadh, lena n-áirítear meáin atá marcáilte mar íogair setting_emoji_style: Conas emojis a thaispeáint. Déanfaidh "Auto" iarracht emoji dúchasacha a úsáid, ach titeann sé ar ais go Twemoji le haghaidh seanbhrabhsálaithe. setting_quick_boosting_html: Nuair a bhíonn sé cumasaithe, má chliceálann tú ar an deilbhín Treisithe %{boost_icon}, treiseofar láithreach é in ionad an roghchlár anuas treisithe/lua a oscailt. Bogann sé seo an gníomh lua go dtí an roghchlár %{options_icon} (Roghanna). - setting_system_scrollbars_ui: Ní bhaineann sé ach le brabhsálaithe deisce bunaithe ar Safari agus Chrome setting_use_blurhash: Tá grádáin bunaithe ar dhathanna na n-amharcanna ceilte ach cuireann siad salach ar aon mhionsonraí setting_use_pending_items: Folaigh nuashonruithe amlíne taobh thiar de chlic seachas an fotha a scrollú go huathoibríoch username: Is féidir leat litreacha, uimhreacha, agus béim a úsáid diff --git a/config/locales/simple_form.gd.yml b/config/locales/simple_form.gd.yml index 29c1676095..21757feef1 100644 --- a/config/locales/simple_form.gd.yml +++ b/config/locales/simple_form.gd.yml @@ -66,7 +66,6 @@ gd: setting_display_media_show_all: Seall meadhan sam bith gun rabhadh, a’ gabhail a-staigh nam meadhanan ris a bheil comharra gu bheil iad frionasach setting_emoji_style: An dòigh air an dèid emojis a shealltainn. Feuchaidh “Fèin-obrachail” ris na h-emojis tùsail a chleachdadh ach thèid Twemoji a chleachdadh ’nan àite air seann-bhrabhsairean. setting_quick_boosting_html: Ma tha seo an comas, ma nì thu briogadh air ìomhaigheag %{boost_icon} a’ bhrosnachaidh, thèid a bhrosnachadh sa bhad seach a bhith a’ fosgladh clàr-taice teàrnach a’ bhrosnachaidh/luaidh. Thèid gnìomh an luaidh a ghluasad gu clàr-taice %{options_icon} nan roghainnean. - setting_system_scrollbars_ui: Chan obraich seo ach air brabhsairean desktop stèidhichte air Safari ’s Chrome setting_use_blurhash: Tha caiseadan stèidhichte air dathan nan nithean lèirsinneach a chaidh fhalach ach chan fhaicear am mion-fhiosrachadh setting_use_pending_items: Falaich ùrachaidhean na loidhne-ama air cùlaibh briogaidh seach a bhith a’ sgroladh nam postaichean gu fèin-obrachail username: Faodaidh tu litrichean, àireamhan is fo-loidhnichean a chleachdadh diff --git a/config/locales/simple_form.gl.yml b/config/locales/simple_form.gl.yml index 85cbacc70a..7b1acf51ed 100644 --- a/config/locales/simple_form.gl.yml +++ b/config/locales/simple_form.gl.yml @@ -66,7 +66,6 @@ gl: setting_display_media_show_all: Mostrar todo o multimedia sen avisar, incluíndo o multimedia marcado como sensible setting_emoji_style: Forma de mostrar emojis. «Auto» intentará usar os emojis nativos, e se falla recurrirase a Twemoji en navegadores antigos. setting_quick_boosting_html: Se está activo, ao premer na icona %{boost_icon} Promover farase automáticamente a promoción no lugar de abrir o menú despregable promover/citar. Sitúa a acción de citar no menú %{options_icon} (Opcións). - setting_system_scrollbars_ui: Aplícase só en navegadores de escritorio baseados en Safari e Chrome setting_use_blurhash: Os gradientes toman as cores da imaxe oculta pero esvaecendo tódolos detalles setting_use_pending_items: Agochar actualizacións da cronoloxía tras un click no lugar de desprazar automáticamente os comentarios username: Podes usar letras, números e trazos baixos diff --git a/config/locales/simple_form.he.yml b/config/locales/simple_form.he.yml index 4292748e30..d004a2115e 100644 --- a/config/locales/simple_form.he.yml +++ b/config/locales/simple_form.he.yml @@ -66,7 +66,6 @@ he: setting_display_media_show_all: הצג את כל תכני המדיה ללא אזהרה, גם אם סומנו כרגישים setting_emoji_style: כיצד להציג רגישונים. "אוטומטי" ינסה להציג מסט האימוג'י המקומי, אבל נופל לערכת Twemoji כברירת מחדל עבור דפדפנים ישנים. setting_quick_boosting_html: כשמאופשר, לחיצה על %{boost_icon} איקון הדהוד ייצור הדהוד מיידי במקום לפתוח את תיבת הבחירה הדהוד/ציטוט. מעביר את פעולת הציטוט אל %{options_icon} תפריט אפשרויות. - setting_system_scrollbars_ui: נוגע רק לגבי דפדפני דסקטופ מבוססים ספארי וכרום setting_use_blurhash: הגראדיינטים מבוססים על תוכן התמונה המוסתרת, אבל מסתירים את כל הפרטים setting_use_pending_items: הסתר עדכוני פיד מאחורי קליק במקום לגלול את הפיד אוטומטית username: ניתן להשתמש בספרות, אותיות לטיניות ומקף תחתון diff --git a/config/locales/simple_form.hu.yml b/config/locales/simple_form.hu.yml index 6b2d3d16a3..b7ca9a0750 100644 --- a/config/locales/simple_form.hu.yml +++ b/config/locales/simple_form.hu.yml @@ -66,7 +66,6 @@ hu: setting_display_media_show_all: Figyelmeztetés minden média megjelenítése esetén, köztük a kényesnek jelöltek esetén is setting_emoji_style: Az emodzsik megjelenítési módja. Az „Automatikus” megpróbálja a natív emodzsikat használni, de az örökölt böngészők esetén a Twemojira vált vissza. setting_quick_boosting_html: Ha engedélyezve van, akkor a %{boost_icon} Megtolás azonnal megtörténik, ahelyett hogy megnyitná a megtolás/idézés legördülő menüje. Az idézési műveletet áthelyezi a %{options_icon} (Beállítások) menübe. - setting_system_scrollbars_ui: Csak Chrome és Safari alapú asztali böngészőkre vonatkozik setting_use_blurhash: A kihomályosítás az eredeti képből történik, de minden részletet elrejt setting_use_pending_items: Idővonal frissítése csak kattintásra automatikus görgetés helyett username: Betűk, számok és alávonások használhatók diff --git a/config/locales/simple_form.ia.yml b/config/locales/simple_form.ia.yml index b1718009b4..d02c49156e 100644 --- a/config/locales/simple_form.ia.yml +++ b/config/locales/simple_form.ia.yml @@ -62,7 +62,6 @@ ia: setting_default_sensitive: Le medios sensibile es celate de ordinario e pote esser revelate con un clic setting_emoji_style: Como monstrar emojis. “Automatic” tentara usar emojis native, ma recurre al Twemojis pro navigatores ancian. setting_quick_boosting_html: Si isto es activate, un clic sur le icone %{boost_icon} Impulsar impulsara immediatemente le message in loco de aperir le menu disrolante de impulsar/citar. Isto tamben colloca le action de citar in le menu %{options_icon} (Optiones). - setting_system_scrollbars_ui: Se applica solmente al navigatores de scriptorio basate sur Safari e Chrome setting_use_blurhash: Le imagines degradate se basa sur le colores del visuales celate, ma illos offusca tote le detalios setting_use_pending_items: Requirer un clic pro monstrar nove messages in vice de rolar automaticamente le fluxo username: Tu pote usar litteras, numeros e tractos de sublineamento diff --git a/config/locales/simple_form.io.yml b/config/locales/simple_form.io.yml index 387471ed1b..40086531a6 100644 --- a/config/locales/simple_form.io.yml +++ b/config/locales/simple_form.io.yml @@ -56,7 +56,6 @@ io: setting_aggregate_reblogs: Ne montrez nova repeti di posti qui ja repetesis recente (nur efektigas repeti recevata nove) setting_always_send_emails: Normale retpostoavizi ne sendesas kande vu aktiva uzas Mastodon setting_default_sensitive: Trublema audvidaji originala celesas e povas descelesar per kliko - setting_system_scrollbars_ui: Nur ye tablokomputilretumili qua bazita ye Safario e Kromeo setting_use_blurhash: Inklini esas segun kolori di celesis vidaji ma kovras irga detali setting_use_pending_items: Celez tempolinetildatigo dop kliko vice automatike ruligar la fluo username: Vu darfas uzar literi, nombri, e sublinei diff --git a/config/locales/simple_form.is.yml b/config/locales/simple_form.is.yml index 8556716840..520aa18d23 100644 --- a/config/locales/simple_form.is.yml +++ b/config/locales/simple_form.is.yml @@ -66,7 +66,6 @@ is: setting_display_media_show_all: Birta allt myndefni án aðvörunar, líka það sem merkt er viðkvæmt setting_emoji_style: Hvernig birta skal lyndistákn (emoji). "Sjálfvirkt" mun reyna að nota innbyggð lyndistákn, en til vara verða notuð Twemoji-tákn fyrir eldri vafra. setting_quick_boosting_html: Þegar þetta er virkt, sé smellt á %{boost_icon}-endurbirtingartáknið mun endurbirting eiga sér stað strax í stað þess að opna endurbirta/tilvitnun fellivalmyndina. Tilvitnunaraðgerðin færist þá yfir í %{options_icon} (Options) valmyndina. - setting_system_scrollbars_ui: Á einungis við um vafra fyrir vinnutölvur sem byggjast á Safari og Chrome setting_use_blurhash: Litstiglarnir byggja á litunum í földu myndunum, en gera öll smáatriði óskýr setting_use_pending_items: Fela uppfærslur tímalínu þar til smellt er, í stað þess að hún skruni streyminu sjálfvirkt username: Þú mátt nota bókstafi, tölur og undirstrik diff --git a/config/locales/simple_form.it.yml b/config/locales/simple_form.it.yml index 116d3d94d4..d3ab8e3c2e 100644 --- a/config/locales/simple_form.it.yml +++ b/config/locales/simple_form.it.yml @@ -66,7 +66,6 @@ it: setting_display_media_show_all: Mostra tutti i contenuti multimediali senza preavviso, inclusi quelli contrassegnati come sensibili setting_emoji_style: Come visualizzare gli emoji. "Automatico" proverà a usare gli emoji nativi, ma per i browser più vecchi ricorrerà a Twemoji. setting_quick_boosting_html: Se abilitato, cliccando sull'icona Boost %{boost_icon}, il potenziamento verrà immediatamente attivato, anziché aprire il menu a discesa potenziamento/citazione. Sposta l'azione della citazione nel menu %{options_icon} (Opzioni). - setting_system_scrollbars_ui: Si applica solo ai browser desktop basati su Safari e Chrome setting_use_blurhash: I gradienti sono basati sui colori delle immagini nascoste ma offuscano tutti i dettagli setting_use_pending_items: Fare clic per mostrare i nuovi messaggi invece di aggiornare la timeline automaticamente username: Puoi usare lettere, numeri e caratteri di sottolineatura diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml index db1c162be5..c366d3787b 100644 --- a/config/locales/simple_form.ja.yml +++ b/config/locales/simple_form.ja.yml @@ -62,7 +62,6 @@ ja: setting_default_sensitive: 閲覧注意状態のメディアはデフォルトでは内容が伏せられ、クリックして初めて閲覧できるようになります setting_emoji_style: 絵文字の表示方法。「自動」の場合、可能ならネイティブの絵文字を使用し、レガシーなブラウザではTwemojiで代替します。 setting_quick_boosting_html: 有効にすると、%{boost_icon} ブーストアイコンのクリックで即座にブーストされます。ブースト/引用ドロップダウンは開きません。引用アクションは %{options_icon} (オプション) メニューに移されます。 - setting_system_scrollbars_ui: Safari/Chromeベースのデスクトップブラウザーでのみ有効です setting_use_blurhash: ぼかしはメディアの色を元に生成されますが、細部は見えにくくなっています setting_use_pending_items: 新着があってもタイムラインを自動的にスクロールしないようにします username: アルファベット大文字と小文字、数字、アンダーバー「_」が使えます diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml index 84bed22cba..ef6a3d5a96 100644 --- a/config/locales/simple_form.ko.yml +++ b/config/locales/simple_form.ko.yml @@ -4,6 +4,7 @@ ko: hints: account: attribution_domains: 한 줄에 하나씩. 가짜 기여로부터 보호합니다. + discoverable: 다른 사람이 생성한 컬렉션에 추천될 수 있습니다. 나와 내 공개 게시물 또한 다른 마스토돈의 발견하기 기능을 통해 다른 사용자에게 추천될 수 있습니다. display_name: 진짜 이름 또는 재미난 이름. fields: 홈페이지, 호칭, 나이, 뭐든지 적고 싶은 것들. indexable: 내 공개 게시물이 마스토돈의 검색 결과에 나타날 수 있습니다. 내 게시물과 상호작용했던 사람들은 이 설정과 관계 없이 그 게시물을 검색할 수 있습니다. @@ -60,9 +61,11 @@ ko: setting_default_quote_policy_private: 마스토돈에서 작성된 팔로워 전용 게시물은 다른 사용자가 인용할 수 없습니다. setting_default_quote_policy_unlisted: 사람들에게 인용된 경우, 인용한 게시물도 유행 타임라인에서 감추게 됩니다. setting_default_sensitive: 민감한 미디어는 기본적으로 가려져 있으며 클릭해서 볼 수 있습니다 + setting_display_media_default: 민감함으로 설정된 미디어를 보여주기 전에 경고하기 + setting_display_media_hide_all: 모든 미디어를 보여주기 전 경고 + setting_display_media_show_all: 민감함으로 표시된 미디어를 포함하여 모든 미디어를 경고 없이 보여줍니다 setting_emoji_style: 에모지 표현 방식. "자동"은 시스템 기본 에모지를 적용하고 그렇지 못하는 오래된 브라우저의 경우 트웨모지를 사용합니다. setting_quick_boosting_html: 활성화하면 %{boost_icon}부스트 아이콘을 클릭했을 때 부스트/인용 드롭다운 메뉴가 뜨지 않고 바로 부스트하게 됩니다. 인용은 %{options_icon} (옵션) 메뉴 안으로 이동합니다. - setting_system_scrollbars_ui: 사파리와 크롬 기반의 데스크탑 브라우저만 적용됩니다 setting_use_blurhash: 그라디언트는 숨겨진 내용의 색상을 기반으로 하지만 상세 내용은 보이지 않게 합니다 setting_use_pending_items: 타임라인의 새 게시물을 자동으로 보여 주는 대신, 클릭해서 나타내도록 합니다 username: 문자, 숫자, 밑줄을 사용할 수 있습니다 @@ -84,10 +87,13 @@ ko: activity_api_enabled: 주별 로컬에 게시된 글, 활성 사용자 및 새로운 가입자 수 app_icon: WEBP, PNG, GIF 또는 JPG. 모바일 기기에 쓰이는 기본 아이콘을 대체합니다. backups_retention_period: 사용자들은 나중에 다운로드하기 위해 게시물 아카이브를 생성할 수 있습니다. 양수로 설정된 경우 이 아카이브들은 지정된 일수가 지난 후에 저장소에서 자동으로 삭제될 것입니다. + bootstrap_timeline_accounts: 이 계정들은 새 계정의 팔로우 추천에 고정됩니다. 콤마로 구분된 계정 목록을 제공하세요. closed_registrations_message: 새 가입을 차단했을 때 표시됩니다 content_cache_retention_period: "(부스트 및 답글 포함) 다른 서버의 모든 게시물은 해당 게시물에 대한 로컬 사용자의 상호 작용과 관계없이 지정된 일수가 지나면 삭제됩니다. 여기에는 로컬 사용자가 북마크 또는 즐겨찾기로 표시한 게시물도 포함됩니다. 다른 인스턴스 사용자와 주고 받은 개인 멘션도 손실되며 복원할 수 없습니다. 이 설정은 특수 목적의 인스턴스를 위한 것이며 일반적인 용도의 많은 사용자의 예상이 빗나가게 됩니다." custom_css: 사용자 지정 스타일을 웹 버전의 마스토돈에 지정할 수 있습니다. + email_footer_text: 뉴스레터 이메일의 최하단에만 보여지는 선택적인 텍스트. favicon: WEBP, PNG, GIF 또는 JPG. 기본 파비콘을 대체합니다. + landing_page: 새 방문자가 내 서버에 처음 도달했을 때 보여줄 페이지를 선택하세요. "유행"을 선택하려면 설정에서 유행이 활성화되어있어야 합니다. "로컬 피드"로 설정하려면 "로컬 게시물 실시간 피드 접근" 권한이 "모두에게"로 설정되어있어야 합니다. mascot: 고급 웹 인터페이스의 그림을 대체합니다. media_cache_retention_period: 원격 사용자가 작성한 글의 미디어 파일은 이 서버에 캐시됩니다. 양수로 설정하면 지정된 일수 후에 미디어가 삭제됩니다. 삭제된 후에 미디어 데이터를 요청하면 원본 콘텐츠를 사용할 수 있는 경우 다시 다운로드됩니다. 링크 미리 보기 카드가 타사 사이트를 폴링하는 빈도에 제한이 있으므로 이 값을 최소 14일로 설정하는 것이 좋으며, 그렇지 않으면 그 이전에는 링크 미리 보기 카드가 제때 업데이트되지 않을 것입니다. min_age: 사용자들은 가입할 때 생일을 확인받게 됩니다 @@ -103,8 +109,10 @@ ko: status_page_url: 이 서버가 중단된 동안 사람들이 서버의 상태를 볼 수 있는 페이지 URL theme: 로그인 하지 않은 사용자나 새로운 사용자가 보게 될 테마. thumbnail: 대략 2:1 비율의 이미지가 서버 정보 옆에 표시됩니다. + thumbnail_description: 이미지에 대한 설명은 시각에 문제가 있는 사람들이 내용을 이해하는데 도움이 됩니다. trendable_by_default: 유행하는 콘텐츠에 대한 수동 승인을 건너뜁니다. 이 설정이 적용된 이후에도 각각의 항목들을 삭제할 수 있습니다. trends: 트렌드는 어떤 게시물, 해시태그 그리고 뉴스 기사가 이 서버에서 인기를 끌고 있는지 보여줍니다. + wrapstodon: 로컬 사용자가 한 해의 요약을 생성하도록 제안합니다. 이 기능은 매 년 12월 10일과 31일 사이에 사용 가능하고, 올 해 최소 한 개의 공개 또는 미등재 게시물을 게시하고 하나 이상의 해시태그를 사용한 사용자에게 제안됩니다. form_challenge: current_password: 당신은 보안 구역에 진입하고 있습니다 imports: @@ -127,6 +135,7 @@ ko: otp: '휴대전화에서 생성된 이중 인증 코드를 입력하거나, 복구 코드 중 하나를 사용하세요:' webauthn: USB 키라면 삽입했는지 확인하고, 필요하다면 누르세요. settings: + email_subscriptions: 비활성화하면 기존 구독자는 유지되지만 더이상 이메일을 보내지 않습니다. indexable: 내 프로필 페이지가 구글, 빙 등의 검색엔진에 표시될 수 있습니다. show_application: 나 자신은 이 설정과 관계 없이 어떤 앱으로 게시물을 작성했는지 볼 수 있습니다. tag: @@ -146,17 +155,21 @@ ko: jurisdiction: 요금을 지불하는 사람이 거주하는 국가를 기재하세요. 회사나 기타 법인인 경우 해당 법인이 설립된 국가와 도시, 지역, 영토 또는 주를 적절히 기재하세요. min_age: 관할지역의 법률에서 요구하는 최저 연령보다 작으면 안 됩니다. user: + chosen_languages: 체크하면 선택된 언어들만 공개 타임라인에 보여집니다. 이 설정은 홈 타임라인과 리스트에는 적용되지 않습니다. date_of_birth: other: "%{domain}을 이용하려면 %{count}세 이상임을 확인해야 합니다. 이 정보는 저장되지 않습니다." role: 역할은 사용자가 어떤 권한을 가지게 될 지 결정합니다. user_role: + collection_limit: 이 역할을 가진 사용자가 생성할 수 있는 컬렉션 개수의 한도를 지정합니다. 이 값을 줄이는 경우 이미 그 값을 초과한 사용자가 컬렉션을 잃어버리지는 않습니다. 하지만 새 컬렉션을 추가할 수는 없게 됩니다. color: 색상은 사용자 인터페이스에서 역할을 나타내기 위해 사용되며, RGB 16진수 형식입니다 highlighted: 이 역할이 공개적으로 보이도록 설정합니다 name: 역할이 배지로 표시될 경우, 그 역할에 대한 공개적인 이름입니다 permissions_as_keys: 이 역할을 가진 사용자는 다음에 접근할 수 있게 됩니다... position: 특정 상황에서 충돌이 발생할 경우 더 높은 역할이 충돌을 해결합니다. 특정 작업은 우선순위가 낮은 역할에 대해서만 수행될 수 있습니다 + require_2fa: 이 역할을 가진 사용자는 2단계 인증을 설정해야만 마스토돈을 사용할 수 있습니다 username_block: allow_with_approval: 바로 가입을 막는 대신, 일치하는 가입에 승인을 요구합니다 + comparison: 부분일치를 사용할 땐 의도치 않은 차단에 주의하세요 username: 대소문자와 관계 없고 "4"를 "a"로, "3"을 "e"로 사용하는 등의 보편적으로 사용되는 비슷한 문자까지 매치됩니다 webhook: events: 전송할 이벤트를 선택하세요 @@ -165,6 +178,7 @@ ko: labels: account: attribution_domains: 나를 기여자로 올릴 수 있도록 허용된 웹사이트들 + discoverable: 나를 발견하기 기능에서 추천 fields: name: 라벨 value: 내용 @@ -212,6 +226,7 @@ ko: email: 이메일 주소 expires_in: 만기 fields: 부가 필드 + filter_action: 필터 동작 header: 헤더 사진 honeypot: "%{label} (채우지 마시오)" inbox_url: 릴레이 서버의 inbox URL @@ -278,6 +293,7 @@ ko: closed_registrations_message: 가입이 불가능 할 때의 사용자 지정 메시지 content_cache_retention_period: 리모트 콘텐츠 보유 기간 custom_css: 사용자 정의 CSS + email_footer_text: 추가 하단 텍스트 favicon: 파비콘 landing_page: 새 방문자를 위한 랜딩 페이지 local_live_feed_access: 로컬 게시물에 대한 실시간 피드 접근 @@ -302,9 +318,13 @@ ko: status_page_url: 상태 페이지 URL theme: 기본 테마 thumbnail: 서버 썸네일 + thumbnail_description: 썸네일 대체 텍스트 trendable_by_default: 사전 리뷰 없이 트렌드에 오르는 것을 허용 trends: 유행 활성화 wrapstodon: 랩스토돈 활성화 + form_email_subscriptions_confirmation: + agreement_email_volume: 이 기능을 활성화하면 발송되는 이메일의 양이 크게 증가할 수 있으며 이에 대한 책임은 전적으로 본인에게 있음을 이해했습니다. + agreement_privacy_and_terms: 개인정보처리방침과 이용약관을 업데이트 했습니다. interactions: must_be_follower: 나를 팔로우 하지 않는 사람에게서 온 알림을 차단 must_be_following: 내가 팔로우 하지 않는 사람에게서 온 알림을 차단 @@ -343,6 +363,7 @@ ko: hint: 추가 정보 text: 규칙 settings: + email_subscriptions: 이메일 구독 활성화 indexable: 검색엔진에 프로필 페이지 포함하기 show_application: 어떤 앱으로 게시물을 보냈는지 표시 tag: @@ -371,11 +392,13 @@ ko: role: 역할 time_zone: 시간대 user_role: + collection_limit: 사용자당 최대 컬렉션 개수 color: 배지 색상 highlighted: 역할 배지를 사용자 프로필에 표시 name: 이름 permissions_as_keys: 권한 position: 우선순위 + require_2fa: 2단계 인증 필요 username_block: allow_with_approval: 승인을 통한 가입 허용 comparison: 비교 방식 diff --git a/config/locales/simple_form.lt.yml b/config/locales/simple_form.lt.yml index 4d5b72c7b0..3250e42f7a 100644 --- a/config/locales/simple_form.lt.yml +++ b/config/locales/simple_form.lt.yml @@ -62,7 +62,6 @@ lt: setting_default_sensitive: Jautrioji medija pagal numatytuosius nustatymus yra paslėpta ir gali būti atskleista spustelėjus. setting_emoji_style: Kaip rodyti emodžius. „Auto“ bandys naudoti vietinius jaustukus, bet senesnėse naršyklėse grįš prie Tvejaustukų. setting_quick_boosting_html: Kai ši funkcija įjungta, paspaudus ant %{boost_icon} Paryškinimo piktogramos, įrašas bus iškart paryškintas, o ne atidarytas išskleidžiamasis meniu „paryškinti/cituoti“. Citavimo veiksmas perkeliamas į %{options_icon} meniu. - setting_system_scrollbars_ui: Taikoma tik darbalaukio naršyklėms, karkasiniais „Safari“ ir „Chrome“. setting_use_blurhash: Gradientai pagrįsti paslėptų vizualizacijų spalvomis, bet užgožia bet kokias detales. setting_use_pending_items: Slėpti laiko skalės naujienas po paspaudimo, vietoj automatinio srauto slinkimo. username: Gali naudoti raides, skaičius ir pabraukimus diff --git a/config/locales/simple_form.lv.yml b/config/locales/simple_form.lv.yml index 96a5b9344a..7cc0a2ee32 100644 --- a/config/locales/simple_form.lv.yml +++ b/config/locales/simple_form.lv.yml @@ -56,7 +56,6 @@ lv: setting_aggregate_reblogs: Nerādīt jaunus pastiprinājumus ierakstiem, kas nesen tikuši pastiprināti (ietekmēs tikai turpmāk saņemtos pastiprinājumus) setting_always_send_emails: Parasti e-pasta paziņojumi netiek sūtīti, kad aktīvi izmantojat Mastodon setting_default_sensitive: Pēc noklusējuma jūtīgi informācijas nesēji ir paslēpti, un tos var atklāt ar klikšķi - setting_system_scrollbars_ui: Attiecas tikai uz darbvirsmas pārlūkiem, kuru pamatā ir Safari vai Chrome setting_use_blurhash: Pāreju pamatā ir paslēpto uzskatāmo līdzekļu krāsas, bet saturs tiek padarīts neskaidrs setting_use_pending_items: Paslēpt laika skalas atjauninājumus aiz klikšķa, nevis ar automātisku plūsmas ritināšanu username: Tu vari lietot burtus, ciparus un zemsvītras diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml index ac3833af5f..18d6145db4 100644 --- a/config/locales/simple_form.nl.yml +++ b/config/locales/simple_form.nl.yml @@ -66,7 +66,6 @@ nl: setting_display_media_show_all: Geef geen waarschuwing bij het tonen van alle media, inclusief als gevoelig gemarkeerde media setting_emoji_style: Waarmee moeten emojis worden weergegeven. ‘Auto’ probeert de systeemeigen emojis te gebruiken, maar valt terug op Twemoji voor oudere webbrowsers. setting_quick_boosting_html: Wanneer dit is ingeschakeld, boost je in één keer wanneer je op het %{boost_icon} boostpictogram klikt en verplaatst de citeeroptie zich naar het %{options_icon} optiemenu. Wanneer dit is uitgeschakeld krijg je gelijk de mogelijkheid om te boosten of te citeren. - setting_system_scrollbars_ui: Alleen van toepassing op desktopbrowsers gebaseerd op Safari en Chrome setting_use_blurhash: Wazige kleurovergangen zijn gebaseerd op de kleuren van de verborgen media, waarmee elk detail verdwijnt setting_use_pending_items: De tijdlijn wordt bijgewerkt door op het aantal nieuwe items te klikken, in plaats van dat deze automatisch wordt bijgewerkt username: Je kunt letters, cijfers en underscores gebruiken diff --git a/config/locales/simple_form.nn.yml b/config/locales/simple_form.nn.yml index 5bcb37107a..cc7dae3ee8 100644 --- a/config/locales/simple_form.nn.yml +++ b/config/locales/simple_form.nn.yml @@ -62,7 +62,6 @@ nn: setting_default_sensitive: Sensitive media vert gøymde som standard, og du syner dei ved å klikka på dei setting_emoji_style: Korleis du skal visa smilefjes. «Auto» prøver å visa innebygde smilefjes, men bruker Twemoji som reserveløysing for eldre nettlesarar. setting_quick_boosting_html: Når dette er skrudd på og du klikkar på %{boost_icon} framhev-ikonet, vil du framheva innlegget med ein gong i staden for å opna framhev/siter-menyen. Du finn siteringa i %{options_icon} (Val)-menyen. - setting_system_scrollbars_ui: Gjeld berre skrivebordsnettlesarar som er bygde på Safari og Chrome setting_use_blurhash: Overgangar er basert på fargane til skjulte grafikkelement, men gjer detaljar utydelege setting_use_pending_items: Gøym tidslineoppdateringar bak eit klikk, i staden for å rulla ned automatisk username: Du kan bruka bokstavar, tal og understrekar diff --git a/config/locales/simple_form.pl.yml b/config/locales/simple_form.pl.yml index 2532957821..82f4fe5d5a 100644 --- a/config/locales/simple_form.pl.yml +++ b/config/locales/simple_form.pl.yml @@ -65,7 +65,6 @@ pl: setting_display_media_show_all: Pokazuj wszystkie multimedia bez ostrzeżenia, w tym multimedia oznaczone jako wrażliwe setting_emoji_style: Jak wyświetlić emotikony. "Auto" spróbuje użyć natywnych emoji, ale wróci do Twemoji dla starszych przeglądarek. setting_quick_boosting_html: Po włączeniu tej opcji kliknięcie ikonki %{boost_icon} spowoduje natychmiastowe podbicie zamiast otwarcia menu rozwijanego z opcją podbicia lub cytatu. Przenosi to akcję cytowania do menu %{options_icon} (Opcje). - setting_system_scrollbars_ui: Stosuje się tylko do przeglądarek komputerowych opartych na Safari i Chrome setting_use_blurhash: Gradienty są oparte na kolorach ukrywanej zawartości, ale uniewidaczniają wszystkie szczegóły setting_use_pending_items: Ukryj aktualizacje osi czasu za kliknięciem, zamiast automatycznego przewijania strumienia username: Możesz używać liter, cyfr i podkreślników diff --git a/config/locales/simple_form.pt-BR.yml b/config/locales/simple_form.pt-BR.yml index 01d311208c..b48afcad48 100644 --- a/config/locales/simple_form.pt-BR.yml +++ b/config/locales/simple_form.pt-BR.yml @@ -66,7 +66,6 @@ pt-BR: setting_display_media_show_all: Mostre todas as mídias sem aviso, incluindo mídias marcadas como conteúdo sensível setting_emoji_style: Como exibir emojis. "Automáticos" tentará usar emojis nativos, mas voltará para o Twemoji para navegadores legados. setting_quick_boosting_html: Quando ativado, clicar no ícone de impulsionamento %{boost_icon} impulsionará imediatamente o texto, em vez de abrir o menu suspenso de impulsionamento/citação. Move a ação de citação para o menu %{options_icon} (Opções). - setting_system_scrollbars_ui: Se aplica apenas para navegadores de computador baseado no Safari e Chrome setting_use_blurhash: O blur é baseado nas cores da imagem oculta, ofusca a maioria dos detalhes setting_use_pending_items: Ocultar atualizações da linha do tempo atrás de um clique ao invés de rolar automaticamente username: Você pode usar letras, números e underlines diff --git a/config/locales/simple_form.pt-PT.yml b/config/locales/simple_form.pt-PT.yml index d9ea99131f..f2fa0268a8 100644 --- a/config/locales/simple_form.pt-PT.yml +++ b/config/locales/simple_form.pt-PT.yml @@ -66,7 +66,6 @@ pt-PT: setting_display_media_show_all: Mostrar toda a media sem aviso, incluindo media marcada como sensível setting_emoji_style: Como apresentar emojis. "Auto" tenta usar emojis nativos, mas reverte para Twemoji em navegadores mais antigos. setting_quick_boosting_html: Quando ativado, clicar no ícone %{boost_icon} Partilhar irá de imediato partilhar ao invés de abrir o menu de Partilhar/Citar. Relocaliza a ação Citar para o menu %{options_icon} (Opções). - setting_system_scrollbars_ui: Aplica-se apenas a navegadores de desktop baseados no Safari e Chrome setting_use_blurhash: Os gradientes são baseados nas cores das imagens escondidas, mas ofuscam quaisquer pormenores setting_use_pending_items: Ocultar as atualizações da cronologia após um clique em vez de percorrer automaticamente a cronologia username: Podes utilizar letras, números e traços inferiores (_) diff --git a/config/locales/simple_form.ru.yml b/config/locales/simple_form.ru.yml index c5a73b07cd..554d23a049 100644 --- a/config/locales/simple_form.ru.yml +++ b/config/locales/simple_form.ru.yml @@ -64,7 +64,6 @@ ru: setting_display_media_hide_all: Показывать предупреждение перед отображением любого контента setting_emoji_style: Как отображать эмодзи. Если выбран вариант «Автоматически», то будут использованы системные эмодзи, а для устаревших браузеров — Twemoji. setting_quick_boosting_html: Отметьте флажок, чтобы при нажатии на кнопку %{boost_icon} Продвинуть не выбирать между продвижением и цитированием, а сразу продвигать пост. Цитирование будет доступно из меню поста (%{options_icon}). - setting_system_scrollbars_ui: Работает только в браузерах для ПК на основе Safari или Chrome setting_use_blurhash: Градиенты основаны на цветах скрытых медиа, но размывают любые детали setting_use_pending_items: Отметьте флажок, чтобы выключить автоматическую прокрутку, и тогда обновления в лентах будут вам показаны только по нажатию username: Вы можете использовать буквы, цифры и символы подчёркивания diff --git a/config/locales/simple_form.si.yml b/config/locales/simple_form.si.yml index 28e2cc24e6..1a6a6d4329 100644 --- a/config/locales/simple_form.si.yml +++ b/config/locales/simple_form.si.yml @@ -56,7 +56,6 @@ si: setting_aggregate_reblogs: මෑතකදී වැඩි කරන ලද පළ කිරීම් සඳහා නව වැඩි කිරීම් නොපෙන්වන්න (අලුතින් ලැබුණු වැඩි කිරීම් වලට පමණක් බලපායි) setting_always_send_emails: ඔබ නිතර මාස්ටඩන් භාවිතා කරන විට වි-තැපැල් දැනුම්දීම් නොලැබෙයි setting_default_sensitive: සංවේදී මාධ්‍ය පෙරනිමියෙන් සඟවා ඇති අතර ක්ලික් කිරීමකින් හෙළිදරව් කළ හැක - setting_system_scrollbars_ui: Safari සහ Chrome මත පදනම් වූ ඩෙස්ක්ටොප් බ්‍රව්සර් සඳහා පමණක් අදාළ වේ. setting_use_blurhash: අනුක්‍රමණ සැඟවුණු දෘශ්‍යවල වර්ණ මත පදනම් වන නමුත් ඕනෑම විස්තරයක් අපැහැදිලි කරයි setting_use_pending_items: සංග්‍රහය ස්වයංක්‍රීයව අනුචලනය කරනවා වෙනුවට ක්ලික් කිරීමක් පිටුපස කාලරේඛා යාවත්කාලීන සඟවන්න username: ඔබට අකුරු, අංක සහ යටි ඉරි භාවිතා කළ හැකිය. diff --git a/config/locales/simple_form.sk.yml b/config/locales/simple_form.sk.yml index cdfa965c36..bcbfba1680 100644 --- a/config/locales/simple_form.sk.yml +++ b/config/locales/simple_form.sk.yml @@ -41,7 +41,6 @@ sk: setting_aggregate_reblogs: Nezobrazovať nové zdieľania pre nedávno zdieľané príspevky (týka sa iba nových zdieľaní) setting_always_send_emails: Pri bežnom používaní Mastodonu nebudete dostávať e-mailové upozornenia setting_default_sensitive: Citlivé médiá sú predvolene ukryté a môžu byť zobrazené kliknutím - setting_system_scrollbars_ui: Platí len pre počítačové prehliadače využívajúce technológiu Chrome alebo Safari setting_use_blurhash: Prechody sú založené na farbách skrytých vizuálov, ale skrývajú akékoľvek podrobnosti setting_use_pending_items: Časová os bude aktualizovaná až po kliknutí, feed sa nebúde posúvať automaticky whole_word: Ak je kľúčové slovo, alebo fráza poskladaná iba s písmen a čísel, bude použité iba ak sa zhoduje s celým výrazom diff --git a/config/locales/simple_form.sl.yml b/config/locales/simple_form.sl.yml index d08352516d..c925c64de3 100644 --- a/config/locales/simple_form.sl.yml +++ b/config/locales/simple_form.sl.yml @@ -57,7 +57,6 @@ sl: setting_aggregate_reblogs: Ne prikažite novih izpostavitev za objave, ki so bile nedavno izpostavljene (vpliva samo na novo prejete izpostavitve) setting_always_send_emails: Običajno e-obvestila ne bodo poslana, če ste na Mastodonu dejavni setting_default_sensitive: Občutljivi mediji so privzeto skriti in jih je mogoče razkriti s klikom - setting_system_scrollbars_ui: Velja zgolj za namizne brskalnike, ki temeljijo na Safariju in Chromeu setting_use_blurhash: Prelivi temeljijo na barvah skrite vizualne slike, vendar zakrivajo vse podrobnosti setting_use_pending_items: Skrij posodobitev časovnice za klikom namesto samodejnega posodabljanja username: Uporabite lahko črke, števke in podčrtaje. diff --git a/config/locales/simple_form.sq.yml b/config/locales/simple_form.sq.yml index b513e66dee..97f4e5bdd2 100644 --- a/config/locales/simple_form.sq.yml +++ b/config/locales/simple_form.sq.yml @@ -65,7 +65,6 @@ sq: setting_display_media_hide_all: Sinjalizo, para shfaqjes së çfarëdo medieje setting_display_media_show_all: Shfaq krejt mediat pa sinjalizuar, përfshi media të shënuar si me spec setting_quick_boosting_html: Kur aktivizohet, klikimi mbi ikonën e Përforcimeve %{boost_icon} do të bëjë menjëherë përforcimin, në vend se të hapet menuja hapmbyll e përforcimeve/citimeve. E rikalon veprimin e citimit te menuja %{options_icon} (Mundësi). - setting_system_scrollbars_ui: Ka vend vetëm për shfletues desktop bazuar në Safari dhe Chrome setting_use_blurhash: Gradientët bazohen në ngjyrat e elementëve pamorë të fshehur, por errësojnë çfarëdo hollësie setting_use_pending_items: Fshihi përditësimet e rrjedhës kohore pas një klikimi, në vend të rrëshqitjes automatike nëpër prurje username: Mund të përdorni shkronja, numra dhe nënvija diff --git a/config/locales/simple_form.sv.yml b/config/locales/simple_form.sv.yml index fca43a84b2..0782838615 100644 --- a/config/locales/simple_form.sv.yml +++ b/config/locales/simple_form.sv.yml @@ -66,7 +66,6 @@ sv: setting_display_media_show_all: Visa alla medier utan varning, inklusive media markerad som känslig setting_emoji_style: Hur emojier visas. "Automatiskt" kommer att försöka använda webbläsarens emojier, men faller tillbaka till Twemoji för äldre webbläsare. setting_quick_boosting_html: När aktiverad, klicka på %{boost_icon} Boost-ikonen för att omedelbart boosta istället för att öppna boost/citera-rullgardinsmenyn. Flyttar citering till %{options_icon} (Alternativ)-menyn. - setting_system_scrollbars_ui: Gäller endast för webbläsare som är baserade på Safari och Chrome setting_use_blurhash: Gradienter är baserade på färgerna av de dolda objekten men fördunklar alla detaljer setting_use_pending_items: Dölj tidslinjeuppdateringar bakom ett klick istället för att automatiskt bläddra i flödet username: Du kan använda bokstäver, siffror och understreck diff --git a/config/locales/simple_form.tr.yml b/config/locales/simple_form.tr.yml index 282d7a6463..41a618bcd8 100644 --- a/config/locales/simple_form.tr.yml +++ b/config/locales/simple_form.tr.yml @@ -66,7 +66,6 @@ tr: setting_display_media_show_all: Hassas olarak işaretlenmiş medya dahil olmak üzere tüm medyayı uyarı vermeden göster setting_emoji_style: Emojiler nasıl görüntülensin. "Otomatik" seçeneği yerel emojileri kullanmaya çalışır, ancak eski tarayıcılar için Twemoji'yi kullanır. setting_quick_boosting_html: Etkinleştirildiğinde, %{boost_icon} Öne Çıkar simgesine tıklandığında, öne çıkar/alıntı açılır menüsünü görüntüleme yerine hemen öne çıkarma işlemi gerçekleştirilir. Alıntı işlevi %{options_icon} (Seçenekler) menüsüne taşınır. - setting_system_scrollbars_ui: Yalnızca Safari ve Chrome tabanlı masaüstü tarayıcılar için geçerlidir setting_use_blurhash: Gradyenler gizli görsellerin renklerine dayanır, ancak detayları gizler setting_use_pending_items: Akışı otomatik olarak kaydırmak yerine, zaman çizelgesi güncellemelerini tek bir tıklamayla gizleyin username: Harfleri, sayıları veya alt çizgi kullanabilirsiniz diff --git a/config/locales/simple_form.uk.yml b/config/locales/simple_form.uk.yml index 489dff3d51..8323ca9ac9 100644 --- a/config/locales/simple_form.uk.yml +++ b/config/locales/simple_form.uk.yml @@ -62,7 +62,6 @@ uk: setting_default_sensitive: Делікатні медіа типово приховані та можуть бути розкриті натисканням setting_emoji_style: Як показувати емоджі. «Авто» — використовувати емоджі браузера, а за їхньої відсутності — Twemoji. setting_quick_boosting_html: Якщо увімкнено, натиск на піктограму %{boost_icon} Поширити призводитиме до негайного поширення, а не відкриватиме меню поширення й цитування. Кнопку цитування буде переміщено до меню %{options_icon} Більше. - setting_system_scrollbars_ui: Застосовується лише для настільних браузерів на основі Safari та Chrome setting_use_blurhash: Градієнти, що базуються на кольорах прихованих медіа, але роблять нерозрізненними будь-які деталі setting_use_pending_items: Не додавати нові повідомлення до стрічок миттєво, показувати лише після додаткового клацання username: Можна використовувати літери, цифри та підкреслення diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml index a5ffe49c44..548c9cbae6 100644 --- a/config/locales/simple_form.vi.yml +++ b/config/locales/simple_form.vi.yml @@ -66,7 +66,6 @@ vi: setting_display_media_show_all: Hiện tất cả phương tiện mà không cảnh báo, kể cả phương tiện đánh dấu nhạy cảm setting_emoji_style: '"Tự động" sẽ dùng biểu tượng cảm xúc nguyên bản, nhưng đối với các trình duyệt cũ sẽ chuyển thành Twemoji.' setting_quick_boosting_html: Nếu bật, nhấn biểu tượng %{boost_icon} Đăng lại sẽ đăng lại lập tức, thay vì mở menu xổ xuống đăng lại/trích dẫn. Chuyển vị trí hành động trích dẫn sang menu %{options_icon} (Tùy chọn). - setting_system_scrollbars_ui: Chỉ áp dụng trình duyệt Chrome và Safari bản desktop setting_use_blurhash: Phủ lớp màu làm nhòe đi hình ảnh nhạy cảm setting_use_pending_items: Dồn lại toàn bộ tút mới và chỉ hiển thị khi nhấn vào username: Chỉ dùng ký tự, số và dấu gạch dưới diff --git a/config/locales/simple_form.zh-CN.yml b/config/locales/simple_form.zh-CN.yml index 7135bb359e..83dd55aecd 100644 --- a/config/locales/simple_form.zh-CN.yml +++ b/config/locales/simple_form.zh-CN.yml @@ -66,7 +66,6 @@ zh-CN: setting_display_media_show_all: 显示所有媒体而不显示警告,包括被标记为敏感内容的媒体 setting_emoji_style: 如何显示Emoji表情符号。选择“自动”将尝试使用原生Emoji,但在旧浏览器中会备选使用Twemoji。 setting_quick_boosting_html: 如果启用,点击 %{boost_icon} 转嘟图标将立即转嘟,而非开启“转嘟/引用”的下拉式菜单。这会使引用嘟文操作的按钮移动到 %{options_icon} (选项)菜单中。 - setting_system_scrollbars_ui: 仅对基于 Safari 或 Chromium 内核的桌面端浏览器有效 setting_use_blurhash: 渐变是基于模糊后的隐藏内容生成的 setting_use_pending_items: 点击查看时间线更新,而非自动滚动更新动态。 username: 你只能使用字母、数字和下划线 diff --git a/config/locales/simple_form.zh-TW.yml b/config/locales/simple_form.zh-TW.yml index 7747a03446..a13a3c3a12 100644 --- a/config/locales/simple_form.zh-TW.yml +++ b/config/locales/simple_form.zh-TW.yml @@ -66,7 +66,6 @@ zh-TW: setting_display_media_show_all: 不警告並顯示所有多媒體內容,包括標記為敏感內容者 setting_emoji_style: 如何顯示 emoji 表情符號。「自動」將嘗試使用原生 emoji ,但於老式瀏覽器使用 Twemoji。 setting_quick_boosting_html: 當啟用時,點擊 %{boost_icon} 轉嘟圖示將立即轉嘟而非開啟轉嘟/引用之下拉選單。將引用嘟文操作移至 %{options_icon} (選項)選單中。 - setting_system_scrollbars_ui: 僅套用至基於 Safari 或 Chrome 之桌面瀏覽器 setting_use_blurhash: 彩色漸層圖樣是基於隱藏媒體內容顏色產生,所有細節將變得模糊 setting_use_pending_items: 關閉自動捲動更新,時間軸僅於點擊後更新 username: 您可以使用字幕、數字與底線 diff --git a/config/locales/sq.yml b/config/locales/sq.yml index 243f9b8a10..e4cdf0e993 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -1488,6 +1488,7 @@ sq: your_appeal_rejected: Apelimi juaj është hedhur poshtë edit_profile: other: Tjetër + privacy_redesign_body: Zgjedhja për shfaqjen e ndjekjeve dhe ndjekësve tuaj tanimë bëhet drejt e nga profili juaj. redesign_body: Përpunimi i profilit tanimë mund të kryhet drejt e nga faqja e profilit. redesign_button: Kalo atje redesign_title: Ka një rrugë të re përpunimi profili diff --git a/config/locales/sv.yml b/config/locales/sv.yml index 4434278bb0..28f7fb5894 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -744,6 +744,7 @@ sv: action_log: Granskningslogg action_taken_by: Åtgärder vidtagna av actions: + delete_description_html: De rapporterade inläggen och/eller samlingarna kommer raderas och en markör kommer registreras för att hjälpa dig att eskalera framtida överträdelser från samma konto. mark_as_sensitive_description_html: Medierna i de rapporterade inläggen kommer markeras som känsliga och en prick kommer registreras för att hjälpa dig eskalera framtida överträdelser av samma konto. other_description_html: Se fler alternativ för att kontrollera kontots beteende och anpassa kommunikationen till det rapporterade kontot. resolve_description_html: Ingen åtgärd vidtas mot det rapporterade kontot, ingen prick registreras och rapporten stängs. @@ -770,6 +771,7 @@ sv: confirm: Bekräfta confirm_action: Bekräfta modereringsåtgärd mot @%{acct} created_at: Anmäld + delete_and_resolve: Radera innehåll forwarded: Vidarebefordrad forwarded_replies_explanation: Den här rapporten är från en annans instans användare och handlar om annans instans inlägg. Det har vidarebefordrats till dig eftersom det rapporterade innehållet är som svar till en av dina användare. forwarded_to: Vidarebefordrad till %{domain} @@ -1497,6 +1499,7 @@ sv: your_appeal_rejected: Din överklagan har avvisats edit_profile: other: Övrigt + privacy_redesign_body: Valet att visa dina följare och vilka du följer görs nu direkt från din profil. redesign_body: Profilredigering kan nu nås direkt från profilsidan. redesign_button: Gå dit redesign_title: Det finns en ny profilredigeringsupplevelse diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 0363073bfb..44d247e2ac 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -1478,6 +1478,7 @@ vi: your_appeal_rejected: Khiếu nại của bạn bị từ chối edit_profile: other: Khác + privacy_redesign_body: Lựa chọn hiện lượt theo dõi và người theo dõi bạn giờ có thể điều chỉnh trực tiếp trên hồ sơ. redesign_body: Giờ đây, hồ sơ đã có thể chỉnh sửa trực tiếp từ trang hồ sơ. redesign_button: Tới đó redesign_title: Đã có trải nghiệm sửa hồ sơ mới diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 966dc99de2..8a41d98676 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -1478,6 +1478,7 @@ zh-CN: your_appeal_rejected: 你的申诉已被驳回 edit_profile: other: 其他 + privacy_redesign_body: 现在可以直接在个人资料页设置是否展示你的关注者和你关注的人。 redesign_body: 个人资料编辑功能现在可以直接在个人资料页面访问。 redesign_button: 前往 redesign_title: 全新个人资料编辑体验现已到来 diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 5f0b9fd7c8..99647d575f 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -1482,6 +1482,7 @@ zh-TW: your_appeal_rejected: 您的申訴已被駁回 edit_profile: other: 其他 + privacy_redesign_body: 您現在能直接於個人資料檔案頁面中選擇是否顯示您的跟隨中與跟隨者。 redesign_body: 個人檔案編輯功能現在能自個人檔案頁面直接存取。 redesign_button: 前往 redesign_title: 全新個人檔案編輯體驗 From 87024b9e1cf7f0945eae457501899216d79c9073 Mon Sep 17 00:00:00 2001 From: diondiondion Date: Mon, 8 Jun 2026 11:08:00 +0200 Subject: [PATCH 05/44] Fix alignment of icon and text in Callout component (#39324) --- .../components/callout/callout.stories.tsx | 19 ++++++++++++++----- .../components/callout/styles.module.css | 5 +++-- app/javascript/styles/mastodon/admin.scss | 5 +++-- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/app/javascript/mastodon/components/callout/callout.stories.tsx b/app/javascript/mastodon/components/callout/callout.stories.tsx index f9bba1ec14..bb973ab71f 100644 --- a/app/javascript/mastodon/components/callout/callout.stories.tsx +++ b/app/javascript/mastodon/components/callout/callout.stories.tsx @@ -34,6 +34,15 @@ export const Default: Story = { }, }; +export const NoTitle: Story = { + args: { + title: '', + primaryLabel: '', + secondaryLabel: '', + onClose: undefined, + }, +}; + export const NoIcon: Story = { args: { icon: false, @@ -56,11 +65,11 @@ export const OnlyText: Story = { }, }; -// export const Subtle: Story = { -// args: { -// variant: 'subtle', -// }, -// }; +export const Subtle: Story = { + args: { + variant: 'subtle', + }, +}; export const Feature: Story = { args: { diff --git a/app/javascript/mastodon/components/callout/styles.module.css b/app/javascript/mastodon/components/callout/styles.module.css index fc05e57ab3..dd2c753525 100644 --- a/app/javascript/mastodon/components/callout/styles.module.css +++ b/app/javascript/mastodon/components/callout/styles.module.css @@ -7,6 +7,7 @@ color: var(--color-text-primary); border-radius: 12px; font-size: 15px; + line-height: 1.3333; } .icon { @@ -14,7 +15,7 @@ border-radius: 9999px; width: 1rem; height: 1rem; - margin-top: -2px; + margin-block: -2px; } .content, @@ -46,7 +47,7 @@ h3 { font-weight: 500; - margin-bottom: 5px; + margin-bottom: 3px; } } diff --git a/app/javascript/styles/mastodon/admin.scss b/app/javascript/styles/mastodon/admin.scss index 7e5798ae54..5917f64963 100644 --- a/app/javascript/styles/mastodon/admin.scss +++ b/app/javascript/styles/mastodon/admin.scss @@ -457,6 +457,7 @@ $content-width: 840px; color: var(--color-text-primary); border-radius: 12px; font-size: 15px; + line-height: 1.3333; margin-bottom: 30px; .icon { @@ -464,7 +465,7 @@ $content-width: 840px; border-radius: 9999px; width: 1rem; height: 1rem; - margin-top: -2px; + margin-block: -2px; background-color: var(--color-bg-brand-soft); } @@ -502,7 +503,7 @@ $content-width: 840px; .title { font-weight: 600; - margin-bottom: 8px; + margin-bottom: 6px; font-size: inherit; line-height: inherit; } From bcafd7d0c7c929f5e90fa1f64c881632a145f8b8 Mon Sep 17 00:00:00 2001 From: diondiondion Date: Mon, 8 Jun 2026 12:16:33 +0200 Subject: [PATCH 06/44] Accessibility: Move column extra buttons out of h1 column heading (#39305) --- .../mastodon/components/column_header.tsx | 17 +++++++---------- app/javascript/styles/mastodon/components.scss | 6 +++++- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/app/javascript/mastodon/components/column_header.tsx b/app/javascript/mastodon/components/column_header.tsx index 076ca3085e..ac0624788b 100644 --- a/app/javascript/mastodon/components/column_header.tsx +++ b/app/javascript/mastodon/components/column_header.tsx @@ -152,7 +152,7 @@ export const ColumnHeader: React.FC = ({ active, }); - const buttonClassName = classNames('column-header', { + const headingClassName = classNames('column-header', { active, }); @@ -276,16 +276,14 @@ export const ColumnHeader: React.FC = ({ ); - const HeadingElement = hasTitle ? 'h1' : 'div'; - const component = (
- +
{hasTitle && ( - <> +

{backButton} - {onClick && ( + {onClick ? ( - )} - {!onClick && ( + ) : ( = ({ {titleContents} )} - +

)} {!hasTitle && backButton} @@ -313,7 +310,7 @@ export const ColumnHeader: React.FC = ({ {extraButton} {collapseButton}
-
+
Date: Mon, 8 Jun 2026 13:14:10 +0200 Subject: [PATCH 07/44] fix remove unused translation keys (#39326) --- config/locales/ko.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/config/locales/ko.yml b/config/locales/ko.yml index be8f0f71b3..345c919034 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -492,11 +492,9 @@ ko: email_subscriptions: accounts: account: 계정 - active: 활성 empty: hint: 구독자를 가진 계정이 없습니다. no_lists_yet: 리스트가 없습니다 - inactive: 비활성 last_email: 최근 이메일 status: 상태 subscribers: 구독자 From 94918dfcd12da38e0485d47c8db811a7f2440199 Mon Sep 17 00:00:00 2001 From: Noelle Leigh <5957867+noelleleigh@users.noreply.github.com> Date: Mon, 8 Jun 2026 08:58:42 -0400 Subject: [PATCH 08/44] Fix inconsistent `keyboard_shortcuts.translate` string (#39328) --- app/javascript/mastodon/locales/en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 3b64aeb6de..511ae3503c 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -846,7 +846,7 @@ "keyboard_shortcuts.toggle_sensitivity": "Show/hide media", "keyboard_shortcuts.toot": "Start a new post", "keyboard_shortcuts.top": "Move to top of list", - "keyboard_shortcuts.translate": "to translate a post", + "keyboard_shortcuts.translate": "Translate a post", "keyboard_shortcuts.unfocus": "Unfocus compose textarea/search", "keyboard_shortcuts.up": "Move up in the list", "learn_more_link.got_it": "Got it", From 51a956b6bc0eae8ebf7c7ee7bb62a167b4d18319 Mon Sep 17 00:00:00 2001 From: diondiondion Date: Mon, 8 Jun 2026 15:07:01 +0200 Subject: [PATCH 09/44] Fix tiny checkboxes and radio buttons in Safari (#39332) --- app/javascript/styles/mastodon/forms.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/javascript/styles/mastodon/forms.scss b/app/javascript/styles/mastodon/forms.scss index d3fdf2fb21..5791b4fc00 100644 --- a/app/javascript/styles/mastodon/forms.scss +++ b/app/javascript/styles/mastodon/forms.scss @@ -500,6 +500,8 @@ code { input[type='radio'] { accent-color: var(--color-text-brand); + width: 15px; + height: 15px; } } @@ -533,6 +535,8 @@ code { label.checkbox { input[type='checkbox'] { accent-color: var(--color-text-brand); + width: 15px; + height: 15px; } } From 5553448678a8a9f4ef970948b6fb7f013e9a4238 Mon Sep 17 00:00:00 2001 From: diondiondion Date: Mon, 8 Jun 2026 15:30:10 +0200 Subject: [PATCH 10/44] [Accessibility] Patch over a11y issues caused by "simple" ruby gems (#39325) --- app/javascript/entrypoints/public.tsx | 84 ++++++++++++++++++++++ app/views/auth/registrations/new.html.haml | 6 +- 2 files changed, 87 insertions(+), 3 deletions(-) diff --git a/app/javascript/entrypoints/public.tsx b/app/javascript/entrypoints/public.tsx index 4e5b35b973..5563b8324e 100644 --- a/app/javascript/entrypoints/public.tsx +++ b/app/javascript/entrypoints/public.tsx @@ -181,6 +181,8 @@ async function loaded() { truncateRuleHints(); + applyRailsA11yPatches(); + const reactComponents = document.querySelectorAll('[data-component]'); if (reactComponents.length > 0) { @@ -515,6 +517,88 @@ on('click', '.rules-list button', ({ target }) => { } }); +/** + * Patch accessibility issues caused by Ruby Gems that + * don't produce accessible markup (simple-forms & simple-navigation) + */ +function applyRailsA11yPatches() { + /** + * Mark current navigation item with aria-current + */ + const activeNavLink = document.querySelector( + '.simple-navigation-active-leaf a.selected', + ); + activeNavLink?.setAttribute('aria-current', 'page'); + + /** + * Hides the asterisk added to labels of required form fields + * from assistive tech. (Those fields already have the `required` attribute) + */ + document + .querySelectorAll('.simple_form label.required abbr') + .forEach((element) => { + element.setAttribute('aria-hidden', 'true'); + }); + + /** + * Associate form field hints with their inputs via aria-describedby + */ + document + .querySelectorAll('.simple_form .field_with_hint') + .forEach((field) => { + const inputs = field.querySelectorAll< + HTMLInputElement | HTMLTextAreaElement + >("input[type='text'], input[type='checkbox'], textarea"); + + const hint = field.querySelector('.hint'); + + // Bail out if there are more than one input as + // the association can't be safely made. + if (inputs.length !== 1 || !inputs[0] || !hint) { + return; + } + + const input = inputs[0]; + const inputId = input.getAttribute('id'); + const hintId = `${inputId}_hint`; + + input.setAttribute('aria-describedby', hintId); + hint.setAttribute('id', hintId); + }); + + /** + * Add fieldset-like group labels ("legends") to the date-of-birth selector + * and groups of radio buttons + */ + const groups = document.querySelectorAll( + '.simple_form .date_of_birth, .simple_form .input.with_label.radio_buttons', + ); + groups.forEach((groupWrapper) => { + // This is the element serving as the label of the group. + const groupLabel = groupWrapper.querySelector('label'); + const labelWithId = + groupWrapper.querySelector('label[for]'); + const groupHint = groupWrapper.querySelector('.hint'); + + // We need a unique ID to generate the aria associations. If `groupLabel` + // doesn't have one, we just take the first label with a `for` attribute + // that we can find, which is fine because we'll modify it before use. + const inputId = + groupLabel?.getAttribute('for') ?? labelWithId?.getAttribute('for'); + const labelId = `${inputId}_label`; + const hintId = `${inputId}_hint`; + + groupLabel?.setAttribute('id', labelId); + groupHint?.setAttribute('id', hintId); + + groupWrapper.setAttribute('role', 'group'); + groupWrapper.setAttribute('aria-labelledby', labelId); + if (groupHint) { + groupWrapper.setAttribute('aria-describedby', hintId); + } + }); +} + function main() { ready(loaded).catch((error: unknown) => { console.error(error); diff --git a/app/views/auth/registrations/new.html.haml b/app/views/auth/registrations/new.html.haml index 6695160f58..15e1bed973 100644 --- a/app/views/auth/registrations/new.html.haml +++ b/app/views/auth/registrations/new.html.haml @@ -21,17 +21,17 @@ = f.simple_fields_for :account do |ff| = ff.input :username, append: "@#{site_hostname}", - input_html: { autocomplete: 'off', pattern: '[a-zA-Z0-9_]+', maxlength: Account::USERNAME_LENGTH_LIMIT, placeholder: ' ' }, + input_html: { autocomplete: 'off', pattern: '[a-zA-Z0-9_]+', maxlength: Account::USERNAME_LENGTH_LIMIT }, required: true, wrapper: :with_label = f.input :email, hint: false, - input_html: { autocomplete: 'username', placeholder: ' ' }, + input_html: { autocomplete: 'username' }, required: true, wrapper: :with_label = f.input :password, hint: false, - input_html: { autocomplete: 'new-password', minlength: User.password_length.first, maxlength: User.password_length.last, placeholder: ' ' }, + input_html: { autocomplete: 'new-password', minlength: User.password_length.first, maxlength: User.password_length.last }, required: true, wrapper: :with_label = f.input :password_confirmation, From 1bfdfcae7b695811d021412d9d3abe6a833df7e9 Mon Sep 17 00:00:00 2001 From: diondiondion Date: Mon, 8 Jun 2026 15:45:28 +0200 Subject: [PATCH 11/44] Fix broken column header layout after heading refactor (#39331) --- .../mastodon/components/column_header.tsx | 13 +++++++------ app/javascript/styles/mastodon/components.scss | 11 ++++++----- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/app/javascript/mastodon/components/column_header.tsx b/app/javascript/mastodon/components/column_header.tsx index ac0624788b..36ed239a47 100644 --- a/app/javascript/mastodon/components/column_header.tsx +++ b/app/javascript/mastodon/components/column_header.tsx @@ -276,17 +276,20 @@ export const ColumnHeader: React.FC = ({ ); + const titleClassNames = classNames('column-header__title', { + 'column-header__title--with-back-button': !!backButton, + }); + const component = (
+ {backButton} {hasTitle && (

- {backButton} - {onClick ? ( ) : ( @@ -304,8 +307,6 @@ export const ColumnHeader: React.FC = ({

)} - {!hasTitle && backButton} -
{extraButton} {collapseButton} diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index bf87acf096..2ebe947337 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -4639,14 +4639,15 @@ a.status-card { outline: 0; &__title-wrapper { + display: flex; flex-grow: 1; } &__title { display: flex; align-items: center; - width: 100%; gap: 5px; + flex-grow: 1; margin: 0; border: 0; padding: 13px; @@ -4659,6 +4660,10 @@ a.status-card { overflow: hidden; white-space: nowrap; + &--with-back-button { + padding-inline-start: 0; + } + &:focus-visible { outline: var(--outline-focus-default); } @@ -4668,10 +4673,6 @@ a.status-card { } } - .column-header__back-button + &__title { - padding-inline-start: 0; - } - .column-header__back-button { flex: 1; color: var(--color-text-brand); From 37a9048cdfc967714903ea6d0ab2bf4b25c59db9 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 8 Jun 2026 10:03:43 -0400 Subject: [PATCH 12/44] Remove outdated dependency comment (#39307) --- app/validators/email_address_validator.rb | 6 ------ 1 file changed, 6 deletions(-) diff --git a/app/validators/email_address_validator.rb b/app/validators/email_address_validator.rb index 7cc303a636..4885651864 100644 --- a/app/validators/email_address_validator.rb +++ b/app/validators/email_address_validator.rb @@ -1,11 +1,5 @@ # frozen_string_literal: true -# NOTE: I initially wrote this as `EmailValidator` but it ended up clashing -# with an indirect dependency of ours, `validate_email`, which, turns out, -# has the same approach as we do, but with an extra check disallowing -# single-label domains. Decided to not switch to `validate_email` because -# we do want to allow at least `localhost`. - class EmailAddressValidator < ActiveModel::EachValidator def validate_each(record, attribute, value) value = value.strip From c4ea89dfd952e05da6edd0d47473fd4bd4834dae Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 8 Jun 2026 16:03:56 +0200 Subject: [PATCH 13/44] Change media attachment limit to 10000 characters (#39306) --- app/javascript/mastodon/features/alt_text_modal/index.tsx | 3 ++- app/models/media_attachment.rb | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/features/alt_text_modal/index.tsx b/app/javascript/mastodon/features/alt_text_modal/index.tsx index fc00e60a51..fafd460947 100644 --- a/app/javascript/mastodon/features/alt_text_modal/index.tsx +++ b/app/javascript/mastodon/features/alt_text_modal/index.tsx @@ -54,7 +54,8 @@ const messages = defineMessages({ }, }); -const MAX_LENGTH = 1500; +// TODO: use `description_limit` from the `/api/v2/instance` response +const MAX_LENGTH = 10000; type FocalPoint = [number, number]; diff --git a/app/models/media_attachment.rb b/app/models/media_attachment.rb index 1a65a44752..5ba5277d33 100644 --- a/app/models/media_attachment.rb +++ b/app/models/media_attachment.rb @@ -40,7 +40,7 @@ class MediaAttachment < ApplicationRecord SHORTCODE_LENGTH = 19 - MAX_DESCRIPTION_LENGTH = 1_500 + MAX_DESCRIPTION_LENGTH = 10_000 MAX_DESCRIPTION_HARD_LENGTH_LIMIT = 10_000 IMAGE_LIMIT = 16.megabytes From cf092479452434c125e6cf98b80843002d52dce6 Mon Sep 17 00:00:00 2001 From: David Roetzel Date: Mon, 8 Jun 2026 17:03:23 +0200 Subject: [PATCH 14/44] Check type of featured item and skip unsupported ones (#39327) --- .../process_featured_item_service.rb | 19 ++++++++++-- .../process_featured_item_service_spec.rb | 30 +++++++++++++++++-- 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/app/services/activitypub/process_featured_item_service.rb b/app/services/activitypub/process_featured_item_service.rb index c1470beeff..b9769cc037 100644 --- a/app/services/activitypub/process_featured_item_service.rb +++ b/app/services/activitypub/process_featured_item_service.rb @@ -15,6 +15,7 @@ class ActivityPub::ProcessFeaturedItemService @approval_uri = value_or_id(@item_json['featureAuthorization']) return if non_matching_uri_hosts?(@collection.uri, @item_json['id']) return if non_matching_actor_and_approval_uris? + return if non_supported_object_type? with_redis_lock("collection_item:#{@item_json['id']}") do @collection_item = existing_item || pre_approved_item || new_item @@ -39,7 +40,7 @@ class ActivityPub::ProcessFeaturedItemService def pre_approved_item # This is a local account that has authorized this item already - local_account = ActivityPub::TagManager.instance.uris_to_local_accounts([@item_json['featuredObject']]).first + local_account = ActivityPub::TagManager.instance.uris_to_local_accounts([@actor_uri]).first @collection.collection_items.accepted_partial(local_account).first if local_account.present? end @@ -49,12 +50,26 @@ class ActivityPub::ProcessFeaturedItemService ) end + def local_actor_uri? + return @local_actor_uri if instance_variable_defined?(:@local_actor_uri) + + @local_actor_uri = ActivityPub::TagManager.instance.local_uri?(@actor_uri) + end + def non_matching_actor_and_approval_uris? - return false if ActivityPub::TagManager.instance.local_uri?(@actor_uri) + return false if local_actor_uri? non_matching_uri_hosts?(@actor_uri, @approval_uri) end + def non_supported_object_type? + return false if local_actor_uri? + return false if Account.exists?(uri: @actor_uri) + + object_json = fetch_resource(@actor_uri, true) + (Array(object_json['type']) & ActivityPub::FetchRemoteActorService::SUPPORTED_TYPES).empty? + end + def verify_authorization! ActivityPub::VerifyFeaturedItemService.new.call(@collection_item, @approval_uri, request_id: @request_id) rescue Mastodon::RecursionLimitExceededError, Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS diff --git a/spec/services/activitypub/process_featured_item_service_spec.rb b/spec/services/activitypub/process_featured_item_service_spec.rb index 637c06c5ac..5f071e364e 100644 --- a/spec/services/activitypub/process_featured_item_service_spec.rb +++ b/spec/services/activitypub/process_featured_item_service_spec.rb @@ -9,7 +9,8 @@ RSpec.describe ActivityPub::ProcessFeaturedItemService do let(:collection) { Fabricate(:remote_collection, uri: 'https://other.example.com/collection/1') } let(:position) { 3 } - let(:featured_object_uri) { 'https://example.com/actor/1' } + let(:account) { Fabricate(:remote_account, uri: 'https://example.com/actor/1') } + let(:featured_object_uri) { account.uri } let(:feature_authorization_uri) { 'https://example.com/auth/1' } let(:featured_item_json) do { @@ -42,7 +43,6 @@ RSpec.describe ActivityPub::ProcessFeaturedItemService do end context 'when the actor URI does not match the approval URI' do - let(:featured_object_uri) { 'https://example.com/actor/1' } let(:feature_authorization_uri) { 'https://other.example.com/auth/1' } it 'does not create a collection item and returns `nil`' do @@ -117,6 +117,32 @@ RSpec.describe ActivityPub::ProcessFeaturedItemService do expect(collection_item.reload.uri).to eq 'https://other.example.com/featured_item/1' end end + + context 'when featured object is of an unsupported type' do + let(:hashtag_json) do + { + 'id' => 'https://example.com/hashtags/people', + 'type' => 'Hashtag', + 'name' => '#people', + } + end + let(:featured_object_uri) { hashtag_json['id'] } + + before do + stub_request(:get, featured_object_uri) + .to_return_json( + status: 200, + body: hashtag_json, + headers: { 'Content-Type' => 'application/activity+json' } + ) + end + + it 'does not create a collection item and returns `nil`' do + expect do + expect(subject.call(collection, object, position:)).to be_nil + end.to_not change(CollectionItem, :count) + end + end end context 'when only the id of the collection item is given' do From bc7e0543a3051ebc052d64e1bd2ae2b4549e51b8 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 8 Jun 2026 11:04:02 -0400 Subject: [PATCH 15/44] Add coverage for email subscription account controls (#39333) --- .../email_subscriptions/accounts_spec.rb | 26 ++++++++++++ .../email_subscriptions/accounts_spec.rb | 42 +++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 spec/requests/admin/email_subscriptions/accounts_spec.rb create mode 100644 spec/system/admin/email_subscriptions/accounts_spec.rb diff --git a/spec/requests/admin/email_subscriptions/accounts_spec.rb b/spec/requests/admin/email_subscriptions/accounts_spec.rb new file mode 100644 index 0000000000..6e609e356d --- /dev/null +++ b/spec/requests/admin/email_subscriptions/accounts_spec.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Admin Email Subscriptions Accounts' do + let(:user) { Fabricate(:admin_user) } + let(:account) { Fabricate :account } + + before { sign_in user } + + context 'when feature is disabled' do + around do |example| + original = Rails.application.config.x.email_subscriptions + Rails.application.config.x.email_subscriptions = false + example.run + Rails.application.config.x.email_subscriptions = original + end + + it 'returns not found' do + get admin_email_subscriptions_account_path(account.id) + + expect(response) + .to have_http_status(404) + end + end +end diff --git a/spec/system/admin/email_subscriptions/accounts_spec.rb b/spec/system/admin/email_subscriptions/accounts_spec.rb new file mode 100644 index 0000000000..e164da2bff --- /dev/null +++ b/spec/system/admin/email_subscriptions/accounts_spec.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Admin Email Subscriptions Accounts' do + let(:account) { Fabricate :account, user: Fabricate(:user, role:) } + let(:role) { Fabricate(:user_role, permissions: UserRole::FLAGS[:manage_email_subscriptions]) } + let(:user) { Fabricate(:admin_user) } + + before { sign_in user } + + context 'when feature is enabled' do + around do |example| + original = Rails.application.config.x.email_subscriptions + Rails.application.config.x.email_subscriptions = true + example.run + Rails.application.config.x.email_subscriptions = original + end + + describe 'Managing the email subscription feature for an account' do + before { Fabricate :email_subscription, account: } + + it 'views setting status and toggles enabled' do + visit admin_email_subscriptions_account_path(account.id) + expect(page) + .to have_title(/Email newsletters of/) + + # Change from disabled to enabled + expect { click_on I18n.t('admin.email_subscriptions.accounts.show.enable_feature') } + .to change { account.reload.user_email_subscriptions_enabled? }.from(false).to(true) + + # Change back from enabled to disabled + expect { click_on I18n.t('admin.email_subscriptions.accounts.show.disable_feature') } + .to change { account.reload.user_email_subscriptions_enabled? }.from(true).to(false) + + # Delete the subscription + expect { find('.table-icon-link').click } + .to change(account.email_subscriptions, :count).by(-1) + end + end + end +end From 4ee21a6c14e97a7f8ccbab22a1de5e91dae4f042 Mon Sep 17 00:00:00 2001 From: diondiondion Date: Mon, 8 Jun 2026 17:12:56 +0200 Subject: [PATCH 16/44] [Accessibility] Allow alerts ("toasts") to be announced by assistive tech (#39335) --- app/javascript/mastodon/components/alert/index.tsx | 1 + app/javascript/mastodon/components/alerts_controller.tsx | 9 +++------ app/javascript/styles/mastodon/components.scss | 4 ++++ 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/app/javascript/mastodon/components/alert/index.tsx b/app/javascript/mastodon/components/alert/index.tsx index 8bee99130f..3eb42ba1c6 100644 --- a/app/javascript/mastodon/components/alert/index.tsx +++ b/app/javascript/mastodon/components/alert/index.tsx @@ -53,6 +53,7 @@ export const Alert: React.FC<{ className='notification-bar__action' onClick={onActionClick} type='button' + aria-hidden='true' > {action} diff --git a/app/javascript/mastodon/components/alerts_controller.tsx b/app/javascript/mastodon/components/alerts_controller.tsx index aa97feeca5..90a222e89d 100644 --- a/app/javascript/mastodon/components/alerts_controller.tsx +++ b/app/javascript/mastodon/components/alerts_controller.tsx @@ -11,6 +11,7 @@ import type { } from 'mastodon/models/alert'; import { useAppSelector, useAppDispatch } from 'mastodon/store'; +import { A11yLiveRegion } from './a11y_live_region'; import { Alert } from './alert'; const formatIfNeeded = ( @@ -75,12 +76,8 @@ const TimedAlert: React.FC<{ export const AlertsController: React.FC = () => { const alerts = useAppSelector((state) => state.alerts); - if (alerts.length === 0) { - return null; - } - return ( -
+ {alerts.map((alert, idx) => ( { dismissAfter={5000 + idx * 1000} /> ))} -
+ ); }; diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 2ebe947337..cb2e6e9eb2 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -9843,6 +9843,10 @@ noscript { display: flex; flex-direction: column; gap: 4px; + + &:empty { + display: none; + } } .notification-bar { From fc64804b4db558ba45f412d60bb1cc2ff3200af2 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 8 Jun 2026 11:27:34 -0400 Subject: [PATCH 17/44] Update rubocop-rspec to version 3.10.1 (#39303) --- Gemfile.lock | 7 ++++--- .../concerns/web_app_controller_concern_spec.rb | 4 ++-- spec/helpers/admin/filter_helper_spec.rb | 4 ++-- spec/helpers/application_helper_spec.rb | 6 +++--- spec/helpers/theme_helper_spec.rb | 2 +- spec/lib/emoji_formatter_spec.rb | 8 ++++---- spec/locales/i18n_spec.rb | 4 ++-- spec/requests/api/v1/statuses_spec.rb | 2 +- spec/requests/remote_interaction_helper_spec.rb | 2 +- spec/serializers/rest/admin/cohort_serializer_spec.rb | 2 +- spec/views/statuses/show.html.haml_spec.rb | 4 ++-- spec/workers/import/row_worker_spec.rb | 1 + 12 files changed, 24 insertions(+), 22 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index dcbcb8d9b0..1ab5362854 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -778,15 +778,16 @@ GEM lint_roller (~> 1.1) rubocop (>= 1.75.0, < 2.0) rubocop-ast (>= 1.47.1, < 2.0) - rubocop-rails (2.35.3) + rubocop-rails (2.35.4) activesupport (>= 4.2.0) lint_roller (~> 1.1) rack (>= 1.1) rubocop (>= 1.75.0, < 2.0) rubocop-ast (>= 1.44.0, < 2.0) - rubocop-rspec (3.9.0) + rubocop-rspec (3.10.2) lint_roller (~> 1.1) - rubocop (~> 1.81) + regexp_parser (>= 2.0) + rubocop (~> 1.86, >= 1.86.2) rubocop-rspec_rails (2.32.0) lint_roller (~> 1.1) rubocop (~> 1.72, >= 1.72.1) diff --git a/spec/controllers/concerns/web_app_controller_concern_spec.rb b/spec/controllers/concerns/web_app_controller_concern_spec.rb index 2e7c20a0fe..e526720fac 100644 --- a/spec/controllers/concerns/web_app_controller_concern_spec.rb +++ b/spec/controllers/concerns/web_app_controller_concern_spec.rb @@ -31,7 +31,7 @@ RSpec.describe WebAppControllerConcern do expect(response) .to have_http_status(:success) expect(response.body) - .to match(/show/) + .to include('show') end end @@ -47,7 +47,7 @@ RSpec.describe WebAppControllerConcern do expect(response) .to have_http_status(:success) expect(response.body) - .to match(/show/) + .to include('show') end end diff --git a/spec/helpers/admin/filter_helper_spec.rb b/spec/helpers/admin/filter_helper_spec.rb index d07a6e1bb7..72cb8863c9 100644 --- a/spec/helpers/admin/filter_helper_spec.rb +++ b/spec/helpers/admin/filter_helper_spec.rb @@ -10,12 +10,12 @@ RSpec.describe Admin::FilterHelper do allow(helper).to receive_messages(params: params, url_for: '/test') result = helper.filter_link_to('text', { resolved: true }) - expect(result).to match(/text/) + expect(result).to include('text') end it 'Uses table_link_to to create icon links' do result = helper.table_link_to 'icon', 'text', 'path' - expect(result).to match(/text/) + expect(result).to include('text') end end diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb index 1b95be1d33..cff79a7c73 100644 --- a/spec/helpers/application_helper_spec.rb +++ b/spec/helpers/application_helper_spec.rb @@ -16,8 +16,8 @@ RSpec.describe ApplicationHelper do it 'uses the current theme and user settings classes in the result' do expect(helper.html_classes) - .to match(/system-font/) - .and match(/reduce-motion/) + .to include('system-font') + .and include('reduce-motion') end private @@ -38,7 +38,7 @@ RSpec.describe ApplicationHelper do helper.content_for(:body_classes) { 'admin' } expect(helper.body_classes) - .to match(/admin/) + .to include('admin') end end end diff --git a/spec/helpers/theme_helper_spec.rb b/spec/helpers/theme_helper_spec.rb index b6b50a7bfa..28ae6fdddb 100644 --- a/spec/helpers/theme_helper_spec.rb +++ b/spec/helpers/theme_helper_spec.rb @@ -12,7 +12,7 @@ RSpec.describe ThemeHelper do it 'returns the default stylesheet' do expect(html_links.last.attributes.symbolize_keys) .to include( - href: have_attributes(value: match(/default/)) + href: have_attributes(value: include('default')) ) end end diff --git a/spec/lib/emoji_formatter_spec.rb b/spec/lib/emoji_formatter_spec.rb index e5accfbb0c..e5a0efa20f 100644 --- a/spec/lib/emoji_formatter_spec.rb +++ b/spec/lib/emoji_formatter_spec.rb @@ -26,7 +26,7 @@ RSpec.describe EmojiFormatter do let(:text) { preformat_text(':coolcat: Beep boop') } it 'converts the shortcode to an image tag' do - expect(subject).to match(/:coolcat: be_a(Array).and( all(include('date' => match_api_datetime_format)) ), - 'period' => match(/2024-01-01/).and(match_api_datetime_format) + 'period' => include('2024-01-01').and(match_api_datetime_format) ) end end diff --git a/spec/views/statuses/show.html.haml_spec.rb b/spec/views/statuses/show.html.haml_spec.rb index 02b1fe7384..1b59232034 100644 --- a/spec/views/statuses/show.html.haml_spec.rb +++ b/spec/views/statuses/show.html.haml_spec.rb @@ -23,13 +23,13 @@ RSpec.describe 'statuses/show.html.haml' do expect(header_tags) .to match(//) - .and match(//) + .and include('') .and match(//) .and match(%r{}) expect(header_tags) .to match(%r{}) - .and match(//) + .and include('') end def header_tags diff --git a/spec/workers/import/row_worker_spec.rb b/spec/workers/import/row_worker_spec.rb index f173d49706..20de7831f8 100644 --- a/spec/workers/import/row_worker_spec.rb +++ b/spec/workers/import/row_worker_spec.rb @@ -20,6 +20,7 @@ RSpec.describe Import::RowWorker do shared_context 'when service errors' do let(:service_double) { instance_double(BulkImportRowService) } + before { allow(service_double).to receive(:call).and_raise('dummy error') } end From 4a5a915e86a7eb3ccef4206ce69a8b89d9672c2b Mon Sep 17 00:00:00 2001 From: Nicholas La Roux Date: Mon, 8 Jun 2026 18:01:20 +0200 Subject: [PATCH 18/44] Migrate a few tests to use `NotificationAssertions` (#38098) --- spec/lib/request_pool_spec.rb | 10 ++++++++-- spec/models/setting_spec.rb | 15 ++++++--------- spec/rails_helper.rb | 1 + 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/spec/lib/request_pool_spec.rb b/spec/lib/request_pool_spec.rb index 2e8c785de8..8df7339156 100644 --- a/spec/lib/request_pool_spec.rb +++ b/spec/lib/request_pool_spec.rb @@ -52,11 +52,17 @@ RSpec.describe RequestPool do end it 'closes the connections' do - subject.with('http://example.com') do |http_client| - http_client.get('/').flush + notifications = capture_notifications('with.request_pool') do + subject.with('http://example.com') do |http_client| + http_client.get('/').flush + end end expect { reaper_observes_idle_timeout }.to change(subject, :size).from(1).to(0) + + expect(notifications.size).to eq(1) + expect(notifications.first.payload[:host]).to eq('http://example.com') + expect(notifications.first.payload[:miss]).to be(true) end def reaper_observes_idle_timeout diff --git a/spec/models/setting_spec.rb b/spec/models/setting_spec.rb index a1e24e8350..d4b0661217 100644 --- a/spec/models/setting_spec.rb +++ b/spec/models/setting_spec.rb @@ -36,14 +36,12 @@ RSpec.describe Setting do context 'when the setting has been saved to database' do it 'returns the value from database' do - callback = double - allow(callback).to receive(:call) - - ActiveSupport::Notifications.subscribed callback, 'sql.active_record' do + notifications = capture_notifications('sql.active_record') do expect(described_class[key]).to eq 42 end - expect(callback).to have_received(:call) + expect(notifications.size).to eq(1) + expect(notifications.first.payload[:name]).to eq('Setting Load') end end @@ -62,12 +60,11 @@ RSpec.describe Setting do end it 'does not query the database' do - callback = double - allow(callback).to receive(:call) - ActiveSupport::Notifications.subscribed callback, 'sql.active_record' do + notifications = capture_notifications('sql.active_record') do described_class[key] end - expect(callback).to_not have_received(:call) + + expect(notifications).to be_empty end it 'returns the cached value' do diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 02bd2ef25e..55ad344b80 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -82,6 +82,7 @@ RSpec.configure do |config| config.include Devise::Test::IntegrationHelpers, type: :request config.include ActionMailer::TestHelper config.include Paperclip::Shoulda::Matchers + config.include ActiveSupport::Testing::NotificationAssertions config.include ActiveSupport::Testing::TimeHelpers config.include Chewy::Rspec::Helpers config.include Redisable From 481e51b81e4009ad14192ba6ee3f896bfe77d28f Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 9 Jun 2026 10:30:43 +0200 Subject: [PATCH 19/44] Put Elasticsearch search queries behind a Stoplight (#39323) --- app/services/account_search_service.rb | 6 ++++-- app/services/concerns/search_stoplight.rb | 15 +++++++++++++++ app/services/statuses_search_service.rb | 6 ++++-- 3 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 app/services/concerns/search_stoplight.rb diff --git a/app/services/account_search_service.rb b/app/services/account_search_service.rb index 6c24c5da8d..64defd31c3 100644 --- a/app/services/account_search_service.rb +++ b/app/services/account_search_service.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true class AccountSearchService < BaseService + include SearchStoplight + attr_reader :query, :limit, :offset, :options, :account MENTION_ONLY_RE = /\A#{Account::MENTION_RE}\z/i @@ -251,12 +253,12 @@ class AccountSearchService < BaseService end end - records = query_builder.build.limit(limit_for_non_exact_results).offset(offset).objects.compact + records = elastic_stoplight_wrapper.run { query_builder.build.limit(limit_for_non_exact_results).offset(offset).objects.compact } ActiveRecord::Associations::Preloader.new(records: records, associations: [:account_stat, { user: :role }]).call records - rescue Faraday::ConnectionFailed, Parslet::ParseFailed, Errno::ENETUNREACH + rescue Stoplight::Error::RedLight, Faraday::ConnectionFailed, Parslet::ParseFailed, Errno::ENETUNREACH, OpenSSL::SSL::SSLError, Elastic::Transport::Transport::Error nil end diff --git a/app/services/concerns/search_stoplight.rb b/app/services/concerns/search_stoplight.rb new file mode 100644 index 0000000000..c7f12a3bec --- /dev/null +++ b/app/services/concerns/search_stoplight.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module SearchStoplight + STOPLIGHT_COOL_OFF_TIME = 5.minutes.seconds + STOPLIGHT_THRESHOLD = 10 + + def elastic_stoplight_wrapper + Stoplight( + 'search:elasticsearch', + cool_off_time: STOPLIGHT_COOL_OFF_TIME, + threshold: STOPLIGHT_THRESHOLD, + tracked_errors: [Faraday::ConnectionFailed, Errno::ENETUNREACH, OpenSSL::SSL::SSLError, Elastic::Transport::Transport::Error] + ) + end +end diff --git a/app/services/statuses_search_service.rb b/app/services/statuses_search_service.rb index 3147349d70..8eda1a1430 100644 --- a/app/services/statuses_search_service.rb +++ b/app/services/statuses_search_service.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true class StatusesSearchService < BaseService + include SearchStoplight + def call(query, account = nil, options = {}) MastodonOTELTracer.in_span('StatusesSearchService#call') do |span| @query = query&.strip @@ -26,14 +28,14 @@ class StatusesSearchService < BaseService def status_search_results request = parsed_query.request - results = request.collapse(field: :id).order(id: { order: :desc }).limit(@limit).offset(@offset).objects.compact + results = elastic_stoplight_wrapper.run { request.collapse(field: :id).order(id: { order: :desc }).limit(@limit).offset(@offset).objects.compact } account_ids = results.map(&:account_id) account_domains = results.map(&:account_domain) @account.preload_relations!(account_ids, account_domains) results.reject { |status| StatusFilter.new(status, @account).filtered? } - rescue Faraday::ConnectionFailed, Parslet::ParseFailed, Errno::ENETUNREACH + rescue Stoplight::Error::RedLight, Faraday::ConnectionFailed, Parslet::ParseFailed, Errno::ENETUNREACH, OpenSSL::SSL::SSLError, Elastic::Transport::Transport::Error [] end From 0b0cdd7a77639b30766b19976a6b9fd3277db6bb Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 9 Jun 2026 10:30:48 +0200 Subject: [PATCH 20/44] Remove doorkeeper workaround (#39336) --- config/application.rb | 3 +++ config/initializers/doorkeeper.rb | 6 ------ 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/config/application.rb b/config/application.rb index 5c5de3e23a..09fe38065e 100644 --- a/config/application.rb +++ b/config/application.rb @@ -111,6 +111,9 @@ module Mastodon end config.to_prepare do + Doorkeeper::Application.include ApplicationExtension + Doorkeeper::AccessGrant.include AccessGrantExtension + Doorkeeper::AccessToken.include AccessTokenExtension Devise::FailureApp.include AbstractController::Callbacks Devise::FailureApp.include Localized end diff --git a/config/initializers/doorkeeper.rb b/config/initializers/doorkeeper.rb index 2fb690032a..908acb5503 100644 --- a/config/initializers/doorkeeper.rb +++ b/config/initializers/doorkeeper.rb @@ -179,9 +179,3 @@ Doorkeeper.configure do # WWW-Authenticate Realm (default "Doorkeeper"). # realm "Doorkeeper" end - -Rails.application.reloader.to_prepare do - Doorkeeper.config.application_model.include ApplicationExtension - Doorkeeper.config.access_grant_model.include AccessGrantExtension - Doorkeeper.config.access_token_model.include AccessTokenExtension -end From 422d0e4e202bab642703792d0644556af28a3928 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 9 Jun 2026 10:30:53 +0200 Subject: [PATCH 21/44] Add duration to ActivityPub representation of media attachments (#38061) --- app/serializers/activitypub/note_serializer.rb | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app/serializers/activitypub/note_serializer.rb b/app/serializers/activitypub/note_serializer.rb index a8e1315bee..d67770933b 100644 --- a/app/serializers/activitypub/note_serializer.rb +++ b/app/serializers/activitypub/note_serializer.rb @@ -257,6 +257,7 @@ class ActivityPub::NoteSerializer < ActivityPub::Serializer attribute :focal_point, if: :focal_point? attribute :width, if: :width? attribute :height, if: :height? + attribute :duration, if: :duration? has_one :icon, serializer: ActivityPub::ImageSerializer, if: :thumbnail? @@ -300,6 +301,10 @@ class ActivityPub::NoteSerializer < ActivityPub::Serializer object.file.meta&.dig('original', 'height').present? end + def duration? + object.file.meta&.dig('original', 'duration').present? + end + def width object.file.meta.dig('original', 'width') end @@ -307,6 +312,10 @@ class ActivityPub::NoteSerializer < ActivityPub::Serializer def height object.file.meta.dig('original', 'height') end + + def duration + object.file.meta.dig('original', 'duration').seconds.iso8601 + end end class MentionSerializer < ActivityPub::Serializer From 4f062c8c7bf4d4c8b6d4f575c63f1e00b53fc2e3 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 9 Jun 2026 04:52:38 -0400 Subject: [PATCH 22/44] Fix intermittent failure with order dependent RankedTrend `locales` pluck (#39338) --- spec/support/examples/models/concerns/ranked_trend.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/support/examples/models/concerns/ranked_trend.rb b/spec/support/examples/models/concerns/ranked_trend.rb index 827165cc83..723674bf5f 100644 --- a/spec/support/examples/models/concerns/ranked_trend.rb +++ b/spec/support/examples/models/concerns/ranked_trend.rb @@ -34,7 +34,7 @@ RSpec.shared_examples 'RankedTrend' do it 'returns unique set of languages' do expect(described_class.locales) - .to eq(['en', 'es']) + .to contain_exactly('en', 'es') end end From 7b858ec3e6efe642cbecaa2e52078f82c9851d64 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 9 Jun 2026 11:25:45 +0200 Subject: [PATCH 23/44] New Crowdin Translations (automated) (#39341) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/ar.json | 1 - app/javascript/mastodon/locales/az.json | 1 - app/javascript/mastodon/locales/be.json | 2 +- app/javascript/mastodon/locales/bg.json | 1 - app/javascript/mastodon/locales/br.json | 1 - app/javascript/mastodon/locales/ca.json | 1 - app/javascript/mastodon/locales/cs.json | 1 - app/javascript/mastodon/locales/cy.json | 1 - app/javascript/mastodon/locales/da.json | 2 +- app/javascript/mastodon/locales/el.json | 2 +- app/javascript/mastodon/locales/en-GB.json | 1 - app/javascript/mastodon/locales/eo.json | 1 - app/javascript/mastodon/locales/es-AR.json | 2 +- app/javascript/mastodon/locales/es-MX.json | 2 +- app/javascript/mastodon/locales/es.json | 2 +- app/javascript/mastodon/locales/et.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/fo.json | 1 - app/javascript/mastodon/locales/fr-CA.json | 2 +- app/javascript/mastodon/locales/fr.json | 2 +- app/javascript/mastodon/locales/fy.json | 1 - app/javascript/mastodon/locales/ga.json | 2 +- app/javascript/mastodon/locales/gd.json | 1 - app/javascript/mastodon/locales/gl.json | 1 - app/javascript/mastodon/locales/he.json | 1 - app/javascript/mastodon/locales/ia.json | 1 - app/javascript/mastodon/locales/io.json | 1 - app/javascript/mastodon/locales/is.json | 2 +- app/javascript/mastodon/locales/it.json | 2 +- app/javascript/mastodon/locales/ja.json | 1 - app/javascript/mastodon/locales/kab.json | 1 - app/javascript/mastodon/locales/ko.json | 1 - app/javascript/mastodon/locales/lad.json | 1 - app/javascript/mastodon/locales/lt.json | 1 - app/javascript/mastodon/locales/lv.json | 12 ++++++++---- app/javascript/mastodon/locales/nan-TW.json | 1 - app/javascript/mastodon/locales/nl.json | 2 +- app/javascript/mastodon/locales/nn.json | 1 - app/javascript/mastodon/locales/no.json | 1 - app/javascript/mastodon/locales/pa.json | 1 - app/javascript/mastodon/locales/pl.json | 1 - app/javascript/mastodon/locales/pt-BR.json | 2 +- app/javascript/mastodon/locales/pt-PT.json | 1 - app/javascript/mastodon/locales/ru.json | 1 - app/javascript/mastodon/locales/sc.json | 1 - app/javascript/mastodon/locales/si.json | 1 - app/javascript/mastodon/locales/sk.json | 1 - app/javascript/mastodon/locales/sl.json | 1 - app/javascript/mastodon/locales/sq.json | 1 - app/javascript/mastodon/locales/sv.json | 1 - app/javascript/mastodon/locales/th.json | 1 - app/javascript/mastodon/locales/tok.json | 1 - app/javascript/mastodon/locales/tr.json | 10 +++++++++- app/javascript/mastodon/locales/uk.json | 1 - app/javascript/mastodon/locales/vi.json | 1 - config/locales/da.yml | 17 +++++++++++++++++ config/locales/doorkeeper.lv.yml | 2 +- config/locales/el.yml | 17 +++++++++++++++++ config/locales/es-AR.yml | 17 +++++++++++++++++ config/locales/es-MX.yml | 19 +++++++++++++++++++ config/locales/es.yml | 21 ++++++++++++++++++++- config/locales/fi.yml | 19 +++++++++++++++++++ config/locales/fr-CA.yml | 17 +++++++++++++++++ config/locales/fr.yml | 17 +++++++++++++++++ config/locales/ga.yml | 17 +++++++++++++++++ config/locales/hu.yml | 18 ++++++++++++++++++ config/locales/is.yml | 12 ++++++++++++ config/locales/it.yml | 17 +++++++++++++++++ config/locales/lv.yml | 12 ++++++------ config/locales/nl.yml | 17 +++++++++++++++++ config/locales/pt-BR.yml | 17 +++++++++++++++++ config/locales/simple_form.lv.yml | 8 ++++---- config/locales/tr.yml | 18 ++++++++++++++++++ config/locales/zh-CN.yml | 17 +++++++++++++++++ config/locales/zh-TW.yml | 17 +++++++++++++++++ 77 files changed, 335 insertions(+), 71 deletions(-) diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 839ab07a37..3439508777 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -761,7 +761,6 @@ "keyboard_shortcuts.toggle_hidden": "لعرض أو إخفاء النص مِن وراء التحذير", "keyboard_shortcuts.toggle_sensitivity": "لعرض/إخفاء الوسائط", "keyboard_shortcuts.toot": "للشروع في تحرير منشور جديد", - "keyboard_shortcuts.translate": "لترجمة منشور", "keyboard_shortcuts.unfocus": "لإلغاء التركيز على حقل النص أو نافذة البحث", "keyboard_shortcuts.up": "للانتقال إلى أعلى القائمة", "learn_more_link.got_it": "مفهوم", diff --git a/app/javascript/mastodon/locales/az.json b/app/javascript/mastodon/locales/az.json index 4be0facc60..95c6cd5bce 100644 --- a/app/javascript/mastodon/locales/az.json +++ b/app/javascript/mastodon/locales/az.json @@ -535,7 +535,6 @@ "keyboard_shortcuts.toggle_hidden": "CW arxasındakı mətni göstər/gizlət", "keyboard_shortcuts.toggle_sensitivity": "Medianı göstər/gizlət", "keyboard_shortcuts.toot": "Yeni bir göndəriş başlat", - "keyboard_shortcuts.translate": "bir göndərişi tərcümə etmək üçün", "keyboard_shortcuts.unfocus": "Fokusu göndəriş yazma xanasından/axtarışdan götür", "keyboard_shortcuts.up": "Siyahıda yuxarı daşı", "learn_more_link.got_it": "Anladım", diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json index 06c7f961ae..cfef805f01 100644 --- a/app/javascript/mastodon/locales/be.json +++ b/app/javascript/mastodon/locales/be.json @@ -846,7 +846,7 @@ "keyboard_shortcuts.toggle_sensitivity": "Паказаць/схаваць медыя", "keyboard_shortcuts.toot": "Стварыць новы допіс", "keyboard_shortcuts.top": "Перайсці да вяршыні спіса", - "keyboard_shortcuts.translate": "каб перакласці допіс", + "keyboard_shortcuts.translate": "Перакласці допіс", "keyboard_shortcuts.unfocus": "Расфакусіраваць тэкставую вобласць/пошукавы радок", "keyboard_shortcuts.up": "Перамясціцца ўверх па спісе", "learn_more_link.got_it": "Зразумеў(-ла)", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index d7e48086bc..89c317c9ab 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -452,7 +452,6 @@ "keyboard_shortcuts.toggle_hidden": "Показване/скриване на текст зад предупреждение на съдържание", "keyboard_shortcuts.toggle_sensitivity": "Показване/скриване на мултимедията", "keyboard_shortcuts.toot": "Начало на нова публикация", - "keyboard_shortcuts.translate": "за превод на публикация", "keyboard_shortcuts.unfocus": "Разфокусиране на текстовото поле за съставяне/търсене", "keyboard_shortcuts.up": "Преместване нагоре в списъка", "learn_more_link.got_it": "Разбрах", diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json index a852e98cea..85fc6cd933 100644 --- a/app/javascript/mastodon/locales/br.json +++ b/app/javascript/mastodon/locales/br.json @@ -432,7 +432,6 @@ "keyboard_shortcuts.toggle_hidden": "da guzhat/ziguzhat an desten a-dreñv CW", "keyboard_shortcuts.toggle_sensitivity": "da guzhat/ziguzhat ur media", "keyboard_shortcuts.toot": "Kregiñ gant un embannadur nevez", - "keyboard_shortcuts.translate": "da dreiñ un embannadur", "keyboard_shortcuts.unfocus": "Difokus an dachenn testenn/klask", "keyboard_shortcuts.up": "Pignat er roll", "learn_more_link.got_it": "Mat eo", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index f8a00143b4..2497189b41 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -547,7 +547,6 @@ "keyboard_shortcuts.toggle_sensitivity": "Mostra/amaga contingut", "keyboard_shortcuts.toot": "Escriu un nou tut", "keyboard_shortcuts.top": "Mou al capdamunt de la llista", - "keyboard_shortcuts.translate": "per a traduir una publicació", "keyboard_shortcuts.unfocus": "Descentra l'àrea de composició de text/cerca", "keyboard_shortcuts.up": "Apuja a la llista", "learn_more_link.got_it": "Entesos", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index c2515f037b..2bff4a8da2 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -607,7 +607,6 @@ "keyboard_shortcuts.toggle_sensitivity": "Zobrazit/skrýt média", "keyboard_shortcuts.toot": "Začít nový příspěvek", "keyboard_shortcuts.top": "Přesunout na začátek seznamu", - "keyboard_shortcuts.translate": "k přeložení příspěvku", "keyboard_shortcuts.unfocus": "Zrušit zaměření na nový příspěvek/hledání", "keyboard_shortcuts.up": "Posunout v seznamu nahoru", "learn_more_link.got_it": "Rozumím", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index fdd35c3a95..d919fda4bd 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -828,7 +828,6 @@ "keyboard_shortcuts.toggle_sensitivity": "Dangos/cuddio cyfryngau", "keyboard_shortcuts.toot": "Dechrau post newydd", "keyboard_shortcuts.top": "Symud i frig y rhestr", - "keyboard_shortcuts.translate": "i gyfieithu postiad", "keyboard_shortcuts.unfocus": "Dad-ffocysu ardal cyfansoddi testun/chwilio", "keyboard_shortcuts.up": "Symud yn uwch yn y rhestr", "learn_more_link.got_it": "Iawn", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index 96e2fcb5df..172923513f 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -846,7 +846,7 @@ "keyboard_shortcuts.toggle_sensitivity": "Vis/skjul medier", "keyboard_shortcuts.toot": "Påbegynd nyt indlæg", "keyboard_shortcuts.top": "Flyt til toppen af listen", - "keyboard_shortcuts.translate": "for at oversætte et indlæg", + "keyboard_shortcuts.translate": "Oversæt et indlæg", "keyboard_shortcuts.unfocus": "Fjern fokus fra tekstskrivningsområde/søgning", "keyboard_shortcuts.up": "Flyt opad på listen", "learn_more_link.got_it": "Forstået", diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 76ad93350f..0d7850f09c 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -846,7 +846,7 @@ "keyboard_shortcuts.toggle_sensitivity": "Εμφάνιση/απόκρυψη πολυμέσων", "keyboard_shortcuts.toot": "Δημιουργία νέας ανάρτησης", "keyboard_shortcuts.top": "Μετακίνηση στην κορυφή της λίστας", - "keyboard_shortcuts.translate": "για να μεταφραστεί μια ανάρτηση", + "keyboard_shortcuts.translate": "Μετάφραση μιας ανάρτησης", "keyboard_shortcuts.unfocus": "Αποεστίαση του πεδίου σύνθεσης/αναζήτησης", "keyboard_shortcuts.up": "Μετακίνηση προς τα πάνω στη λίστα", "learn_more_link.got_it": "Το κατάλαβα", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index dd92c9c378..613c8d0491 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -846,7 +846,6 @@ "keyboard_shortcuts.toggle_sensitivity": "Show/hide media", "keyboard_shortcuts.toot": "to start a brand new post", "keyboard_shortcuts.top": "Move to top of list", - "keyboard_shortcuts.translate": "to translate a post", "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "Move up in the list", "learn_more_link.got_it": "Got it", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index fa90d2d54c..dcd95629ad 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -466,7 +466,6 @@ "keyboard_shortcuts.toggle_hidden": "Montri/kaŝi tekston malantaŭ CW", "keyboard_shortcuts.toggle_sensitivity": "Montri/kaŝi vidaŭdaĵojn", "keyboard_shortcuts.toot": "Komencu novan afiŝon", - "keyboard_shortcuts.translate": "Traduki afiŝon", "keyboard_shortcuts.unfocus": "Senfokusigi verki tekstareon/serĉon", "keyboard_shortcuts.up": "Movu supren en la listo", "learn_more_link.got_it": "Komprenite", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index c4ac658b68..30540fa0a9 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -846,7 +846,7 @@ "keyboard_shortcuts.toggle_sensitivity": "Mostrar/ocultar medios", "keyboard_shortcuts.toot": "Comenzar un mensaje nuevo", "keyboard_shortcuts.top": "Mover al principio de la lista", - "keyboard_shortcuts.translate": "para traducir un mensaje", + "keyboard_shortcuts.translate": "Traducir una publicación", "keyboard_shortcuts.unfocus": "Quitar el foco del área de texto de redacción o de búsqueda", "keyboard_shortcuts.up": "Subir en la lista", "learn_more_link.got_it": "Entendido", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index d41fb39106..e09e8edf58 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -846,7 +846,7 @@ "keyboard_shortcuts.toggle_sensitivity": "Mostrar/ocultar multimedia", "keyboard_shortcuts.toot": "Comenzar una nueva publicación", "keyboard_shortcuts.top": "Mover al principio de la lista", - "keyboard_shortcuts.translate": "para traducir una publicación", + "keyboard_shortcuts.translate": "Traducir una publicación", "keyboard_shortcuts.unfocus": "Desenfocar área de redacción/búsqueda", "keyboard_shortcuts.up": "Ascender en la lista", "learn_more_link.got_it": "Entendido", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index f00bf98832..2b9aca3c47 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -846,7 +846,7 @@ "keyboard_shortcuts.toggle_sensitivity": "Mostrar/ocultar multimedia", "keyboard_shortcuts.toot": "Comenzar una nueva publicación", "keyboard_shortcuts.top": "Mover al principio de la lista", - "keyboard_shortcuts.translate": "para traducir una publicación", + "keyboard_shortcuts.translate": "Traducir una publicación", "keyboard_shortcuts.unfocus": "Quitar el foco de la caja de redacción/búsqueda", "keyboard_shortcuts.up": "Moverse hacia arriba en la lista", "learn_more_link.got_it": "Entendido", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index f8eabe8f6f..9d5e833803 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -838,7 +838,6 @@ "keyboard_shortcuts.toggle_sensitivity": "Näita/peida meediat", "keyboard_shortcuts.toot": "Alusta uut postitust", "keyboard_shortcuts.top": "Tõsta loendi algusesse", - "keyboard_shortcuts.translate": "postituse tõlkimiseks", "keyboard_shortcuts.unfocus": "Fookus tekstialalt/otsingult ära", "keyboard_shortcuts.up": "Liigu loetelus üles", "learn_more_link.got_it": "Sain aru", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index 11f140560c..7a8b23ed4d 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -515,7 +515,6 @@ "keyboard_shortcuts.toggle_sensitivity": "multimedia erakutsi/ezkutatzeko", "keyboard_shortcuts.toot": "Hasi bidalketa berri bat", "keyboard_shortcuts.top": "Mugitu zerrendaren hasierara", - "keyboard_shortcuts.translate": "bidalketa itzultzeko", "keyboard_shortcuts.unfocus": "testua konposatzeko area / bilaketatik fokua kentzea", "keyboard_shortcuts.up": "zerrendan gora mugitzea", "learn_more_link.got_it": "Ulertuta", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index f73d504475..c341c05d32 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -821,7 +821,6 @@ "keyboard_shortcuts.toggle_sensitivity": "نمایش/نهفتن رسانه", "keyboard_shortcuts.toot": "شروع یک فرستهٔ جدید", "keyboard_shortcuts.top": "جابه‌جایی به بالای سیاهه", - "keyboard_shortcuts.translate": "برای ترجمه یک پست", "keyboard_shortcuts.unfocus": "برداشتن تمرکز از ناحیهٔ نوشتن یا جست‌وجو", "keyboard_shortcuts.up": "بالا بردن در سیاهه", "learn_more_link.got_it": "متوجه شدم", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 9831a52c26..d3940571da 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -919,6 +919,7 @@ "navigation_bar.live_feed_local": "Livesyöte (paikallinen)", "navigation_bar.live_feed_public": "Livesyöte (julkinen)", "navigation_bar.logout": "Kirjaudu ulos", + "navigation_bar.main": "Pääosio", "navigation_bar.moderation": "Moderointi", "navigation_bar.more": "Lisää", "navigation_bar.mutes": "Mykistetyt käyttäjät", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index 4f4df1d18e..561ff6259b 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -650,7 +650,6 @@ "keyboard_shortcuts.toggle_sensitivity": "Vís ella fjal innihald", "keyboard_shortcuts.toot": "Byrja nýggjan post", "keyboard_shortcuts.top": "Flyt til ovast á listanum", - "keyboard_shortcuts.translate": "at umseta ein post", "keyboard_shortcuts.unfocus": "Tak skrivi-/leiti-økið úr miðdeplinum", "keyboard_shortcuts.up": "Flyt upp á listanum", "learn_more_link.got_it": "Eg skilji", diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json index 839796ffdf..f422a4e1be 100644 --- a/app/javascript/mastodon/locales/fr-CA.json +++ b/app/javascript/mastodon/locales/fr-CA.json @@ -846,7 +846,7 @@ "keyboard_shortcuts.toggle_sensitivity": "Afficher/cacher médias", "keyboard_shortcuts.toot": "Commencer un nouveau message", "keyboard_shortcuts.top": "Mettre en tête de liste", - "keyboard_shortcuts.translate": "traduire un message", + "keyboard_shortcuts.translate": "Traduire un message", "keyboard_shortcuts.unfocus": "Ne plus se concentrer sur la zone de rédaction/barre de recherche", "keyboard_shortcuts.up": "Monter dans la liste", "learn_more_link.got_it": "Compris", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index d4dcae1f96..bcc90a2620 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -846,7 +846,7 @@ "keyboard_shortcuts.toggle_sensitivity": "Afficher/cacher les médias", "keyboard_shortcuts.toot": "Commencer un nouveau message", "keyboard_shortcuts.top": "Mettre en tête de liste", - "keyboard_shortcuts.translate": "traduire un message", + "keyboard_shortcuts.translate": "Traduire un message", "keyboard_shortcuts.unfocus": "Quitter la zone de rédaction/barre de recherche", "keyboard_shortcuts.up": "Monter dans la liste", "learn_more_link.got_it": "Compris", diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json index 8930e18ba0..f1f9be4754 100644 --- a/app/javascript/mastodon/locales/fy.json +++ b/app/javascript/mastodon/locales/fy.json @@ -433,7 +433,6 @@ "keyboard_shortcuts.toggle_hidden": "Tekst efter CW-fjild ferstopje/toane", "keyboard_shortcuts.toggle_sensitivity": "Media ferstopje/toane", "keyboard_shortcuts.toot": "Nij berjocht skriuwe", - "keyboard_shortcuts.translate": "om in berjocht oer te setten", "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "Nei boppe yn list ferpleatse", "lightbox.close": "Slute", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 7375e57ef5..8ef61e60df 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -846,7 +846,7 @@ "keyboard_shortcuts.toggle_sensitivity": "Taispeáin / cuir i bhfolach meáin", "keyboard_shortcuts.toot": "Cuir tús le postáil nua", "keyboard_shortcuts.top": "Bog go barr an liosta", - "keyboard_shortcuts.translate": "post a aistriú", + "keyboard_shortcuts.translate": "Aistrigh post", "keyboard_shortcuts.unfocus": "Unfocus cum textarea/search", "keyboard_shortcuts.up": "Bog suas ar an liosta", "learn_more_link.got_it": "Tuigim é", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index 3cd3821e46..c1cfd0a2cf 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -812,7 +812,6 @@ "keyboard_shortcuts.toggle_sensitivity": "Seall/Falaich na meadhanan", "keyboard_shortcuts.toot": "Tòisich air post ùr", "keyboard_shortcuts.top": "Gluais gu bàrr na liosta", - "keyboard_shortcuts.translate": "airson post eadar-theangachadh", "keyboard_shortcuts.unfocus": "Thoir am fòcas far raon teacsa an sgrìobhaidh/an luirg", "keyboard_shortcuts.up": "Gluais suas air an liosta", "learn_more_link.got_it": "Tha mi agaibh", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 3d0843525b..b4da525cf9 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -846,7 +846,6 @@ "keyboard_shortcuts.toggle_sensitivity": "Para amosar/agochar contido multimedia", "keyboard_shortcuts.toot": "Para escribir unha nova publicación", "keyboard_shortcuts.top": "Mover arriba de todo", - "keyboard_shortcuts.translate": "para traducir unha publicación", "keyboard_shortcuts.unfocus": "Para deixar de destacar a área de escritura/procura", "keyboard_shortcuts.up": "Para mover cara arriba na listaxe", "learn_more_link.got_it": "Entendo", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index ef7ac819fe..2cb0b07697 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -846,7 +846,6 @@ "keyboard_shortcuts.toggle_sensitivity": "הצגת/הסתרת מדיה", "keyboard_shortcuts.toot": "להתחיל חיצרוץ חדש", "keyboard_shortcuts.top": "העברה לראש הרשימה", - "keyboard_shortcuts.translate": "לתרגם הודעה", "keyboard_shortcuts.unfocus": "לצאת מתיבת חיבור/חיפוש", "keyboard_shortcuts.up": "לנוע במעלה הרשימה", "learn_more_link.got_it": "הבנתי", diff --git a/app/javascript/mastodon/locales/ia.json b/app/javascript/mastodon/locales/ia.json index 55cc89f138..3604a44c60 100644 --- a/app/javascript/mastodon/locales/ia.json +++ b/app/javascript/mastodon/locales/ia.json @@ -471,7 +471,6 @@ "keyboard_shortcuts.toggle_hidden": "Monstrar/celar texto detra advertimento de contento", "keyboard_shortcuts.toggle_sensitivity": "Monstrar/celar multimedia", "keyboard_shortcuts.toot": "Initiar un nove message", - "keyboard_shortcuts.translate": "a traducer un message", "keyboard_shortcuts.unfocus": "Disfocalisar le area de composition de texto/de recerca", "keyboard_shortcuts.up": "Displaciar in alto in le lista", "learn_more_link.got_it": "Comprendite", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index 660747bcce..748530ceb8 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -514,7 +514,6 @@ "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", "keyboard_shortcuts.toggle_sensitivity": "Montrar/celar audvidaji", "keyboard_shortcuts.toot": "to start a brand new toot", - "keyboard_shortcuts.translate": "por tradukar mesajo", "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Klozar", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index 47fc04c035..ed5fc9bffb 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -846,7 +846,7 @@ "keyboard_shortcuts.toggle_sensitivity": "Birta/fela myndir", "keyboard_shortcuts.toot": "Byrja nýja færslu", "keyboard_shortcuts.top": "Færa efst á listann", - "keyboard_shortcuts.translate": "að þýða færslu", + "keyboard_shortcuts.translate": "Þýða færslu", "keyboard_shortcuts.unfocus": "Taka virkni úr textainnsetningarreit eða leit", "keyboard_shortcuts.up": "Fara ofar í listanum", "learn_more_link.got_it": "Náði því", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 7fd6b8a425..3382a02b92 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -846,7 +846,7 @@ "keyboard_shortcuts.toggle_sensitivity": "Mostra/Nasconde media", "keyboard_shortcuts.toot": "Crea un nuovo post", "keyboard_shortcuts.top": "Sposta all'inizio della lista", - "keyboard_shortcuts.translate": "Traduce un post", + "keyboard_shortcuts.translate": "Traduci un post", "keyboard_shortcuts.unfocus": "Rimuove il focus sull'area di composizione testuale/ricerca", "keyboard_shortcuts.up": "Scorre in su nell'elenco", "learn_more_link.got_it": "Ho capito", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index cc7271c3e2..febbe810f8 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -533,7 +533,6 @@ "keyboard_shortcuts.toggle_hidden": "CWで隠れた文を見る/隠す", "keyboard_shortcuts.toggle_sensitivity": "非表示のメディアを見る/隠す", "keyboard_shortcuts.toot": "新規投稿", - "keyboard_shortcuts.translate": "投稿を翻訳する", "keyboard_shortcuts.unfocus": "投稿の入力欄・検索欄から離れる", "keyboard_shortcuts.up": "カラム内一つ上に移動", "learn_more_link.got_it": "了解", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index 73f0859251..f0233d4011 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -592,7 +592,6 @@ "keyboard_shortcuts.toggle_hidden": "i uskan/tuffra n uḍris deffir CW", "keyboard_shortcuts.toggle_sensitivity": "i teskent/tuffra n yimidyaten", "keyboard_shortcuts.toot": "i wakken attebdud tajewwaqt tamaynut", - "keyboard_shortcuts.translate": "i usuqel n tsuffeɣt", "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "i tulin ɣer d asawen n tebdart", "learn_more_link.got_it": "Gziɣ-t", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index b6fbcb711c..559ef06f47 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -838,7 +838,6 @@ "keyboard_shortcuts.toggle_sensitivity": "미디어 보이기/숨기기", "keyboard_shortcuts.toot": "새 게시물 작성", "keyboard_shortcuts.top": "목록의 최상단으로 이동", - "keyboard_shortcuts.translate": "게시물 번역", "keyboard_shortcuts.unfocus": "작성창에서 포커스 해제", "keyboard_shortcuts.up": "리스트에서 위로 이동", "learn_more_link.got_it": "확인", diff --git a/app/javascript/mastodon/locales/lad.json b/app/javascript/mastodon/locales/lad.json index f655a6e003..d654559c3f 100644 --- a/app/javascript/mastodon/locales/lad.json +++ b/app/javascript/mastodon/locales/lad.json @@ -478,7 +478,6 @@ "keyboard_shortcuts.toggle_hidden": "Amostra/eskonde teksto detras de avertensya de kontenido (CW)", "keyboard_shortcuts.toggle_sensitivity": "Amostra/eskonde multimedia", "keyboard_shortcuts.toot": "Eskrive mueva publikasyon", - "keyboard_shortcuts.translate": "para trezladar una puvlikasyon", "keyboard_shortcuts.unfocus": "No enfoka en el area de eskrivir/bushkeda", "keyboard_shortcuts.up": "Move verso arriva en la lista", "learn_more_link.got_it": "Entyendo", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index a1409be70b..20b857e247 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -508,7 +508,6 @@ "keyboard_shortcuts.toggle_sensitivity": "Rodyti / slėpti mediją", "keyboard_shortcuts.toot": "Pradėti naują įrašą", "keyboard_shortcuts.top": "Perkelti į sąrašo viršų", - "keyboard_shortcuts.translate": "išversti įrašą", "keyboard_shortcuts.unfocus": "Nebefokusuoti rengykles teksto sritį / paiešką", "keyboard_shortcuts.up": "Perkelti į viršų sąraše", "learn_more_link.got_it": "Supratau", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 34558d6ca5..f1f25285f1 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -2,6 +2,7 @@ "about.blocks": "Moderētie serveri", "about.contact": "Kontakts:", "about.default_locale": "Noklusējums", + "about.disclaimer": "Mastodon ir brīva, atvērtā pirmkoda programmatūra un Mastodon GmbH prečzīme.", "about.domain_blocks.no_reason_available": "Iemesls nav norādīts", "about.domain_blocks.preamble": "Mastodon parasti ļauj apskatīt saturu un mijiedarboties ar lietotājiem no jebkura cita fediversa servera. Šie ir izņēmumi, kas veikti tieši šajā serverī.", "about.domain_blocks.silenced.explanation": "Parasti tu neredzēsi profilus un saturu no šī servera, ja vien tu nepārprotami izvēlēsies to pārskatīt vai sekot.", @@ -14,6 +15,7 @@ "about.rules": "Servera noteikumi", "account.account_note_header": "Personīga piezīme", "account.activity": "Darbības", + "account.add_note": "Pievienot personīgu piezīmi", "account.add_or_remove_from_list": "Pievienot vai Noņemt no sarakstiem", "account.badges.admin": "Pārvaldītājs", "account.badges.blocked": "Liegts", @@ -30,6 +32,7 @@ "account.copy": "Ievietot saiti uz profilu starpliktuvē", "account.direct": "Pieminēt @{name} privāti", "account.disable_notifications": "Pārtraukt man paziņot, kad @{name} izveido ierakstu", + "account.edit_note": "Labot personīgu piezīmi", "account.edit_profile": "Labot profilu", "account.edit_profile_short": "Labot", "account.enable_notifications": "Paziņot man, kad @{name} izveido ierakstu", @@ -71,7 +74,7 @@ "account.joined_short": "Pievienojās", "account.languages": "Mainīt abonētās valodas", "account.link_verified_on": "Šīs saites piederība tika pārbaudīta {date}", - "account.locked_info": "Šī konta privātuma statuss ir slēgts. Īpašnieks izskatīs, kurš viņam drīkst sekot.", + "account.locked_info": "Šī konta privātuma stāvoklis ir iestatīts kā slēgts. Īpašnieks izvērtē, kurš viņam drīkst sekot.", "account.media": "Multivide", "account.mention": "Pieminēt @{name}", "account.menu.add_to_list": "Pievienot sarakstam…", @@ -139,6 +142,7 @@ "account_edit.upload_modal.title_add.header": "Pievienot titullapas fotoattēlu", "account_edit.upload_modal.title_replace.avatar": "Nomainīt profila fotoattēlu", "account_edit.upload_modal.title_replace.header": "Nomainīt titullapas fotoattēlu", + "account_edit.verified_modal.invisible_link.summary": "Kā saiti padarīt neredzamu?", "account_edit_tags.suggestions": "Ieteikumi:", "admin.dashboard.daily_retention": "Lietotāju saglabāšanas rādītājs dienā pēc reģistrēšanās", "admin.dashboard.monthly_retention": "Lietotāju saglabāšanas rādītājs mēnesī pēc reģistrēšanās", @@ -299,7 +303,7 @@ "confirmations.missing_alt_text.title": "Pievienot aprakstošo tekstu?", "confirmations.mute.confirm": "Apklusināt", "confirmations.private_quote_notify.cancel": "Atgriezties pie labošanas", - "confirmations.private_quote_notify.confirm": "Publicēt ierakstu", + "confirmations.private_quote_notify.confirm": "Ievietot ierakstu", "confirmations.private_quote_notify.do_not_show_again": "Nerādīt vairāk šo paziņojumu", "confirmations.private_quote_notify.title": "Dalīties ar sekotājiem un pieminētajiem lietotājiem?", "confirmations.quiet_post_quote_info.got_it": "Sapratu", @@ -426,6 +430,7 @@ "follow_suggestions.view_all": "Skatīt visu", "follow_suggestions.who_to_follow": "Kam sekot", "followed_tags": "Sekojamie tēmturi", + "followers.hide_other_followers": "Šis lietotājs izvēlējās nepadarīt savus citus sekotājus redzamus", "footer.about": "Par", "footer.about_this_server": "Par", "footer.directory": "Profilu direktorija", @@ -433,7 +438,7 @@ "footer.keyboard_shortcuts": "Īsinājumtaustiņi", "footer.privacy_policy": "Privātuma politika", "footer.source_code": "Skatīt pirmkodu", - "footer.status": "Statuss", + "footer.status": "Stāvoklis", "footer.terms_of_service": "Pakalpojuma noteikumi", "getting_started.heading": "Darba sākšana", "hashtag.admin_moderation": "Atvērt #{name} satura pārraudzības saskarni", @@ -514,7 +519,6 @@ "keyboard_shortcuts.toggle_hidden": "Rādīt/slēpt tekstu aiz satura brīdinājuma", "keyboard_shortcuts.toggle_sensitivity": "Rādīt/slēpt multividi", "keyboard_shortcuts.toot": "Uzsākt jaunu ierakstu", - "keyboard_shortcuts.translate": "tulkot ierakstu", "keyboard_shortcuts.unfocus": "Atfokusēt veidojamā teksta/meklēšanas lauku", "keyboard_shortcuts.up": "Pārvietoties augšup sarakstā", "learn_more_link.got_it": "Sapratu", diff --git a/app/javascript/mastodon/locales/nan-TW.json b/app/javascript/mastodon/locales/nan-TW.json index 3b7ae6f4fc..a894af522b 100644 --- a/app/javascript/mastodon/locales/nan-TW.json +++ b/app/javascript/mastodon/locales/nan-TW.json @@ -846,7 +846,6 @@ "keyboard_shortcuts.toggle_sensitivity": "顯示/tshàng媒體", "keyboard_shortcuts.toot": "PO新PO文", "keyboard_shortcuts.top": "Súa kàu列單ê頭", - "keyboard_shortcuts.translate": "kā PO文翻譯", "keyboard_shortcuts.unfocus": "離開輸入框仔/tshiau-tshuē格仔", "keyboard_shortcuts.up": "佇列單內kā suá khah面頂", "learn_more_link.got_it": "知矣", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 1d71409ced..fda805366f 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -846,7 +846,7 @@ "keyboard_shortcuts.toggle_sensitivity": "Media tonen/verbergen", "keyboard_shortcuts.toot": "Nieuw bericht schrijven", "keyboard_shortcuts.top": "Naar het begin van de lijst verplaatsen", - "keyboard_shortcuts.translate": "om een bericht te vertalen", + "keyboard_shortcuts.translate": "Een bericht vertalen", "keyboard_shortcuts.unfocus": "Tekst- en zoekveld ontfocussen", "keyboard_shortcuts.up": "Naar boven in de lijst bewegen", "learn_more_link.got_it": "Begrepen", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 6b023be070..fb3cff77c3 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -846,7 +846,6 @@ "keyboard_shortcuts.toggle_sensitivity": "Vis/gøym media", "keyboard_shortcuts.toot": "Lag nytt tut", "keyboard_shortcuts.top": "Flytt til toppen av lista", - "keyboard_shortcuts.translate": "å omsetje eit innlegg", "keyboard_shortcuts.unfocus": "for å fokusere vekk skrive-/søkefeltet", "keyboard_shortcuts.up": "Flytt opp på lista", "learn_more_link.got_it": "Forstått", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index 0761a9e984..9a8f9528c1 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -518,7 +518,6 @@ "keyboard_shortcuts.toggle_hidden": "Vis/skjul tekst bak innholdsvarsel", "keyboard_shortcuts.toggle_sensitivity": "Vis/skjul media", "keyboard_shortcuts.toot": "Start et nytt innlegg", - "keyboard_shortcuts.translate": "for å oversette et innlegg", "keyboard_shortcuts.unfocus": "Fjern fokus fra komponerings-/søkefeltet", "keyboard_shortcuts.up": "Flytt oppover i listen", "lightbox.close": "Lukk", diff --git a/app/javascript/mastodon/locales/pa.json b/app/javascript/mastodon/locales/pa.json index 2a35a00f95..614e5b570c 100644 --- a/app/javascript/mastodon/locales/pa.json +++ b/app/javascript/mastodon/locales/pa.json @@ -407,7 +407,6 @@ "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", "keyboard_shortcuts.toggle_sensitivity": "ਮੀਡੀਆ ਦਿਖਾਉਣ/ਲੁਕਾਉਣ ਲਈ", "keyboard_shortcuts.toot": "ਨਵੀਂ ਪੋਸਟ ਸ਼ੁਰੂ ਕਰੋ", - "keyboard_shortcuts.translate": "ਪੋਸਟ ਨੂੰ ਅਨੁਵਾਦ ਕਰਨ ਲਈ", "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "ਸੂਚੀ ਵਿੱਚ ਉੱਤੇ ਭੇਜੋ", "learn_more_link.got_it": "ਸਮਝ ਗਏ", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index 6c62ad4ccf..39f141965c 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -636,7 +636,6 @@ "keyboard_shortcuts.toggle_hidden": "Pokaż lub ukryj tekst z ostrzeżeniem", "keyboard_shortcuts.toggle_sensitivity": "Pokaż lub ukryj multimedia", "keyboard_shortcuts.toot": "Stwórz nowy wpis", - "keyboard_shortcuts.translate": "aby przetłumaczyć wpis", "keyboard_shortcuts.unfocus": "Opuść pole tekstowe", "keyboard_shortcuts.up": "Przesuń w górę na liście", "learn_more_link.got_it": "Rozumiem", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 8e60ac6a49..987ddc2101 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -846,7 +846,7 @@ "keyboard_shortcuts.toggle_sensitivity": "mostrar/ocultar mídia", "keyboard_shortcuts.toot": "Começar nova publicação", "keyboard_shortcuts.top": "Mover para o topo da lista", - "keyboard_shortcuts.translate": "para traduzir uma publicação", + "keyboard_shortcuts.translate": "Traduzir uma publicação", "keyboard_shortcuts.unfocus": "Desfocar da área de composição/busca", "keyboard_shortcuts.up": "mover para cima", "learn_more_link.got_it": "Entendido", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index 22a55d48c3..63da90f799 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -788,7 +788,6 @@ "keyboard_shortcuts.toggle_sensitivity": "Mostrar / Ocultar media", "keyboard_shortcuts.toot": "criar uma nova publicação", "keyboard_shortcuts.top": "Mover para o topo da lista", - "keyboard_shortcuts.translate": "traduzir uma publicação", "keyboard_shortcuts.unfocus": "remover o foco da área de texto / pesquisa", "keyboard_shortcuts.up": "mover para cima na lista", "learn_more_link.got_it": "Entendido", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index d439a1e8b4..972df5bd6b 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -757,7 +757,6 @@ "keyboard_shortcuts.toggle_hidden": "показать/скрыть текст за предупреждением", "keyboard_shortcuts.toggle_sensitivity": "показать/скрыть медиа", "keyboard_shortcuts.toot": "начать писать новый пост", - "keyboard_shortcuts.translate": "перевести пост", "keyboard_shortcuts.unfocus": "убрать фокус с поля ввода/поиска", "keyboard_shortcuts.up": "вверх по списку", "learn_more_link.got_it": "Понятно", diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json index d70791a0b6..eed637b237 100644 --- a/app/javascript/mastodon/locales/sc.json +++ b/app/javascript/mastodon/locales/sc.json @@ -377,7 +377,6 @@ "keyboard_shortcuts.toggle_hidden": "Ammustra o cua su testu de is AC", "keyboard_shortcuts.toggle_sensitivity": "Ammustra/cua elementos multimediales", "keyboard_shortcuts.toot": "Cumintza a iscrìere una publicatzione noa", - "keyboard_shortcuts.translate": "pro tradùere una publicatzione", "keyboard_shortcuts.unfocus": "Essi de s'àrea de cumpositzione de testu o de chirca", "keyboard_shortcuts.up": "Move in susu in sa lista", "lightbox.close": "Serra", diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json index 25f5f3858c..99ba5457b1 100644 --- a/app/javascript/mastodon/locales/si.json +++ b/app/javascript/mastodon/locales/si.json @@ -421,7 +421,6 @@ "keyboard_shortcuts.toggle_hidden": "CW පිටුපස පෙළ පෙන්වන්න/සඟවන්න", "keyboard_shortcuts.toggle_sensitivity": "මාධ්‍ය පෙන්වන්න/සඟවන්න", "keyboard_shortcuts.toot": "නව ලිපියක් අරඹන්න", - "keyboard_shortcuts.translate": "සටහනක් පරිවර්තනය කිරීමට", "keyboard_shortcuts.unfocus": "පෙළ ප්‍රදේශය/සෙවීම රචනා කිරීම නාභිගත නොකරන්න", "keyboard_shortcuts.up": "ලැයිස්තුවේ ඉහළට ගෙනයන්න", "lightbox.close": "වසන්න", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 555a58b0ed..be8ff1dbf3 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -447,7 +447,6 @@ "keyboard_shortcuts.toggle_hidden": "Zobraziť/skryť text za varovaním o obsahu", "keyboard_shortcuts.toggle_sensitivity": "Zobraziť/skryť médiá", "keyboard_shortcuts.toot": "Vytvoriť nový príspevok", - "keyboard_shortcuts.translate": "Preložiť príspevok", "keyboard_shortcuts.unfocus": "Odísť z textového poľa", "keyboard_shortcuts.up": "Posunúť sa vyššie v zozname", "learn_more_link.got_it": "Mám to", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index ec73501f47..0f368c592a 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -477,7 +477,6 @@ "keyboard_shortcuts.toggle_sensitivity": "Pokaži/skrij predstavnosti", "keyboard_shortcuts.toot": "Začni povsem novo objavo", "keyboard_shortcuts.top": "Premakni na vrh seznama", - "keyboard_shortcuts.translate": "za prevod objave", "keyboard_shortcuts.unfocus": "Odstrani pozornost z območja za sestavljanje besedila/iskanje", "keyboard_shortcuts.up": "Premakni navzgor po seznamu", "learn_more_link.got_it": "Razumem", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index a020074e91..d2803adfd1 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -841,7 +841,6 @@ "keyboard_shortcuts.toggle_sensitivity": "Për shfaqje/fshehje mediash", "keyboard_shortcuts.toot": "Për të filluar një mesazh të ri", "keyboard_shortcuts.top": "Shpjere në krye të listës", - "keyboard_shortcuts.translate": "për të përkthyer një postim", "keyboard_shortcuts.unfocus": "Për heqjen e fokusit nga fusha e hartimit të mesazheve apo kërkimeve", "keyboard_shortcuts.up": "Për ngjitje sipër nëpër listë", "learn_more_link.got_it": "E mora vesh", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index e021787225..6e703d5f4f 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -846,7 +846,6 @@ "keyboard_shortcuts.toggle_sensitivity": "Visa/gömma media", "keyboard_shortcuts.toot": "Starta nytt inlägg", "keyboard_shortcuts.top": "Flytta till början av listan", - "keyboard_shortcuts.translate": "för att översätta ett inlägg", "keyboard_shortcuts.unfocus": "Avfokusera skrivfält/sökfält", "keyboard_shortcuts.up": "Flytta uppåt i listan", "learn_more_link.got_it": "Jag förstår", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 3c91b84f23..600d158685 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -463,7 +463,6 @@ "keyboard_shortcuts.toggle_hidden": "แสดง/ซ่อนข้อความที่อยู่หลังคำเตือนเนื้อหา", "keyboard_shortcuts.toggle_sensitivity": "แสดง/ซ่อนสื่อ", "keyboard_shortcuts.toot": "เริ่มโพสต์ใหม่", - "keyboard_shortcuts.translate": "เพื่อแปลโพสต์", "keyboard_shortcuts.unfocus": "เลิกโฟกัสพื้นที่เขียนข้อความ/การค้นหา", "keyboard_shortcuts.up": "ย้ายขึ้นในรายการ", "learn_more_link.got_it": "เข้าใจแล้ว", diff --git a/app/javascript/mastodon/locales/tok.json b/app/javascript/mastodon/locales/tok.json index b48d2532a4..fa31738f38 100644 --- a/app/javascript/mastodon/locales/tok.json +++ b/app/javascript/mastodon/locales/tok.json @@ -390,7 +390,6 @@ "keyboard_shortcuts.toggle_hidden": "o lukin ala lukin e toki len", "keyboard_shortcuts.toggle_sensitivity": "o lukin ala lukin e sitelen", "keyboard_shortcuts.toot": "o toki sin", - "keyboard_shortcuts.translate": "o ante e toki lipu", "keyboard_shortcuts.up": "o tawa sewi lon lipu", "learn_more_link.got_it": "sona", "lightbox.close": "o pini", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index efea49d3bf..be22775ca7 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -646,6 +646,7 @@ "empty_column.account_unavailable": "Profil kullanılamıyor", "empty_column.blocks": "Henüz herhangi bir kullanıcıyı engellemedin.", "empty_column.bookmarked_statuses": "Henüz yer imine eklediğin toot yok. Bir tanesi yer imine eklendiğinde burada görünür.", + "empty_column.collections": "{acct} henüz bir koleksiyon oluşturmadı.", "empty_column.collections.featured_in": "Henüz herhangi bir koleksiyona eklenmediniz.", "empty_column.collections.featured_in_undiscoverable": "Kullanıcıların sizi koleksiyonlarına ekleyebilmesi için, Tercihler > Gizlilik ve erişim bölümünden keşif deneyimlerinde öne çıkarılmaya izin vermeniz gerekir", "empty_column.community": "Yerel zaman çizelgesi boş. Daha fazla eğlence için herkese açık bir gönderi paylaşın!", @@ -819,6 +820,12 @@ "keyboard_shortcuts.heading": "Klavye kısayolları", "keyboard_shortcuts.home": "Ana sayfa akışını aç", "keyboard_shortcuts.hotkey": "Kısayol tuşu", + "keyboard_shortcuts.keys.alt": "Alt", + "keyboard_shortcuts.keys.backspace": "Geri al tuşu", + "keyboard_shortcuts.keys.enter": "Enter", + "keyboard_shortcuts.keys.esc": "Esc", + "keyboard_shortcuts.keys.page_down": "Sayfa Aşağı", + "keyboard_shortcuts.keys.page_up": "Sayfa Yukarı", "keyboard_shortcuts.legend": "Bu efsaneyi görüntülemek için", "keyboard_shortcuts.load_more": "\"Daha fazlası\" düğmesine odaklan", "keyboard_shortcuts.local": "Yerel akışı aç", @@ -839,7 +846,7 @@ "keyboard_shortcuts.toggle_sensitivity": "Medyayı göstermek/gizlemek için", "keyboard_shortcuts.toot": "Yeni bir gönderi başlat", "keyboard_shortcuts.top": "Listenin üstüne taşı", - "keyboard_shortcuts.translate": "bir gönderiyi çevirmek için", + "keyboard_shortcuts.translate": "Bir gönderiyi çevir", "keyboard_shortcuts.unfocus": "Aramada bir gönderiye odaklanmamak için", "keyboard_shortcuts.up": "Listede yukarıya çıkmak için", "learn_more_link.got_it": "Anladım", @@ -1192,6 +1199,7 @@ "search_popout.user": "kullanıcı", "search_results.accounts": "Profiller", "search_results.all": "Tümü", + "search_results.collections": "Koleksiyonlar", "search_results.hashtags": "Etiketler", "search_results.no_results": "Sonuç yok.", "search_results.no_search_yet": "Gönderiler, profiller veya etiketler için aramayı deneyin.", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 9ad58bdaa3..0cb94e1fc8 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -505,7 +505,6 @@ "keyboard_shortcuts.toggle_hidden": "Показати/приховати текст під попередженням про вміст", "keyboard_shortcuts.toggle_sensitivity": "Показати/приховати медіа", "keyboard_shortcuts.toot": "Створити новий допис", - "keyboard_shortcuts.translate": "перекласти допис", "keyboard_shortcuts.unfocus": "Розфокусуватися з нового допису чи пошуку", "keyboard_shortcuts.up": "Рухатися вгору списком", "learn_more_link.got_it": "Зрозуміло", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 9790d927f0..745f89d159 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -846,7 +846,6 @@ "keyboard_shortcuts.toggle_sensitivity": "ẩn/hiện ảnh hoặc video", "keyboard_shortcuts.toot": "soạn tút mới", "keyboard_shortcuts.top": "di chuyển đến đầu danh sách", - "keyboard_shortcuts.translate": "dịch tút", "keyboard_shortcuts.unfocus": "đưa con trỏ ra khỏi ô soạn thảo hoặc ô tìm kiếm", "keyboard_shortcuts.up": "di chuyển lên trên danh sách", "learn_more_link.got_it": "Đã hiểu", diff --git a/config/locales/da.yml b/config/locales/da.yml index bfc9d3857e..c5dd1dd746 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -505,6 +505,21 @@ da: no_lists_yet: Ingen lister endnu last_email: Seneste e-mail lead: Nedenfor vises de konti, der har aktiveret funktionen og har abonnenter. + show: + confirm_disable_feature: Vil du deaktivere e-mail-nyhedsbreve for %{name}? Der vil ikke længere blive sendt e-mail-opdateringer for denne konto. Brugeren kan stadig genaktivere funktionen i sine kontoindstillinger. Hvis du vil fjerne adgangen til denne funktion permanent, skal du redigere kontoens tilladelser under Roller. + confirm_remove_subscriber: "%{email} vil ikke længere modtage e-mails fra %{name}. Denne handling kan ikke fortrydes." + consent: Abonnenter har kun givet samtykke til at modtage indlæg via e-mail. Brug ikke denne liste til andre formål. + date: Dato for tilmelding + disable_feature: Deaktivér funktion + disabled: Funktionen blev deaktiveret og e-mails bliver ikke længere sendt til denne liste. + email: E-mailadresse + empty: + hint: Ingen har abonneret på denne konto endnu. + no_subscribers_yet: Ingen abonnenter endnu + enable_feature: Aktivér funktion + no_access_html: Denne konto har ikke længere de tilladelser, der kræves for at aktivere funktionen. Ændr dette i Roller. + title: E-mail-nyhedsbreve for %{name} + view_account: Vis konto status: Status subscribers: Abonnenter title: Mailinglister @@ -1532,7 +1547,9 @@ da: success_html: Du vil nu begynde at modtage e-mails, når %{name} offentliggør nye indlæg. Tilføj %{sender} til dine kontakter, så disse indlæg ikke ender i din spam-mappe. title: Du er tilmeldt unsubscribe: Afmeld + disabled: Deaktiveret inactive: Inaktive + no_access: Ingen adgang status: Status subscribers: Abonnenter emoji_styles: diff --git a/config/locales/doorkeeper.lv.yml b/config/locales/doorkeeper.lv.yml index 537e0291f2..4e8bb32ac6 100644 --- a/config/locales/doorkeeper.lv.yml +++ b/config/locales/doorkeeper.lv.yml @@ -194,4 +194,4 @@ lv: write:mutes: apklusini cilvēkus un sarunas write:notifications: notīri savus paziņojumus write:reports: ziņo par citiem cilvēkiem - write:statuses: publicē ziņas + write:statuses: pievienot ierakstus diff --git a/config/locales/el.yml b/config/locales/el.yml index 66679cecdf..f116b942a9 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -505,6 +505,21 @@ el: no_lists_yet: Καμία λίστα ακόμη last_email: Τελευταίο email lead: Λογαριασμοί που έχουν ενεργοποιήσει τη λειτουργία και έχουν συνδρομητές θα εμφανίζονται παρακάτω. + show: + confirm_disable_feature: Απενεργοποιήστε τα ενημερωτικά δελτία email για τον/την %{name}; Οι ενημερώσεις μέσω email δεν θα αποστέλλονται πλέον για αυτόν τον λογαριασμό. Ο χρήστης θα εξακολουθεί να είναι σε θέση να ενεργοποιήσει εκ νέου τη λειτουργία στις ρυθμίσεις του λογαριασμού του. Για να καταργήσετε μόνιμα την πρόσβαση σε αυτή τη λειτουργία, επεξεργαστείτε τα δικαιώματα του λογαριασμού στους Ρόλους. + confirm_remove_subscriber: Το %{email} δεν θα λαμβάνει πλέον μηνύματα email από τον/την %{name}. Αυτή η ενέργεια δεν μπορεί να αναιρεθεί. + consent: Οι συνδρομητές έχουν συναινέσει μόνο στη λήψη αναρτήσεων μέσω email. Μην χρησιμοποιείτε αυτήν τη λίστα για άλλους σκοπούς. + date: Ημερομηνία εγγραφής + disable_feature: Απενεργοποίηση λειτουργίας + disabled: Η λειτουργία απενεργοποιήθηκε και τα email δεν αποστέλλονται πλέον σε αυτήν τη λίστα. + email: Διεύθυνση email + empty: + hint: Κανείς δεν έχει εγγραφεί σε αυτόν τον λογαριασμό ακόμη. + no_subscribers_yet: Κανένας συνδρομητής ακόμη + enable_feature: Ενεργοποίηση λειτουργίας + no_access_html: Αυτός ο λογαριασμός δεν έχει πλέον τα απαιτούμενα δικαιώματα για την ενεργοποίηση της λειτουργίας. Αλλάξτε το αυτό στους Ρόλους. + title: Ενημερωτικά δελτία του/της %{name} + view_account: Προβολή λογαριασμού status: Κατάσταση subscribers: Συνδρομητές title: Λίστες αλληλογραφίας @@ -1532,7 +1547,9 @@ el: success_html: Τώρα θα αρχίσετε να λαμβάνετε email όταν ο χρήστης %{name} δημοσιεύει νέες αναρτήσεις. Προσθέστε το %{sender} στις επαφές σας, έτσι ώστε αυτές οι αναρτήσεις να μην καταλήγουν στο φάκελο Ανεπιθύμητα. title: Έχετε εγγραφεί unsubscribe: Κατάργηση συνδρομής + disabled: Απενεργοποιημένη inactive: Ανενεργή + no_access: Χωρίς πρόσβαση status: Κατάσταση subscribers: Συνδρομητές emoji_styles: diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index db9c1e0d76..57aa9c821b 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -505,6 +505,21 @@ es-AR: no_lists_yet: Aún no hay listas last_email: Último correo electrónico lead: Las cuentas que habilitaron la función y tienen suscriptores se mostrarán a continuación. + show: + confirm_disable_feature: "¿Deshabilitar boletines de correo electrónico para %{name}? Las actualizaciones de correo electrónico ya no se enviarán a esta cuenta. El usuario todavía podrá volver a activar la función en la configuración de su cuenta. Para eliminar permanentemente el acceso a esta función, editá el permiso de la cuenta en Roles." + confirm_remove_subscriber: "%{email} ya no recibirá correos electrónicos de %{name}. Esta acción no se puede deshacer." + consent: Los suscriptores solo aceptaron recibir mensajes por correo electrónico. No usés esta lista para otros propósitos. + date: Fecha de registro + disable_feature: Deshabilitar función + disabled: La función fue deshabilitada y los correos electrónicos ya no están siendo enviados a esta lista. + email: Dirección de correo electrónico + empty: + hint: Todavía nadie se suscribió a esta cuenta. + no_subscribers_yet: Aún no hay suscriptores + enable_feature: Habilitar función + no_access_html: Esta cuenta ya no tiene los permisos requeridos para habilitar la función. Cambiá esto en Roles. + title: Boletines de noticias de %{name} + view_account: Ver cuenta status: Estado subscribers: Suscriptores title: Listas de correo @@ -1532,7 +1547,9 @@ es-AR: success_html: Ahora vas a empezar a recibir correos electrónicos cuando %{name} publique algo nuevo. Agregá a %{sender} a tus contactos para que estas publicaciones no terminen en tu carpeta de spam o correo no deseado. title: Te suscribiste unsubscribe: Desuscribirse + disabled: Deshabilitada inactive: Inactiva + no_access: Sin acceso status: Estado subscribers: Suscriptores emoji_styles: diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index 5525f212cd..da7eaf1480 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -505,6 +505,23 @@ es-MX: no_lists_yet: No hay listas todavía last_email: Último correo electrónico lead: A continuación se mostrarán las cuentas que hayan activado la función y tengan suscriptores. + show: + confirm_disable_feature: |- + ¿Desactivar boletines de correo electrónico de %{name}? No se enviarán actualizaciones por correo electrónico para esta cuenta. El usuario aún podrá reactivar esta función en los ajustes de su cuenta. + Para eliminar el acceso a esta función permanentemente, modifica los permisos de la cuenta en Roles. + confirm_remove_subscriber: "%{email} no recibirá más correos electrónicos de %{name}. Esta acción no se puede deshacer." + consent: Los subscriptores solo han autorizado recibir publicaciones por email. No utilices esta lista para otros propósitos. + date: Fecha de suscripción + disable_feature: Desactivar función + disabled: La función ha sido desactivada y ya no se enviarán correos electrónicos a esta lista. + email: Dirección de correo electrónico + empty: + hint: Nadie se ha suscrito a esta cuenta aún. + no_subscribers_yet: Sin suscriptores aún + enable_feature: Activar función + no_access_html: Esta cuenta ya no tiene los permisos necesarios para activar la función. Modifica esto en Roles. + title: Boletines de correo electrónico de %{name} + view_account: Ver cuenta status: Estado subscribers: Suscriptores title: Listas de correo @@ -1532,7 +1549,9 @@ es-MX: success_html: A partir de ahora, recibirás correos electrónicos cada vez que %{name} haga nuevas publicaciones. Añade a %{sender} a tus contactos para que estas publicaciones no terminen en tu carpeta de spam. title: Ya estás registrado unsubscribe: Cancelar suscripción + disabled: Desactivado inactive: Inactiva + no_access: Sin acceso status: Estado subscribers: Suscriptores emoji_styles: diff --git a/config/locales/es.yml b/config/locales/es.yml index ddcc6ab07d..2dba7af9a3 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -505,6 +505,23 @@ es: no_lists_yet: Aún no hay listas last_email: Último correo electrónico lead: Las cuentas que han habilitado la función y tienen suscriptores se mostrarán a continuación. + show: + confirm_disable_feature: |- + ¿Desactivar boletines de correo electrónico de %{name}? No se enviarán actualizaciones por correo electrónico para esta cuenta. El usuario aún podrá reactivar esta función en los ajustes de su cuenta. + Para eliminar el acceso a esta función permanentemente, modifica los permisos de la cuenta en Roles. + confirm_remove_subscriber: "%{email} no recibirá más correos electrónicos de %{name}. Esta acción no se puede deshacer." + consent: Los subscriptores solo han autorizado recibir publicaciones por email. No utilices esta lista para otros propósitos. + date: Fecha de suscripción + disable_feature: Desactivar función + disabled: La función ha sido desactivada y ya no se enviarán correos electrónicos a esta lista. + email: Dirección de correo electrónico + empty: + hint: Nadie se ha suscrito a esta cuenta aún. + no_subscribers_yet: Sin suscriptores aún + enable_feature: Activar función + no_access_html: Esta cuenta ya no tiene los permisos necesarios para activar la función. Modifica esto en Roles. + title: Boletines de correo electrónico de %{name} + view_account: Ver cuenta status: Estado subscribers: Suscriptores title: Listas de correo @@ -1499,7 +1516,7 @@ es: your_appeal_rejected: Tu apelación ha sido rechazada edit_profile: other: Otros - privacy_redesign_body: La opción de mostrar tus perfiles seguidos y seguidores ahora se hace directamente desde tu perfil. + privacy_redesign_body: La opción de mostrar a quién sigues y tus seguidores ahora está directamente en tu perfil. redesign_body: Ahora puedes acceder a la edición del perfil desde la propia página de perfil. redesign_button: Llévame allí redesign_title: Hay una nueva experiencia de edición de perfil @@ -1532,7 +1549,9 @@ es: success_html: Ahora empezarás a recibir correos electrónicos cuando %{name} publique algo nuevo. Añade %{sender} a tus contactos para que estas publicaciones no terminen en tu carpeta de Spam. title: Estás suscrito unsubscribe: Cancelar suscripición + disabled: Desactivado inactive: Inactiva + no_access: Sin acceso status: Estado subscribers: Suscriptores emoji_styles: diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 76fb59f90c..6b98c1f4bb 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -505,6 +505,21 @@ fi: no_lists_yet: Ei vielä listoja last_email: Viimeisin sähköpostiviesti lead: Alla näkyvät tilit, jotka ovat ottaneet ominaisuuden käyttöön ja joilla on tilaajia. + show: + confirm_disable_feature: Poistetaanko tilin %{name} sähköpostiuutiskirjeet käytöstä? Tätä tiliä koskevia sähköpostipäivityksiä ei enää lähetetä. Käyttäjä voi yhä ottaa tämän ominaisuuden uudelleen käyttöön tilinsä asetuksista. Jotta voit pysyvästi poistaa pääsyn tähän ominaisuuteen, muokkaa tilin käyttöoikeuksia kohdassa Roolit. + confirm_remove_subscriber: "%{email} ei vastedes vastaanota sähköpostia tililtä %{name}. Tätä toimintoa ei voi peruuttaa." + consent: Tilaajat ovat suostuneet vain vastaanottamaan julkaisuja sähköpostitse. Älä käytä tätä listaa muihin tarkoituksiin. + date: Tilauspäivä + disable_feature: Poista ominaisuus käytöstä + disabled: Tämä ominaisuus on poistettu käytöstä, eikä sähköpostia enää lähetetä tälle listalle. + email: Sähköpostiosoite + empty: + hint: Kukaan ei ole vielä tilannut tätä tiliä. + no_subscribers_yet: Ei vielä tilaajia + enable_feature: Ota ominaisuus käyttöön + no_access_html: Tällä tilillä ei ole enää ominaisuuden käyttöönottoon vaadittavia käyttöoikeuksia. Muuta tämä kohdassa Roolit. + title: Tilin %{name} sähköpostiuutiskirjeet + view_account: Näytä tili status: Tila subscribers: Tilaajia title: Postituslistat @@ -535,7 +550,9 @@ fi: index: disabled: cannot_be_enabled: Tekninen palveluntarjoajasi ei ole ottanut tätä omainaisuutta käyttöön palvelimellasi. + description: Tämä omainaisuus antaa määrättyjen käyttäjien lisätä profiiliinsa pienoisohjelman, jolloin vierailijat, joilla ei ole Mastodon-tiliä, voivat vastaanottaa hänen julkaisunsa sähköpostitse. get_started: Aloita + lead: Salli vierailijoiden vastaanottaa määrättyjen tämän palvelimen tilien julkaisut sähköpostitse. title: Sähköpostiuutiskirjeet purged_msg: Kaikki sähköpostitilausten tiedot hävitetään. roles: @@ -1524,7 +1541,9 @@ fi: success_html: Alat nyt saada sähköpostia, kun %{name} julkaisee uutta. Lisää %{sender} yhteystietoihisi, jotta nämä julkaisut eivät joudu roskapostikansioon. title: Olet aloittanut tilauksen unsubscribe: Peruuta tilaus + disabled: Poissa käytöstä inactive: Poissa käytöstä + no_access: Ei käyttöoikeutta status: Tila subscribers: Tilaajia emoji_styles: diff --git a/config/locales/fr-CA.yml b/config/locales/fr-CA.yml index 3199e2ed97..14aa6424cb 100644 --- a/config/locales/fr-CA.yml +++ b/config/locales/fr-CA.yml @@ -505,6 +505,21 @@ fr-CA: no_lists_yet: Aucune liste pour l'instant last_email: Dernier courriel lead: Les comptes ayant activé la fonctionnalité et qui ont des abonné·e·s apparaîtront ci-dessous. + show: + confirm_disable_feature: Désactiver les courriels d'information pour %{name} ? Les notifications par courriel ne seront plus envoyées pour ce compte. L'utilisateur·rice pourra toujours réactiver la fonctionnalité dans les paramètres de son compte. Pour supprimer définitivement l'accès à cette fonction, modifiez les permissions du compte dans Rôles. + confirm_remove_subscriber: "%{email} ne recevra plus de courriels de %{name}. Cette action ne peut pas être annulée." + consent: Les abonné·e·s ont uniquement consenti à recevoir des messages par courriels. N'utilisez pas cette liste à d'autres fins. + date: Date d'inscription + disable_feature: Désactiver la fonctionnalité + disabled: La fonctionnalité a été désactivée et les courriels ne sont plus envoyés à cette liste. + email: Adresse de courriel + empty: + hint: Personne ne s'est abonné à ce compte pour l'instant. + no_subscribers_yet: Pas d'abonné·e pour l'instant + enable_feature: Activer la fonctionnalité + no_access_html: Ce compte n'a plus l'autorisation nécessaire pour activer la fonctionnalité. Changez cela dans Rôles. + title: Lettres d'information par courriel de %{name} + view_account: Afficher le compte status: État subscribers: Abonné·e·s title: Listes de diffusion @@ -1532,7 +1547,9 @@ fr-CA: success_html: Vous allez maintenant commencer à recevoir des courriels quand %{name} publie de nouveaux messages. Ajoutez %{sender} à vos contacts pour que ces messages ne soient pas considérés comme des courriels indésirables. title: Vous êtes abonné·e unsubscribe: Se désabonner + disabled: Désactivé inactive: Inactif + no_access: Pas d'accès status: État subscribers: Abonné·e·s emoji_styles: diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 6813e5aa2c..7f5deae4d4 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -505,6 +505,21 @@ fr: no_lists_yet: Aucune liste pour l'instant last_email: Dernier courriel lead: Les comptes ayant activé la fonctionnalité et qui ont des abonné·e·s apparaîtront ci-dessous. + show: + confirm_disable_feature: Désactiver les courriels d'information pour %{name} ? Les notifications par courriel ne seront plus envoyées pour ce compte. L'utilisateur·rice pourra toujours réactiver la fonctionnalité dans les paramètres de son compte. Pour supprimer définitivement l'accès à cette fonction, modifiez les permissions du compte dans Rôles. + confirm_remove_subscriber: "%{email} ne recevra plus de courriels de %{name}. Cette action ne peut pas être annulée." + consent: Les abonné·e·s ont uniquement consenti à recevoir des messages par courriels. N'utilisez pas cette liste à d'autres fins. + date: Date d'inscription + disable_feature: Désactiver la fonctionnalité + disabled: La fonctionnalité a été désactivée et les courriels ne sont plus envoyés à cette liste. + email: Adresse de courriel + empty: + hint: Personne ne s'est abonné à ce compte pour l'instant. + no_subscribers_yet: Pas d'abonné·e pour l'instant + enable_feature: Activer la fonctionnalité + no_access_html: Ce compte n'a plus l'autorisation nécessaire pour activer la fonctionnalité. Changez cela dans Rôles. + title: Lettres d'information par courriel de %{name} + view_account: Afficher le compte status: État subscribers: Abonné·e·s title: Listes de diffusion @@ -1532,7 +1547,9 @@ fr: success_html: Vous allez maintenant commencer à recevoir des courriels quand %{name} publie de nouveaux messages. Ajoutez %{sender} à vos contacts pour que ces messages ne soient pas considérés comme des courriels indésirables. title: Vous êtes abonné·e unsubscribe: Se désabonner + disabled: Désactivé inactive: Inactif + no_access: Pas d'accès status: État subscribers: Abonné·e·s emoji_styles: diff --git a/config/locales/ga.yml b/config/locales/ga.yml index 9ca8105591..88791e38ad 100644 --- a/config/locales/ga.yml +++ b/config/locales/ga.yml @@ -535,6 +535,21 @@ ga: no_lists_yet: Gan aon liostaí fós last_email: Ríomhphost deireanach lead: Taispeánfar thíos cuntais a bhfuil an ghné cumasaithe acu agus a bhfuil síntiúsóirí acu. + show: + confirm_disable_feature: An bhfuil tú ag iarraidh nuachtlitreacha ríomhphoist a dhíchumasú do %{name}? Ní sheolfar nuashonruithe ríomhphoist don chuntas seo a thuilleadh. Beidh an t-úsáideoir fós in ann an ghné a athchumasú ina socruithe cuntais. Chun rochtain ar an ngné seo a bhaint go buan, cuir cead an chuntais in eagar i Róil. + confirm_remove_subscriber: Ní bhfaighidh %{email} ríomhphoist ó %{name} a thuilleadh. Ní féidir an gníomh seo a chealú. + consent: Níor thoiligh síntiúsóirí ach le poist a fháil trí ríomhphost. Ná húsáid an liosta seo chun críocha eile. + date: Dáta an chláraithe + disable_feature: Díchumasaigh gné + disabled: Díchumasaíodh an ghné agus níl ríomhphoist á seoladh chuig an liosta seo a thuilleadh. + email: Seoladh ríomhphoist + empty: + hint: Níl aon duine cláraithe leis an gcuntas seo go fóill. + no_subscribers_yet: Gan aon síntiúsóirí fós + enable_feature: Cumasaigh gné + no_access_html: Níl na ceadanna riachtanacha ag an gcuntas seo a thuilleadh chun an ghné a chumasú. Athraigh seo i Róil. + title: Nuachtlitreacha ríomhphoist ó %{name} + view_account: Féach ar an gcuntas status: Stádas subscribers: Síntiúsóirí title: Liostaí poist @@ -1600,7 +1615,9 @@ ga: success_html: Tosóidh tú ag fáil ríomhphoist anois nuair a fhoilseoidh %{name} poist nua. Cuir %{sender} le do theagmhálaithe ionas nach gcríochnóidh na poist seo i do fhillteán Turscair. title: Tá tú cláraithe unsubscribe: Díliostáil + disabled: Míchumasaithe inactive: Neamhghníomhach + no_access: Gan rochtain status: Stádas subscribers: Síntiúsóirí emoji_styles: diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 9614ae8466..150893f94b 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -505,6 +505,21 @@ hu: no_lists_yet: Még nincsenek listák last_email: Legutóbbi e-mail lead: A fiókok, melyek bekapcsolták a funkciót, és vannak feliratkozóik, itt fognak megjelenni alább. + show: + confirm_disable_feature: Letiltod %{name} e-mailes hírleveleit? Az e-mailek ettől kezdve nem lesznek elküldve ennek a fióknak. A felhasználó továbbra is újra be tudja kapcsolni a funkciót a fiókbeállításaiban. A funkció elérésének végleges eltávolításához szerkeszd a fiók jogosultságait a Szerepekben. + confirm_remove_subscriber: 'A(z) %{email} már nem fog leveleket kapni a következőtől: %{name}. Ez a művelet nem vonható vissza.' + consent: A feliratkozók csak abba egyeztek bele, hogy levélben megkapják a bejegyzéseket. Ezt a listát ne használd más célokra. + date: Regisztráció dátuma + disable_feature: Funkció kikapcsolása + disabled: A funkció ki lett kapcsolva, és az e-mailek már nem kerülnek elküldésre erre a listára. + email: E-mail-cím + empty: + hint: Még senki sem iratkozott fel erre a fiókra. + no_subscribers_yet: Még nincsenek feliratkozók + enable_feature: Funkció bekapcsolása + no_access_html: A fióknak már nincs meg a szükséges jogosultsága a funkció bekapcsolásához. Módosítsd a Szerepekben. + title: "%{name} e-mailes hírlevelei" + view_account: Fiók megtekintése status: Állapot subscribers: Feliratkozók title: Levelezőlisták @@ -1499,6 +1514,7 @@ hu: your_appeal_rejected: A fellebbezésedet visszautasították edit_profile: other: Egyéb + privacy_redesign_body: A döntés, hogy megjeleníted-e a követettjeidet és követőidet, most már közvetlenül a profilodon tehető meg. redesign_body: A profil szerkesztése most már közvetlenül elérhető a profiloldalon. redesign_button: Ugrás oda redesign_title: Az új profilszerkesztési élmény @@ -1531,7 +1547,9 @@ hu: success_html: Mostantól levelet fogsz kapni, ha %{name} új bejegyzést tesz közzé. Add hozzá a feladót (%{sender}) a névjegyeidhez, hogy ne kerüljön a Levélszemét mappádba. title: Feliratkoztál unsubscribe: Leiratkozás + disabled: Kikapcsolva inactive: Inaktív + no_access: Nincs hozzáférés status: Állapot subscribers: Feliratkozók emoji_styles: diff --git a/config/locales/is.yml b/config/locales/is.yml index 34b740247a..835c3e560c 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -505,6 +505,16 @@ is: no_lists_yet: Ennþá engir listar last_email: Síðasti tölvupóstur lead: Aðgangar sem hafa virkjað eiginleikann og eru með áskrifendur munu birtast hér fyrir neðan. + show: + date: Dagsetning skráningar + disable_feature: Gera eiginleika óvirkan + email: Tölvupóstfang + empty: + hint: Enginn hefur enn gerst áskrifandi að þessum notandaaðgangi. + no_subscribers_yet: Engir áskrifendur ennþá + enable_feature: Virkja eiginleika + title: Tölvupóstfréttir frá %{name} + view_account: Skoða notandaaðgang status: Staða subscribers: Áskrifendur title: Póstlistar @@ -1536,7 +1546,9 @@ is: success_html: Þú munt núna fara að fá tölvupósta þegar %{name} birtir nýjar færslur. Bættu %{sender} í tengiliðina þína svo þessir póstar lendi ekki í ruslpóstmöppunni þinni. title: Þú hefur skráð þig unsubscribe: Hætta í áskrift + disabled: Óvirkt inactive: Óvirkur + no_access: Enginn aðgangur status: Staða subscribers: Áskrifendur emoji_styles: diff --git a/config/locales/it.yml b/config/locales/it.yml index c532c596d8..41fe6885a9 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -505,6 +505,21 @@ it: no_lists_yet: Non ci sono ancora liste last_email: Ultima email lead: Di seguito verranno visualizzati gli account che hanno attivato la funzionalità e che hanno degli iscritti. + show: + confirm_disable_feature: Disabilitare le newsletter per %{name}? Gli aggiornamenti via email non verranno più inviati per questo account. L'utente potrà comunque riattivare la funzione nelle impostazioni del proprio account. Per rimuovere definitivamente l'accesso a questa funzione, modificare le autorizzazioni dell'account in Ruoli. + confirm_remove_subscriber: "%{email} non riceverà più email da %{name}. Questa azione non può essere annullata." + consent: Gli iscritti hanno acconsentito esclusivamente a ricevere i post via email. Non utilizzare questa lista per altri scopi. + date: Data di iscrizione + disable_feature: Disabilita la funzionalità + disabled: La funzionalità è stata disabilitata e le email non vengono più inviate a questa lista. + email: Indirizzo email + empty: + hint: Nessuno si è ancora iscritto a questo account. + no_subscribers_yet: Ancora nessun iscritto + enable_feature: Abilita la funzionalità + no_access_html: Questo account non dispone più delle autorizzazioni necessarie per abilitare la funzionalità. Modifica questa impostazione in Ruoli. + title: Newsletter via email da %{name} + view_account: Visualizza l'account status: Stato subscribers: Iscritti title: Mailing list @@ -1532,7 +1547,9 @@ it: success_html: Ora inizierai a ricevere email quando %{name} pubblicherà nuovi post. Aggiungi %{sender} ai tuoi contatti in modo che questi post non finiscano nella cartella Spam. title: Ti sei registrato/a unsubscribe: Disiscriviti + disabled: Disabilitata inactive: Inattiva + no_access: Nessun accesso status: Stato subscribers: Iscritti emoji_styles: diff --git a/config/locales/lv.yml b/config/locales/lv.yml index 68515865c4..3b4341c3a5 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -321,10 +321,10 @@ lv: publish: Publicēt published_msg: Paziņojums sekmīgi publicēts. scheduled_for: Plānots uz %{time} - scheduled_msg: Paziņojums ieplānots publicēšanai! + scheduled_msg: Paziņojums ierindots publicēšanai. title: Paziņojumi unpublish: Atcelt publicēšanu - unpublished_msg: Paziņojuma publicēšana sekmīgi atcelta! + unpublished_msg: Paziņojuma publicēšana sekmīgi atcelta. updated_msg: Paziņojums sekmīgi atjaunināts! critical_update_pending: Gaida kritisko atjauninājumu custom_emojis: @@ -894,7 +894,7 @@ lv: reblogs: Reblogi replied_to_html: Atbildēja %{acct_link} status_changed: Ieraksts izmainīts - status_title: Publicēja @%{name} + status_title: Ievietoja @%{name} title: Konta ieraksti - @%{name} trending: Aktuāli view_publicly: Skatīt publiski @@ -1205,7 +1205,7 @@ lv: description: prefix_invited_by_user: "@%{name} aicina tevi pievienoties šim Mastodon serverim!" prefix_sign_up: Reģistrējies Mastodon jau šodien! - suffix: Izmantojot kontu, tu varēsi sekot cilvēkiem, publicēt atjauninājumus un apmainīties ar ziņojumiem ar lietotājiem no jebkura Mastodon servera un daudz ko citu! + suffix: Ar kontu varēsi sekot cilvēkiem, ievietot atjauninājumus un apmainīties ar ziņojumiem ar lietotājiem no jebkura Mastodon servera un daudz ko citu. didnt_get_confirmation: Vai nesaņēmi apstiprinājuma saiti? dont_have_your_security_key: Vai tev nav drošības atslēgas? forgot_password: Aizmirsi paroli? @@ -1666,7 +1666,7 @@ lv: subject: "%{name} izcēla tavu ziņu" title: Jauns izcēlums status: - subject: "%{name} tikko publicēja" + subject: "%{name} tikko pievienoja ierakstu" update: subject: "%{name} laboja ierakstu" notifications: @@ -1711,7 +1711,7 @@ lv: too_many_options: nevar saturēt vairāk par %{max} vienumiem preferences: other: Citi - posting_defaults: Publicēšanas noklusējuma iestatījumi + posting_defaults: Ierakstu pievienošanas noklusējumi public_timelines: Publiskās ziņu lentas privacy: hint_html: "Pielāgo, kā vēlies atrast savu profilu un ziņas. Dažādas Mastodon funkcijas var palīdzēt sasniegt plašāku auditoriju, ja tās ir iespējotas. Velti laiku, lai pārskatītu šos iestatījumus, lai pārliecinātos, ka tie atbilst tavam lietošanas gadījumam." diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 6caa2d68a2..91e61810c4 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -505,6 +505,21 @@ nl: no_lists_yet: Nog geen lijsten last_email: Meest recente e-mail lead: Accounts die deze functionaliteit hebben ingeschakeld en abonnees hebben, worden hieronder getoond. + show: + confirm_disable_feature: E-mailnieuwsbrieven voor %{name} uitschakelen? E-mailupdates voor dit account worden niet langer verzonden. De gebruiker kan deze functionaliteit nog steeds in diens accountinstellingen inschakelen. Om de toegang tot deze functie permanent te verwijderen, wijzig dan de rechten van het account onder 'Beheer > rollen'. + confirm_remove_subscriber: "%{email} ontvangt niet langer e-mails van %{name}. Deze actie kan niet ongedaan worden gemaakt." + consent: Abonnees hebben alleen toestemming gegeven om berichten via e-mail te ontvangen. Gebruik deze lijst niet voor andere doeleinden. + date: Datum van abonneren + disable_feature: Functionaliteit uitschakelen + disabled: De functionaliteit is uitgeschakeld en e-mails worden niet meer naar deze lijst verzonden. + email: E-mailadres + empty: + hint: Niemand heeft zich nog op dit account geabonneerd. + no_subscribers_yet: Nog geen abonnees + enable_feature: Functionaliteit inschakelen + no_access_html: Dit account is niet langer gemachtigd om de functionaliteit in te schakelen. Wijzig dit onder 'Beheer > rollen'. + title: E-mailnieuwsbrieven van %{name} + view_account: Account bekijken status: Status subscribers: Abonnees title: Mailinglijsten @@ -1532,7 +1547,9 @@ nl: success_html: Je ontvangt nu e-mails wanneer %{name} nieuwe berichten publiceert. Voeg %{sender} toe aan je contactpersonen, zodat deze berichten niet in je spam terechtkomen. title: Je bent ingeschreven unsubscribe: Afmelden + disabled: Uitgeschakeld inactive: Inactief + no_access: Geen toegang status: Status subscribers: Abonnees emoji_styles: diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index ad71ba1dde..4dce939412 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -505,6 +505,21 @@ pt-BR: no_lists_yet: Não há listas ainda last_email: Último email lead: Contas que ativaram o recurso e têm inscritos aparecerão abaixo. + show: + confirm_disable_feature: Desativar e-mails de notícia de %{name}? Os e-mails de notícia não serão mais enviados a esta conta. O usuário poderá reativar este recurso através das opções da conta. Para remover acesso permanente a este recurso, edite as permissões da conta em Cargos. + confirm_remove_subscriber: "%{email} não receberá mais e-mails de %{name}. Esta ação não pode ser desfeita." + consent: Os inscritos só permitiram receber publicações por e-mail. Não use esta lista para outra coisa. + date: Data de registro + disable_feature: Desativar recurso + disabled: O recurso foi desativado e os e-mails não são mais enviados a esta lista. + email: Endereço de e-mail + empty: + hint: Ninguém ainda se inscreveu a esta conta. + no_subscribers_yet: Nenhum inscrito ainda + enable_feature: Ativar recurso + no_access_html: Esta conta não tem mais as permissões necessárias para ativar o recurso. Altere isso em Cargos. + title: E-mails de notícia de %{name} + view_account: Ver conta status: Estado subscribers: Inscritos title: Listas de envio @@ -1532,7 +1547,9 @@ pt-BR: success_html: Agora você começará a receber e-mails quando %{name} publicar novas postagens. Adicione %{sender} para seus contatos para que essas publicações não apareçam em sua caixa de Spam. title: Você está registrado unsubscribe: Cancelar inscrição + disabled: Desativado inactive: Inativo + no_access: Sem acesso status: Situação subscribers: Inscritos emoji_styles: diff --git a/config/locales/simple_form.lv.yml b/config/locales/simple_form.lv.yml index 7cc0a2ee32..13699f7a99 100644 --- a/config/locales/simple_form.lv.yml +++ b/config/locales/simple_form.lv.yml @@ -32,7 +32,7 @@ lv: announcement: all_day: Atzīmējot šo opciju, tiks parādīti tikai laika diapazona datumi ends_at: Neobligāts. Paziņojums šoreiz tiks automātiski atcelts - scheduled_at: Lai nekavējoties publicētu paziņojumu, atstāj tukšu + scheduled_at: Atstāt tukšu, lai nekavējoties publicētu paziņojumu starts_at: Neobligāts. Ja tavs paziņojums ir saistīts ar noteiktu laika diapazonu text: Varari izmantot ziņu sintaksi. Lūdzu, apdomā lauku, ko paziņojums aizņems lietotāja ekrānā appeal: @@ -73,7 +73,7 @@ lv: hide: Paslēp filtrēto saturu pilnībā, izturoties tā, it kā tas neeksistētu warn: Paslēp filtrēto saturu aiz brīdinājuma, kurā minēts filtra nosaukums form_admin_settings: - activity_api_enabled: Vietēji publicēto ziņu, aktīvo lietotāju un jauno reģistrāciju skaits nedēļas kopās + activity_api_enabled: Vietēji pievienoto ierakstu, darbīgo lietotāju un jauno reģistrāciju skaits iknedēļas kopās app_icon: WEBP, PNG, GIF vai JPG. Mobilajās ierīcēs aizstāj noklusējuma lietotnes ikonu ar pielāgotu. backups_retention_period: Lietotājiem ir iespēja izveidot savu ierakstu arhīvu lejupielādēšanai vēlāk. Kad iestatīta pozitīva vērtība, šie arhīvi tiks automātiski izdzēsti no krātuves pēc norādītā dienu skaita. closed_registrations_message: Tiek rādīts, kad reģistrēšanās ir slēgta @@ -120,7 +120,7 @@ lv: webauthn: Ja tā ir USB atslēga, noteikti ievieto to un, ja nepieciešams, pieskaries tai. settings: indexable: Tava profila lapa var tikt parādīta Google, Bing un citu meklēšanas dzinēju rezultātos. - show_application: Tu vienmēr varēsi redzēt, kura lietotne publicēja tavu ziņu. + show_application: Tu vienmēr varēsi redzēt, kura lietotne pievienoja Tavu ierakstu. tag: name: Tu vari mainīt tikai burtu lielumu, piemēram, lai tie būtu vieglāk lasāmi terms_of_service: @@ -208,7 +208,7 @@ lv: setting_aggregate_reblogs: Grupēt pastiprinājumus ierakstu lentās setting_always_send_emails: Vienmēr sūtīt e-pasta paziņojumus setting_auto_play_gif: Automātiski atskaņot animētos GIF - setting_default_language: Publicēšanas valoda + setting_default_language: Ierakstu pievienošanas valoda setting_default_quote_policy: Kas var citēt setting_default_sensitive: Vienmēr atzīmēt informācijas nesējus kā jūtīgus setting_disable_hover_cards: Atspējot profila priekšskatījumu pēc kursora novietošanas diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 6115fdbdf9..4365046e05 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -505,6 +505,21 @@ tr: no_lists_yet: Henüz liste yok last_email: Son e-posta lead: Bu özelliği etkinleştirmiş ve abonesi olan hesaplar aşağıda gösterilecektir. + show: + confirm_disable_feature: "%{name} için e-posta bültenlerini devre dışı bırakmak ister misiniz? Bu hesap için artık e-posta güncellemeleri gönderilmeyecektir. Kullanıcı, hesap ayarlarından bu özelliği yeniden etkinleştirebilir. Bu özelliğe erişimi kalıcı olarak kaldırmak için, Roller bölümünden hesabın izinlerini düzenleyin." + confirm_remove_subscriber: "%{email} artık %{name}'den e-posta almayacaktır. Bu işlem geri alınamaz." + consent: Aboneler yalnızca e-posta yoluyla mesaj almayı kabul etmişlerdir. Bu listeyi başka amaçlarla kullanmayınız. + date: Kayıt tarihi + disable_feature: Özelliği devre dışı bırak + disabled: Bu özellik devre dışı bırakıldı ve artık bu listeye e-posta gönderilmiyor. + email: E-posta adresi + empty: + hint: Henüz kimse bu hesaba abone olmamış. + no_subscribers_yet: Henüz abone yok + enable_feature: Özelliği etkinleştir + no_access_html: Bu hesap, özelliği etkinleştirmek için gereken izinlere artık sahip değil. Bu ayarı Roller bölümünden değiştirin. + title: "%{name}'in e-posta bültenleri" + view_account: Hesabı görüntüle status: Durum subscribers: Aboneler title: E-posta listeleri @@ -1499,6 +1514,7 @@ tr: your_appeal_rejected: İtirazınız reddedildi edit_profile: other: Diğer + privacy_redesign_body: Takip ettiğiniz kişileri ve takipçilerinizi gösterme seçeneği artık doğrudan profilinizden yapılmaktadır. redesign_body: Profil düzenlemeye şimdi doğrudan profil sayfasından da erişilebilir. redesign_button: Git redesign_title: Yeni bir profile düzenleme deneyimi var @@ -1531,7 +1547,9 @@ tr: success_html: "%{name} yeni bir yazı yayınladığında artık e-posta almaya başlayacaksınız. Bu yazılar spam klasörüne düşmesin diye %{sender}'ı kişi listenize ekleyin." title: Abone oldunuz unsubscribe: Abonelikten çık + disabled: Devre dışı inactive: Etkin değil + no_access: Erişim yok status: Durum subscribers: Aboneler emoji_styles: diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 8a41d98676..97eb4e83c9 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -495,6 +495,21 @@ zh-CN: no_lists_yet: 尚无列表 last_email: 最新电子邮件 lead: 已启用此功能并拥有订阅者的账号会在下方显示。 + show: + confirm_disable_feature: 禁用 %{name} 的邮件电子报吗?此后将不再执行此账号的电子邮件推送。该用户仍可以在账号设置中重新启用此功能。要永久移除此功能的访问权限,请在“角色”设置中编辑账号权限。 + confirm_remove_subscriber: "%{email} 将不会再收到来自 %{name} 的电子邮件。此操作无法撤销。" + consent: 此列表中的订阅者仅同意通过电子邮件接受嘟文。请不要将此列表用作其他目的。 + date: 订阅注册日期 + disable_feature: 禁用功能 + disabled: 此功能已被禁用,邮件已不再向此列表内发送。 + email: 电子邮件地址 + empty: + hint: 暂时没有人订阅这个账号。 + no_subscribers_yet: 尚无订阅者 + enable_feature: 启用功能 + no_access_html: 此账号不再拥有启用该功能所需的权限。请在角色设置处更改。 + title: "%{name}的邮件电子报" + view_account: 查看账号 status: 状态 subscribers: 订阅者 title: 邮件列表 @@ -1510,7 +1525,9 @@ zh-CN: success_html: 现在开始当 %{name} 发布新嘟文时你会收到邮件提醒。记得将 %{sender} 添加到邮箱联系人中,以免嘟文推送被丢入垃圾邮件文件夹。 title: 你已成功订阅 unsubscribe: 取消订阅 + disabled: 已禁用 inactive: 未生效 + no_access: 没有权限 status: 状态 subscribers: 订阅者 emoji_styles: diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 99647d575f..b6dcd7720d 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -497,6 +497,21 @@ zh-TW: no_lists_yet: 尚無列表 last_email: 最新電子郵件地址 lead: 已啟用此功能並擁有訂閱者之帳號將於下方顯示。 + show: + confirm_disable_feature: 是否替 %{name} 停用電子報功能?電子報郵件將不被寄至此帳號。該使用者仍能於帳號設定中重新啟用此功能。如欲永久禁用此功能,請於角色設定中編輯該帳號之權限。 + confirm_remove_subscriber: "%{email} 將不再收到來自 %{name} 之電子郵件。此動作無法回復。" + consent: 訂閱者僅同意透過電子郵件接收嘟文。請勿將此名單用於其他用途。 + date: 註冊日期 + disable_feature: 停用功能 + disabled: 此功能已停用且電子郵件將不被寄至此列表。 + email: 電子郵件地址 + empty: + hint: 尚無任何人訂閱此帳號。 + no_subscribers_yet: 尚無訂閱者 + enable_feature: 啟用功能 + no_access_html: 此帳號不再擁有啟用此功能所需之權限。請於 角色設定中修改此設定。 + title: "%{name} 之電子報" + view_account: 檢視帳號 status: 狀態 subscribers: 訂閱者 title: 電子郵件列表 @@ -1514,7 +1529,9 @@ zh-TW: success_html: 您將開始收到當 %{name} 發表新嘟文之電子郵件。請新增 %{sender} 至您的通訊錄使這些嘟文不被分類至垃圾信件夾。 title: 已完成註冊 unsubscribe: 取消訂閱 + disabled: 已停用 inactive: 已停用 + no_access: 無法存取 status: 狀態 subscribers: 訂閱者 emoji_styles: From da1d731cb496153f3e24b6dad71adbbce1278024 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 9 Jun 2026 11:54:10 +0200 Subject: [PATCH 24/44] Update actions/checkout digest to df4cb1c (#39321) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/build-container-image.yml | 4 ++-- .github/workflows/build-push-pr.yml | 2 +- .github/workflows/build-releases.yml | 2 +- .github/workflows/bundler-audit.yml | 2 +- .github/workflows/check-i18n.yml | 2 +- .github/workflows/chromatic.yml | 4 ++-- .github/workflows/codeql.yml | 2 +- .github/workflows/crowdin-download-stable.yml | 2 +- .github/workflows/crowdin-download.yml | 2 +- .github/workflows/crowdin-upload.yml | 2 +- .github/workflows/format-check.yml | 2 +- .github/workflows/lint-css.yml | 2 +- .github/workflows/lint-haml.yml | 2 +- .github/workflows/lint-js.yml | 2 +- .github/workflows/lint-ruby.yml | 2 +- .github/workflows/test-js.yml | 2 +- .github/workflows/test-migrations.yml | 2 +- .github/workflows/test-ruby.yml | 8 ++++---- 18 files changed, 23 insertions(+), 23 deletions(-) diff --git a/.github/workflows/build-container-image.yml b/.github/workflows/build-container-image.yml index 82947dd259..8db68a7cda 100644 --- a/.github/workflows/build-container-image.yml +++ b/.github/workflows/build-container-image.yml @@ -35,7 +35,7 @@ jobs: - linux/arm64 steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - name: Prepare env: @@ -120,7 +120,7 @@ jobs: PUSH_TO_IMAGES: ${{ inputs.push_to_images }} steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - name: Download digests uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7 diff --git a/.github/workflows/build-push-pr.yml b/.github/workflows/build-push-pr.yml index e9953b9ffe..70e4db1fa3 100644 --- a/.github/workflows/build-push-pr.yml +++ b/.github/workflows/build-push-pr.yml @@ -18,7 +18,7 @@ jobs: steps: # Repository needs to be cloned so `git rev-parse` below works - name: Clone repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - id: version_vars run: | echo mastodon_version_metadata=pr-${{ github.event.pull_request.number }}-$(git rev-parse --short ${{github.event.pull_request.head.sha}}) >> $GITHUB_OUTPUT diff --git a/.github/workflows/build-releases.yml b/.github/workflows/build-releases.yml index 3307fe97fa..d4d1673709 100644 --- a/.github/workflows/build-releases.yml +++ b/.github/workflows/build-releases.yml @@ -16,7 +16,7 @@ jobs: steps: # Repository needs to be cloned to list branches - name: Clone repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 with: fetch-depth: 0 diff --git a/.github/workflows/bundler-audit.yml b/.github/workflows/bundler-audit.yml index dc79d87264..e28552f40a 100644 --- a/.github/workflows/bundler-audit.yml +++ b/.github/workflows/bundler-audit.yml @@ -29,7 +29,7 @@ jobs: steps: - name: Clone repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - name: Set up Ruby uses: ruby/setup-ruby@afeafc3d1ab54a631816aba4c914a0081c12ff2f # v1 diff --git a/.github/workflows/check-i18n.yml b/.github/workflows/check-i18n.yml index 3a0c5dc36a..4b221df123 100644 --- a/.github/workflows/check-i18n.yml +++ b/.github/workflows/check-i18n.yml @@ -22,7 +22,7 @@ jobs: timeout-minutes: 15 steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - name: Set up Ruby environment uses: ./.github/actions/setup-ruby diff --git a/.github/workflows/chromatic.yml b/.github/workflows/chromatic.yml index 05f88df81c..7e6514673d 100644 --- a/.github/workflows/chromatic.yml +++ b/.github/workflows/chromatic.yml @@ -17,7 +17,7 @@ jobs: changed: ${{ steps.filter.outputs.src }} steps: - name: Checkout code - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 with: fetch-depth: 0 @@ -44,7 +44,7 @@ jobs: if: github.repository == 'mastodon/mastodon' && needs.pathcheck.outputs.changed == 'true' steps: - name: Checkout code - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 with: fetch-depth: 0 diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index bc796d828c..0ba1d244dd 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -32,7 +32,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL diff --git a/.github/workflows/crowdin-download-stable.yml b/.github/workflows/crowdin-download-stable.yml index 65e8cc7f80..5c52fd61f8 100644 --- a/.github/workflows/crowdin-download-stable.yml +++ b/.github/workflows/crowdin-download-stable.yml @@ -13,7 +13,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - name: Increase Git http.postBuffer # This is needed due to a bug in Ubuntu's cURL version? diff --git a/.github/workflows/crowdin-download.yml b/.github/workflows/crowdin-download.yml index 4c4fe9688c..17f2ffbf56 100644 --- a/.github/workflows/crowdin-download.yml +++ b/.github/workflows/crowdin-download.yml @@ -15,7 +15,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - name: Increase Git http.postBuffer # This is needed due to a bug in Ubuntu's cURL version? diff --git a/.github/workflows/crowdin-upload.yml b/.github/workflows/crowdin-upload.yml index 2b9a4c899b..c781bd4f13 100644 --- a/.github/workflows/crowdin-upload.yml +++ b/.github/workflows/crowdin-upload.yml @@ -23,7 +23,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - name: crowdin action uses: crowdin/github-action@8868a33591d21088edfc398968173a3b98d51706 # v2 diff --git a/.github/workflows/format-check.yml b/.github/workflows/format-check.yml index cca26ed5b0..5d06f81ee2 100644 --- a/.github/workflows/format-check.yml +++ b/.github/workflows/format-check.yml @@ -14,7 +14,7 @@ jobs: steps: - name: Clone repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - name: Set up Javascript environment uses: ./.github/actions/setup-javascript diff --git a/.github/workflows/lint-css.yml b/.github/workflows/lint-css.yml index 59c69f836c..dbd9fc6182 100644 --- a/.github/workflows/lint-css.yml +++ b/.github/workflows/lint-css.yml @@ -31,7 +31,7 @@ jobs: steps: - name: Clone repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - name: Set up Javascript environment uses: ./.github/actions/setup-javascript diff --git a/.github/workflows/lint-haml.yml b/.github/workflows/lint-haml.yml index 9534eb2254..d212a280bf 100644 --- a/.github/workflows/lint-haml.yml +++ b/.github/workflows/lint-haml.yml @@ -32,7 +32,7 @@ jobs: steps: - name: Clone repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - name: Set up Ruby uses: ruby/setup-ruby@afeafc3d1ab54a631816aba4c914a0081c12ff2f # v1 diff --git a/.github/workflows/lint-js.yml b/.github/workflows/lint-js.yml index 4fa0828368..93cbb2d73d 100644 --- a/.github/workflows/lint-js.yml +++ b/.github/workflows/lint-js.yml @@ -37,7 +37,7 @@ jobs: steps: - name: Clone repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - name: Set up Javascript environment uses: ./.github/actions/setup-javascript diff --git a/.github/workflows/lint-ruby.yml b/.github/workflows/lint-ruby.yml index ffecf17a76..a308149d61 100644 --- a/.github/workflows/lint-ruby.yml +++ b/.github/workflows/lint-ruby.yml @@ -34,7 +34,7 @@ jobs: steps: - name: Clone repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - name: Set up Ruby uses: ruby/setup-ruby@afeafc3d1ab54a631816aba4c914a0081c12ff2f # v1 diff --git a/.github/workflows/test-js.yml b/.github/workflows/test-js.yml index f9ba34e32b..5a78fd2997 100644 --- a/.github/workflows/test-js.yml +++ b/.github/workflows/test-js.yml @@ -35,7 +35,7 @@ jobs: steps: - name: Clone repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - name: Set up Javascript environment uses: ./.github/actions/setup-javascript diff --git a/.github/workflows/test-migrations.yml b/.github/workflows/test-migrations.yml index 52fefbe053..4d0c4b811a 100644 --- a/.github/workflows/test-migrations.yml +++ b/.github/workflows/test-migrations.yml @@ -73,7 +73,7 @@ jobs: BUNDLE_RETRY: 3 steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - name: Set up Ruby environment uses: ./.github/actions/setup-ruby diff --git a/.github/workflows/test-ruby.yml b/.github/workflows/test-ruby.yml index e4c6c1aa91..ce13d49ffd 100644 --- a/.github/workflows/test-ruby.yml +++ b/.github/workflows/test-ruby.yml @@ -33,7 +33,7 @@ jobs: SECRET_KEY_BASE_DUMMY: 1 steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - name: Set up Ruby environment uses: ./.github/actions/setup-ruby @@ -130,7 +130,7 @@ jobs: - '3.4' - '.ruby-version' steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7 with: @@ -225,7 +225,7 @@ jobs: - '.ruby-version' steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7 with: @@ -364,7 +364,7 @@ jobs: search-image: opensearchproject/opensearch:2 steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7 with: From fef5a501cc442c735c8ecf1ea8e93446b5cedddf Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 9 Jun 2026 05:54:38 -0400 Subject: [PATCH 25/44] Add coverage for rules acceptance and invite code handling (#39310) --- spec/system/auth/registrations_spec.rb | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/spec/system/auth/registrations_spec.rb b/spec/system/auth/registrations_spec.rb index e3b5683aa0..2cf0dfe46f 100644 --- a/spec/system/auth/registrations_spec.rb +++ b/spec/system/auth/registrations_spec.rb @@ -6,13 +6,33 @@ RSpec.describe 'Auth Registration' do context 'when there are server rules' do let!(:rule) { Fabricate :rule, text: 'You must be seven meters tall' } let!(:rule_translation) { Fabricate :rule_translation, rule:, hint: 'Rule translation hint', text: rule.text } + let(:invite) { Fabricate :invite, autofollow: true } it 'shows rules page before proceeding with sign up' do - visit new_user_registration_path + visit new_user_registration_path(invite_code: invite.code) expect(page) .to have_title(I18n.t('auth.register')) .and have_text(rule.text) .and have_text(rule_translation.hint) + + click_on I18n.t('auth.rules.accept') + expect(page) + .to have_text(I18n.t('auth.sign_up.preamble')) + .and have_text(I18n.t('invites.invited_by')) + end + end + + context 'when an invite code was previously followed' do + let(:older_invite) { Fabricate :invite, autofollow: true } + let(:invite) { Fabricate :invite, autofollow: true } + + before { visit new_user_registration_path(invite_code: older_invite.code) } + + it 'honors the newer invitation' do + visit new_user_registration_path(invite_code: invite.code) + expect(page) + .to have_text(I18n.t('invites.invited_by')) + .and have_text(invite.user.account.username) end end From 4fcb28e081658dec5dc91925086a624c6369b18a Mon Sep 17 00:00:00 2001 From: David Roetzel Date: Tue, 9 Jun 2026 12:31:58 +0200 Subject: [PATCH 26/44] Collections API: Set a maximum for the pagination `limit` param (#39342) --- app/controllers/api/v1/collections_controller.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/controllers/api/v1/collections_controller.rb b/app/controllers/api/v1/collections_controller.rb index 9acd535f46..50a825afac 100644 --- a/app/controllers/api/v1/collections_controller.rb +++ b/app/controllers/api/v1/collections_controller.rb @@ -4,6 +4,7 @@ class Api::V1::CollectionsController < Api::BaseController include Authorization DEFAULT_COLLECTIONS_LIMIT = 40 + MAX_COLLECTIONS_LIMIT = 100 rescue_from ActiveRecord::RecordInvalid, Mastodon::ValidationError do |e| render json: { error: ValidationErrorFormatter.new(e).as_json }, status: 422 @@ -73,7 +74,7 @@ class Api::V1::CollectionsController < Api::BaseController .with_tag .order(created_at: :desc) .offset(offset_param) - .limit(limit_param(DEFAULT_COLLECTIONS_LIMIT)) + .limit(limit_param(DEFAULT_COLLECTIONS_LIMIT, MAX_COLLECTIONS_LIMIT)) @collections = @collections.discoverable unless @account == current_account end From 9c493c20b931474d94e2e8ea8a0ce55925df51eb Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Tue, 9 Jun 2026 08:28:53 -0400 Subject: [PATCH 27/44] Add policy to filter notifications from bots (#38494) (#38809) --- .../v1/notifications/policies_controller.rb | 3 +- .../v2/notifications/policies_controller.rb | 3 +- .../api_types/notification_policies.ts | 1 + .../components/policy_controls.tsx | 25 ++++ .../components/ignore_notifications_modal.jsx | 3 + app/javascript/mastodon/locales/en.json | 3 + app/models/notification_policy.rb | 6 + .../rest/notification_policy_serializer.rb | 1 + .../rest/v1/notification_policy_serializer.rb | 5 + app/services/notify_service.rb | 18 ++- ...3_add_for_bots_to_notification_policies.rb | 7 ++ db/schema.rb | 1 + spec/models/notification_policy_spec.rb | 29 +++++ .../api/v1/notifications/policies_spec.rb | 7 ++ .../api/v2/notifications/policies_spec.rb | 11 ++ spec/services/notify_service_spec.rb | 110 ++++++++++++++++++ 16 files changed, 229 insertions(+), 4 deletions(-) create mode 100644 db/migrate/20260425144553_add_for_bots_to_notification_policies.rb diff --git a/app/controllers/api/v1/notifications/policies_controller.rb b/app/controllers/api/v1/notifications/policies_controller.rb index 9d70c283be..0cad5fe0b8 100644 --- a/app/controllers/api/v1/notifications/policies_controller.rb +++ b/app/controllers/api/v1/notifications/policies_controller.rb @@ -31,7 +31,8 @@ class Api::V1::Notifications::PoliciesController < Api::BaseController :filter_not_following, :filter_not_followers, :filter_new_accounts, - :filter_private_mentions + :filter_private_mentions, + :filter_bots ) end end diff --git a/app/controllers/api/v2/notifications/policies_controller.rb b/app/controllers/api/v2/notifications/policies_controller.rb index 637587967f..de20dd071e 100644 --- a/app/controllers/api/v2/notifications/policies_controller.rb +++ b/app/controllers/api/v2/notifications/policies_controller.rb @@ -32,7 +32,8 @@ class Api::V2::Notifications::PoliciesController < Api::BaseController :for_not_followers, :for_new_accounts, :for_private_mentions, - :for_limited_accounts + :for_limited_accounts, + :for_bots ) end end diff --git a/app/javascript/mastodon/api_types/notification_policies.ts b/app/javascript/mastodon/api_types/notification_policies.ts index 1c3970782c..40ca89e78f 100644 --- a/app/javascript/mastodon/api_types/notification_policies.ts +++ b/app/javascript/mastodon/api_types/notification_policies.ts @@ -8,6 +8,7 @@ export interface NotificationPolicyJSON { for_new_accounts: NotificationPolicyValue; for_private_mentions: NotificationPolicyValue; for_limited_accounts: NotificationPolicyValue; + for_bots: NotificationPolicyValue; summary: { pending_requests_count: number; pending_notifications_count: number; diff --git a/app/javascript/mastodon/features/notifications/components/policy_controls.tsx b/app/javascript/mastodon/features/notifications/components/policy_controls.tsx index a4743b0c22..03fb3530ca 100644 --- a/app/javascript/mastodon/features/notifications/components/policy_controls.tsx +++ b/app/javascript/mastodon/features/notifications/components/policy_controls.tsx @@ -88,6 +88,13 @@ export const PolicyControls: React.FC = () => { [dispatch], ); + const handleFilterBots = useCallback( + (value: string) => { + changeFilter(dispatch, 'for_bots', value); + }, + [dispatch], + ); + if (!notificationPolicy) return null; const options = [ @@ -209,6 +216,24 @@ export const PolicyControls: React.FC = () => { /> } /> + + + } + hint={ + + } + />
); diff --git a/app/javascript/mastodon/features/ui/components/ignore_notifications_modal.jsx b/app/javascript/mastodon/features/ui/components/ignore_notifications_modal.jsx index 3ef771ed76..d6962152c5 100644 --- a/app/javascript/mastodon/features/ui/components/ignore_notifications_modal.jsx +++ b/app/javascript/mastodon/features/ui/components/ignore_notifications_modal.jsx @@ -48,6 +48,9 @@ export const IgnoreNotificationsModal = ({ filterType }) => { case 'for_limited_accounts': title = ; break; + case 'for_bots': + title = ; + break; } return ( diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 511ae3503c..b6ccc679f1 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -780,6 +780,7 @@ "home.pending_critical_update.link": "See updates", "home.pending_critical_update.title": "Critical security update available!", "home.show_announcements": "Show announcements", + "ignore_notifications_modal.bots_title": "Ignore notifications from bots?", "ignore_notifications_modal.disclaimer": "Mastodon cannot inform users that you've ignored their notifications. Ignoring notifications will not stop the messages themselves from being sent.", "ignore_notifications_modal.filter_instead": "Filter instead", "ignore_notifications_modal.filter_to_act_users": "You'll still be able to accept, reject, or report users", @@ -1042,6 +1043,8 @@ "notifications.policy.drop": "Ignore", "notifications.policy.drop_hint": "Send to the void, never to be seen again", "notifications.policy.filter": "Filter", + "notifications.policy.filter_bots_hint": "Accounts marked as automated", + "notifications.policy.filter_bots_title": "Bots", "notifications.policy.filter_hint": "Send to filtered notifications inbox", "notifications.policy.filter_limited_accounts_hint": "Limited by server moderators", "notifications.policy.filter_limited_accounts_title": "Moderated accounts", diff --git a/app/models/notification_policy.rb b/app/models/notification_policy.rb index 73a13b92a8..cf850999f9 100644 --- a/app/models/notification_policy.rb +++ b/app/models/notification_policy.rb @@ -5,6 +5,7 @@ # Table name: notification_policies # # id :bigint(8) not null, primary key +# for_bots :integer default("accept"), not null # for_limited_accounts :integer default("filter"), not null # for_new_accounts :integer default("accept"), not null # for_not_followers :integer default("accept"), not null @@ -36,6 +37,7 @@ class NotificationPolicy < ApplicationRecord enum :for_new_accounts, { accept: 0, filter: 1, drop: 2 }, suffix: :new_accounts enum :for_private_mentions, { accept: 0, filter: 1, drop: 2 }, suffix: :private_mentions enum :for_limited_accounts, { accept: 0, filter: 1, drop: 2 }, suffix: :limited_accounts + enum :for_bots, { accept: 0, filter: 1, drop: 2 }, suffix: :bots def summarize! @pending_requests_count = pending_notification_requests.first @@ -59,6 +61,10 @@ class NotificationPolicy < ApplicationRecord self.for_private_mentions = value ? :filter : :accept end + def filter_bots=(value) + self.for_bots = value ? :filter : :accept + end + private def pending_notification_requests diff --git a/app/serializers/rest/notification_policy_serializer.rb b/app/serializers/rest/notification_policy_serializer.rb index 3902c1a04a..d3256e49a9 100644 --- a/app/serializers/rest/notification_policy_serializer.rb +++ b/app/serializers/rest/notification_policy_serializer.rb @@ -8,6 +8,7 @@ class REST::NotificationPolicySerializer < ActiveModel::Serializer :for_new_accounts, :for_private_mentions, :for_limited_accounts, + :for_bots, :summary def summary diff --git a/app/serializers/rest/v1/notification_policy_serializer.rb b/app/serializers/rest/v1/notification_policy_serializer.rb index e1bbdc44ff..8e06af4558 100644 --- a/app/serializers/rest/v1/notification_policy_serializer.rb +++ b/app/serializers/rest/v1/notification_policy_serializer.rb @@ -5,6 +5,7 @@ class REST::V1::NotificationPolicySerializer < ActiveModel::Serializer :filter_not_followers, :filter_new_accounts, :filter_private_mentions, + :filter_bots, :summary def summary @@ -29,4 +30,8 @@ class REST::V1::NotificationPolicySerializer < ActiveModel::Serializer def filter_private_mentions !object.accept_private_mentions? end + + def filter_bots + !object.accept_bots? + end end diff --git a/app/services/notify_service.rb b/app/services/notify_service.rb index af2f74ce56..9d62b2e505 100644 --- a/app/services/notify_service.rb +++ b/app/services/notify_service.rb @@ -97,6 +97,10 @@ class NotifyService < BaseService WHERE ancestors.mention_id IS NOT NULL AND s.account_id = :recipient_id AND s.visibility = 3 SQL end + + def from_bot? + @sender.bot? + end end class DropCondition < BaseCondition @@ -120,7 +124,8 @@ class NotifyService < BaseService blocked_by_not_following_policy? || blocked_by_not_followers_policy? || blocked_by_new_accounts_policy? || - blocked_by_private_mentions_policy? + blocked_by_private_mentions_policy? || + blocked_by_bots_policy? end private @@ -160,6 +165,10 @@ class NotifyService < BaseService def blocked_by_limited_accounts_policy? @policy.drop_limited_accounts? && (@options[:silenced] || @sender.silenced?) && not_following? end + + def blocked_by_bots_policy? + @policy.drop_bots? && from_bot? + end end class FilterCondition < BaseCondition @@ -172,7 +181,8 @@ class NotifyService < BaseService filtered_by_not_following_policy? || filtered_by_not_followers_policy? || filtered_by_new_accounts_policy? || - filtered_by_private_mentions_policy? + filtered_by_private_mentions_policy? || + filtered_by_bots_policy? end private @@ -196,6 +206,10 @@ class NotifyService < BaseService def filtered_by_limited_accounts_policy? @policy.filter_limited_accounts? && (@options[:silenced] || @sender.silenced?) && not_following? end + + def filtered_by_bots_policy? + @policy.filter_bots? && from_bot? + end end def call(recipient, type, activity, **options) diff --git a/db/migrate/20260425144553_add_for_bots_to_notification_policies.rb b/db/migrate/20260425144553_add_for_bots_to_notification_policies.rb new file mode 100644 index 0000000000..e31f4e4bf9 --- /dev/null +++ b/db/migrate/20260425144553_add_for_bots_to_notification_policies.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class AddForBotsToNotificationPolicies < ActiveRecord::Migration[8.1] + def change + add_column :notification_policies, :for_bots, :integer, default: 0, null: false + end +end diff --git a/db/schema.rb b/db/schema.rb index 51e2cef103..3341b513d1 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -818,6 +818,7 @@ ActiveRecord::Schema[8.1].define(version: 2026_05_05_155103) do create_table "notification_policies", force: :cascade do |t| t.bigint "account_id", null: false t.datetime "created_at", null: false + t.integer "for_bots", default: 0, null: false t.integer "for_limited_accounts", default: 1, null: false t.integer "for_new_accounts", default: 0, null: false t.integer "for_not_followers", default: 0, null: false diff --git a/spec/models/notification_policy_spec.rb b/spec/models/notification_policy_spec.rb index 7d1b494dd5..a6ea32758d 100644 --- a/spec/models/notification_policy_spec.rb +++ b/spec/models/notification_policy_spec.rb @@ -28,4 +28,33 @@ RSpec.describe NotificationPolicy do ) end end + + describe 'for_bots attribute' do + subject { Fabricate(:notification_policy) } + + it 'defaults to accept' do + expect(subject.for_bots).to eq 'accept' + end + + it 'can be set to filter' do + subject.update!(for_bots: 'filter') + expect(subject.reload.for_bots).to eq 'filter' + end + + it 'can be set to drop' do + subject.update!(for_bots: 'drop') + expect(subject.reload.for_bots).to eq 'drop' + end + + it 'can be set to accept' do + subject.update!(for_bots: 'accept') + expect(subject.reload.for_bots).to eq 'accept' + end + + it 'validates input' do + expect do + subject.update!(for_bots: 'block') + end.to raise_error(ArgumentError, "'block' is not a valid for_bots") + end + end end diff --git a/spec/requests/api/v1/notifications/policies_spec.rb b/spec/requests/api/v1/notifications/policies_spec.rb index ac24501526..6d6b8d5a67 100644 --- a/spec/requests/api/v1/notifications/policies_spec.rb +++ b/spec/requests/api/v1/notifications/policies_spec.rb @@ -33,6 +33,7 @@ RSpec.describe 'Policies' do filter_not_followers: false, filter_new_accounts: false, filter_private_mentions: true, + filter_bots: false, summary: a_hash_including( pending_requests_count: 1, pending_notifications_count: 0 @@ -63,11 +64,17 @@ RSpec.describe 'Policies' do filter_not_followers: false, filter_new_accounts: false, filter_private_mentions: true, + filter_bots: false, summary: a_hash_including( pending_requests_count: 0, pending_notifications_count: 0 ) ) end + + it 'updates filter_bots' do + put '/api/v1/notifications/policy', headers: headers, params: { filter_bots: true } + expect(response.parsed_body).to include(filter_bots: true) + end end end diff --git a/spec/requests/api/v2/notifications/policies_spec.rb b/spec/requests/api/v2/notifications/policies_spec.rb index f080bc730f..73383163c3 100644 --- a/spec/requests/api/v2/notifications/policies_spec.rb +++ b/spec/requests/api/v2/notifications/policies_spec.rb @@ -34,6 +34,7 @@ RSpec.describe 'Policies' do for_new_accounts: 'accept', for_private_mentions: 'filter', for_limited_accounts: 'filter', + for_bots: 'accept', summary: a_hash_including( pending_requests_count: 1, pending_notifications_count: 0 @@ -66,6 +67,7 @@ RSpec.describe 'Policies' do for_new_accounts: 'accept', for_private_mentions: 'filter', for_limited_accounts: 'drop', + for_bots: 'accept', summary: a_hash_including( pending_requests_count: 0, pending_notifications_count: 0 @@ -73,4 +75,13 @@ RSpec.describe 'Policies' do ) end end + + describe 'updating bots policy' do + it 'accepts for_bots parameter' do + put '/api/v2/notifications/policy', headers: headers, params: { for_bots: 'filter' } + + expect(response).to have_http_status(200) + expect(response.parsed_body).to include(for_bots: 'filter') + end + end end diff --git a/spec/services/notify_service_spec.rb b/spec/services/notify_service_spec.rb index 9927fa9f04..df51bce8bf 100644 --- a/spec/services/notify_service_spec.rb +++ b/spec/services/notify_service_spec.rb @@ -272,6 +272,61 @@ RSpec.describe NotifyService do expect(subject.drop?).to be true end end + + context 'with bot policies' do + let(:bot_sender) { Fabricate(:account, bot: true) } + let(:human_sender) { Fabricate(:account, bot: false) } + let(:original_status) { Fabricate(:status) } + let(:recipient) { Fabricate(:account) } + + def reblog_notification(from) + activity = Fabricate(:status, account: from, reblog: original_status) + Fabricate(:notification, type: :reblog, activity: activity, from_account: from, account: recipient) + end + + before do + recipient.create_notification_policy!( + for_not_following: :accept, + for_not_followers: :accept, + for_new_accounts: :accept, + for_private_mentions: :accept, + for_limited_accounts: :accept, + for_bots: bots_policy + ) + end + + context 'when recipient is dropping bots' do + let(:bots_policy) { :drop } + + it 'drops bot reblogs' do + notification = reblog_notification(bot_sender) + expect(described_class.new(notification).drop?).to be true + end + + it 'keeps human reblogs' do + notification = reblog_notification(human_sender) + expect(described_class.new(notification).drop?).to be false + end + end + + context 'when recipient is filtering bots' do + let(:bots_policy) { :filter } + + it 'does not drop bot reblogs' do + notification = reblog_notification(bot_sender) + expect(described_class.new(notification).drop?).to be false + end + end + + context 'when recipient is accepting bots' do + let(:bots_policy) { :accept } + + it 'does not drop bot reblogs' do + notification = reblog_notification(bot_sender) + expect(described_class.new(notification).drop?).to be false + end + end + end end end @@ -518,6 +573,61 @@ RSpec.describe NotifyService do end end end + + context 'with bot policies' do + let(:bot_sender) { Fabricate(:account, bot: true) } + let(:human_sender) { Fabricate(:account, bot: false) } + let(:original_status) { Fabricate(:status) } + let(:recipient) { Fabricate(:account) } + + def reblog_notification(from) + activity = Fabricate(:status, account: from, reblog: original_status) + Fabricate(:notification, type: :reblog, activity: activity, from_account: from, account: recipient) + end + + before do + recipient.create_notification_policy!( + for_not_following: :accept, + for_not_followers: :accept, + for_new_accounts: :accept, + for_private_mentions: :accept, + for_limited_accounts: :accept, + for_bots: bots_policy + ) + end + + context 'when recipient is dropping bots' do + let(:bots_policy) { :drop } + + it 'does not filter bot reblogs' do + notification = reblog_notification(bot_sender) + expect(described_class.new(notification).filter?).to be false + end + end + + context 'when recipient is filtering bots' do + let(:bots_policy) { :filter } + + it 'filters bot reblogs' do + notification = reblog_notification(bot_sender) + expect(described_class.new(notification).filter?).to be true + end + + it 'keeps human reblogs' do + notification = reblog_notification(human_sender) + expect(described_class.new(notification).filter?).to be false + end + end + + context 'when recipient is accepting bots' do + let(:bots_policy) { :accept } + + it 'does not filter bot reblogs' do + notification = reblog_notification(bot_sender) + expect(described_class.new(notification).filter?).to be false + end + end + end end end end From fba4775ef6f9900bfaefc649bf480d62db8e51f5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 9 Jun 2026 14:32:41 +0200 Subject: [PATCH 28/44] Update codecov/codecov-action digest to fb8b358 (#39322) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/test-ruby.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-ruby.yml b/.github/workflows/test-ruby.yml index ce13d49ffd..e27f11eaf1 100644 --- a/.github/workflows/test-ruby.yml +++ b/.github/workflows/test-ruby.yml @@ -169,7 +169,7 @@ jobs: - name: Upload coverage reports to Codecov if: matrix.ruby-version == '.ruby-version' - uses: codecov/codecov-action@e79a6962e0d4c0c17b229090214935d2e33f8354 # v6 + uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v6 with: files: coverage/lcov/*.lcov env: From a2064d4c7f99d44a3a8df0a31ca0793ed64e4b04 Mon Sep 17 00:00:00 2001 From: Shlee Date: Tue, 9 Jun 2026 22:19:42 +0930 Subject: [PATCH 29/44] Add sign? methods to the Quote and CollectionItem models (#39047) --- app/models/collection_item.rb | 4 ++++ app/models/quote.rb | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/app/models/collection_item.rb b/app/models/collection_item.rb index f37e67e8fd..5c890dc86d 100644 --- a/app/models/collection_item.rb +++ b/app/models/collection_item.rb @@ -64,6 +64,10 @@ class CollectionItem < ApplicationRecord :featured_item end + def sign? + true + end + private def set_position diff --git a/app/models/quote.rb b/app/models/quote.rb index c49a66c278..7c453a097e 100644 --- a/app/models/quote.rb +++ b/app/models/quote.rb @@ -79,6 +79,10 @@ class Quote < ApplicationRecord ActivityPub::QuoteRefreshWorker.perform_in(rand(REFRESH_DEADLINE), id) end + def sign? + true + end + private def reset_parent_cache! From e9697922c1d660337980ecf0d5d957b16d725fc6 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 9 Jun 2026 08:58:45 -0400 Subject: [PATCH 30/44] Handle offset relative to TZ in options list (#39334) --- app/helpers/settings_helper.rb | 4 ++++ .../preferences/appearance/show.html.haml | 2 +- spec/helpers/settings_helper_spec.rb | 16 ++++++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/app/helpers/settings_helper.rb b/app/helpers/settings_helper.rb index 196eac52d5..11786b22fe 100644 --- a/app/helpers/settings_helper.rb +++ b/app/helpers/settings_helper.rb @@ -57,6 +57,10 @@ module SettingsHelper end end + def time_zone_options + ActiveSupport::TimeZone.all.map { |tz| ["(GMT#{tz.now.formatted_offset}) #{tz.name}", tz.tzinfo.name] } + end + private def links_for_featured_tags(tags) diff --git a/app/views/settings/preferences/appearance/show.html.haml b/app/views/settings/preferences/appearance/show.html.haml index 202dd53103..9488972705 100644 --- a/app/views/settings/preferences/appearance/show.html.haml +++ b/app/views/settings/preferences/appearance/show.html.haml @@ -16,7 +16,7 @@ wrapper: :with_label .fields-group.fields-row__column.fields-row__column-6 = f.input :time_zone, - collection: ActiveSupport::TimeZone.all.map { |tz| ["(GMT#{tz.formatted_offset}) #{tz.name}", tz.tzinfo.name] }, + collection: time_zone_options, hint: false, selected: current_user.time_zone || Time.zone.tzinfo.name, wrapper: :with_label diff --git a/spec/helpers/settings_helper_spec.rb b/spec/helpers/settings_helper_spec.rb index 63773634e9..d45940b57b 100644 --- a/spec/helpers/settings_helper_spec.rb +++ b/spec/helpers/settings_helper_spec.rb @@ -50,4 +50,20 @@ RSpec.describe SettingsHelper do end end end + + describe '#time_zone_options' do + subject { helper.time_zone_options } + + context 'when summer time is in effect' do + before { travel_to(Date.new(2026, 6, 1)) } + + it { is_expected.to include(['(GMT-08:00) Alaska', 'America/Juneau']) } + end + + context 'when summer time is not in effect' do + before { travel_to(Date.new(2025, 12, 1)) } + + it { is_expected.to include(['(GMT-09:00) Alaska', 'America/Juneau']) } + end + end end From 4ee893461df76dd485b7acbe0d3e435fd0ca2206 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 9 Jun 2026 16:17:36 +0200 Subject: [PATCH 31/44] Change i18n unused strings check to only check English strings (#39347) --- .github/workflows/check-i18n.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check-i18n.yml b/.github/workflows/check-i18n.yml index 4b221df123..ea5ab4bb7e 100644 --- a/.github/workflows/check-i18n.yml +++ b/.github/workflows/check-i18n.yml @@ -39,7 +39,7 @@ jobs: run: bin/i18n-tasks check-normalized - name: Check for unused strings - run: bin/i18n-tasks unused + run: bin/i18n-tasks unused -l en - name: Check for missing strings in English YML run: | From 200fda1cdc7457b539a7c4e1050f6901bb3245bd Mon Sep 17 00:00:00 2001 From: David Roetzel Date: Tue, 9 Jun 2026 16:22:21 +0200 Subject: [PATCH 32/44] Add collection reach finder (#39346) --- app/lib/activitypub/activity/accept.rb | 2 +- app/lib/collection_reach_finder.rb | 18 ++++++++++ app/models/collection.rb | 1 + .../add_account_to_collection_service.rb | 2 +- app/services/create_collection_service.rb | 2 +- .../delete_collection_item_service.rb | 2 +- app/services/delete_collection_service.rb | 8 +++-- .../revoke_collection_item_service.rb | 2 +- app/services/update_collection_service.rb | 2 +- .../collection_raw_distribution_worker.rb | 15 ++++++++ spec/lib/activitypub/activity/accept_spec.rb | 4 +-- spec/lib/activitypub/activity/delete_spec.rb | 2 +- spec/lib/collection_reach_finder_spec.rb | 35 +++++++++++++++++++ .../add_account_to_collection_service_spec.rb | 4 +-- .../create_collection_service_spec.rb | 2 +- .../delete_collection_item_service_spec.rb | 4 +-- .../delete_collection_service_spec.rb | 7 +++- .../revoke_collection_item_service_spec.rb | 2 +- .../update_collection_service_spec.rb | 4 +-- 19 files changed, 98 insertions(+), 20 deletions(-) create mode 100644 app/lib/collection_reach_finder.rb create mode 100644 app/workers/activitypub/collection_raw_distribution_worker.rb create mode 100644 spec/lib/collection_reach_finder_spec.rb diff --git a/app/lib/activitypub/activity/accept.rb b/app/lib/activitypub/activity/accept.rb index a76b79a6d8..67f211f8a1 100644 --- a/app/lib/activitypub/activity/accept.rb +++ b/app/lib/activitypub/activity/accept.rb @@ -53,7 +53,7 @@ class ActivityPub::Activity::Accept < ActivityPub::Activity collection_item.update!(approval_uri:, state: :accepted) activity_json = ActiveModelSerializers::SerializableResource.new(collection_item, serializer: ActivityPub::AddFeaturedItemSerializer, adapter: ActivityPub::Adapter).to_json - ActivityPub::AccountRawDistributionWorker.perform_async(activity_json, collection_item.collection.account_id) + ActivityPub::CollectionRawDistributionWorker.perform_async(activity_json, collection_item.collection_id) end def accept_quote!(quote) diff --git a/app/lib/collection_reach_finder.rb b/app/lib/collection_reach_finder.rb new file mode 100644 index 0000000000..3f2829c55e --- /dev/null +++ b/app/lib/collection_reach_finder.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +class CollectionReachFinder < AccountReachFinder + def initialize(collection) + @collection = collection + super(@collection.account) + end + + def inboxes + (super + collection_member_inboxes).uniq + end + + private + + def collection_member_inboxes + @collection.accounts.inboxes + end +end diff --git a/app/models/collection.rb b/app/models/collection.rb index ac76331659..337126b145 100644 --- a/app/models/collection.rb +++ b/app/models/collection.rb @@ -32,6 +32,7 @@ class Collection < ApplicationRecord has_many :collection_items, dependent: :delete_all has_many :accepted_collection_items, -> { accepted }, class_name: 'CollectionItem', inverse_of: :collection # rubocop:disable Rails/HasManyOrHasOneDependent has_many :collection_reports, dependent: :delete_all + has_many :accounts, -> { merge(CollectionItem.pending_or_accepted) }, through: :collection_items validates :name, presence: true validates :name, length: { maximum: 40 }, if: :local? diff --git a/app/services/add_account_to_collection_service.rb b/app/services/add_account_to_collection_service.rb index 3c2ecacf4f..f5438a6f9e 100644 --- a/app/services/add_account_to_collection_service.rb +++ b/app/services/add_account_to_collection_service.rb @@ -30,7 +30,7 @@ class AddAccountToCollectionService end def distribute_add_activity - ActivityPub::AccountRawDistributionWorker.perform_async(add_activity_json, @collection.account_id) + ActivityPub::CollectionRawDistributionWorker.perform_async(add_activity_json, @collection.id) end def distribute_feature_request_activity diff --git a/app/services/create_collection_service.rb b/app/services/create_collection_service.rb index 1c46b40530..4e88108ca0 100644 --- a/app/services/create_collection_service.rb +++ b/app/services/create_collection_service.rb @@ -19,7 +19,7 @@ class CreateCollectionService private def distribute_add_activity - ActivityPub::AccountRawDistributionWorker.perform_async(activity_json, @account.id) + ActivityPub::CollectionRawDistributionWorker.perform_async(activity_json, @collection.id) end def distribute_feature_request_activities diff --git a/app/services/delete_collection_item_service.rb b/app/services/delete_collection_item_service.rb index 3f91ea0c3b..04ff4b1263 100644 --- a/app/services/delete_collection_item_service.rb +++ b/app/services/delete_collection_item_service.rb @@ -16,7 +16,7 @@ class DeleteCollectionItemService private def distribute_remove_activity - ActivityPub::AccountRawDistributionWorker.perform_async(activity_json, @collection.account.id) + ActivityPub::CollectionRawDistributionWorker.perform_async(activity_json, @collection.id) end def activity_json diff --git a/app/services/delete_collection_service.rb b/app/services/delete_collection_service.rb index c2cc6ebd6c..0414d26980 100644 --- a/app/services/delete_collection_service.rb +++ b/app/services/delete_collection_service.rb @@ -3,6 +3,7 @@ class DeleteCollectionService def call(collection) @collection = collection + @account_ids = @collection.account_ids @collection.destroy! distribute_remove_activity @@ -11,10 +12,13 @@ class DeleteCollectionService private def distribute_remove_activity - ActivityPub::AccountRawDistributionWorker.perform_async(activity_json, @collection.account.id) + @account_ids.each do |account_id| + ActivityPub::DeliveryWorker.perform_async(activity_json, account_id, @collection.account.inbox_url) + end + ActivityPub::AccountRawDistributionWorker.perform_async(activity_json, @collection.account_id) end def activity_json - ActiveModelSerializers::SerializableResource.new(@collection, serializer: ActivityPub::RemoveFeaturedCollectionSerializer, adapter: ActivityPub::Adapter).to_json + @activity_json ||= ActiveModelSerializers::SerializableResource.new(@collection, serializer: ActivityPub::RemoveFeaturedCollectionSerializer, adapter: ActivityPub::Adapter).to_json end end diff --git a/app/services/revoke_collection_item_service.rb b/app/services/revoke_collection_item_service.rb index 0b3c2c709e..a5222d2b62 100644 --- a/app/services/revoke_collection_item_service.rb +++ b/app/services/revoke_collection_item_service.rb @@ -17,7 +17,7 @@ class RevokeCollectionItemService < BaseService def distribute_stamp_deletion! ActivityPub::DeliveryWorker.perform_async(signed_activity_json, @account.id, @collection.account.inbox_url) - ActivityPub::AccountRawDistributionWorker.perform_async(signed_activity_json, @collection.account_id) + ActivityPub::CollectionRawDistributionWorker.perform_async(signed_activity_json, @collection.id) end def signed_activity_json diff --git a/app/services/update_collection_service.rb b/app/services/update_collection_service.rb index 5ffb4bad81..041666d081 100644 --- a/app/services/update_collection_service.rb +++ b/app/services/update_collection_service.rb @@ -16,7 +16,7 @@ class UpdateCollectionService def distribute_update_activity return unless relevant_attributes_changed? - ActivityPub::AccountRawDistributionWorker.perform_async(activity_json, @collection.account.id) + ActivityPub::CollectionRawDistributionWorker.perform_async(activity_json, @collection.id) end def notify_about_update diff --git a/app/workers/activitypub/collection_raw_distribution_worker.rb b/app/workers/activitypub/collection_raw_distribution_worker.rb new file mode 100644 index 0000000000..6ddb3807dd --- /dev/null +++ b/app/workers/activitypub/collection_raw_distribution_worker.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class ActivityPub::CollectionRawDistributionWorker < ActivityPub::RawDistributionWorker + def perform(json, collection_id, exclude_inboxes = []) + @collection = Collection.find(collection_id) + + super(json, @collection.account_id, exclude_inboxes) + end + + private + + def inboxes + @inboxes ||= CollectionReachFinder.new(@collection).inboxes + end +end diff --git a/spec/lib/activitypub/activity/accept_spec.rb b/spec/lib/activitypub/activity/accept_spec.rb index 7775143e88..6e176597e9 100644 --- a/spec/lib/activitypub/activity/accept_spec.rb +++ b/spec/lib/activitypub/activity/accept_spec.rb @@ -194,7 +194,7 @@ RSpec.describe ActivityPub::Activity::Accept do expect(collection_item.reload).to be_accepted expect(collection_item.approval_uri).to eq 'https://example.com/stamps/1' - expect(ActivityPub::AccountRawDistributionWorker) + expect(ActivityPub::CollectionRawDistributionWorker) .to have_enqueued_sidekiq_job end end @@ -206,7 +206,7 @@ RSpec.describe ActivityPub::Activity::Accept do expect(collection_item.reload).to_not be_accepted expect(collection_item.approval_uri).to be_nil - expect(ActivityPub::AccountRawDistributionWorker) + expect(ActivityPub::CollectionRawDistributionWorker) .to_not have_enqueued_sidekiq_job end end diff --git a/spec/lib/activitypub/activity/delete_spec.rb b/spec/lib/activitypub/activity/delete_spec.rb index 7e5d5f8574..260aadb54e 100644 --- a/spec/lib/activitypub/activity/delete_spec.rb +++ b/spec/lib/activitypub/activity/delete_spec.rb @@ -139,7 +139,7 @@ RSpec.describe ActivityPub::Activity::Delete do subject.perform expect(collection_item.reload).to be_revoked - expect(ActivityPub::AccountRawDistributionWorker).to have_enqueued_sidekiq_job + expect(ActivityPub::CollectionRawDistributionWorker).to have_enqueued_sidekiq_job end end end diff --git a/spec/lib/collection_reach_finder_spec.rb b/spec/lib/collection_reach_finder_spec.rb new file mode 100644 index 0000000000..74c6b67538 --- /dev/null +++ b/spec/lib/collection_reach_finder_spec.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe CollectionReachFinder do + let(:account) { Fabricate(:account) } + let(:collection) { Fabricate(:collection, account:) } + + let(:follower_example_com) { Fabricate(:account, protocol: :activitypub, inbox_url: 'https://example.com/inbox-1', domain: 'example.com') } + let(:follower_with_shared) { Fabricate(:account, protocol: :activitypub, inbox_url: 'https://foo.bar/users/a/inbox', domain: 'foo.bar', shared_inbox_url: 'https://foo.bar/inbox') } + + let(:collection_member_with_shared) { Fabricate(:account, protocol: :activitypub, inbox_url: 'https://foo.bar/users/b/inbox', domain: 'foo.bar', shared_inbox_url: 'https://foo.bar/inbox') } + let(:collection_member_example_org) { Fabricate(:account, protocol: :activitypub, inbox_url: 'https://example.org/inbox-2', domain: 'example.org') } + + before do + follower_example_com.follow!(account) + follower_with_shared.follow!(account) + + [follower_example_com, collection_member_with_shared, collection_member_example_org].each do |collection_member| + Fabricate(:collection_item, collection:, account: collection_member, activity_uri: "https://#{collection_member.domain}/activity", approval_uri: "https://#{collection_member.domain}/approval") + end + end + + describe '#inboxes' do + subject { described_class.new(collection).inboxes } + + it 'includes unique inbox URIs of followers and collection members respecting shared inbox URIs where present' do + expect(subject).to contain_exactly( + 'https://example.com/inbox-1', + 'https://foo.bar/inbox', + 'https://example.org/inbox-2' + ) + end + end +end diff --git a/spec/services/add_account_to_collection_service_spec.rb b/spec/services/add_account_to_collection_service_spec.rb index dd7983ca62..2e033ea239 100644 --- a/spec/services/add_account_to_collection_service_spec.rb +++ b/spec/services/add_account_to_collection_service_spec.rb @@ -25,9 +25,9 @@ RSpec.describe AddAccountToCollectionService do it 'federates an `Add` activity and schedules a notification' do subject.call(collection, account) - expect(ActivityPub::AccountRawDistributionWorker) + expect(ActivityPub::CollectionRawDistributionWorker) .to have_enqueued_sidekiq_job - .with(anything, collection.account_id) + .with(anything, collection.id) expect(LocalNotificationWorker) .to have_enqueued_sidekiq_job .with(account.id, anything, 'CollectionItem', 'added_to_collection') diff --git a/spec/services/create_collection_service_spec.rb b/spec/services/create_collection_service_spec.rb index 67acb3b7ae..4e93134034 100644 --- a/spec/services/create_collection_service_spec.rb +++ b/spec/services/create_collection_service_spec.rb @@ -32,7 +32,7 @@ RSpec.describe CreateCollectionService do it 'federates an `Add` activity' do subject.call(base_params, author) - expect(ActivityPub::AccountRawDistributionWorker).to have_enqueued_sidekiq_job + expect(ActivityPub::CollectionRawDistributionWorker).to have_enqueued_sidekiq_job end context 'when given account ids' do diff --git a/spec/services/delete_collection_item_service_spec.rb b/spec/services/delete_collection_item_service_spec.rb index f9a235b902..2f42584158 100644 --- a/spec/services/delete_collection_item_service_spec.rb +++ b/spec/services/delete_collection_item_service_spec.rb @@ -17,7 +17,7 @@ RSpec.describe DeleteCollectionItemService do it 'federates a `Remove` activity' do subject.call(collection_item) - expect(ActivityPub::AccountRawDistributionWorker).to have_enqueued_sidekiq_job + expect(ActivityPub::CollectionRawDistributionWorker).to have_enqueued_sidekiq_job end context 'when `revoke` is set to true' do @@ -36,7 +36,7 @@ RSpec.describe DeleteCollectionItemService do it 'destroys the collection withouth federating anything' do expect { subject.call(collection_item, revoke: true) }.to change(collection.collection_items, :count).by(-1) - expect(ActivityPub::AccountRawDistributionWorker).to_not have_enqueued_sidekiq_job + expect(ActivityPub::CollectionRawDistributionWorker).to_not have_enqueued_sidekiq_job end end end diff --git a/spec/services/delete_collection_service_spec.rb b/spec/services/delete_collection_service_spec.rb index 06ed82b21d..e2b85fe924 100644 --- a/spec/services/delete_collection_service_spec.rb +++ b/spec/services/delete_collection_service_spec.rb @@ -7,15 +7,20 @@ RSpec.describe DeleteCollectionService do let!(:collection) { Fabricate(:collection) } + before do + Fabricate.times(2, :collection_item, collection:) + end + describe '#call' do it 'destroys the collection' do expect { subject.call(collection) }.to change(Collection, :count).by(-1) end - it 'federates a `Remove` activity' do + it "federates a `Remove` activity to the account's reach plus each collection member" do subject.call(collection) expect(ActivityPub::AccountRawDistributionWorker).to have_enqueued_sidekiq_job + expect(ActivityPub::DeliveryWorker).to have_enqueued_sidekiq_job.exactly(2).times end end end diff --git a/spec/services/revoke_collection_item_service_spec.rb b/spec/services/revoke_collection_item_service_spec.rb index 18357f53dd..760c9038b9 100644 --- a/spec/services/revoke_collection_item_service_spec.rb +++ b/spec/services/revoke_collection_item_service_spec.rb @@ -21,7 +21,7 @@ RSpec.describe RevokeCollectionItemService do subject.call(collection_item) expect(ActivityPub::DeliveryWorker).to have_enqueued_sidekiq_job.with(instance_of(String), collection_item.account_id, 'https://example.com/actor/1/inbox') - expect(ActivityPub::AccountRawDistributionWorker).to have_enqueued_sidekiq_job + expect(ActivityPub::CollectionRawDistributionWorker).to have_enqueued_sidekiq_job end end end diff --git a/spec/services/update_collection_service_spec.rb b/spec/services/update_collection_service_spec.rb index 088d5768ed..2899b301b2 100644 --- a/spec/services/update_collection_service_spec.rb +++ b/spec/services/update_collection_service_spec.rb @@ -14,14 +14,14 @@ RSpec.describe UpdateCollectionService do expect { subject.call(collection, { name: 'Newly updated name' }) } .to change(collection, :name).to('Newly updated name') .and enqueue_sidekiq_job(LocalNotificationWorker).with(collection_item.account_id, collection.id, collection.class.name, 'collection_update') - .and enqueue_sidekiq_job(ActivityPub::AccountRawDistributionWorker) + .and enqueue_sidekiq_job(ActivityPub::CollectionRawDistributionWorker) end context 'when nothing changed' do it 'does not federate an activity' do subject.call(collection, { name: collection.name }) - expect(ActivityPub::AccountRawDistributionWorker).to_not have_enqueued_sidekiq_job + expect(ActivityPub::CollectionRawDistributionWorker).to_not have_enqueued_sidekiq_job expect(LocalNotificationWorker).to_not have_enqueued_sidekiq_job end end From e0fc0858a19c7bb25d25b9c4077e58500839448d Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 9 Jun 2026 11:39:24 -0400 Subject: [PATCH 33/44] Use http POST on rules acceptance button during registration (#39345) --- app/controllers/auth/acceptances_controller.rb | 13 +++++++++++++ app/views/auth/registrations/rules.html.haml | 2 +- config/routes.rb | 1 + 3 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 app/controllers/auth/acceptances_controller.rb diff --git a/app/controllers/auth/acceptances_controller.rb b/app/controllers/auth/acceptances_controller.rb new file mode 100644 index 0000000000..ba03a327e7 --- /dev/null +++ b/app/controllers/auth/acceptances_controller.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class Auth::AcceptancesController < ApplicationController + def create + redirect_to new_user_registration_path(registration_params) + end + + private + + def registration_params + params.permit(:accept, :invite_code).compact_blank + end +end diff --git a/app/views/auth/registrations/rules.html.haml b/app/views/auth/registrations/rules.html.haml index 69b42b993f..961b1b1e1b 100644 --- a/app/views/auth/registrations/rules.html.haml +++ b/app/views/auth/registrations/rules.html.haml @@ -4,7 +4,7 @@ - content_for :header_tags do = render partial: 'shared/og', locals: { description: description_for_sign_up(@invite) } -= form_with class: :simple_form, method: :get, url: new_user_registration_path do |form| += form_with class: :simple_form, url: auth_acceptance_path do |form| = render 'auth/shared/progress', stage: 'rules' - if @invite.present? && @invite.autofollow? diff --git a/config/routes.rb b/config/routes.rb index 8538635124..ca5a9a2fb9 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -74,6 +74,7 @@ Rails.application.routes.draw do resource :unsubscribe, only: [:show, :create], controller: :unsubscriptions namespace :auth do + resource :acceptance, only: [:create] resource :setup, only: [:show, :update], controller: :setup resource :challenge, only: [:create] post 'captcha_confirmation', to: 'confirmations#confirm_captcha', as: :captcha_confirmation From b48f907b20e2c9909665a484041845697d26f17c Mon Sep 17 00:00:00 2001 From: David Roetzel Date: Tue, 9 Jun 2026 17:40:01 +0200 Subject: [PATCH 34/44] Add `Deprecation` headers to collections alpha API (#39349) --- app/controllers/api/base_controller.rb | 4 ++++ .../api/v1/collection_items_controller.rb | 3 +++ .../api/v1/collections_controller.rb | 3 +++ spec/requests/api/v1/collection_items_spec.rb | 20 +++++++++++++------ spec/requests/api/v1/collections_spec.rb | 8 ++++++++ 5 files changed, 32 insertions(+), 6 deletions(-) diff --git a/app/controllers/api/base_controller.rb b/app/controllers/api/base_controller.rb index 68c4f3962a..601b8e7985 100644 --- a/app/controllers/api/base_controller.rb +++ b/app/controllers/api/base_controller.rb @@ -100,4 +100,8 @@ class Api::BaseController < ApplicationController def respond_with_error(code) render json: { error: Rack::Utils::HTTP_STATUS_CODES[code] }, status: code end + + def alpha_path? + request.path.starts_with?('/api/v1_alpha') + end end diff --git a/app/controllers/api/v1/collection_items_controller.rb b/app/controllers/api/v1/collection_items_controller.rb index 3ec5e18ed9..6b7db97b06 100644 --- a/app/controllers/api/v1/collection_items_controller.rb +++ b/app/controllers/api/v1/collection_items_controller.rb @@ -2,6 +2,9 @@ class Api::V1::CollectionItemsController < Api::BaseController include Authorization + include DeprecationConcern + + deprecate_api '2026-06-10', if: :alpha_path? before_action -> { doorkeeper_authorize! :write, :'write:collections' } diff --git a/app/controllers/api/v1/collections_controller.rb b/app/controllers/api/v1/collections_controller.rb index 50a825afac..08453a7ed6 100644 --- a/app/controllers/api/v1/collections_controller.rb +++ b/app/controllers/api/v1/collections_controller.rb @@ -2,6 +2,7 @@ class Api::V1::CollectionsController < Api::BaseController include Authorization + include DeprecationConcern DEFAULT_COLLECTIONS_LIMIT = 40 MAX_COLLECTIONS_LIMIT = 100 @@ -10,6 +11,8 @@ class Api::V1::CollectionsController < Api::BaseController render json: { error: ValidationErrorFormatter.new(e).as_json }, status: 422 end + deprecate_api '2026-06-10', if: :alpha_path? + before_action -> { authorize_if_got_token! :read, :'read:collections' }, only: [:index, :show] before_action -> { doorkeeper_authorize! :write, :'write:collections' }, only: [:create, :update, :destroy] diff --git a/spec/requests/api/v1/collection_items_spec.rb b/spec/requests/api/v1/collection_items_spec.rb index 93d4f70ad5..30dba0cced 100644 --- a/spec/requests/api/v1/collection_items_spec.rb +++ b/spec/requests/api/v1/collection_items_spec.rb @@ -5,9 +5,9 @@ require 'rails_helper' RSpec.describe 'Api::V1Alpha::CollectionItems' do include_context 'with API authentication', oauth_scopes: 'read:collections write:collections' - describe 'POST /api/v1_alpha/collections/:collection_id/items' do + describe 'POST /api/v1/collections/:collection_id/items' do subject do - post "/api/v1_alpha/collections/#{collection.id}/items", headers: headers, params: params + post "/api/v1/collections/#{collection.id}/items", headers: headers, params: params end let(:collection) { Fabricate(:collection, account: user.account) } @@ -28,6 +28,14 @@ RSpec.describe 'Api::V1Alpha::CollectionItems' do expect(response).to have_http_status(200) expect(response.parsed_body).to have_key('collection_item') end + + it 'features a deprecation header when requested via the alpha route' do + subject + expect(response.headers['Deprecation']).to be_nil + + post "/api/v1_alpha/collections/#{collection.id}/items", headers: headers, params: params + expect(response.headers['Deprecation']).to eq '@1781049600' + end end context 'with invalid params' do @@ -54,9 +62,9 @@ RSpec.describe 'Api::V1Alpha::CollectionItems' do end end - describe 'DELETE /api/v1_alpha/collections/:collection_id/items/:id' do + describe 'DELETE /api/v1/collections/:collection_id/items/:id' do subject do - delete "/api/v1_alpha/collections/#{collection.id}/items/#{item.id}", headers: headers + delete "/api/v1/collections/#{collection.id}/items/#{item.id}", headers: headers end let(:collection) { Fabricate(:collection, account: user.account) } @@ -103,9 +111,9 @@ RSpec.describe 'Api::V1Alpha::CollectionItems' do end end - describe 'POST /api/v1_alpha/collections/:collection_id/items/:id/revoke' do + describe 'POST /api/v1/collections/:collection_id/items/:id/revoke' do subject do - post "/api/v1_alpha/collections/#{collection.id}/items/#{item.id}/revoke", headers: headers + post "/api/v1/collections/#{collection.id}/items/#{item.id}/revoke", headers: headers end let(:collection) { Fabricate(:collection) } diff --git a/spec/requests/api/v1/collections_spec.rb b/spec/requests/api/v1/collections_spec.rb index b6bb17319d..d47a8265f4 100644 --- a/spec/requests/api/v1/collections_spec.rb +++ b/spec/requests/api/v1/collections_spec.rb @@ -23,6 +23,14 @@ RSpec.describe 'Api::V1::Collections' do expect(response.parsed_body[:collections].size).to eq 3 end + it 'features a deprecation header when requested via the alpha route' do + subject + expect(response.headers['Deprecation']).to be_nil + + get "/api/v1_alpha/accounts/#{account.id}/collections", headers: headers, params: params + expect(response.headers['Deprecation']).to eq '@1781049600' + end + context 'with limit param' do let(:params) { { limit: '1' } } From 2777b69db846eeb208556e46d5cd74623ab8d5a6 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 8 Jun 2026 09:05:27 +0200 Subject: [PATCH 35/44] [Glitch] Add ability to view individual newsletters in admin UI Port ea5b613796e2a933592697181d246227d77f2179 to glitch-soc Signed-off-by: Claire --- .../glitch/styles/mastodon/admin.scss | 58 +++++++++++++++++++ .../glitch/styles/mastodon/tables.scss | 10 ++++ 2 files changed, 68 insertions(+) diff --git a/app/javascript/flavours/glitch/styles/mastodon/admin.scss b/app/javascript/flavours/glitch/styles/mastodon/admin.scss index 7a9170fdeb..5950bc32cb 100644 --- a/app/javascript/flavours/glitch/styles/mastodon/admin.scss +++ b/app/javascript/flavours/glitch/styles/mastodon/admin.scss @@ -467,6 +467,22 @@ $content-width: 840px; background-color: var(--color-bg-brand-soft); } + &.variantWarning { + background-color: var(--color-bg-warning-softest); + + .icon { + background-color: var(--color-bg-warning-soft); + } + } + + &.variantError { + background-color: var(--color-bg-error-softest); + + .icon { + background-color: var(--color-bg-error-soft); + } + } + .content { display: flex; flex-direction: column; @@ -2466,4 +2482,46 @@ a.sparkline { background: var(--color-bg-success-softest); font-size: 13px; font-weight: 600; + + &.positive { + background: var(--color-bg-success-softest); + } + + &.negative { + background: var(--color-bg-error-softest); + } +} + +.metadata { + display: flex; + gap: 40px; + margin: 16px 0; + + & > div { + display: flex; + flex-direction: column; + gap: 4px; + flex-shrink: 0; + } + + dt { + font-size: 13px; + color: var(--color-text-secondary); + } + + dd { + font-size: 16px; + font-weight: 600; + line-height: 22.4px; + + .status-badge { + box-sizing: border-box; + padding: 4px; + font-size: inherit; + height: 24px; + display: flex; + align-items: center; + justify-content: center; + } + } } diff --git a/app/javascript/flavours/glitch/styles/mastodon/tables.scss b/app/javascript/flavours/glitch/styles/mastodon/tables.scss index 0023ea353c..ff2935a46a 100644 --- a/app/javascript/flavours/glitch/styles/mastodon/tables.scss +++ b/app/javascript/flavours/glitch/styles/mastodon/tables.scss @@ -129,6 +129,10 @@ color: var(--color-text-primary); font-weight: 600; } + + .status-badge { + padding: 0; + } } &.batch-table { @@ -194,6 +198,12 @@ a.table-action-link { justify-content: center; padding: 4px; aspect-ratio: 1; + + &.table-icon-link--danger { + border-radius: 8px; + border: 1px solid var(--color-border-primary); + color: var(--color-text-error); + } } .batch-table { From 4b24bc1c6dc0e492890be1dfc30f9ad6940b5fbb Mon Sep 17 00:00:00 2001 From: diondiondion Date: Mon, 8 Jun 2026 11:08:00 +0200 Subject: [PATCH 36/44] [Glitch] Fix alignment of icon and text in Callout component Port 87024b9e1cf7f0945eae457501899216d79c9073 to glitch-soc Signed-off-by: Claire --- .../components/callout/callout.stories.tsx | 19 ++++++++++++++----- .../components/callout/styles.module.css | 5 +++-- .../glitch/styles/mastodon/admin.scss | 5 +++-- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/app/javascript/flavours/glitch/components/callout/callout.stories.tsx b/app/javascript/flavours/glitch/components/callout/callout.stories.tsx index f9bba1ec14..bb973ab71f 100644 --- a/app/javascript/flavours/glitch/components/callout/callout.stories.tsx +++ b/app/javascript/flavours/glitch/components/callout/callout.stories.tsx @@ -34,6 +34,15 @@ export const Default: Story = { }, }; +export const NoTitle: Story = { + args: { + title: '', + primaryLabel: '', + secondaryLabel: '', + onClose: undefined, + }, +}; + export const NoIcon: Story = { args: { icon: false, @@ -56,11 +65,11 @@ export const OnlyText: Story = { }, }; -// export const Subtle: Story = { -// args: { -// variant: 'subtle', -// }, -// }; +export const Subtle: Story = { + args: { + variant: 'subtle', + }, +}; export const Feature: Story = { args: { diff --git a/app/javascript/flavours/glitch/components/callout/styles.module.css b/app/javascript/flavours/glitch/components/callout/styles.module.css index fc05e57ab3..dd2c753525 100644 --- a/app/javascript/flavours/glitch/components/callout/styles.module.css +++ b/app/javascript/flavours/glitch/components/callout/styles.module.css @@ -7,6 +7,7 @@ color: var(--color-text-primary); border-radius: 12px; font-size: 15px; + line-height: 1.3333; } .icon { @@ -14,7 +15,7 @@ border-radius: 9999px; width: 1rem; height: 1rem; - margin-top: -2px; + margin-block: -2px; } .content, @@ -46,7 +47,7 @@ h3 { font-weight: 500; - margin-bottom: 5px; + margin-bottom: 3px; } } diff --git a/app/javascript/flavours/glitch/styles/mastodon/admin.scss b/app/javascript/flavours/glitch/styles/mastodon/admin.scss index 5950bc32cb..a5c2f3183f 100644 --- a/app/javascript/flavours/glitch/styles/mastodon/admin.scss +++ b/app/javascript/flavours/glitch/styles/mastodon/admin.scss @@ -456,6 +456,7 @@ $content-width: 840px; color: var(--color-text-primary); border-radius: 12px; font-size: 15px; + line-height: 1.3333; margin-bottom: 30px; .icon { @@ -463,7 +464,7 @@ $content-width: 840px; border-radius: 9999px; width: 1rem; height: 1rem; - margin-top: -2px; + margin-block: -2px; background-color: var(--color-bg-brand-soft); } @@ -501,7 +502,7 @@ $content-width: 840px; .title { font-weight: 600; - margin-bottom: 8px; + margin-bottom: 6px; font-size: inherit; line-height: inherit; } From dccb5e501dc27f95aba056927957215bbc96dd35 Mon Sep 17 00:00:00 2001 From: diondiondion Date: Mon, 8 Jun 2026 12:16:33 +0200 Subject: [PATCH 37/44] [Glitch] Accessibility: Move column extra buttons out of h1 column heading Port bcafd7d0c7c929f5e90fa1f64c881632a145f8b8 to glitch-soc Signed-off-by: Claire --- .../glitch/components/column_header.tsx | 17 +++++++---------- .../glitch/styles/mastodon/components.scss | 6 +++++- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/app/javascript/flavours/glitch/components/column_header.tsx b/app/javascript/flavours/glitch/components/column_header.tsx index fda5c71b36..cdbf6ef9dd 100644 --- a/app/javascript/flavours/glitch/components/column_header.tsx +++ b/app/javascript/flavours/glitch/components/column_header.tsx @@ -152,7 +152,7 @@ export const ColumnHeader: React.FC = ({ active, }); - const buttonClassName = classNames('column-header', { + const headingClassName = classNames('column-header', { active, }); @@ -276,16 +276,14 @@ export const ColumnHeader: React.FC = ({ ); - const HeadingElement = hasTitle ? 'h1' : 'div'; - const component = (
- +
{hasTitle && ( - <> +

{backButton} - {onClick && ( + {onClick ? ( - )} - {!onClick && ( + ) : ( = ({ {titleContents} )} - +

)} {!hasTitle && backButton} @@ -313,7 +310,7 @@ export const ColumnHeader: React.FC = ({ {extraButton} {collapseButton}
-
+
Date: Mon, 8 Jun 2026 15:07:01 +0200 Subject: [PATCH 38/44] [Glitch] Fix tiny checkboxes and radio buttons in Safari Port 51a956b6bc0eae8ebf7c7ee7bb62a167b4d18319 to glitch-soc Signed-off-by: Claire --- app/javascript/flavours/glitch/styles/mastodon/forms.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/javascript/flavours/glitch/styles/mastodon/forms.scss b/app/javascript/flavours/glitch/styles/mastodon/forms.scss index d5dc2c79df..45801f5244 100644 --- a/app/javascript/flavours/glitch/styles/mastodon/forms.scss +++ b/app/javascript/flavours/glitch/styles/mastodon/forms.scss @@ -501,6 +501,8 @@ code { input[type='radio'] { accent-color: var(--color-text-brand); + width: 15px; + height: 15px; } } @@ -534,6 +536,8 @@ code { label.checkbox { input[type='checkbox'] { accent-color: var(--color-text-brand); + width: 15px; + height: 15px; } } From 4eeb1b0118dba93cecc036add93fe50b67efe45f Mon Sep 17 00:00:00 2001 From: diondiondion Date: Mon, 8 Jun 2026 15:30:10 +0200 Subject: [PATCH 39/44] [Glitch] Patch over a11y issues caused by "simple" ruby gems Port 5553448678a8a9f4ef970948b6fb7f013e9a4238 to glitch-soc Signed-off-by: Claire --- .../flavours/glitch/entrypoints/public.tsx | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/app/javascript/flavours/glitch/entrypoints/public.tsx b/app/javascript/flavours/glitch/entrypoints/public.tsx index 33d791c815..a3fcc03a05 100644 --- a/app/javascript/flavours/glitch/entrypoints/public.tsx +++ b/app/javascript/flavours/glitch/entrypoints/public.tsx @@ -181,6 +181,8 @@ async function loaded() { truncateRuleHints(); + applyRailsA11yPatches(); + const reactComponents = document.querySelectorAll('[data-component]'); if (reactComponents.length > 0) { @@ -515,6 +517,88 @@ on('click', '.rules-list button', ({ target }) => { } }); +/** + * Patch accessibility issues caused by Ruby Gems that + * don't produce accessible markup (simple-forms & simple-navigation) + */ +function applyRailsA11yPatches() { + /** + * Mark current navigation item with aria-current + */ + const activeNavLink = document.querySelector( + '.simple-navigation-active-leaf a.selected', + ); + activeNavLink?.setAttribute('aria-current', 'page'); + + /** + * Hides the asterisk added to labels of required form fields + * from assistive tech. (Those fields already have the `required` attribute) + */ + document + .querySelectorAll('.simple_form label.required abbr') + .forEach((element) => { + element.setAttribute('aria-hidden', 'true'); + }); + + /** + * Associate form field hints with their inputs via aria-describedby + */ + document + .querySelectorAll('.simple_form .field_with_hint') + .forEach((field) => { + const inputs = field.querySelectorAll< + HTMLInputElement | HTMLTextAreaElement + >("input[type='text'], input[type='checkbox'], textarea"); + + const hint = field.querySelector('.hint'); + + // Bail out if there are more than one input as + // the association can't be safely made. + if (inputs.length !== 1 || !inputs[0] || !hint) { + return; + } + + const input = inputs[0]; + const inputId = input.getAttribute('id'); + const hintId = `${inputId}_hint`; + + input.setAttribute('aria-describedby', hintId); + hint.setAttribute('id', hintId); + }); + + /** + * Add fieldset-like group labels ("legends") to the date-of-birth selector + * and groups of radio buttons + */ + const groups = document.querySelectorAll( + '.simple_form .date_of_birth, .simple_form .input.with_label.radio_buttons', + ); + groups.forEach((groupWrapper) => { + // This is the element serving as the label of the group. + const groupLabel = groupWrapper.querySelector('label'); + const labelWithId = + groupWrapper.querySelector('label[for]'); + const groupHint = groupWrapper.querySelector('.hint'); + + // We need a unique ID to generate the aria associations. If `groupLabel` + // doesn't have one, we just take the first label with a `for` attribute + // that we can find, which is fine because we'll modify it before use. + const inputId = + groupLabel?.getAttribute('for') ?? labelWithId?.getAttribute('for'); + const labelId = `${inputId}_label`; + const hintId = `${inputId}_hint`; + + groupLabel?.setAttribute('id', labelId); + groupHint?.setAttribute('id', hintId); + + groupWrapper.setAttribute('role', 'group'); + groupWrapper.setAttribute('aria-labelledby', labelId); + if (groupHint) { + groupWrapper.setAttribute('aria-describedby', hintId); + } + }); +} + function main() { ready(loaded).catch((error: unknown) => { console.error(error); From 00fdc5e1ceef5f7d2a1febf18a2dc981762f1fdf Mon Sep 17 00:00:00 2001 From: diondiondion Date: Mon, 8 Jun 2026 15:45:28 +0200 Subject: [PATCH 40/44] [Glitch] Fix broken column header layout after heading refactor Port 1bfdfcae7b695811d021412d9d3abe6a833df7e9 to glitch-soc Signed-off-by: Claire --- .../flavours/glitch/components/column_header.tsx | 13 +++++++------ .../flavours/glitch/styles/mastodon/components.scss | 11 ++++++----- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/app/javascript/flavours/glitch/components/column_header.tsx b/app/javascript/flavours/glitch/components/column_header.tsx index cdbf6ef9dd..31fff6cd24 100644 --- a/app/javascript/flavours/glitch/components/column_header.tsx +++ b/app/javascript/flavours/glitch/components/column_header.tsx @@ -276,17 +276,20 @@ export const ColumnHeader: React.FC = ({ ); + const titleClassNames = classNames('column-header__title', { + 'column-header__title--with-back-button': !!backButton, + }); + const component = (
+ {backButton} {hasTitle && (

- {backButton} - {onClick ? ( ) : ( @@ -304,8 +307,6 @@ export const ColumnHeader: React.FC = ({

)} - {!hasTitle && backButton} -
{extraButton} {collapseButton} diff --git a/app/javascript/flavours/glitch/styles/mastodon/components.scss b/app/javascript/flavours/glitch/styles/mastodon/components.scss index 984ac33ffe..78c5cfd202 100644 --- a/app/javascript/flavours/glitch/styles/mastodon/components.scss +++ b/app/javascript/flavours/glitch/styles/mastodon/components.scss @@ -4728,14 +4728,15 @@ a.status-card { outline: 0; &__title-wrapper { + display: flex; flex-grow: 1; } &__title { display: flex; align-items: center; - width: 100%; gap: 5px; + flex-grow: 1; margin: 0; border: 0; padding: 13px; @@ -4748,6 +4749,10 @@ a.status-card { overflow: hidden; white-space: nowrap; + &--with-back-button { + padding-inline-start: 0; + } + &:focus-visible { outline: var(--outline-focus-default); } @@ -4757,10 +4762,6 @@ a.status-card { } } - .column-header__back-button + &__title { - padding-inline-start: 0; - } - .column-header__back-button { flex: 1; color: var(--color-text-brand); From b46babae1edf9e8dc7dcdb4e99ed99a2ee8f0d04 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 8 Jun 2026 16:03:56 +0200 Subject: [PATCH 41/44] [Glitch] Change media attachment limit to 10000 characters Port c4ea89dfd952e05da6edd0d47473fd4bd4834dae to glitch-soc Signed-off-by: Claire --- .../flavours/glitch/features/alt_text_modal/index.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/javascript/flavours/glitch/features/alt_text_modal/index.tsx b/app/javascript/flavours/glitch/features/alt_text_modal/index.tsx index 74aa789e1c..d19f653c0f 100644 --- a/app/javascript/flavours/glitch/features/alt_text_modal/index.tsx +++ b/app/javascript/flavours/glitch/features/alt_text_modal/index.tsx @@ -54,7 +54,8 @@ const messages = defineMessages({ }, }); -const MAX_LENGTH = 1500; +// TODO: use `description_limit` from the `/api/v2/instance` response +const MAX_LENGTH = 10000; type FocalPoint = [number, number]; From 5c8858acd4f3b2818a6b5f224f532d0dff1b3a2d Mon Sep 17 00:00:00 2001 From: diondiondion Date: Mon, 8 Jun 2026 17:12:56 +0200 Subject: [PATCH 42/44] [Glitch] Allow alerts ("toasts") to be announced by assistive tech Port 4ee21a6c14e97a7f8ccbab22a1de5e91dae4f042 to glitch-soc Signed-off-by: Claire --- .../flavours/glitch/components/alert/index.tsx | 1 + .../flavours/glitch/components/alerts_controller.tsx | 9 +++------ .../flavours/glitch/styles/mastodon/components.scss | 4 ++++ 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/app/javascript/flavours/glitch/components/alert/index.tsx b/app/javascript/flavours/glitch/components/alert/index.tsx index 3389c9d9fe..b28d39ded5 100644 --- a/app/javascript/flavours/glitch/components/alert/index.tsx +++ b/app/javascript/flavours/glitch/components/alert/index.tsx @@ -53,6 +53,7 @@ export const Alert: React.FC<{ className='notification-bar__action' onClick={onActionClick} type='button' + aria-hidden='true' > {action} diff --git a/app/javascript/flavours/glitch/components/alerts_controller.tsx b/app/javascript/flavours/glitch/components/alerts_controller.tsx index 150f3c0288..695834177a 100644 --- a/app/javascript/flavours/glitch/components/alerts_controller.tsx +++ b/app/javascript/flavours/glitch/components/alerts_controller.tsx @@ -11,6 +11,7 @@ import type { } from 'flavours/glitch/models/alert'; import { useAppSelector, useAppDispatch } from 'flavours/glitch/store'; +import { A11yLiveRegion } from './a11y_live_region'; import { Alert } from './alert'; const formatIfNeeded = ( @@ -75,12 +76,8 @@ const TimedAlert: React.FC<{ export const AlertsController: React.FC = () => { const alerts = useAppSelector((state) => state.alerts); - if (alerts.length === 0) { - return null; - } - return ( -
+ {alerts.map((alert, idx) => ( { dismissAfter={5000 + idx * 1000} /> ))} -
+ ); }; diff --git a/app/javascript/flavours/glitch/styles/mastodon/components.scss b/app/javascript/flavours/glitch/styles/mastodon/components.scss index 78c5cfd202..aa71df4a37 100644 --- a/app/javascript/flavours/glitch/styles/mastodon/components.scss +++ b/app/javascript/flavours/glitch/styles/mastodon/components.scss @@ -10184,6 +10184,10 @@ noscript { display: flex; flex-direction: column; gap: 4px; + + &:empty { + display: none; + } } .notification-bar { From 0bd23301649f2a0df09e7866ab6b1d6b651b738e Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Tue, 9 Jun 2026 08:28:53 -0400 Subject: [PATCH 43/44] [Glitch] Add policy to filter notifications from bots Port 9c493c20b931474d94e2e8ea8a0ce55925df51eb to glitch-soc Signed-off-by: Claire --- .../glitch/api_types/notification_policies.ts | 1 + .../components/policy_controls.tsx | 25 +++++++++++++++++++ .../components/ignore_notifications_modal.jsx | 3 +++ 3 files changed, 29 insertions(+) diff --git a/app/javascript/flavours/glitch/api_types/notification_policies.ts b/app/javascript/flavours/glitch/api_types/notification_policies.ts index 1c3970782c..40ca89e78f 100644 --- a/app/javascript/flavours/glitch/api_types/notification_policies.ts +++ b/app/javascript/flavours/glitch/api_types/notification_policies.ts @@ -8,6 +8,7 @@ export interface NotificationPolicyJSON { for_new_accounts: NotificationPolicyValue; for_private_mentions: NotificationPolicyValue; for_limited_accounts: NotificationPolicyValue; + for_bots: NotificationPolicyValue; summary: { pending_requests_count: number; pending_notifications_count: number; diff --git a/app/javascript/flavours/glitch/features/notifications/components/policy_controls.tsx b/app/javascript/flavours/glitch/features/notifications/components/policy_controls.tsx index c156256ae1..530ec4d5fc 100644 --- a/app/javascript/flavours/glitch/features/notifications/components/policy_controls.tsx +++ b/app/javascript/flavours/glitch/features/notifications/components/policy_controls.tsx @@ -88,6 +88,13 @@ export const PolicyControls: React.FC = () => { [dispatch], ); + const handleFilterBots = useCallback( + (value: string) => { + changeFilter(dispatch, 'for_bots', value); + }, + [dispatch], + ); + if (!notificationPolicy) return null; const options = [ @@ -209,6 +216,24 @@ export const PolicyControls: React.FC = () => { /> } /> + + + } + hint={ + + } + />
); diff --git a/app/javascript/flavours/glitch/features/ui/components/ignore_notifications_modal.jsx b/app/javascript/flavours/glitch/features/ui/components/ignore_notifications_modal.jsx index ab5f105063..6728b015b0 100644 --- a/app/javascript/flavours/glitch/features/ui/components/ignore_notifications_modal.jsx +++ b/app/javascript/flavours/glitch/features/ui/components/ignore_notifications_modal.jsx @@ -48,6 +48,9 @@ export const IgnoreNotificationsModal = ({ filterType }) => { case 'for_limited_accounts': title = ; break; + case 'for_bots': + title = ; + break; } return ( From 8c50d2fb5e80ef3f1d7e7a1eb2dfa33bed4c416e Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 9 Jun 2026 21:53:09 +0200 Subject: [PATCH 44/44] Fix linting issues --- spec/requests/api/v1/statuses_spec.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/spec/requests/api/v1/statuses_spec.rb b/spec/requests/api/v1/statuses_spec.rb index 20d9fa0c1b..4b962eab5d 100644 --- a/spec/requests/api/v1/statuses_spec.rb +++ b/spec/requests/api/v1/statuses_spec.rb @@ -478,7 +478,7 @@ RSpec.describe '/api/v1/statuses' do expect(response).to have_http_status(200) expect(response.content_type) .to start_with('application/json') - expect(response.parsed_body[:content]).to match(/Hello world/) + expect(response.parsed_body[:content]).to include('Hello world') expect(response.parsed_body[:local_only]).to be true end end @@ -492,7 +492,7 @@ RSpec.describe '/api/v1/statuses' do expect(response).to have_http_status(200) expect(response.content_type) .to start_with('application/json') - expect(response.parsed_body[:content]).to match(/Hello world/) + expect(response.parsed_body[:content]).to include('Hello world') expect(response.parsed_body[:local_only]).to be false end end @@ -506,7 +506,7 @@ RSpec.describe '/api/v1/statuses' do expect(response).to have_http_status(200) expect(response.content_type) .to start_with('application/json') - expect(response.parsed_body[:content]).to match(/Hello world/) + expect(response.parsed_body[:content]).to include('Hello world') expect(response.parsed_body[:local_only]).to be false end end @@ -521,7 +521,7 @@ RSpec.describe '/api/v1/statuses' do expect(response).to have_http_status(200) expect(response.content_type) .to start_with('application/json') - expect(response.parsed_body[:content]).to match(/Hello world/) + expect(response.parsed_body[:content]).to include('Hello world') expect(response.parsed_body[:local_only]).to be true end end