From b44aa94853de77cf770805480f1afbb1c3461d7f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 May 2026 09:28:46 +0200 Subject: [PATCH 001/132] Update dependency playwright-ruby-client to v1.59.1 (#38848) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index f5d72aed1b1b43..dcf40eb9eb349f 100644 --- a/Gemfile +++ b/Gemfile @@ -134,7 +134,7 @@ group :test do # Browser integration testing gem 'capybara', '~> 3.39' gem 'capybara-playwright-driver' - gem 'playwright-ruby-client', '1.59.0', require: false # Pinning the exact version as it needs to be kept in sync with the installed npm package + gem 'playwright-ruby-client', '1.59.1', require: false # Pinning the exact version as it needs to be kept in sync with the installed npm package # Used to reset the database between system tests gem 'database_cleaner-active_record' diff --git a/Gemfile.lock b/Gemfile.lock index 57879896e964e8..8a9d40fdf4facd 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -599,7 +599,7 @@ GEM pg (1.6.3) pghero (3.8.0) activerecord (>= 7.2) - playwright-ruby-client (1.59.0) + playwright-ruby-client (1.59.1) base64 concurrent-ruby (>= 1.1.6) mime-types (>= 3.0) @@ -1040,7 +1040,7 @@ DEPENDENCIES parslet pg (~> 1.5) pghero - playwright-ruby-client (= 1.59.0) + playwright-ruby-client (= 1.59.1) premailer-rails prometheus_exporter (~> 2.2) propshaft From ea52f763141808609dbc7874acf4ea7154b641e3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 May 2026 09:28:52 +0200 Subject: [PATCH 002/132] Update opentelemetry-ruby (non-major) (#38834) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile | 4 ++-- Gemfile.lock | 22 +++++++++++----------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Gemfile b/Gemfile index dcf40eb9eb349f..9fc75ee37d007f 100644 --- a/Gemfile +++ b/Gemfile @@ -105,7 +105,7 @@ gem 'opentelemetry-api', '~> 1.9.0' group :opentelemetry do gem 'opentelemetry-exporter-otlp', '~> 0.33.0', require: false - gem 'opentelemetry-instrumentation-active_job', '~> 0.11.0', require: false + gem 'opentelemetry-instrumentation-active_job', '~> 0.12.0', require: false gem 'opentelemetry-instrumentation-active_model_serializers', '~> 0.25.0', require: false gem 'opentelemetry-instrumentation-concurrent_ruby', '~> 0.25.0', require: false gem 'opentelemetry-instrumentation-excon', '~> 0.29.0', require: false @@ -115,7 +115,7 @@ group :opentelemetry do gem 'opentelemetry-instrumentation-net_http', '~> 0.29.0', require: false gem 'opentelemetry-instrumentation-pg', '~> 0.36.0', require: false gem 'opentelemetry-instrumentation-rack', '~> 0.31.0', require: false - gem 'opentelemetry-instrumentation-rails', '~> 0.41.0', require: false + gem 'opentelemetry-instrumentation-rails', '~> 0.42.0', require: false gem 'opentelemetry-instrumentation-redis', '~> 0.29.0', require: false gem 'opentelemetry-instrumentation-sidekiq', '~> 0.29.0', require: false gem 'opentelemetry-sdk', '~> 1.4', require: false diff --git a/Gemfile.lock b/Gemfile.lock index 8a9d40fdf4facd..67203c6b0461e5 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -524,21 +524,21 @@ GEM opentelemetry-helpers-sql-processor (0.5.0) opentelemetry-api (~> 1.0) opentelemetry-common (~> 0.21) - opentelemetry-instrumentation-action_mailer (0.7.0) + opentelemetry-instrumentation-action_mailer (0.8.0) opentelemetry-instrumentation-active_support (~> 0.10) - opentelemetry-instrumentation-action_pack (0.17.0) + opentelemetry-instrumentation-action_pack (0.18.0) opentelemetry-instrumentation-rack (~> 0.29) - opentelemetry-instrumentation-action_view (0.12.0) + opentelemetry-instrumentation-action_view (0.13.0) opentelemetry-instrumentation-active_support (~> 0.10) - opentelemetry-instrumentation-active_job (0.11.0) + opentelemetry-instrumentation-active_job (0.12.0) opentelemetry-instrumentation-base (~> 0.25) opentelemetry-instrumentation-active_model_serializers (0.25.0) opentelemetry-instrumentation-active_support (>= 0.7.0) - opentelemetry-instrumentation-active_record (0.12.0) + opentelemetry-instrumentation-active_record (0.13.0) opentelemetry-instrumentation-base (~> 0.25) - opentelemetry-instrumentation-active_storage (0.4.0) + opentelemetry-instrumentation-active_storage (0.5.0) opentelemetry-instrumentation-active_support (~> 0.10) - opentelemetry-instrumentation-active_support (0.11.0) + opentelemetry-instrumentation-active_support (0.12.0) opentelemetry-instrumentation-base (~> 0.25) opentelemetry-instrumentation-base (0.26.0) opentelemetry-api (~> 1.7) @@ -546,7 +546,7 @@ GEM opentelemetry-registry (~> 0.1) opentelemetry-instrumentation-concurrent_ruby (0.25.0) opentelemetry-instrumentation-base (~> 0.25) - opentelemetry-instrumentation-excon (0.29.0) + opentelemetry-instrumentation-excon (0.29.1) opentelemetry-instrumentation-base (~> 0.25) opentelemetry-instrumentation-faraday (0.33.0) opentelemetry-instrumentation-base (~> 0.25) @@ -562,7 +562,7 @@ GEM opentelemetry-instrumentation-base (~> 0.25) opentelemetry-instrumentation-rack (0.31.0) opentelemetry-instrumentation-base (~> 0.25) - opentelemetry-instrumentation-rails (0.41.0) + opentelemetry-instrumentation-rails (0.42.0) opentelemetry-instrumentation-action_mailer (~> 0.7) opentelemetry-instrumentation-action_pack (~> 0.17) opentelemetry-instrumentation-action_view (~> 0.12) @@ -1022,7 +1022,7 @@ DEPENDENCIES omniauth_openid_connect (~> 0.8.0) opentelemetry-api (~> 1.9.0) opentelemetry-exporter-otlp (~> 0.33.0) - opentelemetry-instrumentation-active_job (~> 0.11.0) + opentelemetry-instrumentation-active_job (~> 0.12.0) opentelemetry-instrumentation-active_model_serializers (~> 0.25.0) opentelemetry-instrumentation-concurrent_ruby (~> 0.25.0) opentelemetry-instrumentation-excon (~> 0.29.0) @@ -1032,7 +1032,7 @@ DEPENDENCIES opentelemetry-instrumentation-net_http (~> 0.29.0) opentelemetry-instrumentation-pg (~> 0.36.0) opentelemetry-instrumentation-rack (~> 0.31.0) - opentelemetry-instrumentation-rails (~> 0.41.0) + opentelemetry-instrumentation-rails (~> 0.42.0) opentelemetry-instrumentation-redis (~> 0.29.0) opentelemetry-instrumentation-sidekiq (~> 0.29.0) opentelemetry-sdk (~> 1.4) From aa6baf15aa99bdb9ea893db50d9c587682a16f2e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 May 2026 09:28:56 +0200 Subject: [PATCH 003/132] Update dependency jsdom to v29.1.1 (#38816) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 93 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 51 insertions(+), 42 deletions(-) diff --git a/yarn.lock b/yarn.lock index 3da9b034d3f726..36bade8999ec7f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -39,27 +39,36 @@ __metadata: languageName: node linkType: hard -"@asamuzakjp/css-color@npm:^5.1.5": - version: 5.1.6 - resolution: "@asamuzakjp/css-color@npm:5.1.6" +"@asamuzakjp/css-color@npm:^5.1.11": + version: 5.1.11 + resolution: "@asamuzakjp/css-color@npm:5.1.11" dependencies: - "@csstools/css-calc": "npm:^3.1.1" - "@csstools/css-color-parser": "npm:^4.0.2" + "@asamuzakjp/generational-cache": "npm:^1.0.1" + "@csstools/css-calc": "npm:^3.2.0" + "@csstools/css-color-parser": "npm:^4.1.0" "@csstools/css-parser-algorithms": "npm:^4.0.0" "@csstools/css-tokenizer": "npm:^4.0.0" - checksum: 10c0/8f8bf78df9dd91b5cb296f64308ab1148a17f644d3f5bed2b4000bd2f53eb4f8c914e2e91134b67fcb2843718fe73e975b906a14fca81ee24fb8b2f974677311 + checksum: 10c0/32720bdff8daea6a8847aba6cdfae55baa3b4a2690b51d21db7f0382bbd183f3d9f2d5126df50afd889062635684b2819e47113629ee2e80c99389e75f48d060 languageName: node linkType: hard -"@asamuzakjp/dom-selector@npm:^7.0.6": - version: 7.0.7 - resolution: "@asamuzakjp/dom-selector@npm:7.0.7" +"@asamuzakjp/dom-selector@npm:^7.1.1": + version: 7.1.1 + resolution: "@asamuzakjp/dom-selector@npm:7.1.1" dependencies: + "@asamuzakjp/generational-cache": "npm:^1.0.1" "@asamuzakjp/nwsapi": "npm:^2.3.9" bidi-js: "npm:^1.0.3" css-tree: "npm:^3.2.1" is-potential-custom-element-name: "npm:^1.0.1" - checksum: 10c0/f3e7de930c9cf69778db62dc166962bfbafdf6b35be9c905d6ab957f4c06bfdc9a72124a58bf5460e0112179bb883a45df06ded3a203bd232fb3ae372f35f5a5 + checksum: 10c0/8cec1c618781c94de5836a215bbe5aafb4d8b835b18c51faf8547f4574afa39f92def3951e40123860062467613dd825f1e1600ff32e8045cc099a91796dcfb8 + languageName: node + linkType: hard + +"@asamuzakjp/generational-cache@npm:^1.0.1": + version: 1.0.1 + resolution: "@asamuzakjp/generational-cache@npm:1.0.1" + checksum: 10c0/1de62de43764e13fca3b9a31b7ea9b1bf0780fe053d266e40378a19ff8c66b543e011e6a0df02d410cd59bf981126706f176cdbb938985165202c4a079fe1057 languageName: node linkType: hard @@ -1241,7 +1250,7 @@ __metadata: languageName: node linkType: hard -"@csstools/css-calc@npm:^3.1.1, @csstools/css-calc@npm:^3.2.0": +"@csstools/css-calc@npm:^3.2.0": version: 3.2.0 resolution: "@csstools/css-calc@npm:3.2.0" peerDependencies: @@ -1251,7 +1260,7 @@ __metadata: languageName: node linkType: hard -"@csstools/css-color-parser@npm:^4.0.2, @csstools/css-color-parser@npm:^4.1.0": +"@csstools/css-color-parser@npm:^4.1.0": version: 4.1.0 resolution: "@csstools/css-color-parser@npm:4.1.0" dependencies: @@ -1273,15 +1282,15 @@ __metadata: languageName: node linkType: hard -"@csstools/css-syntax-patches-for-csstree@npm:^1.0.25, @csstools/css-syntax-patches-for-csstree@npm:^1.1.1": - version: 1.1.1 - resolution: "@csstools/css-syntax-patches-for-csstree@npm:1.1.1" +"@csstools/css-syntax-patches-for-csstree@npm:^1.0.25, @csstools/css-syntax-patches-for-csstree@npm:^1.1.3": + version: 1.1.3 + resolution: "@csstools/css-syntax-patches-for-csstree@npm:1.1.3" peerDependencies: css-tree: ^3.2.1 peerDependenciesMeta: css-tree: optional: true - checksum: 10c0/947f82e9e8af0512f1d6600f68da1bbe8d15112fa73435169608a68dcf20262ae517c799202c86a6c3bc889d0e9fab724ad5661a3aa98432390f8f9765b86ddc + checksum: 10c0/3b8a686710a46bb460f9d560d52ce0de315828e6d452002b692013e95fbf53669d7a71e28c9b6b1333fa9f37f058fad93e5db3b8516444907713cb9aad299ce1 languageName: node linkType: hard @@ -7059,10 +7068,10 @@ __metadata: languageName: node linkType: hard -"entities@npm:^6.0.0": - version: 6.0.1 - resolution: "entities@npm:6.0.1" - checksum: 10c0/ed836ddac5acb34341094eb495185d527bd70e8632b6c0d59548cbfa23defdbae70b96f9a405c82904efa421230b5b3fd2283752447d737beffd3f3e6ee74414 +"entities@npm:^8.0.0": + version: 8.0.0 + resolution: "entities@npm:8.0.0" + checksum: 10c0/938e631664c19451823344a351aeeafd74fae2d5fa51e4d5b6ff635afaefd4bacf0f609989888c04c42733f46ffdac15211608267ebb02488005891a4793e94d languageName: node linkType: hard @@ -9377,25 +9386,25 @@ __metadata: linkType: hard "jsdom@npm:^29.0.0": - version: 29.0.2 - resolution: "jsdom@npm:29.0.2" + version: 29.1.1 + resolution: "jsdom@npm:29.1.1" dependencies: - "@asamuzakjp/css-color": "npm:^5.1.5" - "@asamuzakjp/dom-selector": "npm:^7.0.6" + "@asamuzakjp/css-color": "npm:^5.1.11" + "@asamuzakjp/dom-selector": "npm:^7.1.1" "@bramus/specificity": "npm:^2.4.2" - "@csstools/css-syntax-patches-for-csstree": "npm:^1.1.1" + "@csstools/css-syntax-patches-for-csstree": "npm:^1.1.3" "@exodus/bytes": "npm:^1.15.0" css-tree: "npm:^3.2.1" data-urls: "npm:^7.0.0" decimal.js: "npm:^10.6.0" html-encoding-sniffer: "npm:^6.0.0" is-potential-custom-element-name: "npm:^1.0.1" - lru-cache: "npm:^11.2.7" - parse5: "npm:^8.0.0" + lru-cache: "npm:^11.3.5" + parse5: "npm:^8.0.1" saxes: "npm:^6.0.0" symbol-tree: "npm:^3.2.4" tough-cookie: "npm:^6.0.1" - undici: "npm:^7.24.5" + undici: "npm:^7.25.0" w3c-xmlserializer: "npm:^5.0.0" webidl-conversions: "npm:^8.0.1" whatwg-mimetype: "npm:^5.0.0" @@ -9406,7 +9415,7 @@ __metadata: peerDependenciesMeta: canvas: optional: true - checksum: 10c0/a325324117932de83d13f00c74ff91a5f6b4bbbf11f45e7e31189fea06d007f764aac286dad80f643430c81b618b9fb20eac1ef03f120cec4c68df271e7547e2 + checksum: 10c0/20e2174b09d9d06393cb48e1392b7a1cb7191d6656a6f7b3b8fbf9853b4ab0ef60b4a42c2c55f71b55ca5da50ffa75bcdc6986210963182e7993c6f9cd4f499b languageName: node linkType: hard @@ -9919,10 +9928,10 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^11.0.0, lru-cache@npm:^11.2.7": - version: 11.2.7 - resolution: "lru-cache@npm:11.2.7" - checksum: 10c0/549cdb59488baa617135fc12159cafb1a97f91079f35093bb3bcad72e849fc64ace636d244212c181dfdf1a99bbfa90757ff303f98561958ee4d0f885d9bd5f7 +"lru-cache@npm:^11.0.0, lru-cache@npm:^11.3.5": + version: 11.3.5 + resolution: "lru-cache@npm:11.3.5" + checksum: 10c0/5b54ef7b88afb4bd25b7a778f1b2b1cde32d9770913e530da34ab203cf0442413bcaa6e372800cbab9562557a4480e4d8bf32e3a368bb5a91b12218eca085c66 languageName: node linkType: hard @@ -10905,12 +10914,12 @@ __metadata: languageName: node linkType: hard -"parse5@npm:^8.0.0": - version: 8.0.0 - resolution: "parse5@npm:8.0.0" +"parse5@npm:^8.0.1": + version: 8.0.1 + resolution: "parse5@npm:8.0.1" dependencies: - entities: "npm:^6.0.0" - checksum: 10c0/8279892dcd77b2f2229707f60eb039e303adf0288812b2a8fd5acf506a4d432da833c6c5d07a6554bef722c2367a81ef4a1f7e9336564379a7dba3e798bf16b3 + entities: "npm:^8.0.0" + checksum: 10c0/c3c1c5aab55f6e4be5245599790e56e64be7764a4a0edd7f98db4fe3bb380f63add752fa047dff0496446c25f4104f0c7c1967723de640bde92306a7bb67ed2f languageName: node linkType: hard @@ -14378,10 +14387,10 @@ __metadata: languageName: node linkType: hard -"undici@npm:^7.24.5": - version: 7.24.5 - resolution: "undici@npm:7.24.5" - checksum: 10c0/2a836f1f6ab078fde3eeb4cc8fd5b34eeaf52cfbdf16a9bab61b7223f43f7847bcd2125d1da7c4e3f5996c528bf9f7940015d39909bab80cfbd71b855470cf21 +"undici@npm:^7.25.0": + version: 7.25.0 + resolution: "undici@npm:7.25.0" + checksum: 10c0/02a0b45dc14eb91bc488948750232450fe52f27a6b08086d6ac6736bb47908d600fe3a96d346f12eab24729c782e5c2f693bc8e8eca6696d4e4c09b1ed4cb4ec languageName: node linkType: hard From e4b8bbe6e8ef72c5da21f76c33e2f12eb17abc19 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 4 May 2026 09:49:54 +0200 Subject: [PATCH 004/132] New Crowdin Translations (automated) (#38875) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/be.json | 12 +- app/javascript/mastodon/locales/da.json | 2 +- app/javascript/mastodon/locales/de.json | 2 +- app/javascript/mastodon/locales/el.json | 21 +- app/javascript/mastodon/locales/en-GB.json | 1 - app/javascript/mastodon/locales/es-AR.json | 9 +- app/javascript/mastodon/locales/es-MX.json | 9 +- app/javascript/mastodon/locales/es.json | 17 +- app/javascript/mastodon/locales/et.json | 9 +- app/javascript/mastodon/locales/fa.json | 296 +++++++++++++++++++- app/javascript/mastodon/locales/fi.json | 9 +- app/javascript/mastodon/locales/fr-CA.json | 9 +- app/javascript/mastodon/locales/fr.json | 9 +- app/javascript/mastodon/locales/ga.json | 9 +- app/javascript/mastodon/locales/gd.json | 58 ++++ app/javascript/mastodon/locales/gl.json | 9 +- app/javascript/mastodon/locales/he.json | 2 +- app/javascript/mastodon/locales/hu.json | 8 +- app/javascript/mastodon/locales/is.json | 2 +- app/javascript/mastodon/locales/it.json | 2 +- app/javascript/mastodon/locales/ko.json | 2 +- app/javascript/mastodon/locales/nan-TW.json | 26 +- app/javascript/mastodon/locales/nl.json | 1 - app/javascript/mastodon/locales/pt-BR.json | 17 +- app/javascript/mastodon/locales/pt-PT.json | 1 - app/javascript/mastodon/locales/sq.json | 9 +- app/javascript/mastodon/locales/sv.json | 1 - app/javascript/mastodon/locales/tr.json | 1 - app/javascript/mastodon/locales/vi.json | 19 +- app/javascript/mastodon/locales/zh-CN.json | 2 +- app/javascript/mastodon/locales/zh-TW.json | 12 +- config/locales/be.yml | 23 ++ config/locales/de.yml | 2 +- config/locales/doorkeeper.bg.yml | 16 +- config/locales/el.yml | 2 + config/locales/es-MX.yml | 21 ++ config/locales/es.yml | 21 ++ config/locales/et.yml | 9 + config/locales/fa.yml | 22 +- config/locales/fr-CA.yml | 2 + config/locales/fr.yml | 6 +- config/locales/ga.yml | 2 + config/locales/gd.yml | 23 ++ config/locales/nan-TW.yml | 2 +- config/locales/pt-BR.yml | 21 ++ config/locales/simple_form.be.yml | 2 +- config/locales/simple_form.fa.yml | 1 + config/locales/simple_form.fr.yml | 4 +- config/locales/simple_form.gd.yml | 9 + config/locales/simple_form.vi.yml | 8 +- config/locales/sq.yml | 2 + config/locales/zh-TW.yml | 15 + 52 files changed, 731 insertions(+), 68 deletions(-) diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json index e0c3b8792b5ae5..ddc53d31f0dabf 100644 --- a/app/javascript/mastodon/locales/be.json +++ b/app/javascript/mastodon/locales/be.json @@ -113,7 +113,7 @@ "account.name.copy": "Скапір. ідэнтыфікатар", "account.name.help.domain": "{domain} — сервер, які ўтрымлівае профіль і допісы гэтага карыстальніка.", "account.name.help.domain_self": "{domain} — Ваш сервер, які ўтрымлівае Ваш профіль і допісы.", - "account.name.help.footer": "Гэтак жа, як Вы можаце дасылаць электронныя лісты людзям, у якіх паштовыя скрыні ад іншых правайдараў, Вы можаце ўзаемадзейнічаць з людзьмі з іншых сервераў Mastodon і з усімі, хто карыстаецца сацыяльнымі платформамі, сумяшчальнымі з Mastodon.", + "account.name.help.footer": "Гэтак жа, як Вы можаце дасылаць электронныя лісты людзям, у якіх паштовыя скрыні ад іншых правайдараў, Вы можаце ўзаемадзейнічаць з людзьмі з іншых сервераў Mastodon і з усімі, хто карыстаецца іншымі праграмамі Федэральнага сусвету.", "account.name.help.header": "Ідэнтыфікатар карыстальніка падобны да адраса электроннай пошты", "account.name.help.username": "{username} — імя карыстальніка гэтага ўліковага запісу на гэтым серверы. У некага на іншым серверы яно можа быць такім жа.", "account.name.help.username_self": "{username} — Вашае імя карыстальніка на гэтым серверы. У некага на іншым серверы яно можа быць такім жа.", @@ -128,6 +128,7 @@ "account.note.edit_button": "Змяніць", "account.note.title": "Асабістая нататка (бачная толькі Вам)", "account.open_original_page": "Адкрыць арыгінальную старонку", + "account.pending": "Чакаецца", "account.posts": "Допісы", "account.remove_from_followers": "Выдаліць {name} з падпісчыкаў", "account.report": "Паскардзіцца на @{name}", @@ -223,6 +224,10 @@ "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.description": "Паказвае іншым карыстальнікам у Вашым профілі Вашых падпісчыкаў і ўліковыя запісы, на якія Вы падпісаныя. Людзям, на якіх Вы падпісаныя, яны будуць бачныя заўсёды.", + "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": "Гатова", @@ -250,6 +255,7 @@ "account_edit_tags.search_placeholder": "Увядзіце хэштэг…", "account_edit_tags.suggestions": "Прапановы:", "account_edit_tags.tag_status_count": "{count, plural, one {допіс} few {допісы} many {допісаў} other {допісаў}}", + "account_list.hidden_notice": "Гэта бачыце толькі Вы. Каб паказаць гэты спіс іншым, перайдзіце ў {page} > {modal} > {field}.", "account_list.total": "{total, plural,one {# уліковы запіс} few{# уліковыя запісы} other {# уліковых запісаў}}", "account_note.placeholder": "Націсніце, каб дадаць нататку", "admin.dashboard.daily_retention": "Штодзённы паказчык утрымання карыстальнікаў пасля рэгістрацыі", @@ -392,6 +398,7 @@ "collections.detail.share": "Падзяліцца гэтай калекцыяй", "collections.detail.you_are_in_this_collection": "Вас уключылі ў гэтую калекцыю", "collections.edit_details": "Рэдагаваць падрабязнасці", + "collections.error_loading_collections": "Адбылася памылка падчас загрузкі гэтых калекцый.", "collections.hidden_accounts_description": "Вы заблакіравалі або ігнаруеце {count, plural, one {гэтага карыстальніка} other {гэтых карыстальнікаў}}", "collections.hidden_accounts_link": "{count, plural, one {# схаваны ўліковы запіс} few {# схаваныя ўліковыя запісы} other {# схаваных уліковых запісаў}}", "collections.hints.accounts_counter": "{count}/{max} уліковых запісаў", @@ -407,6 +414,8 @@ "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": "Прыбраць сябе з гэтай калекцыі", @@ -639,6 +648,7 @@ "empty_column.account_unavailable": "Профіль недаступны", "empty_column.blocks": "Вы яшчэ нікога не заблакіравалі.", "empty_column.bookmarked_statuses": "У Вашых закладках яшчэ няма допісаў. Калі Вы дадасце закладку, яна з’явіцца тут.", + "empty_column.collections.featured_in": "Вас пакуль не дадалі ў ніякія калекцыі.", "empty_column.community": "Мясцовая стужка пустая. Напішыце нешта публічнае, каб разварушыць справу!", "empty_column.direct": "Пакуль у Вас няма асабістых згадванняў. Калі Вы дашляце або атрымаеце штосьці, яно з’явіцца тут.", "empty_column.disabled_feed": "Гэта стужка была адключаная Вашымі адміністратарамі сервера.", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index f4e69924c59918..f005c6095b20c9 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -113,7 +113,7 @@ "account.name.copy": "Kopiér handle", "account.name.help.domain": "{domain} er den server, der er vært for brugerens profil og indlæg.", "account.name.help.domain_self": "{domain} er din server, der er vært for din profil og indlæg.", - "account.name.help.footer": "Ligesom du kan sende e-mails til folk, der bruger forskellige e-mailudbydere, kan du kommunikere med folk på andre Mastodon-servere og med enhver, der bruger andre Mastodon-kompatible sociale apps.", + "account.name.help.footer": "Ligesom du kan sende e-mails til folk, der bruger forskellige e-mailudbydere, kan du interagere med folk på andre Mastodon-servere og med alle, der bruger andre Fediverse-apps.", "account.name.help.header": "Et handle svarer til en e-mailadresse", "account.name.help.username": "{username} er denne kontos brugernavn på deres server. En konto på en anden server kan have det samme brugernavn.", "account.name.help.username_self": "{username} er dit brugernavn på denne server. En konto på en anden server kan have det samme brugernavn.", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 77fbc6dd05ffd5..f8b0256347dd01 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -113,7 +113,7 @@ "account.name.copy": "Adresse kopieren", "account.name.help.domain": "{domain} ist der Server, auf dem das Profil registriert ist und die Beiträge verwaltet werden.", "account.name.help.domain_self": "{domain} ist der Server, auf dem du registriert bist und deine Beiträge verwaltet werden.", - "account.name.help.footer": "So wie du E-Mails an andere trotz unterschiedlicher E-Mail-Provider senden kannst, so kannst du auch mit anderen Profilen auf unterschiedlichen Mastodon-Servern interagieren. Wenn andere soziale Apps mit Mastodon kompatibel sind, dann funktioniert die Kommunikation auch dort.", + "account.name.help.footer": "So wie du E-Mails an andere trotz unterschiedlicher E-Mail-Provider senden kannst, so kannst du auch mit anderen Profilen auf unterschiedlichen Mastodon-Servern interagieren – das funktioniert auch bei allen Fediverse-Apps!", "account.name.help.header": "Deine Adresse im Fediverse ist wie eine E-Mail-Adresse", "account.name.help.username": "{username} ist der Profilname auf deren Server. Es ist möglich, dass jemand auf einem anderen Server den gleichen Profilnamen hat.", "account.name.help.username_self": "{username} ist dein Profilname auf diesem Server. Es ist möglich, dass jemand auf einem anderen Server den gleichen Profilnamen hat.", diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 60c1a17c45eaf2..23d5ba3b7ef3c0 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -113,7 +113,7 @@ "account.name.copy": "Αντιγραφή πλήρους ονόματος χρήστη", "account.name.help.domain": "Το {domain} είναι ο διακομιστής που φιλοξενεί το προφίλ και τις αναρτήσεις του χρήστη.", "account.name.help.domain_self": "Το {domain} είναι ο διακομιστής σας που φιλοξενεί το προφίλ και τις αναρτήσεις σας.", - "account.name.help.footer": "Ακριβώς όπως μπορείς να στείλεις email σε κόσμο χρησιμοποιώντας διαφορετικούς παρόχους ηλεκτρονικού ταχυδρομείου, μπορείς να αλληλεπιδράσεις με άτομα σε άλλους διακομιστές Mastodon, και με οποιονδήποτε σε άλλες κοινωνικές εφαρμογές συμβατές με Mastodon.", + "account.name.help.footer": "Ακριβώς όπως μπορείς να στείλεις email σε κόσμο χρησιμοποιώντας διαφορετικούς παρόχους ηλεκτρονικού ταχυδρομείου, μπορείς να αλληλεπιδράσεις με άτομα σε άλλους διακομιστές Mastodon, και με οποιονδήποτε σε άλλες εφαρμογές του Fediverse.", "account.name.help.header": "Ένα πλήρες όνομα χρήστη είναι σαν μια διεύθυνση email", "account.name.help.username": "Το {username} είναι το όνομα χρήστη αυτού του λογαριασμού στο διακομιστή τους. Κάποιος σε άλλο διακομιστή μπορεί να έχει το ίδιο όνομα χρήστη.", "account.name.help.username_self": "Το {username} είναι το όνομα χρήστη σας σε αυτόν το διακομιστή. Κάποιος σε άλλο διακομιστή μπορεί να έχει το ίδιο όνομα χρήστη.", @@ -224,6 +224,10 @@ "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.description": "Εμφανίζει τους λογαριασμούς που ακολουθείτε και τους ακολούθους σας σε άλλους χρήστες στο προφίλ σας. Ο κόσμος θα είναι ακόμα σε θέση να δει αν τους ακολουθείτε.", + "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": "Έγινε", @@ -251,6 +255,7 @@ "account_edit_tags.search_placeholder": "Εισάγετε μια ετικέτα…", "account_edit_tags.suggestions": "Προτάσεις:", "account_edit_tags.tag_status_count": "{count, plural, one {# ανάρτηση} other {# αναρτήσεις}}", + "account_list.hidden_notice": "Αυτό είναι ορατό μόνο σε εσάς. Για να εμφανίσετε αυτή τη λίστα σε άλλους, πηγαίνετε στο {page} > {modal} > {field}.", "account_list.total": "{total, plural, one {# λογαριασμός} other {# λογαριασμοί}}", "account_note.placeholder": "Κάνε κλικ για να προσθέσεις σημείωση", "admin.dashboard.daily_retention": "Ποσοστό χρηστών που παραμένουν μετά την εγγραφή, ανά ημέρα", @@ -393,6 +398,7 @@ "collections.detail.share": "Κοινοποιήστε αυτήν τη συλλογή", "collections.detail.you_are_in_this_collection": "Είστε αναδεδειγμένοι σε αυτήν τη συλλογή", "collections.edit_details": "Επεξεργασία λεπτομερειών", + "collections.error_loading_collections": "Παρουσιάστηκε σφάλμα κατά την προσπάθεια φόρτωσης αυτών των συλλογών.", "collections.hidden_accounts_description": "Έχετε αποκλείσει ή κάνει σίγαση {count, plural, one {αυτόν τον χρήστη} other {αυτούς τους χρήστες}}", "collections.hidden_accounts_link": "{count, plural, one {# κρυμμένος λογαριασμός} other {# κρυμμένοι λογαριασμοί}}", "collections.hints.accounts_counter": "{count}/{max} λογαριασμοί", @@ -579,7 +585,7 @@ "disabled_account_banner.text": "Ο λογαριασμός σου {disabledAccount} είναι προς το παρόν απενεργοποιημένος.", "dismissable_banner.community_timeline": "Αυτές είναι οι πιο πρόσφατες δημόσιες αναρτήσεις ατόμων των οποίων οι λογαριασμοί φιλοξενούνται στο {domain}.", "dismissable_banner.dismiss": "Παράβλεψη", - "dismissable_banner.public_timeline": "Αυτές είναι οι πιο πρόσφατες δημόσιες αναρτήσεις από άτομα στο fediverse που ακολουθούν άτομα από το {domain}.", + "dismissable_banner.public_timeline": "Αυτές είναι οι πιο πρόσφατες δημόσιες αναρτήσεις από άτομα στο fediverse που ακολουθούνται από άτομα του {domain}.", "domain_block_modal.block": "Αποκλεισμός διακομιστή", "domain_block_modal.block_account_instead": "Αποκλεισμός @{name} αντ' αυτού", "domain_block_modal.they_can_interact_with_old_posts": "Άτομα από αυτόν τον διακομιστή μπορούν να αλληλεπιδράσουν με τις παλιές αναρτήσεις σου.", @@ -642,6 +648,7 @@ "empty_column.account_unavailable": "Μη διαθέσιμο προφίλ", "empty_column.blocks": "Δεν έχεις αποκλείσει κανέναν χρήστη ακόμη.", "empty_column.bookmarked_statuses": "Δεν έχεις καμία ανάρτηση με σελιδοδείκτη ακόμη. Μόλις βάλεις κάποιον, θα εμφανιστεί εδώ.", + "empty_column.collections.featured_in": "Δεν έχετε προστεθεί ακόμη σε καμία συλλογή.", "empty_column.community": "Η τοπική ροή είναι κενή. Γράψε κάτι δημόσια για να αρχίσει να κυλά η μπάλα!", "empty_column.direct": "Δεν έχεις καμία ιδιωτική επισήμανση ακόμη. Όταν στείλεις ή λάβεις μία, θα εμφανιστεί εδώ.", "empty_column.disabled_feed": "Αυτή η ροή έχει απενεργοποιηθεί από τους διαχειριστές του διακομιστή σας.", @@ -852,13 +859,13 @@ "lists.add_to_list": "Προσθήκη στη λίστα", "lists.add_to_lists": "Προσθήκη {name} σε λίστες", "lists.create": "Δημιουργία", - "lists.create_a_list_to_organize": "Δημιούργησε μια νέα λίστα για να οργανώσεις την αρχική σου ροή", + "lists.create_a_list_to_organize": "Δημιούργησε μια νέα λίστα για να οργανώσεις την Αρχική σου ροή", "lists.create_list": "Δημιουργία λίστας", "lists.delete": "Διαγραφή λίστας", "lists.done": "Έγινε", "lists.edit": "Επεξεργασία λίστας", "lists.exclusive": "Απόκρυψη μελών από την Αρχική", - "lists.exclusive_hint": "Αν κάποιος είναι σε αυτή τη λίστα, απόκρυψέ τον στην Αρχική σου για να αποφύγεις να βλέπεις τις αναρτήσεις του δύο φορές.", + "lists.exclusive_hint": "Αν κάποιος είναι σε αυτή τη λίστα, απόκρυψέ τον από την Αρχική σου για να αποφύγεις να βλέπεις τις αναρτήσεις του δύο φορές.", "lists.find_users_to_add": "Εύρεση χρηστών για προσθήκη", "lists.list_members_count": "{count, plural, one {# μέλος} other {# μέλη}}", "lists.list_name": "Όνομα λίστας", @@ -867,12 +874,12 @@ "lists.no_members_yet": "Κανένα μέλος ακόμη.", "lists.no_results_found": "Δεν βρέθηκαν αποτελέσματα.", "lists.remove_member": "Αφαίρεση", - "lists.replies_policy.followed": "Οποιοσδήποτε χρήστης που ακολουθείς", + "lists.replies_policy.followed": "Οποιονδήποτε χρήστης που ακολουθείς", "lists.replies_policy.list": "Μέλη της λίστας", - "lists.replies_policy.none": "Κανένας", + "lists.replies_policy.none": "Κανέναν", "lists.save": "Αποθήκευση", "lists.search": "Αναζήτηση", - "lists.show_replies_to": "Συμπερίληψη απαντήσεων από τα μέλη της λίστας σε", + "lists.show_replies_to": "Συμπερίληψη απαντήσεων από τα μέλη της λίστας προς", "load_pending": "{count, plural, one {# νέο στοιχείο} other {# νέα στοιχεία}}", "loading_indicator.label": "Φόρτωση…", "media_gallery.hide": "Απόκρυψη", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index 366ba8a25e9b80..1a41eb4db7c406 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -113,7 +113,6 @@ "account.name.copy": "Copy handle", "account.name.help.domain": "{domain} is the server that hosts the user’s profile and posts.", "account.name.help.domain_self": "{domain} is your server that hosts your profile and posts.", - "account.name.help.footer": "Just like you can send emails to people using different email providers, you can interact with people on other Mastodon servers, and with anyone on other Mastodon-compatible social apps.", "account.name.help.header": "A handle is like an email address", "account.name.help.username": "{username} is this account’s username on their server. Someone on another server might have the same username.", "account.name.help.username_self": "{username} is your username on this server. Someone on another server might have the same username.", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index c80e61ae952a2d..9c6afef6d14148 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -113,7 +113,7 @@ "account.name.copy": "Copiar alias", "account.name.help.domain": "«{domain}» es el servidor que hospeda el perfil y los mensajes del usuario.", "account.name.help.domain_self": "«{domain}» es tu servidor que hospeda tu perfil y tus mensajes.", - "account.name.help.footer": "Al igual que podés enviar correos electrónicos a personas usando diferentes proveedores de correo electrónico, del mismo modo podés interactuar con personas en otros servidores de Mastodon y en otras redes sociales compatibles con Mastodon.", + "account.name.help.footer": "Al igual que podés enviar correos electrónicos a personas usando diferentes proveedores de correo electrónico, del mismo modo podés interactuar con personas en otros servidores de Mastodon y en otras redes sociales compatibles con el Fediverso.", "account.name.help.header": "Un alias es similar a una dirección de correo electrónico", "account.name.help.username": "«{username}» es el nombre de usuario de esta cuenta en su servidor. Alguien en otro servidor puede tener el mismo nombre de usuario.", "account.name.help.username_self": "«{username}» es tu nombre de usuario en este servidor. Alguien en otro servidor puede tener el mismo nombre de usuario.", @@ -224,6 +224,10 @@ "account_edit.profile_tab.show_media.title": "Mostrar pestaña «Medios»", "account_edit.profile_tab.show_media_replies.description": "Cuando está habilitada, la pestaña «Medios» muestra tanto tus mensajes como tus respuestas a otras cuentas.", "account_edit.profile_tab.show_media_replies.title": "Incluir respuestas en la pestaña «Medios»", + "account_edit.profile_tab.show_relations.description": "Muestra cuentas que seguís y seguidores de otros usuarios en tu perfil. Las otras cuentas siempre podrán saber si las seguís.", + "account_edit.profile_tab.show_relations.title": "Mostrar «Seguidores» y «Siguiendo»", + "account_edit.profile_tab.subtitle": "Personalizá cómo se muestra tu perfil.", + "account_edit.profile_tab.title": "Configuración de visualización de perfil", "account_edit.save": "Guardar", "account_edit.upload_modal.back": "Volver", "account_edit.upload_modal.done": "Listo", @@ -251,6 +255,7 @@ "account_edit_tags.search_placeholder": "Ingresá una etiqueta…", "account_edit_tags.suggestions": "Sugerencias:", "account_edit_tags.tag_status_count": "{count, plural, one {voto} other {votos}}", + "account_list.hidden_notice": "Esto solo es visible para vos. Para mostrar esta lista a otros usuarios, andá a {page} > {modal} > {field}.", "account_list.total": "{total, plural, one {# hora} other {# horas}}", "account_note.placeholder": "Hacé clic par agregar una nota", "admin.dashboard.daily_retention": "Tasa de retención de usuarios por día, después del registro", @@ -393,6 +398,7 @@ "collections.detail.share": "Compartir esta colección", "collections.detail.you_are_in_this_collection": "Te destacaron en esta colección", "collections.edit_details": "Editar detalles", + "collections.error_loading_collections": "Hubo un error al intentar cargar estas colecciones.", "collections.hidden_accounts_description": "Bloqueaste o silenciaste a {count, plural, one {este usuario} other {estos usuarios}}", "collections.hidden_accounts_link": "{count, plural, one {# cuenta oculta} other {# cuentas ocultas}}", "collections.hints.accounts_counter": "{count}/{max} cuentas", @@ -642,6 +648,7 @@ "empty_column.account_unavailable": "Perfil no disponible", "empty_column.blocks": "Todavía no bloqueaste a ningún usuario.", "empty_column.bookmarked_statuses": "Todavía no tenés mensajes guardados en \"Marcadores\". Cuando guardés uno en \"Marcadores\", se mostrará acá.", + "empty_column.collections.featured_in": "Todavía no te agregaron a ninguna colección.", "empty_column.community": "La línea temporal local está vacía. ¡Escribí algo en modo público para que se empiece a correr la bola!", "empty_column.direct": "Todavía no tenés ninguna mención privada. Cuando enviés o recibás una, se mostrará acá.", "empty_column.disabled_feed": "Esta línea temporal fue deshabilitada por los administradores de tu servidor.", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index 67d866a1c3e2ed..0a986a50f623df 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -113,7 +113,7 @@ "account.name.copy": "Copiar identificador", "account.name.help.domain": "{domain} es el servidor que aloja el perfil y las publicaciones del usuario.", "account.name.help.domain_self": "{domain} es el servidor que aloja tu perfil y tus publicaciones.", - "account.name.help.footer": "Al igual que puedes enviar correos electrónicos a personas que utilizan diferentes proveedores de correo electrónico, puedes interactuar con personas de otros servidores de Mastodon y con cualquier usuario de otras aplicaciones sociales compatibles con Mastodon.", + "account.name.help.footer": "Al igual que puedes enviar correos electrónicos a personas que utilizan diferentes proveedores de correo electrónico, puedes interactuar con personas de otros servidores de Mastodon y con cualquier usuario de otras aplicaciones del Fediverso.", "account.name.help.header": "Un identificador es como una dirección de correo electrónico", "account.name.help.username": "{username} es el nombre de usuario de esta cuenta en su servidor. Es posible que alguien en otro servidor tenga el mismo nombre de usuario.", "account.name.help.username_self": "{username} es tu nombre de usuario en este servidor. Es posible que alguien en otro servidor tenga el mismo nombre de usuario.", @@ -224,6 +224,10 @@ "account_edit.profile_tab.show_media.title": "Mostrar pestaña «Multimedia»", "account_edit.profile_tab.show_media_replies.description": "Cuando está habilitada, la pestaña Multimedia muestra tanto tus publicaciones como tus respuestas a las publicaciones de otras personas.", "account_edit.profile_tab.show_media_replies.title": "Incluir respuestas en la pestaña «Multimedia»", + "account_edit.profile_tab.show_relations.description": "Muestra en tu perfil las cuentas a las que sigues y los usuarios que te siguen. Las personas seguirán pudiendo ver si los sigues.", + "account_edit.profile_tab.show_relations.title": "Mostrar «Seguidores» y «Siguiendo»", + "account_edit.profile_tab.subtitle": "Personaliza la forma en que se muestra tu perfil.", + "account_edit.profile_tab.title": "Configuración de visualización del perfil", "account_edit.save": "Guardar", "account_edit.upload_modal.back": "Volver", "account_edit.upload_modal.done": "Hecho", @@ -251,6 +255,7 @@ "account_edit_tags.search_placeholder": "Introduce una etiqueta…", "account_edit_tags.suggestions": "Sugerencias:", "account_edit_tags.tag_status_count": "{count, plural,one {# publicación} other {# publicaciones}}", + "account_list.hidden_notice": "Esto solo lo puedes ver tú. Para mostrar esta lista a otras personas, ve a {page} > {modal} > {field}.", "account_list.total": "{total, plural,one {# cuenta} other {# cuentas}}", "account_note.placeholder": "Haz clic para añadir una nota", "admin.dashboard.daily_retention": "Tasa de retención de usuarios por día después de unirse", @@ -393,6 +398,7 @@ "collections.detail.share": "Compartir esta colección", "collections.detail.you_are_in_this_collection": "Apareces en esta colección", "collections.edit_details": "Editar detalles", + "collections.error_loading_collections": "Se ha producido un error al intentar cargar estas colecciones.", "collections.hidden_accounts_description": "Has bloqueado o silenciado {count, plural, one {a este usuario} other {a estos usuarios}}", "collections.hidden_accounts_link": "{count, plural, one {# cuenta oculta} other {# cuentas ocultas}}", "collections.hints.accounts_counter": "{count}/{max} cuentas", @@ -642,6 +648,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.featured_in": "Aún no te han añadido a ninguna colección.", "empty_column.community": "La cronología local está vacía. ¡Escribe algo públicamente para ponerla en marcha!", "empty_column.direct": "Aún no tienes ninguna mención privada. Cuando envíes o recibas una, aparecerá aquí.", "empty_column.disabled_feed": "Esta cronología fue desactivada por los administradores de tu servidor.", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index e58e6598ba3c06..f71bc11a209707 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -113,7 +113,7 @@ "account.name.copy": "Copiar alias", "account.name.help.domain": "{domain} es el servidor que alberga el perfil y las publicaciones del usuario.", "account.name.help.domain_self": "{domain} es tu servidor que aloja tu perfil y publicaciones.", - "account.name.help.footer": "De la misma manera que puedes enviar correos electrónicos a personas usando diferentes proveedores de correo electrónico, puedes interactuar con personas en otros servidores de Mastodon, y con cualquiera en otras aplicaciones sociales compatibles con Mastodon.", + "account.name.help.footer": "De la misma manera que puedes enviar correos electrónicos a personas usando diferentes proveedores de correo electrónico, puedes interactuar con personas en otros servidores de Mastodon, y con cualquiera en otras aplicaciones del Fediverso.", "account.name.help.header": "Un alias es como una dirección de correo electrónico", "account.name.help.username": "{username} es el nombre de usuario de esta cuenta en su servidor. Alguien en otro servidor puede tener el mismo nombre de usuario.", "account.name.help.username_self": "{username} es tu nombre de usuario en este servidor. Alguien en otro servidor puede tener el mismo nombre de usuario.", @@ -128,6 +128,7 @@ "account.note.edit_button": "Editar", "account.note.title": "Nota personal (visible solo para ti)", "account.open_original_page": "Abrir página original", + "account.pending": "Pendiente", "account.posts": "Publicaciones", "account.remove_from_followers": "Eliminar {name} de tus seguidores", "account.report": "Reportar a @{name}", @@ -223,6 +224,10 @@ "account_edit.profile_tab.show_media.title": "Mostrar pestaña «Multimedia»", "account_edit.profile_tab.show_media_replies.description": "Cuando está activado, la pestaña Multimedia muestra tanto tus publicaciones como tus respuestas a las publicaciones de otras personas.", "account_edit.profile_tab.show_media_replies.title": "Incluir respuestas en la pestaña «Multimedia»", + "account_edit.profile_tab.show_relations.description": "Muestra cuentas que sigues y que te siguen a otros usuarios en tu perfil. La gente siempre podrá ver si las sigues.", + "account_edit.profile_tab.show_relations.title": "Mostrar «Seguidores» y «Siguiendo»", + "account_edit.profile_tab.subtitle": "Personaliza cómo se muestra tu perfil.", + "account_edit.profile_tab.title": "Configuraciones de perfil", "account_edit.save": "Guardar", "account_edit.upload_modal.back": "Atrás", "account_edit.upload_modal.done": "Hecho", @@ -250,6 +255,7 @@ "account_edit_tags.search_placeholder": "Introduce una etiqueta…", "account_edit_tags.suggestions": "Sugerencias:", "account_edit_tags.tag_status_count": "{count, plural, one {# publicación} other {# publicaciones}}", + "account_list.hidden_notice": "Esto solo es visible para ti. Para mostrar esta lista a otros, ve a {page} > {modal} > {field}.", "account_list.total": "{total, plural, one {# cuenta} other {# cuentas}}", "account_note.placeholder": "Haz clic para añadir nota", "admin.dashboard.daily_retention": "Tasa de retención de usuarios por día después del registro", @@ -392,10 +398,15 @@ "collections.detail.share": "Compartir esta colección", "collections.detail.you_are_in_this_collection": "Apareces en esta colección", "collections.edit_details": "Editar detalles", + "collections.error_loading_collections": "Se ha producido un error al intentar cargar estas colecciones.", "collections.hidden_accounts_description": "Has bloqueado o silenciado {count, plural,one {a este usuario}other {a estos usuarios}}", "collections.hidden_accounts_link": "{count, plural, one {# cuenta oculta} other {# cuentas ocultas}}", "collections.hints.accounts_counter": "{count}/{max} cuentas", "collections.last_updated_at": "Última actualización: {date}", + "collections.list.collections_with_count": "{count, plural, one {# Colección} other {# Colecciones}}", + "collections.list.created_by_author": "Creada por {name}", + "collections.list.created_by_you": "Creadas por ti", + "collections.list.featuring_you": "Apareces en ellas", "collections.manage_accounts": "Administrar cuentas", "collections.mark_as_sensitive": "Marcar como sensible", "collections.mark_as_sensitive_hint": "Oculta la descripción de la colección y las cuentas detrás de una advertencia de contenido. El nombre de la colección seguirá siendo visible.", @@ -403,6 +414,8 @@ "collections.maximum_collection_count_reached": "Has creado el número máximo de colecciones", "collections.name_length_hint": "Límite de 40 caracteres", "collections.new_collection": "Nueva colección", + "collections.pending_accounts.message": "Las cuentas pueden aparecer como pendientes mientras esperamos una respuesta del usuario o de su servidor. Solo tú puedes ver cuentas pendientes.", + "collections.pending_accounts.title": "¿Por qué veo cuentas pendientes?", "collections.remove_account": "Eliminar", "collections.report_collection": "Informar de esta colección", "collections.revoke_collection_inclusion": "Sácame de esta colección", @@ -448,6 +461,7 @@ "column.other_collections": "Colecciones de {name}", "column.pins": "Publicaciones fijadas", "column.public": "Cronología federada", + "column.your_collections": "Tus Colecciones", "column_back_button.label": "Atrás", "column_header.hide_settings": "Ocultar configuración", "column_header.moveLeft_settings": "Mover columna a la izquierda", @@ -634,6 +648,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.featured_in": "Aún no te han añadido a ninguna colección.", "empty_column.community": "La línea de tiempo local está vacía. ¡Escribe algo para empezar la fiesta!", "empty_column.direct": "Aún no tienes menciones privadas. Cuando envíes o recibas una, aparecerán aquí.", "empty_column.disabled_feed": "Esta cronología ha sido desactivada por los administradores del servidor.", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index 3ed32e176700b1..ac87e2de9c9621 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -113,7 +113,7 @@ "account.name.copy": "Kopeeri kasutajatunnus", "account.name.help.domain": "{domain} on server, kus antud konto koos profiiliga asub ning kust postitused saavad alguse.", "account.name.help.domain_self": "{domain} on server, kus sinu konto koos profiiliga asub ning kust sinu postitused saavad alguse.", - "account.name.help.footer": "Nii nagu saad saata e-kirju inimestele, kes kasutavad erinevaid e-posti teenusepakkujaid, saad suhelda ka teiste Mastodoni serverite kasutajatega ning kõigi teiste kasutajatega, kelle sotsiaalrakendused ühilduvad Mastodoniga.", + "account.name.help.footer": "Nii nagu saad saata e-kirju inimestele, kes kasutavad erinevaid e-posti teenusepakkujaid, saad suhelda ka teiste Mastodoni serverite kasutajatega ning kõigi teistega födiversumi rakendustest.", "account.name.help.header": "Kasutajatunnus on nagu e-posti aadress", "account.name.help.username": "{username} on selle konto kasutajanimi tema serveris. Kellelgi teisel mõnes muus serveris võib olla sama kasutajanimi.", "account.name.help.username_self": "{username} on sinu kasutajanimi selles serveris. Kellelgi teisel mõnes muus serveris võib olla sama kasutajanimi.", @@ -224,6 +224,10 @@ "account_edit.profile_tab.show_media.title": "Näita multimeedia vahekaarti", "account_edit.profile_tab.show_media_replies.description": "Sisselülitatuna näitab mediumi vahekaart, nii sinu postitusi kui su vastuseid teiste kasutajate postitustele.", "account_edit.profile_tab.show_media_replies.title": "Kaasa vahekaardile „Meedium“ ka vastused", + "account_edit.profile_tab.show_relations.description": "Näitab profiilis teistele kasutajatele kontosid, mida jälgid, ja su jälgijaid. Inimesed saavad endiselt näha, kas sa neid jälgid.", + "account_edit.profile_tab.show_relations.title": "Näita \"Jälgijad\" ja \"Jälgib\"", + "account_edit.profile_tab.subtitle": "Kohanda, kuidas su profiili näidatakse.", + "account_edit.profile_tab.title": "Profiili näitamise seaded", "account_edit.save": "Salvesta", "account_edit.upload_modal.back": "Tagasi", "account_edit.upload_modal.done": "Valmis", @@ -251,6 +255,7 @@ "account_edit_tags.search_placeholder": "Sisesta teemaviide…", "account_edit_tags.suggestions": "Soovitused:", "account_edit_tags.tag_status_count": "{count, plural, one {# postitus} other {# postitust}}", + "account_list.hidden_notice": "See on nähtav ainult sulle. Kui soovid seda loetelu teistele näidata, mine aadressile {page} > {modal} > {field}.", "account_list.total": "{total, plural, one {# konto} other {# kontot}}", "account_note.placeholder": "Klõpsa märke lisamiseks", "admin.dashboard.daily_retention": "Kasutajate päevane allesjäämine peale registreerumist", @@ -393,6 +398,7 @@ "collections.detail.share": "Jaga seda kogumikku", "collections.detail.you_are_in_this_collection": "Sa oled selles kogumikus esile tõstetud", "collections.edit_details": "Muuda üksikasju", + "collections.error_loading_collections": "Nende kogumike laadimisel juhtus viga.", "collections.hidden_accounts_description": "Oled blokeerinud või vaigistanud {count, plural, one {selle kasutaja} other {need kasutajad}}", "collections.hidden_accounts_link": "{count, plural, one {# peidetud konto} other {# peidetud kontot}}", "collections.hints.accounts_counter": "{count}/{max} kontot", @@ -642,6 +648,7 @@ "empty_column.account_unavailable": "Profiil pole saadaval", "empty_column.blocks": "Blokeeritud kasutajaid pole.", "empty_column.bookmarked_statuses": "Järjehoidjatesse pole veel lisatud postitusi. Kui lisad mõne, näed neid siin.", + "empty_column.collections.featured_in": "Sind pole lisatud veel ühtegi kogumikku.", "empty_column.community": "Kohalik ajajoon on tühi. Kirjuta midagi avalikult, et pall veerema ajada!", "empty_column.direct": "Sul pole veel ühtegi privaatset mainimist. Kui saadad või saad mõne, ilmuvad need siin.", "empty_column.disabled_feed": "See infovoog on serveri peakasutajate poolt välja lülitatud.", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index 389a78798dd796..4871297b04d0ea 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -14,9 +14,16 @@ "about.powered_by": "رسانهٔ اجتماعی نامتمرکز قدرت گرفته از {mastodon}", "about.rules": "قوانین کارساز", "account.account_note_header": "یادداشت شخصی", + "account.activity": "فعّالیت", + "account.add_note": "افزودن یادداشت شخصی", "account.add_or_remove_from_list": "افزودن یا برداشتن از سیاهه‌ها", + "account.badges.admin": "مدیر", + "account.badges.blocked": "مسدود", "account.badges.bot": "خودکار", + "account.badges.domain_blocked": "دامنهٔ مسدود", "account.badges.group": "گروه", + "account.badges.muted": "خموش", + "account.badges.muted_until": "خموش تا {until}", "account.block": "انسداد ‎@{name}", "account.block_domain": "انسداد دامنهٔ {domain}", "account.block_short": "انسداد", @@ -25,6 +32,7 @@ "account.copy": "رونوشت از پیوند به نمایه", "account.direct": "اشارهٔ خصوصی به ‪@{name}‬", "account.disable_notifications": "آگاه کردن من هنگام فرسته‌های ‎@{name} را متوقّف کن", + "account.edit_note": "ویرایش یادداشت شخصی", "account.edit_profile": "ویرایش نمایه", "account.edit_profile_short": "ویرایش", "account.enable_notifications": "هنگام فرسته‌های ‎@{name} مرا آگاه کن", @@ -34,6 +42,15 @@ "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": "نمایش تقویت‌ها", + "account.filters.posts_boosts": "فرسته‌ها و تقویت‌ها", + "account.filters.posts_only": "فرسته‌ها", + "account.filters.posts_replies": "فرسته‌ها و پاسخ‌ها", + "account.filters.replies_toggle": "نمایش پاسخ‌ها", "account.follow": "پی‌گرفتن", "account.follow_back": "پی‌گیری متقابل", "account.follow_back_short": "پی‌گیری متقابل", @@ -41,31 +58,77 @@ "account.follow_request_cancel": "لغو درخواست", "account.follow_request_cancel_short": "لغو", "account.follow_request_short": "درخواست", - "account.followers": "پی‌گیرندگان", + "account.followers": "پی‌گیرنده", "account.followers.empty": "هنوز کسی پی‌گیر این کاربر نیست.", "account.followers_counter": "{count, plural, one {{counter} پی‌گیرنده} other {{counter} پی‌گیرنده}}", "account.followers_you_know_counter": "{counter} نفر را می‌شناسید", - "account.following": "پی می‌گیرید", + "account.following": "پی‌گرفته", "account.following_counter": "{count, plural, one {{counter} پی‌گرفته} other {{counter} پی‌گرفته}}", "account.follows.empty": "این کاربر هنوز پی‌گیر کسی نیست.", "account.follows_you": "پی‌گیرتان است", "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, one {سال} 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_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": "نمایان تنها برای شما", + "account.menu.open_original_page": "دیدن روی {domain}", + "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}", @@ -73,6 +136,8 @@ "account.share": "هم‌رسانی نمایهٔ ‎@{name}", "account.show_reblogs": "نمایش تقویت‌های ‎@{name}", "account.statuses_counter": "{count, plural, one {{counter} فرسته} other {{counter} فرسته}}", + "account.timeline.pinned": "سنجاق شده", + "account.timeline.pinned.view_all": "دیدن همهٔ فرسته‌های سنجاق شده", "account.unblock": "رفع مسدودیت ‎@{name}", "account.unblock_domain": "رفع مسدودیت دامنهٔ {domain}", "account.unblock_domain_short": "آنبلاک", @@ -82,6 +147,116 @@ "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": "توصیه نمی‌کنیم از شکلک‌های سفارشی در ترکیب با نشانی‌ها استفاده کنید. زمینه‌های سفارشی دارای هر دو برای جلوگیری از گیجی کاربران به جای پیوند، به شکل فقط متنی نشان داده خواهند شد.", + "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": "برای جابه‌جا کردن زمینه‌های سفارشی، فاصله یا ورود را بزنید. هنگام کشیدن از کلیدهای جهت‌دار برای جابه‌جایی زمینه به بالا یا پایین استفاده کنید. برای رها کردن زمینه در موقعیت جدیدش دوباره فاصله یا ورود را زده یا برای لغو، گریز را بزنید.", + "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.description": "نمایش حساب‌هایی که پی می‌گیرید و پی‌گیرانتان به کاربران دیگر در نمایه‌تان. افراد همچنان قادرند ببینند که پی می‌گیریدشان یا نه.", + "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}م‌ب.{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} از برچسب link در سرایند صفحه استفاده کنید؛ ولی 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.help_text": "برچسب‌های منتخب به کاربران در کشف و تعامل با نماگرتان کمک می‌کند. به شکل پالایه‌هایی روی نمای فعّالیت صفحهٔ نماگرتان ظاهر می‌شوند.", + "account_edit_tags.max_tags_reached": "به بیشینهٔ تعداد برچسب‌های منتخب رسیدید.", + "account_edit_tags.search_placeholder": "ورود برچسب…", + "account_edit_tags.suggestions": "پیشنهادها:", + "account_edit_tags.tag_status_count": "{count, plural, one {# فرسته} other {# فرسته}}", + "account_list.hidden_notice": "تنها برای شما نمایان است. رفتن به ‫{page} > {modal} > {field}‬ برای نمایش این سیاهه به دیگران.", + "account_list.total": "{total, plural, one {# حساب} other {# حساب}}", "account_note.placeholder": "برای افزودن یادداشت کلیک کنید", "admin.dashboard.daily_retention": "نرخ حفظ کاربر در روز پس از ثبت نام", "admin.dashboard.monthly_retention": "نرخ حفظ کاربر در ماه پس از ثبت نام", @@ -176,13 +351,94 @@ "bundle_modal_error.close": "بستن", "bundle_modal_error.message": "هنگام بار کردن این صفحه، اشتباهی رخ داد.", "bundle_modal_error.retry": "تلاش دوباره", + "callout.dismiss": "رد کردن", "carousel.current": "پردهٔ {current, number} از {max, number}", "carousel.slide": "پردهٔ {current, number} از {max, 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": "این مجموعهٔ باحال رو ببینید: {link}", + "collection.share_template_own": "مجموعهٔ جدیدم رو ببینید: {link}", + "collections.account_count": "{count, plural, one {# حساب} other {# حساب}}", + "collections.accounts.empty_description": "افزودن تا {count} حساب", + "collections.accounts.empty_editor_title": "هنوز کسی در این مجموعه نیست", + "collections.accounts.empty_title": "این مجموعه خالیست", + "collections.block_collection_owner": "مسدود کردن حساب", + "collections.by_account": "از {account_handle}", + "collections.collection_description": "شرح", + "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": "بیشینه ۱۰۰ نویسه", + "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, one {این کاربر} other {این کاربران}} را مسدود کرده‌اید", + "collections.hidden_accounts_link": "{count, plural, one {# حساب نهفته} other {# حساب نهفته}}", + "collections.hints.accounts_counter": "{count} از {max} حساب", + "collections.last_updated_at": "آخرین به‌روز رسانی: {date}", + "collections.list.collections_with_count": "{count, plural, one {# مجموعه} 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": "بیشینه ۴۰ نویسه", + "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.suggestions.can_not_add": "نمی‌توان افزود", + "collections.suggestions.can_not_add_desc": "ممکن است این حساب‌ها از کشف خارج شده باشند یا روی کارسازی باشند که از مجموعه‌ها پشتیبانی نمی‌کند.", + "collections.suggestions.must_follow": "نخست باید پی بگیرید", + "collections.suggestions.must_follow_desc": "این حساب‌ها همهٔ درخواست‌های پی‌گیری را بازبینی می‌کنند. پی‌گیرندگان می‌توانند به مجموعه‌ها بیفزایندشان.", + "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": "نشانک‌ها", @@ -202,8 +458,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": "جابه‌جایی ستون به چپ", @@ -212,6 +470,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, one {# پیشنهاد} other {# پیشنهاد}} موجود است. استفاده از کلیدهای جهت‌دار بالا و پایین برای پیمایش. زدن کلید ورود برای گزینش.", "community.column_settings.local_only": "فقط محلی", "community.column_settings.media_only": "فقط رسانه", "community.column_settings.remote_only": "تنها دوردست", @@ -245,6 +508,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": "حذف سیاهه؟", @@ -260,6 +526,8 @@ "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.title": "نهفتن زبانهٔ «معرّفی شده»؟", "confirmations.logout.confirm": "خروج از حساب", "confirmations.logout.message": "مطمئنید می‌خواهید خارج شوید؟", "confirmations.logout.title": "خروج؟", @@ -283,6 +551,8 @@ "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.title": "برداشتن خودتان از این مجموعه؟", "confirmations.revoke_quote.confirm": "حذف فرسته", "confirmations.revoke_quote.message": "این اقدام قابل بازگشت نیست.", "confirmations.revoke_quote.title": "آیا فرسته را حذف کنم؟", @@ -295,11 +565,13 @@ "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": "رونوشت به تخته‌گیره", "directory.federated": "از کارسازهای شناخته‌شده", @@ -334,6 +606,8 @@ "domain_pill.your_server": "خانهٔ رقمیتان. جایی که همهٔ فرسته‌هایتان می‌زیند. دوستش ندارید؟ در هر زمان کارسازتان را جابه‌جا کرده و پی‌گیرندگانتان را نیز بیاورید.", "domain_pill.your_username": "شناسهٔ یکتایتان روی این کارساز. ممکن است کاربرانی با نام کاربری مشابه روی کارسازهای دیگر باشند.", "dropdown.empty": "انتخاب یک گزینه", + "email_subscriptions.email": "رایانامه", + "email_subscriptions.form.action": "اشتراک", "embed.instructions": "جاسازی این فرسته روی پایگاهتان با رونوشت کردن کد زیر.", "embed.preview": "این گونه دیده خواهد شد:", "emoji_button.activity": "فعالیت", @@ -351,12 +625,16 @@ "emoji_button.search_results": "نتایج جست‌وجو", "emoji_button.symbols": "نمادها", "emoji_button.travel": "سفر و مکان", + "empty_column.account_featured_self.no_collections_button": "ایجاد مجموعه", + "empty_column.account_featured_self.showcase_accounts": "نمایشکاه حساب‌های محبوبتان", + "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.featured_in": "هنوز به هیچ مجموعه‌ای افزوده نشده‌اید.", "empty_column.community": "خط زمانی محلی خالیست. چیزی نوشته تا چرخش بچرخد!", "empty_column.direct": "هنوز هیچ اشاره خصوصی‌ای ندارید. هنگامی که چنین پیامی بگیرید یا بفرستید این‌جا نشان داده خواهد شد.", "empty_column.disabled_feed": "این خوراک به دست مدیران کارسازتان از کار انداخته شده.", @@ -373,6 +651,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": "این صفحه نمی‌تواند درست نشان داده شود. احتمالاً این خطا ناشی از یک افزونهٔ مرورگر یا ابزار ترجمهٔ خودکار است.", @@ -388,6 +667,8 @@ "featured_carousel.current": "فرستهٔ {current, number} از {max, number}", "featured_carousel.header": "{count, plural, one {فرسته سنجاق‌شده} other {فرسته‌های سنجاق‌شده}}", "featured_carousel.slide": "فرستهٔ {current, number} از {max, number}", + "featured_tags.more_items": "+{count}", + "featured_tags.suggestions.add": "افزودن", "filter_modal.added.context_mismatch_explanation": "این دستهٔ پالایه به بافتاری که در آن به این فرسته دسترسی دارید اعمال نمی‌شود. اگر می‌خواهید فرسته در این بافتار هم پالوده شود، باید پالایه را ویرایش کنید.", "filter_modal.added.context_mismatch_title": "بافتار نامطابق!", "filter_modal.added.expired_explanation": "این دستهٔ پالایه منقضی شده است. برای اعمالش باید تاریخ انقضا را عوض کنید.", @@ -429,6 +710,8 @@ "follow_suggestions.view_all": "دیدن همه", "follow_suggestions.who_to_follow": "افرادی برای پی‌گیری", "followed_tags": "برچسب‌های پی‌گرفته", + "followers.title": "‫{name} را پی می‌گیرد", + "following.title": "پی گرفته از سوی {name}", "footer.about": "درباره", "footer.about_mastodon": "دربارهٔ ماستودون", "footer.about_server": "دربارهٔ {domain}", @@ -440,6 +723,8 @@ "footer.source_code": "نمایش کد مبدأ", "footer.status": "وضعیت", "footer.terms_of_service": "شرایط استفاده از خدمات", + "form_error.blank": "زمینه نمی‌تواند خالی باشد.", + "form_field.optional": "(اختیاری)", "generic.saved": "ذخیره شده", "getting_started.heading": "آغاز کنید", "hashtag.admin_moderation": "گشودن میانای نظارت برای ‎#{name}", @@ -506,6 +791,7 @@ "keyboard_shortcuts.column": "برای تمرکز روی یک فرسته در یکی از ستون‌ها", "keyboard_shortcuts.compose": "تمرکز روی محیط نوشتن", "keyboard_shortcuts.description": "توضیح", + "keyboard_shortcuts.direct": "گشودن ستون اشاره‌های خصوصی", "keyboard_shortcuts.down": "پایین بردن در سیاهه", "keyboard_shortcuts.enter": "گشودن فرسته", "keyboard_shortcuts.favourite": "پسندیدن فرسته", @@ -594,6 +880,7 @@ "navigation_bar.automated_deletion": "حذف خودکار فرسته", "navigation_bar.blocks": "کاربران مسدود شده", "navigation_bar.bookmarks": "نشانک‌ها", + "navigation_bar.collections": "مجموعه‌ها", "navigation_bar.direct": "اشاره‌های خصوصی", "navigation_bar.domain_blocks": "دامنه‌های مسدود شده", "navigation_bar.favourites": "برگزیده‌ها", @@ -619,6 +906,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} {count, plural, one {یک پست} other {پست}} از {target} برای {category} را گزارش داد", "notification.admin.report_account_other": "{name} {count, plural, one {یک پست} other {پست}} از {target} را گزارش داد", @@ -628,6 +916,7 @@ "notification.admin.sign_up.name_and_others": "{name} و {count, plural, one {# نفر دیگر} other {# نفر دیگر}} ثبت‌نام کردند", "notification.annual_report.message": "#خلاصه_ماستودون {year} منتظرتان است! رونمایی از لحظه‌های به یاد ماندنی و نقاط پررنگ سال روی ماستودون!", "notification.annual_report.view": "دیدن #خلاصه_ماستودون", + "notification.collection_update": "‫{name} مجموعه‌ای که در آن هستید را ویراست", "notification.favourite": "{name} فرسته‌تان را برگزید", "notification.favourite.name_and_others_with_link": "{name} و {count, plural, one {# نفر دیگر} other {# نفر دیگر}} فرسته‌تان را برگزیدند", "notification.favourite_pm": "{name} اشارهٔ خصوصیتان را برگزید", @@ -741,12 +1030,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": "می‌توانید افراد دیگر را @نام‌بردن یا #برچسب بزنید…", "onboarding.profile.title": "تنظیم نمایه", @@ -992,6 +1283,7 @@ "tabs_bar.notifications": "آگاهی‌ها", "tabs_bar.publish": "فرسته جدید", "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/fi.json b/app/javascript/mastodon/locales/fi.json index aca15536ba34f0..41c15d66cd8538 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -113,7 +113,7 @@ "account.name.copy": "Kopioi käyttäjätunnus", "account.name.help.domain": "{domain} on palvelin, jolla käyttäjän profiili ja julkaisut sijaitsevat.", "account.name.help.domain_self": "{domain} on palvelin, jolla profiilisi ja julkaisusi sijaitsevat.", - "account.name.help.footer": "Aivan kuten voit lähettää sähköpostia eri sähköpostipalveluntarjoajien avulla, voit olla yhteydessä muihin Mastodon-palvelimiin ja kehen tahansa, joka käyttää Mastodonin kanssa yhteensopivia sosiaalisen median sovelluksia.", + "account.name.help.footer": "Aivan kuten voit lähettää sähköpostia eri sähköpostipalveluntarjoajien avulla, voit olla yhteydessä muihin Mastodon-palvelimiin ja kehen tahansa, joka käyttää fediversumin sovelluksia.", "account.name.help.header": "Käyttäjätunnus on kuin sähköpostiosoite", "account.name.help.username": "{username} on tämän tilin käyttäjänimi omalla palvelimellaan. Jollakin toisen palvelimen tilillä voi olla sama käyttäjänimi.", "account.name.help.username_self": "{username} on käyttäjänimesi tällä palvelimella. Jollakin toisen palvelimen tilillä voi olla sama käyttäjänimi.", @@ -224,6 +224,10 @@ "account_edit.profile_tab.show_media.title": "Näytä Media-välilehti", "account_edit.profile_tab.show_media_replies.description": "Kun käytössä, Media-välilehti näyttää sekä julkaisusi että vastauksesi muiden julkaisuihin.", "account_edit.profile_tab.show_media_replies.title": "Sisällytä vastaukset Media-välilehdelle", + "account_edit.profile_tab.show_relations.description": "Näytä seuraamasi tilit ja seuraajasi muille käyttäjille profiilissasi. Muut näkevät silti, seuraatko heitä.", + "account_edit.profile_tab.show_relations.title": "Näytä ”Seuraajat” ja ”Seurattavat”", + "account_edit.profile_tab.subtitle": "Mukauta, kuinka profiilisi näkyy.", + "account_edit.profile_tab.title": "Profiilin näyttöasetukset", "account_edit.save": "Tallenna", "account_edit.upload_modal.back": "Takaisin", "account_edit.upload_modal.done": "Valmis", @@ -251,6 +255,7 @@ "account_edit_tags.search_placeholder": "Syötä aihetunniste…", "account_edit_tags.suggestions": "Ehdotuksia:", "account_edit_tags.tag_status_count": "{count, plural, one {# julkaisu} other {# julkaisua}}", + "account_list.hidden_notice": "Tämä näkyy vain sinulle. Näytä tämä luettelo muille kohdassa {page} > {modal} > {field}.", "account_list.total": "{total, plural, one {# tili} other {# tiliä}}", "account_note.placeholder": "Lisää muistiinpano napsauttamalla", "admin.dashboard.daily_retention": "Käyttäjien pysyvyys päivittäin rekisteröitymisen jälkeen", @@ -393,6 +398,7 @@ "collections.detail.share": "Jaa tämä kokoelma", "collections.detail.you_are_in_this_collection": "Esiinnyt tässä kokoelmassa", "collections.edit_details": "Muokkaa tietoja", + "collections.error_loading_collections": "Näiden kokoelmien latauksessa tapahtui virhe.", "collections.hidden_accounts_description": "Olet estänyt tai mykistänyt {count, plural, one {tämän käyttäjän} other {nämä käyttäjät}}", "collections.hidden_accounts_link": "{count, plural, one {# piilotettu tili} other {# piilotettua tiliä}}", "collections.hints.accounts_counter": "{count}/{max} tiliä", @@ -642,6 +648,7 @@ "empty_column.account_unavailable": "Profiili ei saatavilla", "empty_column.blocks": "Et ole vielä estänyt käyttäjiä.", "empty_column.bookmarked_statuses": "Et ole vielä lisännyt julkaisuja kirjanmerkkeihisi. Kun lisäät yhden, se näkyy tässä.", + "empty_column.collections.featured_in": "Sinua ei ole vielä lisätty mihinkään kokoelmaan.", "empty_column.community": "Paikallinen aikajana on tyhjä. Kirjoita jotain julkista, niin homma lähtee käyntiin!", "empty_column.direct": "Yksityismainintoja ei vielä ole. Jos lähetät tai sinulle lähetetään sellaisia, näet ne täällä.", "empty_column.disabled_feed": "Palvelimen ylläpito on poistanut käytöstä tämän syötteen.", diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json index 455f3ef0bb536b..c92fff2821d4bf 100644 --- a/app/javascript/mastodon/locales/fr-CA.json +++ b/app/javascript/mastodon/locales/fr-CA.json @@ -113,7 +113,7 @@ "account.name.copy": "Copier l’identifiant", "account.name.help.domain": "{domain} est le serveur qui héberge le profil et les messages du compte.", "account.name.help.domain_self": "{domain} est le serveur qui héberge votre profil et vos messages.", - "account.name.help.footer": "Tout comme vous pouvez envoyer des courriels à des personnes utilisant différents fournisseurs de messagerie, vous pouvez interagir avec des personnes sur d'autres serveurs Mastodon, ainsi qu'avec n'importe qui utilisant une application sociale compatible avec Mastodon.", + "account.name.help.footer": "Tout comme vous pouvez envoyer des courriels à des personnes utilisant différents fournisseurs de messagerie, vous pouvez interagir avec des personnes sur d'autres serveurs Mastodon, ainsi qu'avec n'importe qui utilisant une application du Fédivers.", "account.name.help.header": "Un identifiant est comme une adresse de courriel", "account.name.help.username": "{username} est le nom d'utilisateur·ice de ce compte sur son serveur. Quelqu'un sur un autre serveur peut avoir le même nom.", "account.name.help.username_self": "{username} est votre nom d'utilisateur·ice sur ce serveur. Quelqu'un sur un autre serveur peut avoir le même nom.", @@ -224,6 +224,10 @@ "account_edit.profile_tab.show_media.title": "Afficher l'onglet « Média »", "account_edit.profile_tab.show_media_replies.description": "En activant cette option l'onglet « Média » affiche à la fois vos messages et vos réponses aux messages d'autres personnes.", "account_edit.profile_tab.show_media_replies.title": "Inclure les réponses dans l'onglet « Média »", + "account_edit.profile_tab.show_relations.description": "Affiche vos abonnements et vos abonné·e·s sur votre profil. Les gens seront toujours en mesure de voir si vous les suivez.", + "account_edit.profile_tab.show_relations.title": "Afficher les abonné·e·s et les abonnements", + "account_edit.profile_tab.subtitle": "Personnalisez l'affichage de votre profil.", + "account_edit.profile_tab.title": "Paramètres d'affichage du profil", "account_edit.save": "Enregistrer", "account_edit.upload_modal.back": "Retour", "account_edit.upload_modal.done": "Terminé", @@ -251,6 +255,7 @@ "account_edit_tags.search_placeholder": "Saisir un hashtag…", "account_edit_tags.suggestions": "Suggestions :", "account_edit_tags.tag_status_count": "{count, plural, one {# message} other {# messages}}", + "account_list.hidden_notice": "Ceci n'est visible que pour vous. Pour afficher cette liste aux autres, allez à {page} > {modal} > {field}.", "account_list.total": "{total, plural, one {# compte} other {# comptes}}", "account_note.placeholder": "Cliquez pour ajouter une note", "admin.dashboard.daily_retention": "Taux de rétention des comptes par jour après inscription", @@ -393,6 +398,7 @@ "collections.detail.share": "Partager la collection", "collections.detail.you_are_in_this_collection": "Vous faites partie de cette collection", "collections.edit_details": "Modifier les détails", + "collections.error_loading_collections": "Une erreur s'est produite durant le chargement de ces collections.", "collections.hidden_accounts_description": "Vous avez bloqué ou masqué {count, plural, one {ce compte} other {ces comptes}}", "collections.hidden_accounts_link": "{count, plural, one {# compte caché} other {# comptes cachés}}", "collections.hints.accounts_counter": "{count}/{max} comptes", @@ -642,6 +648,7 @@ "empty_column.account_unavailable": "Profil non disponible", "empty_column.blocks": "Vous n’avez bloqué aucun compte pour le moment.", "empty_column.bookmarked_statuses": "Vous n'avez pas de publications parmi vos signets. Lorsque vous en ajouterez une, elle apparaîtra ici.", + "empty_column.collections.featured_in": "Vous n'avez pas encore été ajouté·e à une collection.", "empty_column.community": "Le fil local est vide. Écrivez donc quelque chose pour le remplir!", "empty_column.direct": "Vous n'avez pas encore de mentions privées. Quand vous en envoyez ou en recevez, elles apparaîtront ici.", "empty_column.disabled_feed": "Ce flux a été désactivé par les administrateur·rice·s de votre serveur.", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index ae425aefde5e1f..ee74c5a452b175 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -113,7 +113,7 @@ "account.name.copy": "Copier l’identifiant", "account.name.help.domain": "{domain} est le serveur qui héberge le profil et les messages du compte.", "account.name.help.domain_self": "{domain} est le serveur qui héberge votre profil et vos messages.", - "account.name.help.footer": "Tout comme vous pouvez envoyer des courriels à des personnes utilisant différents fournisseurs de messagerie, vous pouvez interagir avec des personnes sur d'autres serveurs Mastodon, ainsi qu'avec n'importe qui utilisant une application sociale compatible avec Mastodon.", + "account.name.help.footer": "Tout comme vous pouvez envoyer des courriels à des personnes utilisant différents fournisseurs de messagerie, vous pouvez interagir avec des personnes sur d'autres serveurs Mastodon, ainsi qu'avec n'importe qui utilisant une application du Fédivers.", "account.name.help.header": "Un identifiant est comme une adresse de courriel", "account.name.help.username": "{username} est le nom d'utilisateur·ice de ce compte sur son serveur. Quelqu'un sur un autre serveur peut avoir le même nom.", "account.name.help.username_self": "{username} est votre nom d'utilisateur·ice sur ce serveur. Quelqu'un sur un autre serveur peut avoir le même nom.", @@ -224,6 +224,10 @@ "account_edit.profile_tab.show_media.title": "Afficher l'onglet « Média »", "account_edit.profile_tab.show_media_replies.description": "En activant cette option l'onglet « Média » affiche à la fois vos messages et vos réponses aux messages d'autres personnes.", "account_edit.profile_tab.show_media_replies.title": "Inclure les réponses dans l'onglet « Média »", + "account_edit.profile_tab.show_relations.description": "Affiche vos abonnements et vos abonné·e·s sur votre profil. Les gens seront toujours en mesure de voir si vous les suivez.", + "account_edit.profile_tab.show_relations.title": "Afficher les abonné·e·s et les abonnements", + "account_edit.profile_tab.subtitle": "Personnalisez l'affichage de votre profil.", + "account_edit.profile_tab.title": "Paramètres d'affichage du profil", "account_edit.save": "Enregistrer", "account_edit.upload_modal.back": "Retour", "account_edit.upload_modal.done": "Terminé", @@ -251,6 +255,7 @@ "account_edit_tags.search_placeholder": "Saisir un hashtag…", "account_edit_tags.suggestions": "Suggestions :", "account_edit_tags.tag_status_count": "{count, plural, one {# message} other {# messages}}", + "account_list.hidden_notice": "Ceci n'est visible que pour vous. Pour afficher cette liste aux autres, allez à {page} > {modal} > {field}.", "account_list.total": "{total, plural, one {# compte} other {# comptes}}", "account_note.placeholder": "Cliquez pour ajouter une note", "admin.dashboard.daily_retention": "Taux de rétention des utilisateur·rice·s par jour après inscription", @@ -393,6 +398,7 @@ "collections.detail.share": "Partager la collection", "collections.detail.you_are_in_this_collection": "Vous faites partie de cette collection", "collections.edit_details": "Modifier les détails", + "collections.error_loading_collections": "Une erreur s'est produite durant le chargement de ces collections.", "collections.hidden_accounts_description": "Vous avez bloqué ou masqué {count, plural, one {ce compte} other {ces comptes}}", "collections.hidden_accounts_link": "{count, plural, one {# compte caché} other {# comptes cachés}}", "collections.hints.accounts_counter": "{count}/{max} comptes", @@ -642,6 +648,7 @@ "empty_column.account_unavailable": "Profil non disponible", "empty_column.blocks": "Vous n’avez bloqué aucun compte pour le moment.", "empty_column.bookmarked_statuses": "Vous n'avez pas de message en marque-page. Lorsque vous en ajouterez un, il apparaîtra ici.", + "empty_column.collections.featured_in": "Vous n'avez pas encore été ajouté·e à une collection.", "empty_column.community": "Le fil public local est vide. Écrivez donc quelque chose pour le remplir !", "empty_column.direct": "Vous n'avez pas encore de mentions privées. Quand vous en enverrez ou recevrez, elles apparaîtront ici.", "empty_column.disabled_feed": "Ce flux a été désactivé par les administrateur·rice·s de votre serveur.", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 64c8d0967a0834..f788d0774653b8 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -113,7 +113,7 @@ "account.name.copy": "Láimhseáil chóipeála", "account.name.help.domain": "Is é {domain} an freastalaí a óstálann próifíl agus poist an úsáideora.", "account.name.help.domain_self": "Is é {domain} an freastalaí a óstálann do phróifíl agus do phoist.", - "account.name.help.footer": "Díreach mar is féidir leat ríomhphoist a sheoladh chuig daoine ag baint úsáide as soláthraithe ríomhphoist éagsúla, is féidir leat idirghníomhú le daoine ar fhreastalaithe Mastodon eile, agus le duine ar bith ar aipeanna sóisialta eile atá comhoiriúnach le Mastodon.", + "account.name.help.footer": "Díreach mar is féidir leat ríomhphoist a sheoladh chuig daoine a úsáideann soláthraithe ríomhphoist éagsúla, is féidir leat idirghníomhú le daoine ar fhreastalaithe Mastodon eile, agus le haon duine ar aipeanna Fediverse eile.", "account.name.help.header": "Is cosúil le seoladh ríomhphoist é láimhseáil", "account.name.help.username": "Is é {username} ainm úsáideora an chuntais seo ar a bhfreastalaí. D’fhéadfadh an t-ainm úsáideora céanna a bheith ag duine éigin ar fhreastalaí eile.", "account.name.help.username_self": "Is é {username} d'ainm úsáideora ar an bhfreastalaí seo. D'fhéadfadh an t-ainm úsáideora céanna a bheith ag duine éigin ar fhreastalaí eile.", @@ -224,6 +224,10 @@ "account_edit.profile_tab.show_media.title": "Taispeáin an cluaisín ‘Meáin’", "account_edit.profile_tab.show_media_replies.description": "Nuair a bhíonn sé cumasaithe, taispeánann an cluaisín Meáin do phoist agus freagraí ar phoist daoine eile araon.", "account_edit.profile_tab.show_media_replies.title": "Cuir freagraí san áireamh ar an táb ‘Meáin’", + "account_edit.profile_tab.show_relations.description": "Taispeáin cuntais a leanann tú agus leantóirí d'úsáideoirí eile i do phróifíl. Beidh daoine fós in ann a fheiceáil an bhfuil tú ag leanúint orthu.", + "account_edit.profile_tab.show_relations.title": "Taispeáin Leanúna agus iad siúd a Leantar", + "account_edit.profile_tab.subtitle": "Saincheap conas a thaispeánfar do phróifíl.", + "account_edit.profile_tab.title": "Socruithe taispeána próifíle", "account_edit.save": "Sábháil", "account_edit.upload_modal.back": "Ar ais", "account_edit.upload_modal.done": "Déanta", @@ -251,6 +255,7 @@ "account_edit_tags.search_placeholder": "Cuir isteach haischlib…", "account_edit_tags.suggestions": "Moltaí:", "account_edit_tags.tag_status_count": "{count, plural, one {# post} two {# poist} few {# poist} many {# poist} other {# poist}}", + "account_list.hidden_notice": "Níl sé seo le feiceáil ach duit. Chun an liosta seo a thaispeáint do dhaoine eile, téigh chuig {page} > {modal} > {field}.", "account_list.total": "{total, plural, one {# cuntas} two {# cuntais} few {# cuntais} many {# cuntais} other {# cuntais}}", "account_note.placeholder": "Cliceáil chun nóta a chuir leis", "admin.dashboard.daily_retention": "Ráta coinneála an úsáideora de réir an lae tar éis clárú", @@ -393,6 +398,7 @@ "collections.detail.share": "Comhroinn an bailiúchán seo", "collections.detail.you_are_in_this_collection": "Tá tú le feiceáil sa bhailiúchán seo", "collections.edit_details": "Cuir sonraí in eagar", + "collections.error_loading_collections": "Tharla earráid agus na bailiúcháin seo á luchtú.", "collections.hidden_accounts_description": "Tá bac nó múchadh déanta agat ar {count, plural, one {an t-úsáideoir seo} two {na húsáideoirí seo} few {na húsáideoirí seo} many {na húsáideoirí seo} other {na húsáideoirí seo}}", "collections.hidden_accounts_link": "{count, plural, one {# cuntas folaithe} two {# cuntais folaithe} few {# cuntais folaithe} many {# cuntais folaithe} other {# cuntais folaithe}}", "collections.hints.accounts_counter": "cuntais {count}/{max}", @@ -642,6 +648,7 @@ "empty_column.account_unavailable": "Níl an phróifíl ar fáil", "empty_column.blocks": "Níl aon úsáideoir bactha agat fós.", "empty_column.bookmarked_statuses": "Níl aon phostáil leabharmharcaithe agat fós. Nuair a dhéanann tú leabharmharc, beidh sé le feiceáil anseo.", + "empty_column.collections.featured_in": "Níor cuireadh le haon bhailiúchán thú go fóill.", "empty_column.community": "Tá an amlíne áitiúil folamh. Foilsigh rud éigin go poiblí le tús a chur le cúrsaí!", "empty_column.direct": "Níl aon tagairtí príobháideacha agat fós. Nuair a sheolann tú nó a gheobhaidh tú ceann, beidh sé le feiceáil anseo.", "empty_column.disabled_feed": "Tá an fotha seo díchumasaithe ag riarthóirí do fhreastalaí.", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index ffb9a2c11b0ee4..3f1883f52eb810 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -43,6 +43,7 @@ "account.featured": "’Ga bhrosnachadh", "account.featured.accounts": "Pròifilean", "account.featured.collections": "Cruinneachaidhean", + "account.featured.new_collection": "Cruinneachadh ùr", "account.field_overflow": "Seall an t-susbaint shlàn", "account.filters.all": "A’ ghnìomhachd air fad", "account.filters.boosts_toggle": "Seall na brosnachaidhean", @@ -68,6 +69,16 @@ "account.go_to_profile": "Tadhail air a’ phròifil", "account.hide_reblogs": "Falaich na brosnachaidhean o @{name}", "account.in_memoriam": "Mar chuimhneachan.", + "account.join_modal.day": "Latha", + "account.join_modal.me": "Fhuair thu ballrachd air {server}", + "account.join_modal.me_anniversary": "Ceann-bliadhna air leth dhut! Fhuair thu ballrachd air {server}", + "account.join_modal.me_today": "Seo a’ chiad latha agad air {server}!", + "account.join_modal.other": "Fhuair {name} ballrachd air {server}", + "account.join_modal.other_today": "Seo a’ chiad latha aig {name} air {server}!", + "account.join_modal.share.celebrate": "Co-roinn post comharrachaidh", + "account.join_modal.share.intro": "Co-roinn post cuir an aithne", + "account.join_modal.share.welcome": "Co-roinn post fàilteachaidh", + "account.join_modal.years": "{number, plural, one {bliadhna} two {bliadhnaichean} few {bliadhnaichean} other {bliadhnaichean}}", "account.joined_short": "Air ballrachd fhaighinn", "account.languages": "Atharraich fo-sgrìobhadh nan cànan", "account.last_active": "Gnìomhach an turas mu dheireadh", @@ -102,6 +113,7 @@ "account.name.copy": "Dèan lethbhreac dhen aithnichear", "account.name.help.domain": "Is {domain} am frithealaiche a tha ag òstadh pròifil ’s postaichean a’ chleachdaiche.", "account.name.help.domain_self": "Is {domain} am frithealaiche agad-sa a tha ag òstadh pròifil ’s postaichean agad-sa.", + "account.name.help.footer": "Air an aon dòigh ’s a chuireas tu puist-d gu daoine le solaraichean puist-d eadar-dhealaichte, ’s urrainn dhut conaltradh le daoine air frithealaichean Mastodon eile ’s air aplacaidean eile a’ cho-shaoghail.", "account.name.help.header": "Tha aithnichear coltach ri seòladh puist-d", "account.name.help.username": "Is {username} ainm-cleachdaiche a’ chunntais seo air an fhrithealaiche aca-san. Dh’fhaoidte gu bheil an t-aon ainm-cleachdaiche le cuideigin air frithealaiche eile.", "account.name.help.username_self": "Is {username} d’ ainm-cleachdaiche air an fhrithealaiche seo. Dh’fhaoidte gu bheil an t-aon ainm-cleachdaiche le cuideigin air frithealaiche eile.", @@ -116,6 +128,7 @@ "account.note.edit_button": "Deasaich", "account.note.title": "Nòta pearsanta (chan fhaic ach thu fhèin e)", "account.open_original_page": "Fosgail an duilleag thùsail", + "account.pending": "Ri dhèiligeadh", "account.posts": "Postaichean", "account.remove_from_followers": "Thoir {name} air falbh on luchd-leantainn", "account.report": "Dèan gearan mu @{name}", @@ -211,6 +224,10 @@ "account_edit.profile_tab.show_media.title": "Seall an taba “Meadhanan”", "account_edit.profile_tab.show_media_replies.description": "Nuair a bhios seo an comas, seallaidh an taba “Meadhanan” an dà chuid na postaichean agad agus na freagairtean a rinn thu do phostaichean càich.", "account_edit.profile_tab.show_media_replies.title": "Gabh a-staigh freagairtean air an taba “Meadhanan”", + "account_edit.profile_tab.show_relations.description": "Seallaidh seo na cunntasan a leanas tu ’s an luchd-leantainn agad do chàch air a’ phròifil agad. Chì daoine fhathast a bheil thu an leanntainn-san fhèin gus nach eil.", + "account_edit.profile_tab.show_relations.title": "Seall “A’ leantainn” ’s “Luchd-leantainn”", + "account_edit.profile_tab.subtitle": "Gnàthaich mar a thèid a’ phròifil agad a shealltainn.", + "account_edit.profile_tab.title": "Roghainnean taisbeanadh na pròifil", "account_edit.save": "Sàbhail", "account_edit.upload_modal.back": "Air ais", "account_edit.upload_modal.done": "Deiseil", @@ -238,6 +255,7 @@ "account_edit_tags.search_placeholder": "Cuir a-steach taga hais…", "account_edit_tags.suggestions": "Molaidhean:", "account_edit_tags.tag_status_count": "{count, plural, one {# phost} two {# phost} few {# postaichean} other {# post}}", + "account_list.hidden_notice": "Chan fhaic ach thu fhèin seo. Gus an liosta seo a shealltainn do chàch, tadhail air {page} > {modal} > {field}.", "account_list.total": "{total, plural, one {# chunntas} two {# chunntas} few {# cunntasan} other {# cunntas}}", "account_note.placeholder": "Briog airson nòta a chur ris", "admin.dashboard.daily_retention": "Reat glèidheadh nan cleachdaichean às dèidh an clàradh a-rèir latha", @@ -350,7 +368,9 @@ "collection.share_template_other": "Thoir sùil air an deagh-chruinneachadh seo: {link}", "collection.share_template_own": "Thoir sùil air a’ chruinneachadh ùr agam: {link}", "collections.account_count": "{count, plural, one {# chunntas} two {# chunntas} few {# cunntasan} other {# cunntas}}", + "collections.accounts.empty_editor_title": "Chan eil neach sam bith sa chruinneachadh seo fhathast", "collections.accounts.empty_title": "Tha an an cruinneachadh seo falamh", + "collections.block_collection_owner": "Bac an cunntas", "collections.by_account": "le {account_handle}", "collections.collection_description": "Tuairisgeul", "collections.collection_language": "Cànan", @@ -360,6 +380,8 @@ "collections.confirm_account_removal": "A bheil thu cinnteach gu bheil thu airson an cunntas seo a thoirt air falbh on chruinneachadh seo?", "collections.content_warning": "Rabhadh susbainte", "collections.continue": "Lean air adhart", + "collections.copy_link": "Dèan lethbhreac dhen cheangal", + "collections.copy_link_confirmation": "Chaidh lethbhreac de cheangal a’ chruinneachaidh a chur air an stòr-bhòrd", "collections.create.accounts_title": "Cò bhrosnaicheas tu sa chruinneachadh seo?", "collections.create.basic_details_title": "Bun-fhiosrachadh", "collections.create.steps": "Ceum {step}/{total}", @@ -374,20 +396,39 @@ "collections.detail.share": "Co-roinn an cruinneachadh seo", "collections.detail.you_are_in_this_collection": "Thathar do bhrosnachadh sa chruinneachadh seo", "collections.edit_details": "Deasaich am fiosrachadh", + "collections.error_loading_collections": "Thachair mearachd nuair a dh’fheuch sinn ris na cruinneachaidhean seo a luchdadh.", + "collections.hidden_accounts_description": "Bhac no mhùch thu {count, plural, one {an cleachdaiche seo} two {na cleachdaichean seo} few {na cleachdaichean seo} other {na cleachdaichean seo}}", + "collections.hidden_accounts_link": "{count, plural, one {# chunntas falaichte} two {# chunntas falaichte} few {# cunntasan falaichte} other {# cunntas falaichte}}", "collections.last_updated_at": "An tùrachadh mu dheireadh: {date}", + "collections.list.collections_with_count": "{count, plural, one {# chruinneachadh} two {# chruinneachadh} few {# cruinneachaidhean} other {# cruinneachadh}}", + "collections.list.created_by_author": "Air a chruthachadh le {name}", + "collections.list.created_by_you": "Air a chruthachadh leatsa", + "collections.list.featuring_you": "’Gad bhrosnachadh", "collections.manage_accounts": "Stiùirich na cunntasan", "collections.mark_as_sensitive": "Cuir comharra gu bheil e frionasach", "collections.mark_as_sensitive_hint": "Falaichidh seo tuairisgeul is cunntasan a’ chruinneachaidh air cùlaibh rabhadh susbainte. Chithear ainm a’ chruinneachaidh fhathast.", + "collections.maximum_collection_count_reached": "Chruthaich thu na tha ceadaichte de chruinneachaidhean", "collections.name_length_hint": "Crìoch de 40 caractar", "collections.new_collection": "Cruinneachadh ùr", + "collections.pending_accounts.message": "Faodaidh cunntasan a nochdadh mar “ri dhèiligeadh” fad ’s a bhios sinn a’ feitheamh air freagairt on chleachdaiche no on fhrithealaiche aca. Chan fhaic ach thu fhèin na cunntasan ri dhèiligeadh.", + "collections.pending_accounts.title": "Carson a chì mi cunntasan ri dhèiligeadh?", + "collections.remove_account": "Thoir air falbh", "collections.report_collection": "Dèan gearan mun chruinneachadh seo", "collections.revoke_collection_inclusion": "Thoir mi fhìn air falbh on chruinneachadh seo", "collections.revoke_inclusion.confirmation": "Chaidh do thoirt air falbh o “{collection}”", "collections.revoke_inclusion.error": "Thachair mearachd. Feuch ris a-rithist an ceann greis.", + "collections.search_accounts_label": "Lorg cunntas ri cur ris", "collections.search_accounts_max_reached": "Chuir thu na tha ceadaichte de chunntasan ris", "collections.sensitive": "Frionasach", + "collections.share_short": "Co-roinn", + "collections.suggestions.can_not_add": "Cha ghabh a chur ris", + "collections.suggestions.can_not_add_desc": "Chuir na cunntasan seo romhpa nach nochd iad ann an àrainneachdan rùrachaidh no tha iad air frithealaiche nach cuir taic ri cruinneachaidhean.", + "collections.suggestions.must_follow": "Feumaidh tu leantainn an toiseach", + "collections.suggestions.must_follow_desc": "Nì na cunntasan seo lèirmheas air gach iarrtas leantainn. ’S urrainn dhan luchd-leantainn an cur ri cruinneachaidhean.", "collections.topic_hint": "Cuir taga hais ris a chuidicheas càch le tuigse prìomh-chuspair a’ chruinneachaidh seo.", "collections.topic_special_chars_hint": "Thèid caractaran sònraichte a thoirt air falbh nuair a thèid a shàbhaladh", + "collections.unlisted_collections_description": "Chan fhaic càch iad air a’ phròifil agad. ’S urrainn do neach sam bith aig a bheil an ceangal an lorg.", + "collections.unlisted_collections_with_count": "Cruinneachaidhean falaichte o liostaichean ({count})", "collections.view_collection": "Seall an cruinneachadh ", "collections.visibility_public": "Poblach", "collections.visibility_public_hint": "Gabhaidh a rùrachadh ann an toraidhean luirg agus air àitichean eile far a nochdas molaidhean.", @@ -413,8 +454,10 @@ "column.lists": "Liostaichean", "column.mutes": "Cleachdaichean mùchte", "column.notifications": "Brathan", + "column.other_collections": "Cruinneachaidhean le {name}", "column.pins": "Postaichean prìnichte", "column.public": "Loidhne-ama cho-naisgte", + "column.your_collections": "Na cruinneachaidhean agad", "column_back_button.label": "Air ais", "column_header.hide_settings": "Falaich na roghainnean", "column_header.moveLeft_settings": "Gluais an colbh dhan taobh chlì", @@ -479,6 +522,10 @@ "confirmations.follow_to_list.confirm": "Lean ’s cuir ris an liosta", "confirmations.follow_to_list.message": "Feumaidh tu {name} a leantainn ron chur ri liosta.", "confirmations.follow_to_list.title": "A bheil thu airson an cleachdaiche a leantainn?", + "confirmations.hide_featured_tab.confirm": "Falaich an taba", + "confirmations.hide_featured_tab.intro": "’S urrainn dhut seo atharrachadh uair sam bidh fo Deasaich a’ phròifil > Roghainnean tabaichean na pròifile.", + "confirmations.hide_featured_tab.message": "Falaichidh seo an taba do chleachdaichean air {serverName} ’s air frithealaichean eile a tha a’ ruith an tionndadh as ùire de Mhastodon. Bidh an taisbeanadh air àitichean eile caochlaideach.", + "confirmations.hide_featured_tab.title": "A bheil thu airson an taba “’Ga bhrosnachadh” fhalach?", "confirmations.logout.confirm": "Clàraich a-mach", "confirmations.logout.message": "A bheil thu cinnteach gu bheil thu airson clàradh a-mach?", "confirmations.logout.title": "A bheil thu airson clàradh a-mach?", @@ -564,6 +611,7 @@ "email_subscriptions.form.title": "Clàraich airson naidheachdan {name} fhaighinn air a’ phost-d", "email_subscriptions.submitted.lead": "Thoir sùil a bheil post-d sa a’ bhogsa a-steach agad airson an clàradh airson naidheachdan puist-d a choileanadh.", "email_subscriptions.submitted.title": "Aon cheum eile", + "email_subscriptions.validation.email.blocked": "Chaidh an solaraiche puist-d a bhacadh", "email_subscriptions.validation.email.invalid": "Seòladh puist-d mì-dhligheach", "embed.instructions": "Leabaich am post seo san làrach-lìn agad is tu a’ dèanamh lethbhreac dhen chòd gu h-ìosal.", "embed.preview": "Seo an coltas a bhios air:", @@ -582,7 +630,13 @@ "emoji_button.search_results": "Toraidhean an luirg", "emoji_button.symbols": "Samhlaidhean", "emoji_button.travel": "Siubhal ⁊ àitichean", + "empty_column.account_featured.other": "Chan eil {acct} a’ brosnachadh dad fhathast.", "empty_column.account_featured_self.no_collections_button": "Cruthaich cruinneachadh", + "empty_column.account_featured_self.no_collections_hide_tab": "Falaich an taba seo ’na àite", + "empty_column.account_featured_self.pre_collections": "Cùm sùil a-mach air cruinneachaidhean", + "empty_column.account_featured_self.pre_collections_desc": "Le cruinneachaidhean (ri thiginn le Mastodon 4.6), ’s urrainn dhut liostaichean de chunntasan a thasgadh gus am moladh do chàch.", + "empty_column.account_featured_self.showcase_accounts": "Brosnaich na cunntasan as fheàrr leat", + "empty_column.account_featured_self.showcase_accounts_desc": "’S e liostaichean curadaichte de chunntasan a tha sna cruinneachaidhean a chuidicheas càch ach an lorg iad barrachd air a’ cho-shaoghal.", "empty_column.account_featured_unknown.other": "Chan eil an cunntas seo a’ brosnachadh dad fhathast.", "empty_column.account_hides_collections": "Chuir an cleachdaiche seo roimhe nach eil am fiosrachadh seo ri fhaighinn", "empty_column.account_suspended": "Chaidh an cunntas a chur à rèim", @@ -590,6 +644,7 @@ "empty_column.account_unavailable": "Chan eil a’ phròifil ri làimh", "empty_column.blocks": "Cha do bhac thu cleachdaiche sam bith fhathast.", "empty_column.bookmarked_statuses": "Chan eil comharra-lìn ri post agad fhathast. Nuair a nì thu comharra-lìn de dh’fhear, nochdaidh e an-seo.", + "empty_column.collections.featured_in": "Cha deach do chur ri cruinneachadh sam bith fhathast.", "empty_column.community": "Tha an loidhne-ama ionadail falamh. Sgrìobh rudeigin gu poblach airson toiseach-tòiseachaidh a dhèanamh!", "empty_column.direct": "Chan eil iomradh prìobhaideach agad fhathast. Nuair a chuireas no a gheibh thu tè, nochdaidh i an-seo.", "empty_column.disabled_feed": "Chaidh an loidhne-ama seo a chur à comas le rianairean an fhrithealaiche agad.", @@ -867,6 +922,7 @@ "navigation_panel.expand_followed_tags": "Leudaich clàr-taice nan tagaichean hais ’gan leantainn", "navigation_panel.expand_lists": "Leudaich clàr-taice na liosta", "not_signed_in_indicator.not_signed_in": "Feumaidh tu clàradh a-steach mus fhaigh thu cothrom air a’ ghoireas seo.", + "notification.added_to_collection": "Chuir {name} ri cruinneachadh thu", "notification.admin.report": "Rinn {name} gearan mu {target}", "notification.admin.report_account": "Rinn {name} gearan mu {count, plural, one {# phost} two {# phost} few {# postaichean} other {# post}} le {target} air adhbhar {category}", "notification.admin.report_account_other": "Rinn {name} gearan mu {count, plural, one {# phost} two {# phost} few {# postaichean} other {# post}} le {target}", @@ -876,6 +932,7 @@ "notification.admin.sign_up.name_and_others": "Chlàraich {name} ’s {count, plural, one {# eile} two {# eile} few {# eile} other {# eile}}", "notification.annual_report.message": "Tha #Wrapstodon {year} deiseil dhut! Thoir sùil air mar a chaidh leat air Mastodon am bliadhna!", "notification.annual_report.view": "Seall #Wrapstodon", + "notification.collection_update": "Dheasaich {name} sa bheil thu", "notification.favourite": "Is annsa le {name} am post agad", "notification.favourite.name_and_others_with_link": "Is annsa le {name} ’s {count, plural, one {# eile} two {# eile} few {# eile} other {# eile}} am post agad", "notification.favourite_pm": "Is annsa le {name} an t-iomradh prìobhaideach agad", @@ -1139,6 +1196,7 @@ "server_banner.active_users": "cleachdaichean gnìomhach", "server_banner.administered_by": "Rianachd le:", "server_banner.is_one_of_many": "Is {domain} fear de dh’iomadh frithealaiche Mastodon neo-eisimeileach as urrainn dhut cleachdadh airson pàirt a ghabhail sa cho-shaoghal.", + "server_banner.more_about_this_server": "Barrachd mun fhrithealaiche seo", "server_banner.server_stats": "Stadastaireachd an fhrithealaiche:", "sign_in_banner.create_account": "Cruthaich cunntas", "sign_in_banner.follow_anyone": "Lean duine sam bith air a’ cho-shaoghal agus faic a h-uile càil a-rèir an ama. Chan eil sgeul air algairimean, sanasachd no clickbait.", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 05b2fb9b2b33e2..04c93bebf17be5 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -113,7 +113,7 @@ "account.name.copy": "Copiar identificador", "account.name.help.domain": "{domain} é o servidor que aloxa o perfil e as publicacións da usuaria.", "account.name.help.domain_self": "{domain} é o servidor que aloxa o teu perfil e publicacións.", - "account.name.help.footer": "Do mesmo xeito que podes enviar un correo electrónico a unha persoa que utiliza outro provedor, podes relacionarte con persoas doutros servidores Mastodon, e con calquera das outras aplicacións sociais compatibles con Mastodon.", + "account.name.help.footer": "Do mesmo xeito que podes enviar un correo electrónico a unha persoa que utiliza outro provedor, podes relacionarte con persoas doutros servidores Mastodon, e con calquera que use as outras apps do Fediverso.", "account.name.help.header": "Un alcume é o como o enderezo de correo", "account.name.help.username": "{username} é o nome de usuaria da conta no seu servidor. Alguén noutro servidor podería ter o mesmo nome de usuaria.", "account.name.help.username_self": "{username} é o teu nome de usuaria nete servidor. Alguén noutro sevidor podería ter o mesmo nome de usuaria.", @@ -224,6 +224,10 @@ "account_edit.profile_tab.show_media.title": "Mostrar pestana 'Multimedia'", "account_edit.profile_tab.show_media_replies.description": "Ao activala, a pestana Multimedia mostra tanto as túas publicacións como as respostas a outras persoas.", "account_edit.profile_tab.show_media_replies.title": "Incluír respostas na pestana 'Multimedia'", + "account_edit.profile_tab.show_relations.description": "Mostra no teu perfil as contas que segues e que te seguen desde outros servidores. Outras persoas poderán ver se as estás a seguir.", + "account_edit.profile_tab.show_relations.title": "Mostrar 'Seguidoras' e 'Seguimentos'", + "account_edit.profile_tab.subtitle": "Personaliza como se mostra o teu perfil.", + "account_edit.profile_tab.title": "Axustes de aparencia do perfil", "account_edit.save": "Gardar", "account_edit.upload_modal.back": "Volver", "account_edit.upload_modal.done": "Feito", @@ -251,6 +255,7 @@ "account_edit_tags.search_placeholder": "Escribe un cancelo…", "account_edit_tags.suggestions": "Suxestións:", "account_edit_tags.tag_status_count": "{count, plural, one {# publicación} other {# publicacións}}", + "account_list.hidden_notice": "Isto só o ves ti. Para que sexa visible por outras persoas vai a {page} > {modal} > {field}.", "account_list.total": "{total, plural, one {# conta} other {# contas}}", "account_note.placeholder": "Preme para engadir nota", "admin.dashboard.daily_retention": "Ratio de retención de usuarias diaria após rexistrarse", @@ -393,6 +398,7 @@ "collections.detail.share": "Compartir esta colección", "collections.detail.you_are_in_this_collection": "Engadíronte a esta colección", "collections.edit_details": "Editar detalles", + "collections.error_loading_collections": "Houbo un erro ao intentar cargar estas coleccións.", "collections.hidden_accounts_description": "Bloqueaches ou silenciaches {count, plural, one {esta conta} other {estas contas}}", "collections.hidden_accounts_link": "{count, plural, one {# conta oculta} other {# contas ocultas}}", "collections.hints.accounts_counter": "{count}/{max} contas", @@ -642,6 +648,7 @@ "empty_column.account_unavailable": "Perfil non dispoñible", "empty_column.blocks": "Aínda non bloqueaches a ningún usuaria.", "empty_column.bookmarked_statuses": "Aínda non marcaches ningunha publicación. Cando o fagas, aparecerán aquí.", + "empty_column.collections.featured_in": "Non te engadiron a ningunha colección.", "empty_column.community": "A cronoloxía local está baleira. Escribe algo de xeito público para espallalo!", "empty_column.direct": "Aínda non tes mencións privadas. Cando envíes ou recibas unha, aparecerá aquí.", "empty_column.disabled_feed": "A administración do teu servidor desactivou esta canle.", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 928c48261a426d..0c534fe1dbff79 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -113,7 +113,7 @@ "account.name.copy": "העתקת הכינוי", "account.name.help.domain": "{domain} הוא השרת שמארח את פרופיל המשתמש(ת) וההודעות שכתב(ה).", "account.name.help.domain_self": "{domain} הוא השרת שמארח את פרופיל המשתמש(ת) שלך ואת ההודעות שכתבת.", - "account.name.help.footer": "באותו האופן שניתן לשלוח דואל לאנשים דרך ספקי דואל שונים, ניתן גם לעקוב ולהחליף מסרים עם אנשים בשרתי מסטודון אחרים, ומשתמשי יישומונים אחרים שתואמים למסטודון.", + "account.name.help.footer": "באותו האופן שניתן לשלוח דואל לאנשים דרך ספקי דואל שונים, ניתן גם לעקוב ולהחליף מסרים עם אנשים בשרתי מסטודון אחרים, ומשתמשי יישומוני פדיוורס אחרים.", "account.name.help.header": "כינוי הוא כמו כתובת דואל", "account.name.help.username": "{username} הוא שם המשתמש של החשבון בשרת שלהם. מישהו משרת אחר יכול להחזיק באותו שם משתמש.", "account.name.help.username_self": "{username} הוא שם המשתמש של החשבון שלכם בשרת זה. מישהו משרת אחר יכול להחזיק באותו שם משתמש.", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 675e147bd31b32..bca3270e810367 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -113,7 +113,7 @@ "account.name.copy": "Fióknév másolása", "account.name.help.domain": "A(z) {domain} a kiszolgáló, amely a felhasználó profilját és bejegyzéseit szolgálja ki.", "account.name.help.domain_self": "A(z) {domain} a kiszolgáló, amely a profilodat és bejegyzéseidet szolgálja ki.", - "account.name.help.footer": "Ahogy bárkinek küldhetsz e-mailt, annak is, aki más e-mail-szolgáltatót használ, úgy kapcsolatba léphetsz a más Mastodon-kiszolgálókon lévő emberekkel, és bárki mással, aki más Mastodonnal kompatibilis közösségimédia-alkalmazást használ.", + "account.name.help.footer": "Ahogy bárkinek küldhetsz e-mailt, annak is, aki más e-mail-szolgáltatót használ, úgy kapcsolatba léphetsz a más Mastodon-kiszolgálókon lévő emberekkel, és bárki mással, aki más Födiverzum-alkalmazást használ.", "account.name.help.header": "A fióknév olyan, mint egy e-mail-cím", "account.name.help.username": "Ez a fiók felhasználóneve a kiszolgálóján: {username}. Lehet, hogy másnak egy másik kiszolgálón ugyanez a felhasználóneve.", "account.name.help.username_self": "Ez a felhasználóneved ezen a kiszolgálón: {username}. Lehet, hogy másnak egy másik kiszolgálón ugyanez a felhasználóneve.", @@ -224,6 +224,9 @@ "account_edit.profile_tab.show_media.title": "„Média” lap megjelenítése", "account_edit.profile_tab.show_media_replies.description": "Ha engedélyezve van, akkor a Média lap megjeleníti a bejegyzéseidet és a mások bejegyzéseihez írt válaszaidat.", "account_edit.profile_tab.show_media_replies.title": "Válaszok megjelenítése a „Média” lapon", + "account_edit.profile_tab.show_relations.title": "„Követők” és „Követettek” megjelenítése", + "account_edit.profile_tab.subtitle": "A profil megjelenítésének testreszabása.", + "account_edit.profile_tab.title": "Profil megjelenítési beállításai", "account_edit.save": "Mentés", "account_edit.upload_modal.back": "Vissza", "account_edit.upload_modal.done": "Kész", @@ -251,6 +254,7 @@ "account_edit_tags.search_placeholder": "Hashtag megadása…", "account_edit_tags.suggestions": "Javaslatok:", "account_edit_tags.tag_status_count": "{count, plural, one {# bejegyzés} other {# bejegyzés}}", + "account_list.hidden_notice": "Ezt csak te látod. A lista másoknak való megjelenítéshez ugorj ide: {page} > {modal} > {field}.", "account_list.total": "{total, plural, one {# fiók} other {# fiók}}", "account_note.placeholder": "Kattintás jegyzet hozzáadásához", "admin.dashboard.daily_retention": "Napi regisztráció utáni felhasználómegtartási arány", @@ -393,6 +397,7 @@ "collections.detail.share": "Gyűjtemény megosztása", "collections.detail.you_are_in_this_collection": "Kiemeltek téged ebben a gyűjteményhez", "collections.edit_details": "Részletek szerkesztése", + "collections.error_loading_collections": "Hiba történt ezeknek a gyűjteményeknek a betöltése során.", "collections.hidden_accounts_description": "Blokkoltad vagy letiltottad {count, plural, one {ezt a felhasználót} other {ezeket a felhasználókat}}", "collections.hidden_accounts_link": "{count, plural, one {# rejtett fiók} other {# rejtett fiók}}", "collections.hints.accounts_counter": "{count}/{max} fiók", @@ -642,6 +647,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.featured_in": "Még nem adtak hozzá egyetlen gyűjteményhez sem.", "empty_column.community": "A helyi idővonal üres. Tégy közzé valamit nyilvánosan, hogy elindítsd az eseményeket!", "empty_column.direct": "Még nincs egy személyes említésed sem. Küldéskor vagy fogadáskor itt fognak megjelenni.", "empty_column.disabled_feed": "A kiszolgálód rendszergazdái letiltották ezt a hírfolyamot.", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index c035e899dca16e..cb87555cc30dec 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -113,7 +113,7 @@ "account.name.copy": "Afrita kennislóð", "account.name.help.domain": "{domain} er netþjónninn sem hýsir upplýsingasnið um notandann og færslurnar hans.", "account.name.help.domain_self": "{domain} er netþjónninn þinn sem hýsir upplýsingasniðið þitt og færslurnar þínar.", - "account.name.help.footer": "Rétt eins og þú getur sent tölvupóst til fólks sem notar aðrar póstþjónustur, þá geturðu átt í samskiptum við fólk á öðrum Mastodon-þjónum, auk annarra Mastodon-samhæfðra samfélagsmiðla.", + "account.name.help.footer": "Rétt eins og að þú getur sent tölvupóst á fólk í gegnum mismunandi þjónustur og forrit, þá getur þú átt í samskiptum við fólk á öðrum Mastodon-netþjónum, og reyndar við hverja þá sem eru á öðrum þeim forritum sem nota sömu samskiptareglur Fediverse-samfélagsins.", "account.name.help.header": "Kennislóð (handle) líkist tölvupóstfangi", "account.name.help.username": "{username} er notandanafn þessa aðgangs á netþjóni viðkomandi. Einhver annar á öðrum netþjóni getur verið með sama notandanafnið.", "account.name.help.username_self": "{username} er notandanafnið þitt á þessum netþjóni. Einhver annar á öðrum netþjóni getur verið með sama notandanafnið.", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 4da29542e11d58..3f9d5ad68881e4 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -113,7 +113,7 @@ "account.name.copy": "Copia il nome univoco", "account.name.help.domain": "{domain} è il server che ospita il profilo e i post dell'utente.", "account.name.help.domain_self": "{domain} è il tuo server che ospita il tuo profilo e i post.", - "account.name.help.footer": "Così come è possibile inviare email a persone che utilizzano diversi provider di posta elettronica, è altrettanto possibile interagire con persone su altri server Mastodon e con chiunque utilizzi altre app social compatibili con Mastodon.", + "account.name.help.footer": "Così come è possibile inviare email a persone che utilizzano diversi provider di posta elettronica, è altrettanto possibile interagire con persone su altri server Mastodon e con chiunque su altre app del fediverso.", "account.name.help.header": "Un nome univoco è come un indirizzo email", "account.name.help.username": "{username} è il nome utente di questo account sul suo server. Qualcuno su un altro server potrebbe avere lo stesso nome utente.", "account.name.help.username_self": "{username} è il tuo nome utente su questo server. Qualcuno su un altro server potrebbe avere lo stesso nome utente.", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index c0daf196bc4903..45045e2b06710a 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -185,7 +185,7 @@ "annual_report.summary.share_on_mastodon": "마스토돈에 공유하기", "attachments_list.unprocessed": "(처리 안 됨)", "audio.hide": "소리 숨기기", - "block_modal.remote_users_caveat": "{domain} 서버에 요청을 보냈습니다. 하지만 일부 서버는 차단 처리 방식이 달라 반영되지 않을 수 있습니다. 또한 공개 게시물은 로그인하지 않은 사용자들에게 계속 노출될 수 있습니다.", + "block_modal.remote_users_caveat": "우리는 {domain} 서버가 당신의 결정을 존중해 주길 부탁할 것입니다. 하지만 몇몇 서버는 차단을 다르게 취급할 수 있기 때문에 규정이 준수되는 것을 보장할 수는 없습니다. 공개 게시물은 로그인 하지 않은 사용자들에게 여전히 보여질 수 있습니다.", "block_modal.show_less": "간략히 보기", "block_modal.show_more": "더 보기", "block_modal.they_cant_mention": "나를 멘션하거나 팔로우 할 수 없습니다.", diff --git a/app/javascript/mastodon/locales/nan-TW.json b/app/javascript/mastodon/locales/nan-TW.json index a1036662c5ec53..fe74b24abde05b 100644 --- a/app/javascript/mastodon/locales/nan-TW.json +++ b/app/javascript/mastodon/locales/nan-TW.json @@ -113,7 +113,7 @@ "account.name.copy": "Khóo-pih口座ê名", "account.name.help.domain": "", "account.name.help.domain_self": "{domain} 是管理lí ê個人資料hām PO文ê服侍器。", - "account.name.help.footer": "就像lí通寄電子phue予用無kâng電子批服務者ê儂kâng款,lí ē當hām佇無kâng Mastodon服侍器ê,kap佇其他相容Mastodon ê社群軟體ê lâng互動。", + "account.name.help.footer": "就像lí通寄電子phue予用無kâng電子批服務者ê儂kâng款,lí ē當hām佇無kâng Mastodon服侍器ê,kap佇其他聯邦宇宙ê lâng互動。", "account.name.help.header": "@handle 親像電子批地址", "account.name.help.username": "{username} 是tsit ê口座佇in ê服侍器ê用者名。佇別ê服侍器可能有kâng名ê別lâng。", "account.name.help.username_self": "{username} 是lí ê口座佇tsit ê服侍器ê用者名。佇別ê服侍器可能有kâng名ê別lâng。", @@ -128,6 +128,7 @@ "account.note.edit_button": "編輯", "account.note.title": "私人ê筆記(kan-ta lí ē當看)", "account.open_original_page": "開原來ê頁", + "account.pending": "Teh審核", "account.posts": "PO文", "account.remove_from_followers": "Kā {name} tuì跟tuè lí ê ê內底suá掉", "account.report": "檢舉 @{name}", @@ -223,6 +224,10 @@ "account_edit.profile_tab.show_media.title": "展示「媒體」分頁", "account_edit.profile_tab.show_media_replies.description": "若是啟用,媒體分頁展示lí ê PO文kap對別lâng ê PO文ê回應。", "account_edit.profile_tab.show_media_replies.title": "佇媒體分頁內包含回應", + "account_edit.profile_tab.show_relations.description": "佇lí ê個人資料內底,展示lí跟tuè ê口座kap跟tuè lí ê予別lâng看。Lâng iáu是ē當看見lí敢有跟tuè伊。", + "account_edit.profile_tab.show_relations.title": "展示「跟tuè伊ê」kap「伊跟tuè ê」", + "account_edit.profile_tab.subtitle": "自訂lí ê個人檔案顯示ê方法。", + "account_edit.profile_tab.title": "個人資料顯示設定", "account_edit.save": "儲存", "account_edit.upload_modal.back": "轉去", "account_edit.upload_modal.done": "做好ah", @@ -250,6 +255,7 @@ "account_edit_tags.search_placeholder": "編輯hashtag……", "account_edit_tags.suggestions": "建議:", "account_edit_tags.tag_status_count": "{count, plural, other {# 篇PO文}}", + "account_list.hidden_notice": "Tse kan-ta lí ē當看。若beh kā tsit ê列單予別lâng看,請kàu {page} > {modal} > {field}。", "account_list.total": "{total, plural, other {# ê口座}}", "account_note.placeholder": "Tshi̍h tse加註kha", "admin.dashboard.daily_retention": "註冊以後ê用者維持率(用kang計算)", @@ -392,10 +398,15 @@ "collections.detail.share": "分享tsit ê收藏", "collections.detail.you_are_in_this_collection": "Lí已經hőng加kàu tsit ê收藏", "collections.edit_details": "編輯詳細", + "collections.error_loading_collections": "佇試載入tsiah ê收藏ê時陣起錯誤。", "collections.hidden_accounts_description": "您有封鎖á是靜音{count, plural, one {tsit ê用者} other {tsiah ê用者}}", "collections.hidden_accounts_link": "{count, plural, other {# ê隱藏ê口座}}", "collections.hints.accounts_counter": "{count}/{max} ê口座", "collections.last_updated_at": "上尾更新tī:{date}", + "collections.list.collections_with_count": "{count, plural, other {# 篇收藏}}", + "collections.list.created_by_author": "由 {name} 所開", + "collections.list.created_by_you": "由lí所開", + "collections.list.featuring_you": "Lí佇收藏內底", "collections.manage_accounts": "管理口座", "collections.mark_as_sensitive": "標做敏感ê", "collections.mark_as_sensitive_hint": "Kā收藏ê描述kap口座tshàng佇內容警告ê後壁。收藏ê名猶原會當看。", @@ -403,6 +414,7 @@ "collections.maximum_collection_count_reached": "Lí已經建立kàu收藏數ê盡磅ah", "collections.name_length_hint": "限制 40 字", "collections.new_collection": "新ê收藏", + "collections.pending_accounts.message": "佇guán leh等對用者iáu是in ê服侍器來ê回應ê時陣,口座可能ē顯示做等beh處理ê狀態。Kan-ta lí ē當看見等beh處理ê口座。", "collections.remove_account": "Suá掉", "collections.report_collection": "檢舉tsit ê收藏", "collections.revoke_collection_inclusion": "Kā我對收藏內底suá掉", @@ -739,8 +751,8 @@ "hashtag.column_settings.tag_mode.none": "Lóng mài", "hashtag.column_settings.tag_toggle": "Kā追加ê標籤加添kàu tsit ê欄", "hashtag.counter_by_accounts": "{count, plural, one {{counter} ê} other {{counter} ê}}參與ê", - "hashtag.counter_by_uses": "{count, plural, one {{counter} 篇} other {{counter} 篇}} PO文", - "hashtag.counter_by_uses_today": "Kin-á日有 {count, plural, one {{counter} 篇} other {{counter} 篇}} PO文", + "hashtag.counter_by_uses": "{count, plural, other {{counter} 篇PO文}}", + "hashtag.counter_by_uses_today": "Kin-á日有 {count, plural, one {{counter} 篇} other {{counter} 篇}}PO文", "hashtag.feature": "Tī個人資料推薦", "hashtag.follow": "跟tuè hashtag", "hashtag.mute": "消音 #{hashtag}", @@ -834,7 +846,7 @@ "limited_account_hint.title": "Tsit ê 個人資料予 {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文", + "link_preview.shares": "{count, plural, one {{counter} 篇} other {{counter} 篇}}PO文", "lists.add_member": "加", "lists.add_to_list": "加添kàu列單", "lists.add_to_lists": "Kā {name} 加添kàu列單", @@ -1215,7 +1227,7 @@ "status.edited_x_times": "有編輯 {count, plural, one {{count} kái} other {{count} kái}}", "status.embed": "The̍h相tàu ê (embed)程式碼", "status.favourite": "收藏", - "status.favourites_count": "{count, plural, one {{counter} 篇} other {{counter} 篇}} 收藏", + "status.favourites_count": "{count, plural, one {{counter} 篇} other {{counter} 篇}}收藏", "status.filter": "過濾tsit 篇 PO文", "status.history.created": "{name} 佇 {date} 建立", "status.history.edited": "{name} 佇 {date} 編輯", @@ -1249,14 +1261,14 @@ "status.quotes.empty": "Iáu無lâng引用tsit篇PO文。Nā是有lâng引用,ē佇tsia顯示。.", "status.quotes.local_other_disclaimer": "Hōo作者拒絕引用ê引文bē當顯示。", "status.quotes.remote_other_disclaimer": "Kan-ta tuì {domain} 來ê引文tsiah保證佇tsia顯示。Hōo作者拒絕ê引文buē顯示。", - "status.quotes_count": "{count, plural, one {{counter} 篇} other {{counter} 篇}} 引用", + "status.quotes_count": "{count, plural, one {{counter} 篇} other {{counter} 篇}}引用", "status.read_more": "讀詳細", "status.reblog": "轉送", "status.reblog_or_quote": "轉送á是引用", "status.reblog_private": "Koh再hām跟tuè ê分享", "status.reblogged_by": "{name} kā轉送ah", "status.reblogs.empty": "Iáu無lâng轉送tsit篇PO文。Nā是有lâng轉送,ē佇tsia顯示。", - "status.reblogs_count": "{count, plural, one {{counter} 篇} other {{counter} 篇}} 轉送", + "status.reblogs_count": "{count, plural, one {{counter} 篇} other {{counter} 篇}}轉送", "status.redraft": "Thâi掉了後重寫", "status.remove_bookmark": "Thâi掉冊籤", "status.remove_favourite": "Tuì收藏內suá掉", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 67173f6eae0e2e..819433d12f8b1e 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -113,7 +113,6 @@ "account.name.copy": "Fediverse-adres kopiëren", "account.name.help.domain": "{domain} is de server waar zich het profiel en de berichten van de gebruiker bevinden.", "account.name.help.domain_self": "{domain} is jouw server waar zich jouw profiel en berichten bevinden.", - "account.name.help.footer": "Net zoals je e-mails kunt verzenden naar mensen met verschillende e-mailproviders, kun je interactie hebben met mensen op andere Mastodon-servers en met iedereen op andere sociale apps die met Mastodon compatibel zijn.", "account.name.help.header": "Een fediverse-adres valt te vergelijken met een e-mailadres", "account.name.help.username": "{username} is de gebruikersnaam van het account op hun server. Het is mogelijk dat iemand anders dezelfde gebruikersnaam op een andere server heeft.", "account.name.help.username_self": "{username} is jouw gebruikersnaam op deze server. Het is mogelijk dat iemand anders dezelfde gebruikersnaam op een andere server heeft.", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 99becf0916be61..47a9325ba0cc98 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -113,7 +113,7 @@ "account.name.copy": "Copiar usuário", "account.name.help.domain": "{domain} é o servidor que hospeda o perfil e publicações do usuário.", "account.name.help.domain_self": "{domain} é o seu servidor que hospeda seu perfil e publicações.", - "account.name.help.footer": "Assim como você pode enviar emails para pessoas que usam diferentes provedores de email, você pode interagir com pessoas em outros servidores de Mastodon, e com qualquer um em outros aplicativos sociais compatíveis com Mastodon.", + "account.name.help.footer": "Assim como pode enviar e-mails para pessoas usando diferentes provedores de e-mail, você pode interagir com pessoas em outros servidor do Mastodon, e com qualquer um em outros apps da Fediverse.", "account.name.help.header": "Um identificador é como um endereço de endereço eletrônico", "account.name.help.username": "{username} é o nome de usuário da conta neste servidor. Alguém em outro servidor pode ter o mesmo nome de usuário.", "account.name.help.username_self": "{username} é seu nome de usuário neste servidor. Alguém em outro servidor pode ter o mesmo nome de usuário.", @@ -128,6 +128,7 @@ "account.note.edit_button": "Editar", "account.note.title": "Nota pessoal (visível apenas para você)", "account.open_original_page": "Abrir a página original", + "account.pending": "Pendente", "account.posts": "Publicações", "account.remove_from_followers": "Remover {name} dos seguidores", "account.report": "Denunciar @{name}", @@ -223,6 +224,10 @@ "account_edit.profile_tab.show_media.title": "Mostrar aba \"Mídia\"", "account_edit.profile_tab.show_media_replies.description": "Quando ativa, a aba Mídia mostra seus posts e respostas nos posts de outras pessoas.", "account_edit.profile_tab.show_media_replies.title": "Incluir respostas na aba \"Mídia\"", + "account_edit.profile_tab.show_relations.description": "Exibe contas que segue e seguidores para outros usuários no seu perfil. As pessoas poderão ainda ver se você está as seguindo.", + "account_edit.profile_tab.show_relations.title": "Exibir 'Seguidores' e 'Seguindo'", + "account_edit.profile_tab.subtitle": "Customizar como seu perfil é exibido.", + "account_edit.profile_tab.title": "Configurações de exibição do perfil", "account_edit.save": "Salvar", "account_edit.upload_modal.back": "Voltar", "account_edit.upload_modal.done": "Concluído", @@ -250,6 +255,7 @@ "account_edit_tags.search_placeholder": "Insira uma hashtag…", "account_edit_tags.suggestions": "Sugestões:", "account_edit_tags.tag_status_count": "{count, plural, one {# publicação} other {# publicações}}", + "account_list.hidden_notice": "Isto é apenas visível a ti. Para mostrar essa lista aos outros, vá a {page} > {modal} > {field}.", "account_list.total": "{total, plural,one {#conta}other {#contas}}", "account_note.placeholder": "Nota pessoal sobre este perfil aqui", "admin.dashboard.daily_retention": "Taxa de retenção de usuários por dia, após a inscrição", @@ -392,10 +398,15 @@ "collections.detail.share": "Compartilhar esta coleção", "collections.detail.you_are_in_this_collection": "Você aparece nesta coleção", "collections.edit_details": "Editar detalhes", + "collections.error_loading_collections": "Houve um erro ao tentar carregar essas coleções.", "collections.hidden_accounts_description": "Você bloqueou ou silencilou {count, plural, one{este usuário} other {estes usuários}}", "collections.hidden_accounts_link": "{count, plural, one {# conta oculta} other {# contas ocultas}}", "collections.hints.accounts_counter": "{count}/{max} contas", "collections.last_updated_at": "Atualizado pela última vez em {date}", + "collections.list.collections_with_count": "{count, plural, one {# Coleção} other {# Coleções}}", + "collections.list.created_by_author": "Criado por {name}", + "collections.list.created_by_you": "Criadas por você", + "collections.list.featuring_you": "Apresentado por ti", "collections.manage_accounts": "Gerenciar contas", "collections.mark_as_sensitive": "Marcar como sensível", "collections.mark_as_sensitive_hint": "Oculta a descrição e as contas da coleção por trás de um aviso de conteúdo. O nome da coleção ainda será visível.", @@ -403,6 +414,8 @@ "collections.maximum_collection_count_reached": "Você criou a quantidade máxima de coleções", "collections.name_length_hint": "limite de 40 caracteres", "collections.new_collection": "Nova coleção", + "collections.pending_accounts.message": "Contas podem aparecer como pendentes quando estamos aguardando uma resposta do usuário ou de seu servidor. Apenas você pode ver contas pendentes.", + "collections.pending_accounts.title": "Por que estou vendo contas pendentes?", "collections.remove_account": "Remover", "collections.report_collection": "Denunciar esta coleção", "collections.revoke_collection_inclusion": "Remover-me desta coleção", @@ -448,6 +461,7 @@ "column.other_collections": "Coleções de {name}", "column.pins": "Publicações fixadas", "column.public": "Linha global", + "column.your_collections": "Suas Coleções", "column_back_button.label": "Voltar", "column_header.hide_settings": "Ocultar configurações", "column_header.moveLeft_settings": "Mover coluna para a esquerda", @@ -634,6 +648,7 @@ "empty_column.account_unavailable": "Perfil indisponível", "empty_column.blocks": "Nada aqui.", "empty_column.bookmarked_statuses": "Nada aqui. Quando você salvar uma publicação, ela aparecerá aqui.", + "empty_column.collections.featured_in": "Você ainda não foi adicionado a nenhuma coleção.", "empty_column.community": "A linha local está vazia. Publique algo para começar!", "empty_column.direct": "Você ainda não tem mensagens privadas. Quando você enviar ou receber uma, será exibida aqui.", "empty_column.disabled_feed": "Este feed foi desativado pelos administradores de seu servidor.", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index b5e49b090e3be9..e361651c02889f 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -103,7 +103,6 @@ "account.name.copy": "Copiar identificador", "account.name.help.domain": "{domain} é o servidor onde estão alojados o perfil e publicações do utilizador.", "account.name.help.domain_self": "{domain} é o servidor que hospeda o teu perfil e publicações.", - "account.name.help.footer": "Tal como podes enviar e-mails a pessoas que utilizam diferentes serviços de e-mail, podes interagir com pessoas noutros servidores Mastodon e com qualquer pessoa noutras aplicações sociais compatíveis com o Mastodon.", "account.name.help.header": "Um identificador é como um endereço de correio eletrónico", "account.name.help.username": "{username} é o nome de utilizador desta conta no seu servidor. Alguém pode ter o mesmo nome de utilizador noutro servidor.", "account.name.help.username_self": "{username} é o teu nome de utilizador neste servidor. Alguém pode ter o mesmo nome de utilizador noutro servidor.", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 3e7f274aa51976..108f59ac11aed9 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -112,7 +112,7 @@ "account.mutual": "Ndiqni njëri-tjetrin", "account.name.help.domain": "{domain} është shërbyesi që strehon profilin dhe postimet e përdoruesit.", "account.name.help.domain_self": "{domain} është shërbyesi juaj që strehon profilin dhe postimet tuaja.", - "account.name.help.footer": "Ashtu siç mund të dërgoni email-e te persona që përdorin shërbime të ndryshëm email-i, mund të ndërveproni me persona në shërbyes të tjerë Mastodon dhe me këdo në aplikacione të tjerë shoqërorë të përputhshëm me Mastodon-in.", + "account.name.help.footer": "Ashtu si mund të dërgoni email-e te persona që përdorin shërbime të ndryshme email-i, ashtu mund të ndërveproni me persona në shërbyes të tjerë Mastodon dhe me këdo në aplikacione të tjerë Fediverse.", "account.name.help.header": "Handle-i është i ngashëm me një adresë email", "account.name.help.username": "{username} është emri i përdoruesit të kësaj llogarie në shërbyesin e tij. Dikush në një tjetër shërbyes mund të ketë të njëjtin emër përdoruesi.", "account.name.help.username_self": "{username} është emri juaj i përdoruesit në këtë shërbyes. Dikush në një tjetër shërbyes mund të ketë të njëjtin emër përdoruesi.", @@ -222,6 +222,10 @@ "account_edit.profile_tab.show_media.title": "Shfaq skedë “Media”", "account_edit.profile_tab.show_media_replies.description": "Kur aktivizohet, skeda Media shfaq si postimet tuaja, ashtu edhe përgjigje te postime nga persona të tjerë.", "account_edit.profile_tab.show_media_replies.title": "Përfshi te skeda “Media” përgjigje", + "account_edit.profile_tab.show_relations.description": "Bën shfaqjen në profilin tuaj të llogarive që ndiqni dhe ndjekës te përdorues të tjerë. Personat do të jenë prapë në gjendje të shohin nëse i ndiqni a jo.", + "account_edit.profile_tab.show_relations.title": "Shfaq “Ndjekës” dhe “Të ndjekur”", + "account_edit.profile_tab.subtitle": "Përshtatni si shfaqet profili juaj.", + "account_edit.profile_tab.title": "Rregullime shfaqjeje profili", "account_edit.save": "Ruaje", "account_edit.upload_modal.back": "Mbrapsht", "account_edit.upload_modal.done": "U bë", @@ -249,6 +253,7 @@ "account_edit_tags.search_placeholder": "Jepni një hashtag…", "account_edit_tags.suggestions": "Sugjerime:", "account_edit_tags.tag_status_count": "{count, plural, one {# postim} other {# postime}}", + "account_list.hidden_notice": "Kjo është e dukshme vetëm për ju. Që t’ua shfaqni këtë listë të tjerëve, kaloni te {page} > {modal} > {field}.", "account_list.total": "{total, plural, one {# llogari} other {# llogari}}", "account_note.placeholder": "Klikoni për të shtuar shënim", "admin.dashboard.daily_retention": "Shkallë mbajtjeje përdoruesi, në ditë, pas regjistrimit", @@ -388,6 +393,7 @@ "collections.detail.share": "Ndajeni këtë koleksion me të tjerë", "collections.detail.you_are_in_this_collection": "Shfaqeni te ky koleksion", "collections.edit_details": "Përpunoni hollësi", + "collections.error_loading_collections": "Pati një gabim teksa provohej të ngarkoheshin këto koleksione.", "collections.hidden_accounts_description": "Bllokuat, ose heshtuat {count, plural, one {këtë përdorues} other {këta përdorues}}", "collections.hidden_accounts_link": "{count, plural, one {# llogari e fshehur} other {# llogari të fshehura}}", "collections.hints.accounts_counter": "{count}/{max} llogari", @@ -637,6 +643,7 @@ "empty_column.account_unavailable": "Profil jashtë funksionimi", "empty_column.blocks": "S’keni bllokuar ende ndonjë përdorues.", "empty_column.bookmarked_statuses": "S’keni faqeruajtur ende ndonjë mesazh. Kur faqeruani një të tillë, ai do të shfaqet këtu.", + "empty_column.collections.featured_in": "S’jeni shtuar ende te ndonjë koleksion.", "empty_column.community": "Rrjedha kohore vendore është e zbrazët. Shkruani diçka publikisht që t’i hyhet valles!", "empty_column.direct": "S’keni ende ndonjë përmendje private. Kur dërgoni ose merrni një të tillë, do të shfaqet këtu.", "empty_column.disabled_feed": "Kjo prurje është çaktivizuar nga përgjegjësit e shërbyesit tuaj.", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 93b62f8af5f4b0..8f9fa4ce1321df 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -113,7 +113,6 @@ "account.name.copy": "Kopiera handtag", "account.name.help.domain": "{domain} är servern som är värd för användarens profil och inlägg.", "account.name.help.domain_self": "{domain} är din server som är värd för användarens profil och inlägg.", - "account.name.help.footer": "Precis som du kan skicka e-post till personer som använder olika e-postleverantörer, kan du interagera med personer på andra Mastodon-servrar, och med vem som helst på andra Mastodon-kompatibla sociala appar.", "account.name.help.header": "Ett handtag är som en e-postadress", "account.name.help.username": "{username} är kontots användarnamn på deras server. Någon på en annan server kan ha samma användarnamn.", "account.name.help.username_self": "{username} är ditt användarnamn på denna server. Någon på en annan server kan ha samma användarnamn.", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index 96d1e9a8cde294..889618412a99b8 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -113,7 +113,6 @@ "account.name.copy": "İsmi Kopyala", "account.name.help.domain": "{domain} kullanıcının profilini ve gönderilerini barındıran sunucudur.", "account.name.help.domain_self": "{domain} profilinizi ve gönderilerinizi barındıran sunucunuzdur.", - "account.name.help.footer": "Tıpkı farklı e-posta sağlayıcılarını kullanan kişilere e-posta gönderebileceğiniz gibi, diğer Mastodon sunucularındaki kullanıcılarla ve diğer Mastodon uyumlu sosyal uygulamalardaki herkesle etkileşim kurabilirsiniz.", "account.name.help.header": "Takma ad bir e-posta adresi gibidir", "account.name.help.username": "{username} bu hesabın sunucudaki kullanıcı adıdır. Başka bir sunucudaki başka bir kişi de aynı kullanıcı adına sahip olabilir.", "account.name.help.username_self": "{username} bu sunucudaki kullanıcı adınızdır. Başka bir sunucudaki başka bir kullanıcı da aynı kullanıcı adına sahip olabilir.", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index c88f1f4bfaaaf5..4f32b1b533ff30 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -113,7 +113,7 @@ "account.name.copy": "Sao chép địa chỉ", "account.name.help.domain": "{domain} là máy chủ lưu trữ hồ sơ và tút của tài khoản.", "account.name.help.domain_self": "{domain} là máy chủ lưu trữ hồ sơ và tút của bạn.", - "account.name.help.footer": "Giống như việc bạn có thể gửi email cho những người sử dụng các nhà cung cấp email khác nhau, bạn cũng có thể tương tác với những người trên các máy chủ Mastodon khác và với bất kỳ ai trên các ứng dụng mạng xã hội tương thích với Mastodon khác.", + "account.name.help.footer": "Giống như việc bạn có thể gửi email cho những người sử dụng các nhà cung cấp email khác nhau, bạn cũng có thể tương tác với những người trên các máy chủ Mastodon khác và với bất kỳ ai trên các ứng dụng Fediverse khác.", "account.name.help.header": "Một địa chỉ giống như địa chỉ email", "account.name.help.username": "{username} là tên người dùng duy nhất trên máy chủ này. Các máy chủ khác có thể cũng có tên người dùng giống vậy.", "account.name.help.username_self": "{username} là tên người dùng của bạn trên máy chủ này. Các máy chủ khác cũng có thể có tên người dùng giống bạn.", @@ -171,7 +171,7 @@ "account_edit.display_name.placeholder": "Tên gọi là tên hiển thị trên hồ sơ của bạn và bảng tin.", "account_edit.display_name.title": "Tên gọi", "account_edit.featured_hashtags.edit_label": "Thêm hashtag", - "account_edit.featured_hashtags.placeholder": "Giúp mọi người nhận diện và truy cập nhanh những chủ đề mà bạn thích.", + "account_edit.featured_hashtags.placeholder": "Giúp mọi người xác định và truy cập nhanh những chủ đề mà bạn thích.", "account_edit.featured_hashtags.title": "Hashtag thường dùng", "account_edit.field_actions.delete": "Xóa trường", "account_edit.field_actions.edit": "Sửa trường", @@ -224,6 +224,10 @@ "account_edit.profile_tab.show_media.title": "Hiện tab ‘Phương tiện’", "account_edit.profile_tab.show_media_replies.description": "Nếu bật, tab Phương tiện sẽ hiện cả những tút của bạn lẫn những trả lời tới tút của người khác.", "account_edit.profile_tab.show_media_replies.title": "Bao gồm tút dạng trả lời trong tab ‘Phương tiện’", + "account_edit.profile_tab.show_relations.description": "Hiển thị các tài khoản bạn theo dõi và những người bạn đang theo dõi trên hồ sơ của bạn. Mọi người vẫn có thể thấy liệu bạn có đang theo dõi họ hay không.", + "account_edit.profile_tab.show_relations.title": "Hiện ‘Người theo dõi’ và ‘Đang theo dõi’", + "account_edit.profile_tab.subtitle": "Tùy chỉnh cách hiển thị hồ sơ của bạn.", + "account_edit.profile_tab.title": "Thiết lập hồ sơ", "account_edit.save": "Lưu", "account_edit.upload_modal.back": "Quay lại", "account_edit.upload_modal.done": "Xong", @@ -251,6 +255,7 @@ "account_edit_tags.search_placeholder": "Nhập một hashtag…", "account_edit_tags.suggestions": "Được đề xuất:", "account_edit_tags.tag_status_count": "{count, plural, other {# tút}}", + "account_list.hidden_notice": "Chỉ bạn mới thấy. Để hiển thị danh sách này cho người khác, hãy vào {page} > {modal} > {field}.", "account_list.total": "{total, plural, other {# tài khoản}}", "account_note.placeholder": "Nhấn để thêm", "admin.dashboard.daily_retention": "Tỉ lệ người dùng sau đăng ký ở lại theo ngày", @@ -409,6 +414,8 @@ "collections.maximum_collection_count_reached": "Bạn đã đạt đến số lượng gói khởi đầu tối đa", "collections.name_length_hint": "Giới hạn 40 ký tự", "collections.new_collection": "Gói khởi đầu mới", + "collections.pending_accounts.message": "Tài khoản có thể hiển thị trạng thái chờ duyệt khi chúng tôi đang chờ phản hồi từ người dùng hoặc máy chủ của họ. Chỉ bạn mới có thể xem được các tài khoản đang chờ duyệt.", + "collections.pending_accounts.title": "Vì sao tôi thấy những tài khoản đang chờ duyệt?", "collections.remove_account": "Gỡ", "collections.report_collection": "Báo cáo gói khởi đầu này", "collections.revoke_collection_inclusion": "Xóa tôi khỏi gói khởi đầu này", @@ -422,13 +429,13 @@ "collections.suggestions.can_not_add_desc": "Những tài khoản này không muốn khám phá, hoặc họ ở trên máy chủ chưa hỗ trợ gói khởi đầu.", "collections.suggestions.must_follow": "Cần theo dõi trước", "collections.suggestions.must_follow_desc": "Những tài khoản này phê duyệt yêu cầu theo dõi. Người theo dõi mới có thể thêm họ vào gói khởi đầu.", - "collections.topic_hint": "Thêm hashtag giúp người khác hiểu chủ đề chính của gói khởi đầu này.", + "collections.topic_hint": "Thêm hashtag giúp mọi người hiểu chủ đề chính của gói khởi đầu này.", "collections.topic_special_chars_hint": "Những ký tự đặc biệt sẽ bị xóa khi lưu", "collections.unlisted_collections_description": "Những thông tin này sẽ không hiển thị trên hồ sơ của bạn. Bất cứ ai có liên kết đều có thể tìm thấy chúng.", "collections.unlisted_collections_with_count": "Gói khởi đầu hạn chế ({count})", "collections.view_collection": "Xem gói khởi đầu", "collections.visibility_public": "Công khai", - "collections.visibility_public_hint": "Có thể tìm thấy trong kết quả tìm kiếm và các khu vực khác nơi xuất hiện đề xuất.", + "collections.visibility_public_hint": "Có thể tìm thấy trong kết quả tìm kiếm và các khu vực đề xuất khác.", "collections.visibility_title": "Hiển thị", "collections.visibility_unlisted": "Hạn chế", "collections.visibility_unlisted_hint": "Hiển thị cho bất kỳ ai có liên kết. Ẩn khỏi kết quả tìm kiếm và đề xuất.", @@ -1092,7 +1099,7 @@ "quote_error.upload": "Không thể trích dẫn với media đính kèm.", "recommended": "Đề xuất", "refresh": "Làm mới", - "regeneration_indicator.please_stand_by": "Hãy chờ đã.", + "regeneration_indicator.please_stand_by": "Chờ một tý.", "regeneration_indicator.preparing_your_home_feed": "Đang chuẩn bị bảng tin…", "relative_time.days": "{number} ngày", "relative_time.full.days": "{number, plural, other {# ngày}}", @@ -1210,7 +1217,7 @@ "status.block": "Chặn @{name}", "status.bookmark": "Lưu", "status.cancel_reblog_private": "Bỏ đăng lại", - "status.cannot_quote": "Bạn không được phép trích dẫn tút này", + "status.cannot_quote": "Bạn không thể trích dẫn tút này", "status.cannot_reblog": "Không thể đăng lại tút này", "status.contains_quote": "Chứa trích dẫn", "status.context.loading": "Tải thêm các trả lời", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index a1b3b4eedabb56..e8d207b37be596 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -113,7 +113,7 @@ "account.name.copy": "复制用户名", "account.name.help.domain": "{domain} 是托管该用户个人资料及嘟文的服务器。", "account.name.help.domain_self": "{domain} 是托管你的个人资料及嘟文的服务器。", - "account.name.help.footer": "就像你可以用不同的电子邮箱向其他人发送同样的电子邮件一般,你也可以和其他 Mastodon 服务器上的用户互动,甚至还能和与 Mastodon 兼容的其他社交软件上的任何人互动。", + "account.name.help.footer": "就像你可以用不同的电子邮箱向其他人发送同样的电子邮件一般,你也可以和其他 Mastodon 服务器上的用户互动,甚至还能和与其他联邦宇宙软件上的任何人互动。", "account.name.help.header": "用户名类似电子邮件地址", "account.name.help.username": "{username} 是此账号在其服务器上的用户名。另一个服务器上的其他人可能拥有相同的用户名。", "account.name.help.username_self": "{username} 是你在此服务器上的用户名。另一个服务器上的其他人可能拥有相同的用户名。", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 92f685c4d49960..b9e3a6b9bb6b58 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -113,7 +113,7 @@ "account.name.copy": "複製帳號", "account.name.help.domain": "{domain} 為託管此使用者個人檔案與嘟文之伺服器。", "account.name.help.domain_self": "{domain} 為託管您個人檔案與嘟文之伺服器。", - "account.name.help.footer": "就像是您能與使用不同電子郵件提供商的其他人互動一般,您能與其他 Mastodon 伺服器上的人們互動,也能與其他 Mastodon 相容社群軟體上的任何人互動。", + "account.name.help.footer": "就像是您能與使用不同電子郵件提供商的其他人互動一般,您能與其他 Mastodon 伺服器上的人們互動,也能與其他 Fediverse 上的任何人互動。", "account.name.help.header": "@handle 就像是 email 地址一樣", "account.name.help.username": "{username} 為該使用者於他們伺服器上的帳號名稱。其他伺服器上的某個人可能擁有一樣的使用者名稱。", "account.name.help.username_self": "{username} 為您於此伺服器上的帳號名稱。其他伺服器上的某個人可能擁有一樣的使用者名稱。", @@ -224,6 +224,10 @@ "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.description": "於您的個人檔案中顯示您正在跟隨中之帳號與您的跟隨者。其他人仍可見您正在跟隨他們。", + "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": "完成", @@ -251,6 +255,7 @@ "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 {# 個帳號}}", "account_note.placeholder": "點擊以新增備註", "admin.dashboard.daily_retention": "註冊後使用者存留率(日)", @@ -393,6 +398,7 @@ "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} 個帳號", @@ -400,6 +406,7 @@ "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": "將此收藏名單之說明隱藏於內容警告之後。此收藏名單名稱仍將可見。", @@ -407,6 +414,8 @@ "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": "將我自此收藏名單中移除", @@ -639,6 +648,7 @@ "empty_column.account_unavailable": "無法取得個人檔案", "empty_column.blocks": "您尚未封鎖任何使用者。", "empty_column.bookmarked_statuses": "您還沒有新增任何書籤。當您新增書籤時,它將於此顯示。", + "empty_column.collections.featured_in": "您尚未被加入至任何收藏名單。", "empty_column.community": "本站時間軸是空的。快公開嘟些文搶頭香啊!", "empty_column.direct": "您還沒有收到任何私訊。當您私訊別人或收到私訊時,它將於此顯示。", "empty_column.disabled_feed": "此內容已被您的伺服器管理員停用。", diff --git a/config/locales/be.yml b/config/locales/be.yml index 2e5fe1c8d92561..232c0186b55386 100644 --- a/config/locales/be.yml +++ b/config/locales/be.yml @@ -1815,6 +1815,29 @@ be: 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: + few: "%{name} і %{count} іншых зарэгістраваліся" + many: "%{name} і %{count} іншых зарэгістраваліся" + one: "%{name} і 1 іншы(-ая) зарэгістраваліся" + other: "%{name} і %{count} іншыя зарэгістраваліся" + title_html: "%{name} зарэгістраваўся(-лась)" + collection_update: + title_html: "%{name} абнавіў(-ла) калекцыю, у якой ёсць Вы" + generic: + sign_in: Увайсці ў вэб-праграму Mastodon + summary_html: Вы знаходзіцеся ў праграме, якая не падтрымлівае апошнія версіі Mastodon. %{link}, каб атрымаць поўную функцыянальнасць. + moderation_warning: + summary_html: Вы знаходзіцеся ў праграме, якая не падтрымлівае апошнія версіі Mastodon. %{link}. + title: Вы атрымалі папярэджанне ад мадэратараў. + severed_relationships: + summary_html: Адміністратар %{from} заблакіраваў %{target}, і гэта азначае, што Вы больш не зможаце атрымліваць ад гэтага карыстальніка абнаўленні або ўзаемадзейнічаць з ім. %{link}, каб атрымаць спіс страчаных адносін. + title: Страчаная сувязь з %{name} notification_mailer: admin: report: diff --git a/config/locales/de.yml b/config/locales/de.yml index 6604c28fd5ae3a..40e3df1c8b37c2 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -1842,7 +1842,7 @@ de: explanation: Diese Einstellungen werden standardmäßig für neue Beiträge verwendet, aber du kannst sie für jeden Beitrag individuell anpassen. preferences: other: Erweitert - posting_defaults: Standardeinstellungen für Beiträge + posting_defaults: Beiträge public_timelines: Öffentliche Timelines privacy: email_subscriptions: Sende Beiträge per E-Mail diff --git a/config/locales/doorkeeper.bg.yml b/config/locales/doorkeeper.bg.yml index ed4761badd9b9f..c86f05053d34f3 100644 --- a/config/locales/doorkeeper.bg.yml +++ b/config/locales/doorkeeper.bg.yml @@ -150,19 +150,19 @@ bg: scopes: admin:read: прочит на всички данни на сървъра admin:read:accounts: прочит на деликатна информация от всички акаунти - admin:read:canonical_email_blocks: четене на деликатна информация на всички канонични блокирания на е-поща + admin:read:canonical_email_blocks: четене на деликатна информация на всички блокирани е-мейли admin:read:domain_allows: четене на деликатна информация на всички домейни позволено - admin:read:domain_blocks: четене на деликатна информация на всички домейни блокирано - admin:read:email_domain_blocks: четене на деликатна информация на всички домейни на е-поща блокирано - admin:read:ip_blocks: четене на деликатна информация на всички IP адреси блокирано + admin:read:domain_blocks: четене на деликатна информация за всички блокирани домейни + admin:read:email_domain_blocks: четене на деликатна информация за всички блокирани е-мейл домейни + admin:read:ip_blocks: четене на деликатна информация на всички блокирани IP адреси admin:read:reports: прочит на деликатна информация от всички докладвания и докладвани акаунти admin:write: промяна на всички данни на сървъра admin:write:accounts: извършване на действия за модериране на акаунти - admin:write:canonical_email_blocks: извършване на модериращи действия в канонични блокирания на е-поща + admin:write:canonical_email_blocks: извършване на модериращи действия за блокирани е-пощи admin:write:domain_allows: извършване на действия за модериране на акаунти в домейна позволено - admin:write:domain_blocks: извършване на действия за модериране на акаунти в домейна блокирано - admin:write:email_domain_blocks: извършване на действия за модериране на акаунти в домейна на е-поща блокирано - admin:write:ip_blocks: извършване на действия за модериране на IP адреси блокирано + admin:write:domain_blocks: извършване на действия за модериране на блокирани домейни + admin:write:email_domain_blocks: извършване на действия за модериране на блокирани е-мейл домейни + admin:write:ip_blocks: извършване на действия за модериране за блокирани IP адреси admin:write:reports: извършване на действия за модериране на докладвания crypto: употреба на цялостно шифроване follow: промяна на взаимоотношенията на акаунта diff --git a/config/locales/el.yml b/config/locales/el.yml index 7ddeb4601ed0fb..b1bd8053751ee0 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -1745,7 +1745,9 @@ el: title_html: "%{name} ενημέρωσε μια συλλογή στην οποία περιλαμβάνεσαι" generic: sign_in: Συνδεθείτε στην εφαρμογή ιστού Mastodon + summary_html: Είστε σε μια εφαρμογή που δεν υποστηρίζει την πιο πρόσφατη έκδοση του Mastodon. %{link} για πλήρη λειτουργικότητα. moderation_warning: + summary_html: Είστε σε μια εφαρμογή που δεν υποστηρίζει την πιο πρόσφατη έκδοση του Mastodon. %{link}. title: Έχετε λάβει μία προειδοποίηση συντονισμού. severed_relationships: summary_html: Ένας διαχειριστής από το %{from} έχει αναστείλει το %{target}, το οποίο σημαίνει ότι δεν μπορείς πλέον να λαμβάνεις ενημερώσεις από αυτούς ή να αλληλεπιδράς μαζί τους. %{link} για να λάβετε μια λίστα με τις χαμένες σχέσεις. diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index 5fe02d34f4745d..010e63c374673c 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -1731,6 +1731,27 @@ es-MX: copy_account_note_text: 'Este usuario se mudó desde %{acct}, aquí estaban tus notas anteriores sobre él:' navigation: toggle_menu: Alternar menú + notification_fallbacks: + added_to_collection: + title_html: "%{name} te ha añadido a una colección" + admin_report: + title_html: "%{name} informó de %{target}" + admin_sign_up: + title_and_others_html: + one: "%{name} y uno más se registró" + other: "%{name} y %{count} más se registraron" + title_html: "%{name} se registró" + collection_update: + title_html: "%{name} ha actualizado una colección de la que formas parte" + generic: + sign_in: Iniciar sesión en la aplicación web de Mastodon + summary_html: Estás utilizando una aplicación que no es compatible con la versión más reciente de Mastodon. %{link} para disfrutar de todas las funciones. + moderation_warning: + summary_html: Estás utilizando una aplicación que no es compatible con la versión más reciente de Mastodon. %{link}. + title: Has recibido una advertencia de moderación. + severed_relationships: + summary_html: Un administrador de %{from} ha suspendido a %{target}, lo que significa que ya no podrás recibir actualizaciones de su parte ni interactuar con él. Haz clic en %{link} para ver una lista de las relaciones perdidas. + title: Conexiones perdidas con %{name} notification_mailer: admin: report: diff --git a/config/locales/es.yml b/config/locales/es.yml index eef344717232f8..3cdc00f1f9ccc3 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -1731,6 +1731,27 @@ es: copy_account_note_text: 'Este usuario se mudó desde %{acct}, aquí estaban tus notas anteriores sobre él:' navigation: toggle_menu: Alternar menú + notification_fallbacks: + added_to_collection: + title_html: "%{name} te añadió a una colección" + admin_report: + title_html: "%{name} informó de %{target}" + admin_sign_up: + title_and_others_html: + one: "%{name} y uno más se registró" + other: "%{name} y %{count} más se registraron" + title_html: "%{name} se registró" + collection_update: + title_html: "%{name} actualizó una colección en la que estás" + generic: + sign_in: Iniciar sesión en la aplicación web de Mastodon + summary_html: Estás en una aplicación que no es compatible con la versión más reciente de Mastodon. %{link} para una funcionalidad completa. + moderation_warning: + summary_html: Estás en una aplicación que no es compatible con la versión más reciente de Mastodon. %{link}. + title: Has recibido una advertencia de moderación. + severed_relationships: + summary_html: La administración de %{from} ha suspendido %{target}, lo que significa que ya no puedes recibir actualizaciones o interactuar con personas en ese servidor. %{link} para obtener una lista de las relaciones perdidas. + title: Conexiones perdidas con %{name} notification_mailer: admin: report: diff --git a/config/locales/et.yml b/config/locales/et.yml index 45fbe7629d2e49..3d4068c9141d97 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -1743,6 +1743,15 @@ et: title_html: "%{name} registreerus" collection_update: title_html: "%{name} uuendas kogumikku, kuhu kuulud" + generic: + sign_in: Logi sisse Mastodoni veebirakendusse + summary_html: Kasutad rakendust, mis ei toeta Mastodoni uusimat versiooni. Kogu funktsionaalsuse kasutamiseks vajuta %{link}. + moderation_warning: + summary_html: Kasutad rakendust, mis ei toeta Mastodoni uusimat versiooni. %{link}. + title: Oled saanud modereerimishoiatuse. + severed_relationships: + summary_html: "%{from} administraator on blokeerinud %{target}, mis tähendab, et sa ei saa enam temalt teateid ega temaga suhelda. %{link}, et hankida kaotatud suhete loetelu." + title: Kaotatud ühendus kasutajaga %{name} notification_mailer: admin: report: diff --git a/config/locales/fa.yml b/config/locales/fa.yml index f68e549ea8aa98..6e9767ef74f654 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -337,6 +337,14 @@ fa: unpublish: عدم انتشار unpublished_msg: انتشار اعلامیه با موفقیت لغو شد! updated_msg: اعلامیه با موفقیت به‌روز شد! + collections: + collection_title: محموعه به دست %{name} + contents: محتوا + number_of_accounts: + one: ۱ حساب + other: "%{count} حساب" + open: گشودن + view_publicly: دیدن عمومی critical_update_pending: به‌روز رسانی‌های بحرانی منتظرند custom_emojis: assign_category: تعیین دسته @@ -676,6 +684,7 @@ fa: cancel: لغو category: دسته category_description_html: دلیل گزارش این حساب و/یا محتوا در ارتباط با حساب گزارش شده ذکر خواهد شد + collections: مجموعه‌ها (%{count}) comment: none: هیچ comment_description_html: 'برای ارائه اطلاعات بیشتر، %{name} نوشت:' @@ -705,11 +714,13 @@ fa: 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: @@ -744,6 +755,7 @@ fa: categories: administration: مدیریت devops: DevOps + email: رایانامه invites: دعوت‌ها moderation: نظارت special: ویژه @@ -1393,6 +1405,14 @@ fa: your_appeal_rejected: درخواست تجدیدنظرتان رد شد edit_profile: other: سایر + email_subscription_mailer: + notification: + create_account: ایجاد حساب ماستودون + subject: + plural: فرستهٔ جدید از %{name} + singular: 'فرستهٔ جدید: «%{excerpt}»' + title: + plural: فرسته‌های جدید از %{name} emoji_styles: auto: خودکار native: بومی @@ -1853,7 +1873,7 @@ fa: firefox_os: سیستم‌عامل فایرفاکس ios: آی‌اواس kai_os: سیستم‌عامل کای - linux: لینوکس + linux: گنو/لینوکس mac: مک unknown_platform: بن‌سازهٔ ناشناخته windows: ویندوز diff --git a/config/locales/fr-CA.yml b/config/locales/fr-CA.yml index 2ce37faa47a7d3..2aba25e5dc85f8 100644 --- a/config/locales/fr-CA.yml +++ b/config/locales/fr-CA.yml @@ -1745,7 +1745,9 @@ fr-CA: title_html: "%{name} a mis à jour une collection dans laquelle vous figurez" generic: sign_in: Connectez-vous à l'application Web Mastodon + summary_html: Vous utilisez une application qui ne prend pas en charge la version la plus récente de Mastodon. %{link} pour accéder à toutes les fonctionnalités. moderation_warning: + summary_html: Vous utilisez une application qui ne supporte pas la version la plus récente de Mastodon. %{link}. title: Vous avez reçu un avertissement de la modération. severed_relationships: summary_html: L'équipe d'administration de %{from} a suspendu %{target}, ce qui signifie que vous ne pouvez plus recevoir de notifications de leur part ou interagir avec. %{link} pour récupérer la liste des relations perdues. diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 47bf7904b2fd8f..ed6d12c4371999 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -1726,8 +1726,8 @@ fr: moderation: title: Modération move_handler: - carry_blocks_over_text: Cet utilisateur que vous aviez bloqué est parti de %{acct}. - carry_mutes_over_text: Cet utilisateur que vous aviez masqué est parti de %{acct}. + carry_blocks_over_text: Ce compte a déménagé de %{acct}, que vous aviez bloqué. + carry_mutes_over_text: Ce compte a déménagé de %{acct}, que vous aviez masqué. copy_account_note_text: 'Cet·te utilisateur·rice est parti·e de %{acct}, voici vos notes précédentes à son sujet :' navigation: toggle_menu: Basculer l'affichage du menu @@ -1745,7 +1745,9 @@ fr: title_html: "%{name} a mis à jour une collection dans laquelle vous figurez" generic: sign_in: Connectez-vous à l'application Web Mastodon + summary_html: Vous utilisez une application qui ne prend pas en charge la version la plus récente de Mastodon. %{link} pour accéder à toutes les fonctionnalités. moderation_warning: + summary_html: Vous utilisez une application qui ne supporte pas la version la plus récente de Mastodon. %{link}. title: Vous avez reçu un avertissement de la modération. severed_relationships: summary_html: L'équipe d'administration de %{from} a suspendu %{target}, ce qui signifie que vous ne pouvez plus recevoir de notifications de leur part ou interagir avec. %{link} pour récupérer la liste des relations perdues. diff --git a/config/locales/ga.yml b/config/locales/ga.yml index 35738a449e7448..c10b74cdb90c03 100644 --- a/config/locales/ga.yml +++ b/config/locales/ga.yml @@ -1876,7 +1876,9 @@ ga: title_html: Nuashonraigh %{name} bailiúchán ina bhfuil tú generic: sign_in: Sínigh isteach ar an app gréasáin Mastodon + summary_html: Tá tú ar aip nach dtacaíonn leis an leagan is déanaí de Mastodon. %{link} le haghaidh feidhmiúlacht iomlán. moderation_warning: + summary_html: Tá tú ar aip nach dtacaíonn leis an leagan is déanaí de Mastodon. %{link}. title: Tá rabhadh modhnóireachta faighte agat. severed_relationships: summary_html: Chuir riarthóir ó %{from} %{target} ar fionraí, rud a chiallaíonn nach féidir leat nuashonruithe a fháil uathu nó idirghníomhú leo a thuilleadh. %{link} chun liosta de na gaolta caillte a fháil. diff --git a/config/locales/gd.yml b/config/locales/gd.yml index fce328c2b66a2e..656564d24350dc 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -1815,6 +1815,29 @@ gd: copy_account_note_text: 'Da cleachdaiche air gluasad o %{acct}, seo na nòtaichean a bh’ agad mu dhèidhinn roimhe:' navigation: toggle_menu: Toglaich an clàr-taice + notification_fallbacks: + added_to_collection: + title_html: Chuir %{name} ri cruinneachadh thu + admin_report: + title_html: Rinn %{name} gearan mu %{target} + admin_sign_up: + title_and_others_html: + few: Chlàraich %{name} ’s %{count} eile + one: Chlàraich %{name} ’s %{count} eile + other: Chlàraich %{name} ’s %{count} eile + two: Chlàraich %{name} ’s %{count} eile + title_html: Chlàraich %{name} + collection_update: + title_html: Dh’ùraich %{name} cruinneachadh sa bheil thu + generic: + sign_in: Clàraich a-steach air aplacaid-lìn Mhastodon + summary_html: Cha thu a’ cleachdadh aplacaid nach cuir taic ris an tionndadh as ùire de Mhastodon. %{link} airson na gleusan uile fhaighinn. + moderation_warning: + summary_html: Cha thu a’ cleachdadh aplacaid nach cuir taic ris an tionndadh as ùire de Mhastodon. %{link}. + title: Fhuair thu rabhadh on mhaorsainneachd. + severed_relationships: + summary_html: Chuir rianaire aig %{from} %{target} à rèim agus is ciall dha sin nach fhaigh thu naidheachdan uapa ’s nach urrainn dhut conaltradh leotha. %{link} a dh’fhaighinn liosta de na dàimhean air chall. + title: Chaill thu dàimhean le %{name} notification_mailer: admin: report: diff --git a/config/locales/nan-TW.yml b/config/locales/nan-TW.yml index b1c60ad78a3334..ac96e97aeac2cb 100644 --- a/config/locales/nan-TW.yml +++ b/config/locales/nan-TW.yml @@ -12,7 +12,7 @@ nan-TW: followers: other: 跟tuè ê following: - other: Leh跟tuè + other: 伊跟tuè ê instance_actor_flash: Tsit ê口座是虛ê,用來代表tsit臺服侍器,毋是個人用者ê。伊用來做聯邦ê路用,毋好kā伊ê權限停止。 last_active: 頂kái活動ê時間 link_verified_on: Tsit ê連結ê所有權佇 %{date} 受檢查 diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index a003e1da0557e9..9fa6084d3ee59b 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -1731,6 +1731,27 @@ pt-BR: copy_account_note_text: 'Este usuário saiu de %{acct}, aqui estão suas notas anteriores sobre ele:' navigation: toggle_menu: Alternar menu + notification_fallbacks: + added_to_collection: + title_html: "%{name} te adicionou à uma coleção" + admin_report: + title_html: "%{name} denunciou %{target}" + admin_sign_up: + title_and_others_html: + one: "%{name} e outros inscreveram-se" + other: "%{name} e %{count} outros inscreveram-se" + title_html: "%{name} inscreveu-se" + collection_update: + title_html: "%{name} atualizou uma coleção em que você está" + generic: + sign_in: Inscreva-se ao app web do Mastodon. + summary_html: Você está em um app que não suporta a versão mais recente do Mastodon. %{link} para funcionalidade total. + moderation_warning: + summary_html: Você está em um app que não suporta a versão mais recente do Mastodon. %{link}. + title: Você recebeu um aviso da moderação. + severed_relationships: + summary_html: Um administrador de %{from} suspendeu %{target}, o que significa que você não poderá mais receber atualizações deles ou interagir com eles. %{link} para recuperar uma lista das relações perdidas. + title: Conexões perdidas com %{name} notification_mailer: admin: report: diff --git a/config/locales/simple_form.be.yml b/config/locales/simple_form.be.yml index a16e2a6f23fa75..44baccb20a3cb2 100644 --- a/config/locales/simple_form.be.yml +++ b/config/locales/simple_form.be.yml @@ -347,7 +347,7 @@ be: follow: Нехта падпісаўся на вас follow_request: Нехта даслаў вам запыт на падпіску mention: Нехта згадаў вас - pending_account: Новы акаўнт патрабуе разгляду + pending_account: Новы ўліковы запіс патрабуе разгляду quote: Нехта цытаваў Вас reblog: Нехта пашырыў ваш допіс report: Новая скарга даслана diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml index 25f2b2d47917ec..a7cb3ab041a079 100644 --- a/config/locales/simple_form.fa.yml +++ b/config/locales/simple_form.fa.yml @@ -233,6 +233,7 @@ fa: setting_always_send_emails: فرستادن همیشگی آگاهی‌های رایانامه‌ای setting_auto_play_gif: پخش خودکار تصویرهای متحرک setting_boost_modal: واپایش نمایانی تقویت + setting_color_scheme: طرحوارهٔ رنگی setting_contrast: سایه‌روشن setting_default_language: زبان نوشته‌های شما setting_default_privacy: نمایانی فرسته diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml index f3bab12cc14d4e..fcd906ce67a976 100644 --- a/config/locales/simple_form.fr.yml +++ b/config/locales/simple_form.fr.yml @@ -214,9 +214,9 @@ fr: appeal: text: Expliquez pourquoi cette décision devrait être annulée defaults: - autofollow: Invitation à suivre votre compte + autofollow: Inviter à suivre votre compte avatar: Image de profil - bot: Ceci est un robot + bot: Ceci est un compte automatisé chosen_languages: Filtrer les langues confirm_new_password: Confirmation du nouveau mot de passe confirm_password: Confirmation du mot de passe diff --git a/config/locales/simple_form.gd.yml b/config/locales/simple_form.gd.yml index 54b56ea6934abf..29c16760959099 100644 --- a/config/locales/simple_form.gd.yml +++ b/config/locales/simple_form.gd.yml @@ -4,6 +4,7 @@ gd: hints: account: attribution_domains: Loidhne fa leth do gach fear. Dìonaidh seo o iomraidhean meallta. + discoverable: Dh’fhaoidte gun dèid do bhrosnachadh ann an cruinneachaidhean a chruthaich càch. Dh’fhaoidte gun dèid thu fhèin ’s na postaichean poblach agad a mholadh do dhaoine ann an àrainneachdan rùrachaidh eile air feadh Mastodon. display_name: D’ ainm slàn no spòrsail. fields: An duilleag-dhachaigh agad, roimhearan, aois, rud sam bith a thogras tu. indexable: Faodaidh na postaichean poblach agad a nochdadh am measg toraidhean luirg air Mastodon. ’S urrainn dhan fheadhainn a rinn eadar-ghabhail leis na postaichean agad lorg annta air a h-uile dòigh. @@ -60,6 +61,9 @@ gd: setting_default_quote_policy_private: Chan urrainn do chàch postaichean dhan luchd-leantainn a-mhàin a chaidh a sgrìobhadh le Mastodon a luaidh. setting_default_quote_policy_unlisted: Nuair a luaidheas daoine thu, thèid am post aca-san fhalach o loidhnichean-ama nan treandaichean. setting_default_sensitive: Thèid meadhanan frionasach fhalach a ghnàth is gabhaidh an nochdadh le briogadh orra + setting_display_media_default: Thoir rabhadh mus dèid meadhanan ris a bheil comharra gu bheil iad frionasach a shealltainn + setting_display_media_hide_all: Thoir rabhadh mus dèid meadhan sam bith a shealltainn + 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 @@ -105,6 +109,7 @@ gd: status_page_url: URL duilleige far am faicear staid an fhrithealaiche seo nuair a bhios e sìos theme: An t-ùrlar a chì na h-aoighean gun chlàradh a-staigh agus an luchd-cleachdaidh ùr. thumbnail: Dealbh mu 2:1 a thèid a shealltainn ri taobh fiosrachadh an fhrithealaiche agad. + thumbnail_description: Tuairisgeul an deilbh a chuidicheas an fheadhainn air a bheil cion-lèirsinne le tuigsinn a shusbaint. trendable_by_default: Geàrr leum thar lèirmheas a làimh na susbainte a’ treandadh. Gabhaidh nithean fa leth a thoirt far nan treandaichean fhathast an uairsin. trends: Seallaidh na treandaichean na postaichean, tagaichean hais is naidheachdan a tha fèill mhòr orra air an fhrithealaiche agad. wrapstodon: Tairg gintinn geàrr-chunntais àbhaich air mar a chleachd iad Mastodon rè a’ bhliadhna dhan luchd-cleachdaidh ionadail. Bidh an gleus seo ri fhaighinn eadar an 10mh is 31mh dhen Dùbhlachd gach bliadhna ’s thèid a thairgsinn dhan luchd-cleachdaidh a rinn co-dhiù aon post poblach no sàmhach ’s a chleachd co-dhiù aon taga hais rè a’ bhliadhna. @@ -158,6 +163,7 @@ gd: two: Feumaidh sinn dèanamh cinnteach gu bheil thu %{count} bhliadhna a dh’aois air a char as lugha mus cleachd thu %{domain}. Cha chlàraich sinn seo. role: Stiùiridh an dreuchd dè na ceadan a bhios aig cleachdaiche. user_role: + collection_limit: Cuingichidh seo co mheud cruinneachadh a dh’fhaodas cleachdaiche aig a bheil an dreuchd seo a chruthachadh. Thoir an aire nuair a lùghdaicheas tu an àireamh seo, cha chaill an luchd-cleachdaidh aig a bheil cruinneachaidhean cheana gin dhiubh ma bhios cus aca. Gidheadh, chan urrainn dhaibh an còrr a chruthachadh an uair sin. color: An datha a bhios air an dreuchd air feadh na h-eadar-aghaidh, ’na RGB san fhòrmat sia-dheicheach highlighted: Le seo, chithear an dreuchd gu poblach name: Ainm poblach na dreuchd ma chaidh a suidheachadh gun nochd i na baidse @@ -175,6 +181,7 @@ gd: labels: account: attribution_domains: Na làraichean-lìn a dh’fhaodas iomradh a thoirt ort + discoverable: Brosnaich mi ann an àrainneachdan rùrachaidh fields: name: Leubail value: Susbaint @@ -313,6 +320,7 @@ gd: status_page_url: URL duilleag na staide theme: An t-ùrlar bunaiteach thumbnail: Dealbhag an fhrithealaiche + thumbnail_description: Roghainn teacsa na dealbhaige trendable_by_default: Ceadaich treandaichean gun lèirmheas ro làimh trends: Cuir na treandaichean an comas wrapstodon: Cuir Wrapstodon an comas @@ -383,6 +391,7 @@ gd: role: Dreuchd time_zone: Roinn-tìde user_role: + collection_limit: An àireamh as motha de chruinneachaidhean aig gach cleachdaiche color: Dathan na baidse highlighted: Seall an dreuchd ’na baidse air pròifilean nan cleachdaichean name: Ainm diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml index a476526a01c639..40a500f0af2898 100644 --- a/config/locales/simple_form.vi.yml +++ b/config/locales/simple_form.vi.yml @@ -249,17 +249,17 @@ vi: setting_default_privacy: Kiểu tút setting_default_quote_policy: Ai có thể trích dẫn setting_default_sensitive: Đánh dấu media nhạy cảm - setting_delete_modal: Cảnh báo tôi trước khi xóa một tút + setting_delete_modal: Hỏi trước khi xóa tút setting_disable_hover_cards: Không hiện popup xem trước hồ sơ setting_disable_swiping: Không dùng thao tác vuốt - setting_display_media: Media nhạy cảm + setting_display_media: Hiển thị phương tiện setting_display_media_default: Mặc định setting_display_media_hide_all: Ẩn toàn bộ setting_display_media_show_all: Hiện toàn bộ setting_emoji_style: Phong cách Emoji setting_expand_spoilers: Luôn mở rộng nội dung ẩn setting_hide_network: Ẩn quan hệ của bạn - setting_missing_alt_text_modal: Cảnh báo tôi trước khi đăng media mà không có alt text + setting_missing_alt_text_modal: Hỏi trước khi đăng phương tiện mà không có văn bản thay thế setting_quick_boosting: Đăng lại nhanh setting_reduce_motion: Giảm chuyển động ảnh GIF setting_system_font_ui: Phông chữ mặc định hệ thống @@ -267,7 +267,7 @@ vi: setting_theme: Giao diện setting_trends: Hiện xu hướng trong ngày setting_unfollow_modal: Hỏi trước khi bỏ theo dõi ai đó - setting_use_blurhash: Làm mờ media bị ẩn + setting_use_blurhash: Làm mờ phương tiện bị ẩn setting_use_pending_items: Chế độ chậm severity: Mức độ nghiêm trọng sign_in_token_attempt: Mã an toàn diff --git a/config/locales/sq.yml b/config/locales/sq.yml index 6b2a166153b173..7ab201bc2143f3 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -1730,7 +1730,9 @@ sq: title_html: "%{name} përditësoi një koleksion në të cilin gjendeni" generic: sign_in: Bëni hyrjen te aplikacioni web Mastodon + summary_html: Gjendeni në një aplikacion që s’mbulon versionin më të ri të Mastodon-it. %{link} për funksionim të plotë. moderation_warning: + summary_html: Gjendeni në një aplikacion që s’mbulon versionin më të ri të Mastodon-it. %{link}. title: Keni marrë një sinjalizim moderimi. severed_relationships: summary_html: Një përgjegjës prej %{from} ka pezulluar %{target}, që do të thotë se s’mund të merrni më përditësime prej tij, apo të ndërveproni me të. %{link} që të merrni një listë të marrëdhënieve të humbura. diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 50ded2f32b30e6..7dd91d1c2c0169 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -1696,6 +1696,21 @@ zh-TW: 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: 登入至 Mastodon 網頁應用程式 + summary_html: 您正在使用不支援 Mastodon 最新版本之應用程式。%{link} 如欲使用完整功能。 + moderation_warning: + summary_html: 您正在使用不支援 Mastodon 最新版本之應用程式。%{link}。 + title: 您已收到管理員警告。 + severed_relationships: + summary_html: "%{from} 之管理員已將 %{target} 停權,意味著您將不再收到來自他們的更新或與之互動。%{link} 以檢視失去關係之列表。" + title: 與 %{name} 失去連結 notification_mailer: admin: report: From 696aaa616bf3bcaa5423ea8379498da4a41310c6 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 4 May 2026 03:52:29 -0400 Subject: [PATCH 005/132] Update rubocop-capybara to version 2.23.0 (#38868) --- Gemfile.lock | 4 +- spec/system/admin/account_actions_spec.rb | 2 +- .../admin/account_moderation_notes_spec.rb | 6 +-- spec/system/admin/accounts_spec.rb | 2 +- spec/system/admin/announcements_spec.rb | 12 +++--- spec/system/admin/confirmations_spec.rb | 2 +- spec/system/admin/custom_emojis_spec.rb | 10 ++--- spec/system/admin/dashboard_spec.rb | 4 +- spec/system/admin/domain_allows_spec.rb | 8 ++-- spec/system/admin/domain_blocks_spec.rb | 4 +- spec/system/admin/email_domain_blocks_spec.rb | 14 +++---- .../admin/follow_recommendations_spec.rb | 2 +- .../admin/instance/moderation_notes_spec.rb | 8 ++-- spec/system/admin/ip_blocks_spec.rb | 8 ++-- spec/system/admin/relays_spec.rb | 10 ++--- spec/system/admin/report_notes_spec.rb | 12 +++--- spec/system/admin/reports_spec.rb | 14 +++---- spec/system/admin/reset_spec.rb | 2 +- spec/system/admin/roles_spec.rb | 2 +- spec/system/admin/rules_spec.rb | 18 ++++---- spec/system/admin/settings/about_spec.rb | 2 +- spec/system/admin/settings/appearance_spec.rb | 2 +- spec/system/admin/settings/branding_spec.rb | 2 +- .../admin/settings/content_retention_spec.rb | 2 +- spec/system/admin/settings/discovery_spec.rb | 2 +- .../admin/settings/registrations_spec.rb | 2 +- spec/system/admin/site_uploads_spec.rb | 2 +- spec/system/admin/software_updates_spec.rb | 6 +-- spec/system/admin/statuses_spec.rb | 2 +- spec/system/admin/tags_spec.rb | 2 +- .../admin/terms_of_service/histories_spec.rb | 4 +- spec/system/admin/terms_of_service_spec.rb | 2 +- .../links/preview_card_providers_spec.rb | 2 +- spec/system/admin/trends/links_spec.rb | 2 +- spec/system/admin/trends/statuses_spec.rb | 2 +- spec/system/admin/trends/tags_spec.rb | 4 +- spec/system/admin/warning_presets_spec.rb | 8 ++-- spec/system/admin/webhooks_spec.rb | 14 +++---- spec/system/auth/registrations_spec.rb | 6 +-- spec/system/auth/setup_spec.rb | 4 +- spec/system/captcha_spec.rb | 2 +- spec/system/disputes/appeals_spec.rb | 4 +- spec/system/disputes/strikes_spec.rb | 2 +- spec/system/filters_spec.rb | 16 +++---- spec/system/invites_spec.rb | 4 +- spec/system/oauth_spec.rb | 42 +++++++++---------- spec/system/redirections_spec.rb | 4 +- spec/system/report_interface_spec.rb | 2 +- spec/system/settings/aliases_spec.rb | 10 ++--- spec/system/settings/applications_spec.rb | 24 +++++------ spec/system/settings/deletes_spec.rb | 4 +- spec/system/settings/exports_spec.rb | 4 +- spec/system/settings/login_activities_spec.rb | 6 +-- .../settings/migration/redirects_spec.rb | 2 +- spec/system/settings/migrations_spec.rb | 14 +++---- spec/system/settings/privacy_spec.rb | 10 ++--- spec/system/settings/sessions_spec.rb | 2 +- .../recovery_codes_spec.rb | 4 +- .../two_factor_authentication_methods_spec.rb | 4 +- spec/system/settings/verifications_spec.rb | 10 ++--- spec/system/statuses_cleanup_spec.rb | 2 +- 61 files changed, 194 insertions(+), 194 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 67203c6b0461e5..f28240ce2f7dcf 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -770,9 +770,9 @@ GEM rubocop-ast (1.49.1) parser (>= 3.3.7.2) prism (~> 1.7) - rubocop-capybara (2.22.1) + rubocop-capybara (2.23.0) lint_roller (~> 1.1) - rubocop (~> 1.72, >= 1.72.1) + rubocop (~> 1.81) rubocop-i18n (3.3.0) lint_roller (~> 1.1) rubocop (>= 1.72.1) diff --git a/spec/system/admin/account_actions_spec.rb b/spec/system/admin/account_actions_spec.rb index abfd33dc272fb4..bd24ddebe11630 100644 --- a/spec/system/admin/account_actions_spec.rb +++ b/spec/system/admin/account_actions_spec.rb @@ -19,7 +19,7 @@ expect { submit_form } .to_not(change { account.strikes.count }) expect(page) - .to have_content(/can't be blank/) + .to have_text(/can't be blank/) # Valid submission choose(option: 'silence') diff --git a/spec/system/admin/account_moderation_notes_spec.rb b/spec/system/admin/account_moderation_notes_spec.rb index 728d1714745d36..c1254638f57136 100644 --- a/spec/system/admin/account_moderation_notes_spec.rb +++ b/spec/system/admin/account_moderation_notes_spec.rb @@ -16,18 +16,18 @@ expect { submit_form } .to not_change(AccountModerationNote, :count) expect(page) - .to have_content(/error below/) + .to have_text(/error below/) fill_in 'account_moderation_note_content', with: 'Test message' expect { submit_form } .to change(AccountModerationNote, :count).by(1) expect(page) - .to have_content(I18n.t('admin.account_moderation_notes.created_msg')) + .to have_text(I18n.t('admin.account_moderation_notes.created_msg')) expect { delete_note } .to change(AccountModerationNote, :count).by(-1) expect(page) - .to have_content(I18n.t('admin.account_moderation_notes.destroyed_msg')) + .to have_text(I18n.t('admin.account_moderation_notes.destroyed_msg')) end def submit_form diff --git a/spec/system/admin/accounts_spec.rb b/spec/system/admin/accounts_spec.rb index 30504ce5d78f04..b85a0bf0bf5b2e 100644 --- a/spec/system/admin/accounts_spec.rb +++ b/spec/system/admin/accounts_spec.rb @@ -24,7 +24,7 @@ it 'displays a notice about account selection' do click_on button_for_suspend - expect(page).to have_content(selection_error_text) + expect(page).to have_text(selection_error_text) end end diff --git a/spec/system/admin/announcements_spec.rb b/spec/system/admin/announcements_spec.rb index c1cb00cd84e94e..104e624eb37a2c 100644 --- a/spec/system/admin/announcements_spec.rb +++ b/spec/system/admin/announcements_spec.rb @@ -13,7 +13,7 @@ within css_id(announcement) do expect(page) - .to have_content(announcement.text) + .to have_text(announcement.text) end end end @@ -29,7 +29,7 @@ expect { submit_form } .to change(Announcement, :count).by(1) expect(page) - .to have_content(I18n.t('admin.announcements.published_msg')) + .to have_text(I18n.t('admin.announcements.published_msg')) end end @@ -48,7 +48,7 @@ click_on submit_button expect(page) - .to have_content(I18n.t('admin.announcements.updated_msg')) + .to have_text(I18n.t('admin.announcements.updated_msg')) end end @@ -62,7 +62,7 @@ .to change(Announcement, :count).by(-1) expect(page) - .to have_content(I18n.t('admin.announcements.destroyed_msg')) + .to have_text(I18n.t('admin.announcements.destroyed_msg')) end end @@ -76,7 +76,7 @@ .to change { announcement.reload.published? }.to(true) expect(page) - .to have_content(I18n.t('admin.announcements.published_msg')) + .to have_text(I18n.t('admin.announcements.published_msg')) end it 'unpublishes an existing announcement' do @@ -88,7 +88,7 @@ .to change { announcement.reload.published? }.to(false) expect(page) - .to have_content(I18n.t('admin.announcements.unpublished_msg')) + .to have_text(I18n.t('admin.announcements.unpublished_msg')) end end diff --git a/spec/system/admin/confirmations_spec.rb b/spec/system/admin/confirmations_spec.rb index b0f2eed144f11d..de2a80b1abde8b 100644 --- a/spec/system/admin/confirmations_spec.rb +++ b/spec/system/admin/confirmations_spec.rb @@ -40,7 +40,7 @@ .to send_email(to: user.email) expect(page) .to have_title(I18n.t('admin.accounts.title')) - .and have_content(I18n.t('admin.accounts.resend_confirmation.success')) + .and have_text(I18n.t('admin.accounts.resend_confirmation.success')) end end diff --git a/spec/system/admin/custom_emojis_spec.rb b/spec/system/admin/custom_emojis_spec.rb index 1d54aa4d5e5c29..4106e1cd69a8a4 100644 --- a/spec/system/admin/custom_emojis_spec.rb +++ b/spec/system/admin/custom_emojis_spec.rb @@ -14,8 +14,8 @@ visit admin_custom_emojis_path expect(page) - .to have_content(I18n.t('admin.custom_emojis.title')) - .and have_content(custom_emoji.shortcode) + .to have_text(I18n.t('admin.custom_emojis.title')) + .and have_text(custom_emoji.shortcode) end end @@ -23,12 +23,12 @@ it 'saves a new emoji record with valid attributes' do visit new_admin_custom_emoji_path expect(page) - .to have_content(I18n.t('admin.custom_emojis.title')) + .to have_text(I18n.t('admin.custom_emojis.title')) expect { submit_form } .to_not change(CustomEmoji, :count) expect(page) - .to have_content(/errors below/) + .to have_text(/errors below/) fill_in I18n.t('admin.custom_emojis.shortcode'), with: 'test' @@ -53,7 +53,7 @@ def submit_form it 'displays a notice about selection' do click_on button_for_enable - expect(page).to have_content(selection_error_text) + expect(page).to have_text(selection_error_text) end end diff --git a/spec/system/admin/dashboard_spec.rb b/spec/system/admin/dashboard_spec.rb index d0cedd2ed19ffa..8f21fd1320e247 100644 --- a/spec/system/admin/dashboard_spec.rb +++ b/spec/system/admin/dashboard_spec.rb @@ -18,8 +18,8 @@ expect(page) .to have_title(I18n.t('admin.dashboard.title')) - .and have_content(I18n.t('admin.system_checks.software_version_patch_check.message_html')) - .and have_content('0 pending hashtags') + .and have_text(I18n.t('admin.system_checks.software_version_patch_check.message_html')) + .and have_text('0 pending hashtags') end private diff --git a/spec/system/admin/domain_allows_spec.rb b/spec/system/admin/domain_allows_spec.rb index b2e4b9576f5c5f..954aaadd92c637 100644 --- a/spec/system/admin/domain_allows_spec.rb +++ b/spec/system/admin/domain_allows_spec.rb @@ -27,28 +27,28 @@ visit new_admin_domain_allow_path click_on I18n.t('admin.domain_allows.add_new') expect(page) - .to have_content(I18n.t('admin.domain_allows.add_new')) + .to have_text(I18n.t('admin.domain_allows.add_new')) # Submit invalid with missing domain fill_in 'domain_allow_domain', with: '' expect { submit_form } .to not_change(DomainAllow, :count) expect(page) - .to have_content(/error below/) + .to have_text(/error below/) # Submit valid with domain present fill_in 'domain_allow_domain', with: domain expect { submit_form } .to change(DomainAllow, :count).by(1) expect(page) - .to have_content(I18n.t('admin.domain_allows.created_msg')) + .to have_text(I18n.t('admin.domain_allows.created_msg')) # Visit instance page and delete the domain allow visit admin_instance_path(domain) expect { delete_domain_allow } .to change(DomainAllow, :count).by(-1) expect(page) - .to have_content(I18n.t('admin.domain_allows.destroyed_msg')) + .to have_text(I18n.t('admin.domain_allows.destroyed_msg')) end def submit_form diff --git a/spec/system/admin/domain_blocks_spec.rb b/spec/system/admin/domain_blocks_spec.rb index c309e39a4fb39b..d9b036fca25334 100644 --- a/spec/system/admin/domain_blocks_spec.rb +++ b/spec/system/admin/domain_blocks_spec.rb @@ -66,7 +66,7 @@ submit_domain_block('example.com', 'noop') expect(page) - .to have_content(/You have already imposed stricter limits on example.com/) + .to have_text(/You have already imposed stricter limits on example.com/) end end @@ -77,7 +77,7 @@ submit_domain_block('', 'noop') expect(page) - .to have_content(/review the error below/) + .to have_text(/review the error below/) end end diff --git a/spec/system/admin/email_domain_blocks_spec.rb b/spec/system/admin/email_domain_blocks_spec.rb index e88811ac49ba7d..393e1a21c7cad7 100644 --- a/spec/system/admin/email_domain_blocks_spec.rb +++ b/spec/system/admin/email_domain_blocks_spec.rb @@ -15,24 +15,24 @@ it 'views and creates new blocks' do visit admin_email_domain_blocks_path expect(page) - .to have_content(I18n.t('admin.email_domain_blocks.title')) - .and have_content(email_domain_block.domain) + .to have_text(I18n.t('admin.email_domain_blocks.title')) + .and have_text(email_domain_block.domain) click_on I18n.t('admin.email_domain_blocks.add_new') expect(page) - .to have_content(I18n.t('admin.email_domain_blocks.new.title')) + .to have_text(I18n.t('admin.email_domain_blocks.new.title')) fill_in I18n.t('admin.email_domain_blocks.domain'), with: 'example.com' expect { submit_resolve } .to_not change(EmailDomainBlock, :count) expect(page) - .to have_content(I18n.t('admin.email_domain_blocks.new.title')) + .to have_text(I18n.t('admin.email_domain_blocks.new.title')) expect { submit_create } .to change(EmailDomainBlock.where(domain: 'example.com'), :count).by(1) expect(page) - .to have_content(I18n.t('admin.email_domain_blocks.title')) - .and have_content(I18n.t('admin.email_domain_blocks.created_msg')) + .to have_text(I18n.t('admin.email_domain_blocks.title')) + .and have_text(I18n.t('admin.email_domain_blocks.created_msg')) end def submit_resolve @@ -53,7 +53,7 @@ def submit_create it 'displays a notice about selection' do click_on button_for_delete - expect(page).to have_content(selection_error_text) + expect(page).to have_text(selection_error_text) end end diff --git a/spec/system/admin/follow_recommendations_spec.rb b/spec/system/admin/follow_recommendations_spec.rb index 141a0f8152a746..22f4ca70200bd9 100644 --- a/spec/system/admin/follow_recommendations_spec.rb +++ b/spec/system/admin/follow_recommendations_spec.rb @@ -12,7 +12,7 @@ visit admin_follow_recommendations_path expect(page) - .to have_content(I18n.t('admin.follow_recommendations.title')) + .to have_text(I18n.t('admin.follow_recommendations.title')) end end end diff --git a/spec/system/admin/instance/moderation_notes_spec.rb b/spec/system/admin/instance/moderation_notes_spec.rb index f8bf575b829c60..bf76caa13e2d17 100644 --- a/spec/system/admin/instance/moderation_notes_spec.rb +++ b/spec/system/admin/instance/moderation_notes_spec.rb @@ -16,13 +16,13 @@ expect { submit_form } .to not_change(InstanceModerationNote, :count) expect(page) - .to have_content(/error below/) + .to have_text(/error below/) fill_in 'instance_moderation_note_content', with: 'Test message ' * InstanceModerationNote::CONTENT_SIZE_LIMIT expect { submit_form } .to not_change(InstanceModerationNote, :count) expect(page) - .to have_content(/error below/) + .to have_text(/error below/) fill_in 'instance_moderation_note_content', with: 'Test message' expect { submit_form } @@ -30,12 +30,12 @@ expect(page) .to have_current_path(admin_instance_path(instance_domain)) expect(page) - .to have_content(I18n.t('admin.instances.moderation_notes.created_msg')) + .to have_text(I18n.t('admin.instances.moderation_notes.created_msg')) expect { delete_note } .to change(InstanceModerationNote, :count).by(-1) expect(page) - .to have_content(I18n.t('admin.instances.moderation_notes.destroyed_msg')) + .to have_text(I18n.t('admin.instances.moderation_notes.destroyed_msg')) end def submit_form diff --git a/spec/system/admin/ip_blocks_spec.rb b/spec/system/admin/ip_blocks_spec.rb index 3bed506b688506..3f99ec00504412 100644 --- a/spec/system/admin/ip_blocks_spec.rb +++ b/spec/system/admin/ip_blocks_spec.rb @@ -12,7 +12,7 @@ # Visit index page visit admin_ip_blocks_path expect(page) - .to have_content(I18n.t('admin.ip_blocks.title')) + .to have_text(I18n.t('admin.ip_blocks.title')) # Navigate to new click_on I18n.t('admin.ip_blocks.add_new') @@ -22,14 +22,14 @@ expect { submit_form } .to_not change(IpBlock, :count) expect(page) - .to have_content(/error below/) + .to have_text(/error below/) # Valid with IP fill_in 'ip_block_ip', with: '192.168.1.1' expect { submit_form } .to change(IpBlock, :count).by(1) expect(page) - .to have_content(I18n.t('admin.ip_blocks.created_msg')) + .to have_text(I18n.t('admin.ip_blocks.created_msg')) end def submit_form @@ -44,7 +44,7 @@ def submit_form click_on button_for_delete expect(page) - .to have_content(selection_error_text) + .to have_text(selection_error_text) end end diff --git a/spec/system/admin/relays_spec.rb b/spec/system/admin/relays_spec.rb index a5b92a4d0da34f..cd935c5bbfa05f 100644 --- a/spec/system/admin/relays_spec.rb +++ b/spec/system/admin/relays_spec.rb @@ -13,8 +13,8 @@ visit admin_relays_path expect(page) - .to have_content(I18n.t('admin.relays.title')) - .and have_content(relay.inbox_url) + .to have_text(I18n.t('admin.relays.title')) + .and have_text(relay.inbox_url) end end @@ -25,21 +25,21 @@ # Visit new page click_on I18n.t('admin.relays.setup') expect(page) - .to have_content(I18n.t('admin.relays.add_new')) + .to have_text(I18n.t('admin.relays.add_new')) # Invalid submission fill_in 'relay_inbox_url', with: '' expect { submit_form } .to_not change(Relay, :count) expect(page) - .to have_content(/errors below/) + .to have_text(/errors below/) # Valid submission fill_in 'relay_inbox_url', with: 'https://host.example/hooks/123' expect { submit_form } .to change(Relay, :count).by(1) expect(page) - .to have_content(I18n.t('admin.relays.title')) + .to have_text(I18n.t('admin.relays.title')) end def submit_form diff --git a/spec/system/admin/report_notes_spec.rb b/spec/system/admin/report_notes_spec.rb index 143bc8ac7ce6a5..b2f90568cef72b 100644 --- a/spec/system/admin/report_notes_spec.rb +++ b/spec/system/admin/report_notes_spec.rb @@ -21,7 +21,7 @@ expect(report.reload) .to be_action_taken expect(page) - .to have_content(success_message) + .to have_text(success_message) end def submit_form @@ -39,7 +39,7 @@ def submit_form expect(report.reload) .to_not be_action_taken expect(page) - .to have_content(success_message) + .to have_text(success_message) end def submit_form @@ -61,7 +61,7 @@ def submit_form expect(report.reload) .to_not be_action_taken expect(page) - .to have_content(success_message) + .to have_text(success_message) end def submit_form @@ -79,7 +79,7 @@ def submit_form expect(report.reload) .to be_action_taken expect(page) - .to have_content(success_message) + .to have_text(success_message) end def submit_form @@ -98,7 +98,7 @@ def submit_form expect { submit_form } .to_not change(ReportNote, :count) expect(page) - .to have_content(/error below/) + .to have_text(/error below/) end def submit_form @@ -120,7 +120,7 @@ def success_message expect { delete_note } .to change(ReportNote, :count).by(-1) expect(page) - .to have_content(I18n.t('admin.report_notes.destroyed_msg')) + .to have_text(I18n.t('admin.report_notes.destroyed_msg')) end def delete_note diff --git a/spec/system/admin/reports_spec.rb b/spec/system/admin/reports_spec.rb index 90845a02f7c9a7..5f266b211ceac2 100644 --- a/spec/system/admin/reports_spec.rb +++ b/spec/system/admin/reports_spec.rb @@ -16,19 +16,19 @@ visit admin_reports_path expect(page) - .to have_content(unresolved_report.comment) - .and have_no_content(resolved_report.comment) + .to have_text(unresolved_report.comment) + .and have_no_text(resolved_report.comment) click_on I18n.t('admin.reports.resolved') expect(page) - .to have_content(resolved_report.comment) - .and have_no_content(unresolved_report.comment) + .to have_text(resolved_report.comment) + .and have_no_text(unresolved_report.comment) click_on resolved_report.comment expect(page) .to have_title(I18n.t('admin.reports.report', id: resolved_report.id)) - .and have_content(resolved_report.comment) - .and have_content(report_note.content) + .and have_text(resolved_report.comment) + .and have_text(report_note.content) end end @@ -43,7 +43,7 @@ expect(page) .to have_title(I18n.t('admin.reports.title')) - .and have_content(I18n.t('admin.reports.resolved_msg')) + .and have_text(I18n.t('admin.reports.resolved_msg')) report.reload expect(report.action_taken_by_account) diff --git a/spec/system/admin/reset_spec.rb b/spec/system/admin/reset_spec.rb index 77f97c2eeb226f..741a2c1567ce3e 100644 --- a/spec/system/admin/reset_spec.rb +++ b/spec/system/admin/reset_spec.rb @@ -15,7 +15,7 @@ end.to change(Admin::ActionLog.where(target: account.user), :count).by(1) expect(page) - .to have_content(account.username) + .to have_text(account.username) end def admin_user diff --git a/spec/system/admin/roles_spec.rb b/spec/system/admin/roles_spec.rb index 2a82d80b71574c..8765bc996707e4 100644 --- a/spec/system/admin/roles_spec.rb +++ b/spec/system/admin/roles_spec.rb @@ -43,7 +43,7 @@ expect { click_on I18n.t('admin.roles.add_new') } .to_not change(UserRole, :count) expect(page) - .to have_content(I18n.t('activerecord.errors.models.user_role.attributes.position.elevated')) + .to have_text(I18n.t('activerecord.errors.models.user_role.attributes.position.elevated')) # Valid submission fill_in 'user_role_name', with: 'Baz' diff --git a/spec/system/admin/rules_spec.rb b/spec/system/admin/rules_spec.rb index dca6323f6c5ca2..b40a6035daeda8 100644 --- a/spec/system/admin/rules_spec.rb +++ b/spec/system/admin/rules_spec.rb @@ -13,12 +13,12 @@ visit admin_rules_path expect(page) - .to have_content(I18n.t('admin.rules.title')) - .and have_content(rule.text) + .to have_text(I18n.t('admin.rules.title')) + .and have_text(rule.text) click_on(rule.text) expect(page) - .to have_content(I18n.t('admin.rules.title')) + .to have_text(I18n.t('admin.rules.title')) end end @@ -33,14 +33,14 @@ expect { submit_form } .to_not change(Rule, :count) expect(page) - .to have_content(/error below/) + .to have_text(/error below/) # Valid submission fill_in 'rule_text', with: 'No yelling on the bus!' expect { submit_form } .to change(Rule, :count).by(1) expect(page) - .to have_content(I18n.t('admin.rules.title')) + .to have_text(I18n.t('admin.rules.title')) end def submit_form @@ -56,16 +56,16 @@ def submit_form visit admin_rules_path expect(page) - .to have_content(I18n.t('admin.rules.title')) + .to have_text(I18n.t('admin.rules.title')) expect(Rule.ordered.pluck(:text)).to eq ['This is another rule', 'This is a rule'] click_on(I18n.t('admin.rules.move_down')) expect(page) - .to have_content(I18n.t('admin.rules.title')) - .and have_content(first_rule.text) - .and have_content(second_rule.text) + .to have_text(I18n.t('admin.rules.title')) + .and have_text(first_rule.text) + .and have_text(second_rule.text) expect(Rule.ordered.pluck(:text)).to eq ['This is a rule', 'This is another rule'] end diff --git a/spec/system/admin/settings/about_spec.rb b/spec/system/admin/settings/about_spec.rb index 93ee3f6864b696..e46020f147e810 100644 --- a/spec/system/admin/settings/about_spec.rb +++ b/spec/system/admin/settings/about_spec.rb @@ -18,7 +18,7 @@ click_on submit_button expect(page) - .to have_content(success_message) + .to have_text(success_message) end def extended_description_field diff --git a/spec/system/admin/settings/appearance_spec.rb b/spec/system/admin/settings/appearance_spec.rb index 2f6e67979ed7a5..b09115dd0a13dd 100644 --- a/spec/system/admin/settings/appearance_spec.rb +++ b/spec/system/admin/settings/appearance_spec.rb @@ -18,7 +18,7 @@ click_on submit_button expect(page) - .to have_content(success_message) + .to have_text(success_message) end def custom_css_field diff --git a/spec/system/admin/settings/branding_spec.rb b/spec/system/admin/settings/branding_spec.rb index 78364669e9b98a..9405bcecd07621 100644 --- a/spec/system/admin/settings/branding_spec.rb +++ b/spec/system/admin/settings/branding_spec.rb @@ -25,7 +25,7 @@ .to change(Setting, :site_short_description).to('new key value') expect(page) - .to have_content(success_message) + .to have_text(success_message) end def short_description_field diff --git a/spec/system/admin/settings/content_retention_spec.rb b/spec/system/admin/settings/content_retention_spec.rb index b813c4fa5b9fbc..a724202c857529 100644 --- a/spec/system/admin/settings/content_retention_spec.rb +++ b/spec/system/admin/settings/content_retention_spec.rb @@ -18,7 +18,7 @@ click_on submit_button expect(page) - .to have_content(success_message) + .to have_text(success_message) end def media_cache_retention_period_field diff --git a/spec/system/admin/settings/discovery_spec.rb b/spec/system/admin/settings/discovery_spec.rb index f6909da9be85f6..04618f07183cf7 100644 --- a/spec/system/admin/settings/discovery_spec.rb +++ b/spec/system/admin/settings/discovery_spec.rb @@ -17,7 +17,7 @@ click_on submit_button expect(page) - .to have_content(success_message) + .to have_text(success_message) end def trends_box diff --git a/spec/system/admin/settings/registrations_spec.rb b/spec/system/admin/settings/registrations_spec.rb index 9b8bef41729323..35c99d6a9a0d0b 100644 --- a/spec/system/admin/settings/registrations_spec.rb +++ b/spec/system/admin/settings/registrations_spec.rb @@ -18,7 +18,7 @@ click_on submit_button expect(page) - .to have_content(success_message) + .to have_text(success_message) end def open_mode_option diff --git a/spec/system/admin/site_uploads_spec.rb b/spec/system/admin/site_uploads_spec.rb index 5cbd8d275c9f05..c4f41367774993 100644 --- a/spec/system/admin/site_uploads_spec.rb +++ b/spec/system/admin/site_uploads_spec.rb @@ -20,7 +20,7 @@ expect { site_upload.reload } .to raise_error(ActiveRecord::RecordNotFound) expect(page) - .to have_content(I18n.t('admin.site_uploads.destroyed_msg')) + .to have_text(I18n.t('admin.site_uploads.destroyed_msg')) .and have_title(I18n.t('admin.settings.branding.title')) end end diff --git a/spec/system/admin/software_updates_spec.rb b/spec/system/admin/software_updates_spec.rb index 7eec0c659d0b58..876fed874d27e8 100644 --- a/spec/system/admin/software_updates_spec.rb +++ b/spec/system/admin/software_updates_spec.rb @@ -15,9 +15,9 @@ expect(page) .to have_title(I18n.t('admin.software_updates.title')) - .and have_content(latest_release.version) - .and have_content(other_release.version) - .and have_no_content(outdated_release.version) + .and have_text(latest_release.version) + .and have_text(other_release.version) + .and have_no_text(outdated_release.version) within("#software_update_#{latest_release.id}") do click_on I18n.t('admin.software_updates.release_notes') diff --git a/spec/system/admin/statuses_spec.rb b/spec/system/admin/statuses_spec.rb index 998ffc89df8503..369718f44cbae2 100644 --- a/spec/system/admin/statuses_spec.rb +++ b/spec/system/admin/statuses_spec.rb @@ -19,7 +19,7 @@ it 'displays a notice about selection' do click_on button_for_report - expect(page).to have_content(selection_error_text) + expect(page).to have_text(selection_error_text) end end diff --git a/spec/system/admin/tags_spec.rb b/spec/system/admin/tags_spec.rb index 654fac3340b857..74013c8ca74a78 100644 --- a/spec/system/admin/tags_spec.rb +++ b/spec/system/admin/tags_spec.rb @@ -20,7 +20,7 @@ expect { click_on submit_button } .to_not(change { tag.reload.display_name }) expect(page) - .to have_content(match_error_text) + .to have_text(match_error_text) fill_in display_name_field, with: 'TEST' expect { click_on submit_button } diff --git a/spec/system/admin/terms_of_service/histories_spec.rb b/spec/system/admin/terms_of_service/histories_spec.rb index aa59550d097ec1..6969ed3e529472 100644 --- a/spec/system/admin/terms_of_service/histories_spec.rb +++ b/spec/system/admin/terms_of_service/histories_spec.rb @@ -14,8 +14,8 @@ visit admin_terms_of_service_history_path expect(page) - .to have_content(I18n.t('admin.terms_of_service.history')) - .and have_content(/changelog notes from v1/) + .to have_text(I18n.t('admin.terms_of_service.history')) + .and have_text(/changelog notes from v1/) end end end diff --git a/spec/system/admin/terms_of_service_spec.rb b/spec/system/admin/terms_of_service_spec.rb index 08421380343d67..1d9723089f06d3 100644 --- a/spec/system/admin/terms_of_service_spec.rb +++ b/spec/system/admin/terms_of_service_spec.rb @@ -15,7 +15,7 @@ .to have_title(I18n.t('admin.terms_of_service.title')) expect(page) - .to have_content(terms.text) + .to have_text(terms.text) end end end diff --git a/spec/system/admin/trends/links/preview_card_providers_spec.rb b/spec/system/admin/trends/links/preview_card_providers_spec.rb index 4636ca86b2ca8b..23e1c3d425d19b 100644 --- a/spec/system/admin/trends/links/preview_card_providers_spec.rb +++ b/spec/system/admin/trends/links/preview_card_providers_spec.rb @@ -17,7 +17,7 @@ click_on button_for_allow expect(page) - .to have_content(selection_error_text) + .to have_text(selection_error_text) end end diff --git a/spec/system/admin/trends/links_spec.rb b/spec/system/admin/trends/links_spec.rb index 6140ea81541c8b..2d5a1b04096c77 100644 --- a/spec/system/admin/trends/links_spec.rb +++ b/spec/system/admin/trends/links_spec.rb @@ -17,7 +17,7 @@ click_on button_for_allow expect(page) - .to have_content(selection_error_text) + .to have_text(selection_error_text) end end diff --git a/spec/system/admin/trends/statuses_spec.rb b/spec/system/admin/trends/statuses_spec.rb index 6e1aa17b7d2675..ef764d801ffc7d 100644 --- a/spec/system/admin/trends/statuses_spec.rb +++ b/spec/system/admin/trends/statuses_spec.rb @@ -17,7 +17,7 @@ click_on button_for_allow expect(page) - .to have_content(selection_error_text) + .to have_text(selection_error_text) end end diff --git a/spec/system/admin/trends/tags_spec.rb b/spec/system/admin/trends/tags_spec.rb index 631288d4fc0c11..a1cb823b6f1235 100644 --- a/spec/system/admin/trends/tags_spec.rb +++ b/spec/system/admin/trends/tags_spec.rb @@ -16,7 +16,7 @@ within('.filter-subset') do expect(page) - .to have_content("#{I18n.t('admin.accounts.moderation.pending')} (0)") + .to have_text("#{I18n.t('admin.accounts.moderation.pending')} (0)") end end end @@ -31,7 +31,7 @@ click_on button_for_allow - expect(page).to have_content(selection_error_text) + expect(page).to have_text(selection_error_text) end end diff --git a/spec/system/admin/warning_presets_spec.rb b/spec/system/admin/warning_presets_spec.rb index 88c697b7431a8d..cd5c591c4adee7 100644 --- a/spec/system/admin/warning_presets_spec.rb +++ b/spec/system/admin/warning_presets_spec.rb @@ -13,8 +13,8 @@ visit admin_warning_presets_path expect(page) - .to have_content(I18n.t('admin.warning_presets.title')) - .and have_content(account_warning_preset.text) + .to have_text(I18n.t('admin.warning_presets.title')) + .and have_text(account_warning_preset.text) end end @@ -27,14 +27,14 @@ expect { submit_form } .to_not change(AccountWarningPreset, :count) expect(page) - .to have_content(/error below/) + .to have_text(/error below/) # Valid submission fill_in 'account_warning_preset_text', with: 'You cant do that here' expect { submit_form } .to change(AccountWarningPreset, :count).by(1) expect(page) - .to have_content(I18n.t('admin.warning_presets.title')) + .to have_text(I18n.t('admin.warning_presets.title')) end def submit_form diff --git a/spec/system/admin/webhooks_spec.rb b/spec/system/admin/webhooks_spec.rb index 709752dc9ce9c8..eeaaa4e8b9935f 100644 --- a/spec/system/admin/webhooks_spec.rb +++ b/spec/system/admin/webhooks_spec.rb @@ -13,12 +13,12 @@ visit admin_webhooks_path expect(page) - .to have_content(I18n.t('admin.webhooks.title')) - .and have_content(webhook.url) + .to have_text(I18n.t('admin.webhooks.title')) + .and have_text(webhook.url) click_on(webhook.url) expect(page) - .to have_content(I18n.t('admin.webhooks.title')) + .to have_text(I18n.t('admin.webhooks.title')) end end @@ -29,14 +29,14 @@ # Visit new page click_on I18n.t('admin.webhooks.add_new') expect(page) - .to have_content(I18n.t('admin.webhooks.new')) + .to have_text(I18n.t('admin.webhooks.new')) # Invalid submission (missing url, no events selected) fill_in 'webhook_url', with: '' expect { submit_form } .to_not change(Webhook, :count) expect(page) - .to have_content(/errors below/) + .to have_text(/errors below/) # Valid submission fill_in 'webhook_url', with: 'https://host.example/hooks/123' @@ -44,7 +44,7 @@ expect { submit_form } .to change(Webhook, :count).by(1) expect(page) - .to have_content(I18n.t('admin.webhooks.title')) + .to have_text(I18n.t('admin.webhooks.title')) end it 'fails to create with no events selected' do @@ -54,7 +54,7 @@ expect { submit_form } .to_not change(Webhook, :count) expect(page) - .to have_content(/errors below/) + .to have_text(/errors below/) end def submit_form diff --git a/spec/system/auth/registrations_spec.rb b/spec/system/auth/registrations_spec.rb index 3a103667e6bd1b..04ad77f819aeb8 100644 --- a/spec/system/auth/registrations_spec.rb +++ b/spec/system/auth/registrations_spec.rb @@ -10,7 +10,7 @@ visit new_user_registration_path expect(page) .to have_title(I18n.t('auth.register')) - .and have_content(rule.text) + .and have_text(rule.text) end end @@ -28,7 +28,7 @@ expect { fill_in_and_submit_form } .to not_change(User, :count) expect(page) - .to have_content(/error below/) + .to have_text(/error below/) end end @@ -45,7 +45,7 @@ expect(User.last) .to have_attributes(email: 'test@example.com', age_verified_at: be_present) expect(page) - .to have_content(I18n.t('auth.setup.title')) + .to have_text(I18n.t('auth.setup.title')) end end diff --git a/spec/system/auth/setup_spec.rb b/spec/system/auth/setup_spec.rb index 154f8cd5fac5bd..1c3ef672949d21 100644 --- a/spec/system/auth/setup_spec.rb +++ b/spec/system/auth/setup_spec.rb @@ -12,7 +12,7 @@ visit auth_setup_path expect(page) - .to have_content(I18n.t('auth.setup.title')) + .to have_text(I18n.t('auth.setup.title')) find('summary.lead').click fill_in 'user_email', with: 'new-email@example.host' @@ -20,7 +20,7 @@ expect { submit_form } .to(change { user.reload.unconfirmed_email }) expect(page) - .to have_content(I18n.t('auth.setup.new_confirmation_instructions_sent')) + .to have_text(I18n.t('auth.setup.new_confirmation_instructions_sent')) end def submit_form diff --git a/spec/system/captcha_spec.rb b/spec/system/captcha_spec.rb index 89c480221bb6cd..d1efbf8309d3ec 100644 --- a/spec/system/captcha_spec.rb +++ b/spec/system/captcha_spec.rb @@ -31,7 +31,7 @@ # It presents a page with a link to the app callback expect(page) - .to have_content(I18n.t('auth.confirmations.registration_complete', domain: local_domain_uri.host)) + .to have_text(I18n.t('auth.confirmations.registration_complete', domain: local_domain_uri.host)) .and have_link(I18n.t('auth.confirmations.clicking_this_link'), href: client_app.confirmation_redirect_uri) end end diff --git a/spec/system/disputes/appeals_spec.rb b/spec/system/disputes/appeals_spec.rb index 0b601c45841c08..2003a580c3c3da 100644 --- a/spec/system/disputes/appeals_spec.rb +++ b/spec/system/disputes/appeals_spec.rb @@ -23,7 +23,7 @@ expect(emails) .to be_empty expect(page) - .to have_content(/can't be blank/) + .to have_text(/can't be blank/) # Valid with text fill_in 'appeal_text', with: 'It wasnt me this time!' @@ -31,7 +31,7 @@ .to change(Appeal, :count).by(1) .and send_email(to: admin.email, subject: new_appeal_subject) expect(page) - .to have_content(I18n.t('disputes.strikes.appealed_msg')) + .to have_text(I18n.t('disputes.strikes.appealed_msg')) end def new_appeal_subject diff --git a/spec/system/disputes/strikes_spec.rb b/spec/system/disputes/strikes_spec.rb index d2b6b08c46c731..5d026a61647d35 100644 --- a/spec/system/disputes/strikes_spec.rb +++ b/spec/system/disputes/strikes_spec.rb @@ -17,7 +17,7 @@ find('.strike-entry').click expect(page) .to have_title(strike_page_title) - .and have_content(strike.text) + .and have_text(strike.text) end def strike_page_title diff --git a/spec/system/filters_spec.rb b/spec/system/filters_spec.rb index 652a1a3f234ec9..a44da1d68f8d01 100644 --- a/spec/system/filters_spec.rb +++ b/spec/system/filters_spec.rb @@ -15,7 +15,7 @@ visit filters_path expect(page) - .to have_content('Photography') + .to have_text('Photography') .and have_private_cache_control end end @@ -26,7 +26,7 @@ click_on I18n.t('filters.new.title') fill_in_filter_form - expect(page).to have_content(filter_title) + expect(page).to have_text(filter_title) end it 'Does not save with invalid values' do @@ -36,7 +36,7 @@ expect { click_on I18n.t('filters.new.save') } .to_not change(CustomFilter, :count) expect(page) - .to have_content("can't be blank") + .to have_text("can't be blank") end end @@ -60,7 +60,7 @@ .to change { keyword_one.reload.keyword }.to(/New value/) .and(change { keyword_two.reload.keyword }.to(/Wilderness/)) - expect(page).to have_content(new_title) + expect(page).to have_text(new_title) end it 'Does not save with invalid values' do @@ -72,7 +72,7 @@ expect { click_on submit_button } .to_not(change { custom_filter.reload.updated_at }) expect(page) - .to have_content("can't be blank") + .to have_text("can't be blank") end end @@ -82,12 +82,12 @@ it 'Deletes the filter' do navigate_to_filters - expect(page).to have_content filter_title + expect(page).to have_text filter_title expect do click_on I18n.t('filters.index.delete') end.to change(CustomFilter, :count).by(-1) - expect(page).to have_no_content(filter_title) + expect(page).to have_no_text(filter_title) end end @@ -95,7 +95,7 @@ def navigate_to_filters visit settings_path click_on I18n.t('filters.index.title') - expect(page).to have_content I18n.t('filters.index.title') + expect(page).to have_text I18n.t('filters.index.title') end def fill_in_filter_form diff --git a/spec/system/invites_spec.rb b/spec/system/invites_spec.rb index 2b3cca8d41a57f..231c19e8866dad 100644 --- a/spec/system/invites_spec.rb +++ b/spec/system/invites_spec.rb @@ -17,7 +17,7 @@ within css_id(invite) do expect(page) - .to have_content(invite.uses) + .to have_text(invite.uses) .and have_private_cache_control expect(copyable_field.value) .to eq(public_invite_url(invite_code: invite.code)) @@ -46,7 +46,7 @@ .to change { invite.reload.expired? }.to(true) within css_id(invite) do - expect(page).to have_content I18n.t('invites.expired') + expect(page).to have_text I18n.t('invites.expired') end end end diff --git a/spec/system/oauth_spec.rb b/spec/system/oauth_spec.rb index bba4b03ace3e9d..585e20ca5e5d90 100644 --- a/spec/system/oauth_spec.rb +++ b/spec/system/oauth_spec.rb @@ -24,7 +24,7 @@ subject # It presents the user with an authorization page - expect(page).to have_content(oauth_authorize_text) + expect(page).to have_text(oauth_authorize_text) # It grants the app access to the account expect { click_on oauth_authorize_text } @@ -38,7 +38,7 @@ subject # It presents the user with an authorization page - expect(page).to have_content(oauth_deny_text) + expect(page).to have_text(oauth_deny_text) # It does not grant the app access to the account expect { click_on oauth_deny_text } @@ -108,7 +108,7 @@ within '.form-container .flash-message' do expect(page) - .to have_content(doorkeeper_invalid_code_message) + .to have_text(doorkeeper_invalid_code_message) end end @@ -133,7 +133,7 @@ def doorkeeper_invalid_code_message subject # It presents the user with the 2FA setup page - expect(page).to have_content(I18n.t('two_factor_authentication.role_requirement', domain: local_domain_uri.host)) + expect(page).to have_text(I18n.t('two_factor_authentication.role_requirement', domain: local_domain_uri.host)) click_on I18n.t('otp_authentication.setup') # Fill in challenge form @@ -150,7 +150,7 @@ def doorkeeper_invalid_code_message click_on I18n.t('two_factor_authentication.resume_app_authorization') # It presents the user with an authorization page - expect(page).to have_content(oauth_authorize_text) + expect(page).to have_text(oauth_authorize_text) # It grants the app access to the account expect { click_on oauth_authorize_text } @@ -177,15 +177,15 @@ def doorkeeper_invalid_code_message visit "/oauth/authorize?#{params.to_query}" # It presents the user with a log-in page - expect(page).to have_content(I18n.t('auth.login')) + expect(page).to have_text(I18n.t('auth.login')) # Failing to log-in presents the form again fill_in_auth_details(email, 'wrong password') - expect(page).to have_content(I18n.t('auth.login')) + expect(page).to have_text(I18n.t('auth.login')) # Logging in redirects to an authorization page fill_in_auth_details(email, password) - expect(page).to have_content(oauth_authorize_text) + expect(page).to have_text(oauth_authorize_text) # It grants the app access to the account expect { click_on oauth_authorize_text } @@ -199,15 +199,15 @@ def doorkeeper_invalid_code_message visit "/oauth/authorize?#{params.to_query}" # It presents the user with a log-in page - expect(page).to have_content(I18n.t('auth.login')) + expect(page).to have_text(I18n.t('auth.login')) # Failing to log-in presents the form again fill_in_auth_details(email, 'wrong password') - expect(page).to have_content(I18n.t('auth.login')) + expect(page).to have_text(I18n.t('auth.login')) # Logging in redirects to an authorization page fill_in_auth_details(email, password) - expect(page).to have_content(oauth_authorize_text) + expect(page).to have_text(oauth_authorize_text) # It does not grant the app access to the account expect { click_on oauth_deny_text } @@ -224,23 +224,23 @@ def doorkeeper_invalid_code_message visit "/oauth/authorize?#{params.to_query}" # It presents the user with a log-in page - expect(page).to have_content(I18n.t('auth.login')) + expect(page).to have_text(I18n.t('auth.login')) # Failing to log-in presents the form again fill_in_auth_details(email, 'wrong password') - expect(page).to have_content(I18n.t('auth.login')) + expect(page).to have_text(I18n.t('auth.login')) # Logging in redirects to a two-factor authentication page fill_in_auth_details(email, password) - expect(page).to have_content(I18n.t('simple_form.hints.sessions.otp')) + expect(page).to have_text(I18n.t('simple_form.hints.sessions.otp')) # Filling in an incorrect two-factor authentication code presents the form again fill_in_otp_details('wrong') - expect(page).to have_content(I18n.t('simple_form.hints.sessions.otp')) + expect(page).to have_text(I18n.t('simple_form.hints.sessions.otp')) # Filling in the correct TOTP code redirects to an app authorization page fill_in_otp_details(user.current_otp) - expect(page).to have_content(oauth_authorize_text) + expect(page).to have_text(oauth_authorize_text) # It grants the app access to the account expect { click_on oauth_authorize_text } @@ -254,23 +254,23 @@ def doorkeeper_invalid_code_message visit "/oauth/authorize?#{params.to_query}" # It presents the user with a log-in page - expect(page).to have_content(I18n.t('auth.login')) + expect(page).to have_text(I18n.t('auth.login')) # Failing to log-in presents the form again fill_in_auth_details(email, 'wrong password') - expect(page).to have_content(I18n.t('auth.login')) + expect(page).to have_text(I18n.t('auth.login')) # Logging in redirects to a two-factor authentication page fill_in_auth_details(email, password) - expect(page).to have_content(I18n.t('simple_form.hints.sessions.otp')) + expect(page).to have_text(I18n.t('simple_form.hints.sessions.otp')) # Filling in an incorrect two-factor authentication code presents the form again fill_in_otp_details('wrong') - expect(page).to have_content(I18n.t('simple_form.hints.sessions.otp')) + expect(page).to have_text(I18n.t('simple_form.hints.sessions.otp')) # Filling in the correct TOTP code redirects to an app authorization page fill_in_otp_details(user.current_otp) - expect(page).to have_content(oauth_authorize_text) + expect(page).to have_text(oauth_authorize_text) # It does not grant the app access to the account expect { click_on oauth_deny_text } diff --git a/spec/system/redirections_spec.rb b/spec/system/redirections_spec.rb index 6abde389db3a7d..5a90c64966bd24 100644 --- a/spec/system/redirections_spec.rb +++ b/spec/system/redirections_spec.rb @@ -12,7 +12,7 @@ visit "/@#{account.pretty_acct}" expect(page) - .to have_content(redirect_title) # Redirect explanation + .to have_text(redirect_title) # Redirect explanation .and have_link(account.url, href: account.url) # Appropriate account link .and have_css('body', class: 'app-body') end @@ -23,7 +23,7 @@ visit "/@#{account.pretty_acct}/#{status.id}" expect(page) - .to have_content(redirect_title) # Redirect explanation + .to have_text(redirect_title) # Redirect explanation .and have_link(status.url, href: status.url) # Appropriate status link .and have_css('body', class: 'app-body') end diff --git a/spec/system/report_interface_spec.rb b/spec/system/report_interface_spec.rb index 3df6b3714b270d..93f4d3dee76170 100644 --- a/spec/system/report_interface_spec.rb +++ b/spec/system/report_interface_spec.rb @@ -41,6 +41,6 @@ def resolve_report click_on I18n.t('admin.reports.mark_as_resolved') end expect(page) - .to have_content(I18n.t('admin.reports.resolved_msg')) + .to have_text(I18n.t('admin.reports.resolved_msg')) end end diff --git a/spec/system/settings/aliases_spec.rb b/spec/system/settings/aliases_spec.rb index 96d94615038699..13aa3e67f6ec70 100644 --- a/spec/system/settings/aliases_spec.rb +++ b/spec/system/settings/aliases_spec.rb @@ -14,7 +14,7 @@ # View index page expect(page) - .to have_content(I18n.t('settings.aliases')) + .to have_text(I18n.t('settings.aliases')) .and have_private_cache_control end end @@ -31,7 +31,7 @@ expect { submit_form } .to change(AccountAlias, :count).by(1) expect(page) - .to have_content(I18n.t('aliases.created_msg')) + .to have_text(I18n.t('aliases.created_msg')) end end @@ -44,7 +44,7 @@ expect { submit_form } .to not_change(AccountAlias, :count) expect(page) - .to have_content(I18n.t('settings.aliases')) + .to have_text(I18n.t('settings.aliases')) end end @@ -66,8 +66,8 @@ def submit_form .to change(AccountAlias, :count).by(-1) expect(page) - .to have_content(I18n.t('settings.aliases')) - .and have_content(I18n.t('aliases.deleted_msg')) + .to have_text(I18n.t('settings.aliases')) + .and have_text(I18n.t('aliases.deleted_msg')) expect { account_alias.reload } .to raise_error(ActiveRecord::RecordNotFound) end diff --git a/spec/system/settings/applications_spec.rb b/spec/system/settings/applications_spec.rb index 024a6403555d77..e7ea1aedf7ed61 100644 --- a/spec/system/settings/applications_spec.rb +++ b/spec/system/settings/applications_spec.rb @@ -13,7 +13,7 @@ visit settings_applications_path expect(page) - .to have_content(application.name) + .to have_text(application.name) .and have_private_cache_control end end @@ -23,7 +23,7 @@ visit settings_application_path(application) expect(page) - .to have_content(application.name) + .to have_text(application.name) end end @@ -36,11 +36,11 @@ expect { submit_form } .to change(Doorkeeper::Application, :count).by(1) expect(page) - .to have_content(I18n.t('doorkeeper.applications.index.title')) - .and have_content('My new app') - .and have_content('read') - .and have_content('write') - .and have_content('follow') + .to have_text(I18n.t('doorkeeper.applications.index.title')) + .and have_text('My new app') + .and have_text('read') + .and have_text('write') + .and have_text('follow') end it 'does not save with invalid form values' do @@ -49,7 +49,7 @@ expect { submit_form } .to not_change(Doorkeeper::Application, :count) expect(page) - .to have_content("can't be blank") + .to have_text("can't be blank") end def fill_in_form @@ -80,7 +80,7 @@ def submit_form submit_form expect(page) - .to have_content('My new app name with a new value') + .to have_text('My new app name with a new value') .and have_checked_field('push', id: :doorkeeper_application_scopes_push) end @@ -92,7 +92,7 @@ def submit_form submit_form expect(page) - .to have_content("can't be blank") + .to have_text("can't be blank") end def submit_form @@ -117,7 +117,7 @@ def submit_form expect { destroy_application } .to change(Doorkeeper::Application, :count).by(-1) expect(page) - .to have_no_content(application.name) + .to have_no_text(application.name) expect(redis_pipeline_stub) .to have_received(:publish).with("timeline:access_token:#{access_token.id}", '{"event":"kill"}') end @@ -141,7 +141,7 @@ def stub_redis_pipeline expect { regenerate_token } .to(change { user_application_token.first.token }) expect(page) - .to have_content(I18n.t('applications.token_regenerated')) + .to have_text(I18n.t('applications.token_regenerated')) end def user_application_token diff --git a/spec/system/settings/deletes_spec.rb b/spec/system/settings/deletes_spec.rb index 91f71042526b78..2a18a276948fdd 100644 --- a/spec/system/settings/deletes_spec.rb +++ b/spec/system/settings/deletes_spec.rb @@ -18,13 +18,13 @@ fill_in 'form_delete_confirmation_password', with: 'wrongvalue' click_on I18n.t('deletes.proceed') expect(page) - .to have_content(I18n.t('deletes.challenge_not_passed')) + .to have_text(I18n.t('deletes.challenge_not_passed')) # Correct confirmation value fill_in 'form_delete_confirmation_password', with: user.password click_on I18n.t('deletes.proceed') expect(page) - .to have_content(I18n.t('deletes.success_msg')) + .to have_text(I18n.t('deletes.success_msg')) expect(page) .to have_title(I18n.t('auth.login')) expect(User.find_by(id: user.id)) diff --git a/spec/system/settings/exports_spec.rb b/spec/system/settings/exports_spec.rb index 2cc2961a0bcee1..392b5a50abd3d0 100644 --- a/spec/system/settings/exports_spec.rb +++ b/spec/system/settings/exports_spec.rb @@ -13,7 +13,7 @@ visit settings_export_path expect(page) - .to have_content(takeout_summary) + .to have_text(takeout_summary) .and have_private_cache_control end end @@ -26,7 +26,7 @@ expect { request_archive } .to change(BackupWorker.jobs, :size).by(1) expect(page) - .to have_content(takeout_summary) + .to have_text(takeout_summary) end def request_archive diff --git a/spec/system/settings/login_activities_spec.rb b/spec/system/settings/login_activities_spec.rb index ff89c3f37ec43a..4561c80057ce9f 100644 --- a/spec/system/settings/login_activities_spec.rb +++ b/spec/system/settings/login_activities_spec.rb @@ -16,9 +16,9 @@ click_on I18n.t('sessions.view_authentication_history') expect(page) - .to have_content(browser_description) - .and have_content(login_activity.authentication_method) - .and have_content(login_activity.ip) + .to have_text(browser_description) + .and have_text(login_activity.authentication_method) + .and have_text(login_activity.ip) .and have_private_cache_control end diff --git a/spec/system/settings/migration/redirects_spec.rb b/spec/system/settings/migration/redirects_spec.rb index 11882c571dc44f..fa53a427964b49 100644 --- a/spec/system/settings/migration/redirects_spec.rb +++ b/spec/system/settings/migration/redirects_spec.rb @@ -29,7 +29,7 @@ expect { click_on I18n.t('migrations.cancel') } .to(change { user.reload.account.moved_to_account_id }.to(nil)) expect(page) - .to have_content(I18n.t('migrations.cancelled_msg')) + .to have_text(I18n.t('migrations.cancelled_msg')) end context 'when user has blank encrypted password' do diff --git a/spec/system/settings/migrations_spec.rb b/spec/system/settings/migrations_spec.rb index d95636a6091f23..4b9491841552dd 100644 --- a/spec/system/settings/migrations_spec.rb +++ b/spec/system/settings/migrations_spec.rb @@ -15,7 +15,7 @@ visit settings_migration_path expect(page) - .to have_content(I18n.t('settings.migrate')) + .to have_text(I18n.t('settings.migrate')) end end @@ -26,8 +26,8 @@ visit settings_migration_path expect(page) - .to have_content(I18n.t('settings.migrate')) - .and have_content(moved_to_account.pretty_acct) + .to have_text(I18n.t('settings.migrate')) + .and have_text(moved_to_account.pretty_acct) end end end @@ -48,7 +48,7 @@ expect { fill_in_and_submit } .to(change { user.account.reload.moved_to_account_id }.to(acct.id)) expect(page) - .to have_content(I18n.t('settings.migrate')) + .to have_text(I18n.t('settings.migrate')) end end @@ -61,7 +61,7 @@ expect { fill_in_and_submit_via_username("@#{user.account.username}") } .to(change { user.account.reload.moved_to_account_id }.to(acct.id)) expect(page) - .to have_content(I18n.t('settings.migrate')) + .to have_text(I18n.t('settings.migrate')) end end end @@ -75,7 +75,7 @@ expect { fill_in_and_submit } .to_not(change { user.account.reload.moved_to_account_id }.from(nil)) expect(page) - .to have_content(I18n.t('settings.migrate')) + .to have_text(I18n.t('settings.migrate')) end end @@ -88,7 +88,7 @@ expect { fill_in_and_submit } .to_not(change { user.account.reload.moved_to_account_id }.from(nil)) expect(page) - .to have_content(I18n.t('settings.migrate')) + .to have_text(I18n.t('settings.migrate')) end end diff --git a/spec/system/settings/privacy_spec.rb b/spec/system/settings/privacy_spec.rb index 5e1498613e61b4..e3e216548730fb 100644 --- a/spec/system/settings/privacy_spec.rb +++ b/spec/system/settings/privacy_spec.rb @@ -15,7 +15,7 @@ # View settings page visit settings_privacy_path expect(page) - .to have_content(I18n.t('privacy.title')) + .to have_text(I18n.t('privacy.title')) .and have_private_cache_control # Fill out form and submit @@ -24,8 +24,8 @@ expect { click_on submit_button } .to change { user.account.reload.discoverable }.to(true) expect(page) - .to have_content(I18n.t('privacy.title')) - .and have_content(success_message) + .to have_text(I18n.t('privacy.title')) + .and have_text(success_message) expect(ActivityPub::UpdateDistributionWorker) .to have_enqueued_sidekiq_job(user.account.id) end @@ -40,7 +40,7 @@ # View settings page visit settings_privacy_path expect(page) - .to have_content(I18n.t('privacy.title')) + .to have_text(I18n.t('privacy.title')) .and have_private_cache_control # Fill out form and submit @@ -49,7 +49,7 @@ expect { click_on submit_button } .to_not(change { user.account.reload.discoverable }) expect(page) - .to have_content(I18n.t('privacy.title')) + .to have_text(I18n.t('privacy.title')) expect(ActivityPub::UpdateDistributionWorker) .to_not have_enqueued_sidekiq_job(anything) end diff --git a/spec/system/settings/sessions_spec.rb b/spec/system/settings/sessions_spec.rb index ffc7a64185a725..9ce35b0fa9b800 100644 --- a/spec/system/settings/sessions_spec.rb +++ b/spec/system/settings/sessions_spec.rb @@ -19,7 +19,7 @@ expect { session_activation.reload } .to raise_error(ActiveRecord::RecordNotFound) expect(page) - .to have_content(I18n.t('sessions.revoke_success')) + .to have_text(I18n.t('sessions.revoke_success')) end end end diff --git a/spec/system/settings/two_factor_authentication/recovery_codes_spec.rb b/spec/system/settings/two_factor_authentication/recovery_codes_spec.rb index ba8491429c6aef..59ea57f7b3fa95 100644 --- a/spec/system/settings/two_factor_authentication/recovery_codes_spec.rb +++ b/spec/system/settings/two_factor_authentication/recovery_codes_spec.rb @@ -24,10 +24,10 @@ .to(change { user.reload.otp_backup_codes }) expect(page) - .to have_content(I18n.t('two_factor_authentication.recovery_codes_regenerated')) + .to have_text(I18n.t('two_factor_authentication.recovery_codes_regenerated')) .and have_title(I18n.t('settings.two_factor_authentication')) .and have_css('ol.recovery-codes') - .and have_content(backup_code) + .and have_text(backup_code) end def stub_code_generator diff --git a/spec/system/settings/two_factor_authentication_methods_spec.rb b/spec/system/settings/two_factor_authentication_methods_spec.rb index 867c39e376fb71..2eef78257f1aa2 100644 --- a/spec/system/settings/two_factor_authentication_methods_spec.rb +++ b/spec/system/settings/two_factor_authentication_methods_spec.rb @@ -14,7 +14,7 @@ it 'disables 2FA with challenge confirmation', :inline_jobs do visit settings_two_factor_authentication_methods_path expect(page) - .to have_content(I18n.t('settings.two_factor_authentication')) + .to have_text(I18n.t('settings.two_factor_authentication')) .and have_private_cache_control # Attempt to disable @@ -29,7 +29,7 @@ .and send_email(to: user.email, subject: I18n.t('devise.mailer.two_factor_disabled.subject')) expect(page) - .to have_content(I18n.t('two_factor_authentication.disabled_success')) + .to have_text(I18n.t('two_factor_authentication.disabled_success')) end end end diff --git a/spec/system/settings/verifications_spec.rb b/spec/system/settings/verifications_spec.rb index 87220057ed57ba..089776e5de2672 100644 --- a/spec/system/settings/verifications_spec.rb +++ b/spec/system/settings/verifications_spec.rb @@ -12,7 +12,7 @@ visit settings_verification_path expect(page) - .to have_content(verification_summary) + .to have_text(verification_summary) .and have_private_cache_control fill_in attribution_field, with: " example.com\n\n https://example.net" @@ -20,9 +20,9 @@ expect { click_on submit_button } .to(change { user.account.reload.attribution_domains }.to(['example.com', 'example.net'])) expect(page) - .to have_content(success_message) + .to have_text(success_message) expect(find_field(attribution_field).value) - .to have_content("example.com\nexample.net") + .to have_text("example.com\nexample.net") end it 'rejects invalid attribution domains' do @@ -33,9 +33,9 @@ expect { click_on submit_button } .to_not(change { user.account.reload.attribution_domains }) expect(page) - .to have_content(I18n.t('activerecord.errors.messages.invalid_domain_on_line', value: 'invalid_com')) + .to have_text(I18n.t('activerecord.errors.messages.invalid_domain_on_line', value: 'invalid_com')) expect(find_field(attribution_field).value) - .to have_content("example.com\ninvalid_com") + .to have_text("example.com\ninvalid_com") end end diff --git a/spec/system/statuses_cleanup_spec.rb b/spec/system/statuses_cleanup_spec.rb index 524f710af711b1..0f490fda560933 100644 --- a/spec/system/statuses_cleanup_spec.rb +++ b/spec/system/statuses_cleanup_spec.rb @@ -23,7 +23,7 @@ expect { submit_form } .to change { account.reload.statuses_cleanup_policy.keep_pinned? }.to(false) expect(page) - .to have_content(I18n.t('settings.statuses_cleanup')) + .to have_text(I18n.t('settings.statuses_cleanup')) end def submit_form From 00c2089e81ebdd4a94612f1bed7d143fc2772bb3 Mon Sep 17 00:00:00 2001 From: Gomasy Date: Mon, 4 May 2026 18:09:17 +0900 Subject: [PATCH 006/132] Fix emoji picker not rendering when no custom emojis (#38885) --- app/javascript/mastodon/features/emoji/picker.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/javascript/mastodon/features/emoji/picker.ts b/app/javascript/mastodon/features/emoji/picker.ts index b40a3020e46791..ad7baa2993651f 100644 --- a/app/javascript/mastodon/features/emoji/picker.ts +++ b/app/javascript/mastodon/features/emoji/picker.ts @@ -29,7 +29,8 @@ export async function fetchCustomEmojiData() { const { loadAllCustomEmoji } = await import('./database'); const emojisRaw = await loadAllCustomEmoji(); if (emojisRaw.length === 0) { - return []; + customEmojis = []; + return customEmojis; } const categories = new Set(['custom']); From 708fe319080c92f2763e1d14fdce7bd132050237 Mon Sep 17 00:00:00 2001 From: Echo Date: Mon, 4 May 2026 11:50:24 +0200 Subject: [PATCH 007/132] Keep trying to load emojis if data isn't available yet (#38892) --- app/javascript/mastodon/features/emoji/database.ts | 4 ++++ app/javascript/mastodon/features/emoji/picker.ts | 7 +++++++ app/javascript/mastodon/hooks/useCustomEmojis.ts | 2 +- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/app/javascript/mastodon/features/emoji/database.ts b/app/javascript/mastodon/features/emoji/database.ts index 80bdfd12ff46f8..40bf42337c1f65 100644 --- a/app/javascript/mastodon/features/emoji/database.ts +++ b/app/javascript/mastodon/features/emoji/database.ts @@ -269,6 +269,10 @@ export async function searchCustomEmojisByShortcodes(shortcodes: string[]) { export async function loadAllCustomEmoji() { const db = await loadDB(); + const cacheValue = await db.get('etags', 'custom'); + if (!cacheValue) { + return null; + } return db.getAll('custom'); } diff --git a/app/javascript/mastodon/features/emoji/picker.ts b/app/javascript/mastodon/features/emoji/picker.ts index ad7baa2993651f..e06c296b8e0e5f 100644 --- a/app/javascript/mastodon/features/emoji/picker.ts +++ b/app/javascript/mastodon/features/emoji/picker.ts @@ -28,6 +28,13 @@ export async function fetchCustomEmojiData() { const { loadAllCustomEmoji } = await import('./database'); const emojisRaw = await loadAllCustomEmoji(); + + // If it returns null then custom emojis aren't even loaded yet. + if (emojisRaw === null) { + return []; + } + + // If it's empty, then they are loaded but there aren't any. if (emojisRaw.length === 0) { customEmojis = []; return customEmojis; diff --git a/app/javascript/mastodon/hooks/useCustomEmojis.ts b/app/javascript/mastodon/hooks/useCustomEmojis.ts index df0eed613857fd..4bac1cef2e66e4 100644 --- a/app/javascript/mastodon/hooks/useCustomEmojis.ts +++ b/app/javascript/mastodon/hooks/useCustomEmojis.ts @@ -20,7 +20,7 @@ export function useCustomEmojis() { async function loadEmojisIntoCache() { const { loadAllCustomEmoji } = await import('../features/emoji/database'); const emojisRaw = await loadAllCustomEmoji(); - if (emojisRaw.length === 0) { + if (emojisRaw === null) { return; } From a7001f52abe560c7ab2ecad7569c78f86fc84489 Mon Sep 17 00:00:00 2001 From: Echo Date: Mon, 4 May 2026 12:18:43 +0200 Subject: [PATCH 008/132] Wraps content in Callout component (#38893) --- .../mastodon/components/account_header/styles.module.scss | 3 --- .../mastodon/components/callout/styles.module.css | 7 +++++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/app/javascript/mastodon/components/account_header/styles.module.scss b/app/javascript/mastodon/components/account_header/styles.module.scss index 7d87dde147560a..2953fd0ec27dfa 100644 --- a/app/javascript/mastodon/components/account_header/styles.module.scss +++ b/app/javascript/mastodon/components/account_header/styles.module.scss @@ -200,9 +200,6 @@ $button-fallback-breakpoint: $button-breakpoint + 55px; .noteContent { white-space-collapse: preserve-breaks; - overflow-wrap: break-word; - word-break: break-all; - hyphens: auto; } .noteEditButton { diff --git a/app/javascript/mastodon/components/callout/styles.module.css b/app/javascript/mastodon/components/callout/styles.module.css index f7fbce491bb1b4..fc05e57ab3a86c 100644 --- a/app/javascript/mastodon/components/callout/styles.module.css +++ b/app/javascript/mastodon/components/callout/styles.module.css @@ -17,6 +17,11 @@ margin-top: -2px; } +.content, +.body { + min-width: 0; +} + .content { display: flex; gap: 8px; @@ -32,6 +37,8 @@ .body { flex-grow: 1; + overflow-wrap: break-word; + hyphens: auto; a { color: inherit; From ff991317761d9e395fc1160727faf31405e8f068 Mon Sep 17 00:00:00 2001 From: Jeong Arm Date: Mon, 4 May 2026 20:37:56 +0900 Subject: [PATCH 009/132] Fix unblocking domain from blocked domains column does not update the list (#38882) --- app/javascript/mastodon/components/domain.tsx | 6 ++++-- app/javascript/mastodon/features/domain_blocks/index.tsx | 6 +++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/app/javascript/mastodon/components/domain.tsx b/app/javascript/mastodon/components/domain.tsx index 0ccffac4829056..86f8a0e6a3af22 100644 --- a/app/javascript/mastodon/components/domain.tsx +++ b/app/javascript/mastodon/components/domain.tsx @@ -9,12 +9,14 @@ import { Button } from './button'; export const Domain: React.FC<{ domain: string; -}> = ({ domain }) => { + onUnblock?: (domain: string) => void; +}> = ({ domain, onUnblock }) => { const dispatch = useAppDispatch(); const handleDomainUnblock = useCallback(() => { dispatch(unblockDomain(domain)); - }, [dispatch, domain]); + onUnblock?.(domain); + }, [dispatch, domain, onUnblock]); return (
diff --git a/app/javascript/mastodon/features/domain_blocks/index.tsx b/app/javascript/mastodon/features/domain_blocks/index.tsx index 2c5860af98752d..26a31c8870dcca 100644 --- a/app/javascript/mastodon/features/domain_blocks/index.tsx +++ b/app/javascript/mastodon/features/domain_blocks/index.tsx @@ -62,6 +62,10 @@ const Blocks: React.FC<{ multiColumn: boolean }> = ({ multiColumn }) => { columnRef.current?.scrollTop(); }, []); + const handleUnblock = useCallback((domain: string) => { + setDomains((prev) => prev.filter((d) => d !== domain)); + }, []); + const emptyMessage = ( = ({ multiColumn }) => { bindToDocument={!multiColumn} > {domains.map((domain) => ( - + ))} From 030104a30c6158b1b8971d61558d97df3e01ee32 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 4 May 2026 13:38:11 +0200 Subject: [PATCH 010/132] Change how invalid-but-not-expired invites are shown in moderation interface (#38736) --- app/views/admin/invites/_invite.html.haml | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/app/views/admin/invites/_invite.html.haml b/app/views/admin/invites/_invite.html.haml index fcaf5fc6169be3..859d56ea01b0b3 100644 --- a/app/views/admin/invites/_invite.html.haml +++ b/app/views/admin/invites/_invite.html.haml @@ -10,21 +10,23 @@ = image_tag invite.user.account.avatar.url(:original), alt: '', width: 16, height: 16, class: 'avatar' %span.username= invite.user.account.username + %td + = material_symbol 'person' + = invite.uses + = " / #{invite.max_uses}" unless invite.max_uses.nil? + - if invite.valid_for_use? - %td - = material_symbol 'person' - = invite.uses - = " / #{invite.max_uses}" unless invite.max_uses.nil? %td - if invite.expires_at.nil? ∞ - else %time.formatted{ datetime: invite.expires_at.iso8601, title: l(invite.expires_at) } = l invite.expires_at - - else + %td + = table_link_to 'close', t('invites.delete'), admin_invite_path(invite), method: :delete if policy(invite).destroy? + - elsif invite.expired? %td{ colspan: 2 } = t('invites.expired') - - %td - - if invite.valid_for_use? && policy(invite).destroy? - = table_link_to 'close', t('invites.delete'), admin_invite_path(invite), method: :delete + - else + %td{ colspan: 2 } + = t('invites.invalid') From 5922d0181ecd3ed2be6f69886acc0d542b2564ca Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 May 2026 14:29:58 +0200 Subject: [PATCH 011/132] Update formatjs monorepo (#38804) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 300 +++++++++++++++++++++++++++--------------------------- 1 file changed, 151 insertions(+), 149 deletions(-) diff --git a/yarn.lock b/yarn.lock index 36bade8999ec7f..48b09974e4c8d1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2420,10 +2420,10 @@ __metadata: languageName: node linkType: hard -"@formatjs/bigdecimal@npm:0.2.1": - version: 0.2.1 - resolution: "@formatjs/bigdecimal@npm:0.2.1" - checksum: 10c0/04b72caf1608afe59f20313b73b80dba474b65485076c0f9a72b8145fcb0e04580a7a0592c2f88f739f4997b51326e2b9d6142e6c5b04c0c941d0294e2aa2f20 +"@formatjs/bigdecimal@npm:0.2.2": + version: 0.2.2 + resolution: "@formatjs/bigdecimal@npm:0.2.2" + checksum: 10c0/69de414e037cd54d33f41ffd85b975ada50e8bb6355821d28cd30b1a9d69d83f3c4ff6bb8e1e4269b47768177f6ead6b564ee99d509e71a89fdf2f6e8c464eb6 languageName: node linkType: hard @@ -2477,10 +2477,10 @@ __metadata: languageName: node linkType: hard -"@formatjs/fast-memoize@npm:3.1.2": - version: 3.1.2 - resolution: "@formatjs/fast-memoize@npm:3.1.2" - checksum: 10c0/25af387ebb53146c8c09af34cda4ce82768f0855227ec854fb315d6dc2e7859e16724860fdea7991b3c7c5741154e3fcdd5169ef7a11ba1afb3ffd860613931c +"@formatjs/fast-memoize@npm:3.1.3": + version: 3.1.3 + resolution: "@formatjs/fast-memoize@npm:3.1.3" + checksum: 10c0/572802c57aa295e516f5ac52db9062591643510f360c4d99c3b562fd4b8852a0000e4c1a9daa9e29be88d34356fab1cb9a8a45f764388a7fcdfa010eff6d610d languageName: node linkType: hard @@ -2494,12 +2494,12 @@ __metadata: languageName: node linkType: hard -"@formatjs/icu-messageformat-parser@npm:3.5.4": - version: 3.5.4 - resolution: "@formatjs/icu-messageformat-parser@npm:3.5.4" +"@formatjs/icu-messageformat-parser@npm:3.5.6": + version: 3.5.6 + resolution: "@formatjs/icu-messageformat-parser@npm:3.5.6" dependencies: - "@formatjs/icu-skeleton-parser": "npm:2.1.4" - checksum: 10c0/3ff5ab209b63113d6b1779a4e8de6ee2cf941f3ad3f3ede2c8e425953a25456b6a1d880d734845244615dc9887fad10b62e75dee38858c731e45812402110efb + "@formatjs/icu-skeleton-parser": "npm:2.1.6" + checksum: 10c0/640e334eefe66c393b19d401bf1cc39cf7f783e450661220683a200a4e044a221c0a03f2c8ff0a9968bdab2234f7be35faf25aab722c467862fcffef45df8b3a languageName: node linkType: hard @@ -2512,10 +2512,10 @@ __metadata: languageName: node linkType: hard -"@formatjs/icu-skeleton-parser@npm:2.1.4": - version: 2.1.4 - resolution: "@formatjs/icu-skeleton-parser@npm:2.1.4" - checksum: 10c0/9d6292443e4079c5718c50e32041a3bd192047449d181ae87e8cb6ef78c90f156f8b2d454008c9d0c2920c215daee5250c0eb214d13a105522a631f269e71b3c +"@formatjs/icu-skeleton-parser@npm:2.1.6": + version: 2.1.6 + resolution: "@formatjs/icu-skeleton-parser@npm:2.1.6" + checksum: 10c0/f68bb13dfb771e9fd768702a1491482dbe05ab8e704e7c58083e82e907dac58b0c88c7cdc336bfc32222d67b129e57a9502597004b373ef0534601a480c6d943 languageName: node linkType: hard @@ -2528,33 +2528,33 @@ __metadata: languageName: node linkType: hard -"@formatjs/intl-localematcher@npm:0.8.3": - version: 0.8.3 - resolution: "@formatjs/intl-localematcher@npm:0.8.3" +"@formatjs/intl-localematcher@npm:0.8.5": + version: 0.8.5 + resolution: "@formatjs/intl-localematcher@npm:0.8.5" dependencies: - "@formatjs/fast-memoize": "npm:3.1.2" - checksum: 10c0/4693548ee9df74deb5f548635242ede0254507a531e04bb52d0983a653e7103bd4bfa1024e0b5b784fce1dadab57a31062bd7412b142f954c6614a7c9ee4cae7 + "@formatjs/fast-memoize": "npm:3.1.3" + checksum: 10c0/638b02a374fd18b0c1e6569838ea033b9136f652157e5e15ae0ccacc52408f232b82512bf63d15590d722720286bc85b73b2e52401e12e2229079b56534f4066 languageName: node linkType: hard "@formatjs/intl-pluralrules@npm:^6.0.0": - version: 6.3.2 - resolution: "@formatjs/intl-pluralrules@npm:6.3.2" + version: 6.3.4 + resolution: "@formatjs/intl-pluralrules@npm:6.3.4" dependencies: - "@formatjs/bigdecimal": "npm:0.2.1" - "@formatjs/intl-localematcher": "npm:0.8.3" - checksum: 10c0/7ff9a9a48efc970d6ebcb0902dc28fcf6577fd53f07c2b775ac918858a08d934317c654f6e481a978eeea2146a0e84ab7604f991d8bbdb147b42a004f582bec8 + "@formatjs/bigdecimal": "npm:0.2.2" + "@formatjs/intl-localematcher": "npm:0.8.5" + checksum: 10c0/c6b0c24012a53ef7c025c0c69d7d17cea8453916936a8e69f088723a5f9c82692441c5f2bf63abae9928e6d6cf31c913c33977a7afd83d90ac04d22d72c71d68 languageName: node linkType: hard -"@formatjs/intl@npm:4.1.6": - version: 4.1.6 - resolution: "@formatjs/intl@npm:4.1.6" +"@formatjs/intl@npm:4.1.8": + version: 4.1.8 + resolution: "@formatjs/intl@npm:4.1.8" dependencies: - "@formatjs/fast-memoize": "npm:3.1.2" - "@formatjs/icu-messageformat-parser": "npm:3.5.4" - intl-messageformat: "npm:11.2.1" - checksum: 10c0/d1bdd4ba373efc249090970c54bb7b5373f88d4294b9e6c889f91c8214b047715578b4fde4c917f809fddd0d52d3ec360ddc9a96def9e7c237c4024161ca29a0 + "@formatjs/fast-memoize": "npm:3.1.3" + "@formatjs/icu-messageformat-parser": "npm:3.5.6" + intl-messageformat: "npm:11.2.3" + checksum: 10c0/244d4efa20bc57b66d1ae8eb571b8df3264b0879d304553d775cb93869030bf770165b9907f164b97cbf5ce79b5d62cee7f714f1173333aa30a0586210bc5882 languageName: node linkType: hard @@ -2575,11 +2575,11 @@ __metadata: languageName: node linkType: hard -"@formatjs/ts-transformer@npm:4.4.4": - version: 4.4.4 - resolution: "@formatjs/ts-transformer@npm:4.4.4" +"@formatjs/ts-transformer@npm:4.4.6": + version: 4.4.6 + resolution: "@formatjs/ts-transformer@npm:4.4.6" dependencies: - "@formatjs/icu-messageformat-parser": "npm:3.5.4" + "@formatjs/icu-messageformat-parser": "npm:3.5.6" "@types/node": "npm:22 || 24" json-stable-stringify: "npm:^1.3.0" typescript: "npm:^5.6 || 6" @@ -2588,18 +2588,18 @@ __metadata: peerDependenciesMeta: ts-jest: optional: true - checksum: 10c0/88aecd69792c34d3dbe3da3866422c3c6668102d316dd0bad848ec56ac1cd11d011e4b9253b72e0241e934a68d6b0144dda85ab0e200019c572edab4b257d93b + checksum: 10c0/aed517bdad919dc7ac9c6844a8af3bc87bdd13a3e5a41f03c1da540536e167fe3f4c7d02db1641d74272dc4b0c15a479d0290ea0bfa40788d8ea03e8913c8359 languageName: node linkType: hard "@formatjs/unplugin@npm:^1.1.5": - version: 1.1.7 - resolution: "@formatjs/unplugin@npm:1.1.7" + version: 1.1.9 + resolution: "@formatjs/unplugin@npm:1.1.9" dependencies: - "@formatjs/icu-messageformat-parser": "npm:3.5.4" - "@formatjs/ts-transformer": "npm:4.4.4" + "@formatjs/icu-messageformat-parser": "npm:3.5.6" + "@formatjs/ts-transformer": "npm:4.4.6" magic-string: "npm:^0.30.0" - oxc-parser: "npm:^0.124.0" + oxc-parser: "npm:^0.128.0" unplugin: "npm:^3.0.0" peerDependencies: "@rspack/core": ">=1" @@ -2618,7 +2618,7 @@ __metadata: optional: true webpack: optional: true - checksum: 10c0/4578e27f0063095ac11dc717c42a483bd5e29e8eeba5ddafe95238f7c124a1c3f86edf933591f7efa3af950e5031bda77dd639fc10a11e11aae88ccdee61a0d2 + checksum: 10c0/bed54839f7218658cbd033aa1664214785e576992dde11ee693b43c48aec6a364286fb82d99d1fe321ef13c879104c69c5a3cdb5a074f958f8dd0085ab254d7f languageName: node linkType: hard @@ -3084,7 +3084,7 @@ __metadata: languageName: node linkType: hard -"@napi-rs/wasm-runtime@npm:^1.1.2, @napi-rs/wasm-runtime@npm:^1.1.4": +"@napi-rs/wasm-runtime@npm:^1.1.4": version: 1.1.4 resolution: "@napi-rs/wasm-runtime@npm:1.1.4" dependencies: @@ -3198,144 +3198,146 @@ __metadata: languageName: node linkType: hard -"@oxc-parser/binding-android-arm-eabi@npm:0.124.0": - version: 0.124.0 - resolution: "@oxc-parser/binding-android-arm-eabi@npm:0.124.0" +"@oxc-parser/binding-android-arm-eabi@npm:0.128.0": + version: 0.128.0 + resolution: "@oxc-parser/binding-android-arm-eabi@npm:0.128.0" conditions: os=android & cpu=arm languageName: node linkType: hard -"@oxc-parser/binding-android-arm64@npm:0.124.0": - version: 0.124.0 - resolution: "@oxc-parser/binding-android-arm64@npm:0.124.0" +"@oxc-parser/binding-android-arm64@npm:0.128.0": + version: 0.128.0 + resolution: "@oxc-parser/binding-android-arm64@npm:0.128.0" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@oxc-parser/binding-darwin-arm64@npm:0.124.0": - version: 0.124.0 - resolution: "@oxc-parser/binding-darwin-arm64@npm:0.124.0" +"@oxc-parser/binding-darwin-arm64@npm:0.128.0": + version: 0.128.0 + resolution: "@oxc-parser/binding-darwin-arm64@npm:0.128.0" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@oxc-parser/binding-darwin-x64@npm:0.124.0": - version: 0.124.0 - resolution: "@oxc-parser/binding-darwin-x64@npm:0.124.0" +"@oxc-parser/binding-darwin-x64@npm:0.128.0": + version: 0.128.0 + resolution: "@oxc-parser/binding-darwin-x64@npm:0.128.0" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@oxc-parser/binding-freebsd-x64@npm:0.124.0": - version: 0.124.0 - resolution: "@oxc-parser/binding-freebsd-x64@npm:0.124.0" +"@oxc-parser/binding-freebsd-x64@npm:0.128.0": + version: 0.128.0 + resolution: "@oxc-parser/binding-freebsd-x64@npm:0.128.0" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@oxc-parser/binding-linux-arm-gnueabihf@npm:0.124.0": - version: 0.124.0 - resolution: "@oxc-parser/binding-linux-arm-gnueabihf@npm:0.124.0" +"@oxc-parser/binding-linux-arm-gnueabihf@npm:0.128.0": + version: 0.128.0 + resolution: "@oxc-parser/binding-linux-arm-gnueabihf@npm:0.128.0" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@oxc-parser/binding-linux-arm-musleabihf@npm:0.124.0": - version: 0.124.0 - resolution: "@oxc-parser/binding-linux-arm-musleabihf@npm:0.124.0" +"@oxc-parser/binding-linux-arm-musleabihf@npm:0.128.0": + version: 0.128.0 + resolution: "@oxc-parser/binding-linux-arm-musleabihf@npm:0.128.0" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@oxc-parser/binding-linux-arm64-gnu@npm:0.124.0": - version: 0.124.0 - resolution: "@oxc-parser/binding-linux-arm64-gnu@npm:0.124.0" +"@oxc-parser/binding-linux-arm64-gnu@npm:0.128.0": + version: 0.128.0 + resolution: "@oxc-parser/binding-linux-arm64-gnu@npm:0.128.0" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@oxc-parser/binding-linux-arm64-musl@npm:0.124.0": - version: 0.124.0 - resolution: "@oxc-parser/binding-linux-arm64-musl@npm:0.124.0" +"@oxc-parser/binding-linux-arm64-musl@npm:0.128.0": + version: 0.128.0 + resolution: "@oxc-parser/binding-linux-arm64-musl@npm:0.128.0" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@oxc-parser/binding-linux-ppc64-gnu@npm:0.124.0": - version: 0.124.0 - resolution: "@oxc-parser/binding-linux-ppc64-gnu@npm:0.124.0" +"@oxc-parser/binding-linux-ppc64-gnu@npm:0.128.0": + version: 0.128.0 + resolution: "@oxc-parser/binding-linux-ppc64-gnu@npm:0.128.0" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard -"@oxc-parser/binding-linux-riscv64-gnu@npm:0.124.0": - version: 0.124.0 - resolution: "@oxc-parser/binding-linux-riscv64-gnu@npm:0.124.0" +"@oxc-parser/binding-linux-riscv64-gnu@npm:0.128.0": + version: 0.128.0 + resolution: "@oxc-parser/binding-linux-riscv64-gnu@npm:0.128.0" conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard -"@oxc-parser/binding-linux-riscv64-musl@npm:0.124.0": - version: 0.124.0 - resolution: "@oxc-parser/binding-linux-riscv64-musl@npm:0.124.0" +"@oxc-parser/binding-linux-riscv64-musl@npm:0.128.0": + version: 0.128.0 + resolution: "@oxc-parser/binding-linux-riscv64-musl@npm:0.128.0" conditions: os=linux & cpu=riscv64 & libc=musl languageName: node linkType: hard -"@oxc-parser/binding-linux-s390x-gnu@npm:0.124.0": - version: 0.124.0 - resolution: "@oxc-parser/binding-linux-s390x-gnu@npm:0.124.0" +"@oxc-parser/binding-linux-s390x-gnu@npm:0.128.0": + version: 0.128.0 + resolution: "@oxc-parser/binding-linux-s390x-gnu@npm:0.128.0" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@oxc-parser/binding-linux-x64-gnu@npm:0.124.0": - version: 0.124.0 - resolution: "@oxc-parser/binding-linux-x64-gnu@npm:0.124.0" +"@oxc-parser/binding-linux-x64-gnu@npm:0.128.0": + version: 0.128.0 + resolution: "@oxc-parser/binding-linux-x64-gnu@npm:0.128.0" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@oxc-parser/binding-linux-x64-musl@npm:0.124.0": - version: 0.124.0 - resolution: "@oxc-parser/binding-linux-x64-musl@npm:0.124.0" +"@oxc-parser/binding-linux-x64-musl@npm:0.128.0": + version: 0.128.0 + resolution: "@oxc-parser/binding-linux-x64-musl@npm:0.128.0" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@oxc-parser/binding-openharmony-arm64@npm:0.124.0": - version: 0.124.0 - resolution: "@oxc-parser/binding-openharmony-arm64@npm:0.124.0" +"@oxc-parser/binding-openharmony-arm64@npm:0.128.0": + version: 0.128.0 + resolution: "@oxc-parser/binding-openharmony-arm64@npm:0.128.0" conditions: os=openharmony & cpu=arm64 languageName: node linkType: hard -"@oxc-parser/binding-wasm32-wasi@npm:0.124.0": - version: 0.124.0 - resolution: "@oxc-parser/binding-wasm32-wasi@npm:0.124.0" +"@oxc-parser/binding-wasm32-wasi@npm:0.128.0": + version: 0.128.0 + resolution: "@oxc-parser/binding-wasm32-wasi@npm:0.128.0" dependencies: - "@napi-rs/wasm-runtime": "npm:^1.1.2" + "@emnapi/core": "npm:1.10.0" + "@emnapi/runtime": "npm:1.10.0" + "@napi-rs/wasm-runtime": "npm:^1.1.4" conditions: cpu=wasm32 languageName: node linkType: hard -"@oxc-parser/binding-win32-arm64-msvc@npm:0.124.0": - version: 0.124.0 - resolution: "@oxc-parser/binding-win32-arm64-msvc@npm:0.124.0" +"@oxc-parser/binding-win32-arm64-msvc@npm:0.128.0": + version: 0.128.0 + resolution: "@oxc-parser/binding-win32-arm64-msvc@npm:0.128.0" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@oxc-parser/binding-win32-ia32-msvc@npm:0.124.0": - version: 0.124.0 - resolution: "@oxc-parser/binding-win32-ia32-msvc@npm:0.124.0" +"@oxc-parser/binding-win32-ia32-msvc@npm:0.128.0": + version: 0.128.0 + resolution: "@oxc-parser/binding-win32-ia32-msvc@npm:0.128.0" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@oxc-parser/binding-win32-x64-msvc@npm:0.124.0": - version: 0.124.0 - resolution: "@oxc-parser/binding-win32-x64-msvc@npm:0.124.0" +"@oxc-parser/binding-win32-x64-msvc@npm:0.128.0": + version: 0.128.0 + resolution: "@oxc-parser/binding-win32-x64-msvc@npm:0.128.0" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -3347,10 +3349,10 @@ __metadata: languageName: node linkType: hard -"@oxc-project/types@npm:^0.124.0": - version: 0.124.0 - resolution: "@oxc-project/types@npm:0.124.0" - checksum: 10c0/9564ee3ce41f4b87802ffd0d62a7602d27f4503fbd39c1bedab98d54fde06e2ac254a8f85d8f679af1281a26e8fc7aa053fadbb3e09e786b38178eb38a8e2fb3 +"@oxc-project/types@npm:^0.128.0": + version: 0.128.0 + resolution: "@oxc-project/types@npm:0.128.0" + checksum: 10c0/b6999b1b6b012d979364231a2c0c9204bca814a73f8417234edd39bf352a081779dad72aaf18ac60a676fb904c1408b63553e4e1230d7408a4f885002d66c809 languageName: node linkType: hard @@ -8820,13 +8822,13 @@ __metadata: languageName: node linkType: hard -"intl-messageformat@npm:11.2.1, intl-messageformat@npm:^11.0.0": - version: 11.2.1 - resolution: "intl-messageformat@npm:11.2.1" +"intl-messageformat@npm:11.2.3, intl-messageformat@npm:^11.0.0": + version: 11.2.3 + resolution: "intl-messageformat@npm:11.2.3" dependencies: - "@formatjs/fast-memoize": "npm:3.1.2" - "@formatjs/icu-messageformat-parser": "npm:3.5.4" - checksum: 10c0/c4d2e43c2e7940a8dbd75d7a3b77d722c7ac8802707f7410067097e3a923243343bd36367edb4e922b13d1a10425a2f52c544c65c9368841d481816ed04c6c2b + "@formatjs/fast-memoize": "npm:3.1.3" + "@formatjs/icu-messageformat-parser": "npm:3.5.6" + checksum: 10c0/95cf3eabad1613c62e291e09ec7d77929df536b038f61cbaffc8e8ad0e59568153aabf3acac45a9204c67f241ed2881d7569247f812c338e519c60db237b97ca languageName: node linkType: hard @@ -10692,31 +10694,31 @@ __metadata: languageName: node linkType: hard -"oxc-parser@npm:^0.124.0": - version: 0.124.0 - resolution: "oxc-parser@npm:0.124.0" - dependencies: - "@oxc-parser/binding-android-arm-eabi": "npm:0.124.0" - "@oxc-parser/binding-android-arm64": "npm:0.124.0" - "@oxc-parser/binding-darwin-arm64": "npm:0.124.0" - "@oxc-parser/binding-darwin-x64": "npm:0.124.0" - "@oxc-parser/binding-freebsd-x64": "npm:0.124.0" - "@oxc-parser/binding-linux-arm-gnueabihf": "npm:0.124.0" - "@oxc-parser/binding-linux-arm-musleabihf": "npm:0.124.0" - "@oxc-parser/binding-linux-arm64-gnu": "npm:0.124.0" - "@oxc-parser/binding-linux-arm64-musl": "npm:0.124.0" - "@oxc-parser/binding-linux-ppc64-gnu": "npm:0.124.0" - "@oxc-parser/binding-linux-riscv64-gnu": "npm:0.124.0" - "@oxc-parser/binding-linux-riscv64-musl": "npm:0.124.0" - "@oxc-parser/binding-linux-s390x-gnu": "npm:0.124.0" - "@oxc-parser/binding-linux-x64-gnu": "npm:0.124.0" - "@oxc-parser/binding-linux-x64-musl": "npm:0.124.0" - "@oxc-parser/binding-openharmony-arm64": "npm:0.124.0" - "@oxc-parser/binding-wasm32-wasi": "npm:0.124.0" - "@oxc-parser/binding-win32-arm64-msvc": "npm:0.124.0" - "@oxc-parser/binding-win32-ia32-msvc": "npm:0.124.0" - "@oxc-parser/binding-win32-x64-msvc": "npm:0.124.0" - "@oxc-project/types": "npm:^0.124.0" +"oxc-parser@npm:^0.128.0": + version: 0.128.0 + resolution: "oxc-parser@npm:0.128.0" + dependencies: + "@oxc-parser/binding-android-arm-eabi": "npm:0.128.0" + "@oxc-parser/binding-android-arm64": "npm:0.128.0" + "@oxc-parser/binding-darwin-arm64": "npm:0.128.0" + "@oxc-parser/binding-darwin-x64": "npm:0.128.0" + "@oxc-parser/binding-freebsd-x64": "npm:0.128.0" + "@oxc-parser/binding-linux-arm-gnueabihf": "npm:0.128.0" + "@oxc-parser/binding-linux-arm-musleabihf": "npm:0.128.0" + "@oxc-parser/binding-linux-arm64-gnu": "npm:0.128.0" + "@oxc-parser/binding-linux-arm64-musl": "npm:0.128.0" + "@oxc-parser/binding-linux-ppc64-gnu": "npm:0.128.0" + "@oxc-parser/binding-linux-riscv64-gnu": "npm:0.128.0" + "@oxc-parser/binding-linux-riscv64-musl": "npm:0.128.0" + "@oxc-parser/binding-linux-s390x-gnu": "npm:0.128.0" + "@oxc-parser/binding-linux-x64-gnu": "npm:0.128.0" + "@oxc-parser/binding-linux-x64-musl": "npm:0.128.0" + "@oxc-parser/binding-openharmony-arm64": "npm:0.128.0" + "@oxc-parser/binding-wasm32-wasi": "npm:0.128.0" + "@oxc-parser/binding-win32-arm64-msvc": "npm:0.128.0" + "@oxc-parser/binding-win32-ia32-msvc": "npm:0.128.0" + "@oxc-parser/binding-win32-x64-msvc": "npm:0.128.0" + "@oxc-project/types": "npm:^0.128.0" dependenciesMeta: "@oxc-parser/binding-android-arm-eabi": optional: true @@ -10758,7 +10760,7 @@ __metadata: optional: true "@oxc-parser/binding-win32-x64-msvc": optional: true - checksum: 10c0/06bd6b937f0574f49b74112cf2af3fb9990e7445d40126fca2c6ceb950c7ba5e10fbb223d941341c8207376620f6ee37466779a4fbff78ed7a67e15df3459d9c + checksum: 10c0/c750d5d205353efd67276019d50a315cab1fe68f10067a892154e9fa81ba62844760aa8536ae0008580e421e10fb8d2d419455744de862eb0037499b4760c1c9 languageName: node linkType: hard @@ -12070,16 +12072,16 @@ __metadata: linkType: hard "react-intl@npm:^10.0.0": - version: 10.1.2 - resolution: "react-intl@npm:10.1.2" + version: 10.1.4 + resolution: "react-intl@npm:10.1.4" dependencies: - "@formatjs/icu-messageformat-parser": "npm:3.5.4" - "@formatjs/intl": "npm:4.1.6" - intl-messageformat: "npm:11.2.1" + "@formatjs/icu-messageformat-parser": "npm:3.5.6" + "@formatjs/intl": "npm:4.1.8" + intl-messageformat: "npm:11.2.3" peerDependencies: "@types/react": 19 react: 19 - checksum: 10c0/785a4c0d16a5cb64888b23f6f2d8a87296bde05f1f834c34c5f7f6a73dcab6115afbbb0d4e71471fb287a9c919f32b54ed4b6284e60d21368dec1244eaf3e736 + checksum: 10c0/7c5fad35e77f3fc64fc54422ee1756c168ebf2ae3d92f4cb8791831ef779441e5ab9ce8bf6e991ac0b3829dfc21831a3f17ee7eb4910eee777ccff063cb0c55b languageName: node linkType: hard From 46ccfa6e8dbd851114517b720aa17161de437dc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20Martos?= Date: Mon, 4 May 2026 15:09:09 +0200 Subject: [PATCH 012/132] Updating rollup and flatted dependencies [SECURITY] (#38497) --- yarn.lock | 125 ++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 89 insertions(+), 36 deletions(-) diff --git a/yarn.lock b/yarn.lock index 48b09974e4c8d1..e64ccc30c3ab75 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5256,46 +5256,46 @@ __metadata: linkType: hard "@vitest/browser-playwright@npm:^4.1.0": - version: 4.1.0 - resolution: "@vitest/browser-playwright@npm:4.1.0" + version: 4.1.2 + resolution: "@vitest/browser-playwright@npm:4.1.2" dependencies: - "@vitest/browser": "npm:4.1.0" - "@vitest/mocker": "npm:4.1.0" - tinyrainbow: "npm:^3.0.3" + "@vitest/browser": "npm:4.1.2" + "@vitest/mocker": "npm:4.1.2" + tinyrainbow: "npm:^3.1.0" peerDependencies: playwright: "*" - vitest: 4.1.0 + vitest: 4.1.2 peerDependenciesMeta: playwright: optional: false - checksum: 10c0/af2f6fc36eb56e3c1ac6e31b0ab2a2f4ca0bda86a306d0991b2f01047213fb191339b35775103af11ce1ef323ec72432eebe4bfeccd744d5e7c658716f1b985a + checksum: 10c0/701a750a16059be20dddb6884e9aaad43002e1d08da94df31b0dba9abed33d0c3faba8b1c56b7da25b61b0faab1e72597cbcedd2b969f4f6139b2e17a3fd4d06 languageName: node linkType: hard -"@vitest/browser@npm:4.1.0, @vitest/browser@npm:^4.1.0": - version: 4.1.0 - resolution: "@vitest/browser@npm:4.1.0" +"@vitest/browser@npm:4.1.2, @vitest/browser@npm:^4.1.0": + version: 4.1.2 + resolution: "@vitest/browser@npm:4.1.2" dependencies: "@blazediff/core": "npm:1.9.1" - "@vitest/mocker": "npm:4.1.0" - "@vitest/utils": "npm:4.1.0" + "@vitest/mocker": "npm:4.1.2" + "@vitest/utils": "npm:4.1.2" magic-string: "npm:^0.30.21" pngjs: "npm:^7.0.0" sirv: "npm:^3.0.2" - tinyrainbow: "npm:^3.0.3" + tinyrainbow: "npm:^3.1.0" ws: "npm:^8.19.0" peerDependencies: - vitest: 4.1.0 - checksum: 10c0/33b35cea63f392b6afafb6636bebe7ff0d234b1c120ec74a97462c7a7cbdbc67f415a5f0f95651f4074d53bfe12d4ff3ae8f16ba79045226df6365c77f950e18 + vitest: 4.1.2 + checksum: 10c0/8ff656df7c3796f24b38800f42cc59902b15196556ef1df1cf931faf0b095db9677109c2e855ed8915c36bc6aae804b4c53e22c069c749ed2b7e16d8eefddde5 languageName: node linkType: hard "@vitest/coverage-v8@npm:^4.1.0": - version: 4.1.0 - resolution: "@vitest/coverage-v8@npm:4.1.0" + version: 4.1.2 + resolution: "@vitest/coverage-v8@npm:4.1.2" dependencies: "@bcoe/v8-coverage": "npm:^1.0.2" - "@vitest/utils": "npm:4.1.0" + "@vitest/utils": "npm:4.1.2" ast-v8-to-istanbul: "npm:^1.0.0" istanbul-lib-coverage: "npm:^3.2.2" istanbul-lib-report: "npm:^3.0.1" @@ -5303,14 +5303,14 @@ __metadata: magicast: "npm:^0.5.2" obug: "npm:^2.1.1" std-env: "npm:^4.0.0-rc.1" - tinyrainbow: "npm:^3.0.3" + tinyrainbow: "npm:^3.1.0" peerDependencies: - "@vitest/browser": 4.1.0 - vitest: 4.1.0 + "@vitest/browser": 4.1.2 + vitest: 4.1.2 peerDependenciesMeta: "@vitest/browser": optional: true - checksum: 10c0/0bcbc9d20dd4c998ff76b82a721d6000f1300346b93cfc441f9012797a34be65bb73dc99451275d7f7dcb06b98856b4e5dc30b2c483051ec2320e9a89af14179 + checksum: 10c0/2f4488efb34a5d9e3a70631ba263e153eecba8ec0da52cb874cdc674c88369061706572b9fc0c302376fd1de58aedc86a2f9f75e5a521084e31a1446c85f2c40 languageName: node linkType: hard @@ -5360,6 +5360,25 @@ __metadata: languageName: node linkType: hard +"@vitest/mocker@npm:4.1.2": + version: 4.1.2 + resolution: "@vitest/mocker@npm:4.1.2" + dependencies: + "@vitest/spy": "npm:4.1.2" + estree-walker: "npm:^3.0.3" + magic-string: "npm:^0.30.21" + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + checksum: 10c0/f23094f3c7e1e5af42e6a468f0815c1ecdcab85cb3a56ab6f3f214a9808a40271467d4352cae972482b9738cc31c62c7312d8b0da227d6ea03d2b3aacb8d385f + languageName: node + linkType: hard + "@vitest/pretty-format@npm:3.2.4": version: 3.2.4 resolution: "@vitest/pretty-format@npm:3.2.4" @@ -5378,6 +5397,15 @@ __metadata: languageName: node linkType: hard +"@vitest/pretty-format@npm:4.1.2": + version: 4.1.2 + resolution: "@vitest/pretty-format@npm:4.1.2" + dependencies: + tinyrainbow: "npm:^3.1.0" + checksum: 10c0/6f57519c707e6a3d1ff8630ca87ce78fda9bf7bb33f6e4a0c775a8b510f2a6cee109849e2cdb736b0280681c567bd03e4cff724cbf0962950c9ff81377f0b2bc + languageName: node + linkType: hard + "@vitest/runner@npm:4.1.0": version: 4.1.0 resolution: "@vitest/runner@npm:4.1.0" @@ -5416,20 +5444,27 @@ __metadata: languageName: node linkType: hard +"@vitest/spy@npm:4.1.2": + version: 4.1.2 + resolution: "@vitest/spy@npm:4.1.2" + checksum: 10c0/2b5888d536d3e2083c5f8939763e6d780c2c03cc60e1ab45f9d04eacf14467acb9724cae1c4778e4c06426d49d04517e190122882953054a4b13fda44780bb14 + languageName: node + linkType: hard + "@vitest/ui@npm:^4.1.0": - version: 4.1.0 - resolution: "@vitest/ui@npm:4.1.0" + version: 4.1.2 + resolution: "@vitest/ui@npm:4.1.2" dependencies: - "@vitest/utils": "npm:4.1.0" + "@vitest/utils": "npm:4.1.2" fflate: "npm:^0.8.2" - flatted: "npm:3.4.0" + flatted: "npm:^3.4.2" pathe: "npm:^2.0.3" sirv: "npm:^3.0.2" tinyglobby: "npm:^0.2.15" - tinyrainbow: "npm:^3.0.3" + tinyrainbow: "npm:^3.1.0" peerDependencies: - vitest: 4.1.0 - checksum: 10c0/3629aadc120b992c80a18c32879358a40d936245ab987f64bd76cf6b13abb319b2ef9a029be69be7f6ea7f7ae9182e54f6d631fd57df32ba31060d6ae488048e + vitest: 4.1.2 + checksum: 10c0/9fad46c544f754e29739995fb00edcaa4567ff03d46ce347471f5fa6b905167ba1e11a00e96d2dcfe9c3271e18b54e52294728a04288fcc2b9438a753ff538d2 languageName: node linkType: hard @@ -5455,6 +5490,17 @@ __metadata: languageName: node linkType: hard +"@vitest/utils@npm:4.1.2": + version: 4.1.2 + resolution: "@vitest/utils@npm:4.1.2" + dependencies: + "@vitest/pretty-format": "npm:4.1.2" + convert-source-map: "npm:^2.0.0" + tinyrainbow: "npm:^3.1.0" + checksum: 10c0/d96475e0703b6e5208c6c0f570c1235278cbac3f3913a9aa4203a3e617c9eaca85a184bfd5d13cf366b84754df787ab8bc85242c5e0c63105ee7176c186a2136 + languageName: node + linkType: hard + "abbrev@npm:^3.0.0": version: 3.0.1 resolution: "abbrev@npm:3.0.1" @@ -8023,10 +8069,10 @@ __metadata: languageName: node linkType: hard -"flatted@npm:3.4.0, flatted@npm:^3.2.9, flatted@npm:^3.3.3": - version: 3.4.0 - resolution: "flatted@npm:3.4.0" - checksum: 10c0/033b0d28dc7c11c20cdddfef160647d37ee6f49cac265e6315d7c172a8a518a971316938d49c72cce3e20bddd40f1bae1455a5cba29f9741fcfb0af4d3491fa4 +"flatted@npm:^3.2.9, flatted@npm:^3.3.3, flatted@npm:^3.4.2": + version: 3.4.2 + resolution: "flatted@npm:3.4.2" + checksum: 10c0/a65b67aae7172d6cdf63691be7de6c5cd5adbdfdfe2e9da1a09b617c9512ed794037741ee53d93114276bff3f93cd3b0d97d54f9b316e1e4885dde6e9ffdf7ed languageName: node linkType: hard @@ -12737,8 +12783,8 @@ __metadata: linkType: hard "rollup@npm:^2.79.2": - version: 2.79.2 - resolution: "rollup@npm:2.79.2" + version: 2.80.0 + resolution: "rollup@npm:2.80.0" dependencies: fsevents: "npm:~2.3.2" dependenciesMeta: @@ -12746,7 +12792,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 10c0/bc3746c988d903c2211266ddc539379d53d92689b9cc5c2b4e3ae161689de9af491957a567c629b6cc81f48d0928a7591fc4c383fba68a48d2966c9fb8a2bce9 + checksum: 10c0/48ad7b79a4ef9332cf90692d28c05f904132820964f012941372ec4f31c18635e1b7909823058964fb2b216154713bfbe82ec00920d71b15f3fe13bb9df3eac8 languageName: node linkType: hard @@ -14012,6 +14058,13 @@ __metadata: languageName: node linkType: hard +"tinyrainbow@npm:^3.1.0": + version: 3.1.0 + resolution: "tinyrainbow@npm:3.1.0" + checksum: 10c0/f11cf387a26c5c9255bec141a90ac511b26172981b10c3e50053bc6700ea7d2336edcc4a3a21dbb8412fe7c013477d2ba4d7e4877800f3f8107be5105aad6511 + languageName: node + linkType: hard + "tinyspy@npm:^4.0.3": version: 4.0.3 resolution: "tinyspy@npm:4.0.3" From ee88da4511cb02f5c2312433376af19c0474bf3e Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 4 May 2026 15:56:04 +0200 Subject: [PATCH 013/132] Add admin UI for managing email subscriptions (#38741) Co-authored-by: Claire --- .../additional_footer_texts_controller.rb | 9 ++ .../email_subscriptions/setups_controller.rb | 34 ++++++ .../admin/email_subscriptions_controller.rb | 23 ++++ .../email_subscriptions_controller.rb | 2 +- app/helpers/application_helper.rb | 4 + app/javascript/styles/mastodon/admin.scss | 114 ++++++++++++++++++ app/javascript/styles/mastodon/forms.scss | 18 +++ app/javascript/styles/mastodon/tables.scss | 26 ++++ app/models/form/admin_settings.rb | 1 + .../form/email_subscriptions_confirmation.rb | 11 ++ app/policies/email_subscription_policy.rb | 13 ++ app/serializers/rest/account_serializer.rb | 2 +- app/services/post_status_service.rb | 2 +- .../email_subscriptions/_accounts.html.haml | 44 +++++++ .../_compliance_settings.html.haml | 22 ++++ .../_danger_zone.html.haml | 22 ++++ .../email_subscriptions/_roles.html.haml | 36 ++++++ .../additional_footer_texts/show.html.haml | 16 +++ .../admin/email_subscriptions/index.html.haml | 28 +++++ .../email_subscriptions/setups/show.html.haml | 25 ++++ .../confirmation.html.haml | 2 + .../notification.html.haml | 2 + app/views/settings/privacy/show.html.haml | 2 +- .../admin/email_subscriptions_purge_worker.rb | 11 ++ app/workers/email_distribution_worker.rb | 2 +- config/initializers/email_subscriptions.rb | 5 + config/locales/en.yml | 67 +++++++++- config/locales/simple_form.en.yml | 5 + config/navigation.rb | 1 + config/routes/admin.rb | 12 ++ .../v1/accounts/email_subscriptions_spec.rb | 6 +- 31 files changed, 560 insertions(+), 7 deletions(-) create mode 100644 app/controllers/admin/email_subscriptions/additional_footer_texts_controller.rb create mode 100644 app/controllers/admin/email_subscriptions/setups_controller.rb create mode 100644 app/controllers/admin/email_subscriptions_controller.rb create mode 100644 app/models/form/email_subscriptions_confirmation.rb create mode 100644 app/policies/email_subscription_policy.rb create mode 100644 app/views/admin/email_subscriptions/_accounts.html.haml create mode 100644 app/views/admin/email_subscriptions/_compliance_settings.html.haml create mode 100644 app/views/admin/email_subscriptions/_danger_zone.html.haml create mode 100644 app/views/admin/email_subscriptions/_roles.html.haml create mode 100644 app/views/admin/email_subscriptions/additional_footer_texts/show.html.haml create mode 100644 app/views/admin/email_subscriptions/index.html.haml create mode 100644 app/views/admin/email_subscriptions/setups/show.html.haml create mode 100644 app/workers/admin/email_subscriptions_purge_worker.rb create mode 100644 config/initializers/email_subscriptions.rb diff --git a/app/controllers/admin/email_subscriptions/additional_footer_texts_controller.rb b/app/controllers/admin/email_subscriptions/additional_footer_texts_controller.rb new file mode 100644 index 00000000000000..fcc774a25696d2 --- /dev/null +++ b/app/controllers/admin/email_subscriptions/additional_footer_texts_controller.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class Admin::EmailSubscriptions::AdditionalFooterTextsController < Admin::SettingsController + private + + def after_update_redirect_path + admin_email_subscriptions_path + end +end diff --git a/app/controllers/admin/email_subscriptions/setups_controller.rb b/app/controllers/admin/email_subscriptions/setups_controller.rb new file mode 100644 index 00000000000000..81f62671719d50 --- /dev/null +++ b/app/controllers/admin/email_subscriptions/setups_controller.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +class Admin::EmailSubscriptions::SetupsController < Admin::BaseController + before_action :require_enabled! + + def show + authorize :email_subscription, :enable? + + @form = Form::EmailSubscriptionsConfirmation.new + end + + def create + authorize :email_subscription, :enable? + + @form = Form::EmailSubscriptionsConfirmation.new(resource_params) + + if @form.valid? + Setting.email_subscriptions = true + redirect_to admin_email_subscriptions_path + else + render :show + end + end + + private + + def require_enabled! + raise ActionController::RoutingError, 'Feature disabled' unless Rails.application.config.x.email_subscriptions + end + + def resource_params + params.expect(form_email_subscriptions_confirmation: [:agreement_email_volume, :agreement_privacy_and_terms]) + end +end diff --git a/app/controllers/admin/email_subscriptions_controller.rb b/app/controllers/admin/email_subscriptions_controller.rb new file mode 100644 index 00000000000000..39a32909dfa37f --- /dev/null +++ b/app/controllers/admin/email_subscriptions_controller.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +class Admin::EmailSubscriptionsController < Admin::BaseController + def index + authorize :email_subscription, :index? + + @enabled = Setting.email_subscriptions + @roles = UserRole.where('permissions & ? != 0', UserRole::FLAGS[:manage_email_subscriptions] | UserRole::FLAGS[:administrator]) + @accounts = Account.local.joins(:email_subscriptions).where.associated(:email_subscriptions).includes(:user) + end + + def disable + authorize :email_subscription, :disable? + Setting.email_subscriptions = false + redirect_to admin_email_subscriptions_path, notice: I18n.t('admin.email_subscriptions.disabled_msg') + end + + def purge + authorize :email_subscription, :purge? + Admin::EmailSubscriptionsPurgeWorker.perform_async + redirect_to admin_email_subscriptions_path, notice: I18n.t('admin.email_subscriptions.purged_msg') + end +end diff --git a/app/controllers/api/v1/accounts/email_subscriptions_controller.rb b/app/controllers/api/v1/accounts/email_subscriptions_controller.rb index 4e773f902bce83..bf7a1447e1ffca 100644 --- a/app/controllers/api/v1/accounts/email_subscriptions_controller.rb +++ b/app/controllers/api/v1/accounts/email_subscriptions_controller.rb @@ -19,7 +19,7 @@ def set_account end def require_feature_enabled! - head 404 unless Mastodon::Feature.email_subscriptions_enabled? + head 404 unless Rails.application.config.x.email_subscriptions && Setting.email_subscriptions end def require_account_permissions! diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 6fc97ab5ed7444..c2d8c4650640da 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -127,6 +127,10 @@ def material_symbol(icon, attributes = {}) ) end + def emptyphaunt + inline_svg_tag 'elephant_ui.svg' + end + def check_icon inline_svg_tag 'check.svg' end diff --git a/app/javascript/styles/mastodon/admin.scss b/app/javascript/styles/mastodon/admin.scss index 47bc541cc95a09..f2fe35d13ef9a4 100644 --- a/app/javascript/styles/mastodon/admin.scss +++ b/app/javascript/styles/mastodon/admin.scss @@ -2223,3 +2223,117 @@ a.sparkline { } } } + +.subheading-with-action { + display: flex; + align-items: flex-start; + margin-bottom: 16px; + + &__subheading { + flex-grow: 1; + } + + h3 { + font-size: 20px; + font-weight: 600; + margin-bottom: 8px; + } + + p { + font-size: 16px; + } +} + +.actions-list { + &__item { + border-bottom: 1px solid var(--color-border-primary); + padding: 12px 0; + display: flex; + gap: 16px; + align-items: center; + + &__label { + flex-grow: 1; + display: flex; + flex-direction: column; + gap: 2px; + + &__label { + font-weight: 600; + font-size: 15px; + } + + &__hint { + font-size: 13px; + color: var(--color-text-secondary); + } + } + + &__action { + flex-shrink: 0; + } + } +} + +.empty-state { + border: 1px solid var(--color-border-primary); + border-radius: 12px; + padding: 24px 16px; + display: flex; + flex-direction: column; + align-items: center; + gap: 16px; + + &__title-and-description { + display: flex; + flex-direction: column; + gap: 8px; + align-items: center; + line-height: 21px; + font-size: 15px; + text-align: center; + + &__title { + font-weight: 600; + } + } + + svg { + width: 200px; + } + + // FIXME: This is duplicated with empty_message.module.scss + [data-color-scheme='dark'] & svg { + --color-skin-1: #3a3a50; + --color-skin-2: #67678e; + --color-skin-3: #44445f; + --color-outline: #21212c; + --color-shadow: #181820; + --color-highlight: #b2b1c8; + } +} + +.heading-with-lead { + display: flex; + flex-direction: column; + gap: 8px; + + h1 { + font-size: 28px; + font-weight: 600; + } + + .lead { + font-size: 18px; + color: var(--color-text-secondary); + } +} + +.status-badge { + display: inline-flex; + padding: 3px 4px; + border-radius: 8px; + background: var(--color-bg-success-softest); + font-size: 13px; + font-weight: 600; +} diff --git a/app/javascript/styles/mastodon/forms.scss b/app/javascript/styles/mastodon/forms.scss index 7d2af8ddc16a50..27b2a4622334e6 100644 --- a/app/javascript/styles/mastodon/forms.scss +++ b/app/javascript/styles/mastodon/forms.scss @@ -71,6 +71,24 @@ code { } .simple_form { + h3 { + font-size: 20px; + font-weight: 600; + margin-bottom: 16px; + } + + .numbered-list { + list-style: decimal; + font-size: 16px; + line-height: 24px; + margin-bottom: 16px; + margin-inline-start: 28px; + + li { + margin-bottom: 4px; + } + } + &.hidden { display: none; } diff --git a/app/javascript/styles/mastodon/tables.scss b/app/javascript/styles/mastodon/tables.scss index 108878141742ea..0023ea353c7898 100644 --- a/app/javascript/styles/mastodon/tables.scss +++ b/app/javascript/styles/mastodon/tables.scss @@ -21,6 +21,24 @@ } } + .align-end { + text-align: end; + } + + .valign-middle { + vertical-align: middle; + } + + .avatar-column { + width: 24px; + + .avatar { + border-radius: 8px; + border: 1px solid var(--color-border-primary); + background: var(--color-background-secondary); + } + } + & > thead > tr > th { vertical-align: bottom; font-weight: 500; @@ -170,6 +188,14 @@ a.table-action-link { } } +.table-icon-link { + display: inline-flex; + align-items: center; + justify-content: center; + padding: 4px; + aspect-ratio: 1; +} + .batch-table { &--no-toolbar { .batch-table__toolbar { diff --git a/app/models/form/admin_settings.rb b/app/models/form/admin_settings.rb index 35e35d5ad5f204..0ad53354192b29 100644 --- a/app/models/form/admin_settings.rb +++ b/app/models/form/admin_settings.rb @@ -46,6 +46,7 @@ class Form::AdminSettings remote_topic_feed_access landing_page wrapstodon + email_footer_text ).freeze INTEGER_KEYS = %i( diff --git a/app/models/form/email_subscriptions_confirmation.rb b/app/models/form/email_subscriptions_confirmation.rb new file mode 100644 index 00000000000000..e82fd887620661 --- /dev/null +++ b/app/models/form/email_subscriptions_confirmation.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class Form::EmailSubscriptionsConfirmation + include ActiveModel::Model + include ActiveModel::Attributes + + attribute :agreement_email_volume, :boolean + attribute :agreement_privacy_and_terms, :boolean + + validates :agreement_email_volume, :agreement_privacy_and_terms, acceptance: true +end diff --git a/app/policies/email_subscription_policy.rb b/app/policies/email_subscription_policy.rb new file mode 100644 index 00000000000000..201bd72c1311fa --- /dev/null +++ b/app/policies/email_subscription_policy.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class EmailSubscriptionPolicy < ApplicationPolicy + def index? + role.can?(:manage_settings) + end + + alias enable? index? + + alias disable? index? + + alias purge? index? +end diff --git a/app/serializers/rest/account_serializer.rb b/app/serializers/rest/account_serializer.rb index 9fc5acee9d8df9..8afe3f3b6793d0 100644 --- a/app/serializers/rest/account_serializer.rb +++ b/app/serializers/rest/account_serializer.rb @@ -22,7 +22,7 @@ class REST::AccountSerializer < ActiveModel::Serializer attribute :memorial, if: :memorial? attribute :feature_approval, if: -> { Mastodon::Feature.collections_enabled? } - attribute :email_subscriptions, if: -> { Mastodon::Feature.email_subscriptions_enabled? } + attribute :email_subscriptions, if: -> { Rails.application.config.x.email_subscriptions && Setting.email_subscriptions } class AccountDecorator < SimpleDelegator def self.model_name diff --git a/app/services/post_status_service.rb b/app/services/post_status_service.rb index 3ef1502cd67af3..9f82de40d3ae9a 100644 --- a/app/services/post_status_service.rb +++ b/app/services/post_status_service.rb @@ -171,7 +171,7 @@ def postprocess_status! end def process_email_subscriptions! - return unless Mastodon::Feature.email_subscriptions_enabled? && + return unless Rails.application.config.x.email_subscriptions && Setting.email_subscriptions && @status.public_visibility? && (!@status.reply? || @status.in_reply_to_account_id == @status.account_id) && @status.account.user_can?(:manage_email_subscriptions) && @status.account.user_email_subscriptions_enabled? diff --git a/app/views/admin/email_subscriptions/_accounts.html.haml b/app/views/admin/email_subscriptions/_accounts.html.haml new file mode 100644 index 00000000000000..d560d417dbdf73 --- /dev/null +++ b/app/views/admin/email_subscriptions/_accounts.html.haml @@ -0,0 +1,44 @@ +.subheading-with-action + .subheading-with-action__subheading + %h3= t('.title') + %p= t('.lead') + +.table-wrapper + - if accounts.empty? + .empty-state + = emptyphaunt + + .empty-state__title-and-description + .empty-state__title-and-description__title + = t('.empty.no_lists_yet') + .empty-state__title-and-description__description + = t('.empty.hint') + - else + %table.table + %thead + %tr + %th.avatar-column + %th= t('.account') + %th= t('.status') + %th= t('.subscribers') + %th= t('.last_email') + %th + %tbody + - accounts.each do |account| + %tr + %td.valign-middle.avatar-column + = image_tag(full_asset_url(account.avatar_original_url), width: 24, height: 24, alt: '', class: 'avatar') + %td.valign-middle + %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') + %td.valign-middle + = account.email_subscriptions.count + %td.valign-middle + = l account.last_status_at + %td.valign-middle.align-end + = link_to material_symbol('chevron_right'), admin_account_path(account.id), class: 'table-icon-link' diff --git a/app/views/admin/email_subscriptions/_compliance_settings.html.haml b/app/views/admin/email_subscriptions/_compliance_settings.html.haml new file mode 100644 index 00000000000000..3e951f2a4f7cae --- /dev/null +++ b/app/views/admin/email_subscriptions/_compliance_settings.html.haml @@ -0,0 +1,22 @@ +.subheading-with-action + .subheading-with-action__subheading + %h3= t('.title') + %p= t('.lead') + +.actions-list + .actions-list__item + .actions-list__item__label + .actions-list__item__label__label + = t('.privacy_policy.title') + .actions-list__item__label__hint + = t('.privacy_policy.hint') + .actions-list__item__action + = link_to t('.privacy_policy.action'), admin_settings_about_path, class: 'button button-secondary' + .actions-list__item + .actions-list__item__label + .actions-list__item__label__label + = t('.additional_footer_text.title') + .actions-list__item__label__hint + = t('.additional_footer_text.hint') + .actions-list__item__action + = link_to t('.additional_footer_text.action'), admin_email_subscriptions_additional_footer_text_path, class: 'button button-secondary' diff --git a/app/views/admin/email_subscriptions/_danger_zone.html.haml b/app/views/admin/email_subscriptions/_danger_zone.html.haml new file mode 100644 index 00000000000000..9bae92ca2e2cf7 --- /dev/null +++ b/app/views/admin/email_subscriptions/_danger_zone.html.haml @@ -0,0 +1,22 @@ +.subheading-with-action + .subheading-with-action__subheading + %h3= t('.title') + +.actions-list + .actions-list__item + .actions-list__item__label + .actions-list__item__label__label + = t('.disable_feature.title') + .actions-list__item__label__hint + = t('.disable_feature.hint') + .actions-list__item__action + = link_to t('.disable_feature.action'), disable_admin_email_subscriptions_path, class: 'button button-secondary button--destructive', data: { method: 'post', confirm: t('admin.accounts.are_you_sure') } + - unless accounts.empty? + .actions-list__item + .actions-list__item__label + .actions-list__item__label__label + = t('.erase_all_data.title') + .actions-list__item__label__hint + = t('.erase_all_data.hint') + .actions-list__item__action + = link_to t('.erase_all_data.action'), purge_admin_email_subscriptions_path, class: 'button button-secondary button--destructive', data: { method: 'post', confirm: t('admin.accounts.are_you_sure') } diff --git a/app/views/admin/email_subscriptions/_roles.html.haml b/app/views/admin/email_subscriptions/_roles.html.haml new file mode 100644 index 00000000000000..42c77ea8e3e980 --- /dev/null +++ b/app/views/admin/email_subscriptions/_roles.html.haml @@ -0,0 +1,36 @@ +.subheading-with-action + .subheading-with-action__subheading + %h3= t('.title') + %p= t('.lead') + - unless roles.empty? + .subheading-with-action__action + = link_to t('.manage_roles'), admin_roles_path, class: 'button button-secondary' + +.table-wrapper + - if roles.empty? + .empty-state + = emptyphaunt + + .empty-state__title-and-description + .empty-state__title-and-description__title + = t('.empty.no_roles_added') + .empty-state__title-and-description__description + = t('.empty.hint') + .empty-state__action + = link_to t('.manage_roles'), admin_roles_path, class: 'button' + - else + %table.table + %thead + %tr + %th= t('.role_name') + %th= t('.accounts') + %th + %tbody + - roles.each do |role| + %tr + %td + = role.name + %td + = role.users.count + %td.align-end + = link_to material_symbol('edit'), edit_admin_role_path(role), title: t('.edit_role'), class: 'table-icon-link' if can?(:update, role) diff --git a/app/views/admin/email_subscriptions/additional_footer_texts/show.html.haml b/app/views/admin/email_subscriptions/additional_footer_texts/show.html.haml new file mode 100644 index 00000000000000..f6dadffbb6507c --- /dev/null +++ b/app/views/admin/email_subscriptions/additional_footer_texts/show.html.haml @@ -0,0 +1,16 @@ +- content_for :page_title do + = t('.title') + += simple_form_for @admin_settings, url: admin_email_subscriptions_additional_footer_text_path do |form| + = render 'shared/error_messages', object: @admin_settings + + .fields-group + = form.input :email_footer_text, + as: :text, + input_html: { rows: 8 }, + wrapper: :with_block_label + + .actions + = form.button :button, + t('generic.save_changes'), + type: :submit diff --git a/app/views/admin/email_subscriptions/index.html.haml b/app/views/admin/email_subscriptions/index.html.haml new file mode 100644 index 00000000000000..1f9e1851812d5f --- /dev/null +++ b/app/views/admin/email_subscriptions/index.html.haml @@ -0,0 +1,28 @@ +- content_for :page_title do + = t('.title') + +- content_for :heading do + .heading-with-lead + %h1= t('.title') + %p.lead= t('.lead') + +%hr.spacer/ + +- if @enabled + = render 'roles', roles: @roles + %hr.spacer/ + = render 'accounts', accounts: @accounts + %hr.spacer/ + = render 'compliance_settings' + %hr.spacer/ + = render 'danger_zone', accounts: @accounts +- else + .simple_form + %p.lead= t('.disabled.description') + + - if Rails.application.config.x.email_subscriptions + = link_to t('.disabled.get_started'), admin_email_subscriptions_setup_path, class: 'button' + - else + %aside.callout + .content + .body= t('.disabled.cannot_be_enabled') diff --git a/app/views/admin/email_subscriptions/setups/show.html.haml b/app/views/admin/email_subscriptions/setups/show.html.haml new file mode 100644 index 00000000000000..02fbc5d057b6a7 --- /dev/null +++ b/app/views/admin/email_subscriptions/setups/show.html.haml @@ -0,0 +1,25 @@ +- content_for :page_title do + = t('admin.email_subscriptions.index.title') + +- content_for :heading do + .heading-with-lead + %h1= t('admin.email_subscriptions.index.title') + %p.lead= t('admin.email_subscriptions.index.lead') + += simple_form_for @form, url: admin_email_subscriptions_setup_path, method: :post do |f| + = render 'shared/error_messages', object: @form + + %h3= t('.important_information') + + %ol.numbered-list + %li= t('.list.1_permission_explanation') + %li= t('.list.2_feature_explanation') + %li= t('.list.3_privacy_policy_warning') + %li= t('.list.4_cost_warning') + + .fields-group + = f.input :agreement_email_volume, as: :boolean, wrapper: :with_label + = f.input :agreement_privacy_and_terms, as: :boolean, wrapper: :with_label + + .actions + = f.button :button, t('.enable_feature'), type: :submit diff --git a/app/views/email_subscription_mailer/confirmation.html.haml b/app/views/email_subscription_mailer/confirmation.html.haml index 7d14d9ff59caa0..51f414349ed0a3 100644 --- a/app/views/email_subscription_mailer/confirmation.html.haml +++ b/app/views/email_subscription_mailer/confirmation.html.haml @@ -18,3 +18,5 @@ - content_for :footer do %p.email-footer-p= t('email_subscription_mailer.notification.footer.reason_for_email_html', name: display_name(@subscription.account), unsubscribe_path: @unsubscribe_url) %p.email-footer-p= t('email_subscription_mailer.notification.footer.privacy_html', domain: @instance, privacy_policy_path: privacy_policy_path) + - if Setting.email_footer_text.present? + %p.email-footer-p= Setting.email_footer_text diff --git a/app/views/email_subscription_mailer/notification.html.haml b/app/views/email_subscription_mailer/notification.html.haml index 12848c59b37b5a..0ee2aa2e0ba034 100644 --- a/app/views/email_subscription_mailer/notification.html.haml +++ b/app/views/email_subscription_mailer/notification.html.haml @@ -34,3 +34,5 @@ - content_for :footer do %p.email-footer-p= t('.footer.reason_for_email_html', name: display_name(@subscription.account), unsubscribe_path: @unsubscribe_url) %p.email-footer-p= t('.footer.privacy_html', domain: @instance, privacy_policy_path: privacy_policy_path) + - if Setting.email_footer_text.present? + %p.email-footer-p= Setting.email_footer_text diff --git a/app/views/settings/privacy/show.html.haml b/app/views/settings/privacy/show.html.haml index 47880f1f6c3452..67026a62e886cb 100644 --- a/app/views/settings/privacy/show.html.haml +++ b/app/views/settings/privacy/show.html.haml @@ -38,7 +38,7 @@ .fields-group = ff.input :show_application, wrapper: :with_label - - if Mastodon::Feature.email_subscriptions_enabled? && current_user.can?(:manage_email_subscriptions) + - if Rails.application.config.x.email_subscriptions && Setting.email_subscriptions && current_user.can?(:manage_email_subscriptions) %h2= t('privacy.email_subscriptions') %p.lead= t('privacy.email_subscriptions_hint_html') diff --git a/app/workers/admin/email_subscriptions_purge_worker.rb b/app/workers/admin/email_subscriptions_purge_worker.rb new file mode 100644 index 00000000000000..2a5d7c900c8661 --- /dev/null +++ b/app/workers/admin/email_subscriptions_purge_worker.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class Admin::EmailSubscriptionsPurgeWorker + include Sidekiq::Worker + + sidekiq_options lock: :until_executed, lock_ttl: 1.week.to_i + + def perform + EmailSubscription.in_batches.delete_all + end +end diff --git a/app/workers/email_distribution_worker.rb b/app/workers/email_distribution_worker.rb index 41edcb932cf6e2..d510b9d977cb17 100644 --- a/app/workers/email_distribution_worker.rb +++ b/app/workers/email_distribution_worker.rb @@ -7,7 +7,7 @@ class EmailDistributionWorker sidekiq_options lock: :until_executed, lock_ttl: 1.day.to_i def perform(account_id) - return unless Mastodon::Feature.email_subscriptions_enabled? + return unless Rails.application.config.x.email_subscriptions && Setting.email_subscriptions @account = Account.find(account_id) diff --git a/config/initializers/email_subscriptions.rb b/config/initializers/email_subscriptions.rb new file mode 100644 index 00000000000000..50608946e4d0de --- /dev/null +++ b/config/initializers/email_subscriptions.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +Rails.application.configure do + config.x.email_subscriptions = ENV['DISABLE_EMAIL_SUBSCRIPTIONS'] != 'true' +end diff --git a/config/locales/en.yml b/config/locales/en.yml index 176017f5324672..5d3344f0e1200a 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -487,6 +487,71 @@ en: resolved_dns_records_hint_html: The domain name resolves to the following MX domains, which are ultimately responsible for accepting email. Blocking an MX domain will block sign-ups from any email address which uses the same MX domain, even if the visible domain name is different. Be careful not to block major email providers. resolved_through_html: Resolved through %{domain} title: Blocked email domains + 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. + status: Status + subscribers: Subscribers + title: Mailing lists + additional_footer_texts: + show: + title: Additional footer text + compliance_settings: + additional_footer_text: + action: Manage + hint: Optional text that appears in the footer of newsletter emails only + title: Additional footer text + lead: Email newsletters may be considered marketing emails, depending on the jurisdictions where you operate. + privacy_policy: + action: Manage + hint: This policy is linked in the footer of every email + title: Privacy policy + title: Compliance settings + danger_zone: + disable_feature: + action: Disable + hint: Turn off feature for all accounts + title: Disable feature + erase_all_data: + action: Erase data + hint: Permanently deletes all emails in all mailing lists + title: Erase all data + title: Danger zone + disabled_msg: Email subscriptions have been successfully disabled. + index: + disabled: + cannot_be_enabled: Your technical provider has not enabled this feature for your server. + description: This feature allows specified accounts to add a widget to their profiles, enabling visitors without a Mastodon account to receive their posts via email. + get_started: Get started + lead: Allow visitors to receive posts via email from dedicated accounts on this server. + title: Email newsletters + purged_msg: All email subscriptions data is being erased. + roles: + accounts: Accounts + edit_role: Edit role + empty: + hint: No one has permission to use this feature. + no_roles_added: No roles added + lead: Accounts with the following roles can enable this feature on their profiles. + manage_roles: Manage roles + role_name: Role name + title: Roles + setups: + show: + enable_feature: Enable feature + important_information: Important information + list: + 1_permission_explanation: When this feature is enabled, accounts with the designated permissions can add an email collection form to their profiles. + 2_feature_explanation: When visitors sign up on an account’s profile page and confirm their subscription, they’ll begin to receive email updates when the account creates new public posts. + 3_privacy_policy_warning: Server admins will have access to PII (email addresses) collected. As such, the privacy policy and Terms of Service for the server must be updated before using this feature. + 4_cost_warning: Emails may incur a fee depending on hosting setup. Discuss with your hosting provider before enabling, as this feature could drastically increase the amount of emails sent from your server. export_domain_allows: new: title: Import domain allows @@ -792,7 +857,7 @@ en: manage_custom_emojis: Manage Custom Emojis manage_custom_emojis_description: Allows users to manage custom emojis on the server manage_email_subscriptions: Manage Email Subscriptions - manage_email_subscriptions_description: Allow users to subscribe to users with this permission by email + manage_email_subscriptions_description: Allow users with this permission to enable the email newsletter feature for their account manage_federation: Manage Federation manage_federation_description: Allows users to block or allow federation with other domains, and control deliverability manage_invites: Manage Invites diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index 7bfc998249a138..c3fe3871b1c8dc 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -92,6 +92,7 @@ en: closed_registrations_message: Displayed when sign-ups are closed content_cache_retention_period: All posts from other servers (including boosts and replies) will be deleted after the specified number of days, without regard to any local user interaction with those posts. This includes posts where a local user has marked it as bookmarks or favorites. Private mentions between users from different instances will also be lost and impossible to restore. Use of this setting is intended for special purpose instances and breaks many user expectations when implemented for general purpose use. custom_css: You can apply custom styles on the web version of Mastodon. + email_footer_text: Optional text that appears in the footer of newsletter emails only. favicon: WEBP, PNG, GIF or JPG. Overrides the default Mastodon favicon with a custom icon. landing_page: Selects what page new visitors see when they first arrive on your server. If you select "Trends", then trends needs to be enabled in the Discovery Settings. If you select "Local feed", then "Access to live feeds featuring local posts" needs to be set to "Everyone" in the Discovery Settings. mascot: Overrides the illustration in the advanced web interface. @@ -294,6 +295,7 @@ en: closed_registrations_message: Custom message when sign-ups are not available content_cache_retention_period: Remote content retention period custom_css: Custom CSS + email_footer_text: Additional footer text favicon: Favicon landing_page: Landing page for new visitors local_live_feed_access: Access to live feeds featuring local posts @@ -322,6 +324,9 @@ en: trendable_by_default: Allow trends without prior review trends: Enable trends wrapstodon: Enable Wrapstodon + form_email_subscriptions_confirmation: + agreement_email_volume: I understand that enabling this feature may significantly increase the volume of emails sent from the server and that I am solely responsible for any costs incurred. + agreement_privacy_and_terms: I have updated the Privacy Policy and Terms of Service. interactions: must_be_follower: Block notifications from non-followers must_be_following: Block notifications from people you don't follow diff --git a/config/navigation.rb b/config/navigation.rb index 66fdfdfe585308..9ace5d5158bd17 100644 --- a/config/navigation.rb +++ b/config/navigation.rb @@ -74,6 +74,7 @@ s.item :warning_presets, safe_join([material_symbol('warning'), t('admin.warning_presets.title')]), admin_warning_presets_path, highlights_on: %r{/admin/warning_presets}, if: -> { current_user.can?(:manage_settings) } s.item :roles, safe_join([material_symbol('contact_mail'), t('admin.roles.title')]), admin_roles_path, highlights_on: %r{/admin/roles}, if: -> { current_user.can?(:manage_roles) } s.item :announcements, safe_join([material_symbol('campaign'), t('admin.announcements.title')]), admin_announcements_path, highlights_on: %r{/admin/announcements}, if: -> { current_user.can?(:manage_announcements) } + s.item :email_subscriptions, safe_join([material_symbol('mail'), t('admin.email_subscriptions.index.title')]), admin_email_subscriptions_path, highlights_on: %r{/admin/email_subscriptions}, if: -> { current_user.can?(:manage_settings) } s.item :custom_emojis, safe_join([material_symbol('mood'), t('admin.custom_emojis.title')]), admin_custom_emojis_path, highlights_on: %r{/admin/custom_emojis}, if: -> { current_user.can?(:manage_custom_emojis) } s.item :webhooks, safe_join([material_symbol('inbox'), t('admin.webhooks.title')]), admin_webhooks_path, highlights_on: %r{/admin/webhooks}, if: -> { current_user.can?(:manage_webhooks) } s.item :fasp, safe_join([material_symbol('extension'), t('admin.fasp.title')]), admin_fasp_providers_path, highlights_on: %r{/admin/fasp}, if: -> { current_user.can?(:manage_federation) } if Mastodon::Feature.fasp_enabled? diff --git a/config/routes/admin.rb b/config/routes/admin.rb index 110f02bfdbe325..770a9cd77769ac 100644 --- a/config/routes/admin.rb +++ b/config/routes/admin.rb @@ -26,6 +26,18 @@ resources :email_domain_blocks, only: [:index, :new, :create], concerns: :batch + resources :email_subscriptions, only: [:index] do + collection do + post :purge + post :disable + end + end + + namespace :email_subscriptions do + resource :setup, only: [:show, :create] + resource :additional_footer_text, only: [:show, :update] + end + resources :action_logs, only: [:index] resources :warning_presets, except: [:new, :show] diff --git a/spec/requests/api/v1/accounts/email_subscriptions_spec.rb b/spec/requests/api/v1/accounts/email_subscriptions_spec.rb index ef7a31476af7b8..313f7480e36751 100644 --- a/spec/requests/api/v1/accounts/email_subscriptions_spec.rb +++ b/spec/requests/api/v1/accounts/email_subscriptions_spec.rb @@ -2,9 +2,13 @@ require 'rails_helper' -RSpec.describe 'Accounts Email Subscriptions API', feature: :email_subscriptions do +RSpec.describe 'Accounts Email Subscriptions API' do let(:account) { Fabricate(:user).account } + before do + Setting.email_subscriptions = true + end + describe 'POST /api/v1/accounts/:id/email_subscriptions' do context 'when the account has the permission' do let(:role) { Fabricate(:user_role, permissions: UserRole::FLAGS[:manage_email_subscriptions]) } From a23b3c7c25cff702ea94f7f7d8a00b5095f9a8cc Mon Sep 17 00:00:00 2001 From: diondiondion Date: Mon, 4 May 2026 17:22:24 +0200 Subject: [PATCH 014/132] Update block dialog copy to include quotes & collections (#38897) --- .../features/ui/components/block_modal.jsx | 37 ++++++++++++------- .../ui/components/domain_block_modal.tsx | 30 +++++++-------- .../components/ignore_notifications_modal.jsx | 16 ++++---- .../features/ui/components/mute_modal.jsx | 22 +++++------ app/javascript/mastodon/locales/en.json | 7 ++-- .../styles/mastodon/components.scss | 8 ++-- 6 files changed, 66 insertions(+), 54 deletions(-) diff --git a/app/javascript/mastodon/features/ui/components/block_modal.jsx b/app/javascript/mastodon/features/ui/components/block_modal.jsx index 21a984f97f4e35..831cf3c3f04d1f 100644 --- a/app/javascript/mastodon/features/ui/components/block_modal.jsx +++ b/app/javascript/mastodon/features/ui/components/block_modal.jsx @@ -10,12 +10,14 @@ import { useDispatch } from 'react-redux'; import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react'; import BlockIcon from '@/material-icons/400-24px/block.svg?react'; import CampaignIcon from '@/material-icons/400-24px/campaign.svg?react'; +import CollectionsIcon from '@/material-icons/400-24px/category.svg?react'; import ReplyIcon from '@/material-icons/400-24px/reply.svg?react'; import VisibilityOffIcon from '@/material-icons/400-24px/visibility_off.svg?react'; import { blockAccount } from 'mastodon/actions/accounts'; import { closeModal } from 'mastodon/actions/modal'; import { Button } from 'mastodon/components/button'; import { Icon } from 'mastodon/components/icon'; +import { areCollectionsEnabled } from '../../collections/utils'; export const BlockModal = ({ accountId, acct }) => { const dispatch = useDispatch(); @@ -46,31 +48,38 @@ export const BlockModal = ({ accountId, acct }) => {

-
@{acct}
+

@{acct}

-
-
+
    +
  • -
+ -
+
  • -
    -
  • +
    + -
    +
  • -
    -
  • +
    + -
    +
  • -
    -
  • -
    +
    + + + {areCollectionsEnabled() && +
  • +
    +
    +
  • + } +
    diff --git a/app/javascript/mastodon/features/ui/components/domain_block_modal.tsx b/app/javascript/mastodon/features/ui/components/domain_block_modal.tsx index eb2ccbb0352ad2..21d0b03a53143d 100644 --- a/app/javascript/mastodon/features/ui/components/domain_block_modal.tsx +++ b/app/javascript/mastodon/features/ui/components/domain_block_modal.tsx @@ -83,15 +83,15 @@ export const DomainBlockModal: React.FC<{ defaultMessage='Block domain?' /> -
    {domain}
    +

    {domain}

    -
    +
      {preview && preview !== 'error' && preview.followers_count + preview.following_count > 0 && ( -
      +
    • @@ -113,11 +113,11 @@ export const DomainBlockModal: React.FC<{ />
    • -
    + )} {preview === 'error' && ( -
    +
  • @@ -129,10 +129,10 @@ export const DomainBlockModal: React.FC<{ />
  • - + )} -
    +
  • @@ -142,9 +142,9 @@ export const DomainBlockModal: React.FC<{ defaultMessage="They won't know they've been blocked." />
  • - + -
    +
  • @@ -154,9 +154,9 @@ export const DomainBlockModal: React.FC<{ defaultMessage="You won't see posts or notifications from users on this server." />
  • - + -
    +
  • @@ -166,9 +166,9 @@ export const DomainBlockModal: React.FC<{ defaultMessage='Nobody from this server can follow you.' />
  • - + -
    +
  • @@ -178,8 +178,8 @@ export const DomainBlockModal: React.FC<{ defaultMessage='People from this server can interact with your old posts.' />
  • - - + +
    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 dffaa04492c896..3ef771ed768999 100644 --- a/app/javascript/mastodon/features/ui/components/ignore_notifications_modal.jsx +++ b/app/javascript/mastodon/features/ui/components/ignore_notifications_modal.jsx @@ -57,22 +57,22 @@ export const IgnoreNotificationsModal = ({ filterType }) => {

    {title}

    -
    -
    +
      +
    • -
    + -
    +
  • -
  • + -
    +
  • -
  • -
    + +
    diff --git a/app/javascript/mastodon/features/ui/components/mute_modal.jsx b/app/javascript/mastodon/features/ui/components/mute_modal.jsx index 90b88030a09f92..3c9a5eeacff040 100644 --- a/app/javascript/mastodon/features/ui/components/mute_modal.jsx +++ b/app/javascript/mastodon/features/ui/components/mute_modal.jsx @@ -85,31 +85,31 @@ export const MuteModal = ({ accountId, acct }) => {

    -
    @{acct}
    +

    @{acct}

    -
    -
    +
      +
    • -
    + -
    +
  • -
  • + -
    +
  • -
  • + -
    +
  • -
  • -
    + +
    diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 95a664987199d5..b306d90bd38d8a 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -328,14 +328,15 @@ "annual_report.summary.share_on_mastodon": "Share on Mastodon", "attachments_list.unprocessed": "(unprocessed)", "audio.hide": "Hide audio", + "block_modal.no_collections": "Neither of you can add each other to collections. You'll be automatically removed from each others' existing collections, if applicable.", "block_modal.remote_users_caveat": "We will ask the server {domain} to respect your decision. However, compliance is not guaranteed since some servers may handle blocks differently. Public posts may still be visible to non-logged-in users.", "block_modal.show_less": "Show less", "block_modal.show_more": "Show more", - "block_modal.they_cant_mention": "They can't mention or follow you.", - "block_modal.they_cant_see_posts": "They can't see your posts and you won't see theirs.", + "block_modal.they_cant_mention": "You can't mention, follow, or quote each other.", + "block_modal.they_cant_see_posts": "They can't see your content and you won't see theirs.", "block_modal.they_will_know": "They can see that they're blocked.", "block_modal.title": "Block user?", - "block_modal.you_wont_see_mentions": "You won't see posts that mention them.", + "block_modal.you_wont_see_mentions": "You won't see posts from others that mention them.", "boost_modal.combo": "You can press {combo} to skip this next time", "boost_modal.reblog": "Boost post?", "boost_modal.undo_reblog": "Unboost post?", diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index e498ab20496800..eb0869d04fa1fe 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -6489,14 +6489,16 @@ a.status-card { &__bullet-points { display: flex; flex-direction: column; - gap: 8px; + gap: 16px; font-size: 16px; line-height: 24px; + & > li, & > div { display: flex; gap: 16px; - align-items: center; + align-items: start; + text-wrap: pretty; strong { font-weight: 700; @@ -6509,7 +6511,7 @@ a.status-card { &__icon { width: 40px; - height: 40px; + height: 24px; display: flex; align-items: center; justify-content: center; From ba83509ff4ed3f7193f3ca5c5deb3038c39620b1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 May 2026 18:24:22 +0200 Subject: [PATCH 015/132] Update dependency FFmpeg/FFmpeg to v8.1.1 (#38888) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 1f50c0f1a81bcb..102a917d1c8e2b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -234,7 +234,7 @@ FROM media-build AS ffmpeg # ffmpeg version to compile, change with [--build-arg FFMPEG_VERSION="7.0.x"] # renovate: datasource=github-tags depName=FFmpeg/FFmpeg extractVersion=^n(?\d+\.\d+(\.\d+)?)$ -ARG FFMPEG_VERSION=8.1 +ARG FFMPEG_VERSION=8.1.1 # ffmpeg download URL, change with [--build-arg FFMPEG_URL="https://ffmpeg.org/releases"] ARG FFMPEG_URL=https://github.com/FFmpeg/FFmpeg/archive/refs/tags From e715531dd3562a6c6b21f24b7ca2fb0a0df0ee8a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 May 2026 23:21:52 +0200 Subject: [PATCH 016/132] Update devDependencies (non-major) (#38901) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: ChaosExAnima --- .../mastodon/components/dropdown_menu.tsx | 2 +- package.json | 2 +- yarn.lock | 718 ++++++++---------- 3 files changed, 326 insertions(+), 396 deletions(-) diff --git a/app/javascript/mastodon/components/dropdown_menu.tsx b/app/javascript/mastodon/components/dropdown_menu.tsx index c3b683392d1436..107b256e183ae0 100644 --- a/app/javascript/mastodon/components/dropdown_menu.tsx +++ b/app/javascript/mastodon/components/dropdown_menu.tsx @@ -90,7 +90,7 @@ export const DropdownMenuItemContent: React.FC<{ item: MenuItem }> = ({ ); }; -export const DropdownMenu = ({ +export const DropdownMenu = ({ items, loading, scrollable, diff --git a/package.json b/package.json index a75ef025db2183..1820f78296fa6d 100644 --- a/package.json +++ b/package.json @@ -180,7 +180,7 @@ "lint-staged": "^16.2.6", "msw": "^2.12.1", "msw-storybook-addon": "^2.0.6", - "oxfmt": "^0.33.0", + "oxfmt": "^0.47.0", "playwright": "^1.57.0", "react-test-renderer": "^18.2.0", "storybook": "^10.3.0", diff --git a/yarn.lock b/yarn.lock index e64ccc30c3ab75..9ae9e89c9470b0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1211,25 +1211,25 @@ __metadata: languageName: node linkType: hard -"@cacheable/memory@npm:^2.0.5": - version: 2.0.5 - resolution: "@cacheable/memory@npm:2.0.5" +"@cacheable/memory@npm:^2.0.8": + version: 2.0.8 + resolution: "@cacheable/memory@npm:2.0.8" dependencies: - "@cacheable/utils": "npm:^2.3.0" - "@keyv/bigmap": "npm:^1.1.0" - hookified: "npm:^1.12.2" - keyv: "npm:^5.5.4" - checksum: 10c0/bef5b26de58c4ca20d7cce457d053766b5fb13de48bf444e0ecf56481a16e6556a194dafc28f41906ae4e6cd053ef3d57686c770b8e7a2d381648505bd673839 + "@cacheable/utils": "npm:^2.4.0" + "@keyv/bigmap": "npm:^1.3.1" + hookified: "npm:^1.15.1" + keyv: "npm:^5.6.0" + checksum: 10c0/d12ec24e1257cda849329f629a8d0508e8f220827e2c198936f5554899df54401861b775a03f24ab51f01bacfb798cc03d3a82848adcd88d662ea8f22e802057 languageName: node linkType: hard -"@cacheable/utils@npm:^2.3.0": - version: 2.3.1 - resolution: "@cacheable/utils@npm:2.3.1" +"@cacheable/utils@npm:^2.4.0": + version: 2.4.1 + resolution: "@cacheable/utils@npm:2.4.1" dependencies: - hashery: "npm:^1.2.0" - keyv: "npm:^5.5.4" - checksum: 10c0/04802bc11293ff569204e5f143cd11314856e3453de3e5757068cfd9df5c974a80aa9974c8400d88b22de3af70a7d8511d2d7fe927356365f41b765693a4c4bb + hashery: "npm:^1.5.1" + keyv: "npm:^5.6.0" + checksum: 10c0/ca2af47636ed27ab26dfedf12add639f42b90c289ecd5d816fb7a299074d9df463751745a83abfb81f6236a70c8ea40f0902e984869638a5ca3a7274e203f987 languageName: node linkType: hard @@ -1282,7 +1282,7 @@ __metadata: languageName: node linkType: hard -"@csstools/css-syntax-patches-for-csstree@npm:^1.0.25, @csstools/css-syntax-patches-for-csstree@npm:^1.1.3": +"@csstools/css-syntax-patches-for-csstree@npm:^1.1.3": version: 1.1.3 resolution: "@csstools/css-syntax-patches-for-csstree@npm:1.1.3" peerDependencies: @@ -2428,14 +2428,13 @@ __metadata: linkType: hard "@formatjs/cli@npm:^6.1.1": - version: 6.7.4 - resolution: "@formatjs/cli@npm:6.7.4" - peerDependencies: - "@glimmer/syntax": ^0.95.0 - "@vue/compiler-core": ^3.5.12 - content-tag: ^3.0.0 - ember-template-recast: ^6.1.5 - vue: ^3.5.12 + version: 6.14.4 + resolution: "@formatjs/cli@npm:6.14.4" + peerDependencies: + "@glimmer/syntax": ^0.84.3 || ^0.95.0 + "@vue/compiler-core": ^3.5.0 + content-tag: ^4.1.0 + vue: ^3.5.0 peerDependenciesMeta: "@glimmer/env": optional: true @@ -2449,13 +2448,11 @@ __metadata: optional: true content-tag: optional: true - ember-template-recast: - optional: true vue: optional: true bin: formatjs: bin/formatjs - checksum: 10c0/11ff474cd79bef464a2aa50d0a5145542aaf414445399f3eb6d5693c0f3ebed1fdb90b58a5f88a5c834a3344624baf7b457d622a4697534ada271ad97532eac9 + checksum: 10c0/9f0b20b316db985f083eef540f23e4eb657cece7ef46aaedc54fc9672bc341efbad4106242068c8faa4b26730e25703c86cce73ca706f8da535495132d62187e languageName: node linkType: hard @@ -2831,15 +2828,15 @@ __metadata: languageName: node linkType: hard -"@keyv/bigmap@npm:^1.1.0": - version: 1.3.0 - resolution: "@keyv/bigmap@npm:1.3.0" +"@keyv/bigmap@npm:^1.3.1": + version: 1.3.1 + resolution: "@keyv/bigmap@npm:1.3.1" dependencies: - hashery: "npm:^1.2.0" - hookified: "npm:^1.13.0" + hashery: "npm:^1.4.0" + hookified: "npm:^1.15.0" peerDependencies: - keyv: ^5.5.4 - checksum: 10c0/68fe63451097067d8359dc25b7e5b832fe9d99493ca32602686026c8d14c9ca7ecaf19312df9420c7f54df8de1b26e7305f9189fa364a82f39730710eb895f9e + keyv: ^5.6.0 + checksum: 10c0/acc6a4a5edf462ce23e95672ab4bfaf7cd1941dff6bf3a2f671ce467961ace1fac9d3eb75a9ed9a8e92012e00a7d8b16ad1677bc539a52c3ad0cec31473e2349 languageName: node linkType: hard @@ -2950,7 +2947,7 @@ __metadata: marky: "npm:^1.2.5" msw: "npm:^2.12.1" msw-storybook-addon: "npm:^2.0.6" - oxfmt: "npm:^0.33.0" + oxfmt: "npm:^0.47.0" path-complete-extname: "npm:^1.0.0" playwright: "npm:^1.57.0" postcss-preset-env: "npm:^11.0.0" @@ -3356,135 +3353,135 @@ __metadata: languageName: node linkType: hard -"@oxfmt/binding-android-arm-eabi@npm:0.33.0": - version: 0.33.0 - resolution: "@oxfmt/binding-android-arm-eabi@npm:0.33.0" +"@oxfmt/binding-android-arm-eabi@npm:0.47.0": + version: 0.47.0 + resolution: "@oxfmt/binding-android-arm-eabi@npm:0.47.0" conditions: os=android & cpu=arm languageName: node linkType: hard -"@oxfmt/binding-android-arm64@npm:0.33.0": - version: 0.33.0 - resolution: "@oxfmt/binding-android-arm64@npm:0.33.0" +"@oxfmt/binding-android-arm64@npm:0.47.0": + version: 0.47.0 + resolution: "@oxfmt/binding-android-arm64@npm:0.47.0" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@oxfmt/binding-darwin-arm64@npm:0.33.0": - version: 0.33.0 - resolution: "@oxfmt/binding-darwin-arm64@npm:0.33.0" +"@oxfmt/binding-darwin-arm64@npm:0.47.0": + version: 0.47.0 + resolution: "@oxfmt/binding-darwin-arm64@npm:0.47.0" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@oxfmt/binding-darwin-x64@npm:0.33.0": - version: 0.33.0 - resolution: "@oxfmt/binding-darwin-x64@npm:0.33.0" +"@oxfmt/binding-darwin-x64@npm:0.47.0": + version: 0.47.0 + resolution: "@oxfmt/binding-darwin-x64@npm:0.47.0" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@oxfmt/binding-freebsd-x64@npm:0.33.0": - version: 0.33.0 - resolution: "@oxfmt/binding-freebsd-x64@npm:0.33.0" +"@oxfmt/binding-freebsd-x64@npm:0.47.0": + version: 0.47.0 + resolution: "@oxfmt/binding-freebsd-x64@npm:0.47.0" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@oxfmt/binding-linux-arm-gnueabihf@npm:0.33.0": - version: 0.33.0 - resolution: "@oxfmt/binding-linux-arm-gnueabihf@npm:0.33.0" +"@oxfmt/binding-linux-arm-gnueabihf@npm:0.47.0": + version: 0.47.0 + resolution: "@oxfmt/binding-linux-arm-gnueabihf@npm:0.47.0" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@oxfmt/binding-linux-arm-musleabihf@npm:0.33.0": - version: 0.33.0 - resolution: "@oxfmt/binding-linux-arm-musleabihf@npm:0.33.0" +"@oxfmt/binding-linux-arm-musleabihf@npm:0.47.0": + version: 0.47.0 + resolution: "@oxfmt/binding-linux-arm-musleabihf@npm:0.47.0" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@oxfmt/binding-linux-arm64-gnu@npm:0.33.0": - version: 0.33.0 - resolution: "@oxfmt/binding-linux-arm64-gnu@npm:0.33.0" +"@oxfmt/binding-linux-arm64-gnu@npm:0.47.0": + version: 0.47.0 + resolution: "@oxfmt/binding-linux-arm64-gnu@npm:0.47.0" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@oxfmt/binding-linux-arm64-musl@npm:0.33.0": - version: 0.33.0 - resolution: "@oxfmt/binding-linux-arm64-musl@npm:0.33.0" +"@oxfmt/binding-linux-arm64-musl@npm:0.47.0": + version: 0.47.0 + resolution: "@oxfmt/binding-linux-arm64-musl@npm:0.47.0" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@oxfmt/binding-linux-ppc64-gnu@npm:0.33.0": - version: 0.33.0 - resolution: "@oxfmt/binding-linux-ppc64-gnu@npm:0.33.0" +"@oxfmt/binding-linux-ppc64-gnu@npm:0.47.0": + version: 0.47.0 + resolution: "@oxfmt/binding-linux-ppc64-gnu@npm:0.47.0" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard -"@oxfmt/binding-linux-riscv64-gnu@npm:0.33.0": - version: 0.33.0 - resolution: "@oxfmt/binding-linux-riscv64-gnu@npm:0.33.0" +"@oxfmt/binding-linux-riscv64-gnu@npm:0.47.0": + version: 0.47.0 + resolution: "@oxfmt/binding-linux-riscv64-gnu@npm:0.47.0" conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard -"@oxfmt/binding-linux-riscv64-musl@npm:0.33.0": - version: 0.33.0 - resolution: "@oxfmt/binding-linux-riscv64-musl@npm:0.33.0" +"@oxfmt/binding-linux-riscv64-musl@npm:0.47.0": + version: 0.47.0 + resolution: "@oxfmt/binding-linux-riscv64-musl@npm:0.47.0" conditions: os=linux & cpu=riscv64 & libc=musl languageName: node linkType: hard -"@oxfmt/binding-linux-s390x-gnu@npm:0.33.0": - version: 0.33.0 - resolution: "@oxfmt/binding-linux-s390x-gnu@npm:0.33.0" +"@oxfmt/binding-linux-s390x-gnu@npm:0.47.0": + version: 0.47.0 + resolution: "@oxfmt/binding-linux-s390x-gnu@npm:0.47.0" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@oxfmt/binding-linux-x64-gnu@npm:0.33.0": - version: 0.33.0 - resolution: "@oxfmt/binding-linux-x64-gnu@npm:0.33.0" +"@oxfmt/binding-linux-x64-gnu@npm:0.47.0": + version: 0.47.0 + resolution: "@oxfmt/binding-linux-x64-gnu@npm:0.47.0" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@oxfmt/binding-linux-x64-musl@npm:0.33.0": - version: 0.33.0 - resolution: "@oxfmt/binding-linux-x64-musl@npm:0.33.0" +"@oxfmt/binding-linux-x64-musl@npm:0.47.0": + version: 0.47.0 + resolution: "@oxfmt/binding-linux-x64-musl@npm:0.47.0" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@oxfmt/binding-openharmony-arm64@npm:0.33.0": - version: 0.33.0 - resolution: "@oxfmt/binding-openharmony-arm64@npm:0.33.0" +"@oxfmt/binding-openharmony-arm64@npm:0.47.0": + version: 0.47.0 + resolution: "@oxfmt/binding-openharmony-arm64@npm:0.47.0" conditions: os=openharmony & cpu=arm64 languageName: node linkType: hard -"@oxfmt/binding-win32-arm64-msvc@npm:0.33.0": - version: 0.33.0 - resolution: "@oxfmt/binding-win32-arm64-msvc@npm:0.33.0" +"@oxfmt/binding-win32-arm64-msvc@npm:0.47.0": + version: 0.47.0 + resolution: "@oxfmt/binding-win32-arm64-msvc@npm:0.47.0" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@oxfmt/binding-win32-ia32-msvc@npm:0.33.0": - version: 0.33.0 - resolution: "@oxfmt/binding-win32-ia32-msvc@npm:0.33.0" +"@oxfmt/binding-win32-ia32-msvc@npm:0.47.0": + version: 0.47.0 + resolution: "@oxfmt/binding-win32-ia32-msvc@npm:0.47.0" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@oxfmt/binding-win32-x64-msvc@npm:0.33.0": - version: 0.33.0 - resolution: "@oxfmt/binding-win32-x64-msvc@npm:0.33.0" +"@oxfmt/binding-win32-x64-msvc@npm:0.47.0": + version: 0.47.0 + resolution: "@oxfmt/binding-win32-x64-msvc@npm:0.47.0" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -4363,8 +4360,8 @@ __metadata: linkType: hard "@testing-library/react@npm:^16.3.0": - version: 16.3.0 - resolution: "@testing-library/react@npm:16.3.0" + version: 16.3.2 + resolution: "@testing-library/react@npm:16.3.2" dependencies: "@babel/runtime": "npm:^7.12.5" peerDependencies: @@ -4378,7 +4375,7 @@ __metadata: optional: true "@types/react-dom": optional: true - checksum: 10c0/3a2cb1f87c9a67e1ebbbcfd99b94b01e496fc35147be8bc5d8bf07a699c7d523a09d57ef2f7b1d91afccd1a28e21eda3b00d80187fbb51b1de01e422592d845e + checksum: 10c0/f9c7f0915e1b5f7b750e6c7d8b51f091b8ae7ea99bacb761d7b8505ba25de9cfcb749a0f779f1650fb268b499dd79165dc7e1ee0b8b4cb63430d3ddc81ffe044 languageName: node linkType: hard @@ -5256,46 +5253,46 @@ __metadata: linkType: hard "@vitest/browser-playwright@npm:^4.1.0": - version: 4.1.2 - resolution: "@vitest/browser-playwright@npm:4.1.2" + version: 4.1.5 + resolution: "@vitest/browser-playwright@npm:4.1.5" dependencies: - "@vitest/browser": "npm:4.1.2" - "@vitest/mocker": "npm:4.1.2" + "@vitest/browser": "npm:4.1.5" + "@vitest/mocker": "npm:4.1.5" tinyrainbow: "npm:^3.1.0" peerDependencies: playwright: "*" - vitest: 4.1.2 + vitest: 4.1.5 peerDependenciesMeta: playwright: optional: false - checksum: 10c0/701a750a16059be20dddb6884e9aaad43002e1d08da94df31b0dba9abed33d0c3faba8b1c56b7da25b61b0faab1e72597cbcedd2b969f4f6139b2e17a3fd4d06 + checksum: 10c0/47b0ecc13757e638f7765cb4b3172e817a25249b00bc4e9462f4228b6336c0b2f7bb692ae636373f55c8e9b35d18eaecb03abd5f15b0c42a8351da9a62f23d9f languageName: node linkType: hard -"@vitest/browser@npm:4.1.2, @vitest/browser@npm:^4.1.0": - version: 4.1.2 - resolution: "@vitest/browser@npm:4.1.2" +"@vitest/browser@npm:4.1.5, @vitest/browser@npm:^4.1.0": + version: 4.1.5 + resolution: "@vitest/browser@npm:4.1.5" dependencies: "@blazediff/core": "npm:1.9.1" - "@vitest/mocker": "npm:4.1.2" - "@vitest/utils": "npm:4.1.2" + "@vitest/mocker": "npm:4.1.5" + "@vitest/utils": "npm:4.1.5" magic-string: "npm:^0.30.21" pngjs: "npm:^7.0.0" sirv: "npm:^3.0.2" tinyrainbow: "npm:^3.1.0" ws: "npm:^8.19.0" peerDependencies: - vitest: 4.1.2 - checksum: 10c0/8ff656df7c3796f24b38800f42cc59902b15196556ef1df1cf931faf0b095db9677109c2e855ed8915c36bc6aae804b4c53e22c069c749ed2b7e16d8eefddde5 + vitest: 4.1.5 + checksum: 10c0/ea95d100853dd7a1ea9f1b036edfe441688bf5873742341ebf169ab2e32041ab6e21e5f2df918c3c4b9f110265457cdce0c0afa83407617e460a83979ae48e44 languageName: node linkType: hard "@vitest/coverage-v8@npm:^4.1.0": - version: 4.1.2 - resolution: "@vitest/coverage-v8@npm:4.1.2" + version: 4.1.5 + resolution: "@vitest/coverage-v8@npm:4.1.5" dependencies: "@bcoe/v8-coverage": "npm:^1.0.2" - "@vitest/utils": "npm:4.1.2" + "@vitest/utils": "npm:4.1.5" ast-v8-to-istanbul: "npm:^1.0.0" istanbul-lib-coverage: "npm:^3.2.2" istanbul-lib-report: "npm:^3.0.1" @@ -5305,12 +5302,12 @@ __metadata: std-env: "npm:^4.0.0-rc.1" tinyrainbow: "npm:^3.1.0" peerDependencies: - "@vitest/browser": 4.1.2 - vitest: 4.1.2 + "@vitest/browser": 4.1.5 + vitest: 4.1.5 peerDependenciesMeta: "@vitest/browser": optional: true - checksum: 10c0/2f4488efb34a5d9e3a70631ba263e153eecba8ec0da52cb874cdc674c88369061706572b9fc0c302376fd1de58aedc86a2f9f75e5a521084e31a1446c85f2c40 + checksum: 10c0/71bf669cc1714611855caef5e89b4f3e405e410bdb34e4b2f6fbc9dc5e50dd9e09e73068c1750f6bfa03f0cd9209a2b6e03665c3bdbd34e0adff1ca65c482b7b languageName: node linkType: hard @@ -5327,44 +5324,25 @@ __metadata: languageName: node linkType: hard -"@vitest/expect@npm:4.1.0": - version: 4.1.0 - resolution: "@vitest/expect@npm:4.1.0" +"@vitest/expect@npm:4.1.5": + version: 4.1.5 + resolution: "@vitest/expect@npm:4.1.5" dependencies: "@standard-schema/spec": "npm:^1.1.0" "@types/chai": "npm:^5.2.2" - "@vitest/spy": "npm:4.1.0" - "@vitest/utils": "npm:4.1.0" + "@vitest/spy": "npm:4.1.5" + "@vitest/utils": "npm:4.1.5" chai: "npm:^6.2.2" - tinyrainbow: "npm:^3.0.3" - checksum: 10c0/91cd7bb036401df5dfd9204f3de9a0afdb21dea6ee154622e5ed849e87a0df68b74258d490559c7046d3c03bc7aa634e9b0c166942a21d5e475c86c971486091 - languageName: node - linkType: hard - -"@vitest/mocker@npm:4.1.0": - version: 4.1.0 - resolution: "@vitest/mocker@npm:4.1.0" - dependencies: - "@vitest/spy": "npm:4.1.0" - estree-walker: "npm:^3.0.3" - magic-string: "npm:^0.30.21" - peerDependencies: - msw: ^2.4.9 - vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true - checksum: 10c0/f61d3df6461008eb1e62ba465172207b29bd0d9866ff6bc88cd40fc99cd5d215ad89e2894ba6de87068e33f75de903b28a65ccc6074edf3de1fbead6a4a369cc + tinyrainbow: "npm:^3.1.0" + checksum: 10c0/5184682304db471aa20024c1154210ad3d6d590afb61646201ce1a15297259f9a35f92f8fad4435bc8a82135e307ddd27c8495f72417d72d9aa139eb281d9e06 languageName: node linkType: hard -"@vitest/mocker@npm:4.1.2": - version: 4.1.2 - resolution: "@vitest/mocker@npm:4.1.2" +"@vitest/mocker@npm:4.1.5": + version: 4.1.5 + resolution: "@vitest/mocker@npm:4.1.5" dependencies: - "@vitest/spy": "npm:4.1.2" + "@vitest/spy": "npm:4.1.5" estree-walker: "npm:^3.0.3" magic-string: "npm:^0.30.21" peerDependencies: @@ -5375,7 +5353,7 @@ __metadata: optional: true vite: optional: true - checksum: 10c0/f23094f3c7e1e5af42e6a468f0815c1ecdcab85cb3a56ab6f3f214a9808a40271467d4352cae972482b9738cc31c62c7312d8b0da227d6ea03d2b3aacb8d385f + checksum: 10c0/bcfe97700476130933c7ea33fa670c8d2768a81de5325ce407f901e55c2f66cabbb88a7b6cffb46ddf33dff7d8fc209d769fb298f568e310fbeead9b36f6fdb9 languageName: node linkType: hard @@ -5388,43 +5366,34 @@ __metadata: languageName: node linkType: hard -"@vitest/pretty-format@npm:4.1.0": - version: 4.1.0 - resolution: "@vitest/pretty-format@npm:4.1.0" - dependencies: - tinyrainbow: "npm:^3.0.3" - checksum: 10c0/638077f53b5f24ff2d4bc062e69931fa718141db28ddafe435de98a402586b82e8c3cadfc580c0ad233d7f0203aa22d866ac2adca98b83038dbd5423c3d7fe27 - languageName: node - linkType: hard - -"@vitest/pretty-format@npm:4.1.2": - version: 4.1.2 - resolution: "@vitest/pretty-format@npm:4.1.2" +"@vitest/pretty-format@npm:4.1.5": + version: 4.1.5 + resolution: "@vitest/pretty-format@npm:4.1.5" dependencies: tinyrainbow: "npm:^3.1.0" - checksum: 10c0/6f57519c707e6a3d1ff8630ca87ce78fda9bf7bb33f6e4a0c775a8b510f2a6cee109849e2cdb736b0280681c567bd03e4cff724cbf0962950c9ff81377f0b2bc + checksum: 10c0/42b5e9b75e87c0a884d36bee364e2d07ee45e96f413377737a74993e077d90c3a12aa36743855aee5e4e28b78fae20e3e6de5eef8d5344b9aba2bc1e1d5537a1 languageName: node linkType: hard -"@vitest/runner@npm:4.1.0": - version: 4.1.0 - resolution: "@vitest/runner@npm:4.1.0" +"@vitest/runner@npm:4.1.5": + version: 4.1.5 + resolution: "@vitest/runner@npm:4.1.5" dependencies: - "@vitest/utils": "npm:4.1.0" + "@vitest/utils": "npm:4.1.5" pathe: "npm:^2.0.3" - checksum: 10c0/9e09ca1b9070d3fe26c9bd48443d21b9fe2cb9abb2f694300bd9e5065f4e904f7322c07cd4bafadfed6fb11adfb50e4d1535f327ac6d24b6c373e92be90510bc + checksum: 10c0/6a03b313a121155f6dd9e32eeb103c0e12440f586bc4ba1f0d77444e44c6df4652a44443718552037463115635b8378e11f35902d90ce1326f77743219fca056 languageName: node linkType: hard -"@vitest/snapshot@npm:4.1.0": - version: 4.1.0 - resolution: "@vitest/snapshot@npm:4.1.0" +"@vitest/snapshot@npm:4.1.5": + version: 4.1.5 + resolution: "@vitest/snapshot@npm:4.1.5" dependencies: - "@vitest/pretty-format": "npm:4.1.0" - "@vitest/utils": "npm:4.1.0" + "@vitest/pretty-format": "npm:4.1.5" + "@vitest/utils": "npm:4.1.5" magic-string: "npm:^0.30.21" pathe: "npm:^2.0.3" - checksum: 10c0/582c22988c47a99d93dd17ef660427fefe101f67ae4394b64fe58ec103ddc55fc5993626b4a2b556e0a38d40552abaca78196907455e794805ba197b3d56860f + checksum: 10c0/e11bf50d06702331290750a40eaef86078c108df3cd9a52bb1be7b84250048790163f36827525be6a383a4bb1994fc35e6d0c24239a41688b0bb68a1d15d172f languageName: node linkType: hard @@ -5437,25 +5406,18 @@ __metadata: languageName: node linkType: hard -"@vitest/spy@npm:4.1.0": - version: 4.1.0 - resolution: "@vitest/spy@npm:4.1.0" - checksum: 10c0/363776bbffda45af76ff500deacb9b1a35ad8b889462c1be9ebe5f29578ce1dd2c4bd7858c8188614a7db9699a5c802b7beb72e5a18ab5130a70326817961446 - languageName: node - linkType: hard - -"@vitest/spy@npm:4.1.2": - version: 4.1.2 - resolution: "@vitest/spy@npm:4.1.2" - checksum: 10c0/2b5888d536d3e2083c5f8939763e6d780c2c03cc60e1ab45f9d04eacf14467acb9724cae1c4778e4c06426d49d04517e190122882953054a4b13fda44780bb14 +"@vitest/spy@npm:4.1.5": + version: 4.1.5 + resolution: "@vitest/spy@npm:4.1.5" + checksum: 10c0/fda6b1ee0a2fec1a152d8041aba7a79744c3876863b244d1ed406d02b36e8ccc997edb2e3963d1027d728d3dc5a33813e11bef53a0a14fc7de4de5e721d0f591 languageName: node linkType: hard "@vitest/ui@npm:^4.1.0": - version: 4.1.2 - resolution: "@vitest/ui@npm:4.1.2" + version: 4.1.5 + resolution: "@vitest/ui@npm:4.1.5" dependencies: - "@vitest/utils": "npm:4.1.2" + "@vitest/utils": "npm:4.1.5" fflate: "npm:^0.8.2" flatted: "npm:^3.4.2" pathe: "npm:^2.0.3" @@ -5463,8 +5425,8 @@ __metadata: tinyglobby: "npm:^0.2.15" tinyrainbow: "npm:^3.1.0" peerDependencies: - vitest: 4.1.2 - checksum: 10c0/9fad46c544f754e29739995fb00edcaa4567ff03d46ce347471f5fa6b905167ba1e11a00e96d2dcfe9c3271e18b54e52294728a04288fcc2b9438a753ff538d2 + vitest: 4.1.5 + checksum: 10c0/2109480d08516abe3350994ebfcb9adc8a2eb4bb1839c48a336d6ff3378eb49a520ad6490f177e60034ed4fcf579206d9ab14995e951cbf6d4c7c792c46fe202 languageName: node linkType: hard @@ -5479,25 +5441,14 @@ __metadata: languageName: node linkType: hard -"@vitest/utils@npm:4.1.0": - version: 4.1.0 - resolution: "@vitest/utils@npm:4.1.0" - dependencies: - "@vitest/pretty-format": "npm:4.1.0" - convert-source-map: "npm:^2.0.0" - tinyrainbow: "npm:^3.0.3" - checksum: 10c0/222afbdef4f680a554bb6c3d946a4a879a441ebfb8597295cb7554d295e0e2624f3d4c2920b5767bbb8961a9f8a16756270ffc84032f5ea432cdce080ccab050 - languageName: node - linkType: hard - -"@vitest/utils@npm:4.1.2": - version: 4.1.2 - resolution: "@vitest/utils@npm:4.1.2" +"@vitest/utils@npm:4.1.5": + version: 4.1.5 + resolution: "@vitest/utils@npm:4.1.5" dependencies: - "@vitest/pretty-format": "npm:4.1.2" + "@vitest/pretty-format": "npm:4.1.5" convert-source-map: "npm:^2.0.0" tinyrainbow: "npm:^3.1.0" - checksum: 10c0/d96475e0703b6e5208c6c0f570c1235278cbac3f3913a9aa4203a3e617c9eaca85a184bfd5d13cf366b84754df787ab8bc85242c5e0c63105ee7176c186a2136 + checksum: 10c0/72409717e68018e5fe42fa173cc4eff6def8c35bd52013f86ddb414cd28d73fcc425ac62968e01a52371b3fd5a7a775536283d2f1d64432753f628712a6a4908 languageName: node linkType: hard @@ -5592,10 +5543,10 @@ __metadata: languageName: node linkType: hard -"ansi-regex@npm:^6.0.1": - version: 6.0.1 - resolution: "ansi-regex@npm:6.0.1" - checksum: 10c0/cbe16dbd2c6b2735d1df7976a7070dd277326434f0212f43abf6d87674095d247968209babdaad31bb00882fa68807256ba9be340eec2f1004de14ca75f52a08 +"ansi-regex@npm:^6.2.2": + version: 6.2.2 + resolution: "ansi-regex@npm:6.2.2" + checksum: 10c0/05d4acb1d2f59ab2cf4b794339c7b168890d44dda4bf0ce01152a8da0213aca207802f930442ce8cd22d7a92f44907664aac6508904e75e038fa944d2601b30f languageName: node linkType: hard @@ -5956,13 +5907,6 @@ __metadata: languageName: node linkType: hard -"balanced-match@npm:^3.0.1": - version: 3.0.1 - resolution: "balanced-match@npm:3.0.1" - checksum: 10c0/ac8dd63a5b260610c2cbda982f436e964c1b9ae8764d368a523769da40a31710abd6e19f0fdf1773c4ad7b2ea7ba7b285d547375dc723f6e754369835afc8e9f - languageName: node - linkType: hard - "balanced-match@npm:^4.0.2": version: 4.0.4 resolution: "balanced-match@npm:4.0.4" @@ -6144,16 +6088,16 @@ __metadata: languageName: node linkType: hard -"cacheable@npm:^2.2.0": - version: 2.2.0 - resolution: "cacheable@npm:2.2.0" +"cacheable@npm:^2.3.4": + version: 2.3.4 + resolution: "cacheable@npm:2.3.4" dependencies: - "@cacheable/memory": "npm:^2.0.5" - "@cacheable/utils": "npm:^2.3.0" - hookified: "npm:^1.13.0" - keyv: "npm:^5.5.4" - qified: "npm:^0.5.2" - checksum: 10c0/39b09e68b0a3da6c53dba1ed10dd13b63bf03f1fcb93ee941dd324d758e2d84466f1acb0c760fa78b23377be15ee58dc9acfb1fde85a89d2483d195b2f75e249 + "@cacheable/memory": "npm:^2.0.8" + "@cacheable/utils": "npm:^2.4.0" + hookified: "npm:^1.15.0" + keyv: "npm:^5.6.0" + qified: "npm:^0.9.0" + checksum: 10c0/47139d83bed1a74f4e0bd5c102a0865146149fd192d572e61f141947ac6d7d8fa334794a25ac47d8df3758522b5c53a740ccfd31cc611fa098ea598ab08b7e20 languageName: node linkType: hard @@ -6404,10 +6348,10 @@ __metadata: languageName: node linkType: hard -"commander@npm:^14.0.2": - version: 14.0.2 - resolution: "commander@npm:14.0.2" - checksum: 10c0/245abd1349dbad5414cb6517b7b5c584895c02c4f7836ff5395f301192b8566f9796c82d7bd6c92d07eba8775fe4df86602fca5d86d8d10bcc2aded1e21c2aeb +"commander@npm:^14.0.3": + version: 14.0.3 + resolution: "commander@npm:14.0.3" + checksum: 10c0/755652564bbf56ff2ff083313912b326450d3f8d8c85f4b71416539c9a05c3c67dbd206821ca72635bf6b160e2afdefcb458e86b317827d5cb333b69ce7f1a24 languageName: node linkType: hard @@ -6562,9 +6506,9 @@ __metadata: languageName: node linkType: hard -"cosmiconfig@npm:^9.0.0": - version: 9.0.0 - resolution: "cosmiconfig@npm:9.0.0" +"cosmiconfig@npm:^9.0.1": + version: 9.0.1 + resolution: "cosmiconfig@npm:9.0.1" dependencies: env-paths: "npm:^2.2.1" import-fresh: "npm:^3.3.0" @@ -6575,7 +6519,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/1c1703be4f02a250b1d6ca3267e408ce16abfe8364193891afc94c2d5c060b69611fdc8d97af74b7e6d5d1aac0ab2fb94d6b079573146bc2d756c2484ce5f0ee + checksum: 10c0/a5d4d95599687532ee072bca60170133c24d4e08cd795529e0f22c6ce5fde9409eaf4f26e36e3d671f43270ef858fc68f3c7b0ec28e58fac7ddebda5b7725306 languageName: node linkType: hard @@ -6621,10 +6565,10 @@ __metadata: languageName: node linkType: hard -"css-functions-list@npm:^3.2.3": - version: 3.2.3 - resolution: "css-functions-list@npm:3.2.3" - checksum: 10c0/03f9ed34eeed310d2b1cf0e524eea02bc5f87854a4de85f8957ea432ab1036841a3fb00879590519f7bb8fda40d992ce7a72fa9b61696ca1dc53b90064858f96 +"css-functions-list@npm:^3.3.3": + version: 3.3.3 + resolution: "css-functions-list@npm:3.3.3" + checksum: 10c0/7b9e5dd94e0178b2edb0f3263de5ae7942e56ab0b73420d4adb8fea003367e1dbc94fe8ea300bf732d1423f7eafb523e695136f0a4e6ae4f0abec66848219ee6 languageName: node linkType: hard @@ -6650,7 +6594,7 @@ __metadata: languageName: node linkType: hard -"css-tree@npm:^3.0.0, css-tree@npm:^3.0.1, css-tree@npm:^3.1.0, css-tree@npm:^3.2.1": +"css-tree@npm:^3.0.0, css-tree@npm:^3.0.1, css-tree@npm:^3.2.1": version: 3.2.1 resolution: "css-tree@npm:3.2.1" dependencies: @@ -7981,12 +7925,12 @@ __metadata: languageName: node linkType: hard -"file-entry-cache@npm:^11.1.1": - version: 11.1.1 - resolution: "file-entry-cache@npm:11.1.1" +"file-entry-cache@npm:^11.1.2": + version: 11.1.2 + resolution: "file-entry-cache@npm:11.1.2" dependencies: - flat-cache: "npm:^6.1.19" - checksum: 10c0/aa639f5dd578f63984a941f34b112180a4bd9d091d03970752437958158932957fc576861b9fbcf4d6eceaeb0779ad5359befdc321cc1bac59aa6f56f6b1d205 + flat-cache: "npm:^6.1.20" + checksum: 10c0/14a251661750b783236d8e2fdf98da642b0069d6bd2b512caed36ee6a6d719b06493f15fcdda5ec32a61770d5eba6ac885b4ff4a64e57f3cc2a33d99aebabd08 languageName: node linkType: hard @@ -8058,18 +8002,18 @@ __metadata: languageName: node linkType: hard -"flat-cache@npm:^6.1.19": - version: 6.1.19 - resolution: "flat-cache@npm:6.1.19" +"flat-cache@npm:^6.1.20": + version: 6.1.22 + resolution: "flat-cache@npm:6.1.22" dependencies: - cacheable: "npm:^2.2.0" - flatted: "npm:^3.3.3" - hookified: "npm:^1.13.0" - checksum: 10c0/80c2d3c6ff2b7327920dacf2ab57e70ba4e865120209e41295689f029fcec17a6b49892ded7ce758d968d2b097fa2f9ab4e52923d971f3cdc90af9faba4680fd + cacheable: "npm:^2.3.4" + flatted: "npm:^3.4.2" + hookified: "npm:^1.15.0" + checksum: 10c0/ec94fba4ecb10b43567bb815f19e178d4351a66a58117b06a06c81bda6b579c2ed75d8cbd9ea90a2ab9408493b564ffef55386f263f20d1d73bb991fa97de67f languageName: node linkType: hard -"flatted@npm:^3.2.9, flatted@npm:^3.3.3, flatted@npm:^3.4.2": +"flatted@npm:^3.2.9, flatted@npm:^3.4.2": version: 3.4.2 resolution: "flatted@npm:3.4.2" checksum: 10c0/a65b67aae7172d6cdf63691be7de6c5cd5adbdfdfe2e9da1a09b617c9512ed794037741ee53d93114276bff3f93cd3b0d97d54f9b316e1e4885dde6e9ffdf7ed @@ -8254,10 +8198,10 @@ __metadata: languageName: node linkType: hard -"get-east-asian-width@npm:^1.0.0, get-east-asian-width@npm:^1.3.0": - version: 1.4.0 - resolution: "get-east-asian-width@npm:1.4.0" - checksum: 10c0/4e481d418e5a32061c36fbb90d1b225a254cc5b2df5f0b25da215dcd335a3c111f0c2023ffda43140727a9cafb62dac41d022da82c08f31083ee89f714ee3b83 +"get-east-asian-width@npm:^1.0.0, get-east-asian-width@npm:^1.5.0": + version: 1.5.0 + resolution: "get-east-asian-width@npm:1.5.0" + checksum: 10c0/bff8bbc8d81790b9477f7aa55b1806b9f082a8dc1359fff7bd8b96939622c86b729685afc2bfeb22def1fc6ef1e5228e4d87dd4e6da60bc43a5edfb03c4ee167 languageName: node linkType: hard @@ -8435,9 +8379,9 @@ __metadata: languageName: node linkType: hard -"globby@npm:^16.1.0": - version: 16.1.0 - resolution: "globby@npm:16.1.0" +"globby@npm:^16.2.0": + version: 16.2.0 + resolution: "globby@npm:16.2.0" dependencies: "@sindresorhus/merge-streams": "npm:^4.0.0" fast-glob: "npm:^3.3.3" @@ -8445,7 +8389,7 @@ __metadata: is-path-inside: "npm:^4.0.0" slash: "npm:^5.1.0" unicorn-magic: "npm:^0.4.0" - checksum: 10c0/45dd4dd8311401b37ed426ad7ea7a6e8fdda2518bb0d62fbf0a46c2e6b81bcbd2c8d4fbcbcf4c0600bba15c5a8f4621785d0177acbb1b545f02f6b49f2cdbe24 + checksum: 10c0/fc0675e01dc1da5095f30dccc46a3047fc38d45ca08c21c1aa871bd79d38682f507d84a159be168019db5fffaa09c5663c3679c29190a2d4f999dc91d7ff6406 languageName: node linkType: hard @@ -8532,12 +8476,12 @@ __metadata: languageName: node linkType: hard -"hashery@npm:^1.2.0": - version: 1.2.0 - resolution: "hashery@npm:1.2.0" +"hashery@npm:^1.4.0, hashery@npm:^1.5.1": + version: 1.5.1 + resolution: "hashery@npm:1.5.1" dependencies: - hookified: "npm:^1.13.0" - checksum: 10c0/57905ae4bcb12faedf222b1f39cc05424ae2a2bba1f613b9c582a4e5012b8361c14a25a5a0c16da7eca70ee8338ad2924d6b9566667014c927a36d4b90ad5b72 + hookified: "npm:^1.15.0" + checksum: 10c0/ab4225b655a7b0d05df99b1a59d5b3a51fe433f82422ca25e6f3f4c4ddd30adb49ebd38e0047ef9bded93319c1e9fc857e16aa382e554929c871cb77d39fc463 languageName: node linkType: hard @@ -8603,10 +8547,17 @@ __metadata: languageName: node linkType: hard -"hookified@npm:^1.12.2, hookified@npm:^1.13.0": - version: 1.13.0 - resolution: "hookified@npm:1.13.0" - checksum: 10c0/26718a60385ab95f20173323c175a23b06efcc1fac613c51714c9c38038c7395ed52d3bea660840c8362d92dc38022ae4469c2a531728f6116f4df53f70505e7 +"hookified@npm:^1.15.0, hookified@npm:^1.15.1": + version: 1.15.1 + resolution: "hookified@npm:1.15.1" + checksum: 10c0/6b691374fa97ae57169fb29f90e723499fda5e85494654fbe55c4768b3ccbf3e14c0adc8d0f365f32c503b60d7c06f907781f5966c03d41c423575eb5e16860c + languageName: node + linkType: hard + +"hookified@npm:^2.1.1": + version: 2.2.0 + resolution: "hookified@npm:2.2.0" + checksum: 10c0/7017d2b66945490293a5aba239e7b39f39071dd940fa019348c7ffea92b91b8c267853c4c51680ed0f3687b33352582fa4d2cff6dd4c5a1c5c44b037276f07aa languageName: node linkType: hard @@ -9599,12 +9550,12 @@ __metadata: languageName: node linkType: hard -"keyv@npm:^5.5.4": - version: 5.5.4 - resolution: "keyv@npm:5.5.4" +"keyv@npm:^5.6.0": + version: 5.6.0 + resolution: "keyv@npm:5.6.0" dependencies: "@keyv/serialize": "npm:^1.1.1" - checksum: 10c0/8dad7f61022c6348c4c691a19468b7c238198252edbd3cc08277d95253c137af7ce5ffd763b6ffded4a75cbe03dc3134f1adcd3dd26c5767c2c9c254e3b39001 + checksum: 10c0/c3ea795b6e03593ca57c8f70928a69bad14c13389a7fb75649a115ff55615244b04d8902798d841c17f0bb4a8a8866c97133b543b93f151b440170bba09176db languageName: node linkType: hard @@ -9834,19 +9785,18 @@ __metadata: linkType: hard "lint-staged@npm:^16.2.6": - version: 16.2.7 - resolution: "lint-staged@npm:16.2.7" + version: 16.4.0 + resolution: "lint-staged@npm:16.4.0" dependencies: - commander: "npm:^14.0.2" + commander: "npm:^14.0.3" listr2: "npm:^9.0.5" - micromatch: "npm:^4.0.8" - nano-spawn: "npm:^2.0.0" - pidtree: "npm:^0.6.0" + picomatch: "npm:^4.0.3" string-argv: "npm:^0.3.2" - yaml: "npm:^2.8.1" + tinyexec: "npm:^1.0.4" + yaml: "npm:^2.8.2" bin: lint-staged: bin/lint-staged.js - checksum: 10c0/9a677c21a8112d823ae5bc565ba2c9e7b803786f2a021c46827a55fe44ed59def96edb24fc99c06a2545cdbbf366022ad82addcb3bf60c712f3b98ef92069717 + checksum: 10c0/67625a49a2a01368c7df2da7e553567a79c4b261d9faf3436e00fc3a2f9c4bbe7295909012c47b3d9029e269fd7d7469901a5120573527a032f15797aa497c26 languageName: node linkType: hard @@ -10117,10 +10067,10 @@ __metadata: languageName: node linkType: hard -"meow@npm:^14.0.0": - version: 14.0.0 - resolution: "meow@npm:14.0.0" - checksum: 10c0/dbe4e136e0f858472d8b8c24d382054fe9898f6f47c58a42be25e6b1985e5ae31048573bf399f6e5877bf9d5b89cb840beae7350682019f998ff30baaa5e4106 +"meow@npm:^14.1.0": + version: 14.1.0 + resolution: "meow@npm:14.1.0" + checksum: 10c0/f0ca4bb4fd08e4b9470fcbb7332deb61d72d40d4bda18ffb87c1a98e5014c0b44749ae9f0cab18fa532e26d61cef5d453831f9ae23ac09fa8ea0e0469be73ebc languageName: node linkType: hard @@ -10396,13 +10346,6 @@ __metadata: languageName: node linkType: hard -"nano-spawn@npm:^2.0.0": - version: 2.0.0 - resolution: "nano-spawn@npm:2.0.0" - checksum: 10c0/d00f9b5739f86e28cb732ffd774793e110810cded246b8393c75c4f22674af47f98ee37b19f022ada2d8c9425f800e841caa0662fbff4c0930a10e39339fb366 - languageName: node - linkType: hard - "nanoid@npm:^3.3.11": version: 3.3.11 resolution: "nanoid@npm:3.3.11" @@ -10810,29 +10753,29 @@ __metadata: languageName: node linkType: hard -"oxfmt@npm:^0.33.0": - version: 0.33.0 - resolution: "oxfmt@npm:0.33.0" - dependencies: - "@oxfmt/binding-android-arm-eabi": "npm:0.33.0" - "@oxfmt/binding-android-arm64": "npm:0.33.0" - "@oxfmt/binding-darwin-arm64": "npm:0.33.0" - "@oxfmt/binding-darwin-x64": "npm:0.33.0" - "@oxfmt/binding-freebsd-x64": "npm:0.33.0" - "@oxfmt/binding-linux-arm-gnueabihf": "npm:0.33.0" - "@oxfmt/binding-linux-arm-musleabihf": "npm:0.33.0" - "@oxfmt/binding-linux-arm64-gnu": "npm:0.33.0" - "@oxfmt/binding-linux-arm64-musl": "npm:0.33.0" - "@oxfmt/binding-linux-ppc64-gnu": "npm:0.33.0" - "@oxfmt/binding-linux-riscv64-gnu": "npm:0.33.0" - "@oxfmt/binding-linux-riscv64-musl": "npm:0.33.0" - "@oxfmt/binding-linux-s390x-gnu": "npm:0.33.0" - "@oxfmt/binding-linux-x64-gnu": "npm:0.33.0" - "@oxfmt/binding-linux-x64-musl": "npm:0.33.0" - "@oxfmt/binding-openharmony-arm64": "npm:0.33.0" - "@oxfmt/binding-win32-arm64-msvc": "npm:0.33.0" - "@oxfmt/binding-win32-ia32-msvc": "npm:0.33.0" - "@oxfmt/binding-win32-x64-msvc": "npm:0.33.0" +"oxfmt@npm:^0.47.0": + version: 0.47.0 + resolution: "oxfmt@npm:0.47.0" + dependencies: + "@oxfmt/binding-android-arm-eabi": "npm:0.47.0" + "@oxfmt/binding-android-arm64": "npm:0.47.0" + "@oxfmt/binding-darwin-arm64": "npm:0.47.0" + "@oxfmt/binding-darwin-x64": "npm:0.47.0" + "@oxfmt/binding-freebsd-x64": "npm:0.47.0" + "@oxfmt/binding-linux-arm-gnueabihf": "npm:0.47.0" + "@oxfmt/binding-linux-arm-musleabihf": "npm:0.47.0" + "@oxfmt/binding-linux-arm64-gnu": "npm:0.47.0" + "@oxfmt/binding-linux-arm64-musl": "npm:0.47.0" + "@oxfmt/binding-linux-ppc64-gnu": "npm:0.47.0" + "@oxfmt/binding-linux-riscv64-gnu": "npm:0.47.0" + "@oxfmt/binding-linux-riscv64-musl": "npm:0.47.0" + "@oxfmt/binding-linux-s390x-gnu": "npm:0.47.0" + "@oxfmt/binding-linux-x64-gnu": "npm:0.47.0" + "@oxfmt/binding-linux-x64-musl": "npm:0.47.0" + "@oxfmt/binding-openharmony-arm64": "npm:0.47.0" + "@oxfmt/binding-win32-arm64-msvc": "npm:0.47.0" + "@oxfmt/binding-win32-ia32-msvc": "npm:0.47.0" + "@oxfmt/binding-win32-x64-msvc": "npm:0.47.0" tinypool: "npm:2.1.0" dependenciesMeta: "@oxfmt/binding-android-arm-eabi": @@ -10875,7 +10818,7 @@ __metadata: optional: true bin: oxfmt: bin/oxfmt - checksum: 10c0/77f670459a26a14844bdc9b34e7e06eae0b787138e265e28fa011eb9181f232cf784cd1c40adca1416d2af3f5c1af1ed08d3815860bb4596edcb0c4e3773d1f3 + checksum: 10c0/2651c383e1a35d88e573a74e714e618cb0dcc0ec9c522dcbd822baa75aa2d793bd657d8abdfbb3e27f0a9886be174ebe620f842a7c0e86a18c7b591d59f649c1 languageName: node linkType: hard @@ -11179,15 +11122,6 @@ __metadata: languageName: node linkType: hard -"pidtree@npm:^0.6.0": - version: 0.6.0 - resolution: "pidtree@npm:0.6.0" - bin: - pidtree: bin/pidtree.js - checksum: 10c0/0829ec4e9209e230f74ebf4265f5ccc9ebfb488334b525cb13f86ff801dca44b362c41252cd43ae4d7653a10a5c6ab3be39d2c79064d6895e0d78dc50a5ed6e9 - languageName: node - linkType: hard - "pify@npm:^4.0.1": version: 4.0.1 resolution: "pify@npm:4.0.1" @@ -11778,14 +11712,14 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.0.0, postcss@npm:^8.4.35, postcss@npm:^8.5.10, postcss@npm:^8.5.6": - version: 8.5.12 - resolution: "postcss@npm:8.5.12" +"postcss@npm:^8.0.0, postcss@npm:^8.4.35, postcss@npm:^8.5.10, postcss@npm:^8.5.13": + version: 8.5.13 + resolution: "postcss@npm:8.5.13" dependencies: nanoid: "npm:^3.3.11" picocolors: "npm:^1.1.1" source-map-js: "npm:^1.2.1" - checksum: 10c0/5baebaf574c567bc1b3d61197f38af4ce5920b8f611c887fb6bc3dcc14af00253c169dbf19897bc889cce0b0d9818ab5eb4ea0caedf02b0bab10da8a43ce8c12 + checksum: 10c0/3aa7c8cbdfbfd99b34406a433cef56d164dd135fc9cb9e63d487cc363291f877a55ec7b8ff6ec15348c17c2d98a43be46bfad671e6340403041a3e79f70c2f2f languageName: node linkType: hard @@ -11951,12 +11885,12 @@ __metadata: languageName: node linkType: hard -"qified@npm:^0.5.2": - version: 0.5.2 - resolution: "qified@npm:0.5.2" +"qified@npm:^0.9.0": + version: 0.9.1 + resolution: "qified@npm:0.9.1" dependencies: - hookified: "npm:^1.13.0" - checksum: 10c0/4234ba1c0d3b14f31752a39f6788b2490cebad57abd1ce0cee0e04d2fe04a234463785d47559d364affe4d1578aad06fa2fd67b87044688708bf56d4a18ce44a + hookified: "npm:^2.1.1" + checksum: 10c0/815cfaefac67a702cd8aec9f7ac946ee7acf985ad13f518d0ec30f3ba5c7e74b72e014cf316b493baa54d81f4fadb2a2cf60a0a197326fd14fa68e6e7cf96832 languageName: node linkType: hard @@ -13500,13 +13434,13 @@ __metadata: languageName: node linkType: hard -"string-width@npm:^8.0.0, string-width@npm:^8.1.0": - version: 8.1.0 - resolution: "string-width@npm:8.1.0" +"string-width@npm:^8.0.0, string-width@npm:^8.2.0": + version: 8.2.1 + resolution: "string-width@npm:8.2.1" dependencies: - get-east-asian-width: "npm:^1.3.0" - strip-ansi: "npm:^7.1.0" - checksum: 10c0/749b5d0dab2532b4b6b801064230f4da850f57b3891287023117ab63a464ad79dd208f42f793458f48f3ad121fe2e1f01dd525ff27ead957ed9f205e27406593 + get-east-asian-width: "npm:^1.5.0" + strip-ansi: "npm:^7.1.2" + checksum: 10c0/d467b4eaf4c40a01bb438a2620e77badd2456ffd5131c9973abe4f3acf7c802d5b21f3b6a00a5e33a7fc28ca8f9c103226e01bac61e9f259659c6f46d78e353a languageName: node linkType: hard @@ -13619,12 +13553,12 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^7.0.1, strip-ansi@npm:^7.1.0": - version: 7.1.0 - resolution: "strip-ansi@npm:7.1.0" +"strip-ansi@npm:^7.0.1, strip-ansi@npm:^7.1.0, strip-ansi@npm:^7.1.2": + version: 7.2.0 + resolution: "strip-ansi@npm:7.2.0" dependencies: - ansi-regex: "npm:^6.0.1" - checksum: 10c0/a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4 + ansi-regex: "npm:^6.2.2" + checksum: 10c0/544d13b7582f8254811ea97db202f519e189e59d35740c46095897e254e4f1aa9fe1524a83ad6bc5ad67d4dd6c0281d2e0219ed62b880a6238a16a17d375f221 languageName: node linkType: hard @@ -13746,50 +13680,48 @@ __metadata: linkType: hard "stylelint@npm:^17.0.0": - version: 17.0.0 - resolution: "stylelint@npm:17.0.0" + version: 17.10.0 + resolution: "stylelint@npm:17.10.0" dependencies: + "@csstools/css-calc": "npm:^3.2.0" "@csstools/css-parser-algorithms": "npm:^4.0.0" - "@csstools/css-syntax-patches-for-csstree": "npm:^1.0.25" + "@csstools/css-syntax-patches-for-csstree": "npm:^1.1.3" "@csstools/css-tokenizer": "npm:^4.0.0" "@csstools/media-query-list-parser": "npm:^5.0.0" "@csstools/selector-resolve-nested": "npm:^4.0.0" "@csstools/selector-specificity": "npm:^6.0.0" - balanced-match: "npm:^3.0.1" colord: "npm:^2.9.3" - cosmiconfig: "npm:^9.0.0" - css-functions-list: "npm:^3.2.3" - css-tree: "npm:^3.1.0" + cosmiconfig: "npm:^9.0.1" + css-functions-list: "npm:^3.3.3" + css-tree: "npm:^3.2.1" debug: "npm:^4.4.3" fast-glob: "npm:^3.3.3" fastest-levenshtein: "npm:^1.0.16" - file-entry-cache: "npm:^11.1.1" + file-entry-cache: "npm:^11.1.2" global-modules: "npm:^2.0.0" - globby: "npm:^16.1.0" + globby: "npm:^16.2.0" globjoin: "npm:^0.1.4" html-tags: "npm:^5.1.0" ignore: "npm:^7.0.5" import-meta-resolve: "npm:^4.2.0" - imurmurhash: "npm:^0.1.4" is-plain-object: "npm:^5.0.0" - known-css-properties: "npm:^0.37.0" mathml-tag-names: "npm:^4.0.0" - meow: "npm:^14.0.0" + meow: "npm:^14.1.0" micromatch: "npm:^4.0.8" normalize-path: "npm:^3.0.0" picocolors: "npm:^1.1.1" - postcss: "npm:^8.5.6" + postcss: "npm:^8.5.13" postcss-safe-parser: "npm:^7.0.1" postcss-selector-parser: "npm:^7.1.1" postcss-value-parser: "npm:^4.2.0" - string-width: "npm:^8.1.0" + string-width: "npm:^8.2.0" supports-hyperlinks: "npm:^4.4.0" svg-tags: "npm:^1.0.0" table: "npm:^6.9.0" - write-file-atomic: "npm:^7.0.0" + write-file-atomic: "npm:^7.0.1" bin: stylelint: bin/stylelint.mjs - checksum: 10c0/ad1ebabb17904c1bc0e386b078b9656c02942b60ae3663a00b2b23c60e9c6adffbd6787999ad4473cb558c0fc195c0d9e0de5a5e8f063752b61fe3a281fc4433 + checksum: 10c0/4a899cdc9de7d281dcd94174e5eb94f1c904f3e608df5a13039d2f67a4f7d7a304ea75c5a6c77e448f83f66c12dcde1e0d4aa03ed7ee5c964d3966de6a6ad2e6 languageName: node linkType: hard @@ -14020,10 +13952,10 @@ __metadata: languageName: node linkType: hard -"tinyexec@npm:^1.0.2": - version: 1.0.2 - resolution: "tinyexec@npm:1.0.2" - checksum: 10c0/1261a8e34c9b539a9aae3b7f0bb5372045ff28ee1eba035a2a059e532198fe1a182ec61ac60fa0b4a4129f0c4c4b1d2d57355b5cb9aa2d17ac9454ecace502ee +"tinyexec@npm:^1.0.2, tinyexec@npm:^1.0.4": + version: 1.1.2 + resolution: "tinyexec@npm:1.1.2" + checksum: 10c0/9e0ef6c001ce54688cf16833a02f70a339276219ca947b88930b124267de2cffc764ff44e87e7369384b1d75ab63491465412cbbdf06f2437956b9ab66ab4491 languageName: node linkType: hard @@ -14051,13 +13983,6 @@ __metadata: languageName: node linkType: hard -"tinyrainbow@npm:^3.0.3": - version: 3.0.3 - resolution: "tinyrainbow@npm:3.0.3" - checksum: 10c0/1e799d35cd23cabe02e22550985a3051dc88814a979be02dc632a159c393a998628eacfc558e4c746b3006606d54b00bcdea0c39301133956d10a27aa27e988c - languageName: node - linkType: hard - "tinyrainbow@npm:^3.1.0": version: 3.1.0 resolution: "tinyrainbow@npm:3.1.0" @@ -14789,7 +14714,7 @@ __metadata: languageName: node linkType: hard -"vite@npm:^6.0.0 || ^7.0.0 || ^8.0.0-0, vite@npm:^8.0.0": +"vite@npm:^6.0.0 || ^7.0.0 || ^8.0.0, vite@npm:^8.0.0": version: 8.0.10 resolution: "vite@npm:8.0.10" dependencies: @@ -14847,16 +14772,16 @@ __metadata: linkType: hard "vitest@npm:^4.1.0": - version: 4.1.0 - resolution: "vitest@npm:4.1.0" - dependencies: - "@vitest/expect": "npm:4.1.0" - "@vitest/mocker": "npm:4.1.0" - "@vitest/pretty-format": "npm:4.1.0" - "@vitest/runner": "npm:4.1.0" - "@vitest/snapshot": "npm:4.1.0" - "@vitest/spy": "npm:4.1.0" - "@vitest/utils": "npm:4.1.0" + version: 4.1.5 + resolution: "vitest@npm:4.1.5" + dependencies: + "@vitest/expect": "npm:4.1.5" + "@vitest/mocker": "npm:4.1.5" + "@vitest/pretty-format": "npm:4.1.5" + "@vitest/runner": "npm:4.1.5" + "@vitest/snapshot": "npm:4.1.5" + "@vitest/spy": "npm:4.1.5" + "@vitest/utils": "npm:4.1.5" es-module-lexer: "npm:^2.0.0" expect-type: "npm:^1.3.0" magic-string: "npm:^0.30.21" @@ -14867,20 +14792,22 @@ __metadata: tinybench: "npm:^2.9.0" tinyexec: "npm:^1.0.2" tinyglobby: "npm:^0.2.15" - tinyrainbow: "npm:^3.0.3" - vite: "npm:^6.0.0 || ^7.0.0 || ^8.0.0-0" + tinyrainbow: "npm:^3.1.0" + vite: "npm:^6.0.0 || ^7.0.0 || ^8.0.0" why-is-node-running: "npm:^2.3.0" peerDependencies: "@edge-runtime/vm": "*" "@opentelemetry/api": ^1.9.0 "@types/node": ^20.0.0 || ^22.0.0 || >=24.0.0 - "@vitest/browser-playwright": 4.1.0 - "@vitest/browser-preview": 4.1.0 - "@vitest/browser-webdriverio": 4.1.0 - "@vitest/ui": 4.1.0 + "@vitest/browser-playwright": 4.1.5 + "@vitest/browser-preview": 4.1.5 + "@vitest/browser-webdriverio": 4.1.5 + "@vitest/coverage-istanbul": 4.1.5 + "@vitest/coverage-v8": 4.1.5 + "@vitest/ui": 4.1.5 happy-dom: "*" jsdom: "*" - vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: "@edge-runtime/vm": optional: true @@ -14894,6 +14821,10 @@ __metadata: optional: true "@vitest/browser-webdriverio": optional: true + "@vitest/coverage-istanbul": + optional: true + "@vitest/coverage-v8": + optional: true "@vitest/ui": optional: true happy-dom: @@ -14904,7 +14835,7 @@ __metadata: optional: false bin: vitest: vitest.mjs - checksum: 10c0/48048e4391e4e8190aa12b1c868bef4ad8d346214631b4506e0dc1f3241ecb8bcb24f296c38a7d98eae712a042375ae209da4b35165db38f9a9bc79a3a9e2a04 + checksum: 10c0/196eaf5e95b45a3f6d3001a2408d7dc6f146c29c873ed4e42e1ad4c9327122934fb3793a12b6ce3b7c25d355e738b20123acc0894ce30358c3370b15f4bd0865 languageName: node linkType: hard @@ -15354,13 +15285,12 @@ __metadata: languageName: node linkType: hard -"write-file-atomic@npm:^7.0.0": - version: 7.0.0 - resolution: "write-file-atomic@npm:7.0.0" +"write-file-atomic@npm:^7.0.1": + version: 7.0.1 + resolution: "write-file-atomic@npm:7.0.1" dependencies: - imurmurhash: "npm:^0.1.4" signal-exit: "npm:^4.0.1" - checksum: 10c0/f5dd7c0324ae03b399974484fbe56363654c3884920e3c4f4d59b690596f113f60f4061a3c0aa5e6f4c22e5b9e7e0608954fd8131a916c9123b68a17ba886345 + checksum: 10c0/69cebb64945e22928a24ae7e2a55bf54438c92d6f657c1fa5e96b7c7a50f6c022e7454ab5c259079bb35f60296242f3a21234c79320d64a8ad57675b56a2098d languageName: node linkType: hard @@ -15454,12 +15384,12 @@ __metadata: languageName: node linkType: hard -"yaml@npm:^2.8.1": - version: 2.8.1 - resolution: "yaml@npm:2.8.1" +"yaml@npm:^2.8.2": + version: 2.8.4 + resolution: "yaml@npm:2.8.4" bin: yaml: bin.mjs - checksum: 10c0/7c587be00d9303d2ae1566e03bc5bc7fe978ba0d9bf39cc418c3139d37929dfcb93a230d9749f2cb578b6aa5d9ebebc322415e4b653cb83acd8bc0bc321707f3 + checksum: 10c0/0a33a1fa28d4bc79f61a12ec7ef7a2bce0ce5f8e80c6eaecfb4a0c88c08767dd1ede372b6a3bcd70891213b8c9f3169b355c97e77026d3b3459e10d2cccaef1e languageName: node linkType: hard From 066456ecdf6c8bff07827454f8e7c768b25b52d2 Mon Sep 17 00:00:00 2001 From: Kenta Ishizaki <153918146+55728@users.noreply.github.com> Date: Tue, 5 May 2026 13:54:34 +0900 Subject: [PATCH 017/132] Fix typo in typed_functions.ts comment (#38590) --- app/javascript/mastodon/store/typed_functions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/store/typed_functions.ts b/app/javascript/mastodon/store/typed_functions.ts index 79bca08a52f06b..b6f46db686ca41 100644 --- a/app/javascript/mastodon/store/typed_functions.ts +++ b/app/javascript/mastodon/store/typed_functions.ts @@ -230,7 +230,7 @@ export function createDataLoadingThunk< ): ReturnType>; /** - * This function creates a Redux Thunk that handles loading data asynchronously (usually from the API), dispatching `pending`, `fullfilled` and `rejected` actions. + * This function creates a Redux Thunk that handles loading data asynchronously (usually from the API), dispatching `pending`, `fulfilled` and `rejected` actions. * * You can run a callback on the `onData` results to either dispatch side effects or modify the payload. * From 0aae54dfd9d4e7402f9a3addf5dd6622d5a166c2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 May 2026 10:17:59 +0200 Subject: [PATCH 018/132] Update dependency linzer to v0.7.9 (#38874) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index f28240ce2f7dcf..94bbf5d18c0cf0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -411,15 +411,13 @@ GEM rexml link_header (0.0.8) lint_roller (1.1.0) - linzer (0.7.8) + linzer (0.7.9) cgi (>= 0.4.2, < 0.6.0) forwardable (~> 1.3, >= 1.3.3) logger (~> 1.7, >= 1.7.0) net-http (>= 0.6, < 0.10) - openssl (>= 3, < 5) rack (>= 2.2, < 4.0) starry (~> 0.2) - stringio (~> 3.1, >= 3.1.2) uri (~> 1.0, >= 1.0.2) llhttp-ffi (0.5.1) ffi-compiler (~> 1.0) From 127de5bb3dfa6a84d4901f89be36749d016c6634 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 5 May 2026 12:24:49 +0200 Subject: [PATCH 019/132] New Crowdin Translations (automated) (#38905) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/ar.json | 3 - app/javascript/mastodon/locales/ast.json | 3 - app/javascript/mastodon/locales/az.json | 3 - app/javascript/mastodon/locales/be.json | 7 +- app/javascript/mastodon/locales/bg.json | 3 - app/javascript/mastodon/locales/br.json | 1 - app/javascript/mastodon/locales/ca.json | 3 - app/javascript/mastodon/locales/cs.json | 3 - app/javascript/mastodon/locales/cy.json | 115 ++++++++++++++++++- app/javascript/mastodon/locales/da.json | 7 +- app/javascript/mastodon/locales/de.json | 3 - app/javascript/mastodon/locales/el.json | 15 +-- app/javascript/mastodon/locales/en-GB.json | 3 - app/javascript/mastodon/locales/eo.json | 3 - app/javascript/mastodon/locales/es-AR.json | 5 +- app/javascript/mastodon/locales/es-MX.json | 7 +- app/javascript/mastodon/locales/es.json | 7 +- app/javascript/mastodon/locales/et.json | 7 +- app/javascript/mastodon/locales/eu.json | 3 - app/javascript/mastodon/locales/fa.json | 3 - app/javascript/mastodon/locales/fi.json | 7 +- app/javascript/mastodon/locales/fil.json | 2 - app/javascript/mastodon/locales/fo.json | 3 - app/javascript/mastodon/locales/fr-CA.json | 3 - app/javascript/mastodon/locales/fr.json | 3 - app/javascript/mastodon/locales/fy.json | 3 - app/javascript/mastodon/locales/ga.json | 3 - app/javascript/mastodon/locales/gd.json | 3 - app/javascript/mastodon/locales/gl.json | 3 - app/javascript/mastodon/locales/he.json | 3 - app/javascript/mastodon/locales/hi.json | 3 - app/javascript/mastodon/locales/hu.json | 3 - app/javascript/mastodon/locales/ia.json | 3 - app/javascript/mastodon/locales/id.json | 3 - app/javascript/mastodon/locales/ie.json | 3 - app/javascript/mastodon/locales/io.json | 3 - app/javascript/mastodon/locales/is.json | 3 - app/javascript/mastodon/locales/it.json | 5 +- app/javascript/mastodon/locales/ja.json | 3 - app/javascript/mastodon/locales/kab.json | 3 - app/javascript/mastodon/locales/ko.json | 3 - app/javascript/mastodon/locales/la.json | 1 - app/javascript/mastodon/locales/lad.json | 2 - app/javascript/mastodon/locales/lt.json | 3 - app/javascript/mastodon/locales/lv.json | 3 - app/javascript/mastodon/locales/ms.json | 3 - app/javascript/mastodon/locales/nan-TW.json | 3 - app/javascript/mastodon/locales/ne.json | 2 - app/javascript/mastodon/locales/nl.json | 9 +- app/javascript/mastodon/locales/nn.json | 3 - app/javascript/mastodon/locales/no.json | 3 - app/javascript/mastodon/locales/pl.json | 3 - app/javascript/mastodon/locales/pt-BR.json | 3 - app/javascript/mastodon/locales/pt-PT.json | 3 - app/javascript/mastodon/locales/ru.json | 3 - app/javascript/mastodon/locales/ry.json | 3 - app/javascript/mastodon/locales/sc.json | 3 - app/javascript/mastodon/locales/sco.json | 2 - app/javascript/mastodon/locales/si.json | 3 - app/javascript/mastodon/locales/sk.json | 3 - app/javascript/mastodon/locales/sl.json | 3 - app/javascript/mastodon/locales/sq.json | 3 - app/javascript/mastodon/locales/sr-Latn.json | 3 - app/javascript/mastodon/locales/sr.json | 3 - app/javascript/mastodon/locales/sv.json | 3 - app/javascript/mastodon/locales/th.json | 3 - app/javascript/mastodon/locales/tok.json | 3 - app/javascript/mastodon/locales/tr.json | 4 +- app/javascript/mastodon/locales/uk.json | 3 - app/javascript/mastodon/locales/vi.json | 3 - app/javascript/mastodon/locales/zh-CN.json | 7 +- app/javascript/mastodon/locales/zh-HK.json | 3 - app/javascript/mastodon/locales/zh-TW.json | 5 +- config/locales/be.yml | 1 - config/locales/cy.yml | 92 ++++++++++++++- config/locales/da.yml | 67 ++++++++++- config/locales/de.yml | 40 ++++++- config/locales/el.yml | 67 ++++++++++- config/locales/en-GB.yml | 1 - config/locales/es-AR.yml | 67 ++++++++++- config/locales/es-MX.yml | 67 ++++++++++- config/locales/es.yml | 67 ++++++++++- config/locales/et.yml | 53 ++++++++- config/locales/fi.yml | 39 ++++++- config/locales/fr-CA.yml | 1 - config/locales/fr.yml | 1 - config/locales/ga.yml | 1 - config/locales/gd.yml | 1 - config/locales/gl.yml | 1 - config/locales/he.yml | 1 - config/locales/hu.yml | 1 - config/locales/is.yml | 1 - config/locales/it.yml | 4 +- config/locales/nan-TW.yml | 1 - config/locales/nl.yml | 53 ++++++++- config/locales/nn.yml | 1 - config/locales/pt-BR.yml | 1 - config/locales/pt-PT.yml | 1 - config/locales/simple_form.da.yml | 5 + config/locales/simple_form.el.yml | 5 + config/locales/simple_form.es-AR.yml | 5 + config/locales/simple_form.es-MX.yml | 5 + config/locales/simple_form.es.yml | 5 + config/locales/simple_form.fi.yml | 1 + config/locales/simple_form.it.yml | 5 + config/locales/simple_form.nl.yml | 2 + config/locales/simple_form.ru.yml | 2 + config/locales/simple_form.sq.yml | 1 + config/locales/simple_form.zh-CN.yml | 5 + config/locales/simple_form.zh-TW.yml | 7 +- config/locales/sq.yml | 44 ++++++- config/locales/sv.yml | 1 - config/locales/tr.yml | 22 +++- config/locales/vi.yml | 1 - config/locales/zh-CN.yml | 67 ++++++++++- config/locales/zh-TW.yml | 69 ++++++++++- 116 files changed, 1010 insertions(+), 248 deletions(-) diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index fb08a71ee6ef48..7c819ac8ac6604 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -224,11 +224,8 @@ "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": "أتريد إلغاء إعادة نشر المنشور؟", diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index 444b40aabb4e7d..41ae7b44d23224 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -82,9 +82,6 @@ "attachments_list.unprocessed": "(ensin procesar)", "block_modal.show_less": "Amosar menos", "block_modal.show_more": "Amosar más", - "block_modal.they_cant_mention": "Nun van poder mencionate o siguite.", - "block_modal.they_cant_see_posts": "Nun pueden ver les tos espublizaciones y tu nun podrás ver les suyes.", - "block_modal.you_wont_see_mentions": "Nun verás espublizaciones que-yos mencionen.", "bundle_column_error.error.body": "La páxina solicitada nun se pudo renderizar. Ye posible que seya pola mor d'un fallu nel códigu o por un problema de compatibilidá del restolador.", "bundle_column_error.error.title": "¡Oh, non!", "bundle_column_error.network.body": "Hebo un error al tentar de cargar esta páxina. Esto pudo ser pola mor d'un problema temporal cola conexón a internet o con esti sirvidor.", diff --git a/app/javascript/mastodon/locales/az.json b/app/javascript/mastodon/locales/az.json index 41dc1c7d402bfd..fa80ce6becdbc7 100644 --- a/app/javascript/mastodon/locales/az.json +++ b/app/javascript/mastodon/locales/az.json @@ -165,11 +165,8 @@ "block_modal.remote_users_caveat": "{domain} serverindən qərarınıza hörmət etməsini xahiş edəcəyik. Ancaq, bəzi serverlər əngəlləmələri fərqli şəkildə idarə edə bilər deyə, qərarınıza uymağına zəmanət verilmir. Hər kəsə açıq göndərişlər, hələ də sistemə giriş etməmiş istifadəçilərə görünə bilər.", "block_modal.show_less": "Daha az göstər", "block_modal.show_more": "Daha çox göstər", - "block_modal.they_cant_mention": "O səni teq edə bilməz və ya izləyə bilməz.", - "block_modal.they_cant_see_posts": "O sənin paylaşımlarını görməyəcək, sən də onun paylaşımlarını görməyəcəksən.", "block_modal.they_will_know": "O sənin onu blokladığını görə biləcək.", "block_modal.title": "İstifadəçi bloklansın?", - "block_modal.you_wont_see_mentions": "Onu teq edən postları görməyəcəksən.", "boost_modal.combo": "Növbəti dəfə bunu atlamaq üçün {combo} klikləyə bilərsən", "boost_modal.reblog": "Paylaşım təkrar paylaşılsın?", "boost_modal.undo_reblog": "Təkrar paylaşım ləğv edilsin?", diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json index ddc53d31f0dabf..c626154900e0ea 100644 --- a/app/javascript/mastodon/locales/be.json +++ b/app/javascript/mastodon/locales/be.json @@ -328,14 +328,15 @@ "annual_report.summary.share_on_mastodon": "Падзяліцца ў 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_cant_mention": "Вы не зможаце згадваць, падпісвацца або цытаваць адно аднаго.", + "block_modal.they_cant_see_posts": "Гэты карыстальнік не зможа ўбачыць Ваш кантэнт, а Вы не зможаце ягоны.", "block_modal.they_will_know": "Карыстальнік убачыць, што адбылася блакіроўка.", "block_modal.title": "Заблакіраваць карыстальніка?", - "block_modal.you_wont_see_mentions": "Вы не ўбачыце паведамленняў са згадваннем карыстальніка.", + "block_modal.you_wont_see_mentions": "Вы не ўбачыце допісы іншых людзей, дзе гэты карыстальнік згадваецца.", "boost_modal.combo": "Націсніце {combo}, каб прапусціць наступным разам", "boost_modal.reblog": "Пашырыць допіс?", "boost_modal.undo_reblog": "Прыбраць допіс?", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index 7281a4cb34355e..0eb1be738cc345 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -113,11 +113,8 @@ "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": "Без подсилване на публикация ли?", diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json index f43050e09b4d8d..288131bc9f1360 100644 --- a/app/javascript/mastodon/locales/br.json +++ b/app/javascript/mastodon/locales/br.json @@ -107,7 +107,6 @@ "audio.hide": "Kuzhat ar c'hleved", "block_modal.show_less": "Diskouez nebeutoc'h", "block_modal.show_more": "Diskouez muioc'h", - "block_modal.they_cant_mention": "Ne c'hall na menegiñ na heuliañ ac'hanoc'h.", "block_modal.title": "Stankañ an implijer·ez?", "boost_modal.combo": "Ar wezh kentañ e c'halliot gwaskañ war {combo} evit tremen hebiou", "boost_modal.reblog": "Skignañ an embannadur?", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 9946756b6279f2..223209ddd22d84 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -169,11 +169,8 @@ "block_modal.remote_users_caveat": "Li demanarem al servidor {domain} que respecti la vostra decisió, tot i que no podem garantir-ho, ja que alguns servidors gestionen de forma diferent els blocatges. És possible que els usuaris no autenticats puguin veure les publicacions públiques.", "block_modal.show_less": "Mostra'n menys", "block_modal.show_more": "Mostra'n més", - "block_modal.they_cant_mention": "No us poden esmentar, ni seguir.", - "block_modal.they_cant_see_posts": "No poden veure les vostres publicacions, ni vosaltres les seves.", "block_modal.they_will_know": "Poden veure que els heu blocat.", "block_modal.title": "Bloquem l'usuari?", - "block_modal.you_wont_see_mentions": "No veureu publicacions que l'esmentin.", "boost_modal.combo": "Pots prémer {combo} per a evitar-ho el pròxim cop", "boost_modal.reblog": "Voleu impulsar la publicació?", "boost_modal.undo_reblog": "Voleu retirar l'impuls a la publicació?", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index 87428e5c204099..1a4d4a507f03aa 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -210,11 +210,8 @@ "block_modal.remote_users_caveat": "Požádáme server {domain}, aby respektoval vaše rozhodnutí. Úplné dodržování nastavení však není zaručeno, protože některé servery mohou řešit blokování různě. Veřejné příspěvky mohou být stále viditelné pro nepřihlášené uživatele.", "block_modal.show_less": "Zobrazit méně", "block_modal.show_more": "Zobrazit více", - "block_modal.they_cant_mention": "Nemůže vás zmiňovat ani sledovat.", - "block_modal.they_cant_see_posts": "Nemůže vidět vaše příspěvky a vy neuvidíte jeho.", "block_modal.they_will_know": "Může vidět, že je zablokovaný.", "block_modal.title": "Zablokovat uživatele?", - "block_modal.you_wont_see_mentions": "Neuvidíte příspěvky, které ho zmiňují.", "boost_modal.combo": "Příště můžete pro přeskočení stisknout {combo}", "boost_modal.reblog": "Boostnout příspěvek?", "boost_modal.undo_reblog": "Zrušit boostování příspěvku?", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index a1252a4b93c448..9e3b3901b60b87 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -43,6 +43,7 @@ "account.featured": "Nodwedd", "account.featured.accounts": "Proffilau", "account.featured.collections": "Casgliadau", + "account.featured.new_collection": "Casgliad newydd", "account.field_overflow": "Dangos cynnwys llawn", "account.filters.all": "Pob gweithgaredd", "account.filters.boosts_toggle": "Dangos hybiau", @@ -68,8 +69,19 @@ "account.go_to_profile": "Mynd i'r proffil", "account.hide_reblogs": "Cuddio hybiau gan @{name}", "account.in_memoriam": "Er Cof.", + "account.join_modal.day": "Diwrnod", + "account.join_modal.me": "Rydych wedi ymuno â {server} ar", + "account.join_modal.me_anniversary": "Ffedysawd Hapus! Rydych wedi ymuno â {server} ar", + "account.join_modal.me_today": "Dyma'ch diwrnod cyntaf ar {server}!", + "account.join_modal.other": "Ymunodd {name} â {server} ar", + "account.join_modal.other_today": "Mae'n diwrnod cyntaf {name} ar {server}!", + "account.join_modal.share.celebrate": "Rhannwch bostiad dathlu", + "account.join_modal.share.intro": "Rhannu postiad cyflwyno", + "account.join_modal.share.welcome": "Rhannwch postiad croeso", + "account.join_modal.years": "{number, plural, one {blwyddyn} other {blwyddyn}}", "account.joined_short": "Ymunodd", "account.languages": "Newid ieithoedd wedi tanysgrifio iddyn nhw", + "account.last_active": "Yn weithgar ddiwethaf", "account.link_verified_on": "Gwiriwyd perchnogaeth y ddolen yma ar {date}", "account.locked_info": "Mae'r statws preifatrwydd cyfrif hwn wedi'i osod i fod ar glo. Mae'r perchennog yn adolygu'r sawl sy'n gallu eu dilyn.", "account.media": "Cyfryngau", @@ -98,8 +110,10 @@ "account.mute_short": "Anwybyddu", "account.muted": "Wedi anwybyddu", "account.mutual": "Rydych chi'n dilyn eich gilydd", + "account.name.copy": "Copïo dolen", "account.name.help.domain": "{domain} yw'r gweinydd sy'n cynnal proffil a phostiadau'r defnyddiwr.", "account.name.help.domain_self": "{domain} yw eich gweinydd sy'n cynnal eich proffil a'ch postiadau.", + "account.name.help.footer": "Yn union fel y gallwch anfon negeseuon e-bost at bobl gan ddefnyddio gwahanol ddarparwyr e-bost, gallwch ryngweithio â phobl ar weinyddion Mastodon eraill, a chyda neb ar apiau Ffedysawd eraill.", "account.name.help.header": "Mae dolen fel cyfeiriad e-bost", "account.name.help.username": "{username} yw enw defnyddiwr y cyfrif hwn ar eu gweinydd. Efallai bod gan rywun ar weinydd arall yr un enw defnyddiwr.", "account.name.help.username_self": "{username} yw eich enw defnyddiwr ar y gweinydd hwn. Efallai bod gan rywun ar weinydd arall yr un enw defnyddiwr.", @@ -114,6 +128,7 @@ "account.note.edit_button": "Golygu", "account.note.title": "Nodyn personol (yn weladwy i chi yn unig)", "account.open_original_page": "Agor y dudalen wreiddiol", + "account.pending": "Dan ystyriaeth", "account.posts": "Postiadau", "account.remove_from_followers": "Tynnu {name} o'ch dilynwyr", "account.report": "Adrodd @{name}", @@ -132,29 +147,45 @@ "account.unmute": "Dad-dewi {name}", "account.unmute_notifications_short": "Dad-dewi hysbysiadau", "account.unmute_short": "Dad-anwybyddu", + "account_edit.advanced_settings.bot_hint": "Rhoi arwydd i eraill bod y cyfrif yn bennaf yn cyflawni gweithredoedd awtomataidd ac efallai fydd e ddim yn cael ei fonitro", + "account_edit.advanced_settings.bot_label": "Cyfrif awtomataidd", + "account_edit.advanced_settings.title": "Gosodiadau uwch", + "account_edit.bio.add_label": "Ychwanegu cyflwyniad", + "account_edit.bio.edit_label": "Golygu'r cyflwyniad", "account_edit.bio.placeholder": "Ychwanegwch gyflwyniad byr i helpu eraill i'ch adnabod chi.", "account_edit.bio.title": "Cyflwyniad", "account_edit.bio_modal.add_title": "Ychwanegu cyflwyniad", "account_edit.bio_modal.edit_title": "Golygu'r cyflwyniad", "account_edit.column_button": "Gorffen", "account_edit.column_title": "Golygu Proffil", + "account_edit.custom_fields.add_label": "Ychwanegu maes", + "account_edit.custom_fields.edit_label": "Golygu maes", "account_edit.custom_fields.placeholder": "Ychwanegwch eich rhagenwau, dolenni allanol, neu unrhyw beth arall hoffech ei rannu.", "account_edit.custom_fields.reorder_button": "Ail-drefnu meysydd", "account_edit.custom_fields.tip_content": "Gallwch chi ychwanegu hygrededd at eich cyfrif Mastodon yn hawdd trwy wirio dolenni i unrhyw wefannau rydych chi'n berchen arnyn nhw.", "account_edit.custom_fields.tip_title": "Awgrym: Ychwanegu dolenni wedi'u gwirio", "account_edit.custom_fields.title": "Meysydd cyfaddas", "account_edit.custom_fields.verified_hint": "Sut ydw i'n ychwanegu dolen wedi'i gwirio?", + "account_edit.display_name.add_label": "Ychwanegu enw dangos", + "account_edit.display_name.edit_label": "Golygu enw dangos", "account_edit.display_name.placeholder": "Eich enw dangos yw sut mae'ch enw'n ymddangos ar eich proffil ac mewn llinellau amser.", "account_edit.display_name.title": "Enw dangos", + "account_edit.featured_hashtags.edit_label": "Ychwanegu hashnodau", "account_edit.featured_hashtags.placeholder": "Helpwch eraill i adnabod, a chael mynediad cyflym at eich hoff bynciau.", "account_edit.featured_hashtags.title": "Hashnodau dan sylw", + "account_edit.field_actions.delete": "Dileu maes", + "account_edit.field_actions.edit": "Golygu maes", "account_edit.field_delete_modal.confirm": "Ydych chi'n siŵr eich bod chi eisiau dileu'r maes cyfaddas hwn? Does dim modd dadwneud y weithred hon.", "account_edit.field_delete_modal.delete_button": "Dileu", "account_edit.field_delete_modal.title": "Dileu maes cyfaddas?", "account_edit.field_edit_modal.add_title": "Ychwanegu maes cyfaddas", + "account_edit.field_edit_modal.discard_confirm": "Dileu", + "account_edit.field_edit_modal.discard_message": "Mae gennych chi newidiadau heb eu cadw. Ydych chi'n siŵr eich bod chi eisiau eu dileu?", "account_edit.field_edit_modal.edit_title": "Golygu maes cyfaddas", + "account_edit.field_edit_modal.length_warning": "Wedi mynd y tu hwnt i'r terfyn nodau sy'n cael eu hargymell. Efallai bydd defnyddwyr symudol ddim yn gweld eich maes yn llawn.", "account_edit.field_edit_modal.link_emoji_warning": "Rydym yn argymell yn erbyn defnyddio emoji personol ar y cyd ag URLau. Bydd meysydd personol sy'n cynnwys y ddau yn cael eu harddangos fel testun yn unig yn hytrach nag fel dolen, er mwyn atal dryswch ymhlith defnyddwyr.", "account_edit.field_edit_modal.name_hint": "e.e. “Gwefan bersonol”", + "account_edit.field_edit_modal.name_label": "Label", "account_edit.field_edit_modal.url_warning": "I ychwanegu dolen, cofiwch gynnwys {protocol} ar y dechrau.", "account_edit.field_edit_modal.value_hint": "E.e. “https://example.me”", "account_edit.field_edit_modal.value_label": "Gwerth", @@ -180,6 +211,8 @@ "account_edit.image_edit.alt_edit_button": "Golygu testun amgen", "account_edit.image_edit.remove_button": "Tynnu delwedd", "account_edit.image_edit.replace_button": "Amnewid delwedd", + "account_edit.item_list.delete": "Dileu {name}", + "account_edit.item_list.edit": "Golygu {name}", "account_edit.name_modal.add_title": "Ychwanegu enw dangos", "account_edit.name_modal.edit_title": "Golygu enw dangos", "account_edit.profile_tab.button_label": "Cyfaddasu", @@ -191,6 +224,10 @@ "account_edit.profile_tab.show_media.title": "Dangos y tab ‘Cyfryngau’", "account_edit.profile_tab.show_media_replies.description": "Pan fydd wedi'i alluogi, mae'r tab Cyfryngau yn dangos eich postiadau ac atebion i bostiadau pobl eraill.", "account_edit.profile_tab.show_media_replies.title": "Cynhwyswch atebion ar y tab ‘Cyfryngau’", + "account_edit.profile_tab.show_relations.description": "Yn dangos cyfrifon rydych chi'n eu dilyn a dilynwyr i ddefnyddwyr eraill yn eich proffil. Bydd pobl yn dal i allu gweld a ydych chi'n eu dilyn.", + "account_edit.profile_tab.show_relations.title": "Dangos ‘Dilynwyr’ ac ‘Yn Dilyn’", + "account_edit.profile_tab.subtitle": "Cyfaddaswch sut mae eich proffil yn cael ei ddangos.", + "account_edit.profile_tab.title": "Gosodiadau dangos proffil", "account_edit.save": "Cadw", "account_edit.upload_modal.back": "Nôl", "account_edit.upload_modal.done": "Gorffen", @@ -200,6 +237,10 @@ "account_edit.upload_modal.step_upload.dragging": "Gollwng i lwytho i fyny", "account_edit.upload_modal.step_upload.header": "Dewiswch ddelwedd", "account_edit.upload_modal.step_upload.hint": "Fformat WEBP, PNG, GIF neu JPG, hyd at {limit}MB.{br}Bydd y ddelwedd yn cael ei haddasu i {width}x{height}px.", + "account_edit.upload_modal.title_add.avatar": "Ychwanegu llun proffil", + "account_edit.upload_modal.title_add.header": "Ychwanegu llun clawr", + "account_edit.upload_modal.title_replace.avatar": "Amnewid llun proffil", + "account_edit.upload_modal.title_replace.header": "Amnewid llun clawr", "account_edit.verified_modal.details": "Ychwanegwch hygrededd at eich proffil Mastodon trwy wirio dolenni i wefannau personol. Dyma sut mae'n gweithio:", "account_edit.verified_modal.invisible_link.details": "Ychwanegwch y ddolen at eich pennyn. Y rhan bwysig yw rel=\"me\" sy'n atal dynwared ar wefannau gyda chynnwys sy'n cael ei gynhyrchu gan ddefnyddwyr. Gallwch hyd yn oed ddefnyddio tag dolen ym mhennyn y dudalen yn lle {tag}, ond rhaid bod yr HTML yn hygyrch ac heb weithredu JavaScript.", "account_edit.verified_modal.invisible_link.summary": "Sut ydw i'n gwneud y ddolen yn anweledig?", @@ -208,10 +249,14 @@ "account_edit.verified_modal.step2.header": "Ychwanegwch eich gwefan fel maes cyfaddas", "account_edit.verified_modal.title": "Sut i ychwanegu dolen wedi'i gwirio", "account_edit_tags.add_tag": "Ychwanegu #{tagName}", + "account_edit_tags.column_title": "Golygu Tagiau", "account_edit_tags.help_text": "Mae hashnodau dan sylw yn helpu defnyddwyr i ddarganfod a rhyngweithio â'ch proffil. Maen nhw'n ymddangos fel hidlwyr ar olwg Gweithgaredd eich tudalen Proffil.", + "account_edit_tags.max_tags_reached": "Rydych chi wedi cyrraedd y nifer uchaf o hashnodau dan sylw.", "account_edit_tags.search_placeholder": "Rhowch hashnod…", "account_edit_tags.suggestions": "Awgrymiadau:", "account_edit_tags.tag_status_count": "{count, plural, one {# postiad} other {# postsiad}}", + "account_list.hidden_notice": "Dim ond chi sy'n gallu gweld hyn. I ddangos y rhestr hon i eraill, ewch i {page} > {modal} > {field} .", + "account_list.total": "{total, plural, one {# cyfrif} other {# cyfrif}}", "account_note.placeholder": "Clicio i ychwanegu nodyn", "admin.dashboard.daily_retention": "Cyfradd cadw defnyddwyr fesul diwrnod ar ôl cofrestru", "admin.dashboard.monthly_retention": "Cyfradd cadw defnyddwyr fesul mis ar ôl cofrestru", @@ -286,11 +331,8 @@ "block_modal.remote_users_caveat": "Byddwn yn gofyn i'r gweinydd {domain} barchu eich penderfyniad. Fodd bynnag, nid yw cydymffurfiad wedi'i warantu gan y gall rhai gweinyddwyr drin rhwystrau mewn ffyrdd gwahanol. Mae'n bosibl y bydd postiadau cyhoeddus yn dal i fod yn weladwy i ddefnyddwyr nad ydynt wedi mewngofnodi.", "block_modal.show_less": "Dangos llai", "block_modal.show_more": "Dangos rhagor", - "block_modal.they_cant_mention": "Dydyn nhw ddim yn gallu eich crybwyll na'ch dilyn.", - "block_modal.they_cant_see_posts": "Dydyn nhw ddim yn gallu gweld eich postiadau a fyddwch chi ddim yn gweld eu rhai nhw.", "block_modal.they_will_know": "Gallan nhw weld eu bod wedi'u rhwystro.", "block_modal.title": "Blocio defnyddiwr?", - "block_modal.you_wont_see_mentions": "Fyddwch chi ddim yn gweld postiadau sy'n sôn amdanyn nhw.", "boost_modal.combo": "Mae modd pwyso {combo} er mwyn hepgor hyn tro nesa", "boost_modal.reblog": "Hybu postiad?", "boost_modal.undo_reblog": "Dad-hybu postiad?", @@ -316,6 +358,7 @@ "closed_registrations_modal.find_another_server": "Dod o hyd i weinydd arall", "closed_registrations_modal.preamble": "Mae Mastodon wedi'i ddatganoli, felly does dim gwahaniaeth ble rydych chi'n creu eich cyfrif, byddwch chi'n gallu dilyn a rhyngweithio ag unrhyw un ar y gweinydd hwn. Gallwch hyd yn oed ei gynnal un eich hun!", "closed_registrations_modal.title": "Cofrestru ar Mastodon", + "collection.share_modal.share_link_label": "Rhannu dolen", "collection.share_modal.share_via_post": "Postio ar Mastodon", "collection.share_modal.share_via_system": "Rhannwch i…", "collection.share_modal.title": "Rhannu casgliad", @@ -323,38 +366,70 @@ "collection.share_template_other": "Edrychwch ar y casgliad trawiadol hwn: {link}", "collection.share_template_own": "Edrychwch ar fy nghasgliad newydd: {link}", "collections.account_count": "{count, plural, one {# cyfrif} other {# cyfrif}}", + "collections.accounts.empty_description": "Ychwanegu hyd at {count} cyfrif", + "collections.accounts.empty_editor_title": "Does neb yn y casgliad hwn eto", "collections.accounts.empty_title": "Mae'r casgliad hwn yn wag", + "collections.block_collection_owner": "Rhwystro cyfrif", + "collections.by_account": "gan {account_handle}", "collections.collection_description": "Disgrifiad", + "collections.collection_language": "Iaith", + "collections.collection_language_none": "Dim", "collections.collection_name": "Enw", "collections.collection_topic": "Pwnc", "collections.confirm_account_removal": "Ydych chi'n siŵr eich bod chi eisiau tynnu'r cyfrif hwn o'r casgliad hwn?", "collections.content_warning": "Rhybudd cynnwys", "collections.continue": "Parhau", + "collections.copy_link": "Copïo dolen", + "collections.copy_link_confirmation": "Copïwyd dolen y casgliad i'r clipfwrdd", "collections.create.accounts_title": "Pwy fyddwch chi'n ei gynnwys yn y casgliad hwn?", "collections.create.basic_details_title": "Manylion sylfaenol", "collections.create.steps": "Cam {step}/{total}", "collections.create_collection": "Creu casgliad", "collections.delete_collection": "Dileu casgliad", "collections.description_length_hint": "Terfyn o 100 nod", + "collections.detail.author_added_you_on_date": "Ychwanegodd {author} chi ar {date}", "collections.detail.loading": "Yn llwytho casgliad…", "collections.detail.revoke_inclusion": "Tynnu fi", + "collections.detail.sensitive_content": "Cynnwys sensitif", "collections.detail.sensitive_note": "Mae'r casgliad hwn yn cynnwys cyfrifon a chynnwys a allai fod yn sensitif i rai defnyddwyr.", "collections.detail.share": "Rhannu'r casgliad hwn", + "collections.detail.you_are_in_this_collection": "Rydych chi wedi'ch cynnwys yn y casgliad hwn", "collections.edit_details": "Golygu manylion", + "collections.error_loading_collections": "Bu gwall wrth geisio llwytho'r casgliadau hyn.", + "collections.hidden_accounts_description": "Rydych chi wedi'ch rhwystro neu mudo {count, plural, one {defnyddiwr} other {defnyddiwr}}", + "collections.hidden_accounts_link": "{count, plural, one {# cyfrif cudd} other {# cyfrif cudd}}", + "collections.hints.accounts_counter": "{count} / {max} cyfrif", "collections.last_updated_at": "Diweddarwyd ddiwethaf: {date}", + "collections.list.collections_with_count": "{count, plural, one {# Casgliad} other {# Casgliad}}", + "collections.list.created_by_author": "Crëwyd gan {name}", + "collections.list.created_by_you": "Crëwyd gan gennych chi", + "collections.list.featuring_you": "Yn eich cynnwys chi", "collections.manage_accounts": "Rheoli cyfrifon", "collections.mark_as_sensitive": "Marcio fel sensitif", "collections.mark_as_sensitive_hint": "Yn cuddio disgrifiad a chyfrifon y casgliad y tu ôl i rybudd cynnwys. Bydd enw'r casgliad yn dal i fod yn weladwy.", + "collections.maximum_collection_count_description": "Mae eich gweinydd yn caniatáu creu hyd at {count} o gasgliadau.", + "collections.maximum_collection_count_reached": "Rydych chi wedi creu'r nifer mwyaf o gasgliadau", "collections.name_length_hint": "Terfyn o 40 nod", "collections.new_collection": "Casgliad newydd", + "collections.pending_accounts.message": "Gall cyfrifon ymddangos fel rhai sydd ar y gweill pan fyddwn yn aros am ymateb gan y defnyddiwr neu ei weinydd. Dim ond chi all weld cyfrifon sydd ar y gweill.", + "collections.pending_accounts.title": "Pam rydw i'n gweld cyfrifon sydd ar y gweill?", + "collections.remove_account": "Tynnu", "collections.report_collection": "Adroddwch am y casgliad hwn", "collections.revoke_collection_inclusion": "Tynnu fy hun o'r casgliad hwn", "collections.revoke_inclusion.confirmation": "Rydych chi wedi cael eich tynnu o \"{collection}\"", "collections.revoke_inclusion.error": "Bu gwall, ceisiwch eto yn nes ymlaen.", + "collections.search_accounts_label": "Chwiliwch am gyfrif i'w ychwanegu", "collections.search_accounts_max_reached": "Rydych chi wedi ychwanegu'r nifer mwyaf o gyfrifon", "collections.sensitive": "Sensitif", + "collections.share_short": "Rhannu", + "collections.suggestions.can_not_add": "Dim modd ei ychwanegu", + "collections.suggestions.can_not_add_desc": "Efallai bod y cyfrifon hyn wedi dewis peidio â chael eu darganfod, neu efallai eu bod ar weinydd nad yw'n cefnogi casgliadau.", + "collections.suggestions.must_follow": "Rhaid dilyn yn gyntaf", + "collections.suggestions.must_follow_desc": "Mae'r cyfrifon hyn yn adolygu pob cais dilyn. Gall dilynwyr eu hychwanegu at gasgliadau.", "collections.topic_hint": "Ychwanegwch hashnod sy'n helpu eraill i ddeall prif bwnc y casgliad hwn.", "collections.topic_special_chars_hint": "Bydd nodau arbennig yn cael eu tynnu wrth gadw", + "collections.unlisted_collections_description": "Nid yw'r rhain yn ymddangos ar eich proffil i eraill. Gall unrhyw un sydd â'r ddolen eu darganfod.", + "collections.unlisted_collections_with_count": "Casgliadau heb eu rhestru ({count})", "collections.view_collection": "Gweld y casgliad", "collections.visibility_public": "Cyhoeddus", "collections.visibility_public_hint": "Mae modd eu canfod mewn canlyniadau chwilio a mannau eraill lle mae argymhellion yn ymddangos.", @@ -380,8 +455,10 @@ "column.lists": "Rhestrau", "column.mutes": "Defnyddwyr wedi'u tewi", "column.notifications": "Hysbysiadau", + "column.other_collections": "Casgliadau gan {name}", "column.pins": "Postiadau wedi eu pinio", "column.public": "Ffrwd y ffederasiwn", + "column.your_collections": "Eich Casgliadau", "column_back_button.label": "Nôl", "column_header.hide_settings": "Cuddio'r dewisiadau", "column_header.moveLeft_settings": "Symud y golofn i'r chwith", @@ -446,6 +523,10 @@ "confirmations.follow_to_list.confirm": "Dilyn ac ychwanegu at y rhestr", "confirmations.follow_to_list.message": "Mae angen i chi fod yn dilyn {name} i'w ychwanegu at restr.", "confirmations.follow_to_list.title": "Dilyn defnyddiwr?", + "confirmations.hide_featured_tab.confirm": "Cuddio'r tab", + "confirmations.hide_featured_tab.intro": "Gallwch newid hyn unrhyw bryd o dan Golygu proffil > gosodiadau'r tab Proffil .", + "confirmations.hide_featured_tab.message": "Bydd hyn yn cuddio'r tab ar gyfer defnyddwyr ar {serverName} a gweinyddion eraill sy'n rhedeg y fersiwn ddiweddaraf o Mastodon. Gall dangosiadau eraill amrywio.", + "confirmations.hide_featured_tab.title": "Cuddio'r tab \"Nodwedd\"?", "confirmations.logout.confirm": "Allgofnodi", "confirmations.logout.message": "Ydych chi'n siŵr eich bod am allgofnodi?", "confirmations.logout.title": "Allgofnodi?", @@ -484,6 +565,7 @@ "content_warning.hide": "Cuddio'r postiad", "content_warning.show": "Dangos beth bynnag", "content_warning.show_more": "Dangos rhagor", + "content_warning.show_short": "Dangos", "conversation.delete": "Dileu sgwrs", "conversation.mark_as_read": "Nodi fel wedi'i ddarllen", "conversation.open": "Gweld sgwrs", @@ -524,6 +606,14 @@ "domain_pill.your_server": "Eich cartref digidol, lle mae'ch holl bostiadau'n byw. Ddim yn hoffi'r un hon? Trosglwyddwch weinyddion ar unrhyw adeg a dewch â'ch dilynwyr hefyd.", "domain_pill.your_username": "Eich dynodwr unigryw ar y gweinydd hwn. Mae'n bosibl dod o hyd i ddefnyddwyr gyda'r un enw defnyddiwr ar wahanol weinyddion.", "dropdown.empty": "Dewis dewis", + "email_subscriptions.email": "E-bost", + "email_subscriptions.form.action": "Tanysgrifio", + "email_subscriptions.form.bottom": "Derbyniwch bostiadau yn eich blwch derbyn heb greu cyfrif Mastodon. Dad-danysgrifiwch unrhyw bryd. Am ragor o wybodaeth, cyfeiriwch at y Polisi Preifatrwydd .", + "email_subscriptions.form.title": "Cofrestrwch am ddiweddariadau e-bost gan {name}", + "email_subscriptions.submitted.lead": "Gwiriwch eich blwch derbyn am e-bost i orffen cofrestru ar gyfer diweddariadau e-bost.", + "email_subscriptions.submitted.title": "Un cam arall", + "email_subscriptions.validation.email.blocked": "Darparwr e-bost wedi'i rwystro", + "email_subscriptions.validation.email.invalid": "Cyfeiriad e-bost annilys", "embed.instructions": "Gosodwch y post hwn ar eich gwefan drwy gopïo'r côd isod.", "embed.preview": "Dyma sut olwg fydd arno:", "emoji_button.activity": "Gweithgarwch", @@ -541,12 +631,21 @@ "emoji_button.search_results": "Canlyniadau chwilio", "emoji_button.symbols": "Symbolau", "emoji_button.travel": "Teithio a Llefydd", + "empty_column.account_featured.other": "Nid yw {acct} wedi cynnwys unrhyw beth eto.", + "empty_column.account_featured_self.no_collections_button": "Creu casgliad", + "empty_column.account_featured_self.no_collections_hide_tab": "Cuddio'r tab hwn yn lle hynny", + "empty_column.account_featured_self.pre_collections": "Cadwch lygad allan am Gasgliadau", + "empty_column.account_featured_self.pre_collections_desc": "Mae Casgliadau (sy'n dod yn Mastodon 4.6) yn caniatáu ichi greu eich rhestrau cyfrifon wedi'u curadu eich hun i'w hargymell i eraill.", + "empty_column.account_featured_self.showcase_accounts": "Dangoswch eich hoff gyfrifon", + "empty_column.account_featured_self.showcase_accounts_desc": "Rhestrau wedi'u curadu o gyfrifon yw Casgliadau i helpu eraill i ddarganfod mwy o'r Fediverse.", + "empty_column.account_featured_unknown.other": "Dyw'r cyfrif hwn ddim wedi cynnwys unrhyw beth eto.", "empty_column.account_hides_collections": "Mae'r defnyddiwr wedi dewis i beidio rhannu'r wybodaeth yma", "empty_column.account_suspended": "Cyfrif wedi'i atal", "empty_column.account_timeline": "Dim postiadau yma!", "empty_column.account_unavailable": "Dyw'r proffil ddim ar gael", "empty_column.blocks": "Dydych chi heb rwystro unrhyw ddefnyddwyr eto.", "empty_column.bookmarked_statuses": "Does gennych chi ddim unrhyw bostiad wedi'u cadw fel nod tudalen eto. Pan fyddwch yn gosod nod tudalen i un, mi fydd yn ymddangos yma.", + "empty_column.collections.featured_in": "Dydych chi heb gael eich ychwanegu at unrhyw gasgliadau eto.", "empty_column.community": "Mae'r ffrwd lleol yn wag. Beth am ysgrifennu rhywbeth cyhoeddus!", "empty_column.direct": "Does gennych chi unrhyw grybwylliadau preifat eto. Pan fyddwch chi'n anfon neu'n derbyn un, bydd yn ymddangos yma.", "empty_column.disabled_feed": "Mae'r ffrwd hon wedi'i hanalluogi gan weinyddwyr eich gweinydd.", @@ -580,6 +679,10 @@ "featured_carousel.header": "{count, plural, one {Postiad wedi'i binio} other {Postiadau wedi'u pinio}}", "featured_carousel.slide": "Postiad {current, number} of {max, number}", "featured_tags.more_items": "+{count}", + "featured_tags.suggestions": "Yn ddiweddar rydych chi wedi postio am {items}. Ychwanegu'r rhain fel hashnodau dan sylw?", + "featured_tags.suggestions.add": "Ychwanegu", + "featured_tags.suggestions.added": "Rheoli eich hashnodau dan sylw ar unrhyw adeg o dan Golygu Proffil > Hashnodau dan sylw .", + "featured_tags.suggestions.dismiss": "Dim diolch", "filter_modal.added.context_mismatch_explanation": "Dyw'r categori hidlo hwn ddim yn berthnasol i'r cyd-destun yr ydych wedi cyrchu'r postiad hwn ynddo. Os ydych chi am i'r postiad gael ei hidlo yn y cyd-destun hwn hefyd, bydd yn rhaid i chi olygu'r hidlydd.", "filter_modal.added.context_mismatch_title": "Diffyg cyfatebiaeth cyd-destun!", "filter_modal.added.expired_explanation": "Mae'r categori hidlydd hwn wedi dod i ben, bydd angen i chi newid y dyddiad dod i ben er mwyn iddo fod yn berthnasol.", @@ -622,7 +725,9 @@ "follow_suggestions.who_to_follow": "Pwy i ddilyn", "followed_tags": "Hashnodau rydych yn eu dilyn", "followers.hide_other_followers": "Mae'r defnyddiwr hwn wedi dewis peidio â gwneud ei ddilynwyr eraill yn weladwy", + "followers.title": "Yn dilyn {name}", "following.hide_other_following": "Mae'r defnyddiwr hwn wedi dewis peidio â gwneud gweddill y rhai maen nhw'n eu dilyn yn weladwy", + "following.title": "Wedi'i ddilyn gan {name}", "footer.about": "Ynghylch", "footer.about_mastodon": "Ynglŷn â Mastodon", "footer.about_server": "Ynglŷn â {domain}", @@ -634,6 +739,7 @@ "footer.source_code": "Gweld y cod ffynhonnell", "footer.status": "Statws", "footer.terms_of_service": "Telerau gwasanaeth", + "form_error.blank": "Gall y maes ddim fod yn wag.", "form_field.optional": "(dewisol)", "generic.saved": "Wedi'i Gadw", "getting_started.heading": "Dechrau arni", @@ -817,6 +923,7 @@ "navigation_panel.expand_followed_tags": "Agor dewislen hashnodau dilyn", "navigation_panel.expand_lists": "Ehangu dewislen y rhestr", "not_signed_in_indicator.not_signed_in": "Rhaid i chi fewngofnodi i weld yr adnodd hwn.", + "notification.added_to_collection": "Ychwanegodd {name} chi at gasgliad", "notification.admin.report": "Adroddodd {name} {target}", "notification.admin.report_account": "Adroddodd {name} {count, plural, one {un postiad} other {# postiad}} gan {target} oherwydd {category}", "notification.admin.report_account_other": "Adroddodd {name} {count, plural, one {un postiad} two {# bostiad} few {# postiad} other {# postiad}} gan {target}", @@ -826,6 +933,7 @@ "notification.admin.sign_up.name_and_others": "Cofrestrodd {name} {count, plural, one {ac # arall} other {a # arall}}", "notification.annual_report.message": "Mae eich #Wrapstodon {year} yn aros i chi! Gwelwch eich uchafbwyntiau ac amseroedd i'w cofio o'r flwyddyn hon ar Mastodon!", "notification.annual_report.view": "Gweld #Wrapstodon", + "notification.collection_update": "Golygodd {name} gasgliad rydych chi ynddo", "notification.favourite": "Ffafriodd {name} eich postiad", "notification.favourite.name_and_others_with_link": "Ffafriodd {name} a {count, plural, one {# arall} other {# arall}} eich postiad", "notification.favourite_pm": "Mae {name} wedi ffefrynnu eich cyfeiriad preifat", @@ -1089,6 +1197,7 @@ "server_banner.active_users": "defnyddwyr gweithredol", "server_banner.administered_by": "Gweinyddir gan:", "server_banner.is_one_of_many": "Mae {domain} yn un o'r nifer o weinyddion Mastodon annibynnol y gallwch eu defnyddio i gymryd rhan yn y ffedysawd.", + "server_banner.more_about_this_server": "Mwy am y gweinydd hwn", "server_banner.server_stats": "Ystadegau'r gweinydd:", "sign_in_banner.create_account": "Creu cyfrif", "sign_in_banner.follow_anyone": "Dilynwch unrhyw un ar draws y ffedysawd a gweld y cyfan mewn trefn gronolegol. Dim algorithmau, hysbysebion, na straeon er mwyn cliciadau yn y golwg.", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index f005c6095b20c9..06d4d1e2fb1a52 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -328,14 +328,15 @@ "annual_report.summary.share_on_mastodon": "Del på Mastodon", "attachments_list.unprocessed": "(ubehandlet)", "audio.hide": "Skjul lyd", + "block_modal.no_collections": "I kan ikke tilføje hinanden til samlinger. I bliver automatisk fjernet fra hinandens eksisterende samlinger, hvis det er relevant.", "block_modal.remote_users_caveat": "Serveren {domain} vil blive bedt om at respektere din beslutning. Overholdelse er dog ikke garanteret, da nogle servere kan håndtere blokke forskelligt. Offentlige indlæg kan stadig være synlige for ikke-indloggede brugere.", "block_modal.show_less": "Vis mindre", "block_modal.show_more": "Vis flere", - "block_modal.they_cant_mention": "Vedkommende kan ikke omtale eller følge dig.", - "block_modal.they_cant_see_posts": "Vedkommende kan ikke se dine indlæg, og du vil ikke se vedkommendes.", + "block_modal.they_cant_mention": "I kan ikke omtale, følge eller citere hinanden.", + "block_modal.they_cant_see_posts": "De kan ikke se dit indhold, og du kan ikke se deres.", "block_modal.they_will_know": "Vedkommende kan se den aktive blokering.", "block_modal.title": "Blokér bruger?", - "block_modal.you_wont_see_mentions": "Du vil ikke se indlæg, som omtaler vedkommende.", + "block_modal.you_wont_see_mentions": "Du vil ikke se indlæg fra andre, hvor de omtales.", "boost_modal.combo": "Du kan trykke {combo} for at springe dette over næste gang", "boost_modal.reblog": "Fremhæv indlæg?", "boost_modal.undo_reblog": "Fjern fremhævelse af indlæg?", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index f8b0256347dd01..d07108df7324b6 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -331,11 +331,8 @@ "block_modal.remote_users_caveat": "Wir werden den Server {domain} bitten, deine Entscheidung zu respektieren. Allerdings kann nicht garantiert werden, dass sie eingehalten wird, weil einige Server Blockierungen unterschiedlich handhaben können. Öffentliche Beiträge können für nicht angemeldete Nutzer*innen weiterhin sichtbar sein.", "block_modal.show_less": "Weniger anzeigen", "block_modal.show_more": "Mehr anzeigen", - "block_modal.they_cant_mention": "Das Profil wird dich nicht erwähnen oder dir folgen können.", - "block_modal.they_cant_see_posts": "Deine Beiträge können nicht mehr angesehen werden und du wirst deren Beiträge nicht mehr sehen.", "block_modal.they_will_know": "Das Profil wird erkennen können, dass du es blockiert hast.", "block_modal.title": "Profil blockieren?", - "block_modal.you_wont_see_mentions": "Du wirst keine Beiträge sehen, die dieses Profil erwähnen.", "boost_modal.combo": "Mit {combo} erscheint dieses Fenster nicht mehr", "boost_modal.reblog": "Beitrag teilen?", "boost_modal.undo_reblog": "Beitrag nicht mehr teilen?", diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 23d5ba3b7ef3c0..c0ce1821c0be7e 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -328,14 +328,15 @@ "annual_report.summary.share_on_mastodon": "Κοινοποίηση στο 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_cant_mention": "Δεν μπορείτε να επισημάνετε, να ακολουθήσετε ή να παραθέσετε ο ένας τον άλλον.", + "block_modal.they_cant_see_posts": "Δεν μπορεί να δει το περιεχόμενό σου και δε θα δεις το δικό του.", "block_modal.they_will_know": "Μπορούν να δει ότι έχει αποκλειστεί.", "block_modal.title": "Αποκλεισμός χρήστη;", - "block_modal.you_wont_see_mentions": "Δε θα βλέπεις τις αναρτήσεις που τον επισημαίνουν.", + "block_modal.you_wont_see_mentions": "Δε θα βλέπεις τις αναρτήσεις από άλλους που τον επισημαίνουν.", "boost_modal.combo": "Μπορείς να πατήσεις {combo} για να το προσπεράσεις την επόμενη φορά", "boost_modal.reblog": "Ενίσχυση ανάρτησης;", "boost_modal.undo_reblog": "Αναίρεση ενίσχυσης;", @@ -713,8 +714,8 @@ "follow_requests.unlocked_explanation": "Παρόλο που ο λογαριασμός σου δεν είναι κλειδωμένος, το προσωπικό του {domain} θεώρησε πως ίσως να θέλεις να ελέγχεις χειροκίνητα αυτά τα αιτήματα ακολούθησης.", "follow_suggestions.curated_suggestion": "Επιλογή προσωπικού", "follow_suggestions.dismiss": "Να μην εμφανιστεί ξανά", - "follow_suggestions.featured_longer": "Προσεκτικά επιλεγμένα απ' την ομάδα του {domain}", - "follow_suggestions.friends_of_friends_longer": "Δημοφιλή μεταξύ των ατόμων που ακολουθείς", + "follow_suggestions.featured_longer": "Προσεκτικά επιλεγμένο απ' την ομάδα του {domain}", + "follow_suggestions.friends_of_friends_longer": "Δημοφιλές μεταξύ των ατόμων που ακολουθείς", "follow_suggestions.hints.featured": "Αυτό το προφίλ έχει επιλεγεί προσεκτικά από την ομάδα του {domain}.", "follow_suggestions.hints.friends_of_friends": "Αυτό το προφίλ είναι δημοφιλές μεταξύ των ατόμων που ακολουθείς.", "follow_suggestions.hints.most_followed": "Αυτό το προφίλ είναι ένα από τα πιο ακολουθούμενα στο {domain}.", @@ -722,8 +723,8 @@ "follow_suggestions.hints.similar_to_recently_followed": "Αυτό το προφίλ είναι παρόμοιο με τα προφίλ που έχεις ακολουθήσει πρόσφατα.", "follow_suggestions.personalized_suggestion": "Εξατομικευμένη πρόταση", "follow_suggestions.popular_suggestion": "Δημοφιλής πρόταση", - "follow_suggestions.popular_suggestion_longer": "Δημοφιλή στο {domain}", - "follow_suggestions.similar_to_recently_followed_longer": "Παρόμοια με προφίλ που ακολούθησες πρόσφατα", + "follow_suggestions.popular_suggestion_longer": "Δημοφιλές στο {domain}", + "follow_suggestions.similar_to_recently_followed_longer": "Παρόμοιο με προφίλ που ακολούθησες πρόσφατα", "follow_suggestions.view_all": "Εμφάνιση όλων", "follow_suggestions.who_to_follow": "Ποιον να ακολουθήσεις", "followed_tags": "Ακολουθούμενες ετικέτες", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index 1a41eb4db7c406..7d6ddb61be094b 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -309,11 +309,8 @@ "block_modal.remote_users_caveat": "We will ask the server {domain} to respect your decision. However, compliance is not guaranteed since some servers may handle blocks differently. Public posts may still be visible to non-logged-in users.", "block_modal.show_less": "Show less", "block_modal.show_more": "Show more", - "block_modal.they_cant_mention": "They can't mention or follow you.", - "block_modal.they_cant_see_posts": "They can't see your posts and you won't see theirs.", "block_modal.they_will_know": "They can see that they're blocked.", "block_modal.title": "Block user?", - "block_modal.you_wont_see_mentions": "You won't see posts that mention them.", "boost_modal.combo": "You can press {combo} to skip this next time", "boost_modal.reblog": "Boost post?", "boost_modal.undo_reblog": "Unboost post?", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index ae0f37e8eb350a..f8e87d1607966d 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -125,11 +125,8 @@ "block_modal.remote_users_caveat": "Ni petos al la servilo {domain} respekti vian elekton. Tamen, plenumo ne estas garantiita ĉar iuj serviloj eble manipulas blokojn malsame. Publikaj afiŝoj eble ankoraŭ estas videbla por ne-ensalutintaj uzantoj.", "block_modal.show_less": "Montri malpli", "block_modal.show_more": "Montri pli", - "block_modal.they_cant_mention": "Ili ne povas mencii aŭ sekvi vin.", - "block_modal.they_cant_see_posts": "Ili ne povas vidi viajn afiŝojn kaj vi ne povas vidi iliajn.", "block_modal.they_will_know": "Ili povas vidi, ke ili estas blokita.", "block_modal.title": "Ĉu bloki uzanton?", - "block_modal.you_wont_see_mentions": "Vi ne vidos afiŝojn, ke mencii ilin.", "boost_modal.combo": "Vi povas premi {combo} por preterpasi sekvafoje", "boost_modal.reblog": "Ĉu diskonigi afiŝon?", "boost_modal.undo_reblog": "Ĉu ĉesi diskonigi afiŝon?", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 9c6afef6d14148..1dcf23a8922cfc 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -328,14 +328,15 @@ "annual_report.summary.share_on_mastodon": "Compartir en Mastodon", "attachments_list.unprocessed": "[sin procesar]", "audio.hide": "Ocultar audio", + "block_modal.no_collections": "Ninguno de ustedes pueden agregarse entre sí a las colecciones. Serás eliminado automáticamente de las colecciones existentes de los demás, si es aplicable.", "block_modal.remote_users_caveat": "Le pediremos al servidor {domain} que respete tu decisión. Sin embargo, el cumplimiento no está garantizado, ya que algunos servidores pueden manejar los bloqueos de forma diferente. Los mensajes públicos todavía podrían estar visibles para los usuarios no conectados.", "block_modal.show_less": "Mostrar menos", "block_modal.show_more": "Mostrar más", - "block_modal.they_cant_mention": "No pueden mencionarte ni seguirte.", + "block_modal.they_cant_mention": "No pueden mencionarse, seguirse ni citarse unos a otros.", "block_modal.they_cant_see_posts": "No pueden ver tus mensajes y vos no verás los suyos.", "block_modal.they_will_know": "Pueden ver que están bloqueados.", "block_modal.title": "¿Bloquear usuario?", - "block_modal.you_wont_see_mentions": "No verás mensajes que los mencionen.", + "block_modal.you_wont_see_mentions": "No verás mensajes de otros que los mencionen.", "boost_modal.combo": "Podés hacer clic en {combo} para saltar esto la próxima vez", "boost_modal.reblog": "¿Adherir al mensaje?", "boost_modal.undo_reblog": "¿Dejar de adherir al mensaje?", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index 0a986a50f623df..37de85f2c484cb 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -328,14 +328,15 @@ "annual_report.summary.share_on_mastodon": "Compartir en Mastodon", "attachments_list.unprocessed": "(sin procesar)", "audio.hide": "Ocultar audio", + "block_modal.no_collections": "Ninguno de los dos podrá añadirse mutuamente a las colecciones. Se les eliminará automáticamente de las colecciones existentes del otro, si procede.", "block_modal.remote_users_caveat": "Le pediremos al servidor {domain} que respete tu decisión. Sin embargo, el cumplimiento no está garantizado, ya que algunos servidores pueden manejar bloques de forma diferente. Las publicaciones públicas pueden ser todavía visibles para los usuarios no conectados.", "block_modal.show_less": "Mostrar menos", "block_modal.show_more": "Mostrar más", - "block_modal.they_cant_mention": "No pueden mencionarte ni seguirte.", - "block_modal.they_cant_see_posts": "No pueden ver tus publicaciones y tú no verás las de ellos.", + "block_modal.they_cant_mention": "No pueden mencionarse, seguirse ni citarse entre ustedes.", + "block_modal.they_cant_see_posts": "Ellos no pueden ver tu contenido y tú no verás el de ellos.", "block_modal.they_will_know": "Pueden ver que están bloqueados.", "block_modal.title": "¿Deseas bloquear al usuario?", - "block_modal.you_wont_see_mentions": "No verás publicaciones que los mencionen.", + "block_modal.you_wont_see_mentions": "No verás las publicaciones de otras personas en las que se les mencione.", "boost_modal.combo": "Puedes hacer clic en {combo} para saltar este aviso la próxima vez", "boost_modal.reblog": "¿Deseas impulsar la publicación?", "boost_modal.undo_reblog": "¿Dejar de impulsar la publicación?", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index f71bc11a209707..33d9704ffa5d44 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -328,14 +328,15 @@ "annual_report.summary.share_on_mastodon": "Compartir en Mastodon", "attachments_list.unprocessed": "(sin procesar)", "audio.hide": "Ocultar audio", + "block_modal.no_collections": "Ninguno de vosotros podrá añadirse mutuamente a colecciones. Seréis eliminados automáticamente de las colecciones mutuas de cada uno, si las hubiera.", "block_modal.remote_users_caveat": "Le pediremos al servidor {domain} que respete tu decisión. Sin embargo, el cumplimiento no está garantizado, ya que algunos servidores pueden manejar bloqueos de forma distinta. Los mensajes públicos pueden ser todavía visibles para los usuarios que no hayan iniciado sesión.", "block_modal.show_less": "Mostrar menos", "block_modal.show_more": "Mostrar más", - "block_modal.they_cant_mention": "No pueden mencionarte ni seguirte.", - "block_modal.they_cant_see_posts": "No pueden ver tus publicaciones y tú no verás las suyas.", + "block_modal.they_cant_mention": "No podréis mencionaros, seguiros o citaros mutuamente.", + "block_modal.they_cant_see_posts": "No podrá ver tu contenido y tú no podrás ver el suyo.", "block_modal.they_will_know": "Pueden ver que están bloqueados.", "block_modal.title": "¿Bloquear usuario?", - "block_modal.you_wont_see_mentions": "No verás mensajes que los mencionen.", + "block_modal.you_wont_see_mentions": "No podrás ver publicaciones de otros donde sea mencionado.", "boost_modal.combo": "Puedes hacer clic en {combo} para saltar este aviso la próxima vez", "boost_modal.reblog": "¿Impulsar la publicación?", "boost_modal.undo_reblog": "¿Dejar de impulsar la publicación?", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index ac87e2de9c9621..a24e946f03ac7d 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -328,14 +328,15 @@ "annual_report.summary.share_on_mastodon": "Jaga Mastodonis", "attachments_list.unprocessed": "(töötlemata)", "audio.hide": "Peida heliriba", + "block_modal.no_collections": "Kumbki teist ei saa teineteist kogumikesse lisada. Vajaduse korral eemaldatakse teid automaatselt teineteise olemasolevatest kogumikest.", "block_modal.remote_users_caveat": "Serverile {domain} edastatakse palve otsust järgida. Ometi pole see tagatud, kuna mõned serverid võivad blokeeringuid käsitleda omal moel. Avalikud postitused võivad tuvastamata kasutajatele endiselt näha olla.", "block_modal.show_less": "Kuva vähem", "block_modal.show_more": "Kuva rohkem", - "block_modal.they_cant_mention": "Ta ei saa sind mainida ega jälgida.", - "block_modal.they_cant_see_posts": "Ta ei näe sinu postitusi ja sa ei näe tema omi.", + "block_modal.they_cant_mention": "Te ei saa üksteist mainida, jälgida ega tsiteerida.", + "block_modal.they_cant_see_posts": "Nad ei näe sinu sisu ja sina ei näe nende oma.", "block_modal.they_will_know": "Ta näeb, et ta on blokeeritud.", "block_modal.title": "Kas blokeerid kasutaja?", - "block_modal.you_wont_see_mentions": "Sa ei näe postitusi, mis mainivad teda.", + "block_modal.you_wont_see_mentions": "Sa ei näe teiste postitusi, milles neid mainitakse.", "boost_modal.combo": "Vajutades {combo}, saad selle edaspidi vahele jätta", "boost_modal.reblog": "Jagada postitust?", "boost_modal.undo_reblog": "Tühista postituse jagamine?", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index dc58b8d677b6ab..dd7e7c35690183 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -156,11 +156,8 @@ "block_modal.remote_users_caveat": "{domain} zerbitzariari zure erabakia errespeta dezan eskatuko diogu. Halere, araua beteko den ezin da bermatu, zerbitzari batzuk modu desberdinean kudeatzen baitituzte blokeoak. Baliteke argitalpen publikoak saioa hasi ez duten erabiltzaileentzat ikusgai egotea.", "block_modal.show_less": "Erakutsi gutxiago", "block_modal.show_more": "Erakutsi gehiago", - "block_modal.they_cant_mention": "Ezin zaitu aipatu ezta jarraitu ere.", - "block_modal.they_cant_see_posts": "Ezin ditu zure bidalketak ikusi eta zuk ez dituzu bereak ikusiko.", "block_modal.they_will_know": "Ezin du ikusi blokeatuta duzunik.", "block_modal.title": "Erabiltzailea blokeatu nahi duzu?", - "block_modal.you_wont_see_mentions": "Ez duzu ikusiko bera aipatzen duen argitalpenik.", "boost_modal.combo": "{combo} sakatu dezakezu hurrengoan hau saltatzeko", "boost_modal.reblog": "Bultzatu bidalketa?", "boost_modal.undo_reblog": "Bidalketari bultzada kendu?", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index 4871297b04d0ea..b40f9822a71839 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -331,11 +331,8 @@ "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": "ناتقویت فرسته؟", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 41c15d66cd8538..9e0ae04782f543 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -328,14 +328,15 @@ "annual_report.summary.share_on_mastodon": "Jaa Mastodonissa", "attachments_list.unprocessed": "(käsittelemätön)", "audio.hide": "Piilota ääni", + "block_modal.no_collections": "Kumpikaan teistä ei voi lisätä toista kokoelmiin. Sinut poistetaan automaattisesti kummankin mahdollisista olemassa olevista kokoelmista.", "block_modal.remote_users_caveat": "Pyydämme palvelinta {domain} kunnioittamaan päätöstäsi. Myötämielisyyttä ei kuitenkaan taata, koska jotkin palvelimet voivat käsitellä estoja eri tavalla. Julkiset julkaisut voivat silti näkyä kirjautumattomille käyttäjille.", "block_modal.show_less": "Näytä vähemmän", "block_modal.show_more": "Näytä enemmän", - "block_modal.they_cant_mention": "Hän ei voi enää mainita eikä seurata sinua.", - "block_modal.they_cant_see_posts": "Hän ei voi enää nähdä julkaisujasi, etkä sinä voi nähdä hänen.", + "block_modal.they_cant_mention": "Ette voi mainita, seurata ettekä lainata toisianne.", + "block_modal.they_cant_see_posts": "Hän ei voi nähdä sisältöäsi, etkä sinä näe enää hänen.", "block_modal.they_will_know": "Hän voi nähdä, että hänet on estetty.", "block_modal.title": "Estetäänkö käyttäjä?", - "block_modal.you_wont_see_mentions": "Et näe enää julkaisuja, joissa hänet mainitaan.", + "block_modal.you_wont_see_mentions": "Et näe enää muiden käyttäjien julkaisuja, joissa hänet mainitaan.", "boost_modal.combo": "Ensi kerralla voit ohittaa tämän painamalla {combo}", "boost_modal.reblog": "Tehostetaanko julkaisua?", "boost_modal.undo_reblog": "Perutaanko julkaisun tehostus?", diff --git a/app/javascript/mastodon/locales/fil.json b/app/javascript/mastodon/locales/fil.json index 6899544b2f1485..2b5a480f7e84ba 100644 --- a/app/javascript/mastodon/locales/fil.json +++ b/app/javascript/mastodon/locales/fil.json @@ -88,10 +88,8 @@ "audio.hide": "Itago ang tunog", "block_modal.show_less": "Magpakita ng mas kaunti", "block_modal.show_more": "Magpakita ng higit pa", - "block_modal.they_cant_mention": "Hindi sila makakabanggit sa iyo o sundan ka.", "block_modal.they_will_know": "Makita nila na hinarangan sila.", "block_modal.title": "Harangan ang tagagamit?", - "block_modal.you_wont_see_mentions": "Hindi ka makakakita ng mga post na nagbanggit sa kanila.", "boost_modal.combo": "Maari mong pindutin ang {combo} upang laktawan ito sa susunod na oras", "bundle_column_error.error.title": "Naku!", "bundle_column_error.network.body": "Nagkaroon ng kamalian habang sinusubukang i-karga ang pahinang ito. Maaaring dahil ito sa pansamantalang problema ng iyong koneksyon sa internet o ang server na ito.", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index 54353cb277f7fd..8680c3b72ed7b5 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -235,11 +235,8 @@ "block_modal.remote_users_caveat": "Vit biðja ambætaran {domain} virða tína avgerð. Kortini er eingin vissa um samsvar, av tí at fleiri ambætarar handfara blokkar ymiskt. Almennir postar kunnu framvegis vera sjónligir fyri brúkarar, sum ikki eru innritaðir.", "block_modal.show_less": "Vís minni", "block_modal.show_more": "Vís meiri", - "block_modal.they_cant_mention": "Tey kunnu hvørki nevna teg ella fylgja tær.", - "block_modal.they_cant_see_posts": "Tey síggja ikki tínar postar og tú sært ikki teirra.", "block_modal.they_will_know": "Tey síggja, at tey eru bannað.", "block_modal.title": "Banna brúkara?", - "block_modal.you_wont_see_mentions": "Tú sært ikki postar, sum nevna tey.", "boost_modal.combo": "Tú kanst trýsta á {combo} fyri at loypa uppum hetta næstu ferð", "boost_modal.reblog": "Stimbra post?", "boost_modal.undo_reblog": "Strika stimbran av posti?", diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json index c92fff2821d4bf..a6ba4c814fe31c 100644 --- a/app/javascript/mastodon/locales/fr-CA.json +++ b/app/javascript/mastodon/locales/fr-CA.json @@ -331,11 +331,8 @@ "block_modal.remote_users_caveat": "Nous allons demander au serveur {domain} de respecter votre décision. Cependant, ce respect n'est pas garanti, car certains serveurs peuvent gérer différemment les blocages. Les messages publics peuvent rester visibles par les utilisateur·rice·s non connecté·e·s.", "block_modal.show_less": "Afficher moins", "block_modal.show_more": "Afficher plus", - "block_modal.they_cant_mention": "Iel ne pourra plus vous mentionner ou vous suivre.", - "block_modal.they_cant_see_posts": "Iel ne pourra plus voir vos messages et vous ne verrez plus les siens.", "block_modal.they_will_know": "Iel pourra voir qu'iel est bloqué·e.", "block_modal.title": "Bloquer l'utilisateur·ice ?", - "block_modal.you_wont_see_mentions": "Vous ne verrez plus les messages qui le ou la mentionnent.", "boost_modal.combo": "Vous pouvez appuyer sur {combo} pour sauter ceci la prochaine fois", "boost_modal.reblog": "Partager le message ?", "boost_modal.undo_reblog": "Annuler le partage du message ?", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index ee74c5a452b175..d12b189f12714f 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -331,11 +331,8 @@ "block_modal.remote_users_caveat": "Nous allons demander au serveur {domain} de respecter votre décision. Cependant, ce respect n'est pas garanti, car certains serveurs peuvent gérer différemment les blocages. Les messages publics peuvent rester visibles par les utilisateur·rice·s non connecté·e·s.", "block_modal.show_less": "Afficher moins", "block_modal.show_more": "Afficher plus", - "block_modal.they_cant_mention": "Iel ne pourra plus vous mentionner ou vous suivre.", - "block_modal.they_cant_see_posts": "Iel ne pourra plus voir vos messages et vous ne verrez plus les siens.", "block_modal.they_will_know": "Iel pourra voir qu'iel est bloqué·e.", "block_modal.title": "Bloquer l'utilisateur·ice ?", - "block_modal.you_wont_see_mentions": "Vous ne verrez plus les messages qui le ou la mentionnent.", "boost_modal.combo": "Vous pouvez appuyer sur {combo} pour passer ceci la prochaine fois", "boost_modal.reblog": "Partager le message ?", "boost_modal.undo_reblog": "Annuler le partage du message ?", diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json index 81e0b4edd3a9a4..26b43ac6236bbe 100644 --- a/app/javascript/mastodon/locales/fy.json +++ b/app/javascript/mastodon/locales/fy.json @@ -109,11 +109,8 @@ "block_modal.remote_users_caveat": "Wy freegje de server {domain} om jo beslút te respektearjen. It neilibben hjirfan is echter net garandearre, omdat guon servers blokkaden oars ynterpretearje kinne. Iepenbiere berjochten binne mooglik noch hieltyd sichtber foar net-oanmelde brûkers.", "block_modal.show_less": "Minder toane", "block_modal.show_more": "Mear toane", - "block_modal.they_cant_mention": "Sy kinne jo net fermelde of folgje.", - "block_modal.they_cant_see_posts": "De persoan kin jo berjochten net sjen en jo ek net harren berjochten.", "block_modal.they_will_know": "De persoan kin sjen dat dy blokkearre wurdt.", "block_modal.title": "Brûker blokkearje?", - "block_modal.you_wont_see_mentions": "Jo sjogge gjin berjochten mear dy’t dizze account fermelde.", "boost_modal.combo": "Jo kinne op {combo} drukke om dit de folgjende kear oer te slaan", "boost_modal.reblog": "Berjocht booste?", "boost_modal.undo_reblog": "Berjocht net langer booste?", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index f788d0774653b8..96da1b8d85613b 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -331,11 +331,8 @@ "block_modal.remote_users_caveat": "Iarrfaimid ar an bhfreastalaí {domain} meas a bheith agat ar do chinneadh. Mar sin féin, ní ráthaítear comhlíonadh toisc go bhféadfadh roinnt freastalaithe bloic a láimhseáil ar bhealach difriúil. Seans go mbeidh postálacha poiblí fós le feiceáil ag úsáideoirí nach bhfuil logáilte isteach.", "block_modal.show_less": "Taispeáin níos lú", "block_modal.show_more": "Taispeáin níos mó", - "block_modal.they_cant_mention": "Ní féidir leo tú a lua ná a leanúint.", - "block_modal.they_cant_see_posts": "Ní féidir leo do chuid postálacha a fheiceáil agus ní fheicfidh tú a gcuid postanna.", "block_modal.they_will_know": "Is féidir leo a fheiceáil go bhfuil bac orthu.", "block_modal.title": "Úsáideoir a bhlocáil?", - "block_modal.you_wont_see_mentions": "Ní fheicfidh tú postálacha a luann iad.", "boost_modal.combo": "Is féidir leat {combo} a bhrú chun é seo a scipeáil an chéad uair eile", "boost_modal.reblog": "An post a threisiú?", "boost_modal.undo_reblog": "An deireadh a chur le postáil?", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index 3f1883f52eb810..a75885358c780f 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -331,11 +331,8 @@ "block_modal.remote_users_caveat": "Iarraidh sinn air an fhrithealaiche {domain} gun gèill iad ri do cho-dhùnadh. Gidheadh, chan eil barantas gun gèill iad on a làimhsicheas cuid a fhrithealaichean bacaidhean air dòigh eadar-dhealaichte. Dh’fhaoidte gum faic daoine gun chlàradh a-steach na postaichean poblach agad fhathast.", "block_modal.show_less": "Seall nas lugha dheth", "block_modal.show_more": "Seall barrachd dheth", - "block_modal.they_cant_mention": "Chan urrainn dhaibh iomradh a thoirt ort no do leantainn.", - "block_modal.they_cant_see_posts": "Chan fhaic iad na postaichean agad ’s chan fhaic thu na postaichean aca-san.", "block_modal.they_will_know": "Chì iad gun deach am bacadh.", "block_modal.title": "A bheil thu airson an cleachdaiche a bhacadh?", - "block_modal.you_wont_see_mentions": "Chan fhaic thu na postaichean a bheir iomradh orra.", "boost_modal.combo": "Brùth air {combo} nam b’ fheàrr leat leum a ghearradh thar seo an ath-thuras", "boost_modal.reblog": "A bheil thu airson am post a bhrosnachadh?", "boost_modal.undo_reblog": "A bheil thu airson sgur de bhrosnachadh a’ phuist?", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 04c93bebf17be5..1e9f5305b817e2 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -331,11 +331,8 @@ "block_modal.remote_users_caveat": "Ímoslle pedir ao servidor {domain} que respecte a túa decisión. Emporiso, non hai garantía de que atenda a petición xa que os servidores xestionan os bloqueos de formas diferentes. As publicacións públicas poderían aínda ser visibles para usuarias que non iniciaron sesión.", "block_modal.show_less": "Mostrar menos", "block_modal.show_more": "Mostrar máis", - "block_modal.they_cant_mention": "Non te pode seguir nin mencionar.", - "block_modal.they_cant_see_posts": "Non pode ver as túas publicacións nin ti as de ela.", "block_modal.they_will_know": "Pode ver que a bloqueaches.", "block_modal.title": "Bloquear usuaria?", - "block_modal.you_wont_see_mentions": "Non verás publicacións que a mencionen.", "boost_modal.combo": "Preme {combo} para ignorar isto na seguinte vez", "boost_modal.reblog": "Promover publicación?", "boost_modal.undo_reblog": "Retirar promoción?", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 0c534fe1dbff79..8deaff385edfe4 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -331,11 +331,8 @@ "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": "להסיר הדהוד?", diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json index b5c49b217ec348..27d86e4190eac6 100644 --- a/app/javascript/mastodon/locales/hi.json +++ b/app/javascript/mastodon/locales/hi.json @@ -94,11 +94,8 @@ "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} दबा सकते है", "bundle_column_error.copy_stacktrace": "कॉपी एरर रिपोर्ट", "bundle_column_error.error.body": "अनुरोधित पेज प्रस्तुत नहीं किया जा सका। यह हमारे कोड में बग या ब्राउज़र संगतता समस्या के कारण हो सकता है।", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index bca3270e810367..9990ad59045fc5 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -330,11 +330,8 @@ "block_modal.remote_users_caveat": "Arra kérjük a {domain} kiszolgálót, hogy tartsa tiszteletben a döntésedet. Ugyanakkor az együttműködés nem garantált, mivel néhány kiszolgáló másképp kezelheti a letiltásokat. A nyilvános bejegyzések a be nem jelentkezett felhasználók számára továbbra is látszódhatnak.", "block_modal.show_less": "Kevesebb mutatása", "block_modal.show_more": "Több mutatása", - "block_modal.they_cant_mention": "Nem említhet meg és nem követhet téged.", - "block_modal.they_cant_see_posts": "Nem láthatja a bejegyzéseidet, és te sem fogod látni az övéit.", "block_modal.they_will_know": "Láthatja, hogy le van tiltva.", "block_modal.title": "Letiltsuk a felhasználót?", - "block_modal.you_wont_see_mentions": "Nem látsz majd őt említő bejegyzéseket.", "boost_modal.combo": "Hogy átugord ezt következő alkalommal, használd {combo}", "boost_modal.reblog": "Bejegyzés megtolása?", "boost_modal.undo_reblog": "Megtolás visszavonása?", diff --git a/app/javascript/mastodon/locales/ia.json b/app/javascript/mastodon/locales/ia.json index f4c473a6880d17..a880a37074d701 100644 --- a/app/javascript/mastodon/locales/ia.json +++ b/app/javascript/mastodon/locales/ia.json @@ -115,11 +115,8 @@ "block_modal.remote_users_caveat": "Nos demandera al servitor {domain} de respectar tu decision. Nonobstante, le conformitate non es garantite perque alcun servitores pote tractar le blocadas de maniera differente. Le messages public pote esser totevia visibile pro le usatores non authenticate.", "block_modal.show_less": "Monstrar minus", "block_modal.show_more": "Monstrar plus", - "block_modal.they_cant_mention": "Le persona non pote mentionar te o sequer te.", - "block_modal.they_cant_see_posts": "Iste persona non potera vider tu messages e tu non videra le sues.", "block_modal.they_will_know": "Le persona pote saper de esser blocate.", "block_modal.title": "Blocar usator?", - "block_modal.you_wont_see_mentions": "Tu non videra le messages que mentiona iste persona.", "boost_modal.combo": "Tu pote premer {combo} pro saltar isto le proxime vice", "boost_modal.reblog": "Impulsar le message?", "boost_modal.undo_reblog": "Cessar de impulsar le message?", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index 833ce291928b8a..f9d840020c27e3 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -92,11 +92,8 @@ "block_modal.remote_users_caveat": "Kami akan meminta {domain} server untuk menghargai keputusan Anda. Namun, kepatuhan tak dapat dipastikan karena beberapa server dapat menangani blokir secara beragam. Postingan publik masih dapat terlihat oleh pengguna tanpa masuk.", "block_modal.show_less": "Tampilkan lebih sedikit", "block_modal.show_more": "Tampilkan lebih banyak", - "block_modal.they_cant_mention": "Mereka tidak dapat menyebut atau mengikuti Anda.", - "block_modal.they_cant_see_posts": "Mereka tidak dapat melihat postingan Anda dan Anda tidak dapat melihat postingan mereka.", "block_modal.they_will_know": "Mereka dapat melihat bahwa mereka diblokir.", "block_modal.title": "Blokir pengguna?", - "block_modal.you_wont_see_mentions": "Anda tidak akan melihat kiriman yang menyebutkan mereka.", "boost_modal.combo": "Anda dapat menekan {combo} untuk melewati ini", "boost_modal.reblog": "Pacu kiriman?", "boost_modal.undo_reblog": "Jangan pacu kiriman?", diff --git a/app/javascript/mastodon/locales/ie.json b/app/javascript/mastodon/locales/ie.json index 45b4a8f8d151e3..2b636760ffc4fa 100644 --- a/app/javascript/mastodon/locales/ie.json +++ b/app/javascript/mastodon/locales/ie.json @@ -80,11 +80,8 @@ "block_modal.remote_users_caveat": "Noi va petir que li servitor {domain} mey respecter tui decision. Támen, obedientie ne es garantit pro que chascun servitor gere bloccas diferentmen. Possibilmen public postas va restar visibil a usatores de inloggat.", "block_modal.show_less": "Monstrar minu", "block_modal.show_more": "Monstrar plu", - "block_modal.they_cant_mention": "Ne posse mentionar ni sequer te.", - "block_modal.they_cant_see_posts": "Ne posse vider tui postas e inversi.", "block_modal.they_will_know": "Va esser conscient que tu ha bloccat.", "block_modal.title": "Bloccar usator?", - "block_modal.you_wont_see_mentions": "Tu ne va vider postas mentionant li usator.", "boost_modal.combo": "Li proxim vez tu posse pressar {combo} por passar to-ci", "bundle_column_error.copy_stacktrace": "Copiar erra-raporte", "bundle_column_error.error.body": "Li demandat págine ne posset esser rendit. Fórsan it es un problema in nor code, o un problema de compatibilitá con li navigator.", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index 512717621fb83f..70a074ea14f09a 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -174,11 +174,8 @@ "block_modal.remote_users_caveat": "Ni questionos {domain} di la servilo por respektar vua decido. Publika posti forsan ankore estas videbla a neenirinta uzanti.", "block_modal.show_less": "Montrar mine", "block_modal.show_more": "Montrar plu", - "block_modal.they_cant_mention": "Oli ne povas mencionar o sequar vu.", - "block_modal.they_cant_see_posts": "Oli ne povas vidar vua mesaji e vu ne vidos vidar olia.", "block_modal.they_will_know": "Oli povas vidar ke oli esas blokusita.", "block_modal.title": "Blokusar uzanto?", - "block_modal.you_wont_see_mentions": "Vu ne vidos mesaji qua mencionas oli.", "boost_modal.combo": "Vu povas pulsar {combo} por omisar co venontafoye", "boost_modal.reblog": "Ka repetar posto?", "boost_modal.undo_reblog": "Ka desrepetar posto?", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index cb87555cc30dec..8df530d248e718 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -331,11 +331,8 @@ "block_modal.remote_users_caveat": "Við munum biðja {domain} netþjóninn um að virða ákvörðun þína. Hitt er svo annað mál hvort hann fari eftir þessu, ekki er hægt að tryggja eftirfylgni því sumir netþjónar meðhöndla útilokanir á sinn hátt. Opinberar færslur gætu verið sýnilegar notendum sem ekki eru skráðir inn.", "block_modal.show_less": "Sýna minna", "block_modal.show_more": "Sýna meira", - "block_modal.they_cant_mention": "Viðkomandi geta ekki minnst á þig eða fylgst með þér.", - "block_modal.they_cant_see_posts": "Viðkomandi geta ekki séð færslurnar þínar og þú ekki þeirra.", "block_modal.they_will_know": "Viðkomandi geta séð að þeir eru útilokaðir.", "block_modal.title": "Útiloka notanda?", - "block_modal.you_wont_see_mentions": "Þú munt ekki sjá færslur sem minnast á viðkomandi aðila.", "boost_modal.combo": "Þú getur ýtt á {combo} til að sleppa þessu næst", "boost_modal.reblog": "Endurbirta færslu?", "boost_modal.undo_reblog": "Taka færslu úr endurbirtingu?", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 3f9d5ad68881e4..f933efc2694644 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -331,11 +331,10 @@ "block_modal.remote_users_caveat": "Chiederemo al server {domain} di rispettare la tua decisione. Tuttavia, la conformità non è garantita poiché alcuni server potrebbero gestire i blocchi in modo diverso. I post pubblici potrebbero essere ancora visibili agli utenti che non hanno effettuato l'accesso.", "block_modal.show_less": "Mostra meno", "block_modal.show_more": "Mostra di più", - "block_modal.they_cant_mention": "Non possono menzionarti o seguirti.", - "block_modal.they_cant_see_posts": "Non possono vedere i tuoi post e tu non vedrai i loro.", + "block_modal.they_cant_mention": "Non potete menzionarvi, seguirvi o citarvi a vicenda.", + "block_modal.they_cant_see_posts": "Non possono vedere i tuoi contenuti e tu non vedrai i loro.", "block_modal.they_will_know": "Possono vedere che sono bloccati.", "block_modal.title": "Bloccare l'utente?", - "block_modal.you_wont_see_mentions": "Non vedrai i post che li menzionano.", "boost_modal.combo": "Puoi premere {combo} per saltare questo passaggio, la prossima volta", "boost_modal.reblog": "Condividere il post?", "boost_modal.undo_reblog": "Annullare la condivisione del post?", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 2459d80f24dc7d..3da2e851d43dcc 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -156,11 +156,8 @@ "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": "ブーストを解除しますか?", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index d777d269824e1c..56ca50eea65e32 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -214,10 +214,7 @@ "audio.hide": "Ffer amesli", "block_modal.show_less": "Ssken-d drus", "block_modal.show_more": "Ssken-d ugar", - "block_modal.they_cant_mention": "Ur zmiren ad k·m-id-bedren, ur zmiren ad k·m-ḍefren.", - "block_modal.they_cant_see_posts": "Ur yezmir ad wali tisuffaɣ-ik·im, ur tettwaliḍ tidak-is.", "block_modal.title": "Sewḥel aseqdac ?", - "block_modal.you_wont_see_mentions": "Ur tezmireḍ ara ad twaliḍ tisuffaɣ anda d-yettwabdar.", "boost_modal.combo": "Tzemreḍ ad tsiteḍ ɣef {combo} akken ad tzegleḍ aya tikelt i d-iteddun", "boost_modal.reblog": "Zuzer tasuffeɣt?", "bundle_column_error.copy_stacktrace": "Nɣel tuccḍa n uneqqis", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 45045e2b06710a..0dc559865cd836 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -188,11 +188,8 @@ "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": "게시물을 부스트 취소할까요?", diff --git a/app/javascript/mastodon/locales/la.json b/app/javascript/mastodon/locales/la.json index d6c88a68d16f56..af2c10551a6671 100644 --- a/app/javascript/mastodon/locales/la.json +++ b/app/javascript/mastodon/locales/la.json @@ -54,7 +54,6 @@ "alert.unexpected.message": "Error inopinatus occurrit.", "announcement.announcement": "Proclamatio", "attachments_list.unprocessed": "(immūtātus)", - "block_modal.you_wont_see_mentions": "Nuntios quibus eos commemorant non videbis.", "boost_modal.combo": "Potes premēre {combo} ut hoc iterum transilīre", "bundle_column_error.error.title": "Eheu!", "bundle_column_error.retry": "Retemptare", diff --git a/app/javascript/mastodon/locales/lad.json b/app/javascript/mastodon/locales/lad.json index 313e2f62d4a9e1..f4f6a6aa1ecf72 100644 --- a/app/javascript/mastodon/locales/lad.json +++ b/app/javascript/mastodon/locales/lad.json @@ -108,10 +108,8 @@ "audio.hide": "Eskonde audio", "block_modal.show_less": "Amostra manko", "block_modal.show_more": "Amostra mas", - "block_modal.they_cant_mention": "No te puede enmentar ni segir.", "block_modal.they_will_know": "Puede ver ke esta blokado.", "block_modal.title": "Bloka utilizador?", - "block_modal.you_wont_see_mentions": "No veras publikasyones ke lo enmentan.", "boost_modal.combo": "Puedes klikar {combo} para ometer esto la proksima vez", "boost_modal.reblog": "Repartajar puvlikasyon?", "boost_modal.undo_reblog": "Departajar puvlikasyon?", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index 6cd6c55f1d0373..e9f49ef603a432 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -151,11 +151,8 @@ "block_modal.remote_users_caveat": "Paprašysime serverio {domain} gerbti tavo sprendimą. Tačiau atitiktis negarantuojama, nes kai kurie serveriai gali skirtingai tvarkyti blokavimus. Vieši įrašai vis tiek gali būti matomi neprisijungusiems naudotojams.", "block_modal.show_less": "Rodyti mažiau", "block_modal.show_more": "Rodyti daugiau", - "block_modal.they_cant_mention": "Jie negali tau parašyti ar sekti.", - "block_modal.they_cant_see_posts": "Jie negali matyti tavo įrašus, o tu nematysi jų.", "block_modal.they_will_know": "Jie gali matyti, kad yra užblokuoti.", "block_modal.title": "Blokuoti naudotoją?", - "block_modal.you_wont_see_mentions": "Nematysi įrašus, kuriuose jie paminimi.", "boost_modal.combo": "Galima paspausti {combo}, kad praleisti tai kitą kartą", "boost_modal.reblog": "Pasidalinti įrašą?", "boost_modal.undo_reblog": "Nebepasidalinti įrašo?", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index da87d2d9f5fcc7..094d293d99092c 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -179,11 +179,8 @@ "block_modal.remote_users_caveat": "Mēs lūgsim serverim {domain} ņemt vērā Tavu lēmumu. Tomēr sadarbība nav garantēta, jo atsevišķi serveri bloķēšanu var apstrādāt citādi. Publiski ieraksti, iespējams, joprojām būs redzami lietotājiem, kuri nav pieteikušies.", "block_modal.show_less": "Rādīt mazāk", "block_modal.show_more": "Rādīt vairāk", - "block_modal.they_cant_mention": "Lietotājs nevarēs Tevi pieminēt vai Tev sekot.", - "block_modal.they_cant_see_posts": "Lietotājs nevarēs redzēt Tavus, un Tu neredzēsi lietotāja ierakstus.", "block_modal.they_will_know": "Lietotājs varēs redzēt, ka ir bloķēts.", "block_modal.title": "Bloķēt lietotāju?", - "block_modal.you_wont_see_mentions": "Tu neredzēsi ierakstus, kuros ir minēts šis lietotājs.", "boost_modal.combo": "Nospied {combo}, lai nākamreiz šo izlaistu", "boost_modal.reblog": "Pastiprināt ierakstu?", "boost_modal.undo_reblog": "Atcelt ieraksta pastiprināšanu?", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index d984de72cc7c3c..cd34511c1a8775 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -102,11 +102,8 @@ "block_modal.remote_users_caveat": "Kami akan meminta pelayan {domain} untuk menghormati keputusan anda. Bagaimanapun, pematuhan tidak dijamin kerana ada pelayan yang mungkin menangani sekatan dengan cara berbeza. Hantaran awam mungkin masih tampak kepada pengguna yang tidak log masuk.", "block_modal.show_less": "Tunjuk kurang", "block_modal.show_more": "Tunjuk lebih", - "block_modal.they_cant_mention": "Dia tidak boleh menyebut tentang anda atau mengikut anda.", - "block_modal.they_cant_see_posts": "Dia tidak boleh melihat hantaran anda dan sebaliknya.", "block_modal.they_will_know": "Dia boleh lihat bahawa dia disekat.", "block_modal.title": "Sekat pengguna?", - "block_modal.you_wont_see_mentions": "Anda tidak akan melihat hantaran yang menyebut tentangnya.", "boost_modal.combo": "Anda boleh tekan {combo} untuk melangkauinya pada waktu lain", "boost_modal.reblog": "Galakkan hantaran?", "boost_modal.undo_reblog": "Nyahgalakkan hantaran?", diff --git a/app/javascript/mastodon/locales/nan-TW.json b/app/javascript/mastodon/locales/nan-TW.json index fe74b24abde05b..fc3de78cc4132c 100644 --- a/app/javascript/mastodon/locales/nan-TW.json +++ b/app/javascript/mastodon/locales/nan-TW.json @@ -331,11 +331,8 @@ "block_modal.remote_users_caveat": "Guán ē要求服侍器 {domain} 尊重lí ê決定。但是bô法度保證ta̍k ê服侍器lóng遵守,因為tsi̍t-kuá服侍器huân-sè用別款方法處理封鎖。公開ê PO文可能iáu是ē hōo bô登入ê用者看著。", "block_modal.show_less": "看khah少", "block_modal.show_more": "顯示其他ê內容", - "block_modal.they_cant_mention": "In buē-tàng 提起á是跟tuè lí。", - "block_modal.they_cant_see_posts": "Lín buē-tàng互相看著對方ê PO文。", "block_modal.they_will_know": "In通看見in hőng封鎖。", "block_modal.title": "Kám beh封鎖用者?", - "block_modal.you_wont_see_mentions": "Lí buē看見提起in ê PO文。", "boost_modal.combo": "後擺lí thang tshi̍h {combo} 跳過", "boost_modal.reblog": "Kám beh轉PO?", "boost_modal.undo_reblog": "Kám beh取消轉PO?", diff --git a/app/javascript/mastodon/locales/ne.json b/app/javascript/mastodon/locales/ne.json index 9ab7a536583353..7d4788dbcf1c2b 100644 --- a/app/javascript/mastodon/locales/ne.json +++ b/app/javascript/mastodon/locales/ne.json @@ -75,10 +75,8 @@ "block_modal.remote_users_caveat": "हामी सर्भर {domain} लाई तपाईंको निर्णयको सम्मान गर्न सोध्नेछौं। तर, हामी अनुपालनको ग्यारेन्टी दिन सक्दैनौं किनभने केही सर्भरहरूले ब्लकहरू फरक रूपमा ह्यान्डल गर्न सक्छन्। सार्वजनिक पोस्टहरू लग इन नभएका प्रयोगकर्ताहरूले देख्न सक्छन्।", "block_modal.show_less": "कम देखाउनुहोस्", "block_modal.show_more": "थप देखाउनुहोस्", - "block_modal.they_cant_mention": "तिनीहरूले तपाईंलाई उल्लेख गर्न वा फलो गर्न सक्दैनन्।", "block_modal.they_will_know": "उनीहरूले उनीहरू ब्लक गरिएको देख्न सक्छन्।", "block_modal.title": "प्रयोगकर्तालाई ब्लक गर्ने?", - "block_modal.you_wont_see_mentions": "तपाईंले तिनीहरूलाई उल्लेख गरिएका पोस्टहरू देख्नुहुने छैन।", "boost_modal.reblog": "पोस्ट बुस्ट गर्ने?", "boost_modal.undo_reblog": "पोस्ट अनबुस्ट गर्ने?", "bundle_column_error.copy_stacktrace": "त्रुटि रिपोर्ट प्रतिलिपि गर्नुहोस्", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 819433d12f8b1e..5d363fc1970a4f 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -223,6 +223,8 @@ "account_edit.profile_tab.show_media.title": "Tabblad 'Media' tonen", "account_edit.profile_tab.show_media_replies.description": "Wanneer dit is ingeschakeld, worden op het tabblad Media zowel jouw berichten en reacties op berichten van anderen weergegeven.", "account_edit.profile_tab.show_media_replies.title": "Jouw reacties aan het tabblad 'Media' toevoegen", + "account_edit.profile_tab.show_relations.title": "‘Volgers’ en ‘Gevolgde accounts’ tonen", + "account_edit.profile_tab.title": "Weergave-instellingen profiel", "account_edit.save": "Opslaan", "account_edit.upload_modal.back": "Terug", "account_edit.upload_modal.done": "Klaar", @@ -325,11 +327,8 @@ "block_modal.remote_users_caveat": "We vragen de server {domain} om je besluit te respecteren. Het naleven hiervan is echter niet gegarandeerd, omdat sommige servers blokkades anders kunnen interpreteren. Openbare berichten zijn mogelijk nog steeds zichtbaar voor niet-ingelogde gebruikers.", "block_modal.show_less": "Minder tonen", "block_modal.show_more": "Meer tonen", - "block_modal.they_cant_mention": "De persoon kan jou niet vermelden of volgen.", - "block_modal.they_cant_see_posts": "De persoon kan jouw berichten niet zien en jij ook niet diens berichten.", "block_modal.they_will_know": "De persoon kan zien dat die wordt geblokkeerd.", "block_modal.title": "Gebruiker blokkeren?", - "block_modal.you_wont_see_mentions": "Je ziet geen berichten meer die dit account vermelden.", "boost_modal.combo": "Je kunt {combo} klikken om dit de volgende keer over te slaan", "boost_modal.reblog": "Bericht boosten?", "boost_modal.undo_reblog": "Bericht niet langer boosten?", @@ -749,7 +748,7 @@ "hashtag.column_settings.tag_mode.all": "Allemaal", "hashtag.column_settings.tag_mode.any": "Een van deze", "hashtag.column_settings.tag_mode.none": "Geen van deze", - "hashtag.column_settings.tag_toggle": "Additionele tags aan deze kolom toevoegen", + "hashtag.column_settings.tag_toggle": "Extra tags aan deze kolom toevoegen", "hashtag.counter_by_accounts": "{count, plural, one {{counter} deelnemer} other {{counter} deelnemers}}", "hashtag.counter_by_uses": "{count, plural, one {{counter} bericht} other {{counter} berichten}}", "hashtag.counter_by_uses_today": "{count, plural, one {{counter} bericht} other {{counter} berichten}} vandaag", @@ -1128,7 +1127,7 @@ "report.mute": "Negeren", "report.mute_explanation": "Je kunt diens berichten niet zien. Je kunt nog wel gevolgd worden en jouw berichten zijn nog zichtbaar, maar diegene kan niet zien dat die wordt genegeerd.", "report.next": "Volgende", - "report.placeholder": "Extra opmerkingen", + "report.placeholder": "Aanvullende opmerkingen", "report.reasons.dislike": "Ik vind het niet leuk", "report.reasons.dislike_description": "Het is iets wat je niet wilt zien", "report.reasons.legal": "Het is wettelijk niet toegestaan", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 3fbc7621eb775e..9a81ab554a6eb8 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -313,11 +313,8 @@ "block_modal.remote_users_caveat": "Me vil be tenaren {domain} om å respektera di avgjerd. Me kan ikkje garantera at det vert gjort, sidan nokre tenarar kan handtera blokkering ulikt. Offentlege innlegg kan framleis vera synlege for ikkje-innlogga brukarar.", "block_modal.show_less": "Vis mindre", "block_modal.show_more": "Vis meir", - "block_modal.they_cant_mention": "Dei kan ikkje nemna eller fylgja deg.", - "block_modal.they_cant_see_posts": "Dei kan ikkje sjå innlegga dine, og du vil ikkje sjå deira.", "block_modal.they_will_know": "Dei kan sjå at dei er blokkerte.", "block_modal.title": "Blokker brukaren?", - "block_modal.you_wont_see_mentions": "Du ser ikkje innlegg som nemner dei.", "boost_modal.combo": "Du kan trykkja {combo} for å hoppa over dette neste gong", "boost_modal.reblog": "Framhev innlegget?", "boost_modal.undo_reblog": "Fjern framhevinga?", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index 47ffd1bd928e83..9ca73413d0d2be 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -177,11 +177,8 @@ "block_modal.remote_users_caveat": "Vi vil be serveren {domain} om å respektere din beslutning. Det er imidlertid ingen garanti at det blir overholdt, siden noen servere kan håndtere blokkeringer på forskjellig vis. Offentlige innlegg kan fortsatt være synlige for ikke-innloggede brukere.", "block_modal.show_less": "Vis mindre", "block_modal.show_more": "Vis mer", - "block_modal.they_cant_mention": "De kan ikke nevne eller følge deg.", - "block_modal.they_cant_see_posts": "De kan ikke se dine innlegg og du kommer ikke til å se deres.", "block_modal.they_will_know": "De kan se at de er blitt blokkert.", "block_modal.title": "Blokker bruker?", - "block_modal.you_wont_see_mentions": "Du kommer ikke til å se innlegg som nevner dem.", "boost_modal.combo": "You kan trykke {combo} for å hoppe over dette neste gang", "boost_modal.reblog": "Fremhev innlegg?", "boost_modal.undo_reblog": "Fjern fremheving?", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index 803cb5ecb3635b..4705cd2600cab1 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -237,11 +237,8 @@ "block_modal.remote_users_caveat": "Poprosimy serwer {domain} o uszanowanie twojej decyzji. Nie jest to jednak gwarantowane, bo niektóre serwery mogą obsługiwać blokady w inny sposób. Publiczne wpisy mogą być nadal widoczne dla niezalogowanych użytkowników.", "block_modal.show_less": "Pokaż mniej", "block_modal.show_more": "Pokaż więcej", - "block_modal.they_cant_mention": "Nie może cię wzmiankować ani obserwować.", - "block_modal.they_cant_see_posts": "Nie zobaczycie wzajemnie swoich wpisów.", "block_modal.they_will_know": "Zobaczy informację o blokadzie.", "block_modal.title": "Zablokować?", - "block_modal.you_wont_see_mentions": "Nie zobaczysz wpisów, które zawierają wzmianki o tej osobie.", "boost_modal.combo": "Możesz kliknąć {combo}, aby pominąć tę czynność następnym razem", "boost_modal.reblog": "Podbić wpis?", "boost_modal.undo_reblog": "Cofnąć podbicie?", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 47a9325ba0cc98..99638fe17a35d3 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -331,11 +331,8 @@ "block_modal.remote_users_caveat": "Pediremos ao servidor {domain} que respeite sua decisão. No entanto, a conformidade não é garantida, já que alguns servidores podem lidar com bloqueios de maneira diferente. As publicações abertas ainda podem estar visíveis para usuários não logados.", "block_modal.show_less": "Mostrar menos", "block_modal.show_more": "Mostrar mais", - "block_modal.they_cant_mention": "Não poderá mencionar ou seguir você.", - "block_modal.they_cant_see_posts": "Não poderá ver suas publicações e você não verá as dele/a.", "block_modal.they_will_know": "Poderá ver que você bloqueou.", "block_modal.title": "Bloquear usuário?", - "block_modal.you_wont_see_mentions": "Você não verá publicações que mencionem este usuário.", "boost_modal.combo": "Pressione {combo} para pular isto na próxima vez", "boost_modal.reblog": "Impulsionar a publicação?", "boost_modal.undo_reblog": "Retirar o impulso da publicação?", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index e361651c02889f..cfd304599e61aa 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -314,11 +314,8 @@ "block_modal.remote_users_caveat": "Solicitaremos ao servidor {domain} que respeite a sua decisão. No entanto, o cumprimento não é garantido, sendo que alguns servidores podem gerir bloqueios de forma diferente. As publicações públicas podem continuar visíveis para utilizadores não autenticados.", "block_modal.show_less": "Mostrar menos", "block_modal.show_more": "Mostrar mais", - "block_modal.they_cant_mention": "Ele não o pode mencionar nem seguir.", - "block_modal.they_cant_see_posts": "Eles não podem ver as suas publicações e você não verá as deles.", "block_modal.they_will_know": "Ele pode ver que o bloqueaste.", "block_modal.title": "Bloquear utilizador?", - "block_modal.you_wont_see_mentions": "Não verás publicações que mencionem este utilizador.", "boost_modal.combo": "Pode clicar em {combo} para não voltar a ver isto", "boost_modal.reblog": "Partilhar a publicação?", "boost_modal.undo_reblog": "Deixar de partilhar a publicação?", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 28cefe2e04d512..4b8c14d28cea9d 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -287,11 +287,8 @@ "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": "Отменить продвижение?", diff --git a/app/javascript/mastodon/locales/ry.json b/app/javascript/mastodon/locales/ry.json index dbaf6f7136be82..f608f0039c7f2e 100644 --- a/app/javascript/mastodon/locales/ry.json +++ b/app/javascript/mastodon/locales/ry.json @@ -76,11 +76,8 @@ "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} другый раз обы сесе пропустити", "bundle_column_error.copy_stacktrace": "Укопіровати звіт за хыбу", "bundle_column_error.error.body": "Не годни сьме указати зажадану сторунку. Годно быти спозад хыбы у нашум сістемі, авадь проблемы зумісности бравзера.", diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json index 5bbeef42c21a13..2cc4cb38181276 100644 --- a/app/javascript/mastodon/locales/sc.json +++ b/app/javascript/mastodon/locales/sc.json @@ -105,11 +105,8 @@ "block_modal.remote_users_caveat": "Amus a pedire a su serbidore {domain} de rispetare sa detzisione tua. Nointames custu, su rispetu no est garantidu ca unos cantos serbidores diant pòdere gestire is blocos de manera diferente. Is publicatzione pùblicas diant pòdere ancora èssere visìbiles a is utentes chi no ant fatu s'atzessu.", "block_modal.show_less": "Ammustra·nde prus pagu", "block_modal.show_more": "Ammustra·nde prus", - "block_modal.they_cant_mention": "Non ti podent mentovare nen sighire.", - "block_modal.they_cant_see_posts": "Non podent bìdere is publicatziones tuas e tue non podes bìdere cussas issoro.", "block_modal.they_will_know": "Non podent bìdere chi ddos as blocadu.", "block_modal.title": "Boles blocare s'utente?", - "block_modal.you_wont_see_mentions": "No as a bìdere is publicatziones chi mèntovent custa persone.", "boost_modal.combo": "Podes incarcare {combo} pro brincare custu sa borta chi benit", "boost_modal.reblog": "Boles potentziare sa publicatzione?", "boost_modal.undo_reblog": "Boles tzessare de potentziare sa publicatzione?", diff --git a/app/javascript/mastodon/locales/sco.json b/app/javascript/mastodon/locales/sco.json index 73fd8211019b09..ceda9cbd582dbf 100644 --- a/app/javascript/mastodon/locales/sco.json +++ b/app/javascript/mastodon/locales/sco.json @@ -64,8 +64,6 @@ "attachments_list.unprocessed": "(No processed)", "audio.hide": "Stow audio", "block_modal.remote_users_caveat": "We will ask the server {domain} tae respect yer decision. Awtho mind compliance isnae a guarantee, sin some servers may haundle blocks differently. Public posts may yet be visible tae non-loggit-in uisers.", - "block_modal.they_cant_mention": "Thay cannae mention or follae you.", - "block_modal.they_cant_see_posts": "Thay cannae see yer posts and you willnae see thairs.", "block_modal.they_will_know": "Thay can see that they're blockit.", "block_modal.title": "Block uiser?", "boost_modal.combo": "Ye kin chap {combo} tae dingie this neist tim", diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json index d0fd49ad7fc3ec..3e39a942e2692f 100644 --- a/app/javascript/mastodon/locales/si.json +++ b/app/javascript/mastodon/locales/si.json @@ -107,11 +107,8 @@ "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": "පළ කිරීම බූස්ට් නොකරන්නද?", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 05ac8dbac6ac3c..ccce04abd7f503 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -122,11 +122,8 @@ "block_modal.remote_users_caveat": "Požiadame server {domain} o rešpektovanie vášho rozhodnutia. Nevieme to však zaručiť, keďže niektoré servery pristupujú k blokovaniu inak. Verejné príspevky sa stále môžu zobrazovať neprihláseným ľuďom.", "block_modal.show_less": "Zobraziť menej", "block_modal.show_more": "Zobraziť viac", - "block_modal.they_cant_mention": "Nemôžu ťa spomenúť, alebo nasledovať.", - "block_modal.they_cant_see_posts": "On/a nemôže vidieť tvoje príspevky a ty neuvidíš jej/ho.", "block_modal.they_will_know": "Môžu vidieť, že sú zablokovaní/ý.", "block_modal.title": "Blokovať užívateľa?", - "block_modal.you_wont_see_mentions": "Neuvidíš príspevky, ktoré ich spomínajú.", "boost_modal.combo": "Nabudúce môžete preskočiť stlačením {combo}", "boost_modal.reblog": "Zdieľať príspevok?", "boost_modal.undo_reblog": "Zrušiť zdieľanie?", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index 3157b06a33c61e..636b276996f5bc 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -131,11 +131,8 @@ "block_modal.remote_users_caveat": "Strežnik {domain} bomo pozvali, naj spoštuje vašo odločitev. Kljub temu pa ni gotovo, da bo strežnik prošnjo upošteval, saj nekateri strežniki blokiranja obravnavajo drugače. Javne objave bodo morda še vedno vidne neprijavljenim uporabnikom.", "block_modal.show_less": "Pokaži manj", "block_modal.show_more": "Pokaži več", - "block_modal.they_cant_mention": "Ne more vas omenjati ali vam slediti.", - "block_modal.they_cant_see_posts": "Ne vidi vaših objav, vi pa ne njegovih.", "block_modal.they_will_know": "Ne more videti, da je blokiran.", "block_modal.title": "Blokiram uporabnika?", - "block_modal.you_wont_see_mentions": "Objav, ki ga omenjajo, ne boste videli.", "boost_modal.combo": "Če želite naslednjič to preskočiti, lahko pritisnete {combo}", "boost_modal.reblog": "Izpostavim objavo?", "boost_modal.undo_reblog": "Ali želite preklicati izpostavitev objave?", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 108f59ac11aed9..cc993ce578e9e6 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -327,11 +327,8 @@ "block_modal.remote_users_caveat": "Do t’i kërkojmë shërbyesit {domain} të respektojë vendimin tuaj. Por, pajtimi s’është i garantuar, ngaqë disa shërbyes mund t’i trajtojnë ndryshe bllokimet. Psotimet publike mundet të jenë ende të dukshme për përdorues pa bërë hyrje në llogari.", "block_modal.show_less": "Shfaq më pak", "block_modal.show_more": "Shfaq më tepër", - "block_modal.they_cant_mention": "S’mund t’u përmendin, ose t’ju ndjekin.", - "block_modal.they_cant_see_posts": "S’mund të shohin postimet tuaja dhe as ju të tyret.", "block_modal.they_will_know": "Mund të shohin se janë bllokuar.", "block_modal.title": "Të bllokohet përdoruesi?", - "block_modal.you_wont_see_mentions": "S’do të shihni postimet ku përmenden.", "boost_modal.combo": "Që kjo të anashkalohet herës tjetër, mund të shtypni {combo}", "boost_modal.reblog": "Përforcim postimi?", "boost_modal.undo_reblog": "Të hiqet përforcim për postimin?", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 2b517b4209591c..3561d761274895 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -106,11 +106,8 @@ "block_modal.remote_users_caveat": "Zamolićemo server {domain} da poštuje vašu odluku. Međutim, usklađenost nije zagarantovana jer neki serveri mogu drugačije da obrađuju blokove. Javne objave mogu i dalje biti vidljive korisnicima koji nisu prijavljeni.", "block_modal.show_less": "Prikaži manje", "block_modal.show_more": "Prikaži više", - "block_modal.they_cant_mention": "Ne mogu da vas pominju ili prate.", - "block_modal.they_cant_see_posts": "Ne mogu da vide vaše objave, a vi nećete videti njihove.", "block_modal.they_will_know": "Mogu da vide da su blokirani.", "block_modal.title": "Blokirati korisnika?", - "block_modal.you_wont_see_mentions": "Nećete videti objave koje ih pominju.", "boost_modal.combo": "Možete pritisnuti {combo} da preskočite ovo sledeći put", "bundle_column_error.copy_stacktrace": "Kopiraj izveštaj o grešci", "bundle_column_error.error.body": "Nije moguće prikazati traženu stranicu. Razlog može biti greška u našem kodu ili problem sa kompatibilnošću pretraživača.", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index ee12b86e132982..0e8c16933c053a 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -83,11 +83,8 @@ "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} да прескочите ово следећи пут", "bundle_column_error.copy_stacktrace": "Копирај извештај о грешци", "bundle_column_error.error.body": "Није могуће приказати тражену страницу. Разлог може бити грешка у нашем коду или проблем са компатибилношћу претраживача.", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 8f9fa4ce1321df..ec504852ae79f6 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -324,11 +324,8 @@ "block_modal.remote_users_caveat": "Vi kommer att be servern {domain} att respektera ditt beslut. Dock garanteras inte efterlevnad eftersom vissa servrar kan hantera blockeringar på olika sätt. Offentliga inlägg kan fortfarande vara synliga för icke-inloggade användare.", "block_modal.show_less": "Visa mindre", "block_modal.show_more": "Visa mer", - "block_modal.they_cant_mention": "De kan inte nämna eller följa dig.", - "block_modal.they_cant_see_posts": "De kan inte se dina inlägg och du kan inte se deras.", "block_modal.they_will_know": "De kan se att de är blockerade.", "block_modal.title": "Blockera användare?", - "block_modal.you_wont_see_mentions": "Du kommer inte att se inlägg som nämner dem.", "boost_modal.combo": "Du kan trycka på {combo} för att hoppa över detta nästa gång", "boost_modal.reblog": "Boosta inlägg?", "boost_modal.undo_reblog": "Avboosta inlägg?", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index fcfa54e5ef4e48..9b4ffa3e409fcd 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -123,11 +123,8 @@ "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": "เลิกดันโพสต์?", diff --git a/app/javascript/mastodon/locales/tok.json b/app/javascript/mastodon/locales/tok.json index 09edda7fac3cc1..a90f4102727fd4 100644 --- a/app/javascript/mastodon/locales/tok.json +++ b/app/javascript/mastodon/locales/tok.json @@ -114,11 +114,8 @@ "block_modal.remote_users_caveat": "mi pana e wile sina tawa ma {domain}. taso ma li ken kepeken nasin ante la pakala li ken. jan li awen ken lukin e toki kepeken sijelo ala.", "block_modal.show_less": "o lili e toki", "block_modal.show_more": "o suli e toki", - "block_modal.they_cant_mention": "ona li ken ala toki tawa sina li ken ala kute e sina.", - "block_modal.they_cant_see_posts": "ona li ken ala lukin e toki sina. sina ken ala lukin e toki ona.", "block_modal.they_will_know": "ona li ken sona e ni: sina len e ona.", "block_modal.title": "o len ala len e jan?", - "block_modal.you_wont_see_mentions": "jan li toki e nimi ona la sina lukin ala e toki ni.", "boost_modal.combo": "sina ken luka e nena {combo} tawa ni: sina wile ala luka e nena lon tenpo kama", "boost_modal.reblog": "o pana ala pana sin e toki?", "boost_modal.undo_reblog": "o weka ala weka e pana toki?", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index 889618412a99b8..e3445e75bb9dac 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -113,6 +113,7 @@ "account.name.copy": "İsmi Kopyala", "account.name.help.domain": "{domain} kullanıcının profilini ve gönderilerini barındıran sunucudur.", "account.name.help.domain_self": "{domain} profilinizi ve gönderilerinizi barındıran sunucunuzdur.", + "account.name.help.footer": "Tıpkı farklı e-posta sağlayıcılarını kullanan kişilere e-posta gönderebileceğiniz gibi, diğer Mastodon sunucularındaki kullanıcılarla ve diğer Fediverse uygulamalarındaki herkesle etkileşim kurabilirsiniz.", "account.name.help.header": "Takma ad bir e-posta adresi gibidir", "account.name.help.username": "{username} bu hesabın sunucudaki kullanıcı adıdır. Başka bir sunucudaki başka bir kişi de aynı kullanıcı adına sahip olabilir.", "account.name.help.username_self": "{username} bu sunucudaki kullanıcı adınızdır. Başka bir sunucudaki başka bir kullanıcı da aynı kullanıcı adına sahip olabilir.", @@ -325,11 +326,8 @@ "block_modal.remote_users_caveat": "{domain} sunucusundan kararınıza saygı duymasını isteyeceğiz. Ancak, Uymaları garanti değildir çünkü bazı sunucular engellemeyi farklı şekilde yapıyorlar. Herkese açık gönderiler giriş yapmamış kullanıcılara görüntülenmeye devam edebilir.", "block_modal.show_less": "Daha az göster", "block_modal.show_more": "Daha fazla göster", - "block_modal.they_cant_mention": "Size değinemez veya sizi takip edemezler.", - "block_modal.they_cant_see_posts": "Onlar sizin gönderilerinizi görmeye devam edebilir, ancak siz onlarınkini göremezsiniz.", "block_modal.they_will_know": "Engellendiklerini görebiliyorlar.", "block_modal.title": "Kullanıcıyı engelle?", - "block_modal.you_wont_see_mentions": "Onlara değinen gönderileri göremezsiniz.", "boost_modal.combo": "Bir daha ki sefere {combo} tuşuna basabilirsin", "boost_modal.reblog": "Gönderiyi yeniden paylaş?", "boost_modal.undo_reblog": "Gönderinin yeniden paylaşımını geri al?", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 88f09f9b0ea103..7a6d6dd60ed928 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -163,11 +163,8 @@ "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": "Скасувати поширення?", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 4f32b1b533ff30..c72ad4ccf424f9 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -331,11 +331,8 @@ "block_modal.remote_users_caveat": "Chúng tôi sẽ yêu cầu {domain} tôn trọng quyết định của bạn. Tuy nhiên, việc tuân thủ không được đảm bảo vì một số máy chủ có thể xử lý việc chặn theo cách khác nhau. Các tút công khai vẫn có thể hiển thị đối với người dùng chưa đăng nhập.", "block_modal.show_less": "Thu gọn", "block_modal.show_more": "Hiện thêm", - "block_modal.they_cant_mention": "Họ không thể theo dõi & nhắc đến bạn.", - "block_modal.they_cant_see_posts": "Cả hai không còn nhìn thấy tút của nhau.", "block_modal.they_will_know": "Họ sẽ biết đã bị bạn chặn.", "block_modal.title": "Chặn tài khoản này?", - "block_modal.you_wont_see_mentions": "Bạn không còn thấy tút có nhắc đến họ.", "boost_modal.combo": "Nhấn {combo} để bỏ qua bước này", "boost_modal.reblog": "Đăng lại?", "boost_modal.undo_reblog": "Bỏ đăng lại?", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index e8d207b37be596..f5c6b9aaaf7e4f 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -328,14 +328,15 @@ "annual_report.summary.share_on_mastodon": "在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_cant_mention": "你将无法提及、关注、引用彼此。", + "block_modal.they_cant_see_posts": "他们看不到你发布的内容,你也看不到他们的。", "block_modal.they_will_know": "对方将能看到自己被屏蔽。", "block_modal.title": "确定要屏蔽此用户?", - "block_modal.you_wont_see_mentions": "你将不会看到提及他们的嘟文。", + "block_modal.you_wont_see_mentions": "你将不会看到其他人提及对方的嘟文。", "boost_modal.combo": "下次按住 {combo} 即可跳过此提示", "boost_modal.reblog": "是否要转嘟?", "boost_modal.undo_reblog": "是否要取消转嘟?", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 309a87546fc905..d47f2da6f6567a 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -175,11 +175,8 @@ "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} 來跳過", "bundle_column_error.copy_stacktrace": "複製錯誤報告", "bundle_column_error.error.body": "無法提供請求的頁面。這可能是因為代碼出現錯誤或瀏覽器出現兼容問題。", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index b9e3a6b9bb6b58..f984e40939a95c 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -328,14 +328,15 @@ "annual_report.summary.share_on_mastodon": "於 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_mention": "您無法提及、跟隨、或引用彼此。", "block_modal.they_cant_see_posts": "他們無法讀取您的嘟文,且您不會見到他們的嘟文。", "block_modal.they_will_know": "他們能見到他們已被封鎖。", "block_modal.title": "是否封鎖該使用者?", - "block_modal.you_wont_see_mentions": "您將不會見到提及他們的嘟文。", + "block_modal.you_wont_see_mentions": "您將不會見到其他人提及他們的嘟文。", "boost_modal.combo": "您下次可以按 {combo} 跳過", "boost_modal.reblog": "是否要轉嘟?", "boost_modal.undo_reblog": "是否要取消轉嘟?", diff --git a/config/locales/be.yml b/config/locales/be.yml index 232c0186b55386..c4d99b955b80f9 100644 --- a/config/locales/be.yml +++ b/config/locales/be.yml @@ -824,7 +824,6 @@ be: manage_custom_emojis: Кіраванне адвольнымі эмодзі manage_custom_emojis_description: Дазваляе кіраваць адвольнымі эмодзі на серверы manage_email_subscriptions: Наладзіць падпіскі па электроннай пошце - manage_email_subscriptions_description: Дазвольце карыстальнікам падпісвацца на карыстальнікаў з гэтым дазволам праз электронную пошту manage_federation: Кіраваць федэрацыяй manage_federation_description: Дазваляе карыстальнікам блакіраваць або дазваляць аб'яднанне з іншымі даменамі і кантраляваць магчымасць дастаўкі manage_invites: Кіраванне запрашэннямі diff --git a/config/locales/cy.yml b/config/locales/cy.yml index df3d3fb75c78f1..4ef5ef8efa6767 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -527,6 +527,71 @@ cy: resolved_dns_records_hint_html: Mae'r enw parth yn cyd-fynd â'r parthau MX canlynol, sy'n gyfrifol yn y pen draw am dderbyn e-bost. Bydd rhwystro parth MX yn rhwystro cofrestriadau o unrhyw gyfeiriad e-bost sy'n defnyddio'r un parth MX, hyd yn oed os yw'r enw parth gweladwy yn wahanol. Byddwch yn ofalus i beidio â rhwystro'r prif ddarparwyr e-bost. resolved_through_html: Wedi'i ddatrys trwy %{domain} title: Parthau e-bost wedi'u rhwystro + 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 + subscribers: Tanysgrifwyr + title: Rhestrau postio + additional_footer_texts: + show: + title: Testun troedyn ychwanegol + compliance_settings: + additional_footer_text: + action: Rheoli + hint: Testun dewisol sy'n ymddangos yn nhroedyn e-byst cylchlythyr yn unig + title: Testun troedyn ychwanegol + lead: Mae modd ystyried cylchlythyrau e-bost yn negeseuon e-bost marchnata, yn dibynnu ar yr awdurdodaethau lle rydych chi'n gweithredu. + privacy_policy: + action: Rheoli + hint: Mae dolen i'r polisi hwn yn nhroedyn pob e-bost + title: Polisi preifatrwydd + title: Gosodiadau cydymffurfio + danger_zone: + disable_feature: + action: Analluogi + hint: Diffoddwch y nodwedd ar gyfer pob cyfrif + title: Analluogi nodwedd + erase_all_data: + action: Dileu data + hint: Yn dileu pob e-bost ym mhob rhestr bostio yn barhaol + title: Dileu'r holl ddata + title: Parth perygl + disabled_msg: Mae tanysgrifiadau e-bost wedi cael eu hanalluogi'n llwyddiannus. + index: + disabled: + cannot_be_enabled: Dyw eich darparwr technegol ddim wedi galluogi'r nodwedd hon ar gyfer eich gweinydd. + description: Mae'r nodwedd hon yn caniatáu i gyfrifon penodol ychwanegu teclyn at eu proffiliau, gan alluogi ymwelwyr heb gyfrif Mastodon i dderbyn eu postiadau drwy e-bost. + get_started: Cychwyn arni + lead: Caniatáu i ymwelwyr dderbyn postiadau drwy e-bost o gyfrifon pwrpasol ar y gweinydd hwn. + title: Cylchlythyrau e-bost + purged_msg: Mae holl ddata tanysgrifiadau e-bost yn cael ei ddileu. + roles: + accounts: Cyfrifon + edit_role: Golygu rôl + empty: + hint: Does gan neb ganiatâd i ddefnyddio'r nodwedd hon. + no_roles_added: Dim rolau wedi'u hychwanegu + lead: Gall cyfrifon gyda'r rolau canlynol alluogi'r nodwedd hon ar eu proffiliau. + manage_roles: Rheoli rolau + role_name: Enw'r rôl + title: Rolau + setups: + show: + enable_feature: Galluogi nodwedd + important_information: Gwybodaeth bwysig + list: + 1_permission_explanation: Pan fydd y nodwedd hon wedi'i galluogi, gall cyfrifon sydd â'r caniatâd dynodedig ychwanegu ffurflen casglu e-byst at eu proffiliau. + 2_feature_explanation: Pan fydd ymwelwyr yn cofrestru ar dudalen proffil cyfrif ac yn cadarnhau eu tanysgrifiad, byddan yn dechrau derbyn diweddariadau e-bost pan fydd y cyfrif yn creu postiadau cyhoeddus newydd. + 3_privacy_policy_warning: Bydd gan weinyddwyr gweinydd fynediad at y cyfeiriadau e-bost (PII) sy'n cael eu casglu. O'r herwydd, rhaid diweddaru'r polisi preifatrwydd a'r Telerau Gwasanaeth ar gyfer y gweinydd cyn defnyddio'r nodwedd hon. + 4_cost_warning: Gall e-byst olygu ffi yn dibynnu ar y drefn cynnal. Trafodwch â'ch darparwr cynnal cyn ei alluogi, gan y gallai'r nodwedd hon gynyddu nifer yr e-byst a anfonir o'ch gweinydd yn sylweddol. export_domain_allows: new: title: Mewnforio parth yn caniatáu @@ -856,7 +921,7 @@ cy: manage_custom_emojis: Rheoli Emojis Cyfaddas manage_custom_emojis_description: Yn caniatáu i ddefnyddwyr reoli emojis cyfaddas ar y gweinydd manage_email_subscriptions: Rheoli Tanysgrifiadau E-bost - manage_email_subscriptions_description: Caniatáu i ddefnyddwyr danysgrifio i ddefnyddwyr sydd â'r caniatâd hwn drwy e-bost + manage_email_subscriptions_description: Caniatáu i ddefnyddwyr sydd â'r caniatâd hwn alluogi'r nodwedd cylchlythyr e-bost ar gyfer eu cyfrif manage_federation: Rheoli Ffederasiwn manage_federation_description: Yn caniatáu i ddefnyddwyr rwystro neu ganiatáu ffedereiddio â pharthau eraill, a rheoli'r gallu i gyflawni manage_invites: Rheoli Gwahoddiadau @@ -1899,6 +1964,31 @@ cy: copy_account_note_text: 'Symudodd y defnyddiwr hwn o %{acct}, dyma oedd eich nodiadau blaenorol amdanynt:' navigation: toggle_menu: Toglo'r ddewislen + notification_fallbacks: + added_to_collection: + title_html: Ychwanegodd %{name} chi at gasgliad + admin_report: + title_html: Mae %{name} wedi adrodd ar %{target} + admin_sign_up: + title_and_others_html: + few: Mae %{name} a %{count} eraill wedi cofrestru + many: Mae %{name} a %{count} eraill wedi cofrestru + one: Mae %{name} ac un arall wedi cofrestru + other: Mae %{name} a %{count} eraill wedi cofrestru + two: Mae %{name} a %{count} eraill wedi cofrestru + zero: Mae %{name} a %{count} eraill wedi cofrestru + title_html: Mae %{name} wedi cofrestru + collection_update: + title_html: Mae %{name} wedi diweddaru casgliad rydych chi ynddo + generic: + sign_in: Mewngofnodwch i ap gwe Mastodon + summary_html: Rydych chi ar ap nad yw'n cefnogi'r fersiwn ddiweddaraf o Mastodon. %{link} am ymarferoldeb llawn. + moderation_warning: + summary_html: Rydych chi ar ap nad yw'n cefnogi'r fersiwn ddiweddaraf o Mastodon. %{link}. + title: Rydych chi wedi derbyn rhybudd cymedroli. + severed_relationships: + summary_html: Mae gweinyddwr o %{from} wedi atal %{target}, sy'n golygu nad ydych yn gallu derbyn diweddariadau ganddyn nhw na rhyngweithio â nhw bellach. Ewch i %{link} i adfer rhestr o'r perthnasoedd coll. + title: Colli cysylltiadau gyda %{name} notification_mailer: admin: report: diff --git a/config/locales/da.yml b/config/locales/da.yml index 9cc6120ef86c4e..1f8795c7fc698d 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -487,6 +487,71 @@ da: resolved_dns_records_hint_html: Domænenavnet opløses til flg. MX-domæner, som i sidste ende er ansvarlige for e-mailmodtagelse. Blokering af et MX-domæne blokerer også tilmeldinger fra enhver e-mailadresse på det pågældende MX-domæne, selv hvis det synlige domænenavn er et andet. Pas på ikke at blokere større e-mailudbydere. resolved_through_html: Opløst via %{domain} title: Blokerede e-maildomæner + 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 + subscribers: Abonnenter + title: Mailinglister + additional_footer_texts: + show: + title: Yderligere tekst til sidefod + compliance_settings: + additional_footer_text: + action: Administrér + hint: Valgfri tekst, der kun vises i sidefoden på e-mail-nyhedsbreve + title: Yderligere tekst til sidefod + lead: E-mail-nyhedsbreve kan blive betragtet som markedsføringsmails afhængigt af de jurisdiktioner, hvor du opererer. + privacy_policy: + action: Administrér + hint: Denne politik er linket til i bunden af hver e-mail + title: Privatlivspolitik + title: Compliance-indstillinger + danger_zone: + disable_feature: + action: Deaktivér + hint: Slå funktionen fra for alle konti + title: Deaktivér funktion + erase_all_data: + action: Slet data + hint: Sletter alle e-mails i alle mailinglister permanent + title: Slet alle data + title: Farezone + disabled_msg: E-mail-abonnementer er blevet deaktiveret. + index: + disabled: + cannot_be_enabled: Din tekniske udbyder har ikke aktiveret denne funktion på din server. + description: Denne funktion giver angivne konti mulighed for at tilføje en widget til deres profiler, så besøgende uden en Mastodon-konto kan modtage deres indlæg via e-mail. + get_started: Kom i gang + lead: Tillad besøgende at modtage indlæg via e-mail fra dedikerede konti på denne server. + title: Nyhedsbreve via e-mail + purged_msg: Alle data vedrørende e-mail-abonnementer slettes. + roles: + accounts: Konti + edit_role: Rediger rolle + empty: + hint: Ingen har tilladelse til at bruge denne funktion. + no_roles_added: Ingen roller tilføjet + lead: Brugere med følgende roller kan aktivere denne funktion på deres profiler. + manage_roles: Administrer roller + role_name: Rollenavn + title: Roller + setups: + show: + enable_feature: Aktivér funktion + important_information: Vigtig information + list: + 1_permission_explanation: Når denne funktion er aktiveret, kan brugere med de angivne rettigheder tilføje en formular til indsamling af e-mailadresser til deres profiler. + 2_feature_explanation: Når besøgende tilmelder sig på en kontos profilside og bekræfter deres abonnement, vil de begynde at modtage e-mail-opdateringer, når kontoen opretter nye offentlige indlæg. + 3_privacy_policy_warning: Serveradministratorer vil have adgang til de indsamlede personoplysninger (e-mailadresser). Derfor skal serverens privatlivspolitik og servicevilkår opdateres, inden denne funktion tages i brug. + 4_cost_warning: Der kan påløbe et gebyr for e-mails afhængigt af hostingopsætningen. Tal med din hostingudbyder, inden du aktiverer funktionen, da den kan medføre en markant stigning i antallet af e-mails, der sendes fra din server. export_domain_allows: new: title: Importeret domæne tillader @@ -792,7 +857,7 @@ da: manage_custom_emojis: Administrere tilpassede emojier manage_custom_emojis_description: Tillader brugere at administrere tilpassede emojier på serveren manage_email_subscriptions: Administrer e-mail-abonnementer - manage_email_subscriptions_description: Giv brugere mulighed for at abonnere på andre brugere med denne tilladelse via e-mail + manage_email_subscriptions_description: Giv brugere med denne tilladelse mulighed for at aktivere funktionen til e-mail-nyhedsbreve på deres konto manage_federation: Administrere federation manage_federation_description: Tillader brugere at blokere eller tillade federation med andre domæner og styre leverbarhed manage_invites: Administrere invitationer diff --git a/config/locales/de.yml b/config/locales/de.yml index 40e3df1c8b37c2..6d377c9962c075 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -487,6 +487,45 @@ de: resolved_dns_records_hint_html: Die Domain wird zu den folgenden MX-Domains aufgelöst, die für die Annahme von E-Mails zuständig sind. Das Sperren einer MX-Domain sperrt Anmeldungen aller E-Mail-Adressen, die dieselbe MX-Domain verwenden, auch wenn die sichtbare Domain anders lautet. Achte daher darauf, keine großen E-Mail-Anbieter versehentlich zu sperren. resolved_through_html: Durch %{domain} aufgelöst title: Gesperrte E-Mail-Domains + email_subscriptions: + accounts: + account: Konto + active: Aktiviert + empty: + hint: Bisher wurden keine Konten abonniert. + no_lists_yet: Noch keine Listen vorhanden + inactive: Deaktiviert + lead: Konten, die die Funktion aktiviert haben und abonniert wurden, werden unten angezeigt. + status: Status + subscribers: Abonnent*innen + title: Mailingliste + compliance_settings: + additional_footer_text: + action: Verwalten + privacy_policy: + action: Verwalten + title: Datenschutzerklärung + danger_zone: + disable_feature: + action: Deaktivieren + title: Funktion deaktivieren + erase_all_data: + action: Daten löschen + title: Alle Daten löschen + title: Gefahrenzone + index: + disabled: + get_started: Loslegen + roles: + accounts: Konten + edit_role: Rolle bearbeiten + manage_roles: Rollen verwalten + role_name: Name der Rolle + title: Rollen + setups: + show: + enable_feature: Funktionen aktivieren + important_information: Wichtige Informationen export_domain_allows: new: title: Erlaubte Domains importieren @@ -792,7 +831,6 @@ de: manage_custom_emojis: Emojis manage_custom_emojis_description: Spezielle Emojis dieses Servers verwalten manage_email_subscriptions: E-Mail-Abonnements - manage_email_subscriptions_description: Profile können per E-Mail-Benachrichtigung abonniert werden manage_federation: Föderation manage_federation_description: Domains anderer Mastodon-Server sperren/zulassen – und Zustellbarkeit kontrollieren manage_invites: Einladungen diff --git a/config/locales/el.yml b/config/locales/el.yml index b1bd8053751ee0..3ed839cd0de89c 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -487,6 +487,71 @@ el: resolved_dns_records_hint_html: Το όνομα τομέα επιλύεται στους ακόλουθους τομείς MX, οι οποίοι είναι τελικά υπεύθυνοι για την αποδοχή των email. Αποκλείοντας έναν τομέα MX θα αποκλείει τις εγγραφές από οποιαδήποτε διεύθυνση email που χρησιμοποιεί τον ίδιο τομέα MX, ακόμη και αν το ορατό όνομα τομέα είναι διαφορετικό. Προσέξτε να μην αποκλείσετε τους μεγάλους παρόχους ηλεκτρονικού ταχυδρομείου. resolved_through_html: Επιλύθηκε μέσω %{domain} title: Αποκλεισμένοι τομείς email + email_subscriptions: + accounts: + account: Λογαριασμός + active: Ενεργός + empty: + hint: Κανένας λογαριασμός δεν έχει συνδρομητές ακόμη. + no_lists_yet: Καμία λίστα ακόμη + inactive: Ανενεργός + last_email: Τελευταίο email + lead: Λογαριασμοί που έχουν ενεργοποιήσει τη λειτουργία και έχουν συνδρομητές θα εμφανίζονται παρακάτω. + status: Κατάσταση + subscribers: Συνδρομητές + title: Λίστες αλληλογραφίας + additional_footer_texts: + show: + title: Πρόσθετο κείμενο υποσέλιδου + compliance_settings: + additional_footer_text: + action: Διαχείριση + hint: Προαιρετικό κείμενο που εμφανίζεται στο υποσέλιδο των email ενημερωτικού δελτίου μόνο + title: Πρόσθετο κείμενο υποσέλιδου + lead: Τα email ενημερωτικού δελτίου μπορεί να θεωρηθούν διαφημιστικά μηνύματα, ανάλογα με τις δικαιοδοσίες όπου λειτουργείτε. + privacy_policy: + action: Διαχείριση + hint: Αυτή η πολιτική συνδέεται στο υποσέλιδο κάθε email + title: Πολιτική απορρήτου + title: Ρυθμίσεις συμμόρφωσης + danger_zone: + disable_feature: + action: Απενεργοποίηση + hint: Απενεργοποιήστε τη λειτουργία για όλους τους λογαριασμούς + title: Απενεργοποίηση λειτουργίας + erase_all_data: + action: Διαγραφή δεδομένων + hint: Θα διαγράψει μόνιμα όλα τα email σε όλες τις λίστες αλληλογραφίας + title: Διαγραφή όλων των δεδομένων + title: Επικίνδυνη ζώνη + disabled_msg: Οι συνδρομές email έχουν απενεργοποιηθεί επιτυχώς. + index: + disabled: + cannot_be_enabled: Ο τεχνικός σας πάροχος δεν έχει ενεργοποιήσει αυτήν τη λειτουργία για τον διακομιστή σας. + description: Αυτή η λειτουργία επιτρέπει σε συγκεκριμένους λογαριασμούς να προσθέσουν ένα γραφικό στοιχείο στο προφίλ τους, επιτρέποντας στους επισκέπτες χωρίς λογαριασμό Mastodon να λαμβάνουν τις αναρτήσεις τους μέσω email. + get_started: Ξεκινήστε + lead: Να επιτρέπεται στους επισκέπτες να λαμβάνουν αναρτήσεις μέσω email από αποκλειστικούς λογαριασμούς σε αυτόν τον διακομιστή. + title: Ενημερωτικά δελτία email + purged_msg: Όλα τα δεδομένα συνδρομής email διαγράφονται. + roles: + accounts: Λογαριασμοί + edit_role: Επεξεργασία ρόλου + empty: + hint: Κανένας δεν έχει δικαίωμα να χρησιμοποιήσει αυτήν τη λειτουργία. + no_roles_added: Δεν προστέθηκαν ρόλοι + lead: Λογαριασμοί με τους ακόλουθους ρόλους μπορούν να ενεργοποιήσουν αυτήν τη λειτουργία στο προφίλ τους. + manage_roles: Διαχείριση ρόλων + role_name: Όνομα ρόλου + title: Ρόλοι + setups: + show: + enable_feature: Ενεργοποίηση λειτουργίας + important_information: Σημαντικές πληροφορίες + list: + 1_permission_explanation: Όταν αυτή η λειτουργία είναι ενεργοποιημένη, οι λογαριασμοί με τα καθορισμένα δικαιώματα μπορούν να προσθέσουν μια φόρμα συλλογής email στα προφίλ τους. + 2_feature_explanation: Όταν οι επισκέπτες εγγράφονται στη σελίδα προφίλ ενός λογαριασμού και επιβεβαιώνουν τη συνδρομή τους, θα αρχίσουν να λαμβάνουν ενημερωτικά email όταν ο λογαριασμός δημιουργεί νέες δημόσιες αναρτήσεις. + 3_privacy_policy_warning: Οι διαχειριστές του διακομιστή θα έχουν πρόσβαση σε PII (διευθύνσεις email) που συλλέχθηκαν. Ως εκ τούτου, η Πολιτική απορρήτου και οι Όροι υπηρεσίας για τον διακομιστή πρέπει να ενημερωθούν πριν από τη χρήση αυτής της λειτουργίας. + 4_cost_warning: Τα μηνύματα email μπορούν να επιβαρύνονται με κόστος ανάλογα με τη ρύθμιση φιλοξενίας. Συζητήστε με τον πάροχο φιλοξενίας σας πριν την ενεργοποιήσετε, καθώς αυτή η λειτουργία θα μπορούσε να αυξήσει δραστικά το ποσό των μηνυμάτων email που αποστέλλονται από τον διακομιστή σας. export_domain_allows: new: title: Εισαγωγή επιτρεπόμενων τομέων @@ -792,7 +857,7 @@ el: manage_custom_emojis: Διαχείριση Προσαρμοσμένων Emojis manage_custom_emojis_description: Επιτρέπει στους χρήστες να διαχειρίζονται προσαρμοσμένα emojis στον διακομιστή manage_email_subscriptions: Διαχείριση Συνδρομών Email - manage_email_subscriptions_description: Να επιτρέπεται στους χρήστες να εγγράφονται σε χρήστες με αυτήν την άδεια μέσω ηλεκτρονικού ταχυδρομείου + manage_email_subscriptions_description: Να επιτρέπεται στους χρήστες με αυτό το δικαίωμα να ενεργοποιούν τη λειτουργία email ενημερωτικού δελτίου για το λογαριασμό τους manage_federation: Διαχείριση Ομοσπονδίας manage_federation_description: Επιτρέπει στους χρήστες να αποκλείουν ή να επιτρέπουν τις συναλλαγές με άλλους τομείς και να ελέγχουν την παράδοση manage_invites: Διαχείριση Προσκλήσεων diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml index f9638d926446d4..c1b2407446d874 100644 --- a/config/locales/en-GB.yml +++ b/config/locales/en-GB.yml @@ -792,7 +792,6 @@ en-GB: manage_custom_emojis: Manage Custom Emojis manage_custom_emojis_description: Allows users to manage custom emojis on the server manage_email_subscriptions: Manage Email Subscriptions - manage_email_subscriptions_description: Allow users to subscribe to users with this permission by email manage_federation: Manage Federation manage_federation_description: Allows users to block or allow federation with other domains, and control deliverability manage_invites: Manage Invites diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index 19b6ffcee4357e..b4ed31057786ba 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -487,6 +487,71 @@ es-AR: resolved_dns_records_hint_html: El nombre de dominio resuelve los siguientes dominios MX, los cuales son responsables en última instancia de aceptar el correo electrónico. Bloquear un dominio MX bloqueará los registros de cualquier dirección de correo electrónico que utilice el mismo dominio MX, incluso si el nombre de dominio visible es diferente. Tené cuidado de no bloquear los principales proveedores de correo electrónico. resolved_through_html: Resuelto a través de %{domain} title: Dominios bloqueados de correo electrónico + 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 + subscribers: Suscriptores + title: Listas de correo + additional_footer_texts: + show: + title: Texto de pie de página adicional + compliance_settings: + additional_footer_text: + action: Administrar + hint: Texto opcional que aparece solo en el pie de los correos electrónicos del boletín de noticias + title: Texto de pie de página adicional + lead: Los boletines de correo electrónico pueden considerarse correos electrónicos de marketing, dependiendo de las jurisdicciones en las que operás. + privacy_policy: + action: Administrar + hint: Esta política está vinculada en el pie de cada correo electrónico + title: Política de privacidad + title: Configuración de cumplimiento + danger_zone: + disable_feature: + action: Deshabilitar + hint: Deshabilitar función para todas las cuentas + title: Deshabilitar función + erase_all_data: + action: Eliminar datos + hint: Eliminar permanentemente todos los correos electrónicos de todas las listas de correo + title: Eliminar todos los datos + title: Zona de peligro + disabled_msg: Las suscripciones de correo electrónico se deshabilitaron correctamente. + index: + disabled: + cannot_be_enabled: Tu proveedor técnico no habilitó esta función para tu servidor. + description: Esta función permite a las cuentas especificadas agregar un widget a sus perfiles, permitiendo a los visitantes sin una cuenta de Mastodon recibir sus mensajes por correo electrónico. + get_started: Primeros pasos + lead: Permitir a los visitantes recibir mensajes por correo electrónico de cuentas dedicadas en este servidor. + title: Boletines de noticias + purged_msg: Todos los datos de las suscripciones de correo electrónico están siendo eliminados. + roles: + accounts: Cuentas + edit_role: Editar rol + empty: + hint: Nadie tiene permiso para usar esta función. + no_roles_added: No hay roles agregados + lead: Las cuentas con los siguientes roles pueden habilitar esta función en sus perfiles. + manage_roles: Administrar roles + role_name: Nombre del rol + title: Roles + setups: + show: + enable_feature: Habilitar función + important_information: Información importante + list: + 1_permission_explanation: Cuando esta función está habilitada, las cuentas con los permisos designados pueden agregar un formulario de recopilación de correo electrónico a sus perfiles. + 2_feature_explanation: Cuando los visitantes se registren en la página de perfil de una cuenta y confirmen su suscripción, comenzarán a recibir actualizaciones por correo electrónico cuando la cuenta cree nuevos mensajes públicos. + 3_privacy_policy_warning: Los administradores del servidor tendrán acceso a PII (direcciones de correo electrónico). Como tal, la política de privacidad y los términos de servicio para el servidor deben ser actualizados antes de usar esta función. + 4_cost_warning: Los correos electrónicos pueden incurrir en un cargo dependiendo de la configuración del alojamiento. Hable con su proveedor de alojamiento antes de habilitar esta función, ya que la misma podría aumentar drásticamente la cantidad de correos electrónicos enviados desde tu servidor. export_domain_allows: new: title: Importar permisos de dominio @@ -792,7 +857,7 @@ es-AR: manage_custom_emojis: Administrar emojis personalizados manage_custom_emojis_description: Permite a los usuarios administrar emojis personalizados en el servidor manage_email_subscriptions: Administrar suscripciones de correo electrónico - manage_email_subscriptions_description: Permitir a los usuarios suscribirse a usuarios con este permiso por correo electrónico + manage_email_subscriptions_description: Permitir a los usuarios con este permiso habilitar la función del boletín de noticias por correo electrónico para sus cuentas manage_federation: Administrar Federación manage_federation_description: Permite a los usuarios bloquear o permitir la federación con otros dominios y controlar las entregas manage_invites: Administrar invitaciones diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index 010e63c374673c..8a3e953d3097ca 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -487,6 +487,71 @@ es-MX: resolved_dns_records_hint_html: El nombre de dominio resuelve los siguientes dominios MX, los cuales son responsables en última instancia de aceptar el correo electrónico. Bloquear un dominio MX bloqueará los registros de cualquier dirección de correo electrónico que utilice el mismo dominio MX, incluso si el nombre de dominio visible es diferente. Ten cuidado de no bloquear los principales proveedores de correo electrónico. resolved_through_html: Resuelto a través de %{domain} title: Dominios de correo bloqueados + 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: Las cuentas que han habilitado la función y tienen suscriptores se mostrarán a continuación. + status: Estado + subscribers: Suscriptores + title: Listas de correo + additional_footer_texts: + show: + title: Texto de pie de página adicional + compliance_settings: + additional_footer_text: + action: Administrar + hint: Texto opcional que aparece únicamente en el pie de los correos electrónicos del boletín de noticias + title: Texto de pie de página adicional + lead: Los boletines de correo electrónico pueden considerarse correos electrónicos de marketing, dependiendo de las jurisdicciones en las que operas. + privacy_policy: + action: Administrar + hint: Esta política está enlazada en el pie de cada correo electrónico + title: Política de privacidad + title: Ajustes de cumplimiento normativo + danger_zone: + disable_feature: + action: Desactivar + hint: Desactivar función para todas las cuentas + title: Desactivar función + erase_all_data: + action: Borrar datos + hint: Borra permanentemente todos los correos electrónicos de todas las listas de correo + title: Borrar todos los datos + title: Zona peligrosa + disabled_msg: Las suscripciones de correo electrónico se han desactivado correctamente. + index: + disabled: + cannot_be_enabled: Tu proveedor técnico no ha habilitado esta función para tu servidor. + description: Esta función permite a las cuentas especificadas añadir un widget a sus perfiles, permitiendo a los visitantes sin una cuenta de Mastodon recibir sus publicaciones por correo electrónico. + get_started: Primeros pasos + lead: Permitir a los visitantes recibir publicaciones por correo electrónico de cuentas dedicadas en este servidor. + title: Boletines de correo electrónico + purged_msg: Todos los datos de las suscripciones de correo electrónico están siendo borrados. + roles: + accounts: Cuentas + edit_role: Editar rol + empty: + hint: Nadie tiene permiso para usar esta función. + no_roles_added: No se han añadido roles + lead: Las cuentas con los siguientes roles pueden habilitar esta función en sus perfiles. + manage_roles: Administrar roles + role_name: Nombre del rol + title: Roles + setups: + show: + enable_feature: Activar función + important_information: Información importante + list: + 1_permission_explanation: Cuando esta función está activada, las cuentas con los permisos designados pueden añadir un formulario de recopilación de correo electrónico a sus perfiles. + 2_feature_explanation: Cuando los visitantes se registran en la página de perfil de una cuenta y confirman su suscripción, comenzarán a recibir actualizaciones por correo electrónico cuando la cuenta cree nuevas publicaciones públicas. + 3_privacy_policy_warning: Los administradores del servidor tendrán acceso a información de identificación personal (direcciones de correo electrónico). Por lo tanto, la política de privacidad y los Términos del Servicio del servidor deben actualizarse antes de usar esta función. + 4_cost_warning: Los correos electrónicos pueden incurrir en un cargo dependiendo de la configuración del alojamiento. Habla con tu proveedor de alojamiento antes de activarlo, ya que esta característica podría aumentar drásticamente la cantidad de correos electrónicos enviados desde tu servidor. export_domain_allows: new: title: Importar dominios permitidos @@ -792,7 +857,7 @@ es-MX: manage_custom_emojis: Administrar Emojis Personalizados manage_custom_emojis_description: Permite a los usuarios gestionar emojis personalizados en el servidor manage_email_subscriptions: Gestionar suscripciones por correo electrónico - manage_email_subscriptions_description: Permitir a los usuarios suscribirse a otros usuarios con este permiso por correo electrónico + manage_email_subscriptions_description: Permite a los usuarios con este permiso habilitar la función del boletín de noticias por correo electrónico para su cuenta manage_federation: Administrar Federación manage_federation_description: Permite a los usuarios bloquear o permitir la federación con otros dominios, y controlar la entregabilidad manage_invites: Administrar Invitaciones diff --git a/config/locales/es.yml b/config/locales/es.yml index 3cdc00f1f9ccc3..4c81cacafe4514 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -487,6 +487,71 @@ es: resolved_dns_records_hint_html: El nombre de dominio resuelve los siguientes dominios MX, los cuales son responsables en última instancia de aceptar el correo electrónico. Bloquear un dominio MX bloqueará los registros de cualquier dirección de correo electrónico que utilice el mismo dominio MX, incluso si el nombre de dominio visible es diferente. Ten cuidado de no bloquear los principales proveedores de correo electrónico. resolved_through_html: Resuelto a través de %{domain} title: Dominios de correo bloqueados + 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 + subscribers: Suscriptores + title: Listas de correo + additional_footer_texts: + show: + title: Texto de pie de página adicional + compliance_settings: + additional_footer_text: + action: Administrar + hint: Texto opcional que aparece únicamente en el pie de los correos electrónicos del boletín de noticias + title: Texto de pie de página adicional + lead: Los boletines de correo electrónico pueden considerarse correos electrónicos de marketing, dependiendo de las jurisdicciones en las que operas. + privacy_policy: + action: Administrar + hint: Esta política está enlazada en el pie de cada correo electrónico + title: Política de privacidad + title: Ajustes de cumplimiento normativo + danger_zone: + disable_feature: + action: Desactivar + hint: Desactivar función para todas las cuentas + title: Desactivar función + erase_all_data: + action: Borrar datos + hint: Borra permanentemente todos los correos electrónicos de todas las listas de correo + title: Borrar todos los datos + title: Zona peligrosa + disabled_msg: Las suscripciones de correo electrónico se han desactivado correctamente. + index: + disabled: + cannot_be_enabled: Tu proveedor técnico no ha habilitado esta función para tu servidor. + description: Esta función permite a las cuentas especificadas añadir un widget a sus perfiles, permitiendo a los visitantes sin una cuenta de Mastodon recibir sus publicaciones por correo electrónico. + get_started: Primeros pasos + lead: Permitir a los visitantes recibir publicaciones por correo electrónico de cuentas dedicadas en este servidor. + title: Boletines de correo electrónico + purged_msg: Todos los datos de las suscripciones de correo electrónico están siendo borrados. + roles: + accounts: Cuentas + edit_role: Editar rol + empty: + hint: Nadie tiene permiso para usar esta función. + no_roles_added: No se han añadido roles + lead: Las cuentas con los siguientes roles pueden habilitar esta función en sus perfiles. + manage_roles: Administrar roles + role_name: Nombre del rol + title: Roles + setups: + show: + enable_feature: Activar función + important_information: Información importante + list: + 1_permission_explanation: Cuando esta función está activada, las cuentas con los permisos designados pueden añadir un formulario de recopilación de correo electrónico a sus perfiles. + 2_feature_explanation: Cuando los visitantes se registran en la página de perfil de una cuenta y confirman su suscripción, comenzarán a recibir actualizaciones por correo electrónico cuando la cuenta cree nuevas publicaciones públicas. + 3_privacy_policy_warning: Los administradores del servidor tendrán acceso a información de identificación personal (direcciones de correo electrónico). Por lo tanto, la política de privacidad y los Términos del Servicio del servidor deben actualizarse antes de usar esta función. + 4_cost_warning: Los correos electrónicos pueden incurrir en un cargo dependiendo de la configuración del alojamiento. Habla con tu proveedor de alojamiento antes de activarlo, ya que esta característica podría aumentar drásticamente la cantidad de correos electrónicos enviados desde tu servidor. export_domain_allows: new: title: Importar dominios permitidos @@ -792,7 +857,7 @@ es: manage_custom_emojis: Administrar Emojis Personalizados manage_custom_emojis_description: Permite a los usuarios gestionar emojis personalizados en el servidor manage_email_subscriptions: Administrar suscripciones de correo electrónico - manage_email_subscriptions_description: Permitir a los usuarios suscribirse a usuarios con este permiso por correo electrónico + manage_email_subscriptions_description: Permite a los usuarios con este permiso habilitar la función del boletín de noticias por correo electrónico para su cuenta manage_federation: Administrar Federación manage_federation_description: Permite a los usuarios bloquear o permitir la federación con otros dominios, y controlar la entregabilidad manage_invites: Administrar Invitaciones diff --git a/config/locales/et.yml b/config/locales/et.yml index 3d4068c9141d97..bedf62ade49808 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -487,6 +487,58 @@ et: resolved_dns_records_hint_html: Domeeninimi lahendatakse järgmistele MX-domeenidele, mis on lõppkokkuvõttes vastutavad e-kirjade vastuvõtmise eest. MX-domeeni blokeerimine blokeerib registreerimise mis tahes e-posti aadressilt, mis kasutab sama MX-domeeni, isegi kui nähtav domeeninimi on erinev. Ole ettevaatlik, et mitte blokeerida peamisi e-posti teenusepakkujaid. resolved_through_html: Lahendatud %{domain} kaudu title: Blokeeritud e-posti domeenid + 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 + subscribers: Tellijad + title: Meililistid + additional_footer_texts: + show: + title: Täiendav jaluse tekst + compliance_settings: + additional_footer_text: + action: Halda + hint: Valikuline tekst, mida kuvatakse ainult uudis-e-kirjade jaluses + title: Täiendav jaluse tekst + lead: E-posti uudiskirju võidakse käsitleda turundusmeilidena, sõltuvalt sellest, millises jurisdiktsioonis tegutsetakse. + privacy_policy: + action: Haldamine + hint: Need reeglid lingitakse iga e-kirja jalusesse + title: Privaatsusreeglid + title: Vastavuse seaded + danger_zone: + disable_feature: + action: Keela + hint: Lülita funktsioon kõikidel kontodel välja + title: Keela funktsioon + erase_all_data: + action: Kustuta andmed + hint: Kustutab kõigist meililistidest kõik e-kirjad lõplikult + title: Kustuta kõik andmed + title: Ohtlik ala + disabled_msg: E-kirja teavituste tellimine on edukalt keelatud. + index: + disabled: + cannot_be_enabled: Tehniline teenusepakkuja ei ole seda funktsiooni sinu serveris aktiveerinud. + description: See funktsioon võimaldab määratud kontodel lisada oma profiilile vidina, mis võimaldab külastajatel, kellel pole Mastodoni kontot, saada kontode postitusi e-posti teel. + get_started: Alustamine + lead: Võimalda külastajatel saada selle serveri määratud kontodelt postitusi e-posti teel. + title: E-posti uudiskirjad + purged_msg: Kõik e-posti tellimuste andmed kustutatakse. + roles: + accounts: Kontod + edit_role: Muuda rolli + empty: + hint: Kellelgi pole õigust seda oskust kasutada. + no_roles_added: Rolle pole lisatud export_domain_allows: new: title: Lubatud domeenide import @@ -792,7 +844,6 @@ et: manage_custom_emojis: Halda isetehtud emotikone manage_custom_emojis_description: Lubab kasutajatel hallata serveris isetehtud emotikone manage_email_subscriptions: Halda e-posti tellimusi - manage_email_subscriptions_description: Luba selle õigusega kasutajatel tellida kasutajaid e-posti teel manage_federation: Halda födereerumist manage_federation_description: Lubab kasutajail keelata või lubada föderatsioone teiste domeenidega ja hallata ühenduvust manage_invites: Halda kutseid diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 50e65f71d2129c..3d0608f59c90ad 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -487,6 +487,44 @@ fi: resolved_dns_records_hint_html: Verkkotunnusnimi kytkeytyy seuraaviin MX-verkkotunnuksiin, jotka ovat viime kädessä vastuussa sähköpostin vastaanottamisesta. MX-verkkotunnuksen estäminen estää rekisteröitymisen mistä tahansa sähköpostiosoitteesta, joka käyttää samaa MX-verkkotunnusta, vaikka näkyvä verkkotunnuksen nimi olisikin erilainen. Varo estämästä suuria sähköpostipalvelujen tarjoajia. resolved_through_html: Ratkaistu verkkotunnuksen %{domain} kautta title: Estetyt sähköpostiverkkotunnukset + email_subscriptions: + accounts: + account: Tili + empty: + hint: Millään tilillä ei ole vielä tilaajia. + no_lists_yet: Ei vielä listoja + lead: Alla näkyvät tilit, jotka ovat ottaneet ominaisuuden käyttöön ja joilla on tilaajia. + status: Tila + subscribers: Tilaajia + title: Postituslistat + additional_footer_texts: + show: + title: Alatunnisteen lisäteksti + compliance_settings: + additional_footer_text: + action: Hallitse + title: Alatunnisteen lisäteksti + privacy_policy: + action: Hallitse + title: Tietosuojakäytäntö + danger_zone: + disable_feature: + action: Poista käytöstä + hint: Poista ominaisuus käytöstä kaikilta tileiltä + title: Poista ominaisuus käytöstä + title: Vaaravyöhyke + index: + disabled: + get_started: Aloita + roles: + edit_role: Muokkaa roolia + manage_roles: Hallitse rooleja + role_name: Roolin nimi + title: Roolit + setups: + show: + enable_feature: Ota ominaisuus käyttöön + important_information: Tärkeää tietoa export_domain_allows: new: title: Tuo sallittuja verkkotunnuksia @@ -792,7 +830,6 @@ fi: manage_custom_emojis: Hallita mukautettuja emojeita manage_custom_emojis_description: Sallii käyttäjien hallita palvelimen mukautettuja emojeita manage_email_subscriptions: Hallita sähköpostitilauksia - manage_email_subscriptions_description: Sallii käyttäjien tilata sähköpostitse käyttäjiä, joilla on tämä käyttöoikeus manage_federation: Hallita federointia manage_federation_description: Sallii käyttäjien estää tai sallia federointi muiden verkkotunnusten kanssa ja hallita toimitusta manage_invites: Hallita kutsuja diff --git a/config/locales/fr-CA.yml b/config/locales/fr-CA.yml index 2aba25e5dc85f8..603ed0c15b770d 100644 --- a/config/locales/fr-CA.yml +++ b/config/locales/fr-CA.yml @@ -792,7 +792,6 @@ fr-CA: manage_custom_emojis: Gérer les émojis personnalisés manage_custom_emojis_description: Permet aux utilisateur⋅rice⋅s de gérer les émoticônes personnalisées sur le serveur manage_email_subscriptions: Gérer les abonnements par courriel - manage_email_subscriptions_description: Autoriser l'abonnement par courriel aux comptes ayant cette permission manage_federation: Gérer de la féderation manage_federation_description: Permet aux utilisateur⋅rice⋅s de bloquer ou d'autoriser la fédération avec d'autres domaines, et de contrôler la capacité de livraison manage_invites: Gérer les invitations diff --git a/config/locales/fr.yml b/config/locales/fr.yml index ed6d12c4371999..1522d8f980775a 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -792,7 +792,6 @@ fr: manage_custom_emojis: Gérer les émojis personnalisés manage_custom_emojis_description: Permet aux utilisateur⋅rice⋅s de gérer les émoticônes personnalisées sur le serveur manage_email_subscriptions: Gérer les abonnements par courriel - manage_email_subscriptions_description: Autoriser l'abonnement par courriel aux comptes ayant cette permission manage_federation: Gérer de la féderation manage_federation_description: Permet aux utilisateur⋅rice⋅s de bloquer ou d'autoriser la fédération avec d'autres domaines, et de contrôler la capacité de livraison manage_invites: Gérer les invitations diff --git a/config/locales/ga.yml b/config/locales/ga.yml index c10b74cdb90c03..46096a3c48b54b 100644 --- a/config/locales/ga.yml +++ b/config/locales/ga.yml @@ -840,7 +840,6 @@ ga: manage_custom_emojis: Bainistigh Emojis Saincheaptha manage_custom_emojis_description: Ligeann sé d'úsáideoirí emojis saincheaptha a bhainistiú ar an bhfreastalaí manage_email_subscriptions: Bainistigh Síntiúis Ríomhphoist - manage_email_subscriptions_description: Ceadaigh d’úsáideoirí liostáil le húsáideoirí leis an gcead seo trí ríomhphost manage_federation: Cónaidhm a bhainistiú manage_federation_description: Ligeann sé d’úsáideoirí cónaidhm a bhlocáil nó a cheadú le fearainn eile, agus inseachadacht a rialú manage_invites: Bainistigh Cuirí diff --git a/config/locales/gd.yml b/config/locales/gd.yml index 656564d24350dc..8ba20031e8ad2a 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -824,7 +824,6 @@ gd: manage_custom_emojis: Stiùireadh nan Emojis gnàthaichte manage_custom_emojis_description: Leigidh seo le cleachdaichean Emojis gnàthaichte a stiùireadh air an fhrithealaiche manage_email_subscriptions: Stiùireadh fo-sgrìobhaidhean puist-d - manage_email_subscriptions_description: Leigidh seo le cleachdaichean fo-sgrìobhadh air a’ phost-d a dhèanamh air na cleachdaichean aig a bheil an cead seo manage_federation: Stiùireadh a’ cho-nasgaidh manage_federation_description: Leigidh seo le cleachdaichean an co-nasgadh le àrainnean eile a bhacadh no a cheadachadh agus stiùireadh dè ghabhas lìbhrigeadh manage_invites: Stiùireadh nan cuiridhean diff --git a/config/locales/gl.yml b/config/locales/gl.yml index e27b4b27cbd5d2..441e067cf9a7f9 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -792,7 +792,6 @@ gl: manage_custom_emojis: Xestionar Emojis personalizados manage_custom_emojis_description: Permite xestionar os emojis personalizados do servidor manage_email_subscriptions: Xestionar subscripcións por correo - manage_email_subscriptions_description: Permitir que as usuarias se subscriban por correo a outras usuarias con este permiso manage_federation: Xestionar a federación manage_federation_description: Permite bloquear ou permitir a federación con outros dominios, e controlar as entregas manage_invites: Xestionar Convites diff --git a/config/locales/he.yml b/config/locales/he.yml index b340e2d446419a..ea0b6aa507cebd 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -824,7 +824,6 @@ he: manage_custom_emojis: ניהול סמלונים בהתאמה אישית manage_custom_emojis_description: מאפשר למשתמשים לנהל סמלונים בהתאמה אישית של השרת manage_email_subscriptions: ניהול הרשמות דוא"ל - manage_email_subscriptions_description: לאפשר למשתמשיםות להרשים למשתמשיםות ע"י הרשאה בדוא"ל manage_federation: ניהול פדרציה manage_federation_description: מאפשר למשתמשים לחסום או לאפשר התממשקות עם שמות מתחם אחרים manage_invites: ניהול הזמנות diff --git a/config/locales/hu.yml b/config/locales/hu.yml index fdf584155ef1f1..837bb1d6dc0bc5 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -792,7 +792,6 @@ hu: manage_custom_emojis: Egyedi emodzsik kezelése manage_custom_emojis_description: Lehetővé teszi a felhasználó számára, hogy a kiszolgáló egyéni emodzsiait kezelje manage_email_subscriptions: E-mail-feliratkozások kezelése - manage_email_subscriptions_description: Engedélyezés, hogy a felhasználók e-maillel feliratkozzanak az ilyen jogosultságú felhasználókra manage_federation: Föderáció kezelése manage_federation_description: Lehetővé teszi a felhasználó számára, hogy más domainnekkel való föderációt engedélyezzen vagy letiltson, illetve szabályozza a kézbesítést manage_invites: Meghívások kezelése diff --git a/config/locales/is.yml b/config/locales/is.yml index 8d82adf06154a5..15e924962e8dac 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -792,7 +792,6 @@ is: manage_custom_emojis: Sýsla með sérsniðin lyndistákn manage_custom_emojis_description: Leyfir notendum að sýsla með sérsniðin lyndistákn á netþjóninum manage_email_subscriptions: Sýsla með tölvupóstáskriftir - manage_email_subscriptions_description: Leyfa notendum að gerast áskrifendur að tölvupósti frá notendum með þessa heimild manage_federation: Sýsla með netþjónasambönd manage_federation_description: Leyfir notendum að loka á eða leyfa samþættingu við önnur lén (federation) og stýra afhendingu skilaboða manage_invites: Sýsla með boðsgesti diff --git a/config/locales/it.yml b/config/locales/it.yml index 92ed0fb6d00ebc..317d829cd5e9b0 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -487,6 +487,9 @@ it: resolved_dns_records_hint_html: Il nome di dominio si risolve nei seguenti domini MX, che sono in ultima analisi responsabili dell'accettazione delle e-mail. Il blocco di un dominio MX bloccherà le registrazioni da qualsiasi indirizzo e-mail che utilizzi lo stesso dominio MX, anche se il nome di dominio visibile è diverso. Fai attenzione a non bloccare i principali provider di posta elettronica. resolved_through_html: Risolto attraverso %{domain} title: Domini e-mail bloccati + email_subscriptions: + accounts: + account: Account export_domain_allows: new: title: Importare i permessi di dominio @@ -792,7 +795,6 @@ it: manage_custom_emojis: Gestisci emoji personalizzate manage_custom_emojis_description: Consente agli utenti di gestire emoji personalizzate sul server manage_email_subscriptions: Gestisci le iscrizioni via email - manage_email_subscriptions_description: Consenti agli utenti di iscriversi tramite email agli utenti, con questa autorizzazione manage_federation: Gestisci Federazione manage_federation_description: Consente agli utenti di bloccare o consentire la federazione con altri domini e controllare la consegnabilità manage_invites: Gestisci Inviti diff --git a/config/locales/nan-TW.yml b/config/locales/nan-TW.yml index ac96e97aeac2cb..513fdf8f49fbb2 100644 --- a/config/locales/nan-TW.yml +++ b/config/locales/nan-TW.yml @@ -776,7 +776,6 @@ nan-TW: manage_custom_emojis: 管理自訂ê Emoji manage_custom_emojis_description: 允准用者管理佇tsit ê服侍器ê自訂Emoji manage_email_subscriptions: 管理訂電子phue - manage_email_subscriptions_description: 允准用者用電子phue訂有chit ê權限ê用者 manage_federation: 管理聯邦 manage_federation_description: 允准用者封鎖á是允准kap其他域名相連,mā控制寄送ê能力 manage_invites: 管理邀請 diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 2baf36f4e599ca..8531bc6de70f58 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -487,6 +487,56 @@ nl: resolved_dns_records_hint_html: De domeinnaam slaat op de volgende MX-domeinen die uiteindelijk verantwoordelijk zijn voor het accepteren van e-mail. Het blokkeren van een MX-domein blokkeert aanmeldingen van elk e-mailadres dat hetzelfde MX-domein gebruikt, zelfs als de zichtbare domeinnaam anders is. Pas op dat u geen grote e-mailproviders blokkeert. resolved_through_html: Geblokkeerd via %{domain} title: Geblokkeerde e-maildomeinen + 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 + status: Status + subscribers: Abonnees + title: Mailinglijsten + additional_footer_texts: + show: + title: Aanvullende voettekst + compliance_settings: + additional_footer_text: + action: Beheren + hint: Optionele tekst dat alleen onderin de e-mailnieuwsbrief verschijnt + title: Aanvullende voettekst + privacy_policy: + action: Beheren + title: Privacybeleid + title: Compliance-instellingen + danger_zone: + disable_feature: + action: Uitschakelen + hint: Functionaliteit voor alle accounts uitschakelen + title: Functionaliteit uitschakelen + erase_all_data: + action: Gegevens verwijderen + title: Alle gegevens verwijderen + title: Gevarenzone + index: + disabled: + get_started: Aan de slag + title: E-mailnieuwsbrieven + roles: + accounts: Accounts + edit_role: Rol bewerken + empty: + hint: Niemand heeft het recht om deze functionaliteit te gebruiken. + no_roles_added: Geen rollen toegevoegd + manage_roles: Rollen beheren + role_name: Naam rol + title: Rollen + setups: + show: + enable_feature: Functionaliteit inschakelen + important_information: Belangrijke informatie export_domain_allows: new: title: Toegestane domeinen importeren @@ -792,7 +842,6 @@ nl: manage_custom_emojis: Lokale emoji's beheren manage_custom_emojis_description: Staat gebruikers toe om lokale emoji's op de server te beheren manage_email_subscriptions: E-mailabonnementen beheren - manage_email_subscriptions_description: Sta gebruikers toe om zich per e-mail te abonneren op gebruikers met deze rechten manage_federation: Federatie beheren manage_federation_description: Staat gebruikers toe om federatie met andere domeinen te blokkeren of toe te staan en om de bezorging te bepalen manage_invites: Uitnodigingen beheren @@ -1745,7 +1794,9 @@ nl: title_html: "%{name} werkte een verzameling bij waar jij in zit" generic: sign_in: In de Mastodon web-app inloggen + summary_html: Je gebruikt een app die de meest recente versie van Mastodon niet ondersteunt. Ga naar %{link} voor de volledige functionaliteit. moderation_warning: + summary_html: Je gebruikt een app die de meest recente versie van Mastodon niet ondersteunt. %{link}. title: Je hebt een moderatie-waarschuwing ontvangen. severed_relationships: summary_html: Een beheerder van %{from} heeft %{target} geschorst, wat betekent dat je geen updates meer van deze gebruiker kunt ontvangen of met deze gebruiker kunt communiceren. Ga naar %{link} voor een overzicht van verloren verbindingen. diff --git a/config/locales/nn.yml b/config/locales/nn.yml index ecf2d272905a68..7e329904526b8f 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -792,7 +792,6 @@ 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: Folk kan abonnera på brukarar med dette løyvet via epost 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 diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 9fa6084d3ee59b..b19d0e34cf3e92 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -792,7 +792,6 @@ pt-BR: manage_custom_emojis: Gerenciar Emojis Personalizados manage_custom_emojis_description: Permite aos usuários gerenciar emojis personalizados no servidor manage_email_subscriptions: Gerenciar assinaturas do e-mail - manage_email_subscriptions_description: Permitir que usuários se inscrevam com essa permissão por e-mail manage_federation: Gerenciar Federação manage_federation_description: Permite aos usuários bloquear ou permitir federação com outros domínios e controlar a entregabilidade manage_invites: Gerenciar convites diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index cb190e250c75bf..84cec11eab730a 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -792,7 +792,6 @@ pt-PT: manage_custom_emojis: Gerir emojis personalizados manage_custom_emojis_description: Permite aos utilizadores gerirem os emojis personalizados do servidor manage_email_subscriptions: Gerir Subscrições de E-mail - manage_email_subscriptions_description: Permitir que os utilizadores subscrevam por e-mail às atualizações dos utilizadores com esta permissão manage_federation: Gerir federação manage_federation_description: Permite aos utilizadores bloquearem ou permitirem a federação com outros domínios e controlar a entregabilidade manage_invites: Gerir convites diff --git a/config/locales/simple_form.da.yml b/config/locales/simple_form.da.yml index 99e4525106f8d4..6f6c3352fa82bf 100644 --- a/config/locales/simple_form.da.yml +++ b/config/locales/simple_form.da.yml @@ -92,6 +92,7 @@ da: closed_registrations_message: Vises, når tilmeldinger er lukket content_cache_retention_period: Alle indlæg fra andre servere (herunder fremhævelser og besvarelser) slettes efter det angivne antal dage uden hensyn til lokal brugerinteraktion med disse indlæg. Dette omfatter indlæg, hvor en lokal bruger har markeret dem som bogmærker eller favoritter. Private omtaler mellem brugere fra forskellige instanser vil også være tabt og umulige at gendanne. Brugen af denne indstilling er beregnet til særlige formål instanser og bryder mange brugerforventninger ved implementering til almindelig brug. custom_css: Man kan anvende tilpassede stilarter på Mastodon-webversionen. + email_footer_text: Valgfri tekst, der vises i sidefoden på e-mail-nyhedsbreve. favicon: WEBP, PNG, GIF eller JPG. Tilsidesætter standard Mastodon favikonet på mobilenheder med et tilpasset ikon. landing_page: Vælger, hvilken side nye besøgende ser, når de først ankommer til din server. Hvis du vælger "Trender", skal trends være aktiveret i Opdagelse-indstillingerne. Hvis du vælger "Lokalt feed", skal "Adgang til live feeds med lokale indlæg" være indstillet til "Alle" i Opdagelse-indstillingerne. mascot: Tilsidesætter illustrationen i den avancerede webgrænseflade. @@ -294,6 +295,7 @@ da: closed_registrations_message: Tilpasset besked, når tilmelding er utilgængelig content_cache_retention_period: Opbevaringsperiode for eksternt indhold custom_css: Tilpasset CSS + email_footer_text: Yderligere tekst til sidefod favicon: Favikon landing_page: Landingside for nye besøgende local_live_feed_access: Adgang til live feeds med lokale indlæg @@ -322,6 +324,9 @@ da: trendable_by_default: Tillad ikke-reviderede trends trends: Aktivér trends wrapstodon: Aktivér Wrapstodon + form_email_subscriptions_confirmation: + agreement_email_volume: Jeg er indforstået med, at aktivering af denne funktion kan medføre en betydelig stigning i antallet af e-mails, der sendes fra serveren, og at jeg alene er ansvarlig for eventuelle omkostninger i den forbindelse. + agreement_privacy_and_terms: Jeg har opdateret privatlivspolitikken og servicevilkårene. interactions: must_be_follower: Blokér notifikationer fra bruger, der ikke følger dig must_be_following: Blokér notifikationer fra brugere, du ikke følger diff --git a/config/locales/simple_form.el.yml b/config/locales/simple_form.el.yml index 2a346840dcb3ca..26f62f273720e4 100644 --- a/config/locales/simple_form.el.yml +++ b/config/locales/simple_form.el.yml @@ -92,6 +92,7 @@ el: closed_registrations_message: Εμφανίζεται όταν κλείνουν οι εγγραφές content_cache_retention_period: Όλες οι αναρτήσεις από άλλους διακομιστές (συμπεριλαμβανομένων των ενισχύσεων και απαντήσεων) θα διαγραφούν μετά τον καθορισμένο αριθμό ημερών, χωρίς να λαμβάνεται υπόψη οποιαδήποτε αλληλεπίδραση τοπικού χρήστη με αυτές τις αναρτήσεις. Αυτό περιλαμβάνει αναρτήσεις όπου ένας τοπικός χρήστης την έχει χαρακτηρίσει ως σελιδοδείκτη ή αγαπημένη. Θα χαθούν επίσης ιδιωτικές επισημάνσεις μεταξύ χρηστών από διαφορετικές οντότητες και θα είναι αδύνατο να αποκατασταθούν. Η χρήση αυτής της ρύθμισης προορίζεται για οντότητες ειδικού σκοπού και χαλάει πολλές προσδοκίες του χρήστη όταν εφαρμόζεται για χρήση γενική σκοπού. custom_css: Μπορείς να εφαρμόσεις προσαρμοσμένα στυλ στην έκδοση ιστού του Mastodon. + email_footer_text: Προαιρετικό κείμενο που εμφανίζεται στο υποσέλιδο των email ενημερωτικού δελτίου μόνο. favicon: WEBP, PNG, GIF ή JPG. Παρακάμπτει το προεπιλεγμένο favicon του Mastodon με ένα προσαρμοσμένο εικονίδιο. landing_page: Επιλέγει ποια σελίδα βλέπουν οι νέοι επισκέπτες όταν φτάνουν για πρώτη φορά στο διακομιστή σας. Αν επιλέξετε "Τάσεις", τότε οι τάσεις πρέπει να είναι ενεργοποιημένες στις Ρυθμίσεις Ανακάλυψης. Αν επιλέξετε "Τοπική ροή", τότε το "Πρόσβαση σε ζωντανές ροές με τοπικές αναρτήσεις" πρέπει να οριστεί σε "Όλοι" στις Ρυθμίσεις Ανακάλυψης. mascot: Παρακάμπτει την εικονογραφία στην προηγμένη διεπαφή ιστού. @@ -294,6 +295,7 @@ el: closed_registrations_message: Προσαρμοσμένο μήνυμα όταν οι εγγραφές δεν είναι διαθέσιμες content_cache_retention_period: Περίοδος διατήρησης απομακρυσμένου περιεχομένου custom_css: Προσαρμοσμένη CSS + email_footer_text: Πρόσθετο κείμενο υποσέλιδου favicon: Favicon landing_page: Σελίδα προσγείωσης για νέους επισκέπτες local_live_feed_access: Πρόσβαση σε ζωντανές ροές με ανάδειξη τοπικών αναρτήσεων @@ -322,6 +324,9 @@ el: trendable_by_default: Επίτρεψε τις τάσεις χωρίς προηγούμενο έλεγχο trends: Ενεργοποίηση τάσεων wrapstodon: Ενεργοποίηση Wrapstodon + form_email_subscriptions_confirmation: + agreement_email_volume: Κατανοώ ότι η ενεργοποίηση αυτής της λειτουργίας μπορεί να αυξήσει σημαντικά τον όγκο των μηνυμάτων email που αποστέλλονται από τον διακομιστή και ότι είμαι αποκλειστικά υπεύθυνος για κάθε κόστος που θα προκύψει. + agreement_privacy_and_terms: Έχω ενημερώσει την Πολιτική Απορρήτου και τους Όρους Υπηρεσίας. interactions: must_be_follower: Μπλόκαρε τις ειδοποιήσεις από όσους δεν σε ακολουθούν must_be_following: Μπλόκαρε τις ειδοποιήσεις από όσους δεν ακολουθείς diff --git a/config/locales/simple_form.es-AR.yml b/config/locales/simple_form.es-AR.yml index 0988e6b91084f8..178a0b5700f06c 100644 --- a/config/locales/simple_form.es-AR.yml +++ b/config/locales/simple_form.es-AR.yml @@ -92,6 +92,7 @@ es-AR: closed_registrations_message: Mostrado cuando los registros están cerrados content_cache_retention_period: Todos los mensajes de otros servidores (incluyendo adhesiones y respuestas) se eliminarán después del número de días especificado, sin tener en cuenta la interacción del usuario local con esos mensajes. Esto incluye mensajes que un usuario local haya agregado a marcadores o los haya marcado como favoritos. Las menciones privadas entre usuarios de diferentes servidores también se perderán y también serán imposibles de restaurar. El uso de esta configuración está destinado a servidores de propósito especial y rompe muchas expectativas de los usuarios cuando se implementa para uso general. custom_css: Podés aplicar estilos personalizados a la versión web de Mastodon. + email_footer_text: Texto opcional que aparece solo en el pie de los correos electrónicos del boletín de noticias. favicon: WEBP, PNG, GIF o JPG. Reemplaza el favicón predeterminado de Mastodon con uno personalizado. landing_page: Selecciona qué página se carga para los nuevos visitantes cuando llegan por primera vez a tu servidor. Si seleccionás «Tendencias», entonces las tendencias tienen que estar habilitadas en la configuración de «Descubrimiento». Si seleccionás «Línea temporal local», entonces «Acceso a líneas temporales en vivo, destacando mensajes locales» tiene que estar establecida a «Todos» en la configuración de «Descubrimiento». mascot: Reemplaza la ilustración en la interface web avanzada. @@ -294,6 +295,7 @@ es-AR: closed_registrations_message: Mensaje personalizado cuando los registros no están disponibles content_cache_retention_period: Período de retención de contenido remoto custom_css: CSS personalizado + email_footer_text: Texto de pie de página adicional favicon: Favicón landing_page: Página de carga para nuevos visitantes local_live_feed_access: Acceso a líneas temporales en vivo, destacando mensajes locales @@ -322,6 +324,9 @@ es-AR: trendable_by_default: Permitir tendencias sin revisión previa trends: Habilitar tendencias wrapstodon: Habilitar MastodonAnual + form_email_subscriptions_confirmation: + agreement_email_volume: Entiendo que habilitar esta función puede aumentar significativamente el volumen de correos electrónicos enviados desde el servidor y que soy la única persona responsable de cualquier coste incurrido. + agreement_privacy_and_terms: Actualicé la política de privacidad y los términos del servicio. interactions: must_be_follower: Bloquear notificaciones de cuentas que no te siguen must_be_following: Bloquear notificaciones de cuentas que no seguís diff --git a/config/locales/simple_form.es-MX.yml b/config/locales/simple_form.es-MX.yml index f9d4a7a6f0f6db..9eb9d85446179a 100644 --- a/config/locales/simple_form.es-MX.yml +++ b/config/locales/simple_form.es-MX.yml @@ -92,6 +92,7 @@ es-MX: closed_registrations_message: Mostrado cuando los registros están cerrados content_cache_retention_period: Todas las publicaciones de otros servidores (incluyendo impuestos y respuestas) serán borrados después del número de días especificado, sin tener en cuenta cualquier interacción del usuario local con esas publicaciones. Esto incluye los mensajes que un usuario local haya marcado como favoritos. Las menciones privadas entre usuarios de diferentes instancias también se perderán y será imposible restaurarlas. El uso de esta configuración está pensado para instancias de propósito especial y rompe muchas expectativas de los usuarios cuando se implementa para uso general. custom_css: Puedes aplicar estilos personalizados a la versión web de Mastodon. + email_footer_text: Texto opcional que aparece únicamente en el pie de los correos electrónicos del boletín de correo electrónico. favicon: WEBP, PNG, GIF o JPG. Reemplaza el icono predeterminado de Mastodon con un icono personalizado. landing_page: Selecciona qué página ven los nuevos visitantes cuando llegan por primera vez a tu servidor. Si seleccionas "Tendencias", entonces las tendencias deben estar habilitadas en la Configuración de Descubrimiento. Si selecciona "Cronología local", entonces "Acceso a las cronologías que destacan publicaciones locales" debe configurarse a "Todos" en la Configuración de Descubrimiento. mascot: Reemplaza la ilustración en la interfaz web avanzada. @@ -294,6 +295,7 @@ es-MX: closed_registrations_message: Mensaje personalizado cuando los registros no están disponibles content_cache_retention_period: Periodo de conservación de contenidos remotos custom_css: CSS personalizado + email_footer_text: Texto de pie de página adicional favicon: Favicon landing_page: Página de inicio para nuevos visitantes local_live_feed_access: Acceso a las cronologías que destacan publicaciones locales @@ -322,6 +324,9 @@ es-MX: trendable_by_default: Permitir tendencias sin revisión previa trends: Habilitar tendencias wrapstodon: Habilitar Wrapstodon + form_email_subscriptions_confirmation: + agreement_email_volume: Entiendo que activar esta característica puede aumentar significativamente el volumen de correos electrónicos enviados desde el servidor, y que soy el único responsable de cualquier coste incurrido. + agreement_privacy_and_terms: He actualizado la Política de Privacidad y los Términos del Servicio. interactions: must_be_follower: Bloquear notificaciones de personas que no te siguen must_be_following: Bloquear notificaciones de personas que no sigues diff --git a/config/locales/simple_form.es.yml b/config/locales/simple_form.es.yml index 07ba58d25ef8c8..e173cb48f3dbcd 100644 --- a/config/locales/simple_form.es.yml +++ b/config/locales/simple_form.es.yml @@ -92,6 +92,7 @@ es: closed_registrations_message: Mostrado cuando los registros están cerrados content_cache_retention_period: Todas las publicaciones de otros servidores (incluso impulsos y respuestas) se eliminarán después del número de días especificado, sin tener en cuenta la interacción del usuario local con esos mensajes. Esto incluye mensajes donde un usuario local los ha marcado como marcadores o favoritos. Las menciones privadas entre usuarios de diferentes instancias también se perderán sin posibilidad de recuperación. El uso de esta configuración está destinado a instancias de propósito especial, y rompe muchas expectativas de los usuarios cuando se implementa para un uso de propósito general. custom_css: Puedes aplicar estilos personalizados a la versión web de Mastodon. + email_footer_text: Texto opcional que aparece únicamente en el pie de los correos electrónicos del boletín de correo electrónico. favicon: WEBP, PNG, GIF o JPG. Reemplaza el favicon predeterminado de Mastodon con un icono personalizado. landing_page: Selecciona qué página ven los nuevos visitantes cuando llegan por primera vez a tu servidor. Si seleccionas "Tendencias", entonces las tendencias deben estar habilitadas en la Configuración de Descubrimiento. Si selecciona "Cronología local", entonces "Acceso a las cronologías que destacan publicaciones locales" debe configurarse a "Todos" en la Configuración de Descubrimiento. mascot: Reemplaza la ilustración en la interfaz web avanzada. @@ -294,6 +295,7 @@ es: closed_registrations_message: Mensaje personalizado cuando los registros no están disponibles content_cache_retention_period: Período de retención de contenido remoto custom_css: CSS personalizado + email_footer_text: Texto de pie de página adicional favicon: Favicon landing_page: Página de inicio para nuevos visitantes local_live_feed_access: Acceso a las cronologías que destacan publicaciones locales @@ -322,6 +324,9 @@ es: trendable_by_default: Permitir tendencias sin revisión previa trends: Habilitar tendencias wrapstodon: Habilitar Wrapstodon + form_email_subscriptions_confirmation: + agreement_email_volume: Entiendo que activar esta característica puede aumentar significativamente el volumen de correos electrónicos enviados desde el servidor, y que soy el único responsable de cualquier coste incurrido. + agreement_privacy_and_terms: He actualizado la Política de Privacidad y los Términos del Servicio. interactions: must_be_follower: Bloquear notificaciones de personas que no te siguen must_be_following: Bloquear notificaciones de personas que no sigues diff --git a/config/locales/simple_form.fi.yml b/config/locales/simple_form.fi.yml index 33e826cf14a422..004d7b7ab7d9ab 100644 --- a/config/locales/simple_form.fi.yml +++ b/config/locales/simple_form.fi.yml @@ -294,6 +294,7 @@ fi: closed_registrations_message: Mukautettu viesti, kun rekisteröityminen ei ole saatavilla content_cache_retention_period: Etäsisällön säilytysaika custom_css: Mukautettu CSS + email_footer_text: Alatunnisteen lisäteksti favicon: Sivustokuvake landing_page: Uusien kävijöiden aloitussivu local_live_feed_access: Pääsy paikallisia julkaisuja esitteleviin livesyötteisiin diff --git a/config/locales/simple_form.it.yml b/config/locales/simple_form.it.yml index ea609dd40d9621..05ab3ee4ed6e8c 100644 --- a/config/locales/simple_form.it.yml +++ b/config/locales/simple_form.it.yml @@ -92,6 +92,7 @@ it: closed_registrations_message: Visualizzato alla chiusura delle iscrizioni content_cache_retention_period: Tutti i post da altri server (inclusi booster e risposte) verranno eliminati dopo il numero specificato di giorni, senza tener conto di eventuali interazioni con gli utenti locali con tali post. Questo include i post in cui un utente locale ha contrassegnato come segnalibri o preferiti. Anche le menzioni private tra utenti di diverse istanze andranno perse e impossibile da ripristinare. L'uso di questa impostazione è inteso per casi di scopo speciale e rompe molte aspettative dell'utente quando implementato per uso generale. custom_css: È possibile applicare stili personalizzati sulla versione web di Mastodon. + email_footer_text: Testo opzionale che compare solo nel piè di pagina delle email della newsletter. favicon: WEBP, PNG, GIF o JPG. Sostituisce la favicon predefinita di Mastodon con un'icona personalizzata. landing_page: Seleziona quale pagina vedono i nuovi visitatori al loro primo arrivo sul tuo server. Se selezioni "Tendenze", è necessario abilitare le tendenze nelle Impostazioni di scoperta. Se selezioni "Feed locale", allora è necessario impostare "Accesso ai feed in diretta con post locali" su "Tutti" nelle Impostazioni di scoperta. mascot: Sostituisce l'illustrazione nell'interfaccia web avanzata. @@ -294,6 +295,7 @@ it: closed_registrations_message: Messaggio personalizzato quando le iscrizioni non sono disponibili content_cache_retention_period: Periodo di ritenzione del contenuto remoto custom_css: Personalizza CSS + email_footer_text: Testo aggiuntivo a piè di pagina favicon: Favicon landing_page: Pagina di destinazione per i nuovi visitatori local_live_feed_access: Accesso ai feed dal vivo con post locali @@ -322,6 +324,9 @@ it: trendable_by_default: Consenti le tendenze senza revisione preventiva trends: Abilita le tendenze wrapstodon: Abilita Wrapstodon + form_email_subscriptions_confirmation: + agreement_email_volume: Comprendo che l'attivazione di questa funzione potrebbe aumentare significativamente il volume di email inviate dal server e che sono l'unico/a responsabile di eventuali costi sostenuti. + agreement_privacy_and_terms: Ho aggiornato l'Informativa sulla privacy e i Termini di servizio. interactions: must_be_follower: Blocca notifiche da chi non ti segue must_be_following: Blocca notifiche dalle persone che non segui diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml index 85b9f9d79598b7..50a36f3083a107 100644 --- a/config/locales/simple_form.nl.yml +++ b/config/locales/simple_form.nl.yml @@ -92,6 +92,7 @@ nl: closed_registrations_message: Weergegeven wanneer registratie van nieuwe accounts is uitgeschakeld content_cache_retention_period: Alle berichten van andere servers (inclusief boosts en reacties) worden verwijderd na het opgegeven aantal dagen, ongeacht enige lokale gebruikersinteractie met die berichten. Dit betreft ook berichten die een lokale gebruiker aan diens bladwijzers heeft toegevoegd of als favoriet heeft gemarkeerd. Privéberichten tussen gebruikers van verschillende servers gaan ook verloren en zijn onmogelijk te herstellen. Het gebruik van deze instelling is bedoeld voor servers die een speciaal doel dienen en overtreedt veel gebruikersverwachtingen wanneer deze voor algemeen gebruik wordt geïmplementeerd. custom_css: Je kunt aangepaste CSS toepassen op de webversie van deze Mastodon-server. + email_footer_text: Optionele tekst dat alleen onderin de e-mailnieuwsbrieven verschijnt. favicon: WEBP, PNG, GIF of JPG. Vervangt de standaard Mastodon favicon met een aangepast pictogram. landing_page: Selecteert welke pagina nieuwe bezoekers te zien krijgen wanneer ze voor het eerst op jouw server terechtkomen. Wanneer je ‘Trends’ selecteert, moeten trends ingeschakeld zijn onder 'Serverinstellingen > Ontdekken'. Wanneer je ‘Lokale tijdlijn’ selecteert, moet ‘Toegang tot openbare lokale berichten’ worden ingesteld op ‘Iedereen’ onder 'Serverinstellingen > Ontdekken'. mascot: Overschrijft de illustratie in de geavanceerde webomgeving. @@ -294,6 +295,7 @@ nl: closed_registrations_message: Aangepast bericht wanneer registratie is uitgeschakeld content_cache_retention_period: Bewaartermijn voor externe inhoud custom_css: Aangepaste CSS + email_footer_text: Aanvullende voettekst favicon: Favicon landing_page: Landingspagina voor nieuwe bezoekers local_live_feed_access: Toegang tot openbare lokale berichten diff --git a/config/locales/simple_form.ru.yml b/config/locales/simple_form.ru.yml index 656a4bfc208102..8e18dc3eaa1c81 100644 --- a/config/locales/simple_form.ru.yml +++ b/config/locales/simple_form.ru.yml @@ -60,6 +60,8 @@ ru: setting_default_quote_policy_private: Посты, созданные в Mastodon с видимостью только для подписчиков, не могут быть процитированы другими пользователями. setting_default_quote_policy_unlisted: Если кто-нибудь процитирует вас, его пост тоже будет скрыт из алгоритмических лент. setting_default_sensitive: Медиа деликатного характера скрыты по умолчанию и могут быть показаны по нажатию на них + setting_display_media_default: Показывать предупреждение перед отображением контента, отмеченного как чувствительный + setting_display_media_hide_all: Показывать предупреждение перед отображением любого контента setting_emoji_style: Как отображать эмодзи. Если выбран вариант «Автоматически», то будут использованы системные эмодзи, а для устаревших браузеров — Twemoji. setting_quick_boosting_html: Отметьте флажок, чтобы при нажатии на кнопку %{boost_icon} Продвинуть не выбирать между продвижением и цитированием, а сразу продвигать пост. Цитирование будет доступно из меню поста (%{options_icon}). setting_system_scrollbars_ui: Работает только в браузерах для ПК на основе Safari или Chrome diff --git a/config/locales/simple_form.sq.yml b/config/locales/simple_form.sq.yml index 0785e9a1bf41eb..24e6f4ffb1d149 100644 --- a/config/locales/simple_form.sq.yml +++ b/config/locales/simple_form.sq.yml @@ -293,6 +293,7 @@ sq: closed_registrations_message: Mesazh vetjak për pamundësi regjistrimesh të reja content_cache_retention_period: Periudhë mbajtjeje lënde të largët custom_css: CSS Vetjake + email_footer_text: Tekst fundfaqeje shtesë favicon: Favikonë landing_page: Faqe mbërritje për vizitorë të rinj local_live_feed_access: Hyrje te prurje të atypëratyshme që përmbajnë postime vendore diff --git a/config/locales/simple_form.zh-CN.yml b/config/locales/simple_form.zh-CN.yml index 84c7e271b35b47..7e33b345003b7b 100644 --- a/config/locales/simple_form.zh-CN.yml +++ b/config/locales/simple_form.zh-CN.yml @@ -92,6 +92,7 @@ zh-CN: closed_registrations_message: 在关闭注册时显示 content_cache_retention_period: 来自其它实例的所有嘟文(包括转嘟与回复)都将在指定天数后被删除,不论本实例用户是否与这些嘟文产生过交互。这包括被本实例用户喜欢和收藏的嘟文。实例间用户的私下提及也将丢失并无法恢复。此设置针对的是特殊用途的实例,用于一般用途时会打破许多用户的期望。 custom_css: 你可以为网页版 Mastodon 应用自定义样式。 + email_footer_text: 仅在电子报邮件页脚中显示的可选文本。 favicon: WEBP、PNG、GIF 或 JPG。使用自定义图标覆盖 Mastodon 的默认图标。 landing_page: 选择新访客首次访问你的服务器时看到的页面。 如果选择“热门”,则需要在“发现”设置中启用热门趋势。 如果选择“本站动态”,则在“发现”设置中“展示本站嘟文的实时动态访问权限”一项需要设置为“所有人”。 mascot: 覆盖高级网页界面中的绘图形象。 @@ -293,6 +294,7 @@ zh-CN: closed_registrations_message: 在关闭注册时显示的自定义消息 content_cache_retention_period: 外站内容保留期 custom_css: 自定义 CSS + email_footer_text: 附加页脚文本 favicon: Favicon landing_page: 新访客的主页 local_live_feed_access: 展示本站嘟文的实时动态访问权限 @@ -321,6 +323,9 @@ zh-CN: trendable_by_default: 允许在未审核的情况下将话题置为热门 trends: 启用热门 wrapstodon: 启用 Wrapstodon 年度回顾 + form_email_subscriptions_confirmation: + agreement_email_volume: 我已充分理解,启用此功能可能会显著增加服务器发送的电子邮件数量,且对所有因此产生的任何费用全权负责。 + agreement_privacy_and_terms: 我已更新隐私政策及服务条款。 interactions: must_be_follower: 屏蔽来自未关注我的用户的通知 must_be_following: 屏蔽来自我未关注的用户的通知 diff --git a/config/locales/simple_form.zh-TW.yml b/config/locales/simple_form.zh-TW.yml index 7e5a65f020aa9b..616a9acb862f73 100644 --- a/config/locales/simple_form.zh-TW.yml +++ b/config/locales/simple_form.zh-TW.yml @@ -92,6 +92,7 @@ zh-TW: closed_registrations_message: 於註冊關閉時顯示 content_cache_retention_period: 所有來自其他伺服器之嘟文(包括轉嘟與回嘟)將於指定之天數後自動刪除,不論這些嘟文與本地使用者間的任何互動。這將包含本地使用者已標記為書籤或最愛之嘟文。不同站點使用者間之私訊亦將遺失且不可回復。此設定應適用於特殊情況,若常規使用將超乎多數使用者預期。 custom_css: 您於 Mastodon 網頁版本中能套用客製化風格。 + email_footer_text: 僅顯示於電子報郵件中之可選填備註文字。 favicon: WEBP、PNG、GIF、或 JPG。使用自訂圖示替代預設 Mastodon favicon 圖示。 landing_page: 選擇當新訪客第一次造訪您伺服器時所見之頁面。若您選擇「熱門趨勢」,則該功能必須於探索設定中啟用。若您選擇「本站時間軸」,則探索設定中「允許瀏覽本站嘟文之即時內容」功能必須設定為「任何人」。 mascot: 覆寫進階網頁介面中的圖例。 @@ -153,7 +154,7 @@ zh-TW: dmca_email: 能使用上述用於「法律通知用途電子郵件」之相同電子郵件。 domain: 您所提供線上服務之唯一識別。 jurisdiction: 列出帳單支付人之居住國家。若為公司或其他實體,請列出其註冊地所在的國家,及城市、地區、領土、或州別等。 - min_age: 不應低於您所屬法律管轄區要求之最低年齡。 + min_age: 不應低於您所屬司法管轄區要求之最低年齡。 user: chosen_languages: 當勾選時,公開時間軸將僅顯示所選擇語言之嘟文。此設定不會影響您首頁時間軸與列表。 date_of_birth: @@ -293,6 +294,7 @@ zh-TW: closed_registrations_message: 當註冊關閉時的客製化訊息 content_cache_retention_period: 遠端內容保留期限 custom_css: 自訂 CSS + email_footer_text: 其他備註文字 favicon: 網站圖示 (Favicon) landing_page: 新訪客之登陸頁面 local_live_feed_access: 允許瀏覽本站嘟文之即時內容 @@ -321,6 +323,9 @@ zh-TW: trendable_by_default: 允許熱門趨勢直接顯示,不需經過審核 trends: 啟用熱門趨勢 wrapstodon: 啟用 Mastodon 年度回顧 + form_email_subscriptions_confirmation: + agreement_email_volume: 我已充分理解啟用此功能可能顯著增加此伺服器寄送之電子郵件數量,並對所有產生之任何費用全權負責。 + agreement_privacy_and_terms: 我已更新隱私權政策與服務條款。 interactions: must_be_follower: 封鎖非跟隨者的通知 must_be_following: 封鎖您未跟隨之使用者的通知 diff --git a/config/locales/sq.yml b/config/locales/sq.yml index 7ab201bc2143f3..99e238af902747 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -487,6 +487,49 @@ sq: resolved_dns_records_hint_html: Emri i përkatësisë u përket përkatësive vijuese MX, që janë përgjegjëset përfundimtare për pranim email-esh. Bllokimi i një përkatësie MX do të bllokojë regjistrime nga çfarëdo adrese email që përdor të njëjtën përkatësi MX, edhe nëse emri i dukshëm i përkatësisë është i ndryshëm. Hapni sytë të mos bllokoni shërbime të njohur email-esh. resolved_through_html: Zgjidhur përmes %{domain} title: Përkatësi email të bllokuara + 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 + subscribers: Pajtimtarë + title: Lista postimesh + additional_footer_texts: + show: + title: Tekst fundfaqeje shtesë + compliance_settings: + additional_footer_text: + action: Administrojini + hint: Tekst opsional që shfaqet vetëm te fundfaqja e email-eve të buletinit + title: Tekst fundfaqeje shtesë + privacy_policy: + action: Administrojini + title: Rregulla privatësie + title: Rregullime përputhjeje me rregullore dhe ligje + danger_zone: + disable_feature: + action: Çaktivizoje + title: Çaktivizoje veçorinë + erase_all_data: + action: Fshiji të dhënat + title: Fshiji krejt të dhënat + title: Zonë rreziku + index: + title: Dërgoni buletine me email + roles: + manage_roles: Administroni role + role_name: Emër roli + title: Role + setups: + show: + enable_feature: Aktivizoje veçorinë + important_information: Informacion i rëndësishëm export_domain_allows: new: title: Importoni lejime përkatësish @@ -787,7 +830,6 @@ sq: manage_custom_emojis: Të Administrojë Emoxhi Vetjake manage_custom_emojis_description: U lejon përdoruesve të administrojnë te shërbyesi emoxhi vetjake manage_email_subscriptions: Administroni Pajtime Me Email - manage_email_subscriptions_description: Lejojini përdoruesit të pajtohen me email te përdorues me këtë leje manage_federation: Të Administrojë Federim manage_federation_description: U lejon përdoruesve të bllokojnë ose lejojnë federim me përkatësi të tjera dhe të kontrollojnë shpërndarjen manage_invites: Të Administrojë Ftesa diff --git a/config/locales/sv.yml b/config/locales/sv.yml index 8a7262b0961aa6..3d00d9519505b8 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -792,7 +792,6 @@ sv: manage_custom_emojis: Hantera egna emojier manage_custom_emojis_description: Tillåter användare att hantera egna emojier på servern manage_email_subscriptions: Hantera e-postprenumerationer - manage_email_subscriptions_description: Tillåt användare att prenumerera på användare med denna behörighet via e-post manage_federation: Hantera federering manage_federation_description: Tillåter användare att blockera eller tillåta federering med andra domäner, samt kontrollera levererbarhet manage_invites: Hantera inbjudningar diff --git a/config/locales/tr.yml b/config/locales/tr.yml index b601f2d36d7d07..2c05c635c6706c 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -792,7 +792,6 @@ tr: manage_custom_emojis: Özel İfadeleri Yönetme manage_custom_emojis_description: Kullanıcıların sunucudaki özel ifadeleri yönetmesine izin verir manage_email_subscriptions: E-posta Aboneliklerini Yönet - manage_email_subscriptions_description: Kullanıcılara bu izne sahip diğer kullanıcıları e-posta yoluyla takip etme olanağı verin manage_federation: Birleştirme Yönetme manage_federation_description: Kullanıcıların diğer alan adlarıyla birleştirmeye izin vermesi veya engellemesine ve teslim edilebilirliği denetlemesine izin verir manage_invites: Davetleri Yönetme @@ -1731,6 +1730,27 @@ tr: copy_account_note_text: 'Bu kullanıcı %{acct} adresinden taşındı, işte onlarla ilgili önceki notlarınız:' navigation: toggle_menu: Menüyü aç/kapa + notification_fallbacks: + added_to_collection: + title_html: "%{name} sizi bir koleksiyona ekledi" + admin_report: + title_html: "%{name}, %{target} kişisini bildirdi" + admin_sign_up: + title_and_others_html: + one: "%{name} ve bir kişi kaydoldu" + other: "%{name} ve %{count} kişi kaydoldu" + title_html: "%{name} kayıt oldu" + collection_update: + title_html: "%{name} olduğunuz bir koleksiyonu güncelledi" + generic: + sign_in: Mastodon web uygulamasını kullanmak için oturum açın + summary_html: Şu anda Mastodon'un en son sürümünü desteklemeyen bir uygulamayı kullanıyorsunuz. Tüm özelliklerden yararlanmak için %{link} adresini ziyaret edin. + moderation_warning: + summary_html: Şu anda Mastodon'un en son sürümünü desteklemeyen bir uygulamayı kullanıyorsunuz. %{link}. + title: Hesabınız bir denetim uyarısı aldı. + severed_relationships: + summary_html: "%{from} adresinden bir yönetici, %{target} hesabını askıya aldı; bu nedenle artık bu hesaptan güncellemeler alamayacak ve bu hesapla etkileşimde bulunamayacaksınız. Kaybedilen ilişkilerin listesini görmek için %{link} adresine tıklayın." + title: "%{name} ile bağlantılar koptu" notification_mailer: admin: report: diff --git a/config/locales/vi.yml b/config/locales/vi.yml index f4aee09dd8be33..fd29b46fce5350 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -776,7 +776,6 @@ vi: manage_custom_emojis: Quản lý emoji manage_custom_emojis_description: Cho phép quản lý các emoji tùy chỉnh trên máy chủ manage_email_subscriptions: Quản lý đăng ký đọc qua email - manage_email_subscriptions_description: Cho phép người dùng đăng ký nhận thông báo qua email từ những người dùng có quyền này manage_federation: Quản lý liên hợp manage_federation_description: Cho phép chặn hoặc liên hợp với các máy chủ khác và kiểm soát khả năng phân phối manage_invites: Quản lý lời mời diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 96f026c3175437..7c02995de85f32 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -477,6 +477,71 @@ zh-CN: resolved_dns_records_hint_html: 该域名解析的 MX 记录所指向的域名如下,这些域名被用于接收电子邮件。 即使电子邮件地址域名与 MX 域名不同,屏蔽一个 MX 域名意味着阻止任何使用相同 MX 域名的邮箱地址注册本站账号。 请谨慎操作,不要误屏蔽主要的邮箱提供商。 resolved_through_html: 通过 %{domain} 解析 title: 被封禁的邮箱域名 + email_subscriptions: + accounts: + account: 账号 + active: 已生效 + empty: + hint: 目前还没有账号拥有订阅者。 + no_lists_yet: 尚无列表 + inactive: 未生效 + last_email: 最新电子邮件 + lead: 已启用此功能并拥有订阅者的账号会在下方显示。 + 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: 危险操作区 + disabled_msg: 已成功禁用电子邮件订阅。 + index: + disabled: + cannot_be_enabled: 你的技术提供商尚未为你的服务器启用此功能。 + description: 此功能允许指定账号在个人资料页添加微件小工具,使没有 Mastodon 账号的访客也能通过电子邮件接受此账号的嘟文。 + get_started: 开始使用 + lead: 允许访客通过电子邮件接收此服务器上指定账号的内容。 + title: 邮件电子报 + purged_msg: 正在清除所有电子邮件订阅数据。 + roles: + accounts: 账号 + edit_role: 编辑角色 + empty: + hint: 没有人具备使用此功能的权限。 + no_roles_added: 没有添加角色 + lead: 具有下列角色的账号可以在其个人资料中启用此功能。 + manage_roles: 管理角色 + role_name: 角色名称 + title: 角色 + setups: + show: + enable_feature: 启用功能 + important_information: 重要信息 + list: + 1_permission_explanation: 此功能启用时,具有指定权限的账号可以在个人资料页面添加电子邮件收集表单。 + 2_feature_explanation: 访客在账号的个人资料页面注册并确认订阅后,将于所订阅账号发表新的公开嘟文时收到电子邮件推送。 + 3_privacy_policy_warning: 服务器管理员将可以访问收集到的个人信息(此处为电子邮件地址)。因此,使用此功能前必须更新服务器的隐私政策及服务条款。 + 4_cost_warning: 取决于托管设置,发送电子邮件时可能产生额外费用。由于此功能可能会大幅增加你服务器发送电子邮件的数量,请在启用前和你的托管服务提供商进行联系。 export_domain_allows: new: title: 导入域名允许列表 @@ -776,7 +841,7 @@ zh-CN: manage_custom_emojis: 管理自定义表情 manage_custom_emojis_description: 允许用户管理站点上的自定义表情 manage_email_subscriptions: 管理邮件订阅 - manage_email_subscriptions_description: 允许其他用户通过电子邮件订阅具备此权限的用户 + manage_email_subscriptions_description: 允许拥有此权限的用户为其账号启用邮件电子报功能 manage_federation: 管理联合 manage_federation_description: 允许用户禁止或允许本站同其他站点的联合,并控制消息投递能力 manage_invites: 管理邀请 diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 7dd91d1c2c0169..d2ff545b17576e 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -49,7 +49,7 @@ zh-TW: title: 為 %{username} 變更電子郵件地址 change_role: changed_msg: 成功修改角色! - edit_roles: 管理使用者權限 + edit_roles: 管理使用者角色權限 label: 變更角色 no_role: 沒有角色 title: 為 %{username} 變更角色 @@ -477,6 +477,71 @@ zh-TW: resolved_dns_records_hint_html: 網域名稱解析為以下 MX 網域,這些網域最終負責接收電子郵件。封鎖 MX 網域將會封鎖任何來自使用相同 MX 網域的電子郵件註冊,即便可見的域名是不同的也一樣。請注意,不要封鎖主要的電子郵件服務提供商。 resolved_through_html: 透過 %{domain} 解析 title: 已封鎖電子郵件網域 + email_subscriptions: + accounts: + account: 帳號 + active: 生效中 + empty: + hint: 尚無任何擁有訂閱者之帳號。 + no_lists_yet: 尚無列表 + inactive: 已停用 + last_email: 最新電子郵件地址 + lead: 已啟用此功能並擁有訂閱者之帳號將於下方顯示。 + 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: 危險區域! + disabled_msg: 已成功停用電子郵件訂閱。 + index: + disabled: + cannot_be_enabled: 您的技術提供商未替您伺服器啟用此功能。 + description: 此功能允許指定帳號於他們的個人檔案中新增小工具,使沒有 Mastodon 帳號之訪客也能透過電子郵件接收他們的嘟文。 + get_started: 開始使用 + lead: 允許訪客透過電子郵件接收此伺服器上指定帳號內容。 + title: 電子報 + purged_msg: 已清除所有電子郵件訂閱資料。 + roles: + accounts: 帳號 + edit_role: 編輯角色 + empty: + hint: 無人有權使用此功能。 + no_roles_added: 尚未加入角色 + lead: 擁有以下角色之帳號能於他們的個人檔案中啟用此功能。 + manage_roles: 管理角色 + role_name: 角色名稱 + title: 角色 + setups: + show: + enable_feature: 啟用功能 + important_information: 重要資訊 + list: + 1_permission_explanation: 當啟用此功能時,具有指定權限之帳號能於其個人檔案中新增電子郵件清單。 + 2_feature_explanation: 訪客於帳號個人檔案頁面註冊並確認訂閱後,該帳號發表公開嘟文時,他們將會收到電子郵件通訊。 + 3_privacy_policy_warning: 伺服器管理員將能存取收集到的 PII (電子郵件地址)。有鑑於此,啟用此功能前務必更新此伺服器之隱私權政策與服務條款。 + 4_cost_warning: 依據伺服器託管方式,電子郵件可能產生額外費用。由於此功能可能大幅增加您的伺服器寄送電子郵件數量,請於啟用前聯繫您的服務提供商。 export_domain_allows: new: title: 匯入網域白名單 @@ -776,7 +841,7 @@ zh-TW: manage_custom_emojis: 管理自訂 emoji 表情符號 manage_custom_emojis_description: 允許使用者管理伺服器上之自訂 emoji 表情符號 manage_email_subscriptions: 管理電子郵件訂閱 - manage_email_subscriptions_description: 此權限允許使用者透過電子郵件訂閱其他使用者動態 + manage_email_subscriptions_description: 允許擁有此權限之使用者替他們帳號啟用電子報功能 manage_federation: 管理聯邦宇宙 manage_federation_description: 允許使用者封鎖或允許與其他網域的聯邦宇宙,並控制傳遞能力 manage_invites: 管理邀請 From 3bc27b9b6441fddc143750e369125ab14cd9ae05 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 5 May 2026 16:46:47 +0200 Subject: [PATCH 020/132] Resolve unknown tagged collections in remote posts (#38900) --- app/lib/activitypub/activity/create.rb | 11 +++++ .../process_status_update_service.rb | 18 +++++++- .../tagged_collection_resolve_worker.rb | 24 ++++++++++ spec/lib/activitypub/activity/create_spec.rb | 25 ++++++++--- .../process_status_update_service_spec.rb | 4 ++ .../tagged_collection_resolve_worker_spec.rb | 44 +++++++++++++++++++ 6 files changed, 118 insertions(+), 8 deletions(-) create mode 100644 app/workers/tagged_collection_resolve_worker.rb create mode 100644 spec/workers/tagged_collection_resolve_worker_spec.rb diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index 3b86d561c4c033..9d79a963acf811 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -47,6 +47,7 @@ def process_status @mentions = [] @tagged_objects = [] @unresolved_mentions = [] + @unresolved_collections = [] @silenced_account_ids = [] @params = {} @quote = nil @@ -68,6 +69,7 @@ def process_status resolve_thread(@status) resolve_unresolved_mentions(@status) + resolve_unresolved_collections(@status) fetch_replies(@status) fetch_and_verify_quote distribute @@ -286,8 +288,11 @@ def process_tagged_collection(tag) # TODO: We probably want to resolve unknown objects and push them to an `@unresolved_tagged_objects` on failure collection = ActivityPub::TagManager.instance.uri_to_resource(tag['id'], Collection) + collection ||= ActivityPub::FetchRemoteFeaturedCollectionService.new.call(tag['id'], request_id: @options[:request_id]) @tagged_objects << TaggedObject.new(uri: ActivityPub::TagManager.instance.uri_for(collection), object: collection, ap_type: 'FeaturedCollection') if collection.present? + rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS + @unresolved_collections << tag['id'] end def process_attachments @@ -378,6 +383,12 @@ def resolve_unresolved_mentions(status) end end + def resolve_unresolved_collections(status) + @unresolved_collections.uniq.each do |uri| + TaggedCollectionResolveWorker.perform_in(rand(PROCESSING_DELAY), status.id, uri, { 'request_id' => @options[:request_id] }) + end + end + def fetch_replies(status) collection = @object['replies'] return if collection.blank? diff --git a/app/services/activitypub/process_status_update_service.rb b/app/services/activitypub/process_status_update_service.rb index a76c49ca087a22..954e5f0de0942b 100644 --- a/app/services/activitypub/process_status_update_service.rb +++ b/app/services/activitypub/process_status_update_service.rb @@ -237,11 +237,22 @@ def update_tags! end def update_tagged_objects! + unresolved_tagged_objects = [] + current_tagged_objects = @raw_tagged_objects.filter_map do |tagged_object| url = tagged_object['id'] # TODO: We probably want to resolve unknown objects at authoring time - ActivityPub::TagManager.instance.uri_to_resource(url, Collection) + collection = ActivityPub::TagManager.instance.uri_to_resource(url, Collection) + collection ||= ActivityPub::FetchRemoteFeaturedCollectionService.new.call(url, request_id: @request_id) + + collection + rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS + # Since previous tagged objects are about already-known collections, + # they don't try to resolve again and won't fall into this case. + # In other words, this failure case is only for new collections and can safely be retried later + unresolved_tagged_objects << url + nil end # Any previously-unresolved URI would be resolved here @@ -252,6 +263,11 @@ def update_tagged_objects! # Remove unused links @status.tagged_objects.where.not(uri: current_tagged_objects.map { |object| ActivityPub::TagManager.instance.uri_for(object) }).delete_all + + # Queue unresolved collections for later + unresolved_tagged_objects.uniq.each do |uri| + TaggedCollectionResolveWorker.perform_in(rand(PROCESSING_DELAY), @status.id, uri, { 'request_id' => @request_id }) + end end def update_mentions! diff --git a/app/workers/tagged_collection_resolve_worker.rb b/app/workers/tagged_collection_resolve_worker.rb new file mode 100644 index 00000000000000..5bbfe2f2480f36 --- /dev/null +++ b/app/workers/tagged_collection_resolve_worker.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +class TaggedCollectionResolveWorker + include Sidekiq::Worker + include ExponentialBackoff + include JsonLdHelper + + sidekiq_options queue: 'pull', retry: 7 + + def perform(status_id, uri, options = {}) + status = Status.find_by(id: status_id) + return if status.nil? + + collection = ActivityPub::TagManager.instance.uri_to_resource(uri, Collection) + collection ||= ActivityPub::FetchRemoteFeaturedCollectionService.new.call(uri, request_id: options['request_id']) + return if collection.nil? + + status.tagged_objects.upsert({ ap_type: 'FeaturedCollection', object_id: collection.id, object_type: 'Collection' }, unique_by: %w(status_id object_type object_id)) + rescue Mastodon::UnexpectedResponseError => e + response = e.response + + raise(e) unless response_error_unsalvageable?(response) + end +end diff --git a/spec/lib/activitypub/activity/create_spec.rb b/spec/lib/activitypub/activity/create_spec.rb index f21552caf5339b..8dc6d9d4254181 100644 --- a/spec/lib/activitypub/activity/create_spec.rb +++ b/spec/lib/activitypub/activity/create_spec.rb @@ -88,10 +88,16 @@ content: '@bob lorem ipsum', published: 1.hour.ago.utc.iso8601, updated: 1.hour.ago.utc.iso8601, - tag: { - type: 'Mention', - href: 'http://notexisting.dontexistingtld/actor', - }, + tag: [ + { + type: 'Mention', + href: 'http://notexisting.dontexistingtld/actor', + }, + { + type: 'FeaturedCollection', + id: 'http://notexisting.notexistingtld/collection', + }, + ], } end @@ -150,8 +156,10 @@ def activity_for_object(json) expect(Notification.count).to eq 2 end - it 'ignores unprocessable mention', :aggregate_failures do - stub_request(:get, invalid_mention_json[:tag][:href]).to_raise(HTTP::ConnectionError) + it 'ignores unprocessable mentions and tagged collections', :aggregate_failures do + stub_request(:get, invalid_mention_json[:tag][0][:href]).to_raise(HTTP::ConnectionError) + stub_request(:get, invalid_mention_json[:tag][1][:id]).to_raise(HTTP::ConnectionError) + # When receiving the post that contains an invalid mention… described_class.new(activity_for_object(invalid_mention_json), sender, delivery: true).perform @@ -166,7 +174,10 @@ def activity_for_object(json) expect(status.nil?).to be false # It has queued a mention resolve job - expect(MentionResolveWorker).to have_enqueued_sidekiq_job(status.id, invalid_mention_json[:tag][:href], anything) + expect(MentionResolveWorker).to have_enqueued_sidekiq_job(status.id, invalid_mention_json[:tag][0][:href], anything) + + # It has queued a collection resolve job + expect(TaggedCollectionResolveWorker).to have_enqueued_sidekiq_job(status.id, invalid_mention_json[:tag][1][:id], anything) end end diff --git a/spec/services/activitypub/process_status_update_service_spec.rb b/spec/services/activitypub/process_status_update_service_spec.rb index 5df86eed54a4f1..593471f1c7ed53 100644 --- a/spec/services/activitypub/process_status_update_service_spec.rb +++ b/spec/services/activitypub/process_status_update_service_spec.rb @@ -7,6 +7,7 @@ let!(:status) { Fabricate(:status, text: 'Hello world', uri: 'https://example.com/statuses/1234', account: Fabricate(:account, domain: 'example.com')) } let(:bogus_mention) { 'https://example.com/users/erroringuser' } + let(:bogus_collection) { 'https://example.com/collections/erroringcollection' } let(:payload) do { '@context': 'https://www.w3.org/ns/activitystreams', @@ -21,6 +22,7 @@ { type: 'Mention', href: ActivityPub::TagManager.instance.uri_for(alice) }, { type: 'Mention', href: bogus_mention }, { type: 'FeaturedCollection', id: ActivityPub::TagManager.instance.uri_for(featured_collection) }, + { type: 'FeaturedCollection', id: bogus_collection }, ], } end @@ -39,6 +41,7 @@ tags.each { |t| status.tags << t } media_attachments.each { |m| status.media_attachments << m } stub_request(:get, bogus_mention).to_raise(HTTP::ConnectionError) + stub_request(:get, bogus_collection).to_raise(HTTP::ConnectionError) end describe '#call' do @@ -50,6 +53,7 @@ spoiler_text: eq('Show more') ) expect(MentionResolveWorker).to have_enqueued_sidekiq_job(status.id, bogus_mention, anything) + expect(TaggedCollectionResolveWorker).to have_enqueued_sidekiq_job(status.id, bogus_collection, anything) end context 'when the changes are only in sanitized-out HTML' do diff --git a/spec/workers/tagged_collection_resolve_worker_spec.rb b/spec/workers/tagged_collection_resolve_worker_spec.rb new file mode 100644 index 00000000000000..ee5c193ec516f9 --- /dev/null +++ b/spec/workers/tagged_collection_resolve_worker_spec.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe TaggedCollectionResolveWorker do + let(:status_id) { -42 } + let(:uri) { 'https://example.com/collections/unknown' } + + describe '#perform' do + subject { described_class.new.perform(status_id, uri, {}) } + + context 'with a non-existent status' do + it 'returns nil' do + expect(subject).to be_nil + end + end + + context 'with a valid user' do + let(:status) { Fabricate(:status) } + let(:status_id) { status.id } + + let(:service_double) { instance_double(ActivityPub::FetchRemoteFeaturedCollectionService) } + + before do + allow(ActivityPub::FetchRemoteFeaturedCollectionService).to receive(:new).and_return(service_double) + + allow(service_double) + .to receive(:call) + .with(uri, anything) do + Fabricate(:remote_collection, account: Fabricate.build(:account, domain: 'example.com'), uri: uri) + end + end + + it 'resolves the collection and adds a new tagged object', :aggregate_failures do + expect { subject } + .to change { status.reload.tagged_objects } + .from([]) + .to(a_collection_including(having_attributes(object: having_attributes(uri: uri)))) + + expect(service_double).to have_received(:call).once + end + end + end +end From 5e3e11bbfa89f3f8a4e115b5f8f4d478ba04da60 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 5 May 2026 16:46:52 +0200 Subject: [PATCH 021/132] Fix role management interface not offering to require 2FA for all users (#38906) --- app/views/admin/roles/_form.html.haml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/views/admin/roles/_form.html.haml b/app/views/admin/roles/_form.html.haml index 0d24e82d3caf48..51114beac157b0 100644 --- a/app/views/admin/roles/_form.html.haml +++ b/app/views/admin/roles/_form.html.haml @@ -25,12 +25,12 @@ = form.input :highlighted, wrapper: :with_label - - if current_user.role.administrator? || current_user.role != form.object - .fields-group - = form.input :require_2fa, - wrapper: :with_label +- if current_user.role.administrator? || current_user.role != form.object + .fields-group + = form.input :require_2fa, + wrapper: :with_label - %hr.spacer/ +%hr.spacer/ - if Mastodon::Feature.collections_enabled? From cb2e7705848e602b7cdc513560004715134b10d4 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 5 May 2026 17:15:55 +0200 Subject: [PATCH 022/132] Remove duplicate index `index_email_subscriptions_on_account_id` (#38907) --- ...505155103_remove_email_subscriptions_duplicate_index.rb | 7 +++++++ db/schema.rb | 3 +-- 2 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 db/migrate/20260505155103_remove_email_subscriptions_duplicate_index.rb diff --git a/db/migrate/20260505155103_remove_email_subscriptions_duplicate_index.rb b/db/migrate/20260505155103_remove_email_subscriptions_duplicate_index.rb new file mode 100644 index 00000000000000..0d4a869aae2327 --- /dev/null +++ b/db/migrate/20260505155103_remove_email_subscriptions_duplicate_index.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class RemoveEmailSubscriptionsDuplicateIndex < ActiveRecord::Migration[8.1] + def change + remove_index :email_subscriptions, :account_id + end +end diff --git a/db/schema.rb b/db/schema.rb index 62eff610c638c4..51e2cef103be04 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[8.1].define(version: 2026_04_23_141611) do +ActiveRecord::Schema[8.1].define(version: 2026_05_05_155103) do # These are extensions that must be enabled in order to support this database enable_extension "pg_catalog.plpgsql" @@ -516,7 +516,6 @@ t.string "locale", null: false t.datetime "updated_at", null: false t.index ["account_id", "email"], name: "index_email_subscriptions_on_account_id_and_email", unique: true - t.index ["account_id"], name: "index_email_subscriptions_on_account_id" t.index ["confirmation_token"], name: "index_email_subscriptions_on_confirmation_token", unique: true, where: "(confirmation_token IS NOT NULL)" end From aee0025ca3b1158f4da85282a10bec9fad41c4ee Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 6 May 2026 04:36:42 -0400 Subject: [PATCH 023/132] Add system spec for managing everyone user role 2FA (#38911) --- spec/system/admin/roles_spec.rb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/spec/system/admin/roles_spec.rb b/spec/system/admin/roles_spec.rb index 8765bc996707e4..36a72d1f3c322f 100644 --- a/spec/system/admin/roles_spec.rb +++ b/spec/system/admin/roles_spec.rb @@ -74,5 +74,19 @@ expect(page) .to have_title(I18n.t('admin.roles.title')) end + + it 'Manages the `everyone` user role' do + role = UserRole.everyone + + visit edit_admin_role_path(role) + expect(page) + .to have_title(I18n.t('admin.roles.edit', name: I18n.t('admin.roles.everyone'))) + .and have_text('This is the base role affecting all users') + + # Update role attribute + check 'user_role_require_2fa' # Require 2FA for everyone + expect { click_on submit_button } + .to(change { role.reload.require_2fa }.to(true)) + end end end From d243ba36ced7746ae298633603bcfc3b226e346c Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 6 May 2026 04:47:12 -0400 Subject: [PATCH 024/132] Add admin area spec for email subscriptions management (#38912) --- .../admin/email_subscriptions_controller.rb | 2 +- .../email_subscriptions/_accounts.html.haml | 3 +- .../email_subscription_policy_spec.rb | 20 ++++++++ .../additional_footer_texts_spec.rb | 24 ++++++++++ .../admin/email_subscriptions/setups_spec.rb | 29 ++++++++++++ spec/system/admin/email_subscriptions_spec.rb | 47 +++++++++++++++++++ 6 files changed, 123 insertions(+), 2 deletions(-) create mode 100644 spec/policies/email_subscription_policy_spec.rb create mode 100644 spec/system/admin/email_subscriptions/additional_footer_texts_spec.rb create mode 100644 spec/system/admin/email_subscriptions/setups_spec.rb create mode 100644 spec/system/admin/email_subscriptions_spec.rb diff --git a/app/controllers/admin/email_subscriptions_controller.rb b/app/controllers/admin/email_subscriptions_controller.rb index 39a32909dfa37f..af71eb70123f5f 100644 --- a/app/controllers/admin/email_subscriptions_controller.rb +++ b/app/controllers/admin/email_subscriptions_controller.rb @@ -6,7 +6,7 @@ def index @enabled = Setting.email_subscriptions @roles = UserRole.where('permissions & ? != 0', UserRole::FLAGS[:manage_email_subscriptions] | UserRole::FLAGS[:administrator]) - @accounts = Account.local.joins(:email_subscriptions).where.associated(:email_subscriptions).includes(:user) + @accounts = Account.local.where.associated(:email_subscriptions).includes(:user) end def disable diff --git a/app/views/admin/email_subscriptions/_accounts.html.haml b/app/views/admin/email_subscriptions/_accounts.html.haml index d560d417dbdf73..456455af4e2390 100644 --- a/app/views/admin/email_subscriptions/_accounts.html.haml +++ b/app/views/admin/email_subscriptions/_accounts.html.haml @@ -39,6 +39,7 @@ %td.valign-middle = account.email_subscriptions.count %td.valign-middle - = l account.last_status_at + - if account.last_status_at.present? + = l account.last_status_at %td.valign-middle.align-end = link_to material_symbol('chevron_right'), admin_account_path(account.id), class: 'table-icon-link' diff --git a/spec/policies/email_subscription_policy_spec.rb b/spec/policies/email_subscription_policy_spec.rb new file mode 100644 index 00000000000000..cdccf0a18b3dba --- /dev/null +++ b/spec/policies/email_subscription_policy_spec.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe EmailSubscriptionPolicy do + subject { described_class } + + let(:admin) { Fabricate(:admin_user).account } + let(:account) { Fabricate(:account) } + + permissions :index?, :enable?, :disable?, :purge? do + context 'when admin' do + it { is_expected.to permit(admin, EmailSubscription) } + end + + context 'when not admin' do + it { is_expected.to_not permit(account, EmailSubscription) } + end + end +end diff --git a/spec/system/admin/email_subscriptions/additional_footer_texts_spec.rb b/spec/system/admin/email_subscriptions/additional_footer_texts_spec.rb new file mode 100644 index 00000000000000..9da22fb1529548 --- /dev/null +++ b/spec/system/admin/email_subscriptions/additional_footer_texts_spec.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Admin Email Subscriptions Footer Texts' do + let(:user) { Fabricate(:admin_user) } + + before { sign_in user } + + describe 'Updated the email footer additional text' do + it 'updates the text and redirects to subscriptions page' do + visit admin_email_subscriptions_additional_footer_text_path + expect(page) + .to have_title(I18n.t('admin.email_subscriptions.additional_footer_texts.show.title')) + + fill_in 'form_admin_settings_email_footer_text', with: 'More text' + + expect { click_on submit_button } + .to change(Setting, :email_footer_text).to('More text') + expect(page) + .to have_title(I18n.t('admin.email_subscriptions.index.title')) + end + end +end diff --git a/spec/system/admin/email_subscriptions/setups_spec.rb b/spec/system/admin/email_subscriptions/setups_spec.rb new file mode 100644 index 00000000000000..a0d23849c36c35 --- /dev/null +++ b/spec/system/admin/email_subscriptions/setups_spec.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Admin Email Subscriptions Setup' do + let(:user) { Fabricate(:admin_user) } + + before { sign_in user } + + describe 'Enabling the email subscription feature' do + it 'enables the feature and redirects to subscriptions page' do + visit admin_email_subscriptions_setup_path + expect(page) + .to have_title(I18n.t('admin.email_subscriptions.index.title')) + + check 'form_email_subscriptions_confirmation_agreement_privacy_and_terms' + check 'form_email_subscriptions_confirmation_agreement_email_volume' + + expect { submit_form } + .to change(Setting, :email_subscriptions).to(true) + expect(page) + .to have_title(I18n.t('admin.email_subscriptions.index.title')) + end + + def submit_form + click_on I18n.t('admin.email_subscriptions.setups.show.enable_feature') + end + end +end diff --git a/spec/system/admin/email_subscriptions_spec.rb b/spec/system/admin/email_subscriptions_spec.rb new file mode 100644 index 00000000000000..0530cea150e629 --- /dev/null +++ b/spec/system/admin/email_subscriptions_spec.rb @@ -0,0 +1,47 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Admin Email Subscriptions' do + let(:user) { Fabricate(:admin_user) } + + before { sign_in user } + + describe 'Viewing the subscriptions index page' do + before do + Fabricate.create :email_subscription # Create a sub show that purge is shown + end + + context 'when feature enabled' do + before { Setting.email_subscriptions = true } + + it 'shows subscription related details and manages the setting', :inline_jobs do + visit admin_email_subscriptions_path + expect(page) + .to have_title(I18n.t('admin.email_subscriptions.index.title')) + .and have_text(I18n.t('admin.email_subscriptions.compliance_settings.title')) + + expect { click_on I18n.t('admin.email_subscriptions.danger_zone.erase_all_data.action') } + .to change(EmailSubscription, :count).to(0) + expect(page) + .to have_text(I18n.t('admin.email_subscriptions.purged_msg')) + + expect { click_on I18n.t('admin.email_subscriptions.danger_zone.disable_feature.action') } + .to change(Setting, :email_subscriptions).to(false) + expect(page) + .to have_text(I18n.t('admin.email_subscriptions.disabled_msg')) + end + end + + context 'when feature disabled' do + before { Setting.email_subscriptions = false } + + it 'shows subscription related details' do + visit admin_email_subscriptions_path + expect(page) + .to have_title(I18n.t('admin.email_subscriptions.index.title')) + .and have_text(I18n.t('admin.email_subscriptions.index.disabled.description')) + end + end + end +end From 9ef8df569e171882e6703257fac01b17c9d8a7f5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 6 May 2026 08:49:03 +0000 Subject: [PATCH 025/132] Update dependency rubyzip to v3.3.0 (#38881) 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 94bbf5d18c0cf0..3aa782cbe6da8b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -801,7 +801,7 @@ GEM ruby-vips (2.3.0) ffi (~> 1.12) logger - rubyzip (3.2.2) + rubyzip (3.3.0) rufus-scheduler (3.9.2) fugit (~> 1.1, >= 1.11.1) safety_net_attestation (0.5.0) From b04f7e7411f3692ea531568c98f269725076f304 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 6 May 2026 08:54:35 +0000 Subject: [PATCH 026/132] New Crowdin Translations (automated) (#38915) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/de.json | 4 ++ app/javascript/mastodon/locales/fr-CA.json | 6 +- app/javascript/mastodon/locales/fr.json | 6 +- app/javascript/mastodon/locales/gl.json | 4 ++ app/javascript/mastodon/locales/hu.json | 3 + app/javascript/mastodon/locales/id.json | 2 +- app/javascript/mastodon/locales/is.json | 4 ++ app/javascript/mastodon/locales/it.json | 14 +++-- app/javascript/mastodon/locales/kab.json | 18 ++++++ app/javascript/mastodon/locales/nn.json | 2 +- app/javascript/mastodon/locales/tr.json | 11 ++++ app/javascript/mastodon/locales/vi.json | 4 ++ config/locales/de.yml | 7 +++ config/locales/fr-CA.yml | 66 ++++++++++++++++++++++ config/locales/fr.yml | 66 ++++++++++++++++++++++ config/locales/gl.yml | 64 +++++++++++++++++++++ config/locales/hu.yml | 59 +++++++++++++++++++ config/locales/is.yml | 66 ++++++++++++++++++++++ config/locales/it.yml | 62 ++++++++++++++++++++ config/locales/kab.yml | 36 ++++++++++++ config/locales/simple_form.fr-CA.yml | 5 ++ config/locales/simple_form.fr.yml | 5 ++ config/locales/simple_form.hu.yml | 4 ++ config/locales/simple_form.is.yml | 5 ++ config/locales/simple_form.kab.yml | 1 + config/locales/simple_form.tr.yml | 5 ++ config/locales/simple_form.vi.yml | 5 ++ config/locales/tr.yml | 66 ++++++++++++++++++++++ config/locales/vi.yml | 66 ++++++++++++++++++++++ 29 files changed, 656 insertions(+), 10 deletions(-) diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index d07108df7324b6..ff8e5dc38642d6 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -328,11 +328,15 @@ "annual_report.summary.share_on_mastodon": "Auf Mastodon teilen", "attachments_list.unprocessed": "(ausstehend)", "audio.hide": "Audio ausblenden", + "block_modal.no_collections": "Ihr werdet euch gegenseitig nicht zu Sammlungen hinzufügen können. Du wirst, falls zutreffend, aus deren Sammlungen entfernt werden.", "block_modal.remote_users_caveat": "Wir werden den Server {domain} bitten, deine Entscheidung zu respektieren. Allerdings kann nicht garantiert werden, dass sie eingehalten wird, weil einige Server Blockierungen unterschiedlich handhaben können. Öffentliche Beiträge können für nicht angemeldete Nutzer*innen weiterhin sichtbar sein.", "block_modal.show_less": "Weniger anzeigen", "block_modal.show_more": "Mehr anzeigen", + "block_modal.they_cant_mention": "Ihr werdet euch gegenseitig nicht erwähnen, folgen oder zitieren können.", + "block_modal.they_cant_see_posts": "Deine Beiträge können nicht mehr angesehen werden und du wirst deren Beiträge nicht mehr sehen.", "block_modal.they_will_know": "Das Profil wird erkennen können, dass du es blockiert hast.", "block_modal.title": "Profil blockieren?", + "block_modal.you_wont_see_mentions": "Du wirst keine Beiträge sehen, die dieses Profil erwähnen.", "boost_modal.combo": "Mit {combo} erscheint dieses Fenster nicht mehr", "boost_modal.reblog": "Beitrag teilen?", "boost_modal.undo_reblog": "Beitrag nicht mehr teilen?", diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json index a6ba4c814fe31c..d99a25c6bed0d6 100644 --- a/app/javascript/mastodon/locales/fr-CA.json +++ b/app/javascript/mastodon/locales/fr-CA.json @@ -328,11 +328,15 @@ "annual_report.summary.share_on_mastodon": "Partager sur Mastodon", "attachments_list.unprocessed": "(non traité)", "audio.hide": "Masquer l'audio", + "block_modal.no_collections": "Aucun de vous ne peut ajouter l'autre à une collection. Le cas échéant chacun sera automatiquement supprimé·e des collections existantes de l'autre.", "block_modal.remote_users_caveat": "Nous allons demander au serveur {domain} de respecter votre décision. Cependant, ce respect n'est pas garanti, car certains serveurs peuvent gérer différemment les blocages. Les messages publics peuvent rester visibles par les utilisateur·rice·s non connecté·e·s.", "block_modal.show_less": "Afficher moins", "block_modal.show_more": "Afficher plus", + "block_modal.they_cant_mention": "Vous ne pouvez pas vous mentionner, suivre ou citer l'un l'autre.", + "block_modal.they_cant_see_posts": "Aucun de vous ne pourra voir le contenu de l'autre.", "block_modal.they_will_know": "Iel pourra voir qu'iel est bloqué·e.", - "block_modal.title": "Bloquer l'utilisateur·ice ?", + "block_modal.title": "Bloquer l'utilisateur·rice ?", + "block_modal.you_wont_see_mentions": "Vous ne verrez plus les messages qui le ou la mentionnent.", "boost_modal.combo": "Vous pouvez appuyer sur {combo} pour sauter ceci la prochaine fois", "boost_modal.reblog": "Partager le message ?", "boost_modal.undo_reblog": "Annuler le partage du message ?", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index d12b189f12714f..c76754c1e5473e 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -328,11 +328,15 @@ "annual_report.summary.share_on_mastodon": "Partager sur Mastodon", "attachments_list.unprocessed": "(non traité)", "audio.hide": "Masquer l'audio", + "block_modal.no_collections": "Aucun de vous ne peut ajouter l'autre à une collection. Le cas échéant chacun sera automatiquement supprimé·e des collections existantes de l'autre.", "block_modal.remote_users_caveat": "Nous allons demander au serveur {domain} de respecter votre décision. Cependant, ce respect n'est pas garanti, car certains serveurs peuvent gérer différemment les blocages. Les messages publics peuvent rester visibles par les utilisateur·rice·s non connecté·e·s.", "block_modal.show_less": "Afficher moins", "block_modal.show_more": "Afficher plus", + "block_modal.they_cant_mention": "Vous ne pouvez pas vous mentionner, suivre ou citer l'un l'autre.", + "block_modal.they_cant_see_posts": "Aucun de vous ne pourra voir le contenu de l'autre.", "block_modal.they_will_know": "Iel pourra voir qu'iel est bloqué·e.", - "block_modal.title": "Bloquer l'utilisateur·ice ?", + "block_modal.title": "Bloquer l'utilisateur·rice ?", + "block_modal.you_wont_see_mentions": "Vous ne verrez plus les messages qui le ou la mentionnent.", "boost_modal.combo": "Vous pouvez appuyer sur {combo} pour passer ceci la prochaine fois", "boost_modal.reblog": "Partager le message ?", "boost_modal.undo_reblog": "Annuler le partage du message ?", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 1e9f5305b817e2..16d6e58ce344ac 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -328,11 +328,15 @@ "annual_report.summary.share_on_mastodon": "Compartir en Mastodon", "attachments_list.unprocessed": "(sen procesar)", "audio.hide": "Agochar audio", + "block_modal.no_collections": "Ninguén de vós poderá engadir á outra a coleccións. Ides ser retiradas automaticamente das coleccións relativas existentes, se fose o caso.", "block_modal.remote_users_caveat": "Ímoslle pedir ao servidor {domain} que respecte a túa decisión. Emporiso, non hai garantía de que atenda a petición xa que os servidores xestionan os bloqueos de formas diferentes. As publicacións públicas poderían aínda ser visibles para usuarias que non iniciaron sesión.", "block_modal.show_less": "Mostrar menos", "block_modal.show_more": "Mostrar máis", + "block_modal.they_cant_mention": "Non podedes mencionarvos, seguirvos ou citarvos unha á outra.", + "block_modal.they_cant_see_posts": "Non pode ver os teus contidos nin ti ver os da outra persoa.", "block_modal.they_will_know": "Pode ver que a bloqueaches.", "block_modal.title": "Bloquear usuaria?", + "block_modal.you_wont_see_mentions": "Non vas ver as publicacións doutras persoas que a mencionen.", "boost_modal.combo": "Preme {combo} para ignorar isto na seguinte vez", "boost_modal.reblog": "Promover publicación?", "boost_modal.undo_reblog": "Retirar promoción?", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 9990ad59045fc5..291829bfa9112f 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -330,8 +330,11 @@ "block_modal.remote_users_caveat": "Arra kérjük a {domain} kiszolgálót, hogy tartsa tiszteletben a döntésedet. Ugyanakkor az együttműködés nem garantált, mivel néhány kiszolgáló másképp kezelheti a letiltásokat. A nyilvános bejegyzések a be nem jelentkezett felhasználók számára továbbra is látszódhatnak.", "block_modal.show_less": "Kevesebb mutatása", "block_modal.show_more": "Több mutatása", + "block_modal.they_cant_mention": "Nem említhetik meg, követhetik vagy idézhetik egymást.", + "block_modal.they_cant_see_posts": "Nem láthatja a tartalmadat, és te sem fogod látni az övéit.", "block_modal.they_will_know": "Láthatja, hogy le van tiltva.", "block_modal.title": "Letiltsuk a felhasználót?", + "block_modal.you_wont_see_mentions": "Nem fogod látni az őt említő bejegyzéseket.", "boost_modal.combo": "Hogy átugord ezt következő alkalommal, használd {combo}", "boost_modal.reblog": "Bejegyzés megtolása?", "boost_modal.undo_reblog": "Megtolás visszavonása?", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index f9d840020c27e3..31bb045ff8ae7d 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -121,7 +121,7 @@ "column.directory": "Jelajahi profil", "column.domain_blocks": "Domain tersembunyi", "column.favourites": "Favorit", - "column.firehose": "Feed yang sedang berlangsung", + "column.firehose": "Umpan terkini", "column.follow_requests": "Permintaan mengikuti", "column.home": "Beranda", "column.lists": "List", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index 8df530d248e718..17426d2a1ccad2 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -328,11 +328,15 @@ "annual_report.summary.share_on_mastodon": "Deila á Mastodon", "attachments_list.unprocessed": "(óunnið)", "audio.hide": "Fela hljóð", + "block_modal.no_collections": "Hvorugur ykkar getur bætt hinum í söfn. Þú verður sjálfkrafa fjarlægð/ur úr fyrirliggjandi söfnum hins, ef við á.", "block_modal.remote_users_caveat": "Við munum biðja {domain} netþjóninn um að virða ákvörðun þína. Hitt er svo annað mál hvort hann fari eftir þessu, ekki er hægt að tryggja eftirfylgni því sumir netþjónar meðhöndla útilokanir á sinn hátt. Opinberar færslur gætu verið sýnilegar notendum sem ekki eru skráðir inn.", "block_modal.show_less": "Sýna minna", "block_modal.show_more": "Sýna meira", + "block_modal.they_cant_mention": "Þið getið ekki minnst á, fylgst með eða vitnað í hvorn annan.", + "block_modal.they_cant_see_posts": "Viðkomandi geta ekki séð efnið þitt og þú ekki þeirra.", "block_modal.they_will_know": "Viðkomandi geta séð að þeir eru útilokaðir.", "block_modal.title": "Útiloka notanda?", + "block_modal.you_wont_see_mentions": "Þú munt ekki sjá færslur frá öðrum sem minnast á viðkomandi aðila.", "boost_modal.combo": "Þú getur ýtt á {combo} til að sleppa þessu næst", "boost_modal.reblog": "Endurbirta færslu?", "boost_modal.undo_reblog": "Taka færslu úr endurbirtingu?", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index f933efc2694644..ee04a53f8b7457 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -328,13 +328,15 @@ "annual_report.summary.share_on_mastodon": "Condividi su Mastodon", "attachments_list.unprocessed": "(non elaborato)", "audio.hide": "Nascondi audio", + "block_modal.no_collections": "Nessuno dei due può aggiungere l'altro alle rispettive raccolte. Verrete automaticamente rimossi dalle collezioni esistenti dell'altro, se presenti.", "block_modal.remote_users_caveat": "Chiederemo al server {domain} di rispettare la tua decisione. Tuttavia, la conformità non è garantita poiché alcuni server potrebbero gestire i blocchi in modo diverso. I post pubblici potrebbero essere ancora visibili agli utenti che non hanno effettuato l'accesso.", "block_modal.show_less": "Mostra meno", "block_modal.show_more": "Mostra di più", - "block_modal.they_cant_mention": "Non potete menzionarvi, seguirvi o citarvi a vicenda.", - "block_modal.they_cant_see_posts": "Non possono vedere i tuoi contenuti e tu non vedrai i loro.", - "block_modal.they_will_know": "Possono vedere che sono bloccati.", + "block_modal.they_cant_mention": "Non potrete menzionarvi, seguirvi o citarvi a vicenda.", + "block_modal.they_cant_see_posts": "Non potrà vedere i tuoi contenuti e tu non potrai vedere i suoi.", + "block_modal.they_will_know": "Può vedere che è stato/a bloccato/a.", "block_modal.title": "Bloccare l'utente?", + "block_modal.you_wont_see_mentions": "Non vedrai messaggi di altri che menzionano l'utente.", "boost_modal.combo": "Puoi premere {combo} per saltare questo passaggio, la prossima volta", "boost_modal.reblog": "Condividere il post?", "boost_modal.undo_reblog": "Annullare la condivisione del post?", @@ -887,11 +889,11 @@ "mute_modal.hide_options": "Nascondi le opzioni", "mute_modal.indefinite": "Finché io non le riattivo", "mute_modal.show_options": "Mostre le opzioni", - "mute_modal.they_can_mention_and_follow": "Possono menzionarti e seguirti, ma non li vedrai.", + "mute_modal.they_can_mention_and_follow": "Può menzionarti e seguirti, ma tu non lo/a vedrai.", "mute_modal.they_wont_know": "Non sapranno di essere stati silenziati.", "mute_modal.title": "Silenziare l'utente?", "mute_modal.you_wont_see_mentions": "Non vedrai i post che li menzionano.", - "mute_modal.you_wont_see_posts": "Possono ancora vedere i tuoi post, ma tu non vedrai i loro.", + "mute_modal.you_wont_see_posts": "Potrà ancora vedere i tuoi post, ma tu non vedrai i suoi.", "navigation_bar.about": "Info", "navigation_bar.account_settings": "Password e sicurezza", "navigation_bar.administration": "Amministrazione", @@ -1133,7 +1135,7 @@ "report.forward": "Inoltra a {target}", "report.forward_hint": "Il profilo proviene da un altro server. Inviare anche lì una copia anonima del rapporto?", "report.mute": "Silenzia", - "report.mute_explanation": "Non visualizzerai i suoi post. Potrà comunque seguirti e visualizzare i tuoi post e non saprà di esser stato silenziato.", + "report.mute_explanation": "Non visualizzerai i suoi post. Potrà comunque seguirti e visualizzare i tuoi post e non saprà di esser stato/a silenziato/a.", "report.next": "Successivo", "report.placeholder": "Commenti aggiuntivi", "report.reasons.dislike": "Non mi piace", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index 56ca50eea65e32..080e2d181395b1 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -39,6 +39,7 @@ "account.featured.accounts": "Imeɣna", "account.featured.collections": "Tilkensa", "account.featured.new_collection": "Talkensit tamaynut", + "account.field_overflow": "Wali akk agbur", "account.filters.all": "Akk irmad", "account.filters.boosts_toggle": "Sken-d izuzar", "account.filters.posts_boosts": "Tisuffaɣ akked tizuzar", @@ -62,6 +63,11 @@ "account.follows_you": "Yeṭṭafaṛ-ik·em-id", "account.go_to_profile": "Ddu ɣer umaɣnu", "account.hide_reblogs": "Ffer ayen i ibeṭṭu @{name}", + "account.join_modal.day": "Ass", + "account.join_modal.me": "Terniḍ-d ɣer {server} ass n", + "account.join_modal.me_today": "Ass-a, d ass-ik⋅im amezwaru deg {server}!", + "account.join_modal.other": "{name} yerna-d ɣer {server} ass n", + "account.join_modal.other_today": "D ass amezwaru n {name} ɣef {server}!", "account.joined_short": "Izeddi da seg ass n", "account.languages": "Beddel tutlayin yettwajerden", "account.last_active": "Armud aneggaru", @@ -259,12 +265,16 @@ "collections.edit_details": "Ẓreg talqayt", "collections.hidden_accounts_link": "{count, plural, one {# n umiḍan uffir} other {# n imiḍanen yettwaffaren}}", "collections.hints.accounts_counter": "{count}/{max} n imiḍanen", + "collections.last_updated_at": "Taẓrigt taneggarut: {date}", + "collections.list.created_by_author": "D-yesnulfa {name}", + "collections.list.created_by_you": "D-tesnulfaḍ", "collections.manage_accounts": "Sefrek imiḍanen", "collections.name_length_hint": "talast n 40 n yisekkilen", "collections.new_collection": "Talkensit tamaynut", "collections.remove_account": "Kkes", "collections.report_collection": "Cetki ɣef telkensit-a", "collections.revoke_collection_inclusion": "Kkes-iyi seg telkensit-a", + "collections.search_accounts_label": "Nadi ɣef umiḍan ara ternuḍ", "collections.share_short": "Bḍu", "collections.view_collection": "Wali talkensit", "collections.visibility_public": "Azayaz", @@ -387,6 +397,7 @@ "disabled_account_banner.account_settings": "Iɣewwaṛen n umiḍan", "dismissable_banner.dismiss": "Agi", "domain_block_modal.block": "Sewḥel aqeddac", + "domain_block_modal.block_account_instead": "Sewḥel @{name} deg nnuba-s", "domain_block_modal.they_cant_follow": "Yiwen ur yezmir ad k·m-id-yeḍfer seg uqeddac-a.", "domain_block_modal.they_wont_know": "Ur-d yettawi ara s lexbaṛ belli yettuseḥbes.", "domain_block_modal.title": "Sewḥel taɣult?", @@ -478,6 +489,7 @@ "follow_suggestions.who_to_follow": "Ad tḍefreḍ?", "followed_tags": "Ihacṭagen yettwaḍfaren", "followers.title": "Yeṭṭafaṛ {name}", + "following.title": "Yeṭṭafar-it {name}", "footer.about": "Ɣef", "footer.about_mastodon": "Ɣef Mastodon", "footer.about_server": "Ɣef {domain}", @@ -826,10 +838,13 @@ "server_banner.active_users": "iseqdacen urmiden", "server_banner.administered_by": "Yettwadbel sɣur :", "server_banner.is_one_of_many": "{domain} d yiwen seg seg waṭṭas n iqeddacen imzurag n Mastodon i tzemreḍ ad tsqesdceḍ i wakken ad tettekkiḍ deg fediverse.", + "server_banner.more_about_this_server": "Issin ugar ɣef uqeddac-a", "server_banner.server_stats": "Tidaddanin n uqeddac:", "sign_in_banner.create_account": "Snulfu-d amiḍan", "sign_in_banner.sign_in": "Qqen", "sign_in_banner.sso_redirect": "Qqen neɣ jerred", + "skip_links.skip_to_content": "Kcem ɣer ugbur agejdan", + "skip_links.skip_to_navigation": "Kcem ɣer tunigin tagejdant", "status.admin_status": "Open this status in the moderation interface", "status.block": "Seḥbes @{name}", "status.bookmark": "Creḍ", @@ -837,6 +852,7 @@ "status.cannot_reblog": "Tasuffeɣt-a ur tezmir ara ad tettwabḍu tikelt-nniḍen", "status.contains_quote": "Yegber tanebdurt", "status.context.loading": "Aɛebbi n tririyin nniḍen", + "status.context.loading_success": "Ttuɛebbant-d tririyin timaynutin", "status.context.more_replies_found": "Ugar n tririyin ttwafent", "status.context.retry": "Ɛreḍ tikkelt nniḍen", "status.context.show": "Sken-d", @@ -872,11 +888,13 @@ "status.quote_noun": "Tanebdurt", "status.quote_policy_change": "Snifel anwa i izemren ad d-yebder", "status.quote_post_author": "Yebder-d tasuffeɣt sɣur @{name}", + "status.quotes_count": "{count, plural, one {{counter} n tnebdurt} other {{counter} n tnebdurin}}", "status.read_more": "Issin ugar", "status.reblog": "Bḍu", "status.reblog_or_quote": "Zuzer neɣ ader-d", "status.reblogged_by": "Yebḍa-tt {name}", "status.reblogs.empty": "Ula yiwen ur yebḍi tajewwiqt-agi ar tura. Ticki yebḍa-tt yiwen, ad d-iban da.", + "status.reblogs_count": "{count, plural, one {{counter} n uzuzer} other {{counter} n yizuzar}}", "status.redraft": "Kkes tɛiwdeḍ tira", "status.remove_bookmark": "Kkes tacreḍt", "status.remove_quote": "Kkes", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 9a81ab554a6eb8..5067e505a4b494 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -53,7 +53,7 @@ "account.follow": "Fylg", "account.follow_back": "Fylg tilbake", "account.follow_back_short": "Fylg tilbake", - "account.follow_request": "Folk du vil fylgja", + "account.follow_request": "Be om å fylgja", "account.follow_request_cancel": "Avbryt førespurnaden", "account.follow_request_cancel_short": "Avbryt", "account.follow_request_short": "Førespurnad", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index e3445e75bb9dac..ff3f829aa8f4d7 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -224,6 +224,10 @@ "account_edit.profile_tab.show_media.title": "\"Medya\" sekmesini göster", "account_edit.profile_tab.show_media_replies.description": "Etkinleştirildiğinde Medya sekmesi hem kendi gönderilerinizi hem de diğer kişilerin gönderilerine verdiğiniz yanıtları gösterir.", "account_edit.profile_tab.show_media_replies.title": "\"Medya\" sekmesinde yanıtları göster", + "account_edit.profile_tab.show_relations.description": "Profilinizde takip ettiğiniz hesapları ve sizi takip eden kullanıcıları gösterir. Diğer kullanıcılar, sizin onları takip edip etmediğinizi yine de görebileceklerdir.", + "account_edit.profile_tab.show_relations.title": "'Takipçilerimi' ve 'Takip Ettiklerimi' Göster", + "account_edit.profile_tab.subtitle": "Profilinizin görüntülenme şeklini özelleştirin.", + "account_edit.profile_tab.title": "Profil görüntüleme ayarları", "account_edit.save": "Kaydet", "account_edit.upload_modal.back": "Geri", "account_edit.upload_modal.done": "Tamamlandı", @@ -251,6 +255,7 @@ "account_edit_tags.search_placeholder": "Bir etiket girin…", "account_edit_tags.suggestions": "Öneriler:", "account_edit_tags.tag_status_count": "{count, plural, one {# gönderi} other {# gönderi}}", + "account_list.hidden_notice": "Bu liste yalnızca sizin tarafınızdan görülebilir. Bu listeyi başkalarına göstermek için {page} > {modal} > {field} adresine gidin.", "account_list.total": "{total, plural, one {# hesap} other {# hesap}}", "account_note.placeholder": "Not eklemek için tıklayın", "admin.dashboard.daily_retention": "Kayıttan sonra günlük kullanıcı saklama oranı", @@ -323,11 +328,15 @@ "annual_report.summary.share_on_mastodon": "Mastodon'da Paylaş", "attachments_list.unprocessed": "(işlenmemiş)", "audio.hide": "Sesi gizle", + "block_modal.no_collections": "İkiniz de birbirinizi koleksiyonlarınıza ekleyemezsiniz. Varsa, birbirinizin mevcut koleksiyonlarından otomatik olarak kaldırılacaksınız.", "block_modal.remote_users_caveat": "{domain} sunucusundan kararınıza saygı duymasını isteyeceğiz. Ancak, Uymaları garanti değildir çünkü bazı sunucular engellemeyi farklı şekilde yapıyorlar. Herkese açık gönderiler giriş yapmamış kullanıcılara görüntülenmeye devam edebilir.", "block_modal.show_less": "Daha az göster", "block_modal.show_more": "Daha fazla göster", + "block_modal.they_cant_mention": "Birbirinizden bahsedemez, birbirinizi takip edemez veya birbirinizin sözlerini alıntılayamazsınız.", + "block_modal.they_cant_see_posts": "Onlar sizin içeriğinizi göremezler, siz de onlarınkini göremezsiniz.", "block_modal.they_will_know": "Engellendiklerini görebiliyorlar.", "block_modal.title": "Kullanıcıyı engelle?", + "block_modal.you_wont_see_mentions": "Onlardan bahseden diğer kullanıcıların gönderilerini göremeyeceksiniz.", "boost_modal.combo": "Bir daha ki sefere {combo} tuşuna basabilirsin", "boost_modal.reblog": "Gönderiyi yeniden paylaş?", "boost_modal.undo_reblog": "Gönderinin yeniden paylaşımını geri al?", @@ -390,6 +399,7 @@ "collections.detail.share": "Bu koleksiyonu paylaş", "collections.detail.you_are_in_this_collection": "Bu koleksiyonda öne çıkanlardasınız", "collections.edit_details": "Ayrıntıları düzenle", + "collections.error_loading_collections": "Bu koleksiyonları yüklemeye çalışırken bir hata oluştu.", "collections.hidden_accounts_description": "Bu {count, plural, one {kullanıcıyı} other {kullanıcıları}} engellediniz veya sessize aldınız", "collections.hidden_accounts_link": "{count, plural, one {# gizli hesap} other {# gizli hesap}}", "collections.hints.accounts_counter": "{count}/{max} hesap", @@ -639,6 +649,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.featured_in": "Henüz herhangi bir koleksiyona atanmadınız.", "empty_column.community": "Yerel zaman çizelgesi boş. Daha fazla eğlence için herkese açık bir gönderi paylaşın!", "empty_column.direct": "Henüz doğrudan değinmeniz yok. Bir tane gönderdiğinizde veya aldığınızda burada listelenecek.", "empty_column.disabled_feed": "Bu akış sunucu yöneticileri tarafından devre dışı bırakılmıştır.", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index c72ad4ccf424f9..de45c3dffe73db 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -328,11 +328,15 @@ "annual_report.summary.share_on_mastodon": "Chia sẻ lên Mastodon", "attachments_list.unprocessed": "(chưa xử lí)", "audio.hide": "Ẩn âm thanh", + "block_modal.no_collections": "Cả hai bạn đều không thể thêm nhau vào gói khởi đầu. Nếu có, bạn sẽ tự động bị xóa khỏi gói khởi đầu hiện có của người kia.", "block_modal.remote_users_caveat": "Chúng tôi sẽ yêu cầu {domain} tôn trọng quyết định của bạn. Tuy nhiên, việc tuân thủ không được đảm bảo vì một số máy chủ có thể xử lý việc chặn theo cách khác nhau. Các tút công khai vẫn có thể hiển thị đối với người dùng chưa đăng nhập.", "block_modal.show_less": "Thu gọn", "block_modal.show_more": "Hiện thêm", + "block_modal.they_cant_mention": "Bạn không thể nhắc đến, theo dõi hoặc trích dẫn lẫn nhau.", + "block_modal.they_cant_see_posts": "Bạn và họ sẽ không nhìn thấy tút của nhau.", "block_modal.they_will_know": "Họ sẽ biết đã bị bạn chặn.", "block_modal.title": "Chặn tài khoản này?", + "block_modal.you_wont_see_mentions": "Bạn không còn thấy tút có nhắc đến họ.", "boost_modal.combo": "Nhấn {combo} để bỏ qua bước này", "boost_modal.reblog": "Đăng lại?", "boost_modal.undo_reblog": "Bỏ đăng lại?", diff --git a/config/locales/de.yml b/config/locales/de.yml index 6d377c9962c075..1521df439a2776 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -516,9 +516,16 @@ de: index: disabled: get_started: Loslegen + lead: Ermögliche Gästen, Beiträge von ausgewählten Konten dieses Servers per E-Mail zu abonnieren. + title: E-Mail-Newsletter + purged_msg: Alle Daten zu E-Mail-Abonnements werden gelöscht. roles: accounts: Konten edit_role: Rolle bearbeiten + empty: + hint: Niemand hat die Berechtigung, diese Funktion zu verwenden. + no_roles_added: Keine Rollen hinzugefügt + lead: Die folgenden Rollen berechtigen zur Aktivierung der Funktion. manage_roles: Rollen verwalten role_name: Name der Rolle title: Rollen diff --git a/config/locales/fr-CA.yml b/config/locales/fr-CA.yml index 603ed0c15b770d..e5c8f759b79b3a 100644 --- a/config/locales/fr-CA.yml +++ b/config/locales/fr-CA.yml @@ -487,6 +487,71 @@ fr-CA: resolved_dns_records_hint_html: Le nom de domaine est lié aux domaines MX suivants, qui sont responsables de la réception des courriels. Le blocage d'un domaine MX empêchera l'inscription de toute adresse de courriel utilisant le même domaine MX, et ce même si le nom de domaine visible est différent. Veillez à ne pas bloquer les principaux fournisseurs de services de messagerie. resolved_through_html: Résolu par %{domain} title: Domaines de messagerie électronique bloqués + 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 + subscribers: Abonné·e·s + title: Listes de diffusion + additional_footer_texts: + show: + title: Texte de pied de page supplémentaire + compliance_settings: + additional_footer_text: + action: Gérer + hint: Texte facultatif qui apparaît uniquement dans le pied de page des lettres d'information par courriel + title: Texte de pied de page supplémentaire + lead: Les lettres d'information peuvent être considérées comme des courriels de marketing, selon les juridictions où vous opérez. + privacy_policy: + action: Gérer + hint: Cette politique est liée dans le pied de page de chaque courriel + title: Politique de confidentialité + title: Paramètres de conformité + danger_zone: + disable_feature: + action: Désactiver + hint: Désactiver la fonctionnalité pour tous les comptes + title: Désactiver la fonctionnalité + erase_all_data: + action: Effacer les données + hint: Supprime définitivement toutes les adresses de courriel de toutes les listes de diffusion + title: Effacer toutes les données + title: Zone de danger + disabled_msg: Les abonnements par courriel ont été désactivés avec succès. + index: + disabled: + cannot_be_enabled: Votre fournisseur technique n'a pas activé cette fonctionnalité pour votre serveur. + description: Cette fonctionnalité permet aux comptes spécifiés d'ajouter un composant à leurs profils, permettant aux visiteur·euse·s sans compte Mastodon de recevoir leurs messages par courriel. + get_started: Premiers pas + lead: Permettre aux visiteur·euse·s de recevoir des messages par courriel à partir de comptes dédiés sur ce serveur. + title: Lettres d'information par courriel + purged_msg: Toutes les données d'abonnement par courriel sont en cours de suppression. + roles: + accounts: Comptes + edit_role: Modifier le rôle + empty: + hint: Personne n'a l'autorisation d'utiliser cette fonctionnalité. + no_roles_added: Aucun rôle ajouté + lead: Les comptes avec les rôles suivants peuvent activer cette fonctionnalité sur leurs profils. + manage_roles: Gérer les rôles + role_name: Nom du rôle + title: Rôles + setups: + show: + enable_feature: Activer la fonctionnalité + important_information: Information importante + list: + 1_permission_explanation: Lorsque cette fonctionnalité est activée, les comptes avec les autorisations désignées peuvent ajouter un formulaire de collecte d'adresses de courriel à leur profil. + 2_feature_explanation: Lorsque des visiteur·euse·s s'inscrivent sur la page de profil d'un compte et confirment leur abonnement, des notifications par courriel seront envoyées lorsque le compte publie de nouveaux messages publics. + 3_privacy_policy_warning: L'équipe d'administration du serveur aura accès aux informations personnelles (adresses de courriel) collectées. Pour cette raison, la politique de confidentialité et les conditions d'utilisation du serveur doivent être mises à jour avant d'utiliser cette fonctionnalité. + 4_cost_warning: Les courriels peuvent entraîner des frais en fonction de la configuration de l'hébergement. Discutez avec votre hébergeur avant de l'activer, car cette fonctionnalité pourrait considérablement augmenter le nombre de courriels envoyés par votre serveur. export_domain_allows: new: title: Importer les autorisations de domaine @@ -792,6 +857,7 @@ fr-CA: manage_custom_emojis: Gérer les émojis personnalisés manage_custom_emojis_description: Permet aux utilisateur⋅rice⋅s de gérer les émoticônes personnalisées sur le serveur manage_email_subscriptions: Gérer les abonnements par courriel + manage_email_subscriptions_description: Permettre aux comptes ayant cette autorisation d'activer la fonctionnalité de lettre d'information par courriel manage_federation: Gérer de la féderation manage_federation_description: Permet aux utilisateur⋅rice⋅s de bloquer ou d'autoriser la fédération avec d'autres domaines, et de contrôler la capacité de livraison manage_invites: Gérer les invitations diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 1522d8f980775a..1a60d7495e82a2 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -487,6 +487,71 @@ fr: resolved_dns_records_hint_html: Le nom de domaine est lié aux domaines MX suivants, qui sont responsables de la réception des courriels. Le blocage d'un domaine MX empêchera l'inscription de toute adresse de courriel utilisant le même domaine MX, et ce même si le nom de domaine visible est différent. Veillez à ne pas bloquer les principaux fournisseurs de services de messagerie. resolved_through_html: Résolu par %{domain} title: Domaines de messagerie électronique bloqués + 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 + subscribers: Abonné·e·s + title: Listes de diffusion + additional_footer_texts: + show: + title: Texte de pied de page supplémentaire + compliance_settings: + additional_footer_text: + action: Gérer + hint: Texte facultatif qui apparaît uniquement dans le pied de page des lettres d'information par courriel + title: Texte de pied de page supplémentaire + lead: Les lettres d'information peuvent être considérées comme des courriels de marketing, selon les juridictions où vous opérez. + privacy_policy: + action: Gérer + hint: Cette politique est liée dans le pied de page de chaque courriel + title: Politique de confidentialité + title: Paramètres de conformité + danger_zone: + disable_feature: + action: Désactiver + hint: Désactiver la fonctionnalité pour tous les comptes + title: Désactiver la fonctionnalité + erase_all_data: + action: Effacer les données + hint: Supprime définitivement toutes les adresses de courriel de toutes les listes de diffusion + title: Effacer toutes les données + title: Zone de danger + disabled_msg: Les abonnements par courriel ont été désactivés avec succès. + index: + disabled: + cannot_be_enabled: Votre fournisseur technique n'a pas activé cette fonctionnalité pour votre serveur. + description: Cette fonctionnalité permet aux comptes spécifiés d'ajouter un composant à leurs profils, permettant aux visiteur·euse·s sans compte Mastodon de recevoir leurs messages par courriel. + get_started: Premiers pas + lead: Permettre aux visiteur·euse·s de recevoir des messages par courriel à partir de comptes dédiés sur ce serveur. + title: Lettres d'information par courriel + purged_msg: Toutes les données d'abonnement par courriel sont en cours de suppression. + roles: + accounts: Comptes + edit_role: Modifier le rôle + empty: + hint: Personne n'a l'autorisation d'utiliser cette fonctionnalité. + no_roles_added: Aucun rôle ajouté + lead: Les comptes avec les rôles suivants peuvent activer cette fonctionnalité sur leurs profils. + manage_roles: Gérer les rôles + role_name: Nom du rôle + title: Rôles + setups: + show: + enable_feature: Activer la fonctionnalité + important_information: Information importante + list: + 1_permission_explanation: Lorsque cette fonctionnalité est activée, les comptes avec les autorisations désignées peuvent ajouter un formulaire de collecte d'adresses de courriel à leur profil. + 2_feature_explanation: Lorsque des visiteur·euse·s s'inscrivent sur la page de profil d'un compte et confirment leur abonnement, des notifications par courriel seront envoyées lorsque le compte publie de nouveaux messages publics. + 3_privacy_policy_warning: L'équipe d'administration du serveur aura accès aux informations personnelles (adresses de courriel) collectées. Pour cette raison, la politique de confidentialité et les conditions d'utilisation du serveur doivent être mises à jour avant d'utiliser cette fonctionnalité. + 4_cost_warning: Les courriels peuvent entraîner des frais en fonction de la configuration de l'hébergement. Discutez avec votre hébergeur avant de l'activer, car cette fonctionnalité pourrait considérablement augmenter le nombre de courriels envoyés par votre serveur. export_domain_allows: new: title: Importer les autorisations de domaine @@ -792,6 +857,7 @@ fr: manage_custom_emojis: Gérer les émojis personnalisés manage_custom_emojis_description: Permet aux utilisateur⋅rice⋅s de gérer les émoticônes personnalisées sur le serveur manage_email_subscriptions: Gérer les abonnements par courriel + manage_email_subscriptions_description: Permettre aux comptes ayant cette autorisation d'activer la fonctionnalité de lettre d'information par courriel manage_federation: Gérer de la féderation manage_federation_description: Permet aux utilisateur⋅rice⋅s de bloquer ou d'autoriser la fédération avec d'autres domaines, et de contrôler la capacité de livraison manage_invites: Gérer les invitations diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 441e067cf9a7f9..41e85c8e65e1e3 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -487,6 +487,70 @@ gl: resolved_dns_records_hint_html: O nome de dominio corresponde cos seguintes dominios MX, que son os responsables últimos de aceptar o correo. Ao bloquear un dominio MX bloquerás a creación de contas para todo enderezo de correo que use o mesmo dominio MX, incluso se o nome de dominio visible é diferente. Ten coidado xa que podes bloquear os principais provedores de correo. resolved_through_html: Resolto a través de %{domain} title: Dominios de correo bloqueados + 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 + subscribers: Subscritoras + title: Listas de correo + additional_footer_texts: + show: + title: Texto adicional no rodapé + compliance_settings: + additional_footer_text: + action: Xestionar + hint: Texto optativo que só aparece no rodapé dos correos do boletín + title: Texto adiciona no rodapé + lead: Os boletíns por correo poden considerarse correos de propaganda, dependendo da xurisdición onde opere o servidor. + privacy_policy: + action: Xestionar + hint: Esta directiva está indicada no rodapé de cada correo + title: Directiva de privacidade + title: Axustes de cumprimento + danger_zone: + disable_feature: + action: Desactivar + hint: Desconectar a ferramenta para todas as contas + title: Desactivar a ferramenta + erase_all_data: + action: Eliminar datos + hint: Elimina de xeito permanente todos os correos de todas as litas de correo + title: Eliminar todos os datos + title: Zona perigosa + disabled_msg: Desactiváronse correctamente todas as subscripcións por correo. + index: + disabled: + cannot_be_enabled: O teu provedor técnico non activou esta ferramenta para o teu servidor. + description: Esta característica permite que as contas indicadas engadan un widget ao seu perfil, para que así as persoas que visitan súa conta Mastodon poidan recibir as súas publicacións por correo electrónico. + get_started: Comezar + lead: Permitir que as visitas reciban as publicacións de certas contas deste servidor por correo electrónico. + title: Boletíns por correo electrónico + purged_msg: Vaise eliminar todos os datos de subscricións por correo. + roles: + accounts: Contas + edit_role: Editar rol + empty: + hint: Ninguén ten permiso para usar esta ferramenta. + no_roles_added: Sen roles engadidos + lead: As contas cos seguintes roles poden activar esta ferramenta no seu perfil. + manage_roles: Xestionar roles + role_name: Nome do rol + title: Roles + setups: + show: + enable_feature: Activar ferramenta + important_information: Información importante + list: + 1_permission_explanation: Cando se activa esta ferramenta as contas cos permisos concedidos poden engadir un formulario no seu perfil para recoller correos. + 2_feature_explanation: Cando unha persoa visita se apunta na páxina do perfil e confirma a súa subscrición, comezará a recibir actualizacións por correo cando a conta publique novas publicacións públicas. + 3_privacy_policy_warning: A administración do servidor vai ter acceso aos PII (enderezos de correo) recollidos. Así, a directiva de privacidade e os termos do servizo do servidor deben actualizarse antes de activar esta ferramenta. export_domain_allows: new: title: Importar dominios permitidos diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 837bb1d6dc0bc5..62250a9bfbb07e 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -487,6 +487,65 @@ hu: resolved_dns_records_hint_html: A domain név a következő MX domain-ekre oldódik fel, melyek valójában fogadják az e-mailt. Az MX domain letiltása minden olyan feliratkozást tiltani fog, melyben az e-mailcím ugyanazt az MX domaint használja, még akkor is, ha a látható domain név más. Légy óvatos, hogy ne tilts le nagy e-mail szolgáltatókat. resolved_through_html: Feloldva %{domain}-n keresztül title: Tiltott e-mail-domainek + 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 + status: Állapot + subscribers: Feliratkozók + title: Levelezőlisták + additional_footer_texts: + show: + title: További láblécszöveg + compliance_settings: + additional_footer_text: + action: Kezelés + hint: Nem kötelező szöveg, amely csak a hírlevelek láblécében jelenik meg + title: További láblécszöveg + lead: Az e-mailes hírlevelek marketinglevélnek számíthatnak a joghatóságodtól függően. + privacy_policy: + action: Kezelés + hint: Ez a nyilatkozat minden egyes levél láblécében be lesz hivatkozva + title: Adatvédelmi szabályzat + title: Megfelelőségi beállítások + danger_zone: + disable_feature: + action: Kikapcsolás + hint: Funkció kikapcsolása az összes fióknál + title: Funkció kikapcsolása + erase_all_data: + action: Adatok törlése + hint: Véglegesen törli az összes e-mailt az összes levelezőlistában + title: Összes adat törlése + title: Veszélyzóna + disabled_msg: Az e-mail-feliratkozások sikeresen ki lettek kapcsolva. + index: + disabled: + cannot_be_enabled: A műszaki szolgáltató nem kapcsolta be ezt a funkciót a kiszolgálód számára. + get_started: Első lépések + title: E-mailes hírlevelek + purged_msg: Az összes e-mail-feliratkozási adat törlése folyamatban van. + roles: + accounts: Fiókok + edit_role: Szerep szerkesztése + empty: + hint: Senkinek sincs engedélye a funkció használatához. + no_roles_added: Nincsenek szerepek hozzáadva + lead: A következő szereppel rendelkező fiókok kapcsolhatják be ezt a funkciót a profiljukban. + manage_roles: Szerepek kezelése + role_name: Szerep neve + title: Szerepek + setups: + show: + enable_feature: Funkció bekapcsolása + important_information: Fontos információk + list: + 3_privacy_policy_warning: A kiszolgálóadminok hozzá fognak férni a gyűjtött személyazonosításra alkalmas információkhoz (e-mail-címek). Ezért a funkció használata előtt frissíteni kell a kiszolgáló Adatvédelmi szabályzatát és a Felhasználási feltételeket. export_domain_allows: new: title: Domain engedélyezések importálása diff --git a/config/locales/is.yml b/config/locales/is.yml index 15e924962e8dac..97c09f79882e83 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -487,6 +487,71 @@ is: resolved_dns_records_hint_html: Heiti lénsins vísar til eftirfarandi MX-léna, sem bera endanlega ábyrgð á að tölvupóstur skili sér. Útilokun á MX-léni mun koma í veg fyrir nýskráningar með hverju því tölvupóstfangi sem notar sama MX-lén, jafnvel þótt sýnilega lénsheitið sé frábrugðið. Farðu varlega svo þú útilokir ekki algengar tölvupóstþjónustur. resolved_through_html: Leyst í gegnum %{domain} title: Útilokuð tölvupóstlén + 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 + subscribers: Áskrifendur + title: Póstlistar + additional_footer_texts: + show: + title: Viðbótartexti neðst í skilaboðum + compliance_settings: + additional_footer_text: + action: Stýra + hint: Valkvæður texti sem birtist neðst í tölvupóstum fréttabréfs + title: Viðbótartexti neðst í skilaboðum + lead: Fréttabréf í tölvupósti eru í sumum lögsagnarumdæmum skilgreind sem markaðsefni. + privacy_policy: + action: Stýra + hint: Tengill sem vísar á þessa stefnu kemur fram neðst í hverjum tölvupósti + title: Meðferð persónuupplýsinga + title: Stillingar á samhæfni við reglur + danger_zone: + disable_feature: + action: Gera óvirkt + hint: Slökkva á eiginleika fyrir alla aðganga + title: Gera eiginleika óvirkan + erase_all_data: + action: Eyða gögnum + hint: Eyða endanlega öllum tölvupóstum í öllum póstlistum + title: Eyða öllum gögnum + title: Hættusvæði + disabled_msg: Tölvupóstáskriftir hafa verið gerðar óvirkar. + index: + disabled: + cannot_be_enabled: Tæknilega þjónustan hefur ekki virkjað þennan eiginleika á netþjóninum þínum. + description: Þessi eiginleiki gerir tilteknum notendum kleift að bæta við viðmótshluta á notendasniðin sín, sem gerir gestum án Mastodon-aðgangs kleift að fá færslurnar þeirra í tölvupósti. + get_started: Byrjum á þessu + lead: Leyfa gestum að sjá færslur frá útvöldum notendum á þessum netþjóni. + title: Fréttabréf í tölvupósti + purged_msg: Verið er að eyða öllum gögnum varðandi tölvupóstáskriftir. + roles: + accounts: Aðgangar + edit_role: Breyta hlutverki + empty: + hint: Enginn hefur heimild til að nota þennan eiginleika. + no_roles_added: Engum hlutverkum bætt við + lead: Aðgangar með eftirfarandi hlutverk geta virkjað þennan eiginleika á notandasniðinu sínu. + manage_roles: Sýsla með hlutverk + role_name: Heiti hlutverks + title: Hlutverk + setups: + show: + enable_feature: Virkja eiginleika + important_information: Mikilvægar upplýsingar + list: + 1_permission_explanation: Þegar þessi eiginleiki er virkur, munu aðgangar með tilteknar heimildir geta bætt söfnunarformi fyrir tölvupóst á notendasniðin sín. + 2_feature_explanation: Þegar gestir skrá sig á notendasniðssíðu aðgangs og staðfesta skráninguna, þá munu þeir fara að fá fréttir í tölvupósti þegar sá aðgangur útbýr nýjar opinberar færslur. + 3_privacy_policy_warning: Stjórnendur netþjóna munu hafa aðgang að þeim PII (tölvupóstföngum) sem safnað er. Þar með þarf að uppfæra stefnur varðandi meðferð persónuupplýsinga og þjónustuskilmála fyrir netþjóninn áður en þessi eiginleiki er notaður. + 4_cost_warning: Tölvupóstar geta haft kostað í för með sér, sé uppsetning hýsingar á tilteknu formi. Hafðu samband við hýsingarþjónustuna þína áður en þú virkjar þetta, þar sem þessi eiginleiki gæti valdið mikilli aukningu á þeim fjölda tölvupóstskilaboða sem send verða frá netþjóninum þínum. export_domain_allows: new: title: Flytja inn leyfileg lén @@ -792,6 +857,7 @@ is: manage_custom_emojis: Sýsla með sérsniðin lyndistákn manage_custom_emojis_description: Leyfir notendum að sýsla með sérsniðin lyndistákn á netþjóninum manage_email_subscriptions: Sýsla með tölvupóstáskriftir + manage_email_subscriptions_description: Leyfa notendum með þessa heimild að virkja áskrift að færslum í tölvupósti fyrir aðganginn þeirra manage_federation: Sýsla með netþjónasambönd manage_federation_description: Leyfir notendum að loka á eða leyfa samþættingu við önnur lén (federation) og stýra afhendingu skilaboða manage_invites: Sýsla með boðsgesti diff --git a/config/locales/it.yml b/config/locales/it.yml index 317d829cd5e9b0..72260e1a40c46a 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -490,6 +490,67 @@ 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 + subscribers: Iscritti + title: Mailing list + additional_footer_texts: + show: + title: Testo aggiuntivo a piè di pagina + compliance_settings: + additional_footer_text: + action: Gestisci + hint: Testo opzionale che compare solo nel piè di pagina delle email della newsletter + title: Testo aggiuntivo a piè di pagina + lead: Le newsletter via email possono essere considerate email di marketing, a seconda delle giurisdizioni in cui operi. + privacy_policy: + action: Gestisci + hint: Questa informativa è collegata nel piè di pagina di ogni email + title: Informativa sulla privacy + title: Impostazioni di conformità + danger_zone: + disable_feature: + action: Disabilita + hint: Disattiva la funzione per tutti gli account + title: Disabilita la funzionalità + erase_all_data: + action: Cancella i dati + title: Cancella tutti i dati + title: Zona pericolosa + disabled_msg: Le iscrizioni via email sono state disabilitate con successo. + index: + disabled: + cannot_be_enabled: Il tuo provider tecnico non ha abilitato questa funzione per il tuo server. + description: Questa funzione consente ad account specifici di aggiungere un widget ai propri profili, permettendo così ai visitatori sprovvisti di un account Mastodon di ricevere i loro post via email. + get_started: Inizia + lead: Consenti ai visitatori di ricevere post via email da account dedicati su questo server. + title: Newsletter via email + purged_msg: Tutti i dati relativi alle iscrizioni via email verranno cancellati. + roles: + accounts: Account + edit_role: Modifica il ruolo + empty: + hint: Nessuno ha il permesso di usare questa funzione. + no_roles_added: Nessun ruolo aggiunto + lead: Gli account con i seguenti ruoli possono abilitare questa funzione sui loro profili. + manage_roles: Gestisci i ruoli + role_name: Nome del ruolo + title: Ruoli + setups: + show: + enable_feature: Abilita la funzione + important_information: Informazioni importanti + list: + 1_permission_explanation: Quando questa funzione è abilitata, gli account con i permessi designati possono aggiungere un modulo di raccolta indirizzi email ai loro profili. + 2_feature_explanation: Quando i visitatori si registrano sulla pagina del profilo di un account e confermano l'iscrizione, inizieranno a ricevere aggiornamenti via email quando l'account crea nuovi post pubblici. + 3_privacy_policy_warning: Gli amministratori del server avranno accesso alle informazioni di identificazione personale (indirizzi email) raccolte. Pertanto, l'informativa sulla privacy e i termini di servizio per il server devono essere aggiornati prima di utilizzare questa funzione. + 4_cost_warning: L'invio di email potrebbe comportare dei costi a seconda della configurazione del servizio di hosting. Prima di abilitare questa funzione, è consigliabile parlarne con il proprio provider di hosting, poiché potrebbe aumentare notevolmente il numero di email inviate dal server. export_domain_allows: new: title: Importare i permessi di dominio @@ -795,6 +856,7 @@ it: manage_custom_emojis: Gestisci emoji personalizzate manage_custom_emojis_description: Consente agli utenti di gestire emoji personalizzate sul server manage_email_subscriptions: Gestisci le iscrizioni via email + manage_email_subscriptions_description: Consenti agli utenti con questa autorizzazione di abilitare la funzione di newsletter via email per il loro account manage_federation: Gestisci Federazione manage_federation_description: Consente agli utenti di bloccare o consentire la federazione con altri domini e controllare la consegnabilità manage_invites: Gestisci Inviti diff --git a/config/locales/kab.yml b/config/locales/kab.yml index 897e17c222a3fa..662b3be45f4e9f 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -285,6 +285,29 @@ kab: domain: Taɣult new: create: Rnu taɣult + email_subscriptions: + accounts: + account: Amiḍan + active: D urmid + inactive: D arurmid + last_email: Imayl aneggaru + status: Addad + compliance_settings: + privacy_policy: + title: Tasertit n tbaḍnit + danger_zone: + disable_feature: + action: Kkes armad + erase_all_data: + action: Kkes isefka + index: + disabled: + get_started: Aha bdu tura + roles: + accounts: Imiḍanen + manage_roles: Sefrek timlilin + role_name: Isem n temlilt + title: Timlilin export_domain_allows: no_file: Ula d yiwen ufaylu ma yettwafran export_domain_blocks: @@ -577,8 +600,10 @@ kab: webhooks: delete: Kkes disable: Kkes armad + disabled: Yettwassens enable: Rmed enabled: D urmid + events: Ineḍruyen admin_mailer: new_report: body: "%{reporter} yettwazen ɣef %{target}" @@ -636,6 +661,7 @@ kab: progress: confirm: Asentem n imayl details: Isalli-inek·inem + list: Tikli n ujerred review: Tamuɣli-nneɣ rules: Abal n ilugan providers: @@ -658,6 +684,7 @@ kab: set_new_password: Egr-d awal uffir amaynut setup: link_not_received: Ur k-id-iṣaḥ ara wassaɣ ? + title: Sefqed Tanaka-inek⋅inem sign_in: preamble_html: Kcem ar %{domain} s inekcam-inek n tuqqna. Ma yella yezga-d umiḍan-ik deg uqeddac-nniḍen, ur tezmireḍ ara ad tkecmeḍ sya. title: Akeččum ɣer %{domain} @@ -720,6 +747,7 @@ kab: none: Ɣur-wat edit_profile: other: Ayen nniḍen + redesign_button: Ddu ɣer din email_subscription_mailer: confirmation: action: Sentem tansa imayl @@ -873,6 +901,8 @@ kab: title: Azuzer amaynut status: subject: "%{name} akken i d-y·t·essufeɣ" + update: + subject: "%{name} isenfel tira n yiwen n yizen" number: human: decimal_units: @@ -1032,6 +1062,8 @@ kab: sensitive_content: Agbur amḥulfu terms_of_service: title: Tiwtilin n useqdec + themes: + default: Mastodon time: formats: default: "%d %b %Y, %H:%M" @@ -1047,6 +1079,9 @@ kab: enabled_success: Asesteb s snat n tarrayin yermed akken iwata otp: Asnas n usesteb webauthn: Tisura n teɣlist + unsubscriptions: + create: + action: Ddu ɣer usebter agejdan n uqeddac user_mailer: appeal_approved: action: Iɣewwaṛen n umiḍan @@ -1058,6 +1093,7 @@ kab: categories: spam: Aspam reason: 'Taɣẓint:' + statuses: 'Iznan d-yettwabedren:' title: disable: Amiḍan i igersen none: Ɣur-wat diff --git a/config/locales/simple_form.fr-CA.yml b/config/locales/simple_form.fr-CA.yml index cfb33954e3147d..7bb41766079473 100644 --- a/config/locales/simple_form.fr-CA.yml +++ b/config/locales/simple_form.fr-CA.yml @@ -92,6 +92,7 @@ fr-CA: closed_registrations_message: Affiché lorsque les inscriptions sont fermées content_cache_retention_period: Tous les messages provenant d'autres serveurs (y compris les partages et les réponses) seront supprimés passé le nombre de jours spécifié, sans tenir compte des interactions locales avec ces messages. Cela inclut les messages qu'un·e utilisateur·rice aurait marqué comme signets ou favoris. Les mentions privées entre utilisateur·rice·s de différentes instances seront également perdues et impossibles à restaurer. L'utilisation de ce paramètre est destinée à des instances spécifiques et contrevient à de nombreuses attentes des utilisateur·rice·s lorsqu'il est appliquée à une instance généraliste. custom_css: Vous pouvez appliquer des styles personnalisés sur la version Web de Mastodon. + email_footer_text: Texte facultatif qui apparaît uniquement dans le pied de page des lettres d'information par courriel. favicon: WebP, PNG, GIF ou JPG. Remplace la favicon Mastodon par défaut avec une icône personnalisée. landing_page: Sélectionne la page à afficher aux nouveaux visiteur·euse·s quand ils arrivent sur votre serveur. Pour utiliser « Tendances » les tendances doivent être activées dans les paramètres de découverte. Pour utiliser « Fil local » le paramètre « Accès au flux en direct de ce serveur » doit être défini sur « Tout le monde » dans les paramètres de découverte. mascot: Remplace l'illustration dans l'interface Web avancée. @@ -294,6 +295,7 @@ fr-CA: closed_registrations_message: Message personnalisé lorsque les inscriptions ne sont pas disponibles content_cache_retention_period: Durée de rétention du contenu distant custom_css: CSS personnalisé + email_footer_text: Texte de pied de page supplémentaire favicon: Favicon landing_page: Page d'accueil pour les nouveaux visiteurs local_live_feed_access: Accès au flux en direct de ce serveur @@ -322,6 +324,9 @@ fr-CA: trendable_by_default: Autoriser les tendances sans révision préalable trends: Activer les tendances wrapstodon: Activer Wrapstodon + form_email_subscriptions_confirmation: + agreement_email_volume: Je comprends que l'activation de cette fonctionnalité peut augmenter considérablement le volume de courriels envoyés par le serveur et que je suis seul responsable des coûts encourus. + agreement_privacy_and_terms: J'ai mis à jour la politique de confidentialité et les conditions d'utilisation. interactions: must_be_follower: Bloquer les notifications des personnes qui ne vous suivent pas must_be_following: Bloquer les notifications des personnes que vous ne suivez pas diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml index fcd906ce67a976..d682488b9e11fa 100644 --- a/config/locales/simple_form.fr.yml +++ b/config/locales/simple_form.fr.yml @@ -92,6 +92,7 @@ fr: closed_registrations_message: Affiché lorsque les inscriptions sont fermées content_cache_retention_period: Tous les messages provenant d'autres serveurs (y compris les partages et les réponses) seront supprimés passé le nombre de jours spécifié, sans tenir compte des interactions locales avec ces messages. Cela inclut les messages qu'un·e utilisateur·rice aurait marqué comme signets ou favoris. Les mentions privées entre utilisateur·rice·s de différentes instances seront également perdues et impossibles à restaurer. L'utilisation de ce paramètre est destinée à des instances spécifiques et contrevient à de nombreuses attentes des utilisateur·rice·s lorsqu'il est appliquée à une instance généraliste. custom_css: Vous pouvez appliquer des styles personnalisés sur la version Web de Mastodon. + email_footer_text: Texte facultatif qui apparaît uniquement dans le pied de page des lettres d'information par courriel. favicon: WebP, PNG, GIF ou JPG. Remplace la favicon Mastodon par défaut avec une icône personnalisée. landing_page: Sélectionne la page à afficher aux nouveaux visiteur·euse·s quand ils arrivent sur votre serveur. Pour utiliser « Tendances » les tendances doivent être activées dans les paramètres de découverte. Pour utiliser « Fil local » le paramètre « Accès au flux en direct de ce serveur » doit être défini sur « Tout le monde » dans les paramètres de découverte. mascot: Remplace l'illustration dans l'interface Web avancée. @@ -294,6 +295,7 @@ fr: closed_registrations_message: Message personnalisé lorsque les inscriptions ne sont pas disponibles content_cache_retention_period: Durée de rétention du contenu distant custom_css: CSS personnalisé + email_footer_text: Texte de pied de page supplémentaire favicon: Favicon landing_page: Page d'accueil pour les nouveaux visiteurs local_live_feed_access: Accès au flux en direct de ce serveur @@ -322,6 +324,9 @@ fr: trendable_by_default: Autoriser les tendances sans révision préalable trends: Activer les tendances wrapstodon: Activer Wrapstodon + form_email_subscriptions_confirmation: + agreement_email_volume: Je comprends que l'activation de cette fonctionnalité peut augmenter considérablement le volume de courriels envoyés par le serveur et que je suis seul responsable des coûts encourus. + agreement_privacy_and_terms: J'ai mis à jour la politique de confidentialité et les conditions d'utilisation. interactions: must_be_follower: Bloquer les notifications des personnes qui ne vous suivent pas must_be_following: Bloquer les notifications des personnes que vous ne suivez pas diff --git a/config/locales/simple_form.hu.yml b/config/locales/simple_form.hu.yml index ac4c27bb52e241..b9582b474e3639 100644 --- a/config/locales/simple_form.hu.yml +++ b/config/locales/simple_form.hu.yml @@ -92,6 +92,7 @@ hu: closed_registrations_message: Akkor jelenik meg, amikor a regisztráció le van zárva content_cache_retention_period: Minden más kiszolgálóról származó bejegyzés (megtolásokkal és válaszokkal együtt) törölve lesz a megadott számú nap elteltével, függetlenül a helyi felhasználók ezekkel a bejegyzésekkel történő interakcióitól. Ebben azok a bejegyzések is benne vannak, melyeket a helyi felhasználó könyvjelzőzött vagy kedvencnek jelölt. A különböző kiszolgálók felhasználói közötti privát üzenetek is el fognak veszni visszaállíthatatlanul. Ennek a beállításnak a használata különleges felhasználási esetekre javasolt, mert számos felhasználói elvárás fog eltörni, ha általános céllal használják. custom_css: A Mastodon webes verziójában használhatsz egyéni stílusokat. + email_footer_text: Nem kötelező szöveg, amely csak a hírlevelek láblécében jelenik meg. favicon: WEBP, PNG, GIF vagy JPG. Az alapértelmezett Mastodon favicont felülírja egy egyéni ikonnal. landing_page: Kiválasztja, hogy a webhely új látogatói mit látnak, amikor először érkeznek a kiszolgálóra. Ha a „Trendek” lehetőséget választod, akkor engedélyezni kell a trendeket a Felfedezési beállításokban. Ha a „Helyi hírfolyamot” választod, akkor a „Helyi bejegyzéseket tartalmazó helyi élő idővonalak elérése” lehetőséget „Mindenki” értékre kell állítani a Felfedezési beállításokban. mascot: Felülbírálja a speciális webes felületen található illusztrációt. @@ -294,6 +295,7 @@ hu: closed_registrations_message: A feliratkozáskor megjelenő egyéni üzenet nem érhető el content_cache_retention_period: Távoli tartalmak megtartási időszaka custom_css: Egyéni CSS + email_footer_text: További láblécszöveg favicon: Könyvjelzőikon landing_page: Kezdőoldal az új látogatóknak local_live_feed_access: Helyi bejegyzéseket bemutató élő hírfolyamok elérése @@ -322,6 +324,8 @@ hu: trendable_by_default: Trendek engedélyezése előzetes ellenőrzés nélkül trends: Trendek engedélyezése wrapstodon: Wrapstodon engedélyezése + form_email_subscriptions_confirmation: + agreement_privacy_and_terms: Frissítettem az Adatvédelmi szabályzatot és a Felhasználási feltételeket. interactions: must_be_follower: Nem követőidtől érkező értesítések tiltása must_be_following: Nem követettjeidtől érkező értesítések tiltása diff --git a/config/locales/simple_form.is.yml b/config/locales/simple_form.is.yml index bc863a8d912db1..8556716840d3d6 100644 --- a/config/locales/simple_form.is.yml +++ b/config/locales/simple_form.is.yml @@ -92,6 +92,7 @@ is: closed_registrations_message: Birtist þegar lokað er á nýskráningar content_cache_retention_period: Öllum færslum af öðrum netþjónum (þar með taldar endurbirtingar og svör) verður eytt eftir uppgefinn fjölda daga, án tillits til gagnvirkni staðværra notenda við þessar færslur. Þetta á einnig við um færslur sem notandinn hefur merkt sem bókamerki eða eftirlæti. Beinar tilvísanir (einkaspjall) milli notenda af mismunandi netþjónum munu einnig tapast og er engin leið til að endurheimta þær. Notkun á þessari stillingu er einungis ætluð sérstilltum netþjónum og mun skemma fyrir notendum ef þetta er sett upp fyrir almenna notkun. custom_css: Þú getur virkjað sérsniðna stíla í vefútgáfu Mastodon. + email_footer_text: Valkvæður texti sem birtist neðst í tölvupóstum fréttabréfs. favicon: WEBP, PNG, GIF eða JPG. Tekur yfir sjálfgefna Mastodon favicon-táknmynd með sérsniðinni táknmynd. landing_page: Þetta ákvarðar hvaða síðu nýir gestir sjá þegar þeir koma fyrst á netþjóninn þinn. Ef þú velur "Vinsælt" þá þurfa vinsælar færslur að vera virkjaðar í stillingum fyrir Uppgötvun. Ef þú velur "Staðbundið streymi" þá þarf "Aðgangur að beinum streymum, þar með töldum staðværum færslum" að vera stillt á "Allir" í stillingum fyrir Uppgötvun. mascot: Þetta tekyr yfir myndskreytinguna í ítarlega vefviðmótinu. @@ -294,6 +295,7 @@ is: closed_registrations_message: Sérsniðin skilaboð þegar ekki er hægt að nýskrá content_cache_retention_period: Tímabil sem á að geyma fjartengt efni custom_css: Sérsniðið CSS + email_footer_text: Viðbótartexti neðst í skilaboðum favicon: Auðkennismynd landing_page: Kynningarsíða fyrir nýja gesti local_live_feed_access: Aðgangur að beinum streymum, þar með töldum staðværum færslum @@ -322,6 +324,9 @@ is: trendable_by_default: Leyfa vinsælt efni án undanfarandi yfirferðar trends: Virkja vinsælt wrapstodon: Virkja Ársuppgjörið + form_email_subscriptions_confirmation: + agreement_email_volume: Ég skil að þessi eiginleiki gæti valdið mikilli aukningu á þeim fjölda tölvupóstskilaboða sem send verða frá netþjóninum og að ég beri alfarið ábyrgð á þeim aukna kostnaði sem af þessu gæti hlotist. + agreement_privacy_and_terms: Ég hef uppfært stefnur varðandi meðferð persónuupplýsinga og þjónustuskilmála. interactions: must_be_follower: Loka á tilkynningar frá þeim sem ekki eru fylgjendur must_be_following: Loka á tilkynningar frá þeim sem þú fylgist ekki með diff --git a/config/locales/simple_form.kab.yml b/config/locales/simple_form.kab.yml index 9c41da1e0e2093..313cca2036e67a 100644 --- a/config/locales/simple_form.kab.yml +++ b/config/locales/simple_form.kab.yml @@ -102,6 +102,7 @@ kab: setting_display_media_show_all: Sken-iten-id akk setting_emoji_style: Aɣanib n yimujiten setting_hide_network: Ffer azetta-k·m inmetti + setting_system_font_ui: Seqdec tasefsit tamezwert n unagraw setting_theme: Asental n wesmel setting_trends: Sken-d inezzaɣ n wass-a setting_use_pending_items: Askar aleɣwayan diff --git a/config/locales/simple_form.tr.yml b/config/locales/simple_form.tr.yml index c3630cf6155c3f..5b4c1d2a463929 100644 --- a/config/locales/simple_form.tr.yml +++ b/config/locales/simple_form.tr.yml @@ -92,6 +92,7 @@ tr: closed_registrations_message: Kayıt olma kapalıyken görüntülenir content_cache_retention_period: Diğer sunuculardaki (öne çıkarma ve yanıtlar da dahil olmak üzere) tüm gönderiler belirlenen gün sonunda, yerel bir kullanıcının etkileşimine bakılmadan, silinecektir. Yerel bir kullanıcının yerimlerine veya favorilerine eklediği gönderiler de dahildir. Farklı sunuculardaki kullanıcılar arasındaki özel bahsetmeler de kaybolacak ve geri getirilmeleri mümkün olmayacaktır. Bu ayarın kullanımı özel amaçlı sunucular içindir ve genel amaçlı kullanımda etkinleştirildiğinde kullanıcı beklentilerini karşılamayabilir. custom_css: Mastodon'un web sürümüne özel biçimler uygulayabilirsiniz. + email_footer_text: Yalnızca haber bülteni e-postalarının altbilgisinde görünen isteğe bağlı metin. favicon: WEBP, PNG, GIF veya JPG. Varsayılan Mastodon simgesini isteğe bağlı bir simgeyle değiştirir. landing_page: Yeni ziyaretçilerin sunucunuza ilk geldiklerinde görecekleri sayfayı seçer. "Öne çıkanlar" seçeneğini seçerseniz, Keşif Ayarlarında öne çıkanların etkinleştirilmesi gerekir. "Yerel akış" seçeneğini seçerseniz, Keşif Ayarlarında "Yerel gönderileri içeren canlı akışlara erişim" seçeneğinin "Herkes" olarak ayarlanması gerekir. mascot: Gelişmiş web arayüzündeki illüstrasyonu geçersiz kılar. @@ -294,6 +295,7 @@ tr: closed_registrations_message: Kayıt olma mevcut değilken gösterilen özel ileti content_cache_retention_period: Uzak içerik saklama süresi custom_css: Özel CSS + email_footer_text: Ek altbilgi metni favicon: Yer imi simgesi landing_page: Yeni ziyaretçiler için giriş sayfası local_live_feed_access: Yerel gönderileri ön plana çıkaran canlı akışlara erişim @@ -322,6 +324,9 @@ tr: trendable_by_default: Ön incelemesiz öne çıkanlara izin ver trends: Öne çıkanları etkinleştir wrapstodon: Wrapstodonu Etkinleştir + form_email_subscriptions_confirmation: + agreement_email_volume: Bu özelliği etkinleştirmenin sunucudan gönderilen e-posta sayısını önemli ölçüde artırabileceğini ve ortaya çıkabilecek tüm masraflardan tamamen kendimin sorumlu olduğunu anlıyorum. + agreement_privacy_and_terms: Gizlilik Politikası ve Hizmet Şartları'nı güncelledim. interactions: must_be_follower: Takipçim olmayan kişilerden gelen bildirimleri engelle must_be_following: Takip etmediğim kişilerden gelen bildirimleri engelle diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml index 40a500f0af2898..a5ffe49c44c1e5 100644 --- a/config/locales/simple_form.vi.yml +++ b/config/locales/simple_form.vi.yml @@ -92,6 +92,7 @@ vi: closed_registrations_message: Được hiển thị khi đóng đăng ký content_cache_retention_period: Tất cả tút từ các máy chủ khác (bao gồm cả đăng lại và trả lời) sẽ bị xóa sau số ngày được chỉ định mà không tính đến bất kỳ tương tác nào của người dùng cục bộ với các tút đó. Điều này bao gồm các tút mà người dùng cục bộ đã đánh dấu nó là dấu trang hoặc mục yêu thích. Những lượt nhắc riêng tư giữa những người dùng từ các máy chủ khác nhau cũng sẽ bị mất và không thể khôi phục. Việc sử dụng cài đặt này dành cho các trường hợp có mục đích đặc biệt và phá vỡ nhiều kỳ vọng của người dùng khi được triển khai cho mục đích sử dụng chung. custom_css: Bạn có thể tùy chỉnh phong cách trên bản web của Mastodon. + email_footer_text: Văn bản tùy chọn chỉ xuất hiện ở phần chân trang của bản tin email. favicon: WEBP, PNG, GIF hoặc JPG. Dùng favicon Maston tùy chỉnh. landing_page: Chọn trang mà khách truy cập mới sẽ thấy khi họ lần đầu truy cập máy chủ của bạn. Nếu bạn chọn "Xu hướng", thì cần bật xu hướng trong Cài đặt Khám phá. Nếu bạn chọn "Bảng tin máy chủ", thì cần đặt "Truy cập vào nguồn cấp dữ liệu trực tiếp có bài đăng cục bộ" thành "Mọi người" trong Cài đặt Khám phá. mascot: Ghi đè hình minh họa trong giao diện web nâng cao. @@ -293,6 +294,7 @@ vi: closed_registrations_message: Thông báo tùy chỉnh khi tắt đăng ký content_cache_retention_period: Khoảng thời gian lưu giữ nội dung máy chủ khác custom_css: Tùy chỉnh CSS + email_footer_text: Văn bản chân trang bổ sung favicon: Favicon landing_page: Trang mở đầu dành cho khách ghé thăm local_live_feed_access: Truy cập bảng tin gồm những tút của máy chủ @@ -321,6 +323,9 @@ vi: trendable_by_default: Cho phép lên xu hướng mà không cần duyệt trước trends: Bật xu hướng wrapstodon: Bật Wrapstodon + form_email_subscriptions_confirmation: + agreement_email_volume: Tôi hiểu rằng việc kích hoạt tính năng này có thể làm tăng đáng kể số lượng email được gửi từ máy chủ và tôi hoàn toàn chịu trách nhiệm về mọi chi phí phát sinh. + agreement_privacy_and_terms: Tôi đã cập nhật Chính sách Bảo mật và Điều khoản Dịch vụ. interactions: must_be_follower: Những người không theo dõi bạn must_be_following: Những người bạn không theo dõi diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 2c05c635c6706c..301df709e9929e 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -487,6 +487,71 @@ tr: resolved_dns_records_hint_html: Alan adı aşağıdaki MX alan adlarına çözümleniyor, ancak hiç biri nihayetinde e-posta kabulünden sorum değil. Bir MX alan adını engellemek, görünen alan adı farklı osa bile aynı MX alan adını kullanan e-posta adreslerinden gelen kayıtları engelleyecektir. Başlıca e-posta sağlayıcıları engellememek için dikkatli olun. resolved_through_html: "%{domain} aracılığıyla çözümlendi" title: Engelli e-posta alan adları + 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 + subscribers: Aboneler + title: E-posta listeleri + additional_footer_texts: + show: + title: Ek altbilgi metni + compliance_settings: + additional_footer_text: + action: Yönet + hint: Yalnızca haber bülteni e-postalarının altbilgisinde görünen isteğe bağlı metin + title: Ek altbilgi metni + lead: Faaliyet gösterdiğiniz yargı bölgelerine bağlı olarak, e-posta bültenleri pazarlama amaçlı e-postalar olarak değerlendirilebilir. + privacy_policy: + action: Yönet + hint: Bu politika her e-postanın alt bilgisinde yer alır + title: Gizlilik politikası + title: Uyumluluk ayarları + danger_zone: + disable_feature: + action: Devre dışı bırak + hint: Özelliği tüm hesaplar için kapat + title: Özelliği devre dışı bırak + erase_all_data: + action: Verileri sil + hint: Tüm posta listelerindeki tüm e-postaları kalıcı olarak siler + title: Tüm verileri sil + title: Tehlikeli bölge + disabled_msg: E-posta abonelikleri başarıyla devre dışı bırakıldı. + index: + disabled: + cannot_be_enabled: Teknik hizmet sağlayıcınız sunucunuz için bu özelliği etkinleştirmedi. + description: Bu özellik, belirlenen hesapların profillerine bir widget eklemesine olanak tanıyarak, Mastodon hesabı olmayan ziyaretçilerin bu hesapların gönderilerini e-posta yoluyla alabilmesini sağlar. + get_started: Başlayın + lead: Ziyaretçilerin bu sunucudaki özel hesaplardan e-posta yoluyla gönderileri almasına izin verin. + title: E-posta bültenleri + purged_msg: Tüm e-posta abonelik verileri siliniyor. + roles: + accounts: Hesaplar + edit_role: Rolü düzenle + empty: + hint: Hiç kimsenin bu özelliği kullanma izni yok. + no_roles_added: Hiçbir rol eklenmedi + lead: Aşağıdaki rollere sahip hesaplar, profillerinde bu özelliği etkinleştirebilir. + manage_roles: Rolleri yönet + role_name: Rol adı + title: Roller + setups: + show: + enable_feature: Özelliği etkinleştir + important_information: Önemli bilgi + list: + 1_permission_explanation: Bu özellik etkinleştirildiğinde, belirlenen izinlere sahip hesaplar profillerine bir e-posta toplama formu ekleyebilir. + 2_feature_explanation: Ziyaretçiler bir hesabın profil sayfasında kaydolup aboneliklerini onayladıklarında, o hesap yeni herkese açık gönderiler paylaştığında e-posta yoluyla güncellemeler almaya başlayacaklar. + 3_privacy_policy_warning: Sunucu yöneticileri, toplanan kişisel bilgilere (e-posta adresleri) erişebileceklerdir. Bu nedenle, bu özelliği kullanmadan önce sunucunun gizlilik politikası ve Hizmet Şartları güncellenmelidir. + 4_cost_warning: Barındırma yapılandırmasına bağlı olarak e-postalar için ücret tahsil edilebilir. Bu özellik, sunucunuzdan gönderilen e-posta sayısını önemli ölçüde artırabileceğinden, etkinleştirmeden önce barındırma sağlayıcınızla görüşün. export_domain_allows: new: title: Alan adı engellerini içe aktar @@ -792,6 +857,7 @@ tr: manage_custom_emojis: Özel İfadeleri Yönetme manage_custom_emojis_description: Kullanıcıların sunucudaki özel ifadeleri yönetmesine izin verir manage_email_subscriptions: E-posta Aboneliklerini Yönet + manage_email_subscriptions_description: Bu izne sahip kullanıcıların, hesapları için e-posta bültenini etkinleştirmelerine izin ver manage_federation: Birleştirme Yönetme manage_federation_description: Kullanıcıların diğer alan adlarıyla birleştirmeye izin vermesi veya engellemesine ve teslim edilebilirliği denetlemesine izin verir manage_invites: Davetleri Yönetme diff --git a/config/locales/vi.yml b/config/locales/vi.yml index fd29b46fce5350..7f5e2cb1597720 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -477,6 +477,71 @@ vi: resolved_dns_records_hint_html: Tên miền phân giải thành các tên miền MX sau, các tên miền này chịu trách nhiệm cuối cùng trong việc chấp nhận email. Chặn tên miền MX sẽ chặn đăng ký từ bất kỳ địa chỉ email nào sử dụng cùng một tên miền MX, ngay cả khi tên miền hiển thị là khác. Cẩn thận đừng chặn những dịch vụ email lớn. resolved_through_html: Đã xử lý thông qua %{domain} title: Tên miền email đã chặn + 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 + subscribers: Người đăng ký đọc + title: Danh sách gửi thư + additional_footer_texts: + show: + title: Văn bản chân trang bổ sung + compliance_settings: + additional_footer_text: + action: Quản lý + hint: Văn bản tùy chọn chỉ xuất hiện ở phần chân trang của bản tin email + title: Văn bản chân trang bổ sung + lead: Tùy thuộc vào khu vực pháp lý nơi bạn hoạt động, bản tin email có thể được coi là email tiếp thị. + privacy_policy: + action: Quản lý + hint: Chính sách này được liên kết ở phần chân trang của mỗi email + title: Chính sách bảo mật + title: Cài đặt tuân thủ + danger_zone: + disable_feature: + action: Tắt + hint: Tắt tính năng này cho tất cả tài khoản + title: Tắt tính năng + erase_all_data: + action: Xóa dữ liệu + hint: Xóa vĩnh viễn tất cả email trong tất cả danh sách gửi thư + title: Xóa tất cả dữ liệu + title: Khu vực nguy hiểm + disabled_msg: Việc đăng ký nhận email đã được vô hiệu hóa thành công. + index: + disabled: + cannot_be_enabled: Nhà cung cấp kỹ thuật của bạn chưa kích hoạt tính năng này cho máy chủ của bạn. + description: Tính năng này cho phép các tài khoản được chỉ định thêm tiện ích vào hồ sơ của họ, giúp khách truy cập không có tài khoản Mastodon vẫn có thể nhận bài đăng qua email. + get_started: Bắt đầu + lead: Cho phép khách truy cập nhận tút qua email từ các tài khoản đặc biệt trên máy chủ này. + title: Bản tin email + purged_msg: Tất cả dữ liệu đăng ký nhận email đang được xóa. + roles: + accounts: Tài khoản + edit_role: Chỉnh sửa vai trò + empty: + hint: Không ai có quyền dùng tính năng này. + no_roles_added: Chưa có vai trò nào được thêm + lead: Các tài khoản có vai trò sau đây có thể kích hoạt tính năng này trên hồ sơ của họ. + manage_roles: Quản lý vai trò + role_name: Tên vai trò + title: Vai trò + setups: + show: + enable_feature: Bật tính năng + important_information: Thông tin quan trọng + list: + 1_permission_explanation: Khi tính năng này được kích hoạt, các tài khoản có quyền được chỉ định có thể thêm biểu mẫu thu thập email vào hồ sơ của họ. + 2_feature_explanation: Khi khách truy cập đăng ký trên trang hồ sơ tài khoản và xác nhận đăng ký của họ, họ sẽ bắt đầu nhận được thông báo qua email mỗi khi tài khoản đó đăng tút công khai mới. + 3_privacy_policy_warning: Quản trị viên máy chủ sẽ có quyền truy cập vào thông tin nhận dạng cá nhân (địa chỉ email) đã thu thập được. Do đó, chính sách bảo mật và Điều khoản dịch vụ của máy chủ phải được cập nhật trước khi sử dụng tính năng này. + 4_cost_warning: Việc gửi email có thể phát sinh phí tùy thuộc vào cấu hình máy chủ. Hãy thảo luận với nhà cung cấp dịch vụ lưu trữ của bạn trước khi kích hoạt tính năng này, vì nó có thể làm tăng đáng kể số lượng email được gửi từ máy chủ của bạn. export_domain_allows: new: title: Nhập tên miền cho phép @@ -776,6 +841,7 @@ vi: manage_custom_emojis: Quản lý emoji manage_custom_emojis_description: Cho phép quản lý các emoji tùy chỉnh trên máy chủ manage_email_subscriptions: Quản lý đăng ký đọc qua email + manage_email_subscriptions_description: Cho phép người dùng có quyền này kích hoạt tính năng nhận bản tin email cho tài khoản của họ manage_federation: Quản lý liên hợp manage_federation_description: Cho phép chặn hoặc liên hợp với các máy chủ khác và kiểm soát khả năng phân phối manage_invites: Quản lý lời mời From b653660a5c474e7064c7a21d17843dfd3f588acc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 6 May 2026 11:14:07 +0200 Subject: [PATCH 027/132] Update dependency axios to v1.16.0 (#38880) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index 9ae9e89c9470b0..49f97906c76c9c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5829,13 +5829,13 @@ __metadata: linkType: hard "axios@npm:^1.4.0": - version: 1.15.2 - resolution: "axios@npm:1.15.2" + version: 1.16.0 + resolution: "axios@npm:1.16.0" dependencies: - follow-redirects: "npm:^1.15.11" + follow-redirects: "npm:^1.16.0" form-data: "npm:^4.0.5" proxy-from-env: "npm:^2.1.0" - checksum: 10c0/4eeae0feeaa7fdc1ef24f81f8b378fdadedf4aebdd6bf224484675160f8744cf17b9b0d1c215279979940f7e8ce463beffa2f713099612e428eac238515c81d5 + checksum: 10c0/1c91a5221b77b76072026b4cc95ecdf38f7c3e33e63423abec09a85e6e9a12279637dcc9ac2ba1fc333e0c447fb3b0f46d7965acb5d7cea02d188e9c6d425c0b languageName: node linkType: hard @@ -8020,13 +8020,13 @@ __metadata: languageName: node linkType: hard -"follow-redirects@npm:^1.15.11": - version: 1.15.11 - resolution: "follow-redirects@npm:1.15.11" +"follow-redirects@npm:^1.16.0": + version: 1.16.0 + resolution: "follow-redirects@npm:1.16.0" peerDependenciesMeta: debug: optional: true - checksum: 10c0/d301f430542520a54058d4aeeb453233c564aaccac835d29d15e050beb33f339ad67d9bddbce01739c5dc46a6716dbe3d9d0d5134b1ca203effa11a7ef092343 + checksum: 10c0/a1e2900163e6f1b4d1ed5c221b607f41decbab65534c63fe7e287e40a5d552a6496e7d9d7d976fa4ba77b4c51c11e5e9f683f10b43011ea11e442ff128d0e181 languageName: node linkType: hard From 07ce066d686c2e54db27a535c3c67dec4cb7544c Mon Sep 17 00:00:00 2001 From: David Roetzel Date: Wed, 6 May 2026 11:35:07 +0200 Subject: [PATCH 028/132] Move `PartialAccountSerializer` to the top-level (#38916) --- app/models/collection.rb | 1 + .../dedup_notification_group_serializer.rb | 12 +-------- .../rest/partial_account_serializer.rb | 11 ++++++++ spec/requests/api/v2/notifications_spec.rb | 2 +- .../rest/partial_account_serializer_spec.rb | 27 +++++++++++++++++++ 5 files changed, 41 insertions(+), 12 deletions(-) create mode 100644 app/serializers/rest/partial_account_serializer.rb create mode 100644 spec/serializers/rest/partial_account_serializer_spec.rb diff --git a/app/models/collection.rb b/app/models/collection.rb index c5082269e0228e..36131bbcf75a0e 100644 --- a/app/models/collection.rb +++ b/app/models/collection.rb @@ -5,6 +5,7 @@ # Table name: collections # # id :bigint(8) not null, primary key +# deleted_at :datetime # description :text # description_html :text # discoverable :boolean not null diff --git a/app/serializers/rest/dedup_notification_group_serializer.rb b/app/serializers/rest/dedup_notification_group_serializer.rb index 4f02505e25f295..19b42e6bd52beb 100644 --- a/app/serializers/rest/dedup_notification_group_serializer.rb +++ b/app/serializers/rest/dedup_notification_group_serializer.rb @@ -1,18 +1,8 @@ # frozen_string_literal: true class REST::DedupNotificationGroupSerializer < ActiveModel::Serializer - class PartialAccountSerializer < REST::AccountSerializer - # This is a hack to reset ActiveModel::Serializer internals and only expose the attributes - # we care about. - self._attributes_data = {} - self._reflections = [] - self._links = [] - - attributes :id, :acct, :locked, :bot, :url, :avatar, :avatar_static - end - has_many :accounts, serializer: REST::AccountSerializer - has_many :partial_accounts, serializer: PartialAccountSerializer, if: :return_partial_accounts? + has_many :partial_accounts, serializer: REST::PartialAccountSerializer, if: :return_partial_accounts? has_many :statuses, serializer: REST::StatusSerializer has_many :notification_groups, serializer: REST::NotificationGroupSerializer diff --git a/app/serializers/rest/partial_account_serializer.rb b/app/serializers/rest/partial_account_serializer.rb new file mode 100644 index 00000000000000..4ff3b9cbb13d1d --- /dev/null +++ b/app/serializers/rest/partial_account_serializer.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class REST::PartialAccountSerializer < REST::AccountSerializer + # This is a hack to reset ActiveModel::Serializer internals and only expose the attributes + # we care about. + self._attributes_data = {} + self._reflections = [] + self._links = [] + + attributes :id, :acct, :locked, :bot, :url, :avatar, :avatar_static, :avatar_description +end diff --git a/spec/requests/api/v2/notifications_spec.rb b/spec/requests/api/v2/notifications_spec.rb index 4b4aa1b475147c..182733a8fc94e6 100644 --- a/spec/requests/api/v2/notifications_spec.rb +++ b/spec/requests/api/v2/notifications_spec.rb @@ -322,7 +322,7 @@ expect(response.content_type) .to start_with('application/json') expect(response.parsed_body[:partial_accounts].size).to be > 0 - expect(response.parsed_body[:partial_accounts][0].keys.map(&:to_sym)).to contain_exactly(:acct, :avatar, :avatar_static, :bot, :id, :locked, :url) + expect(response.parsed_body[:partial_accounts][0].keys.map(&:to_sym)).to contain_exactly(:acct, :avatar, :avatar_static, :avatar_description, :bot, :id, :locked, :url) expect(response.parsed_body[:partial_accounts].pluck(:id)).to_not include(recent_account.id.to_s) expect(response.parsed_body[:accounts].pluck(:id)).to include(recent_account.id.to_s) end diff --git a/spec/serializers/rest/partial_account_serializer_spec.rb b/spec/serializers/rest/partial_account_serializer_spec.rb new file mode 100644 index 00000000000000..dc98850ba4b39c --- /dev/null +++ b/spec/serializers/rest/partial_account_serializer_spec.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::PartialAccountSerializer do + subject do + serialized_record_json(account, described_class, options: { + scope: nil, + scope_name: :current_user, + }) + end + + let(:account) { Fabricate(:account, avatar_description: 'image') } + + it 'includes the expected attributes' do + expect(subject).to include({ + 'id' => account.id.to_s, + 'acct' => account.pretty_acct, + 'locked' => false, + 'bot' => false, + 'url' => ActivityPub::TagManager.instance.url_for(account), + 'avatar' => include(account.avatar_original_url), + 'avatar_static' => include(account.avatar_static_url), + 'avatar_description' => 'image', + }) + end +end From 1e3b089eb63c110bec3bc2ddfffc34284e51a515 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 6 May 2026 11:53:28 +0200 Subject: [PATCH 029/132] Update docker/build-push-action digest to 10e90e3 (#38815) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/build-container-image.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-container-image.yml b/.github/workflows/build-container-image.yml index 595011a0c6f9d6..ae85d9d5e6155d 100644 --- a/.github/workflows/build-container-image.yml +++ b/.github/workflows/build-container-image.yml @@ -76,7 +76,7 @@ jobs: - name: Build and push by digest id: build - uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6 + uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6 with: context: . file: ${{ inputs.file_to_build }} From 194b8898736f3a486654d46a6c1608faf79c2973 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Wed, 6 May 2026 12:41:25 +0200 Subject: [PATCH 030/132] Expose `mastodon-async-refresh` response header through CORS (#38914) --- config/initializers/cors.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/initializers/cors.rb b/config/initializers/cors.rb index 476f1fb07a507a..6d4a832ee88e51 100644 --- a/config/initializers/cors.rb +++ b/config/initializers/cors.rb @@ -19,7 +19,7 @@ resource '/users/:username' end resource '/api/*', - expose: %w(Link X-RateLimit-Reset X-RateLimit-Limit X-RateLimit-Remaining X-Request-Id), + expose: %w(Link Mastodon-Async-Refresh X-RateLimit-Reset X-RateLimit-Limit X-RateLimit-Remaining X-Request-Id), methods: %i(post put delete get patch options) resource '/oauth/token', methods: [:post] resource '/oauth/revoke', methods: [:post] From a2d04ee7b4c8c40148ec38f78e4039d691de5f15 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 6 May 2026 15:15:36 +0200 Subject: [PATCH 031/132] Update dependency vite-plugin-pwa to v1.3.0 (#38910) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 659 +++++++++++++++++++++++++++++++++++------------------- 1 file changed, 434 insertions(+), 225 deletions(-) diff --git a/yarn.lock b/yarn.lock index 49f97906c76c9c..b645372caaddaf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -217,7 +217,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.10.4, @babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.28.6": +"@babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.18.6, @babel/helper-module-imports@npm:^7.28.6": version: 7.28.6 resolution: "@babel/helper-module-imports@npm:7.28.6" dependencies: @@ -3902,26 +3902,28 @@ __metadata: languageName: node linkType: hard -"@rollup/plugin-babel@npm:^5.2.0": - version: 5.3.1 - resolution: "@rollup/plugin-babel@npm:5.3.1" +"@rollup/plugin-babel@npm:^6.1.0": + version: 6.1.0 + resolution: "@rollup/plugin-babel@npm:6.1.0" dependencies: - "@babel/helper-module-imports": "npm:^7.10.4" - "@rollup/pluginutils": "npm:^3.1.0" + "@babel/helper-module-imports": "npm:^7.18.6" + "@rollup/pluginutils": "npm:^5.0.1" peerDependencies: "@babel/core": ^7.0.0 "@types/babel__core": ^7.1.9 - rollup: ^1.20.0||^2.0.0 + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 peerDependenciesMeta: "@types/babel__core": optional: true - checksum: 10c0/2766134dd5567c0d4fd6909d1f511ce9bf3bd9d727e1bc5ffdd6097a3606faca324107ae8e0961839ee4dbb45e5e579ae601efe472fc0a271259aea79920cafa + rollup: + optional: true + checksum: 10c0/68bc1a3689552992c3443e43a95ac14ac4e271079a5a18e252d8113358236e9c91fe514dad7a42b84581214f8714ec1f46fd99a5d9cc5a6a1e7456367ee4d6d4 languageName: node linkType: hard -"@rollup/plugin-node-resolve@npm:^15.2.3": - version: 15.3.1 - resolution: "@rollup/plugin-node-resolve@npm:15.3.1" +"@rollup/plugin-node-resolve@npm:^16.0.3": + version: 16.0.3 + resolution: "@rollup/plugin-node-resolve@npm:16.0.3" dependencies: "@rollup/pluginutils": "npm:^5.0.1" "@types/resolve": "npm:1.20.2" @@ -3933,27 +3935,30 @@ __metadata: peerDependenciesMeta: rollup: optional: true - checksum: 10c0/ecf3abe890fc98ad665fdbfb1ea245253e0d1f2bc6d9f4e8f496f212c76a2ce7cd4b9bc0abd21e6bcaa16f72d1c67cc6b322ea12a6ec68e8a8834df8242a5ecd + checksum: 10c0/5bafff8e51cd28b5b3b8f415c30a893f5bfdb1a54469e00b3dc6530f26051620f3dfa172f40544361948b46cc3070cb34fd44ade66d38c0677d74c846fbc58dc languageName: node linkType: hard -"@rollup/plugin-replace@npm:^2.4.1": - version: 2.4.2 - resolution: "@rollup/plugin-replace@npm:2.4.2" +"@rollup/plugin-replace@npm:^6.0.3": + version: 6.0.3 + resolution: "@rollup/plugin-replace@npm:6.0.3" dependencies: - "@rollup/pluginutils": "npm:^3.1.0" - magic-string: "npm:^0.25.7" + "@rollup/pluginutils": "npm:^5.0.1" + magic-string: "npm:^0.30.3" peerDependencies: - rollup: ^1.20.0 || ^2.0.0 - checksum: 10c0/ea3d27291c791661638b91809d0247dde1ee71be0b16fa7060078c2700db3669eada2c3978ea979b917b29ebe06f3fddc8797feae554da966264a22142b5771a + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 10c0/93217c52fe86b03363bc534b5f07963ac4fd6b91f19f6070a66809b0c65a036b3b234624a65a8bfcc01a8dc0e42838feae03c021b0d1e5e91753c503c4d70cd6 languageName: node linkType: hard -"@rollup/plugin-terser@npm:^0.4.3": - version: 0.4.4 - resolution: "@rollup/plugin-terser@npm:0.4.4" +"@rollup/plugin-terser@npm:^1.0.0": + version: 1.0.0 + resolution: "@rollup/plugin-terser@npm:1.0.0" dependencies: - serialize-javascript: "npm:^6.0.1" + serialize-javascript: "npm:^7.0.3" smob: "npm:^1.0.0" terser: "npm:^5.17.4" peerDependencies: @@ -3961,20 +3966,7 @@ __metadata: peerDependenciesMeta: rollup: optional: true - checksum: 10c0/b9cb6c8f02ac1c1344019e9fb854321b74f880efebc41b6bdd84f18331fce0f4a2aadcdb481042245cd3f409b429ac363af71f9efec4a2024731d67d32af36ee - languageName: node - linkType: hard - -"@rollup/pluginutils@npm:^3.1.0": - version: 3.1.0 - resolution: "@rollup/pluginutils@npm:3.1.0" - dependencies: - "@types/estree": "npm:0.0.39" - estree-walker: "npm:^1.0.1" - picomatch: "npm:^2.2.2" - peerDependencies: - rollup: ^1.20.0||^2.0.0 - checksum: 10c0/7151753160d15ba2b259461a6c25b3932150994ea52dba8fd3144f634c7647c2e56733d986e2c15de67c4d96a9ee7d6278efa6d2e626a7169898fd64adc0f90c + checksum: 10c0/08be445cc2e0677132ee06cdebbcd1b6cd3ab22e220fcd89d8a22eaf9ee501a940f425931ac65c65ab113803ad31a895f2575716248609c882c8e562fd6cc2d4 languageName: node linkType: hard @@ -3994,6 +3986,181 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-android-arm-eabi@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.60.3" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@rollup/rollup-android-arm64@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-android-arm64@npm:4.60.3" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-arm64@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-darwin-arm64@npm:4.60.3" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-x64@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-darwin-x64@npm:4.60.3" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-arm64@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.60.3" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-x64@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-freebsd-x64@npm:4.60.3" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-gnueabihf@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.60.3" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-musleabihf@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.60.3" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-gnu@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.60.3" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-musl@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.60.3" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-loong64-gnu@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-loong64-gnu@npm:4.60.3" + conditions: os=linux & cpu=loong64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-loong64-musl@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-loong64-musl@npm:4.60.3" + conditions: os=linux & cpu=loong64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-ppc64-gnu@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-ppc64-gnu@npm:4.60.3" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-ppc64-musl@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-ppc64-musl@npm:4.60.3" + conditions: os=linux & cpu=ppc64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-gnu@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.60.3" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-musl@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.60.3" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-s390x-gnu@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.60.3" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-gnu@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.60.3" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-musl@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.60.3" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-openbsd-x64@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-openbsd-x64@npm:4.60.3" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-openharmony-arm64@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-openharmony-arm64@npm:4.60.3" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-arm64-msvc@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.60.3" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-ia32-msvc@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.60.3" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-gnu@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-win32-x64-gnu@npm:4.60.3" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-msvc@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.60.3" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@rtsao/scc@npm:^1.1.0": version: 1.1.0 resolution: "@rtsao/scc@npm:1.1.0" @@ -4190,18 +4357,6 @@ __metadata: languageName: node linkType: hard -"@surma/rollup-plugin-off-main-thread@npm:^2.2.3": - version: 2.2.3 - resolution: "@surma/rollup-plugin-off-main-thread@npm:2.2.3" - dependencies: - ejs: "npm:^3.1.6" - json5: "npm:^2.2.0" - magic-string: "npm:^0.25.0" - string.prototype.matchall: "npm:^4.0.6" - checksum: 10c0/4f36a7488cdae2907053a48231430e8e9aa8f1903a96131bf8325786afba3224011f9120164cae75043558bd051881050b071958388fe477927d340b1cc1a066 - languageName: node - linkType: hard - "@svgr/babel-plugin-add-jsx-attribute@npm:8.0.0": version: 8.0.0 resolution: "@svgr/babel-plugin-add-jsx-attribute@npm:8.0.0" @@ -4388,6 +4543,18 @@ __metadata: languageName: node linkType: hard +"@trickfilm400/rollup-plugin-off-main-thread@npm:^3.0.0-pre1": + version: 3.0.0-pre1 + resolution: "@trickfilm400/rollup-plugin-off-main-thread@npm:3.0.0-pre1" + dependencies: + ejs: "npm:^3.1.10" + json5: "npm:^2.2.3" + magic-string: "npm:^0.30.21" + string.prototype.matchall: "npm:^4.0.12" + checksum: 10c0/60d4ff15295413e8b4092221f2683681d13168fb136d94b0c1ca472810e4b28c51b1f88be5fa1aa44327e18b620fd6ca9a3201cb2679034b29adf7bdbde014e0 + languageName: node + linkType: hard + "@tybys/wasm-util@npm:^0.10.0, @tybys/wasm-util@npm:^0.10.1": version: 0.10.1 resolution: "@tybys/wasm-util@npm:0.10.1" @@ -4521,14 +4688,7 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:0.0.39": - version: 0.0.39 - resolution: "@types/estree@npm:0.0.39" - checksum: 10c0/f0af6c95ac1988c4827964bd9d3b51d24da442e2188943f6dfcb1e1559103d5d024d564b2e9d3f84c53714a02a0a7435c7441138eb63d9af5de4dfc66cdc0d92 - languageName: node - linkType: hard - -"@types/estree@npm:^1.0.0, @types/estree@npm:^1.0.6, @types/estree@npm:^1.0.8": +"@types/estree@npm:1.0.8, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.6, @types/estree@npm:^1.0.8": version: 1.0.8 resolution: "@types/estree@npm:1.0.8" checksum: 10c0/39d34d1afaa338ab9763f37ad6066e3f349444f9052b9676a7cc0252ef9485a41c6d81c9c4e0d26e9077993354edf25efc853f3224dd4b447175ef62bdcc86a5 @@ -6946,7 +7106,7 @@ __metadata: languageName: node linkType: hard -"ejs@npm:^3.1.6": +"ejs@npm:^3.1.10": version: 3.1.10 resolution: "ejs@npm:3.1.10" dependencies: @@ -7734,13 +7894,6 @@ __metadata: languageName: node linkType: hard -"estree-walker@npm:^1.0.1": - version: 1.0.1 - resolution: "estree-walker@npm:1.0.1" - checksum: 10c0/fa9e5f8c1bbe8d01e314c0f03067b64a4f22d4c58410fc5237060d0c15b81e58c23921c41acc60abbdab490f1fdfcbd6408ede2d03ca704454272e0244d61a55 - languageName: node - linkType: hard - "estree-walker@npm:^2.0.2": version: 2.0.2 resolution: "estree-walker@npm:2.0.2" @@ -7764,6 +7917,13 @@ __metadata: languageName: node linkType: hard +"eta@npm:^4.5.1": + version: 4.6.0 + resolution: "eta@npm:4.6.0" + checksum: 10c0/98c8081f756884bbc22f2bf4a6a38c2322ee97575fb6f0c02dcb1c3040353971c91a96bfba2d6f7cba39bb0ebece5708803a765447d9a81ca1172ccd5e31becf + languageName: node + linkType: hard + "etag@npm:^1.8.1": version: 1.8.1 resolution: "etag@npm:1.8.1" @@ -9493,7 +9653,7 @@ __metadata: languageName: node linkType: hard -"json5@npm:^2.2.0, json5@npm:^2.2.2, json5@npm:^2.2.3": +"json5@npm:^2.2.2, json5@npm:^2.2.3": version: 2.2.3 resolution: "json5@npm:2.2.3" bin: @@ -9872,7 +10032,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.17.20, lodash@npm:^4.17.21": +"lodash@npm:^4.17.21": version: 4.18.1 resolution: "lodash@npm:4.18.1" checksum: 10c0/757228fc68805c59789e82185135cf85f05d0b2d3d54631d680ca79ec21944ec8314d4533639a14b8bcfbd97a517e78960933041a5af17ecb693ec6eecb99a27 @@ -9951,16 +10111,7 @@ __metadata: languageName: node linkType: hard -"magic-string@npm:^0.25.0, magic-string@npm:^0.25.7": - version: 0.25.9 - resolution: "magic-string@npm:0.25.9" - dependencies: - sourcemap-codec: "npm:^1.4.8" - checksum: 10c0/37f5e01a7e8b19a072091f0b45ff127cda676232d373ce2c551a162dd4053c575ec048b9cbb4587a1f03adb6c5d0fd0dd49e8ab070cd2c83a4992b2182d9cb56 - languageName: node - linkType: hard - -"magic-string@npm:^0.30.0, magic-string@npm:^0.30.21, magic-string@npm:~0.30.11": +"magic-string@npm:^0.30.0, magic-string@npm:^0.30.21, magic-string@npm:^0.30.3, magic-string@npm:~0.30.11": version: 0.30.21 resolution: "magic-string@npm:0.30.21" dependencies: @@ -11115,7 +11266,7 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^2.2.2, picomatch@npm:^2.3.1": +"picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be @@ -11917,15 +12068,6 @@ __metadata: languageName: node linkType: hard -"randombytes@npm:^2.1.0": - version: 2.1.0 - resolution: "randombytes@npm:2.1.0" - dependencies: - safe-buffer: "npm:^5.1.0" - checksum: 10c0/50395efda7a8c94f5dffab564f9ff89736064d32addf0cc7e8bf5e4166f09f8ded7a0849ca6c2d2a59478f7d90f78f20d8048bca3cdf8be09d8e8a10790388f3 - languageName: node - linkType: hard - "range-parser@npm:^1.2.1": version: 1.2.1 resolution: "range-parser@npm:1.2.1" @@ -12716,17 +12858,93 @@ __metadata: languageName: node linkType: hard -"rollup@npm:^2.79.2": - version: 2.80.0 - resolution: "rollup@npm:2.80.0" - dependencies: +"rollup@npm:^4.53.3": + version: 4.60.3 + resolution: "rollup@npm:4.60.3" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.60.3" + "@rollup/rollup-android-arm64": "npm:4.60.3" + "@rollup/rollup-darwin-arm64": "npm:4.60.3" + "@rollup/rollup-darwin-x64": "npm:4.60.3" + "@rollup/rollup-freebsd-arm64": "npm:4.60.3" + "@rollup/rollup-freebsd-x64": "npm:4.60.3" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.60.3" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.60.3" + "@rollup/rollup-linux-arm64-gnu": "npm:4.60.3" + "@rollup/rollup-linux-arm64-musl": "npm:4.60.3" + "@rollup/rollup-linux-loong64-gnu": "npm:4.60.3" + "@rollup/rollup-linux-loong64-musl": "npm:4.60.3" + "@rollup/rollup-linux-ppc64-gnu": "npm:4.60.3" + "@rollup/rollup-linux-ppc64-musl": "npm:4.60.3" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.60.3" + "@rollup/rollup-linux-riscv64-musl": "npm:4.60.3" + "@rollup/rollup-linux-s390x-gnu": "npm:4.60.3" + "@rollup/rollup-linux-x64-gnu": "npm:4.60.3" + "@rollup/rollup-linux-x64-musl": "npm:4.60.3" + "@rollup/rollup-openbsd-x64": "npm:4.60.3" + "@rollup/rollup-openharmony-arm64": "npm:4.60.3" + "@rollup/rollup-win32-arm64-msvc": "npm:4.60.3" + "@rollup/rollup-win32-ia32-msvc": "npm:4.60.3" + "@rollup/rollup-win32-x64-gnu": "npm:4.60.3" + "@rollup/rollup-win32-x64-msvc": "npm:4.60.3" + "@types/estree": "npm:1.0.8" fsevents: "npm:~2.3.2" dependenciesMeta: + "@rollup/rollup-android-arm-eabi": + optional: true + "@rollup/rollup-android-arm64": + optional: true + "@rollup/rollup-darwin-arm64": + optional: true + "@rollup/rollup-darwin-x64": + optional: true + "@rollup/rollup-freebsd-arm64": + optional: true + "@rollup/rollup-freebsd-x64": + optional: true + "@rollup/rollup-linux-arm-gnueabihf": + optional: true + "@rollup/rollup-linux-arm-musleabihf": + optional: true + "@rollup/rollup-linux-arm64-gnu": + optional: true + "@rollup/rollup-linux-arm64-musl": + optional: true + "@rollup/rollup-linux-loong64-gnu": + optional: true + "@rollup/rollup-linux-loong64-musl": + optional: true + "@rollup/rollup-linux-ppc64-gnu": + optional: true + "@rollup/rollup-linux-ppc64-musl": + optional: true + "@rollup/rollup-linux-riscv64-gnu": + optional: true + "@rollup/rollup-linux-riscv64-musl": + optional: true + "@rollup/rollup-linux-s390x-gnu": + optional: true + "@rollup/rollup-linux-x64-gnu": + optional: true + "@rollup/rollup-linux-x64-musl": + optional: true + "@rollup/rollup-openbsd-x64": + optional: true + "@rollup/rollup-openharmony-arm64": + optional: true + "@rollup/rollup-win32-arm64-msvc": + optional: true + "@rollup/rollup-win32-ia32-msvc": + optional: true + "@rollup/rollup-win32-x64-gnu": + optional: true + "@rollup/rollup-win32-x64-msvc": + optional: true fsevents: optional: true bin: rollup: dist/bin/rollup - checksum: 10c0/48ad7b79a4ef9332cf90692d28c05f904132820964f012941372ec4f31c18635e1b7909823058964fb2b216154713bfbe82ec00920d71b15f3fe13bb9df3eac8 + checksum: 10c0/72c9c768f3fabeaeff228b6364e6600c169d6c231a4324c47c34880fd8961aebacd974cf905ecc2db75e56c6491bdd676409a06aecf589791bf419cd41d06e76 languageName: node linkType: hard @@ -12772,7 +12990,7 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.1.0": +"safe-buffer@npm:5.2.1": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 @@ -12941,12 +13159,10 @@ __metadata: languageName: node linkType: hard -"serialize-javascript@npm:^6.0.1": - version: 6.0.2 - resolution: "serialize-javascript@npm:6.0.2" - dependencies: - randombytes: "npm:^2.1.0" - checksum: 10c0/2dd09ef4b65a1289ba24a788b1423a035581bef60817bea1f01eda8e3bda623f86357665fe7ac1b50f6d4f583f97db9615b3f07b2a2e8cbcb75033965f771dd2 +"serialize-javascript@npm:^7.0.3": + version: 7.0.5 + resolution: "serialize-javascript@npm:7.0.5" + checksum: 10c0/7b7818e5267f6d474ec7a56d36ba69dd712726a13eab37706ec94615fb7ca8945471f2b7fb0dc9dbe8c79c1930c1079d97f66f91315c8c8c2ca6c38898cec96f languageName: node linkType: hard @@ -13231,13 +13447,6 @@ __metadata: languageName: node linkType: hard -"sourcemap-codec@npm:^1.4.8": - version: 1.4.8 - resolution: "sourcemap-codec@npm:1.4.8" - checksum: 10c0/f099279fdaae070ff156df7414bbe39aad69cdd615454947ed3e19136bfdfcb4544952685ee73f56e17038f4578091e12b17b283ed8ac013882916594d95b9e6 - languageName: node - linkType: hard - "spdx-exceptions@npm:^2.1.0": version: 2.3.0 resolution: "spdx-exceptions@npm:2.3.0" @@ -13455,7 +13664,7 @@ __metadata: languageName: node linkType: hard -"string.prototype.matchall@npm:^4.0.12, string.prototype.matchall@npm:^4.0.6": +"string.prototype.matchall@npm:^4.0.12": version: 4.0.12 resolution: "string.prototype.matchall@npm:4.0.12" dependencies: @@ -14681,23 +14890,23 @@ __metadata: linkType: hard "vite-plugin-pwa@npm:^1.2.0": - version: 1.2.0 - resolution: "vite-plugin-pwa@npm:1.2.0" + version: 1.3.0 + resolution: "vite-plugin-pwa@npm:1.3.0" dependencies: debug: "npm:^4.3.6" pretty-bytes: "npm:^6.1.1" tinyglobby: "npm:^0.2.10" - workbox-build: "npm:^7.4.0" - workbox-window: "npm:^7.4.0" + workbox-build: "npm:^7.4.1" + workbox-window: "npm:^7.4.1" peerDependencies: "@vite-pwa/assets-generator": ^1.0.0 - vite: ^3.1.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - workbox-build: ^7.4.0 - workbox-window: ^7.4.0 + vite: ^3.1.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + workbox-build: ^7.4.1 + workbox-window: ^7.4.1 peerDependenciesMeta: "@vite-pwa/assets-generator": optional: true - checksum: 10c0/d037591fc6a44b9a97f45b2452f691fce34c1c8ece4721d4f1a068f6dd7c30991b63c090a2af87d5b78d351bf5f5eee9d9dbbfc4bb39a77d3bc2ab7d2ca5df6b + checksum: 10c0/1cf7a43bf25d3f1276fe61e63cf7134b735b4426ddd2cf05775160e5bcd0a84eb705c15496abe78f6fb051f7a9481fcf854ed2b5b86922e07865ab37d5cb7a0b languageName: node linkType: hard @@ -15044,193 +15253,193 @@ __metadata: languageName: node linkType: hard -"workbox-background-sync@npm:7.4.0": - version: 7.4.0 - resolution: "workbox-background-sync@npm:7.4.0" +"workbox-background-sync@npm:7.4.1": + version: 7.4.1 + resolution: "workbox-background-sync@npm:7.4.1" dependencies: idb: "npm:^7.0.1" - workbox-core: "npm:7.4.0" - checksum: 10c0/024dfad37c9ca28480857aaf7c0dd2e2f2b2ea416e100b51260eaf28f14ca5a558d0e12b1e95f862fec04df54432c090fa29582ab88b43d8778a4c821f21d13f + workbox-core: "npm:7.4.1" + checksum: 10c0/804729b83eb194a7694cb174d79090de85765f835bcc94d4c7eb739cb839385c6755baaf8dc82a43468b27488355cfaabb08cff751d5dfc70e07bf4c07e1c45d languageName: node linkType: hard -"workbox-broadcast-update@npm:7.4.0": - version: 7.4.0 - resolution: "workbox-broadcast-update@npm:7.4.0" +"workbox-broadcast-update@npm:7.4.1": + version: 7.4.1 + resolution: "workbox-broadcast-update@npm:7.4.1" dependencies: - workbox-core: "npm:7.4.0" - checksum: 10c0/9e96d38cb1cfaccf72a37beeed7d36a66db8bacaa09e584bfa15f6b129aee5026c521320b4b68fa762f4f6ba0229f11c6ec6f7bc039419c8d1f1a9ed9f2a37b5 + workbox-core: "npm:7.4.1" + checksum: 10c0/fb640c12dc9034f4f0fe9636f532a41c8eccba360676b4cd28d479b59684eab727435310d0e115b935d92e7abfe5ee91a77d567f9cb824fe33064e18880d7c4f languageName: node linkType: hard -"workbox-build@npm:^7.4.0": - version: 7.4.0 - resolution: "workbox-build@npm:7.4.0" +"workbox-build@npm:^7.4.1": + version: 7.4.1 + resolution: "workbox-build@npm:7.4.1" dependencies: "@apideck/better-ajv-errors": "npm:^0.3.1" "@babel/core": "npm:^7.24.4" "@babel/preset-env": "npm:^7.11.0" "@babel/runtime": "npm:^7.11.2" - "@rollup/plugin-babel": "npm:^5.2.0" - "@rollup/plugin-node-resolve": "npm:^15.2.3" - "@rollup/plugin-replace": "npm:^2.4.1" - "@rollup/plugin-terser": "npm:^0.4.3" - "@surma/rollup-plugin-off-main-thread": "npm:^2.2.3" + "@rollup/plugin-babel": "npm:^6.1.0" + "@rollup/plugin-node-resolve": "npm:^16.0.3" + "@rollup/plugin-replace": "npm:^6.0.3" + "@rollup/plugin-terser": "npm:^1.0.0" + "@trickfilm400/rollup-plugin-off-main-thread": "npm:^3.0.0-pre1" ajv: "npm:^8.6.0" common-tags: "npm:^1.8.0" + eta: "npm:^4.5.1" fast-json-stable-stringify: "npm:^2.1.0" fs-extra: "npm:^9.0.1" glob: "npm:^11.0.1" - lodash: "npm:^4.17.20" pretty-bytes: "npm:^5.3.0" - rollup: "npm:^2.79.2" + rollup: "npm:^4.53.3" source-map: "npm:^0.8.0-beta.0" stringify-object: "npm:^3.3.0" strip-comments: "npm:^2.0.1" tempy: "npm:^0.6.0" upath: "npm:^1.2.0" - workbox-background-sync: "npm:7.4.0" - workbox-broadcast-update: "npm:7.4.0" - workbox-cacheable-response: "npm:7.4.0" - workbox-core: "npm:7.4.0" - workbox-expiration: "npm:7.4.0" - workbox-google-analytics: "npm:7.4.0" - workbox-navigation-preload: "npm:7.4.0" - workbox-precaching: "npm:7.4.0" - workbox-range-requests: "npm:7.4.0" - workbox-recipes: "npm:7.4.0" - workbox-routing: "npm:7.4.0" - workbox-strategies: "npm:7.4.0" - workbox-streams: "npm:7.4.0" - workbox-sw: "npm:7.4.0" - workbox-window: "npm:7.4.0" - checksum: 10c0/673fb05a0b24bb5534667a8d7c42304e3a1394071d73c9ccbfec881e36a66c98ed59eba92e21669a2758289c79e76a72930077a611f20ba803cdc0d0a24da6b2 + workbox-background-sync: "npm:7.4.1" + workbox-broadcast-update: "npm:7.4.1" + workbox-cacheable-response: "npm:7.4.1" + workbox-core: "npm:7.4.1" + workbox-expiration: "npm:7.4.1" + workbox-google-analytics: "npm:7.4.1" + workbox-navigation-preload: "npm:7.4.1" + workbox-precaching: "npm:7.4.1" + workbox-range-requests: "npm:7.4.1" + workbox-recipes: "npm:7.4.1" + workbox-routing: "npm:7.4.1" + workbox-strategies: "npm:7.4.1" + workbox-streams: "npm:7.4.1" + workbox-sw: "npm:7.4.1" + workbox-window: "npm:7.4.1" + checksum: 10c0/18ed36ef28d31ffc26efbc0796d858b68b5dd9b61c86a9d5eef1c2a863ea05cc5a777a6e842af9a28a8efdbf84e6273b3ab82f8c60f495d95bdb5a7acf491da0 languageName: node linkType: hard -"workbox-cacheable-response@npm:7.4.0": - version: 7.4.0 - resolution: "workbox-cacheable-response@npm:7.4.0" +"workbox-cacheable-response@npm:7.4.1": + version: 7.4.1 + resolution: "workbox-cacheable-response@npm:7.4.1" dependencies: - workbox-core: "npm:7.4.0" - checksum: 10c0/4d4fabf3cbd7b2b0505e62ec653f933de40d4fa7600e49ac15cdf223e86b9e70580927f53c6ef27ddd027b655829918b90a77a3675593017c001811a122c6591 + workbox-core: "npm:7.4.1" + checksum: 10c0/fc7bb1e435262c6390c6cdab02f27c7304bdd5de663514278718620c15df894e1d57a1cf38b10ec5dbe673ce3d650010c650dcd3d6587eb4dfad170caeaa53d4 languageName: node linkType: hard -"workbox-core@npm:7.4.0": - version: 7.4.0 - resolution: "workbox-core@npm:7.4.0" - checksum: 10c0/ae7c762df084b57d3d10f42b83a508a5c0bec5663de4c9cefc2b5c2893922a816f451cf8ec45ee76d204a3a6e90ee52b6c550a6cba9109d9bb644da9e98fb9e8 +"workbox-core@npm:7.4.1": + version: 7.4.1 + resolution: "workbox-core@npm:7.4.1" + checksum: 10c0/953c3bcec2c04cef44ac779ac6b525f639fade17c594cfa601d7892090da6e18abd3eda22d2d592d8b4df6aa6856c947770f8b960f70c1ac1c989f722d0e7f67 languageName: node linkType: hard -"workbox-expiration@npm:7.4.0, workbox-expiration@npm:^7.3.0": - version: 7.4.0 - resolution: "workbox-expiration@npm:7.4.0" +"workbox-expiration@npm:7.4.1, workbox-expiration@npm:^7.3.0": + version: 7.4.1 + resolution: "workbox-expiration@npm:7.4.1" dependencies: idb: "npm:^7.0.1" - workbox-core: "npm:7.4.0" - checksum: 10c0/d4f5e96e6d58d74a1be7d8c842e68e9fc2d4a22664f629ec71570039a1876e033ca1e54d68eccded83d901999e48fb388c1f807b14f706b9b83c7b3ab5815cf8 + workbox-core: "npm:7.4.1" + checksum: 10c0/d940f2f263b5c1b5a27c4e0b7df9c44c9a8d9aa4ac4c8217610cee6e235aa4d97608d8713bb95a0da3228f145209e8cbc3d4ebc51455bd72a60d33f706640e15 languageName: node linkType: hard -"workbox-google-analytics@npm:7.4.0": - version: 7.4.0 - resolution: "workbox-google-analytics@npm:7.4.0" +"workbox-google-analytics@npm:7.4.1": + version: 7.4.1 + resolution: "workbox-google-analytics@npm:7.4.1" dependencies: - workbox-background-sync: "npm:7.4.0" - workbox-core: "npm:7.4.0" - workbox-routing: "npm:7.4.0" - workbox-strategies: "npm:7.4.0" - checksum: 10c0/34a5ad1ea6fd6c65d5eb78b8c4bcf30b2624099b1c7c2e8f6a2af7135dcfcff00531d042f99b45960dcc42185b0f9c4b62c02a38325429fa15f060f30df61e51 + workbox-background-sync: "npm:7.4.1" + workbox-core: "npm:7.4.1" + workbox-routing: "npm:7.4.1" + workbox-strategies: "npm:7.4.1" + checksum: 10c0/107beef09bc14f7b83a257964dc4ac2f19d14fce20f5498e31172e8ef387fd46ee9e0dd63f01825c8baf49fc0fea0451e06fb1879df958b4df634f85564be8a1 languageName: node linkType: hard -"workbox-navigation-preload@npm:7.4.0": - version: 7.4.0 - resolution: "workbox-navigation-preload@npm:7.4.0" +"workbox-navigation-preload@npm:7.4.1": + version: 7.4.1 + resolution: "workbox-navigation-preload@npm:7.4.1" dependencies: - workbox-core: "npm:7.4.0" - checksum: 10c0/9999d78683247dcbf1ca1e18664b3ecb19e8330c0ff9328403a513051d65eb3fc6578504dcc324fe603c7fb6d3d1054de1f55b4d2b9765236298cfebebefabe9 + workbox-core: "npm:7.4.1" + checksum: 10c0/efe8fda736cc6afa1bf90eec65fccf206c179bda194264c5fa14063cd7d3b9bf399b960c22400212f83e48e3509cb6f586d1360710319049542cbe93254af5b9 languageName: node linkType: hard -"workbox-precaching@npm:7.4.0": - version: 7.4.0 - resolution: "workbox-precaching@npm:7.4.0" +"workbox-precaching@npm:7.4.1": + version: 7.4.1 + resolution: "workbox-precaching@npm:7.4.1" dependencies: - workbox-core: "npm:7.4.0" - workbox-routing: "npm:7.4.0" - workbox-strategies: "npm:7.4.0" - checksum: 10c0/df1d3ac590f56418ae80595c6c6a718f15ce3d6b9622ef43058d9d56f7374d95202ef2932e5ef5410d949f4f4366f5eccaf7956c32f579846fcc4bd83578c246 + workbox-core: "npm:7.4.1" + workbox-routing: "npm:7.4.1" + workbox-strategies: "npm:7.4.1" + checksum: 10c0/e1f22df8945fe8cf3b77d8c8c9fb460d8e6469dbf0dba3d372a59e9649a6272024d6e63783ceb95bfed30f634ced524f1d0d3f21979fb6e48cdaa009e9be12c5 languageName: node linkType: hard -"workbox-range-requests@npm:7.4.0": - version: 7.4.0 - resolution: "workbox-range-requests@npm:7.4.0" +"workbox-range-requests@npm:7.4.1": + version: 7.4.1 + resolution: "workbox-range-requests@npm:7.4.1" dependencies: - workbox-core: "npm:7.4.0" - checksum: 10c0/7b945fab877bfc226fa8b7aa8e87b1d2179565314eff424672bfa70c43eec5dce99fe79109f548b6c6b054629f4464fb73085c3357f3c52cea6befe8d36f4fb4 + workbox-core: "npm:7.4.1" + checksum: 10c0/fca4ca13a82056bac7b1599b103287b74819e8532500c5f229c27466681e243628df8cb9ed3660eff9dcb07b81b0b8bb5428271351a3502317423214fb5b5dc0 languageName: node linkType: hard -"workbox-recipes@npm:7.4.0": - version: 7.4.0 - resolution: "workbox-recipes@npm:7.4.0" +"workbox-recipes@npm:7.4.1": + version: 7.4.1 + resolution: "workbox-recipes@npm:7.4.1" dependencies: - workbox-cacheable-response: "npm:7.4.0" - workbox-core: "npm:7.4.0" - workbox-expiration: "npm:7.4.0" - workbox-precaching: "npm:7.4.0" - workbox-routing: "npm:7.4.0" - workbox-strategies: "npm:7.4.0" - checksum: 10c0/2de53c679af2879921861d817b2f9b6a682aff0d871d38542519c16902ccfdfe7d5bf456f1e3a1f2fdb86824795f1794fec39a5b342a0d9866fccfd0e02a93a7 + workbox-cacheable-response: "npm:7.4.1" + workbox-core: "npm:7.4.1" + workbox-expiration: "npm:7.4.1" + workbox-precaching: "npm:7.4.1" + workbox-routing: "npm:7.4.1" + workbox-strategies: "npm:7.4.1" + checksum: 10c0/5d238895f7a3c0791ee315bd7ad6dcb268acdd2328abb3e78e655cff591ceb89d466ecf63bea92007b88d5bb52074a6a7a16b813f718b1cce89fe0153bae6ad7 languageName: node linkType: hard -"workbox-routing@npm:7.4.0, workbox-routing@npm:^7.3.0": - version: 7.4.0 - resolution: "workbox-routing@npm:7.4.0" +"workbox-routing@npm:7.4.1, workbox-routing@npm:^7.3.0": + version: 7.4.1 + resolution: "workbox-routing@npm:7.4.1" dependencies: - workbox-core: "npm:7.4.0" - checksum: 10c0/62a2a3f24a5c54fc716e9275ccd032c5e35cf645d3bcf670c91531a2a8308025767a4ff799d36483eab50c007647748ab309ea1af76847ebcd78203ef4069ae6 + workbox-core: "npm:7.4.1" + checksum: 10c0/11447d16c652de1667aa2be89634e426b615ff00f96d08d395a096afef07813a131d64c1f840344dd4210746800937437682a6bde7ef8a5233f371203c99d36a languageName: node linkType: hard -"workbox-strategies@npm:7.4.0, workbox-strategies@npm:^7.3.0": - version: 7.4.0 - resolution: "workbox-strategies@npm:7.4.0" +"workbox-strategies@npm:7.4.1, workbox-strategies@npm:^7.3.0": + version: 7.4.1 + resolution: "workbox-strategies@npm:7.4.1" dependencies: - workbox-core: "npm:7.4.0" - checksum: 10c0/c25771af342ce10aee006d749e7adba4e77e7379b39cd96dbd05557f0f4968ff1ac88001022fb588ce2c105e5dfded321ce9f14344291c19ab753db37e6611f8 + workbox-core: "npm:7.4.1" + checksum: 10c0/db96df6ef1260e281c580a963e68390e64df198b0684f37a693449af928edb3679ac97390dabe2ec11dc617a632cf4410a65854dd399bfdeaafbb74aea6532d8 languageName: node linkType: hard -"workbox-streams@npm:7.4.0": - version: 7.4.0 - resolution: "workbox-streams@npm:7.4.0" +"workbox-streams@npm:7.4.1": + version: 7.4.1 + resolution: "workbox-streams@npm:7.4.1" dependencies: - workbox-core: "npm:7.4.0" - workbox-routing: "npm:7.4.0" - checksum: 10c0/213ac3cebb6f499fd2bedf28ae75523c8193ca6c7ace797227347775811dba80551dd645fc0bf04fb1b36eea2cf030e4ce3648d886cc0e8017363bd3806c84f3 + workbox-core: "npm:7.4.1" + workbox-routing: "npm:7.4.1" + checksum: 10c0/f487b6e2f17119057b3f4265a0454de2304e5378ddfc95b1f7e4f660aab6f93f4b0ede86fd0c33fbcae3a077162020ea07846cb5fc69d7c71c6ddf5ad6f3b1da languageName: node linkType: hard -"workbox-sw@npm:7.4.0": - version: 7.4.0 - resolution: "workbox-sw@npm:7.4.0" - checksum: 10c0/f87198a9f40da34e13f896ea308c5feedf9caf3ba10b2d40c301850396edf17cdba060775b224fc07697356858816af9912997b751041a715b6934ab14b35300 +"workbox-sw@npm:7.4.1": + version: 7.4.1 + resolution: "workbox-sw@npm:7.4.1" + checksum: 10c0/cef8ebffcef9e8f055d7f51273c8fcb9981b6c9de272c4d37b17a11cef5df55d05f814bda3d8daab6b7e207a484865cb08a579e0ba7341ed66ecce34acb3cfc3 languageName: node linkType: hard -"workbox-window@npm:7.4.0, workbox-window@npm:^7.3.0, workbox-window@npm:^7.4.0": - version: 7.4.0 - resolution: "workbox-window@npm:7.4.0" +"workbox-window@npm:7.4.1, workbox-window@npm:^7.3.0, workbox-window@npm:^7.4.1": + version: 7.4.1 + resolution: "workbox-window@npm:7.4.1" dependencies: "@types/trusted-types": "npm:^2.0.2" - workbox-core: "npm:7.4.0" - checksum: 10c0/6013d1019fe3bbb06d8e572b6a4ccfec6fc0879448337997c193fde08738c2fa420a4dca385b00220ef1feac3539e82b01896c85f77cd8c45cff379e7a6cb1d5 + workbox-core: "npm:7.4.1" + checksum: 10c0/1c4db303d2f71cccd16e12ced9c85e2a2d16a00e3992bade92e990bcd1e6c8a49bc2021261e62145ba098065a691972a763f958d35f07232ee61e8d26555699b languageName: node linkType: hard From fee4c262d26996d7f018af544755ca47b4fdba0f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 6 May 2026 15:15:54 +0200 Subject: [PATCH 032/132] Update formatjs monorepo (#38913) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 112 +++++++++++++++++++++++++++--------------------------- 1 file changed, 56 insertions(+), 56 deletions(-) diff --git a/yarn.lock b/yarn.lock index b645372caaddaf..3f4008bc64227e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2420,10 +2420,10 @@ __metadata: languageName: node linkType: hard -"@formatjs/bigdecimal@npm:0.2.2": - version: 0.2.2 - resolution: "@formatjs/bigdecimal@npm:0.2.2" - checksum: 10c0/69de414e037cd54d33f41ffd85b975ada50e8bb6355821d28cd30b1a9d69d83f3c4ff6bb8e1e4269b47768177f6ead6b564ee99d509e71a89fdf2f6e8c464eb6 +"@formatjs/bigdecimal@npm:0.2.3": + version: 0.2.3 + resolution: "@formatjs/bigdecimal@npm:0.2.3" + checksum: 10c0/e928ecb903cb71ab5e2214a825263fd3d10369e924d546c595d2828a1771b133994395b321d6ea50ce55fcac7581c1b65e74ac7e8768801cdf1790eb8a7a964d languageName: node linkType: hard @@ -2474,10 +2474,10 @@ __metadata: languageName: node linkType: hard -"@formatjs/fast-memoize@npm:3.1.3": - version: 3.1.3 - resolution: "@formatjs/fast-memoize@npm:3.1.3" - checksum: 10c0/572802c57aa295e516f5ac52db9062591643510f360c4d99c3b562fd4b8852a0000e4c1a9daa9e29be88d34356fab1cb9a8a45f764388a7fcdfa010eff6d610d +"@formatjs/fast-memoize@npm:3.1.4": + version: 3.1.4 + resolution: "@formatjs/fast-memoize@npm:3.1.4" + checksum: 10c0/7704f4a26099727dff4aadcadb130a9e512eac69fa366f8de57f5437f250daf90e0ccfe47eb0a2e1f14b83a639e58fe9c7682a139ecd3c1c55fe8d3da6c4616c languageName: node linkType: hard @@ -2491,12 +2491,12 @@ __metadata: languageName: node linkType: hard -"@formatjs/icu-messageformat-parser@npm:3.5.6": - version: 3.5.6 - resolution: "@formatjs/icu-messageformat-parser@npm:3.5.6" +"@formatjs/icu-messageformat-parser@npm:3.5.7": + version: 3.5.7 + resolution: "@formatjs/icu-messageformat-parser@npm:3.5.7" dependencies: - "@formatjs/icu-skeleton-parser": "npm:2.1.6" - checksum: 10c0/640e334eefe66c393b19d401bf1cc39cf7f783e450661220683a200a4e044a221c0a03f2c8ff0a9968bdab2234f7be35faf25aab722c467862fcffef45df8b3a + "@formatjs/icu-skeleton-parser": "npm:2.1.7" + checksum: 10c0/229c5ecf28a08eedc4185f756db7942ed5837226ff932885d1a7219ef895aa08177efd68a02efe2ca4d0612b5a1137e7f3e4a55b1b0850d5320b9328caad394e languageName: node linkType: hard @@ -2509,10 +2509,10 @@ __metadata: languageName: node linkType: hard -"@formatjs/icu-skeleton-parser@npm:2.1.6": - version: 2.1.6 - resolution: "@formatjs/icu-skeleton-parser@npm:2.1.6" - checksum: 10c0/f68bb13dfb771e9fd768702a1491482dbe05ab8e704e7c58083e82e907dac58b0c88c7cdc336bfc32222d67b129e57a9502597004b373ef0534601a480c6d943 +"@formatjs/icu-skeleton-parser@npm:2.1.7": + version: 2.1.7 + resolution: "@formatjs/icu-skeleton-parser@npm:2.1.7" + checksum: 10c0/d0dff576c11bc60f043540a695f6be523a4e1ebab41fad81918f5b8609cac9a88664a8ed3e5574f2b0e624a75d7020ddc12b88fc979b069136ac7bd9da07dfe7 languageName: node linkType: hard @@ -2525,33 +2525,33 @@ __metadata: languageName: node linkType: hard -"@formatjs/intl-localematcher@npm:0.8.5": - version: 0.8.5 - resolution: "@formatjs/intl-localematcher@npm:0.8.5" +"@formatjs/intl-localematcher@npm:0.8.6": + version: 0.8.6 + resolution: "@formatjs/intl-localematcher@npm:0.8.6" dependencies: - "@formatjs/fast-memoize": "npm:3.1.3" - checksum: 10c0/638b02a374fd18b0c1e6569838ea033b9136f652157e5e15ae0ccacc52408f232b82512bf63d15590d722720286bc85b73b2e52401e12e2229079b56534f4066 + "@formatjs/fast-memoize": "npm:3.1.4" + checksum: 10c0/de6f3e426febb048249d73f4dce04a7ef868c2ff891c3dd5ff4ffac815565798d395ac1dbccc39ded7d8118a508f5bf08980c7b3bf0cffe485fb475046b53ca4 languageName: node linkType: hard "@formatjs/intl-pluralrules@npm:^6.0.0": - version: 6.3.4 - resolution: "@formatjs/intl-pluralrules@npm:6.3.4" + version: 6.3.5 + resolution: "@formatjs/intl-pluralrules@npm:6.3.5" dependencies: - "@formatjs/bigdecimal": "npm:0.2.2" - "@formatjs/intl-localematcher": "npm:0.8.5" - checksum: 10c0/c6b0c24012a53ef7c025c0c69d7d17cea8453916936a8e69f088723a5f9c82692441c5f2bf63abae9928e6d6cf31c913c33977a7afd83d90ac04d22d72c71d68 + "@formatjs/bigdecimal": "npm:0.2.3" + "@formatjs/intl-localematcher": "npm:0.8.6" + checksum: 10c0/aac326900fcd2439b420724a7458eb75f57fbc8987efd2947bbfef7532220b6febe9a1053aa39dee314f38b54fe1a4386d8f97b34f48dd74c0b3fc4cd794b032 languageName: node linkType: hard -"@formatjs/intl@npm:4.1.8": - version: 4.1.8 - resolution: "@formatjs/intl@npm:4.1.8" +"@formatjs/intl@npm:4.1.9": + version: 4.1.9 + resolution: "@formatjs/intl@npm:4.1.9" dependencies: - "@formatjs/fast-memoize": "npm:3.1.3" - "@formatjs/icu-messageformat-parser": "npm:3.5.6" - intl-messageformat: "npm:11.2.3" - checksum: 10c0/244d4efa20bc57b66d1ae8eb571b8df3264b0879d304553d775cb93869030bf770165b9907f164b97cbf5ce79b5d62cee7f714f1173333aa30a0586210bc5882 + "@formatjs/fast-memoize": "npm:3.1.4" + "@formatjs/icu-messageformat-parser": "npm:3.5.7" + intl-messageformat: "npm:11.2.4" + checksum: 10c0/50bdec85fdc02a9fda06c7a771d773f2d2374e58ca15edea93b7a6d033273e0fbec795c42cadf893e201a45ab228efcd3ee5f538cfa67d37e42bf96ef3621618 languageName: node linkType: hard @@ -2572,11 +2572,11 @@ __metadata: languageName: node linkType: hard -"@formatjs/ts-transformer@npm:4.4.6": - version: 4.4.6 - resolution: "@formatjs/ts-transformer@npm:4.4.6" +"@formatjs/ts-transformer@npm:4.4.7": + version: 4.4.7 + resolution: "@formatjs/ts-transformer@npm:4.4.7" dependencies: - "@formatjs/icu-messageformat-parser": "npm:3.5.6" + "@formatjs/icu-messageformat-parser": "npm:3.5.7" "@types/node": "npm:22 || 24" json-stable-stringify: "npm:^1.3.0" typescript: "npm:^5.6 || 6" @@ -2585,16 +2585,16 @@ __metadata: peerDependenciesMeta: ts-jest: optional: true - checksum: 10c0/aed517bdad919dc7ac9c6844a8af3bc87bdd13a3e5a41f03c1da540536e167fe3f4c7d02db1641d74272dc4b0c15a479d0290ea0bfa40788d8ea03e8913c8359 + checksum: 10c0/62ac9dbd948ca6718c896d2684c4f3f87739fabb85a426f3b8089a9fce7f0cbd4153a319b7b2921783d90c23caa9b5a441b420ade3a20375ba7dcbf78652fe4d languageName: node linkType: hard "@formatjs/unplugin@npm:^1.1.5": - version: 1.1.9 - resolution: "@formatjs/unplugin@npm:1.1.9" + version: 1.1.10 + resolution: "@formatjs/unplugin@npm:1.1.10" dependencies: - "@formatjs/icu-messageformat-parser": "npm:3.5.6" - "@formatjs/ts-transformer": "npm:4.4.6" + "@formatjs/icu-messageformat-parser": "npm:3.5.7" + "@formatjs/ts-transformer": "npm:4.4.7" magic-string: "npm:^0.30.0" oxc-parser: "npm:^0.128.0" unplugin: "npm:^3.0.0" @@ -2615,7 +2615,7 @@ __metadata: optional: true webpack: optional: true - checksum: 10c0/bed54839f7218658cbd033aa1664214785e576992dde11ee693b43c48aec6a364286fb82d99d1fe321ef13c879104c69c5a3cdb5a074f958f8dd0085ab254d7f + checksum: 10c0/54d8ea307d1cd1c122b10366e931b52c3d4932825af1ad18ce8d7319619ab280f0d0bfdbb084c1bfe46aa1b95bc816137a81c548780195f60f6e29a6b73aadfb languageName: node linkType: hard @@ -8979,13 +8979,13 @@ __metadata: languageName: node linkType: hard -"intl-messageformat@npm:11.2.3, intl-messageformat@npm:^11.0.0": - version: 11.2.3 - resolution: "intl-messageformat@npm:11.2.3" +"intl-messageformat@npm:11.2.4, intl-messageformat@npm:^11.0.0": + version: 11.2.4 + resolution: "intl-messageformat@npm:11.2.4" dependencies: - "@formatjs/fast-memoize": "npm:3.1.3" - "@formatjs/icu-messageformat-parser": "npm:3.5.6" - checksum: 10c0/95cf3eabad1613c62e291e09ec7d77929df536b038f61cbaffc8e8ad0e59568153aabf3acac45a9204c67f241ed2881d7569247f812c338e519c60db237b97ca + "@formatjs/fast-memoize": "npm:3.1.4" + "@formatjs/icu-messageformat-parser": "npm:3.5.7" + checksum: 10c0/a35128139b821334dccb76495f274b4cecd7807f69099f1f539dbf727df78465f8266a5f88efb064f18a636ec2b0e6cd994d40a6b196faffe843cdfb1b909509 languageName: node linkType: hard @@ -12194,16 +12194,16 @@ __metadata: linkType: hard "react-intl@npm:^10.0.0": - version: 10.1.4 - resolution: "react-intl@npm:10.1.4" + version: 10.1.5 + resolution: "react-intl@npm:10.1.5" dependencies: - "@formatjs/icu-messageformat-parser": "npm:3.5.6" - "@formatjs/intl": "npm:4.1.8" - intl-messageformat: "npm:11.2.3" + "@formatjs/icu-messageformat-parser": "npm:3.5.7" + "@formatjs/intl": "npm:4.1.9" + intl-messageformat: "npm:11.2.4" peerDependencies: "@types/react": 19 react: 19 - checksum: 10c0/7c5fad35e77f3fc64fc54422ee1756c168ebf2ae3d92f4cb8791831ef779441e5ab9ce8bf6e991ac0b3829dfc21831a3f17ee7eb4910eee777ccff063cb0c55b + checksum: 10c0/6c136a26692f2eb93feacaed1235f550075095e81e21cf9e713873429bac7326713c522bfebe04500b631e7e6ba2bc04b60d81f1ed5fbd3232956f1fc8ef5d0a languageName: node linkType: hard From 0f753038c420e60623b638e75b06e3ea7e94d8dd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 6 May 2026 13:17:26 +0000 Subject: [PATCH 033/132] Update github/codeql-action digest to e46ed2c (#38887) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/codeql.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 4e55219f5565aa..fb59d338100190 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -35,7 +35,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@45cbd0c69e560cd9e7cd7f8c32362050c9b7ded2 # v4 + uses: github/codeql-action/init@e46ed2cbd01164d986452f91f178727624ae40d7 # v4 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -48,7 +48,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@45cbd0c69e560cd9e7cd7f8c32362050c9b7ded2 # v4 + uses: github/codeql-action/autobuild@e46ed2cbd01164d986452f91f178727624ae40d7 # v4 # ℹ️ Command-line programs to run using the OS shell. # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun @@ -61,6 +61,6 @@ jobs: # ./location_of_script_within_repo/buildscript.sh - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@45cbd0c69e560cd9e7cd7f8c32362050c9b7ded2 # v4 + uses: github/codeql-action/analyze@e46ed2cbd01164d986452f91f178727624ae40d7 # v4 with: category: '/language:${{matrix.language}}' From f6f45c43a9013f53df98e293d85cb742265f77b7 Mon Sep 17 00:00:00 2001 From: David Roetzel Date: Wed, 6 May 2026 17:08:26 +0200 Subject: [PATCH 034/132] Add partial accounts to collections endpoint (#38919) --- .../api/v1_alpha/collections_controller.rb | 6 ++- app/models/collection.rb | 1 + app/models/collection_item.rb | 9 ++++ app/presenters/collections_presenter.rb | 11 +++++ ...ctions_with_account_previews_serializer.rb | 10 ++++ spec/models/collection_spec.rb | 12 +++++ spec/presenters/collections_presenter_spec.rb | 48 +++++++++++++++++++ ...s_with_account_previews_serializer_spec.rb | 45 +++++++++++++++++ 8 files changed, 140 insertions(+), 2 deletions(-) create mode 100644 app/presenters/collections_presenter.rb create mode 100644 app/serializers/rest/collections_with_account_previews_serializer.rb create mode 100644 spec/presenters/collections_presenter_spec.rb create mode 100644 spec/serializers/rest/collections_with_account_previews_serializer_spec.rb diff --git a/app/controllers/api/v1_alpha/collections_controller.rb b/app/controllers/api/v1_alpha/collections_controller.rb index 1ca1cd6923f0a9..4e15b65ff58a2c 100644 --- a/app/controllers/api/v1_alpha/collections_controller.rb +++ b/app/controllers/api/v1_alpha/collections_controller.rb @@ -28,9 +28,10 @@ def index cache_if_unauthenticated! authorize @account, :index_collections? - render json: @collections, each_serializer: REST::CollectionSerializer, adapter: :json + presenter = CollectionsPresenter.new(collections: @collections) + render json: presenter, serializer: REST::CollectionsWithAccountPreviewsSerializer rescue Mastodon::NotPermittedError - render json: { collections: [] } + render json: { collections: [], partial_accounts: [] } end def show @@ -73,6 +74,7 @@ def set_account def set_collections @collections = @account.collections .with_tag + .preload(top_items: :account) .order(created_at: :desc) .offset(offset_param) .limit(limit_param(DEFAULT_COLLECTIONS_LIMIT)) diff --git a/app/models/collection.rb b/app/models/collection.rb index 36131bbcf75a0e..547079e11da927 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 :top_items, -> { top_items }, class_name: 'CollectionItem', inverse_of: :collection # rubocop:disable Rails/HasManyOrHasOneDependent has_many :collection_reports, dependent: :delete_all validates :name, presence: true diff --git a/app/models/collection_item.rb b/app/models/collection_item.rb index bbb0343ebe6901..b7b82a29c419ec 100644 --- a/app/models/collection_item.rb +++ b/app/models/collection_item.rb @@ -47,6 +47,15 @@ class CollectionItem < ApplicationRecord scope :local, -> { joins(:collection).merge(Collection.local) } scope :accepted_partial, ->(account) { joins(:account).merge(Account.local).accepted.where(uri: nil, account_id: account.id) } scope :pending_or_accepted, -> { where(state: [:pending, :accepted]) } + scope :top_items, lambda { |limit = 4| + subquery = where('collection_items.collection_id = collections.id') + .accepted.ordered.limit(limit) + .arel.lateral('top_items') + collection_query = Collection + .select('top_items.*') + .from([Collection.arel_table, subquery]) + from(collection_query, 'collection_items') + } def with_local_account? account&.local? diff --git a/app/presenters/collections_presenter.rb b/app/presenters/collections_presenter.rb new file mode 100644 index 00000000000000..e97d872769d120 --- /dev/null +++ b/app/presenters/collections_presenter.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class CollectionsPresenter < ActiveModelSerializers::Model + attributes :collections + + def accounts + owners = collections.map(&:account) + top_accounts = collections.flat_map { |c| c.top_items.map(&:account) } + (owners + top_accounts).uniq + end +end diff --git a/app/serializers/rest/collections_with_account_previews_serializer.rb b/app/serializers/rest/collections_with_account_previews_serializer.rb new file mode 100644 index 00000000000000..95216ea6491a82 --- /dev/null +++ b/app/serializers/rest/collections_with_account_previews_serializer.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +class REST::CollectionsWithAccountPreviewsSerializer < ActiveModel::Serializer + has_many :collections, serializer: REST::CollectionSerializer + has_many :partial_accounts, serializer: REST::PartialAccountSerializer + + def partial_accounts + object.accounts + end +end diff --git a/spec/models/collection_spec.rb b/spec/models/collection_spec.rb index b9a545364217c5..0a04473d56b34b 100644 --- a/spec/models/collection_spec.rb +++ b/spec/models/collection_spec.rb @@ -199,4 +199,16 @@ expect(subject.to_log_permalink).to eq ActivityPub::TagManager.instance.uri_for(subject) end end + + describe '#top_items' do + let(:collection) { Fabricate(:collection) } + + before do + 5.times { |i| Fabricate(:collection_item, collection:, position: i + 1) } + end + + it 'returns the topmost four items' do + expect(collection.top_items.map(&:position)).to contain_exactly(1, 2, 3, 4) + end + end end diff --git a/spec/presenters/collections_presenter_spec.rb b/spec/presenters/collections_presenter_spec.rb new file mode 100644 index 00000000000000..720763748152e1 --- /dev/null +++ b/spec/presenters/collections_presenter_spec.rb @@ -0,0 +1,48 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe CollectionsPresenter do + subject { described_class.new(collections:) } + + let(:collection_owner_one) { Fabricate(:account) } + let(:collection_owner_two) { Fabricate(:account) } + let(:collection_one) do + Fabricate(:collection, + account: collection_owner_one, + name: 'Exquisite follows') + end + let(:collection_two) do + Fabricate(:collection, + account: collection_owner_two, + name: 'Excellent people') + end + let(:collections) { [collection_one, collection_two] } + + describe '#accounts' do + context 'when collections do not have any items' do + it 'includes only the collection owners' do + expect(subject.accounts).to contain_exactly(collection_owner_one, collection_owner_two) + end + end + + context 'when collections include accounts' do + let(:accounts) { Fabricate.times(3, :account) } + + before do + accounts[0..1].each { |a| Fabricate(:collection_item, collection: collection_one, account: a) } + accounts[1..2].each { |a| Fabricate(:collection_item, collection: collection_two, account: a) } + end + + it 'includes collection owners and unique preview accounts' do + expect(subject.accounts).to contain_exactly( + collection_owner_one, + collection_owner_two, + accounts[0], + accounts[1], + accounts[2] + ) + end + end + end +end diff --git a/spec/serializers/rest/collections_with_account_previews_serializer_spec.rb b/spec/serializers/rest/collections_with_account_previews_serializer_spec.rb new file mode 100644 index 00000000000000..3d65f6c99d9297 --- /dev/null +++ b/spec/serializers/rest/collections_with_account_previews_serializer_spec.rb @@ -0,0 +1,45 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::CollectionsWithAccountPreviewsSerializer do + subject do + serialized_record_json(presenter, described_class, options: { + scope_name: :current_user, scope: nil + }) + end + + let(:collection_owner_one) { Fabricate(:account) } + let(:collection_owner_two) { Fabricate(:account) } + let(:featured_account) { Fabricate(:account) } + let(:collection_one) do + Fabricate(:collection, + account: collection_owner_one, + name: 'Exquisite follows') + end + let(:collection_two) do + Fabricate(:collection, + account: collection_owner_two, + name: 'Excellent people') + end + let(:collections) { [collection_one, collection_two] } + let(:presenter) { CollectionsPresenter.new(collections:) } + + before do + Fabricate(:collection_item, collection: collection_one, account: featured_account) + end + + it 'includes collections and partial accounts with the expected attributes' do + expect(subject).to include({ + 'collections' => [ + a_hash_including({ 'name' => 'Exquisite follows' }), + a_hash_including({ 'name' => 'Excellent people' }), + ], + 'partial_accounts' => [ + a_hash_including({ 'id' => collection_owner_one.id.to_s }), + a_hash_including({ 'id' => collection_owner_two.id.to_s }), + a_hash_including({ 'id' => featured_account.id.to_s }), + ], + }) + end +end From 65b7ddb3e84eb3b1ed0c4d08346d8d84d4841782 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 6 May 2026 11:10:12 -0400 Subject: [PATCH 035/132] Add failing service case to remote account refresh worker spec (#38922) --- app/workers/remote_account_refresh_worker.rb | 4 +- .../remote_account_refresh_worker_spec.rb | 39 +++++++++++++------ 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/app/workers/remote_account_refresh_worker.rb b/app/workers/remote_account_refresh_worker.rb index 5a4cbdf72606dc..dfb18f2b49fa72 100644 --- a/app/workers/remote_account_refresh_worker.rb +++ b/app/workers/remote_account_refresh_worker.rb @@ -8,8 +8,8 @@ class RemoteAccountRefreshWorker sidekiq_options queue: 'pull', retry: 3 def perform(id) - account = Account.find_by(id: id) - return if account.nil? || account.local? + account = Account.remote.find_by(id: id) + return if account.nil? ActivityPub::FetchRemoteAccountService.new.call(account.uri) rescue Mastodon::UnexpectedResponseError => e diff --git a/spec/workers/remote_account_refresh_worker_spec.rb b/spec/workers/remote_account_refresh_worker_spec.rb index 9938d971b9a653..18f51ebd530db0 100644 --- a/spec/workers/remote_account_refresh_worker_spec.rb +++ b/spec/workers/remote_account_refresh_worker_spec.rb @@ -4,29 +4,44 @@ RSpec.describe RemoteAccountRefreshWorker do let(:worker) { described_class.new } - let(:service) { instance_double(ActivityPub::FetchRemoteAccountService, call: true) } describe '#perform' do before { stub_service } let(:account) { Fabricate(:account, domain: 'host.example') } - it 'sends the status to the service' do - worker.perform(account.id) + context 'with a working service' do + let(:service) { instance_double(ActivityPub::FetchRemoteAccountService, call: true) } - expect(service).to have_received(:call).with(account.uri) - end + it 'sends the status to the service' do + worker.perform(account.id) + + expect(service).to have_received(:call).with(account.uri) + end + + it 'returns nil for non-existent record' do + result = worker.perform(123_123_123) - it 'returns nil for non-existent record' do - result = worker.perform(123_123_123) + expect(result).to be_nil + end - expect(result).to be_nil + it 'returns nil for a local record' do + account = Fabricate :account, domain: nil + result = worker.perform(account.id) + expect(result).to be_nil + end end - it 'returns nil for a local record' do - account = Fabricate :account, domain: nil - result = worker.perform(account) - expect(result).to be_nil + context 'with a failing service' do + let(:service) { instance_double(ActivityPub::FetchRemoteAccountService) } + let(:response) { instance_double(HTTP::Response, code: 500) } + + before { allow(service).to receive(:call).and_raise(Mastodon::UnexpectedResponseError, response) } + + it 'raises error when service fails' do + expect { worker.perform(account.id) } + .to raise_error(Mastodon::UnexpectedResponseError) + end end def stub_service From 1a2038775c0a999024a615348fcba6240e27b0fa Mon Sep 17 00:00:00 2001 From: "Pia B." Date: Wed, 6 May 2026 17:54:12 +0200 Subject: [PATCH 036/132] Add ability to search email blocks by domain (#38923) --- .../admin/email_domain_blocks_controller.rb | 8 +++- app/models/email_domain_block.rb | 1 + .../admin/email_domain_blocks/index.html.haml | 15 ++++++++ config/locales/en.yml | 2 + spec/system/admin/email_domain_blocks_spec.rb | 37 +++++++++++++++++++ 5 files changed, 62 insertions(+), 1 deletion(-) diff --git a/app/controllers/admin/email_domain_blocks_controller.rb b/app/controllers/admin/email_domain_blocks_controller.rb index 12f221164fa749..d248a04d61bc91 100644 --- a/app/controllers/admin/email_domain_blocks_controller.rb +++ b/app/controllers/admin/email_domain_blocks_controller.rb @@ -5,7 +5,7 @@ class EmailDomainBlocksController < BaseController def index authorize :email_domain_block, :index? - @email_domain_blocks = EmailDomainBlock.parents.includes(:children).order(id: :desc).page(params[:page]) + @email_domain_blocks = filter_by_domain.page(params[:page]) @form = Form::EmailDomainBlockBatch.new end @@ -57,6 +57,12 @@ def create private + def filter_by_domain + scope = EmailDomainBlock.parents.includes(:children).order(id: :desc) + scope.merge!(EmailDomainBlock.matches_domain(params[:domain])) if params[:domain].present? + scope + end + def set_resolved_records @resolved_records = DomainResource.new(@email_domain_block.domain).mx end diff --git a/app/models/email_domain_block.rb b/app/models/email_domain_block.rb index c1b961517fab89..882b5928435699 100644 --- a/app/models/email_domain_block.rb +++ b/app/models/email_domain_block.rb @@ -29,6 +29,7 @@ class EmailDomainBlock < ApplicationRecord validates :domain, presence: true, uniqueness: true, domain: true scope :parents, -> { where(parent_id: nil) } + scope :matches_domain, ->(value) { where(arel_table[:domain].matches("%#{value}%")) } # Used for adding multiple blocks at once attr_accessor :other_domains diff --git a/app/views/admin/email_domain_blocks/index.html.haml b/app/views/admin/email_domain_blocks/index.html.haml index 4fae6557a5a397..8ca422c6659ae1 100644 --- a/app/views/admin/email_domain_blocks/index.html.haml +++ b/app/views/admin/email_domain_blocks/index.html.haml @@ -4,8 +4,23 @@ - content_for :heading_actions do = link_to t('admin.email_domain_blocks.add_new'), new_admin_email_domain_block_path, class: 'button' += form_with url: admin_email_domain_blocks_path, method: :get, class: :simple_form do |f| + .fields-group + .input.string.optional + = f.text_field :domain, + value: params[:domain], + class: 'string optional', + placeholder: t('admin.email_domain_blocks.domain') + + .actions + %button.button= t('admin.email_domain_blocks.search') + = link_to t('admin.email_domain_blocks.reset'), admin_email_domain_blocks_path, class: 'button button--dangerous' + +%hr.spacer/ + = form_with model: @form, url: batch_admin_email_domain_blocks_path do |f| = hidden_field_tag :page, params[:page] || 1 + = hidden_field_tag :domain, params[:domain] if params[:domain].present? .batch-table .batch-table__toolbar diff --git a/config/locales/en.yml b/config/locales/en.yml index 5d3344f0e1200a..b0533881bac224 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -484,8 +484,10 @@ en: title: Block new email domain no_email_domain_block_selected: No email domain blocks were changed as none were selected not_permitted: Not permitted + reset: Reset resolved_dns_records_hint_html: The domain name resolves to the following MX domains, which are ultimately responsible for accepting email. Blocking an MX domain will block sign-ups from any email address which uses the same MX domain, even if the visible domain name is different. Be careful not to block major email providers. resolved_through_html: Resolved through %{domain} + search: Search title: Blocked email domains email_subscriptions: accounts: diff --git a/spec/system/admin/email_domain_blocks_spec.rb b/spec/system/admin/email_domain_blocks_spec.rb index 393e1a21c7cad7..4a54744afd6e53 100644 --- a/spec/system/admin/email_domain_blocks_spec.rb +++ b/spec/system/admin/email_domain_blocks_spec.rb @@ -86,4 +86,41 @@ def selection_error_text I18n.t('admin.email_domain_blocks.no_email_domain_block_selected') end end + + describe 'Searching for email domain blocks' do + let(:email_domain_block) { Fabricate :email_domain_block, domain: 'something.com' } + let(:email_domain_block2) { Fabricate :email_domain_block, domain: 'example.com' } + + before do + visit admin_email_domain_blocks_path + email_domain_block + email_domain_block2 + end + + it 'filters by domain' do + fill_in 'domain', with: 'example.com' + click_on I18n.t('admin.email_domain_blocks.search') + + expect(page).to have_text('example.com') + expect(page).to have_no_text('something.com') + end + + it 'shows empty page when no such domains are blocked' do + fill_in 'domain', with: 'mydomain.com' + click_on I18n.t('admin.email_domain_blocks.search') + + expect(page).to have_no_text('mydomain.com') + expect(page).to have_text('There is nothing here!') + end + + it 'returns to the list when resetting the search' do + fill_in 'domain', with: 'example.com' + click_on I18n.t('admin.email_domain_blocks.search') + click_on I18n.t('admin.email_domain_blocks.reset') + + expect(page).to have_text('example.com') + expect(page).to have_text('something.com') + expect(page).to have_no_text('There is nothing here!') + end + end end From 90c812ed1665ab2d28b47def37943cd4695c15e1 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 7 May 2026 11:04:04 +0200 Subject: [PATCH 037/132] Add explicit dependency to `ipaddr` (#38925) --- Gemfile | 1 + Gemfile.lock | 2 ++ 2 files changed, 3 insertions(+) diff --git a/Gemfile b/Gemfile index 9fc75ee37d007f..f9edab7dac3c3e 100644 --- a/Gemfile +++ b/Gemfile @@ -58,6 +58,7 @@ gem 'httplog', '~> 1.8.0', require: false gem 'i18n' gem 'idn-ruby', require: 'idn' gem 'inline_svg' +gem 'ipaddr', '~> 1.2' gem 'irb', '~> 1.8' gem 'kaminari', '~> 1.2' gem 'link_header', '~> 0.0' diff --git a/Gemfile.lock b/Gemfile.lock index 3aa782cbe6da8b..1797e38f97eae7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -343,6 +343,7 @@ GEM activesupport (>= 3.0) nokogiri (>= 1.6) io-console (0.8.2) + ipaddr (1.2.9) irb (1.18.0) pp (>= 0.6.0) prism (>= 1.3.0) @@ -992,6 +993,7 @@ DEPENDENCIES i18n-tasks (~> 1.0) idn-ruby inline_svg + ipaddr (~> 1.2) irb (~> 1.8) jd-paperclip-azure (~> 3.0) json From d0c8eb2f1b37c8952987172c93815f58a63d8e80 Mon Sep 17 00:00:00 2001 From: Echo Date: Thu, 7 May 2026 11:09:27 +0200 Subject: [PATCH 038/132] Swap from React Helmet to Unhead (#38896) --- .../components/account_header/index.tsx | 3 +- .../mastodon/components/error_boundary.jsx | 2 +- .../mastodon/containers/mastodon.jsx | 2 +- .../mastodon/features/about/index.jsx | 2 +- .../account_edit/components/column.tsx | 3 +- .../features/bookmarked_statuses/index.tsx | 2 +- .../features/collections/detail/index.tsx | 3 +- .../features/collections/editor/index.tsx | 3 +- .../mastodon/features/collections/index.tsx | 3 +- .../features/community_timeline/index.jsx | 2 +- .../mastodon/features/compose/index.tsx | 3 +- .../features/direct_timeline/index.jsx | 2 +- .../mastodon/features/directory/index.tsx | 4 +- .../mastodon/features/domain_blocks/index.tsx | 2 +- .../mastodon/features/explore/index.tsx | 3 +- .../features/favourited_statuses/index.tsx | 2 +- .../mastodon/features/favourites/index.jsx | 2 +- .../mastodon/features/firehose/index.jsx | 2 +- .../features/follow_requests/index.jsx | 2 +- .../mastodon/features/followed_tags/index.tsx | 4 +- .../features/getting_started/index.tsx | 2 +- .../features/hashtag_timeline/index.jsx | 2 +- .../mastodon/features/home_timeline/index.jsx | 2 +- .../features/keyboard_shortcuts/index.jsx | 2 +- .../mastodon/features/link_timeline/index.tsx | 3 +- .../mastodon/features/list_timeline/index.jsx | 2 +- .../mastodon/features/lists/index.tsx | 3 +- .../mastodon/features/lists/members.tsx | 3 +- .../mastodon/features/lists/new.tsx | 3 +- .../mastodon/features/mutes/index.jsx | 2 +- .../features/notifications/request.jsx | 2 +- .../features/notifications/requests.jsx | 2 +- .../features/notifications_v2/index.tsx | 3 +- .../mastodon/features/onboarding/follows.tsx | 2 +- .../mastodon/features/onboarding/profile.tsx | 3 +- .../features/pinned_statuses/index.jsx | 2 +- .../features/privacy_policy/index.tsx | 2 +- .../features/public_timeline/index.jsx | 2 +- .../mastodon/features/quotes/index.tsx | 4 +- .../mastodon/features/reblogs/index.jsx | 2 +- .../mastodon/features/search/index.tsx | 2 +- .../mastodon/features/status/index.jsx | 2 +- .../features/terms_of_service/index.tsx | 3 +- .../ui/components/bundle_column_error.jsx | 2 +- .../features/ui/components/modal_root.jsx | 2 +- package.json | 3 +- yarn.lock | 861 +++++++++++++++++- 47 files changed, 878 insertions(+), 96 deletions(-) diff --git a/app/javascript/mastodon/components/account_header/index.tsx b/app/javascript/mastodon/components/account_header/index.tsx index 9222d0eb320232..58dad2a8b55054 100644 --- a/app/javascript/mastodon/components/account_header/index.tsx +++ b/app/javascript/mastodon/components/account_header/index.tsx @@ -1,7 +1,8 @@ import { useCallback } from 'react'; import classNames from 'classnames'; -import { Helmet } from 'react-helmet'; + +import { Helmet } from '@unhead/react/helmet'; import { openModal } from '@/mastodon/actions/modal'; import FollowRequestNoteContainer from '@/mastodon/features/account/containers/follow_request_note_container'; diff --git a/app/javascript/mastodon/components/error_boundary.jsx b/app/javascript/mastodon/components/error_boundary.jsx index ca2f017f3b2ac4..54424d283bc4f1 100644 --- a/app/javascript/mastodon/components/error_boundary.jsx +++ b/app/javascript/mastodon/components/error_boundary.jsx @@ -3,7 +3,7 @@ import { PureComponent } from 'react'; import { FormattedMessage } from 'react-intl'; -import { Helmet } from 'react-helmet'; +import { Helmet } from '@unhead/react/helmet'; import StackTrace from 'stacktrace-js'; diff --git a/app/javascript/mastodon/containers/mastodon.jsx b/app/javascript/mastodon/containers/mastodon.jsx index f697c5a8b07185..d6df09db49e454 100644 --- a/app/javascript/mastodon/containers/mastodon.jsx +++ b/app/javascript/mastodon/containers/mastodon.jsx @@ -1,6 +1,6 @@ import { PureComponent } from 'react'; -import { Helmet } from 'react-helmet'; +import { Helmet } from '@unhead/react/helmet'; import { Route } from 'react-router-dom'; import { Provider as ReduxProvider } from 'react-redux'; diff --git a/app/javascript/mastodon/features/about/index.jsx b/app/javascript/mastodon/features/about/index.jsx index e666e26abc5f1c..9814032cacf801 100644 --- a/app/javascript/mastodon/features/about/index.jsx +++ b/app/javascript/mastodon/features/about/index.jsx @@ -3,7 +3,7 @@ import { PureComponent } from 'react'; import { defineMessages, FormattedMessage } from 'react-intl'; -import { Helmet } from 'react-helmet'; +import { Helmet } from '@unhead/react/helmet'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { connect } from 'react-redux'; diff --git a/app/javascript/mastodon/features/account_edit/components/column.tsx b/app/javascript/mastodon/features/account_edit/components/column.tsx index dde74368878f30..a9b0f8cbd5d780 100644 --- a/app/javascript/mastodon/features/account_edit/components/column.tsx +++ b/app/javascript/mastodon/features/account_edit/components/column.tsx @@ -2,9 +2,10 @@ import type { FC } from 'react'; import { FormattedMessage } from 'react-intl'; -import { Helmet } from 'react-helmet'; import { Link } from 'react-router-dom'; +import { Helmet } from '@unhead/react/helmet'; + import { Column } from '@/mastodon/components/column'; import { ColumnHeader } from '@/mastodon/components/column_header'; import { LoadingIndicator } from '@/mastodon/components/loading_indicator'; diff --git a/app/javascript/mastodon/features/bookmarked_statuses/index.tsx b/app/javascript/mastodon/features/bookmarked_statuses/index.tsx index 5d4574b05b4c9a..b8fc9e24487571 100644 --- a/app/javascript/mastodon/features/bookmarked_statuses/index.tsx +++ b/app/javascript/mastodon/features/bookmarked_statuses/index.tsx @@ -2,7 +2,7 @@ import { useEffect, useRef, useCallback } from 'react'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; -import { Helmet } from 'react-helmet'; +import { Helmet } from '@unhead/react/helmet'; import BookmarksIcon from '@/material-icons/400-24px/bookmarks-fill.svg?react'; import { diff --git a/app/javascript/mastodon/features/collections/detail/index.tsx b/app/javascript/mastodon/features/collections/detail/index.tsx index 12701d1fd42f96..fd8e68c772eb83 100644 --- a/app/javascript/mastodon/features/collections/detail/index.tsx +++ b/app/javascript/mastodon/features/collections/detail/index.tsx @@ -2,10 +2,11 @@ import { useCallback, useEffect } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; -import { Helmet } from 'react-helmet'; import { useHistory, useLocation, useParams } from 'react-router'; import { Link } from 'react-router-dom'; +import { Helmet } from '@unhead/react/helmet'; + import HelpIcon from '@/material-icons/400-24px/help.svg?react'; import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react'; import ShareIcon from '@/material-icons/400-24px/share.svg?react'; diff --git a/app/javascript/mastodon/features/collections/editor/index.tsx b/app/javascript/mastodon/features/collections/editor/index.tsx index beb4719a3eb579..935e230e4a3772 100644 --- a/app/javascript/mastodon/features/collections/editor/index.tsx +++ b/app/javascript/mastodon/features/collections/editor/index.tsx @@ -2,7 +2,6 @@ import { useEffect } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; -import { Helmet } from 'react-helmet'; import { Switch, Route, @@ -12,6 +11,8 @@ import { useLocation, } from 'react-router-dom'; +import { Helmet } from '@unhead/react/helmet'; + import { Callout } from '@/mastodon/components/callout'; import { useCurrentAccountId } from '@/mastodon/hooks/useAccountId'; import { initialState } from '@/mastodon/initial_state'; diff --git a/app/javascript/mastodon/features/collections/index.tsx b/app/javascript/mastodon/features/collections/index.tsx index 0b1e6445f8aa98..11494dcd1daab2 100644 --- a/app/javascript/mastodon/features/collections/index.tsx +++ b/app/javascript/mastodon/features/collections/index.tsx @@ -1,8 +1,9 @@ import { defineMessages, useIntl } from 'react-intl'; -import { Helmet } from 'react-helmet'; import { Route, Switch, useRouteMatch } from 'react-router-dom'; +import { Helmet } from '@unhead/react/helmet'; + import { TabLink, TabList } from '@/mastodon/components/tab_list'; import { Column } from 'mastodon/components/column'; import { ColumnHeader } from 'mastodon/components/column_header'; diff --git a/app/javascript/mastodon/features/community_timeline/index.jsx b/app/javascript/mastodon/features/community_timeline/index.jsx index 0cb8d9a4b7b846..3487e4958cfabf 100644 --- a/app/javascript/mastodon/features/community_timeline/index.jsx +++ b/app/javascript/mastodon/features/community_timeline/index.jsx @@ -3,7 +3,7 @@ import { PureComponent } from 'react'; import { defineMessages, FormattedMessage } from 'react-intl'; -import { Helmet } from 'react-helmet'; +import { Helmet } from '@unhead/react/helmet'; import { connect } from 'react-redux'; diff --git a/app/javascript/mastodon/features/compose/index.tsx b/app/javascript/mastodon/features/compose/index.tsx index 527e541e84dbe1..0439606ac2c0da 100644 --- a/app/javascript/mastodon/features/compose/index.tsx +++ b/app/javascript/mastodon/features/compose/index.tsx @@ -2,11 +2,12 @@ import { useEffect, useCallback } from 'react'; import { useIntl, defineMessages } from 'react-intl'; -import { Helmet } from 'react-helmet'; import { Link } from 'react-router-dom'; import type { Map as ImmutableMap, List as ImmutableList } from 'immutable'; +import { Helmet } from '@unhead/react/helmet'; + import elephantUIPlane from '@/images/elephant_ui_plane.svg'; import EditIcon from '@/material-icons/400-24px/edit_square.svg?react'; import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; diff --git a/app/javascript/mastodon/features/direct_timeline/index.jsx b/app/javascript/mastodon/features/direct_timeline/index.jsx index 7aee83ec10e21e..36b5efc088eb0a 100644 --- a/app/javascript/mastodon/features/direct_timeline/index.jsx +++ b/app/javascript/mastodon/features/direct_timeline/index.jsx @@ -3,7 +3,7 @@ import { useRef, useCallback, useEffect } from 'react'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; -import { Helmet } from 'react-helmet'; +import { Helmet } from '@unhead/react/helmet'; import { useDispatch } from 'react-redux'; diff --git a/app/javascript/mastodon/features/directory/index.tsx b/app/javascript/mastodon/features/directory/index.tsx index 54317a6c76d671..83cf02196625f5 100644 --- a/app/javascript/mastodon/features/directory/index.tsx +++ b/app/javascript/mastodon/features/directory/index.tsx @@ -3,10 +3,10 @@ import { useCallback, useEffect, useRef } from 'react'; import { defineMessages, useIntl } from 'react-intl'; -import { Helmet } from 'react-helmet'; - import { List as ImmutableList } from 'immutable'; +import { Helmet } from '@unhead/react/helmet'; + import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; import { addColumn, diff --git a/app/javascript/mastodon/features/domain_blocks/index.tsx b/app/javascript/mastodon/features/domain_blocks/index.tsx index 26a31c8870dcca..74439ade71f99f 100644 --- a/app/javascript/mastodon/features/domain_blocks/index.tsx +++ b/app/javascript/mastodon/features/domain_blocks/index.tsx @@ -2,7 +2,7 @@ import { useEffect, useRef, useCallback, useState } from 'react'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; -import { Helmet } from 'react-helmet'; +import { Helmet } from '@unhead/react/helmet'; import BlockIcon from '@/material-icons/400-24px/block-fill.svg?react'; import { apiGetDomainBlocks } from 'mastodon/api/domain_blocks'; diff --git a/app/javascript/mastodon/features/explore/index.tsx b/app/javascript/mastodon/features/explore/index.tsx index e886627048ff7e..ed9f566c2dede3 100644 --- a/app/javascript/mastodon/features/explore/index.tsx +++ b/app/javascript/mastodon/features/explore/index.tsx @@ -2,9 +2,10 @@ import { useCallback, useRef } from 'react'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; -import { Helmet } from 'react-helmet'; import { NavLink, Switch, Route } from 'react-router-dom'; +import { Helmet } from '@unhead/react/helmet'; + import TrendingUpIcon from '@/material-icons/400-24px/trending_up.svg?react'; import { Column } from 'mastodon/components/column'; import type { ColumnRef } from 'mastodon/components/column'; diff --git a/app/javascript/mastodon/features/favourited_statuses/index.tsx b/app/javascript/mastodon/features/favourited_statuses/index.tsx index 908a8ae4a17ad5..ccc787d6f28e55 100644 --- a/app/javascript/mastodon/features/favourited_statuses/index.tsx +++ b/app/javascript/mastodon/features/favourited_statuses/index.tsx @@ -2,7 +2,7 @@ import { useEffect, useRef, useCallback } from 'react'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; -import { Helmet } from 'react-helmet'; +import { Helmet } from '@unhead/react/helmet'; import StarIcon from '@/material-icons/400-24px/star-fill.svg?react'; import { addColumn, removeColumn, moveColumn } from 'mastodon/actions/columns'; diff --git a/app/javascript/mastodon/features/favourites/index.jsx b/app/javascript/mastodon/features/favourites/index.jsx index 3296ec2eb993f5..56af51050434b2 100644 --- a/app/javascript/mastodon/features/favourites/index.jsx +++ b/app/javascript/mastodon/features/favourites/index.jsx @@ -2,7 +2,7 @@ import PropTypes from 'prop-types'; import { defineMessages, FormattedMessage } from 'react-intl'; -import { Helmet } from 'react-helmet'; +import { Helmet } from '@unhead/react/helmet'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; diff --git a/app/javascript/mastodon/features/firehose/index.jsx b/app/javascript/mastodon/features/firehose/index.jsx index ca3dd7ce38f5c5..645051d5f251d8 100644 --- a/app/javascript/mastodon/features/firehose/index.jsx +++ b/app/javascript/mastodon/features/firehose/index.jsx @@ -3,7 +3,7 @@ import { useRef, useCallback, useEffect } from 'react'; import { useIntl, defineMessages, FormattedMessage } from 'react-intl'; -import { Helmet } from 'react-helmet'; +import { Helmet } from '@unhead/react/helmet'; import { NavLink } from 'react-router-dom'; import { useIdentity } from '@/mastodon/identity_context'; diff --git a/app/javascript/mastodon/features/follow_requests/index.jsx b/app/javascript/mastodon/features/follow_requests/index.jsx index ba632b8ea3480a..940279feea606d 100644 --- a/app/javascript/mastodon/features/follow_requests/index.jsx +++ b/app/javascript/mastodon/features/follow_requests/index.jsx @@ -2,7 +2,7 @@ import PropTypes from 'prop-types'; import { defineMessages, FormattedMessage } from 'react-intl'; -import { Helmet } from 'react-helmet'; +import { Helmet } from '@unhead/react/helmet'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; diff --git a/app/javascript/mastodon/features/followed_tags/index.tsx b/app/javascript/mastodon/features/followed_tags/index.tsx index 4c5c0581f8d3a7..546109acb14f24 100644 --- a/app/javascript/mastodon/features/followed_tags/index.tsx +++ b/app/javascript/mastodon/features/followed_tags/index.tsx @@ -2,10 +2,10 @@ import { useEffect, useCallback, useRef } from 'react'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; -import { Helmet } from 'react-helmet'; - import { isFulfilled } from '@reduxjs/toolkit'; +import { Helmet } from '@unhead/react/helmet'; + import TagIcon from '@/material-icons/400-24px/tag.svg?react'; import { fetchFollowedHashtags, diff --git a/app/javascript/mastodon/features/getting_started/index.tsx b/app/javascript/mastodon/features/getting_started/index.tsx index 9212ddad76f779..f4f66f1404f885 100644 --- a/app/javascript/mastodon/features/getting_started/index.tsx +++ b/app/javascript/mastodon/features/getting_started/index.tsx @@ -1,6 +1,6 @@ import { useIntl } from 'react-intl'; -import { Helmet } from 'react-helmet'; +import { Helmet } from '@unhead/react/helmet'; import { Column } from 'mastodon/components/column'; diff --git a/app/javascript/mastodon/features/hashtag_timeline/index.jsx b/app/javascript/mastodon/features/hashtag_timeline/index.jsx index 36049d4331da51..f8e04ea08d63d2 100644 --- a/app/javascript/mastodon/features/hashtag_timeline/index.jsx +++ b/app/javascript/mastodon/features/hashtag_timeline/index.jsx @@ -3,7 +3,7 @@ import { PureComponent } from 'react'; import { FormattedMessage } from 'react-intl'; -import { Helmet } from 'react-helmet'; +import { Helmet } from '@unhead/react/helmet'; import { connect } from 'react-redux'; diff --git a/app/javascript/mastodon/features/home_timeline/index.jsx b/app/javascript/mastodon/features/home_timeline/index.jsx index e135fe0cd91083..0b0d3cc805a915 100644 --- a/app/javascript/mastodon/features/home_timeline/index.jsx +++ b/app/javascript/mastodon/features/home_timeline/index.jsx @@ -4,7 +4,7 @@ import { PureComponent } from 'react'; import { defineMessages, FormattedMessage } from 'react-intl'; import classNames from 'classnames'; -import { Helmet } from 'react-helmet'; +import { Helmet } from '@unhead/react/helmet'; import { connect } from 'react-redux'; diff --git a/app/javascript/mastodon/features/keyboard_shortcuts/index.jsx b/app/javascript/mastodon/features/keyboard_shortcuts/index.jsx index 3322dc13a2d9e9..dc0e8cb4f8dd22 100644 --- a/app/javascript/mastodon/features/keyboard_shortcuts/index.jsx +++ b/app/javascript/mastodon/features/keyboard_shortcuts/index.jsx @@ -2,7 +2,7 @@ import PropTypes from 'prop-types'; import { defineMessages, FormattedMessage } from 'react-intl'; -import { Helmet } from 'react-helmet'; +import { Helmet } from '@unhead/react/helmet'; import ImmutablePureComponent from 'react-immutable-pure-component'; diff --git a/app/javascript/mastodon/features/link_timeline/index.tsx b/app/javascript/mastodon/features/link_timeline/index.tsx index fd9e1577731244..b0965196063e36 100644 --- a/app/javascript/mastodon/features/link_timeline/index.tsx +++ b/app/javascript/mastodon/features/link_timeline/index.tsx @@ -1,8 +1,9 @@ import { useRef, useEffect, useCallback } from 'react'; -import { Helmet } from 'react-helmet'; import { useParams } from 'react-router-dom'; +import { Helmet } from '@unhead/react/helmet'; + import TrendingUpIcon from '@/material-icons/400-24px/trending_up.svg?react'; import { expandLinkTimeline } from 'mastodon/actions/timelines'; import { Column } from 'mastodon/components/column'; diff --git a/app/javascript/mastodon/features/list_timeline/index.jsx b/app/javascript/mastodon/features/list_timeline/index.jsx index cc4533ea99305f..7f9d45d3b1301e 100644 --- a/app/javascript/mastodon/features/list_timeline/index.jsx +++ b/app/javascript/mastodon/features/list_timeline/index.jsx @@ -3,7 +3,7 @@ import { PureComponent } from 'react'; import { FormattedMessage } from 'react-intl'; -import { Helmet } from 'react-helmet'; +import { Helmet } from '@unhead/react/helmet'; import { Link, withRouter } from 'react-router-dom'; import ImmutablePropTypes from 'react-immutable-proptypes'; diff --git a/app/javascript/mastodon/features/lists/index.tsx b/app/javascript/mastodon/features/lists/index.tsx index 65fb11d0bea3f6..6aa27d5c57f904 100644 --- a/app/javascript/mastodon/features/lists/index.tsx +++ b/app/javascript/mastodon/features/lists/index.tsx @@ -2,9 +2,10 @@ import { useEffect, useMemo, useCallback } from 'react'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; -import { Helmet } from 'react-helmet'; import { Link } from 'react-router-dom'; +import { Helmet } from '@unhead/react/helmet'; + import AddIcon from '@/material-icons/400-24px/add.svg?react'; import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react'; import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react'; diff --git a/app/javascript/mastodon/features/lists/members.tsx b/app/javascript/mastodon/features/lists/members.tsx index c4bd99d9b4ef91..66ea1bb1277cca 100644 --- a/app/javascript/mastodon/features/lists/members.tsx +++ b/app/javascript/mastodon/features/lists/members.tsx @@ -2,9 +2,10 @@ import { useCallback, useState, useEffect } from 'react'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; -import { Helmet } from 'react-helmet'; import { useParams, Link } from 'react-router-dom'; +import { Helmet } from '@unhead/react/helmet'; + import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react'; import SquigglyArrow from '@/svg-icons/squiggly_arrow.svg?react'; import { fetchRelationships } from 'mastodon/actions/accounts'; diff --git a/app/javascript/mastodon/features/lists/new.tsx b/app/javascript/mastodon/features/lists/new.tsx index 67a79fae4a74a4..b2f916b738fd4e 100644 --- a/app/javascript/mastodon/features/lists/new.tsx +++ b/app/javascript/mastodon/features/lists/new.tsx @@ -2,11 +2,12 @@ import { useCallback, useState, useEffect } from 'react'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; -import { Helmet } from 'react-helmet'; import { useParams, useHistory, Link } from 'react-router-dom'; import { isFulfilled } from '@reduxjs/toolkit'; +import { Helmet } from '@unhead/react/helmet'; + import ChevronRightIcon from '@/material-icons/400-24px/chevron_right.svg?react'; import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react'; import { fetchList } from 'mastodon/actions/lists'; diff --git a/app/javascript/mastodon/features/mutes/index.jsx b/app/javascript/mastodon/features/mutes/index.jsx index 8dd230e4adf517..357bfa3e3b69b3 100644 --- a/app/javascript/mastodon/features/mutes/index.jsx +++ b/app/javascript/mastodon/features/mutes/index.jsx @@ -2,7 +2,7 @@ import PropTypes from 'prop-types'; import { defineMessages, FormattedMessage } from 'react-intl'; -import { Helmet } from 'react-helmet'; +import { Helmet } from '@unhead/react/helmet'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; diff --git a/app/javascript/mastodon/features/notifications/request.jsx b/app/javascript/mastodon/features/notifications/request.jsx index bf0ccc54092f77..d7303e7f27223a 100644 --- a/app/javascript/mastodon/features/notifications/request.jsx +++ b/app/javascript/mastodon/features/notifications/request.jsx @@ -3,7 +3,7 @@ import { useRef, useCallback, useEffect } from 'react'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; -import { Helmet } from 'react-helmet'; +import { Helmet } from '@unhead/react/helmet'; import { useSelector, useDispatch } from 'react-redux'; diff --git a/app/javascript/mastodon/features/notifications/requests.jsx b/app/javascript/mastodon/features/notifications/requests.jsx index b2bdd0ec774988..ef8f58d6a48331 100644 --- a/app/javascript/mastodon/features/notifications/requests.jsx +++ b/app/javascript/mastodon/features/notifications/requests.jsx @@ -3,7 +3,7 @@ import { useRef, useCallback, useEffect, useState } from 'react'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; -import { Helmet } from 'react-helmet'; +import { Helmet } from '@unhead/react/helmet'; import { useSelector, useDispatch } from 'react-redux'; diff --git a/app/javascript/mastodon/features/notifications_v2/index.tsx b/app/javascript/mastodon/features/notifications_v2/index.tsx index 3fca9eb44ee500..74fa914b27659d 100644 --- a/app/javascript/mastodon/features/notifications_v2/index.tsx +++ b/app/javascript/mastodon/features/notifications_v2/index.tsx @@ -2,8 +2,7 @@ import { useCallback, useEffect, useMemo, useRef } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; -import { Helmet } from 'react-helmet'; - +import { Helmet } from '@unhead/react/helmet'; import { isEqual } from 'lodash'; import { useDebouncedCallback } from 'use-debounce'; diff --git a/app/javascript/mastodon/features/onboarding/follows.tsx b/app/javascript/mastodon/features/onboarding/follows.tsx index d53f1ea50ddaa2..910d1051834cf0 100644 --- a/app/javascript/mastodon/features/onboarding/follows.tsx +++ b/app/javascript/mastodon/features/onboarding/follows.tsx @@ -2,9 +2,9 @@ import { useEffect, useState, useCallback, useRef } from 'react'; import { FormattedMessage, useIntl, defineMessages } from 'react-intl'; -import { Helmet } from 'react-helmet'; import { Link } from 'react-router-dom'; +import { Helmet } from '@unhead/react/helmet'; import { useDebouncedCallback } from 'use-debounce'; import PersonIcon from '@/material-icons/400-24px/person.svg?react'; diff --git a/app/javascript/mastodon/features/onboarding/profile.tsx b/app/javascript/mastodon/features/onboarding/profile.tsx index 961c5f98727b95..b4bde4dba55cd2 100644 --- a/app/javascript/mastodon/features/onboarding/profile.tsx +++ b/app/javascript/mastodon/features/onboarding/profile.tsx @@ -3,9 +3,10 @@ import { useState, useMemo, useCallback, createRef } from 'react'; import { useIntl, defineMessages, FormattedMessage } from 'react-intl'; import classNames from 'classnames'; -import { Helmet } from 'react-helmet'; import { useHistory } from 'react-router-dom'; +import { Helmet } from '@unhead/react/helmet'; + import AddPhotoAlternateIcon from '@/material-icons/400-24px/add_photo_alternate.svg?react'; import EditIcon from '@/material-icons/400-24px/edit.svg?react'; import PersonIcon from '@/material-icons/400-24px/person.svg?react'; diff --git a/app/javascript/mastodon/features/pinned_statuses/index.jsx b/app/javascript/mastodon/features/pinned_statuses/index.jsx index 438921a4e30335..2af1af03034dd2 100644 --- a/app/javascript/mastodon/features/pinned_statuses/index.jsx +++ b/app/javascript/mastodon/features/pinned_statuses/index.jsx @@ -2,7 +2,7 @@ import PropTypes from 'prop-types'; import { defineMessages } from 'react-intl'; -import { Helmet } from 'react-helmet'; +import { Helmet } from '@unhead/react/helmet'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; diff --git a/app/javascript/mastodon/features/privacy_policy/index.tsx b/app/javascript/mastodon/features/privacy_policy/index.tsx index cd6f9f3b2b0a0e..d47d8db2960354 100644 --- a/app/javascript/mastodon/features/privacy_policy/index.tsx +++ b/app/javascript/mastodon/features/privacy_policy/index.tsx @@ -2,7 +2,7 @@ import { useState, useEffect } from 'react'; import { FormattedMessage, useIntl, defineMessages } from 'react-intl'; -import { Helmet } from 'react-helmet'; +import { Helmet } from '@unhead/react/helmet'; import { apiGetPrivacyPolicy } from 'mastodon/api/instance'; import type { ApiPrivacyPolicyJSON } from 'mastodon/api_types/instance'; diff --git a/app/javascript/mastodon/features/public_timeline/index.jsx b/app/javascript/mastodon/features/public_timeline/index.jsx index e11b361545216d..0d04e4d4f7f57d 100644 --- a/app/javascript/mastodon/features/public_timeline/index.jsx +++ b/app/javascript/mastodon/features/public_timeline/index.jsx @@ -3,7 +3,7 @@ import { PureComponent } from 'react'; import { defineMessages, FormattedMessage } from 'react-intl'; -import { Helmet } from 'react-helmet'; +import { Helmet } from '@unhead/react/helmet'; import { connect } from 'react-redux'; diff --git a/app/javascript/mastodon/features/quotes/index.tsx b/app/javascript/mastodon/features/quotes/index.tsx index 56cf2f71f11c63..76b4fb892cfbf7 100644 --- a/app/javascript/mastodon/features/quotes/index.tsx +++ b/app/javascript/mastodon/features/quotes/index.tsx @@ -2,10 +2,10 @@ import { useCallback, useEffect } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; -import { Helmet } from 'react-helmet'; - import { List as ImmutableList } from 'immutable'; +import { Helmet } from '@unhead/react/helmet'; + import RefreshIcon from '@/material-icons/400-24px/refresh.svg?react'; import { fetchQuotes } from 'mastodon/actions/interactions_typed'; import { ColumnHeader } from 'mastodon/components/column_header'; diff --git a/app/javascript/mastodon/features/reblogs/index.jsx b/app/javascript/mastodon/features/reblogs/index.jsx index b0ee5029f5fba7..06fee81e9f24df 100644 --- a/app/javascript/mastodon/features/reblogs/index.jsx +++ b/app/javascript/mastodon/features/reblogs/index.jsx @@ -2,7 +2,7 @@ import PropTypes from 'prop-types'; import { defineMessages, FormattedMessage } from 'react-intl'; -import { Helmet } from 'react-helmet'; +import { Helmet } from '@unhead/react/helmet'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; diff --git a/app/javascript/mastodon/features/search/index.tsx b/app/javascript/mastodon/features/search/index.tsx index 5b4ed807fa949a..0424ed30c39ee0 100644 --- a/app/javascript/mastodon/features/search/index.tsx +++ b/app/javascript/mastodon/features/search/index.tsx @@ -2,7 +2,7 @@ import { useCallback, useEffect, useRef } from 'react'; import { useIntl, defineMessages, FormattedMessage } from 'react-intl'; -import { Helmet } from 'react-helmet'; +import { Helmet } from '@unhead/react/helmet'; import FindInPageIcon from '@/material-icons/400-24px/find_in_page.svg?react'; import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; diff --git a/app/javascript/mastodon/features/status/index.jsx b/app/javascript/mastodon/features/status/index.jsx index cc9bf693ea02d4..db18964a3b9e09 100644 --- a/app/javascript/mastodon/features/status/index.jsx +++ b/app/javascript/mastodon/features/status/index.jsx @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; import { defineMessages } from 'react-intl'; import classNames from 'classnames'; -import { Helmet } from 'react-helmet'; +import { Helmet } from '@unhead/react/helmet'; import { withRouter } from 'react-router-dom'; import { difference } from 'lodash'; diff --git a/app/javascript/mastodon/features/terms_of_service/index.tsx b/app/javascript/mastodon/features/terms_of_service/index.tsx index 8ef64fc5157f15..669fb18b926569 100644 --- a/app/javascript/mastodon/features/terms_of_service/index.tsx +++ b/app/javascript/mastodon/features/terms_of_service/index.tsx @@ -7,9 +7,10 @@ import { defineMessages, } from 'react-intl'; -import { Helmet } from 'react-helmet'; import { Link, useParams } from 'react-router-dom'; +import { Helmet } from '@unhead/react/helmet'; + import { apiGetTermsOfService } from 'mastodon/api/instance'; import type { ApiTermsOfServiceJSON } from 'mastodon/api_types/instance'; import { Column } from 'mastodon/components/column'; diff --git a/app/javascript/mastodon/features/ui/components/bundle_column_error.jsx b/app/javascript/mastodon/features/ui/components/bundle_column_error.jsx index da98c5632fb68a..81fb8f48c7e310 100644 --- a/app/javascript/mastodon/features/ui/components/bundle_column_error.jsx +++ b/app/javascript/mastodon/features/ui/components/bundle_column_error.jsx @@ -4,7 +4,7 @@ import { PureComponent } from 'react'; import { FormattedMessage } from 'react-intl'; import classNames from 'classnames'; -import { Helmet } from 'react-helmet'; +import { Helmet } from '@unhead/react/helmet'; import { Link } from 'react-router-dom'; import { Button } from 'mastodon/components/button'; diff --git a/app/javascript/mastodon/features/ui/components/modal_root.jsx b/app/javascript/mastodon/features/ui/components/modal_root.jsx index 8938223c538e98..ff67e1b8f2b183 100644 --- a/app/javascript/mastodon/features/ui/components/modal_root.jsx +++ b/app/javascript/mastodon/features/ui/components/modal_root.jsx @@ -1,7 +1,7 @@ import PropTypes from 'prop-types'; import { PureComponent } from 'react'; -import { Helmet } from 'react-helmet'; +import { Helmet } from '@unhead/react/helmet'; import Base from 'mastodon/components/modal_root'; import { AltTextModal } from 'mastodon/features/alt_text_modal'; diff --git a/package.json b/package.json index 1820f78296fa6d..606f3c8a90cd24 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,7 @@ "@react-spring/web": "^9.7.5", "@reduxjs/toolkit": "^2.0.1", "@rolldown/plugin-babel": "^0.2.2", + "@unhead/react": "^3.1.0", "@use-gesture/react": "^10.3.1", "@vitejs/plugin-legacy": "^8.0.0", "@vitejs/plugin-react": "^6.0.0", @@ -93,7 +94,6 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-easy-crop": "^5.5.6", - "react-helmet": "^6.1.0", "react-immutable-proptypes": "^2.2.0", "react-immutable-pure-component": "^2.2.2", "react-intl": "^10.0.0", @@ -151,7 +151,6 @@ "@types/punycode": "^2.1.0", "@types/react": "^18.2.7", "@types/react-dom": "^18.2.4", - "@types/react-helmet": "^6.1.6", "@types/react-immutable-proptypes": "^2.1.0", "@types/react-router": "^5.1.20", "@types/react-router-dom": "^5.3.3", diff --git a/yarn.lock b/yarn.lock index 3f4008bc64227e..d4a876eced108c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1943,6 +1943,16 @@ __metadata: languageName: node linkType: hard +"@emnapi/core@npm:1.9.2": + version: 1.9.2 + resolution: "@emnapi/core@npm:1.9.2" + dependencies: + "@emnapi/wasi-threads": "npm:1.2.1" + tslib: "npm:^2.4.0" + checksum: 10c0/5500393f953951bad0768fafaa9191f2d938956b20c6d6a79e5ab696a613a25ce6ad23422bc18e86e6ce8deb147619d8d0d7d413a69f84adc01a6633cc353cd9 + languageName: node + linkType: hard + "@emnapi/runtime@npm:1.10.0, @emnapi/runtime@npm:^1.4.3": version: 1.10.0 resolution: "@emnapi/runtime@npm:1.10.0" @@ -1952,6 +1962,15 @@ __metadata: languageName: node linkType: hard +"@emnapi/runtime@npm:1.9.2": + version: 1.9.2 + resolution: "@emnapi/runtime@npm:1.9.2" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10c0/61c3a59e0c36784558b8d58eb02bd04815aa5fb0dbfbaf84d1b3050a78aa0cc63ea129ae806bd1e48062bfeb7fc36eb0e5431740d62f64ea51bdf426404b8caa + languageName: node + linkType: hard + "@emnapi/wasi-threads@npm:1.2.1": version: 1.2.1 resolution: "@emnapi/wasi-threads@npm:1.2.1" @@ -2885,7 +2904,6 @@ __metadata: "@types/punycode": "npm:^2.1.0" "@types/react": "npm:^18.2.7" "@types/react-dom": "npm:^18.2.4" - "@types/react-helmet": "npm:^6.1.6" "@types/react-immutable-proptypes": "npm:^2.1.0" "@types/react-router": "npm:^5.1.20" "@types/react-router-dom": "npm:^5.3.3" @@ -2893,6 +2911,7 @@ __metadata: "@types/react-test-renderer": "npm:^18.0.0" "@types/redux-immutable": "npm:^4.0.3" "@types/requestidlecallback": "npm:^0.3.5" + "@unhead/react": "npm:^3.1.0" "@use-gesture/react": "npm:^10.3.1" "@vitejs/plugin-legacy": "npm:^8.0.0" "@vitejs/plugin-react": "npm:^6.0.0" @@ -2956,7 +2975,6 @@ __metadata: react: "npm:^18.2.0" react-dom: "npm:^18.2.0" react-easy-crop: "npm:^5.5.6" - react-helmet: "npm:^6.1.0" react-immutable-proptypes: "npm:^2.2.0" react-immutable-pure-component: "npm:^2.2.2" react-intl: "npm:^10.0.0" @@ -3195,6 +3213,20 @@ __metadata: languageName: node linkType: hard +"@oxc-parser/binding-android-arm-eabi@npm:0.126.0": + version: 0.126.0 + resolution: "@oxc-parser/binding-android-arm-eabi@npm:0.126.0" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@oxc-parser/binding-android-arm-eabi@npm:0.127.0": + version: 0.127.0 + resolution: "@oxc-parser/binding-android-arm-eabi@npm:0.127.0" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + "@oxc-parser/binding-android-arm-eabi@npm:0.128.0": version: 0.128.0 resolution: "@oxc-parser/binding-android-arm-eabi@npm:0.128.0" @@ -3202,6 +3234,20 @@ __metadata: languageName: node linkType: hard +"@oxc-parser/binding-android-arm64@npm:0.126.0": + version: 0.126.0 + resolution: "@oxc-parser/binding-android-arm64@npm:0.126.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@oxc-parser/binding-android-arm64@npm:0.127.0": + version: 0.127.0 + resolution: "@oxc-parser/binding-android-arm64@npm:0.127.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "@oxc-parser/binding-android-arm64@npm:0.128.0": version: 0.128.0 resolution: "@oxc-parser/binding-android-arm64@npm:0.128.0" @@ -3209,6 +3255,20 @@ __metadata: languageName: node linkType: hard +"@oxc-parser/binding-darwin-arm64@npm:0.126.0": + version: 0.126.0 + resolution: "@oxc-parser/binding-darwin-arm64@npm:0.126.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@oxc-parser/binding-darwin-arm64@npm:0.127.0": + version: 0.127.0 + resolution: "@oxc-parser/binding-darwin-arm64@npm:0.127.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@oxc-parser/binding-darwin-arm64@npm:0.128.0": version: 0.128.0 resolution: "@oxc-parser/binding-darwin-arm64@npm:0.128.0" @@ -3216,6 +3276,20 @@ __metadata: languageName: node linkType: hard +"@oxc-parser/binding-darwin-x64@npm:0.126.0": + version: 0.126.0 + resolution: "@oxc-parser/binding-darwin-x64@npm:0.126.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@oxc-parser/binding-darwin-x64@npm:0.127.0": + version: 0.127.0 + resolution: "@oxc-parser/binding-darwin-x64@npm:0.127.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@oxc-parser/binding-darwin-x64@npm:0.128.0": version: 0.128.0 resolution: "@oxc-parser/binding-darwin-x64@npm:0.128.0" @@ -3223,6 +3297,20 @@ __metadata: languageName: node linkType: hard +"@oxc-parser/binding-freebsd-x64@npm:0.126.0": + version: 0.126.0 + resolution: "@oxc-parser/binding-freebsd-x64@npm:0.126.0" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@oxc-parser/binding-freebsd-x64@npm:0.127.0": + version: 0.127.0 + resolution: "@oxc-parser/binding-freebsd-x64@npm:0.127.0" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + "@oxc-parser/binding-freebsd-x64@npm:0.128.0": version: 0.128.0 resolution: "@oxc-parser/binding-freebsd-x64@npm:0.128.0" @@ -3230,6 +3318,20 @@ __metadata: languageName: node linkType: hard +"@oxc-parser/binding-linux-arm-gnueabihf@npm:0.126.0": + version: 0.126.0 + resolution: "@oxc-parser/binding-linux-arm-gnueabihf@npm:0.126.0" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@oxc-parser/binding-linux-arm-gnueabihf@npm:0.127.0": + version: 0.127.0 + resolution: "@oxc-parser/binding-linux-arm-gnueabihf@npm:0.127.0" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + "@oxc-parser/binding-linux-arm-gnueabihf@npm:0.128.0": version: 0.128.0 resolution: "@oxc-parser/binding-linux-arm-gnueabihf@npm:0.128.0" @@ -3237,6 +3339,20 @@ __metadata: languageName: node linkType: hard +"@oxc-parser/binding-linux-arm-musleabihf@npm:0.126.0": + version: 0.126.0 + resolution: "@oxc-parser/binding-linux-arm-musleabihf@npm:0.126.0" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@oxc-parser/binding-linux-arm-musleabihf@npm:0.127.0": + version: 0.127.0 + resolution: "@oxc-parser/binding-linux-arm-musleabihf@npm:0.127.0" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + "@oxc-parser/binding-linux-arm-musleabihf@npm:0.128.0": version: 0.128.0 resolution: "@oxc-parser/binding-linux-arm-musleabihf@npm:0.128.0" @@ -3244,6 +3360,20 @@ __metadata: languageName: node linkType: hard +"@oxc-parser/binding-linux-arm64-gnu@npm:0.126.0": + version: 0.126.0 + resolution: "@oxc-parser/binding-linux-arm64-gnu@npm:0.126.0" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@oxc-parser/binding-linux-arm64-gnu@npm:0.127.0": + version: 0.127.0 + resolution: "@oxc-parser/binding-linux-arm64-gnu@npm:0.127.0" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + "@oxc-parser/binding-linux-arm64-gnu@npm:0.128.0": version: 0.128.0 resolution: "@oxc-parser/binding-linux-arm64-gnu@npm:0.128.0" @@ -3251,6 +3381,20 @@ __metadata: languageName: node linkType: hard +"@oxc-parser/binding-linux-arm64-musl@npm:0.126.0": + version: 0.126.0 + resolution: "@oxc-parser/binding-linux-arm64-musl@npm:0.126.0" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@oxc-parser/binding-linux-arm64-musl@npm:0.127.0": + version: 0.127.0 + resolution: "@oxc-parser/binding-linux-arm64-musl@npm:0.127.0" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + "@oxc-parser/binding-linux-arm64-musl@npm:0.128.0": version: 0.128.0 resolution: "@oxc-parser/binding-linux-arm64-musl@npm:0.128.0" @@ -3258,6 +3402,20 @@ __metadata: languageName: node linkType: hard +"@oxc-parser/binding-linux-ppc64-gnu@npm:0.126.0": + version: 0.126.0 + resolution: "@oxc-parser/binding-linux-ppc64-gnu@npm:0.126.0" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@oxc-parser/binding-linux-ppc64-gnu@npm:0.127.0": + version: 0.127.0 + resolution: "@oxc-parser/binding-linux-ppc64-gnu@npm:0.127.0" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + "@oxc-parser/binding-linux-ppc64-gnu@npm:0.128.0": version: 0.128.0 resolution: "@oxc-parser/binding-linux-ppc64-gnu@npm:0.128.0" @@ -3265,6 +3423,20 @@ __metadata: languageName: node linkType: hard +"@oxc-parser/binding-linux-riscv64-gnu@npm:0.126.0": + version: 0.126.0 + resolution: "@oxc-parser/binding-linux-riscv64-gnu@npm:0.126.0" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@oxc-parser/binding-linux-riscv64-gnu@npm:0.127.0": + version: 0.127.0 + resolution: "@oxc-parser/binding-linux-riscv64-gnu@npm:0.127.0" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + "@oxc-parser/binding-linux-riscv64-gnu@npm:0.128.0": version: 0.128.0 resolution: "@oxc-parser/binding-linux-riscv64-gnu@npm:0.128.0" @@ -3272,6 +3444,20 @@ __metadata: languageName: node linkType: hard +"@oxc-parser/binding-linux-riscv64-musl@npm:0.126.0": + version: 0.126.0 + resolution: "@oxc-parser/binding-linux-riscv64-musl@npm:0.126.0" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + +"@oxc-parser/binding-linux-riscv64-musl@npm:0.127.0": + version: 0.127.0 + resolution: "@oxc-parser/binding-linux-riscv64-musl@npm:0.127.0" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + "@oxc-parser/binding-linux-riscv64-musl@npm:0.128.0": version: 0.128.0 resolution: "@oxc-parser/binding-linux-riscv64-musl@npm:0.128.0" @@ -3279,6 +3465,20 @@ __metadata: languageName: node linkType: hard +"@oxc-parser/binding-linux-s390x-gnu@npm:0.126.0": + version: 0.126.0 + resolution: "@oxc-parser/binding-linux-s390x-gnu@npm:0.126.0" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@oxc-parser/binding-linux-s390x-gnu@npm:0.127.0": + version: 0.127.0 + resolution: "@oxc-parser/binding-linux-s390x-gnu@npm:0.127.0" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + "@oxc-parser/binding-linux-s390x-gnu@npm:0.128.0": version: 0.128.0 resolution: "@oxc-parser/binding-linux-s390x-gnu@npm:0.128.0" @@ -3286,6 +3486,20 @@ __metadata: languageName: node linkType: hard +"@oxc-parser/binding-linux-x64-gnu@npm:0.126.0": + version: 0.126.0 + resolution: "@oxc-parser/binding-linux-x64-gnu@npm:0.126.0" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@oxc-parser/binding-linux-x64-gnu@npm:0.127.0": + version: 0.127.0 + resolution: "@oxc-parser/binding-linux-x64-gnu@npm:0.127.0" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + "@oxc-parser/binding-linux-x64-gnu@npm:0.128.0": version: 0.128.0 resolution: "@oxc-parser/binding-linux-x64-gnu@npm:0.128.0" @@ -3293,6 +3507,20 @@ __metadata: languageName: node linkType: hard +"@oxc-parser/binding-linux-x64-musl@npm:0.126.0": + version: 0.126.0 + resolution: "@oxc-parser/binding-linux-x64-musl@npm:0.126.0" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@oxc-parser/binding-linux-x64-musl@npm:0.127.0": + version: 0.127.0 + resolution: "@oxc-parser/binding-linux-x64-musl@npm:0.127.0" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + "@oxc-parser/binding-linux-x64-musl@npm:0.128.0": version: 0.128.0 resolution: "@oxc-parser/binding-linux-x64-musl@npm:0.128.0" @@ -3300,6 +3528,20 @@ __metadata: languageName: node linkType: hard +"@oxc-parser/binding-openharmony-arm64@npm:0.126.0": + version: 0.126.0 + resolution: "@oxc-parser/binding-openharmony-arm64@npm:0.126.0" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@oxc-parser/binding-openharmony-arm64@npm:0.127.0": + version: 0.127.0 + resolution: "@oxc-parser/binding-openharmony-arm64@npm:0.127.0" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + "@oxc-parser/binding-openharmony-arm64@npm:0.128.0": version: 0.128.0 resolution: "@oxc-parser/binding-openharmony-arm64@npm:0.128.0" @@ -3307,6 +3549,28 @@ __metadata: languageName: node linkType: hard +"@oxc-parser/binding-wasm32-wasi@npm:0.126.0": + version: 0.126.0 + resolution: "@oxc-parser/binding-wasm32-wasi@npm:0.126.0" + dependencies: + "@emnapi/core": "npm:1.9.2" + "@emnapi/runtime": "npm:1.9.2" + "@napi-rs/wasm-runtime": "npm:^1.1.4" + conditions: cpu=wasm32 + languageName: node + linkType: hard + +"@oxc-parser/binding-wasm32-wasi@npm:0.127.0": + version: 0.127.0 + resolution: "@oxc-parser/binding-wasm32-wasi@npm:0.127.0" + dependencies: + "@emnapi/core": "npm:1.9.2" + "@emnapi/runtime": "npm:1.9.2" + "@napi-rs/wasm-runtime": "npm:^1.1.4" + conditions: cpu=wasm32 + languageName: node + linkType: hard + "@oxc-parser/binding-wasm32-wasi@npm:0.128.0": version: 0.128.0 resolution: "@oxc-parser/binding-wasm32-wasi@npm:0.128.0" @@ -3318,6 +3582,20 @@ __metadata: languageName: node linkType: hard +"@oxc-parser/binding-win32-arm64-msvc@npm:0.126.0": + version: 0.126.0 + resolution: "@oxc-parser/binding-win32-arm64-msvc@npm:0.126.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@oxc-parser/binding-win32-arm64-msvc@npm:0.127.0": + version: 0.127.0 + resolution: "@oxc-parser/binding-win32-arm64-msvc@npm:0.127.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@oxc-parser/binding-win32-arm64-msvc@npm:0.128.0": version: 0.128.0 resolution: "@oxc-parser/binding-win32-arm64-msvc@npm:0.128.0" @@ -3325,6 +3603,20 @@ __metadata: languageName: node linkType: hard +"@oxc-parser/binding-win32-ia32-msvc@npm:0.126.0": + version: 0.126.0 + resolution: "@oxc-parser/binding-win32-ia32-msvc@npm:0.126.0" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@oxc-parser/binding-win32-ia32-msvc@npm:0.127.0": + version: 0.127.0 + resolution: "@oxc-parser/binding-win32-ia32-msvc@npm:0.127.0" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@oxc-parser/binding-win32-ia32-msvc@npm:0.128.0": version: 0.128.0 resolution: "@oxc-parser/binding-win32-ia32-msvc@npm:0.128.0" @@ -3332,6 +3624,20 @@ __metadata: languageName: node linkType: hard +"@oxc-parser/binding-win32-x64-msvc@npm:0.126.0": + version: 0.126.0 + resolution: "@oxc-parser/binding-win32-x64-msvc@npm:0.126.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@oxc-parser/binding-win32-x64-msvc@npm:0.127.0": + version: 0.127.0 + resolution: "@oxc-parser/binding-win32-x64-msvc@npm:0.127.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@oxc-parser/binding-win32-x64-msvc@npm:0.128.0": version: 0.128.0 resolution: "@oxc-parser/binding-win32-x64-msvc@npm:0.128.0" @@ -3339,13 +3645,20 @@ __metadata: languageName: node linkType: hard -"@oxc-project/types@npm:=0.127.0": +"@oxc-project/types@npm:=0.127.0, @oxc-project/types@npm:^0.127.0": version: 0.127.0 resolution: "@oxc-project/types@npm:0.127.0" checksum: 10c0/52c0947ac64a9ca119fe971f947e784a35ecd14a072fa3f542a58a5f6c42010b53f2bf92731e39b9899b83c990a9517bbd29d1e5a5b7b489e52616685c6a9278 languageName: node linkType: hard +"@oxc-project/types@npm:^0.126.0": + version: 0.126.0 + resolution: "@oxc-project/types@npm:0.126.0" + checksum: 10c0/ad0bb774d63b6529bfbe7cc0808c9368c5de6038938256eabc868cf7f812b8d304a7a57800b1cfc09bf02566c396be8148d3153fb2c5fee273ccd8f0a9fd8751 + languageName: node + linkType: hard + "@oxc-project/types@npm:^0.128.0": version: 0.128.0 resolution: "@oxc-project/types@npm:0.128.0" @@ -4904,15 +5217,6 @@ __metadata: languageName: node linkType: hard -"@types/react-helmet@npm:^6.1.6": - version: 6.1.11 - resolution: "@types/react-helmet@npm:6.1.11" - dependencies: - "@types/react": "npm:*" - checksum: 10c0/f7b3bb2151d992a108ae46fed876fb9c8119108397d9a01d150c5642782997542c8b3c52e742b56e8689b7dbfa62ca9cfc76aa7e05dec4e60c652f7ef53fa783 - languageName: node - linkType: hard - "@types/react-immutable-proptypes@npm:^2.1.0": version: 2.1.3 resolution: "@types/react-immutable-proptypes@npm:2.1.3" @@ -5211,6 +5515,63 @@ __metadata: languageName: node linkType: hard +"@unhead/bundler@npm:3.1.0": + version: 3.1.0 + resolution: "@unhead/bundler@npm:3.1.0" + dependencies: + "@vitejs/devtools-kit": "npm:^0.1.15" + magic-string: "npm:^0.30.21" + oxc-parser: "npm:^0.127.0" + oxc-walker: "npm:^0.7.0" + ufo: "npm:^1.6.3" + unplugin: "npm:^3.0.0" + peerDependencies: + "@unhead/cli": ^3.1.0 + esbuild: ">=0.17.0" + lightningcss: ">=1.20.0" + rolldown: ">=1.0.0-beta.0" + unhead: ^3.1.0 + vite: ">=6.4.2" + webpack: ">=5.0.0" + peerDependenciesMeta: + "@unhead/cli": + optional: true + esbuild: + optional: true + lightningcss: + optional: true + rolldown: + optional: true + vite: + optional: true + webpack: + optional: true + checksum: 10c0/5acef500584502a4106977c01d0fc131dd13edfc821b66bbdbe7a9d9205a082d8a8c37c230bb5b65d7ce13aa6a7262881ce51c1a3ed24be103ce2a9f9104adc7 + languageName: node + linkType: hard + +"@unhead/react@npm:^3.1.0": + version: 3.1.0 + resolution: "@unhead/react@npm:3.1.0" + dependencies: + "@unhead/bundler": "npm:3.1.0" + magic-string: "npm:^0.30.21" + oxc-walker: "npm:^0.7.0" + unhead: "npm:3.1.0" + unplugin: "npm:^3.0.0" + peerDependencies: + react: ">=19.2.4" + vite: ">=6.4.2" + webpack: ">=5.0.0" + peerDependenciesMeta: + vite: + optional: true + webpack: + optional: true + checksum: 10c0/e810fbde5eed07986785deadbd23a446c5a6ec6323068eb51b1e285f141df35ffec4f954c5f07b35ad664ecd5827709c140894b99c3fbbeee4779c9db6d8c933 + languageName: node + linkType: hard + "@unicode/unicode-17.0.0@npm:^1.6.16": version: 1.6.16 resolution: "@unicode/unicode-17.0.0@npm:1.6.16" @@ -5371,6 +5732,29 @@ __metadata: languageName: node linkType: hard +"@valibot/to-json-schema@npm:^1.6.0": + version: 1.6.0 + resolution: "@valibot/to-json-schema@npm:1.6.0" + peerDependencies: + valibot: ^1.3.0 + checksum: 10c0/3dabbb9ed0f135c436a9f4a22ff1ad3df500e0bdff1b771eb9a03f4ba7a412bb1873a9cc1ff32c09ff47d10be8d1834a540705229380b9fc46fb65a9b41dbae2 + languageName: node + linkType: hard + +"@vitejs/devtools-kit@npm:^0.1.15": + version: 0.1.18 + resolution: "@vitejs/devtools-kit@npm:0.1.18" + dependencies: + birpc: "npm:^4.0.0" + devframe: "npm:0.1.18" + ohash: "npm:^2.0.11" + sirv: "npm:^3.0.2" + peerDependencies: + vite: "*" + checksum: 10c0/4cfad9f8b24089c115c36be531636eeb1bf31f47a823ed0a3159e3bd483daaf7f0c9254359acde3a7a2e68931c49176d0269ddae40fcaa5a097452470c8bfb13 + languageName: node + linkType: hard + "@vitejs/plugin-legacy@npm:^8.0.0": version: 8.0.1 resolution: "@vitejs/plugin-legacy@npm:8.0.1" @@ -5733,6 +6117,13 @@ __metadata: languageName: node linkType: hard +"ansis@npm:^4.2.0": + version: 4.2.0 + resolution: "ansis@npm:4.2.0" + checksum: 10c0/cd6a7a681ecd36e72e0d79c1e34f1f3bcb1b15bcbb6f0f8969b4228062d3bfebbef468e09771b00d93b2294370b34f707599d4a113542a876de26823b795b5d2 + languageName: node + linkType: hard + "are-docs-informative@npm:^0.0.2": version: 0.0.2 resolution: "are-docs-informative@npm:0.0.2" @@ -6099,6 +6490,13 @@ __metadata: languageName: node linkType: hard +"birpc@npm:^4.0.0": + version: 4.0.0 + resolution: "birpc@npm:4.0.0" + checksum: 10c0/61f4e893ff4c5948b2c587c971c04883af0d8b2658d4632c8e77073db9f9e8b040402f985d56308021890b2ad32ef8392e36a8335cab1e3771d99e1b025d1af6 + languageName: node + linkType: hard + "blurhash@npm:^2.0.5": version: 2.0.5 resolution: "blurhash@npm:2.0.5" @@ -6228,6 +6626,13 @@ __metadata: languageName: node linkType: hard +"cac@npm:^7.0.0": + version: 7.0.0 + resolution: "cac@npm:7.0.0" + checksum: 10c0/e9da33cb9f0425546ae92a450d479276f9969a050fe64f5d6fedf058bdd87f22a370797fe1c158e07655fa9fc183749df7cb2037431e3772faa7bee9919fb763 + languageName: node + linkType: hard + "cacache@npm:^19.0.1": version: 19.0.1 resolution: "cacache@npm:19.0.1" @@ -6543,6 +6948,13 @@ __metadata: languageName: node linkType: hard +"confbox@npm:^0.1.8": + version: 0.1.8 + resolution: "confbox@npm:0.1.8" + checksum: 10c0/fc2c68d97cb54d885b10b63e45bd8da83a8a71459d3ecf1825143dd4c7f9f1b696b3283e07d9d12a144c1301c2ebc7842380bdf0014e55acc4ae1c9550102418 + languageName: node + linkType: hard + "content-disposition@npm:^1.0.0": version: 1.0.0 resolution: "content-disposition@npm:1.0.0" @@ -6573,6 +6985,13 @@ __metadata: languageName: node linkType: hard +"cookie-es@npm:^1.2.3": + version: 1.2.3 + resolution: "cookie-es@npm:1.2.3" + checksum: 10c0/429eae6f5130a7380ea024d787d7e1ecc644ca84f9c43dfb70f18761a831d2ba591d28f837ce350892cfff0857d711f3a4ad93a082637bceb478823c339c1a97 + languageName: node + linkType: hard + "cookie-signature@npm:^1.2.1": version: 1.2.2 resolution: "cookie-signature@npm:1.2.2" @@ -6707,6 +7126,15 @@ __metadata: languageName: node linkType: hard +"crossws@npm:^0.3.5": + version: 0.3.5 + resolution: "crossws@npm:0.3.5" + dependencies: + uncrypto: "npm:^0.1.3" + checksum: 10c0/9e873546f0806606c4f775219f6811768fc3b3b0765ca8230722e849058ad098318af006e1faa39a8008c03009c37c519f6bccad41b0d78586237585c75fb38b + languageName: node + linkType: hard + "crypto-random-string@npm:^2.0.0": version: 2.0.0 resolution: "crypto-random-string@npm:2.0.0" @@ -6946,6 +7374,13 @@ __metadata: languageName: node linkType: hard +"defu@npm:^6.1.6": + version: 6.1.7 + resolution: "defu@npm:6.1.7" + checksum: 10c0/e6635388103c8be3c574ac31302f6930e5e6eeedba32cb1b30cf993c7d9fb571aec2485446dfa23bfa63e55e66156fe109027a9695db82a50f931e91e8d4bedb + languageName: node + linkType: hard + "delayed-stream@npm:~1.0.0": version: 1.0.0 resolution: "delayed-stream@npm:1.0.0" @@ -6983,6 +7418,13 @@ __metadata: languageName: node linkType: hard +"destr@npm:^2.0.5": + version: 2.0.5 + resolution: "destr@npm:2.0.5" + checksum: 10c0/efabffe7312a45ad90d79975376be958c50069f1156b94c181199763a7f971e113bd92227c26b94a169c71ca7dbc13583b7e96e5164743969fc79e1ff153e646 + languageName: node + linkType: hard + "detect-it@npm:^4.0.1": version: 4.0.1 resolution: "detect-it@npm:4.0.1" @@ -7015,6 +7457,37 @@ __metadata: languageName: node linkType: hard +"devframe@npm:0.1.18": + version: 0.1.18 + resolution: "devframe@npm:0.1.18" + dependencies: + "@valibot/to-json-schema": "npm:^1.6.0" + ansis: "npm:^4.2.0" + birpc: "npm:^4.0.0" + cac: "npm:^7.0.0" + h3: "npm:^1.15.11" + logs-sdk: "npm:^0.0.6" + ohash: "npm:^2.0.11" + pathe: "npm:^2.0.3" + sirv: "npm:^3.0.2" + structured-clone-es: "npm:^2.0.0" + valibot: "npm:^1.3.1" + ws: "npm:^8.20.0" + peerDependencies: + "@modelcontextprotocol/sdk": ^1.0.0 + "@nuxt/kit": ^3.0.0 || ^4.0.0 + launch-editor: ^2.0.0 + peerDependenciesMeta: + "@modelcontextprotocol/sdk": + optional: true + "@nuxt/kit": + optional: true + launch-editor: + optional: true + checksum: 10c0/35f0d6a25462dc540bba1eb4269a52dfc98b3a9dc8ac462daaa9dfc2e27060b4764692876ac6aaa7c568e912dcc1b8b2e5bb7b8f6d52ae471e4e297d9b4fe2ef + languageName: node + linkType: hard + "doctrine@npm:^2.1.0": version: 2.1.0 resolution: "doctrine@npm:2.1.0" @@ -8581,6 +9054,23 @@ __metadata: languageName: node linkType: hard +"h3@npm:^1.15.11": + version: 1.15.11 + resolution: "h3@npm:1.15.11" + dependencies: + cookie-es: "npm:^1.2.3" + crossws: "npm:^0.3.5" + defu: "npm:^6.1.6" + destr: "npm:^2.0.5" + iron-webcrypto: "npm:^1.2.1" + node-mock-http: "npm:^1.0.4" + radix3: "npm:^1.1.2" + ufo: "npm:^1.6.3" + uncrypto: "npm:^0.1.3" + checksum: 10c0/6ccb421b9f92e02e6330c2b6697b18ef18e9550e4a1708f224ca517c40ecd201cd00967d0feb26e718595e86e985edec1755933cf8792d34fb8504f1c7cc261d + languageName: node + linkType: hard + "has-bigints@npm:^1.0.2": version: 1.0.2 resolution: "has-bigints@npm:1.0.2" @@ -8707,6 +9197,13 @@ __metadata: languageName: node linkType: hard +"hookable@npm:^6.1.1": + version: 6.1.1 + resolution: "hookable@npm:6.1.1" + checksum: 10c0/bb46cd9ffc0a997af21febd97835da4e59a6989adec73dc3c215fcc44c7ac01de4781f251c3d420bf45862d2592a695f5f0de095b6f5df52db8afb5166938212 + languageName: node + linkType: hard + "hookified@npm:^1.15.0, hookified@npm:^1.15.1": version: 1.15.1 resolution: "hookified@npm:1.15.1" @@ -9029,6 +9526,13 @@ __metadata: languageName: node linkType: hard +"iron-webcrypto@npm:^1.2.1": + version: 1.2.1 + resolution: "iron-webcrypto@npm:1.2.1" + checksum: 10c0/5cf27c6e2bd3ef3b4970e486235fd82491ab8229e2ed0ac23307c28d6c80d721772a86ed4e9fe2a5cabadd710c2f024b706843b40561fb83f15afee58f809f66 + languageName: node + linkType: hard + "is-array-buffer@npm:^3.0.4, is-array-buffer@npm:^3.0.5": version: 3.0.5 resolution: "is-array-buffer@npm:3.0.5" @@ -10052,6 +10556,17 @@ __metadata: languageName: node linkType: hard +"logs-sdk@npm:^0.0.6": + version: 0.0.6 + resolution: "logs-sdk@npm:0.0.6" + dependencies: + magic-string: "npm:^0.30.21" + oxc-parser: "npm:^0.126.0" + unplugin: "npm:^3.0.0" + checksum: 10c0/d1b5643f5067a89ffde1b9bd936f4d386b9518ae36f41a4e370f5a4174e778dbf6c4fc9b48374f0eee850a508d2cbccfddf2f762308712db316fdaeefc9bc52b + languageName: node + linkType: hard + "loose-envify@npm:^1.0.0, loose-envify@npm:^1.1.0, loose-envify@npm:^1.2.0, loose-envify@npm:^1.3.1, loose-envify@npm:^1.4.0": version: 1.4.0 resolution: "loose-envify@npm:1.4.0" @@ -10111,7 +10626,22 @@ __metadata: languageName: node linkType: hard -"magic-string@npm:^0.30.0, magic-string@npm:^0.30.21, magic-string@npm:^0.30.3, magic-string@npm:~0.30.11": +"magic-regexp@npm:^0.10.0": + version: 0.10.0 + resolution: "magic-regexp@npm:0.10.0" + dependencies: + estree-walker: "npm:^3.0.3" + magic-string: "npm:^0.30.12" + mlly: "npm:^1.7.2" + regexp-tree: "npm:^0.1.27" + type-level-regexp: "npm:~0.1.17" + ufo: "npm:^1.5.4" + unplugin: "npm:^2.0.0" + checksum: 10c0/4f183439510984744fcff5af9ef6c2776d886aba832e1390c8d85328e2a4991464e5cb18dc6f491c0184ea1b96508475a5b112295a08fdeae1018193901688f9 + languageName: node + linkType: hard + +"magic-string@npm:^0.30.0, magic-string@npm:^0.30.12, magic-string@npm:^0.30.21, magic-string@npm:^0.30.3, magic-string@npm:~0.30.11": version: 0.30.21 resolution: "magic-string@npm:0.30.21" dependencies: @@ -10432,6 +10962,18 @@ __metadata: languageName: node linkType: hard +"mlly@npm:^1.7.2, mlly@npm:^1.7.4": + version: 1.8.2 + resolution: "mlly@npm:1.8.2" + dependencies: + acorn: "npm:^8.16.0" + pathe: "npm:^2.0.3" + pkg-types: "npm:^1.3.1" + ufo: "npm:^1.6.3" + checksum: 10c0/aa826683a6daddf2aef65f9c8142e362731cf8e415a5591faf92fd51040a76697e45ab6dbb7a3b38be74e0f8c464825a7eabe827750455c7472421953f5da733 + languageName: node + linkType: hard + "mrmime@npm:^2.0.0": version: 2.0.1 resolution: "mrmime@npm:2.0.1" @@ -10605,6 +11147,13 @@ __metadata: languageName: node linkType: hard +"node-mock-http@npm:^1.0.4": + version: 1.0.4 + resolution: "node-mock-http@npm:1.0.4" + checksum: 10c0/86e3f7453cf07ad6b8bd17cf89ff91d45f486a861cf6d891618cf29647d559cbcde1d1f90c9cc02e014ff9f7900b2fb21c96b03ea4b4a415dbe2d65badadceba + languageName: node + linkType: hard + "node-releases@npm:^2.0.27": version: 2.0.27 resolution: "node-releases@npm:2.0.27" @@ -10733,6 +11282,13 @@ __metadata: languageName: node linkType: hard +"ohash@npm:^2.0.11": + version: 2.0.11 + resolution: "ohash@npm:2.0.11" + checksum: 10c0/d07c8d79cc26da082c1a7c8d5b56c399dd4ed3b2bd069fcae6bae78c99a9bcc3ad813b1e1f49ca2f335292846d689c6141a762cf078727d2302a33d414e69c79 + languageName: node + linkType: hard + "on-exit-leak-free@npm:^2.1.0": version: 2.1.2 resolution: "on-exit-leak-free@npm:2.1.2" @@ -10834,6 +11390,146 @@ __metadata: languageName: node linkType: hard +"oxc-parser@npm:^0.126.0": + version: 0.126.0 + resolution: "oxc-parser@npm:0.126.0" + dependencies: + "@oxc-parser/binding-android-arm-eabi": "npm:0.126.0" + "@oxc-parser/binding-android-arm64": "npm:0.126.0" + "@oxc-parser/binding-darwin-arm64": "npm:0.126.0" + "@oxc-parser/binding-darwin-x64": "npm:0.126.0" + "@oxc-parser/binding-freebsd-x64": "npm:0.126.0" + "@oxc-parser/binding-linux-arm-gnueabihf": "npm:0.126.0" + "@oxc-parser/binding-linux-arm-musleabihf": "npm:0.126.0" + "@oxc-parser/binding-linux-arm64-gnu": "npm:0.126.0" + "@oxc-parser/binding-linux-arm64-musl": "npm:0.126.0" + "@oxc-parser/binding-linux-ppc64-gnu": "npm:0.126.0" + "@oxc-parser/binding-linux-riscv64-gnu": "npm:0.126.0" + "@oxc-parser/binding-linux-riscv64-musl": "npm:0.126.0" + "@oxc-parser/binding-linux-s390x-gnu": "npm:0.126.0" + "@oxc-parser/binding-linux-x64-gnu": "npm:0.126.0" + "@oxc-parser/binding-linux-x64-musl": "npm:0.126.0" + "@oxc-parser/binding-openharmony-arm64": "npm:0.126.0" + "@oxc-parser/binding-wasm32-wasi": "npm:0.126.0" + "@oxc-parser/binding-win32-arm64-msvc": "npm:0.126.0" + "@oxc-parser/binding-win32-ia32-msvc": "npm:0.126.0" + "@oxc-parser/binding-win32-x64-msvc": "npm:0.126.0" + "@oxc-project/types": "npm:^0.126.0" + dependenciesMeta: + "@oxc-parser/binding-android-arm-eabi": + optional: true + "@oxc-parser/binding-android-arm64": + optional: true + "@oxc-parser/binding-darwin-arm64": + optional: true + "@oxc-parser/binding-darwin-x64": + optional: true + "@oxc-parser/binding-freebsd-x64": + optional: true + "@oxc-parser/binding-linux-arm-gnueabihf": + optional: true + "@oxc-parser/binding-linux-arm-musleabihf": + optional: true + "@oxc-parser/binding-linux-arm64-gnu": + optional: true + "@oxc-parser/binding-linux-arm64-musl": + optional: true + "@oxc-parser/binding-linux-ppc64-gnu": + optional: true + "@oxc-parser/binding-linux-riscv64-gnu": + optional: true + "@oxc-parser/binding-linux-riscv64-musl": + optional: true + "@oxc-parser/binding-linux-s390x-gnu": + optional: true + "@oxc-parser/binding-linux-x64-gnu": + optional: true + "@oxc-parser/binding-linux-x64-musl": + optional: true + "@oxc-parser/binding-openharmony-arm64": + optional: true + "@oxc-parser/binding-wasm32-wasi": + optional: true + "@oxc-parser/binding-win32-arm64-msvc": + optional: true + "@oxc-parser/binding-win32-ia32-msvc": + optional: true + "@oxc-parser/binding-win32-x64-msvc": + optional: true + checksum: 10c0/412b02368711565b4f448c0866fdb37131ac4bc0ccdd0ee97c6b2dadc7bf7d95b3158aff7dc71f2ca2ad789851b99ca81004c348a60f852ac3bf7e9d46cdaecd + languageName: node + linkType: hard + +"oxc-parser@npm:^0.127.0": + version: 0.127.0 + resolution: "oxc-parser@npm:0.127.0" + dependencies: + "@oxc-parser/binding-android-arm-eabi": "npm:0.127.0" + "@oxc-parser/binding-android-arm64": "npm:0.127.0" + "@oxc-parser/binding-darwin-arm64": "npm:0.127.0" + "@oxc-parser/binding-darwin-x64": "npm:0.127.0" + "@oxc-parser/binding-freebsd-x64": "npm:0.127.0" + "@oxc-parser/binding-linux-arm-gnueabihf": "npm:0.127.0" + "@oxc-parser/binding-linux-arm-musleabihf": "npm:0.127.0" + "@oxc-parser/binding-linux-arm64-gnu": "npm:0.127.0" + "@oxc-parser/binding-linux-arm64-musl": "npm:0.127.0" + "@oxc-parser/binding-linux-ppc64-gnu": "npm:0.127.0" + "@oxc-parser/binding-linux-riscv64-gnu": "npm:0.127.0" + "@oxc-parser/binding-linux-riscv64-musl": "npm:0.127.0" + "@oxc-parser/binding-linux-s390x-gnu": "npm:0.127.0" + "@oxc-parser/binding-linux-x64-gnu": "npm:0.127.0" + "@oxc-parser/binding-linux-x64-musl": "npm:0.127.0" + "@oxc-parser/binding-openharmony-arm64": "npm:0.127.0" + "@oxc-parser/binding-wasm32-wasi": "npm:0.127.0" + "@oxc-parser/binding-win32-arm64-msvc": "npm:0.127.0" + "@oxc-parser/binding-win32-ia32-msvc": "npm:0.127.0" + "@oxc-parser/binding-win32-x64-msvc": "npm:0.127.0" + "@oxc-project/types": "npm:^0.127.0" + dependenciesMeta: + "@oxc-parser/binding-android-arm-eabi": + optional: true + "@oxc-parser/binding-android-arm64": + optional: true + "@oxc-parser/binding-darwin-arm64": + optional: true + "@oxc-parser/binding-darwin-x64": + optional: true + "@oxc-parser/binding-freebsd-x64": + optional: true + "@oxc-parser/binding-linux-arm-gnueabihf": + optional: true + "@oxc-parser/binding-linux-arm-musleabihf": + optional: true + "@oxc-parser/binding-linux-arm64-gnu": + optional: true + "@oxc-parser/binding-linux-arm64-musl": + optional: true + "@oxc-parser/binding-linux-ppc64-gnu": + optional: true + "@oxc-parser/binding-linux-riscv64-gnu": + optional: true + "@oxc-parser/binding-linux-riscv64-musl": + optional: true + "@oxc-parser/binding-linux-s390x-gnu": + optional: true + "@oxc-parser/binding-linux-x64-gnu": + optional: true + "@oxc-parser/binding-linux-x64-musl": + optional: true + "@oxc-parser/binding-openharmony-arm64": + optional: true + "@oxc-parser/binding-wasm32-wasi": + optional: true + "@oxc-parser/binding-win32-arm64-msvc": + optional: true + "@oxc-parser/binding-win32-ia32-msvc": + optional: true + "@oxc-parser/binding-win32-x64-msvc": + optional: true + checksum: 10c0/9d109fb3a79c0862a36434cc01c8c0e8f6cf5f1efe9369e02d2183fd518479b10262cf092da2e7f8328befae446afa05ccf742ce12f8346d81429c8f2cdf1651 + languageName: node + linkType: hard + "oxc-parser@npm:^0.128.0": version: 0.128.0 resolution: "oxc-parser@npm:0.128.0" @@ -10904,6 +11600,17 @@ __metadata: languageName: node linkType: hard +"oxc-walker@npm:^0.7.0": + version: 0.7.0 + resolution: "oxc-walker@npm:0.7.0" + dependencies: + magic-regexp: "npm:^0.10.0" + peerDependencies: + oxc-parser: ">=0.98.0" + checksum: 10c0/4238233aaec526a1937b5d173202fbeaa22ff3047fcb5734516d595cf415b0d2b78f9e042aa090d6579574a654224d1d31c2fe6d31ff086c1dd525bbfa9cb354 + languageName: node + linkType: hard + "oxfmt@npm:^0.47.0": version: 0.47.0 resolution: "oxfmt@npm:0.47.0" @@ -11157,7 +11864,7 @@ __metadata: languageName: node linkType: hard -"pathe@npm:^2.0.3": +"pathe@npm:^2.0.1, pathe@npm:^2.0.3": version: 2.0.3 resolution: "pathe@npm:2.0.3" checksum: 10c0/c118dc5a8b5c4166011b2b70608762e260085180bb9e33e80a50dcdb1e78c010b1624f4280c492c92b05fc276715a4c357d1f9edc570f8f1b3d90b6839ebaca1 @@ -11352,6 +12059,17 @@ __metadata: languageName: node linkType: hard +"pkg-types@npm:^1.3.1": + version: 1.3.1 + resolution: "pkg-types@npm:1.3.1" + dependencies: + confbox: "npm:^0.1.8" + mlly: "npm:^1.7.4" + pathe: "npm:^2.0.1" + checksum: 10c0/19e6cb8b66dcc66c89f2344aecfa47f2431c988cfa3366bdfdcfb1dd6695f87dcce37fbd90fe9d1605e2f4440b77f391e83c23255347c35cf84e7fd774d7fcea + languageName: node + linkType: hard + "playwright-core@npm:1.59.1": version: 1.59.1 resolution: "playwright-core@npm:1.59.1" @@ -12068,6 +12786,13 @@ __metadata: languageName: node linkType: hard +"radix3@npm:^1.1.2": + version: 1.1.2 + resolution: "radix3@npm:1.1.2" + checksum: 10c0/d4a295547f71af079868d2c2ed3814a9296ee026c5488212d58c106e6b4797c6eaec1259b46c9728913622f2240c9a944bfc8e2b3b5f6e4a5045338b1609f1e4 + languageName: node + linkType: hard + "range-parser@npm:^1.2.1": version: 1.2.1 resolution: "range-parser@npm:1.2.1" @@ -12150,27 +12875,6 @@ __metadata: languageName: node linkType: hard -"react-fast-compare@npm:^3.1.1": - version: 3.2.2 - resolution: "react-fast-compare@npm:3.2.2" - checksum: 10c0/0bbd2f3eb41ab2ff7380daaa55105db698d965c396df73e6874831dbafec8c4b5b08ba36ff09df01526caa3c61595247e3269558c284e37646241cba2b90a367 - languageName: node - linkType: hard - -"react-helmet@npm:^6.1.0": - version: 6.1.0 - resolution: "react-helmet@npm:6.1.0" - dependencies: - object-assign: "npm:^4.1.1" - prop-types: "npm:^15.7.2" - react-fast-compare: "npm:^3.1.1" - react-side-effect: "npm:^2.1.0" - peerDependencies: - react: ">=16.3.0" - checksum: 10c0/1d2831d9c3b4f5c91f020076aeb6502437a4788077d0c438421e466eb9633d5dc2aacedf7b779a970b807d61cf87793c5ff76ee3190a185d71c90b5cfb367e96 - languageName: node - linkType: hard - "react-immutable-proptypes@npm:^2.2.0": version: 2.2.0 resolution: "react-immutable-proptypes@npm:2.2.0" @@ -12356,15 +13060,6 @@ __metadata: languageName: node linkType: hard -"react-side-effect@npm:^2.1.0": - version: 2.1.2 - resolution: "react-side-effect@npm:2.1.2" - peerDependencies: - react: ^16.3.0 || ^17.0.0 || ^18.0.0 - checksum: 10c0/5d934cae438f701ce646f566750ae6a445e99185ce1a026108f9db728147f7962a22ecf8db79ff26089953a3799b3607766904f4f10194ce42bcd5a1aa0215e8 - languageName: node - linkType: hard - "react-sparklines@npm:^1.7.0": version: 1.7.0 resolution: "react-sparklines@npm:1.7.0" @@ -12567,6 +13262,15 @@ __metadata: languageName: node linkType: hard +"regexp-tree@npm:^0.1.27": + version: 0.1.27 + resolution: "regexp-tree@npm:0.1.27" + bin: + regexp-tree: bin/regexp-tree + checksum: 10c0/f636f44b4a0d93d7d6926585ecd81f63e4ce2ac895bc417b2ead0874cd36b337dcc3d0fedc63f69bf5aaeaa4340f36ca7e750c9687cceaf8087374e5284e843c + languageName: node + linkType: hard + "regexp.prototype.flags@npm:^1.5.3, regexp.prototype.flags@npm:^1.5.4": version: 1.5.4 resolution: "regexp.prototype.flags@npm:1.5.4" @@ -13817,6 +14521,13 @@ __metadata: languageName: node linkType: hard +"structured-clone-es@npm:^2.0.0": + version: 2.0.0 + resolution: "structured-clone-es@npm:2.0.0" + checksum: 10c0/3fc4ce67a44300170de29af115752a18799def1fdd83cfb9c133b0c963102b8949b06f4e35e8bde3e3de2e02ebbb7730849f75bc6c3d411c22d91c17015affa9 + languageName: node + linkType: hard + "stylelint-config-recommended-scss@npm:^17.0.0": version: 17.0.0 resolution: "stylelint-config-recommended-scss@npm:17.0.0" @@ -14406,6 +15117,13 @@ __metadata: languageName: node linkType: hard +"type-level-regexp@npm:~0.1.17": + version: 0.1.17 + resolution: "type-level-regexp@npm:0.1.17" + checksum: 10c0/54798f83464cb5ce04246c9c4739ec471c526aaa7690679fddbce05b689b99403de709f3fcb494555d4276b46c606435a95855e52535602f63378ab8b38010d5 + languageName: node + linkType: hard + "typed-array-buffer@npm:^1.0.3": version: 1.0.3 resolution: "typed-array-buffer@npm:1.0.3" @@ -14543,6 +15261,13 @@ __metadata: languageName: node linkType: hard +"ufo@npm:^1.5.4, ufo@npm:^1.6.3": + version: 1.6.4 + resolution: "ufo@npm:1.6.4" + checksum: 10c0/3a2b29e7e3d772fbf6893d7d23bf442981457adb2fe122828abdbda89bedcb81aafd0dcc080e41b45f9a877db00cb42cbfee9639753a19d9b9bd39b5627039cf + languageName: node + linkType: hard + "unbox-primitive@npm:^1.1.0": version: 1.1.0 resolution: "unbox-primitive@npm:1.1.0" @@ -14569,6 +15294,13 @@ __metadata: languageName: node linkType: hard +"uncrypto@npm:^0.1.3": + version: 0.1.3 + resolution: "uncrypto@npm:0.1.3" + checksum: 10c0/74a29afefd76d5b77bedc983559ceb33f5bbc8dada84ff33755d1e3355da55a4e03a10e7ce717918c436b4dfafde1782e799ebaf2aadd775612b49f7b5b2998e + languageName: node + linkType: hard + "undici-types@npm:~7.16.0": version: 7.16.0 resolution: "undici-types@npm:7.16.0" @@ -14583,6 +15315,21 @@ __metadata: languageName: node linkType: hard +"unhead@npm:3.1.0": + version: 3.1.0 + resolution: "unhead@npm:3.1.0" + dependencies: + hookable: "npm:^6.1.1" + unplugin: "npm:^3.0.0" + peerDependencies: + vite: ">=6.4.2" + peerDependenciesMeta: + vite: + optional: true + checksum: 10c0/967ab3ee8729398a92d69c372d8815b7a76d55d92fe9b5f628cf88e29b75df061d9eae1f787d14fefb7efab0595492c2fa30f3d89154f17c26297513c9f7f46b + languageName: node + linkType: hard + "unicode-canonical-property-names-ecmascript@npm:^2.0.0": version: 2.0.1 resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.1" @@ -14662,6 +15409,18 @@ __metadata: languageName: node linkType: hard +"unplugin@npm:^2.0.0": + version: 2.3.11 + resolution: "unplugin@npm:2.3.11" + dependencies: + "@jridgewell/remapping": "npm:^2.3.5" + acorn: "npm:^8.15.0" + picomatch: "npm:^4.0.3" + webpack-virtual-modules: "npm:^0.6.2" + checksum: 10c0/273c1eab0eca4470c7317428689295c31dbe8ab0b306504de9f03cd20c156debb4131bef24b27ac615862958c5dd950a3951d26c0723ea774652ab3624149cff + languageName: node + linkType: hard + "unplugin@npm:^2.3.5": version: 2.3.10 resolution: "unplugin@npm:2.3.10" @@ -14868,6 +15627,18 @@ __metadata: languageName: node linkType: hard +"valibot@npm:^1.3.1": + version: 1.3.1 + resolution: "valibot@npm:1.3.1" + peerDependencies: + typescript: ">=5" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/e20a4097fa726f57530da1e64558af47ddd2303129c77978fe93c522c66cf4c79540ea3af864523589283ea25e347c3d65b8044fa4913376208dde576b9f6382 + languageName: node + linkType: hard + "value-equal@npm:^1.0.1": version: 1.0.1 resolution: "value-equal@npm:1.0.1" @@ -15503,7 +16274,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:^8.12.1, ws@npm:^8.18.0, ws@npm:^8.19.0": +"ws@npm:^8.12.1, ws@npm:^8.18.0, ws@npm:^8.19.0, ws@npm:^8.20.0": version: 8.20.0 resolution: "ws@npm:8.20.0" peerDependencies: From 92c9fda9e615cb3f6aa941fdce58e6b159180e97 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 7 May 2026 11:26:43 +0200 Subject: [PATCH 039/132] New Crowdin Translations (automated) (#38930) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/el.json | 12 ++-- app/javascript/mastodon/locales/fr-CA.json | 4 +- app/javascript/mastodon/locales/fr.json | 6 +- app/javascript/mastodon/locales/ga.json | 4 ++ app/javascript/mastodon/locales/hu.json | 2 + app/javascript/mastodon/locales/kab.json | 23 ++++++++ app/javascript/mastodon/locales/nn.json | 11 ++++ app/javascript/mastodon/locales/sq.json | 4 ++ config/locales/da.yml | 2 + config/locales/de.yml | 21 +++++++ config/locales/el.yml | 2 + config/locales/es-AR.yml | 2 + config/locales/es-MX.yml | 40 ++++++------- config/locales/es.yml | 2 + config/locales/et.yml | 14 +++++ config/locales/ga.yml | 66 ++++++++++++++++++++++ config/locales/gl.yml | 4 ++ config/locales/hu.yml | 2 + config/locales/is.yml | 2 + config/locales/it.yml | 2 + config/locales/kab.yml | 1 + config/locales/simple_form.de.yml | 5 ++ config/locales/simple_form.el.yml | 2 +- config/locales/simple_form.es-MX.yml | 6 +- config/locales/simple_form.et.yml | 5 ++ config/locales/simple_form.ga.yml | 5 ++ config/locales/simple_form.gl.yml | 5 ++ config/locales/simple_form.sq.yml | 4 ++ config/locales/sq.yml | 22 ++++++++ config/locales/sv.yml | 2 + config/locales/vi.yml | 2 + config/locales/zh-CN.yml | 2 + config/locales/zh-TW.yml | 2 + 33 files changed, 254 insertions(+), 34 deletions(-) diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index c0ce1821c0be7e..63e215c81c8558 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -136,10 +136,10 @@ "account.share": "Κοινοποίηση του προφίλ @{name}", "account.show_reblogs": "Εμφάνιση ενισχύσεων από @{name}", "account.statuses_counter": "{count, plural, one {{counter} ανάρτηση} other {{counter} αναρτήσεις}}", - "account.timeline.pinned": "Καρφιτσωμένα", + "account.timeline.pinned": "Καρφιτσωμένη", "account.timeline.pinned.view_all": "Προβολή όλων των καρφιτσωμένων αναρτήσεων", "account.unblock": "Άρση αποκλεισμού @{name}", - "account.unblock_domain": "Άρση αποκλεισμού του τομέα {domain}", + "account.unblock_domain": "Άρση αποκλεισμού τομέα {domain}", "account.unblock_domain_short": "Άρση αποκλ.", "account.unblock_short": "Άρση αποκλεισμού", "account.unendorse": "Να μην αναδεικνύεται στο προφίλ", @@ -162,7 +162,7 @@ "account_edit.custom_fields.edit_label": "Επεξεργασία πεδίου", "account_edit.custom_fields.placeholder": "Προσθέστε τις αντωνυμίες σας, εξωτερικούς συνδέσμους ή οτιδήποτε άλλο θέλετε να μοιραστείτε.", "account_edit.custom_fields.reorder_button": "Αναδιάταξη πεδίων", - "account_edit.custom_fields.tip_content": "Μπορείς εύκολα να προσθέσεις αξιοπιστία στον Mastodon λογαριασμό σου επαληθεύοντας συνδέσμους σε οποιεσδήποτε ιστοσελίδες κατέχεις.", + "account_edit.custom_fields.tip_content": "Μπορείς εύκολα να προσθέσεις αξιοπιστία στον Mastodon λογαριασμό σου επαληθεύοντας συνδέσμους προς οποιεσδήποτε ιστοσελίδες κατέχεις.", "account_edit.custom_fields.tip_title": "Συμβουλή: Προσθήκη επαληθευμένων συνδέσμων", "account_edit.custom_fields.title": "Προσαρμοσμένα πεδία", "account_edit.custom_fields.verified_hint": "Πώς προσθέτω έναν επαληθευμένο σύνδεσμο;", @@ -241,7 +241,7 @@ "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": "Πρόσθεσε αξιοπιστία στο Mastodon προφίλ σας επαληθεύοντας συνδέσμους σε προσωπικές ιστοσελίδες. Ορίστε πως δουλεύει:", + "account_edit.verified_modal.details": "Πρόσθεσε αξιοπιστία στο Mastodon προφίλ σου επαληθεύοντας συνδέσμους προς προσωπικές ιστοσελίδες. Ορίστε πως δουλεύει:", "account_edit.verified_modal.invisible_link.details": "Πρόσθεσε τον σύνδεσμο στην κεφαλίδα σου. Το σημαντικό μέρος είναι το rel=\"me\" που αποτρέπει την μίμηση σε ιστοσελίδες με περιεχόμενο παραγόμενο από χρήστες. Μπορείς ακόμα να χρησιμοποιήσεις μια ετικέτα link στην κεφαλίδα της σελίδας αντί για {tag}, αλλά η HTML πρέπει να είναι προσβάσιμη χωρίς την εκτέλεση JavaScript.", "account_edit.verified_modal.invisible_link.summary": "Πώς κάνω αυτόν τον σύνδεσμο αόρατο;", "account_edit.verified_modal.step1.header": "Αντίγραψε τον παρακάτω κώδικα HTML και επικόλλησε τον στην κεφαλίδα της ιστοσελίδας σου", @@ -250,7 +250,7 @@ "account_edit.verified_modal.title": "Πώς να προσθέσεις έναν επαληθευμένο σύνδεσμο", "account_edit_tags.add_tag": "Προσθήκη #{tagName}", "account_edit_tags.column_title": "Επεξεργασία Ετικετών", - "account_edit_tags.help_text": "Οι αναδεδειγμένες ετικέτες βοηθούν τους χρήστες να ανακαλύψουν και να αλληλεπιδράσουν με το προφίλ σας. Εμφανίζονται ως φίλτρα στην προβολή Δραστηριότητας της σελίδας προφίλ σας.", + "account_edit_tags.help_text": "Οι αναδεδειγμένες ετικέτες βοηθούν τους χρήστες να ανακαλύψουν και να αλληλεπιδράσουν με το προφίλ σας. Εμφανίζονται ως φίλτρα στην καρτέλα Δραστηριότητα της σελίδας προφίλ σας.", "account_edit_tags.max_tags_reached": "Έχετε φτάσει τον μέγιστο αριθμό των προτεινόμενων ετικετών.", "account_edit_tags.search_placeholder": "Εισάγετε μια ετικέτα…", "account_edit_tags.suggestions": "Προτάσεις:", @@ -866,7 +866,7 @@ "lists.done": "Έγινε", "lists.edit": "Επεξεργασία λίστας", "lists.exclusive": "Απόκρυψη μελών από την Αρχική", - "lists.exclusive_hint": "Αν κάποιος είναι σε αυτή τη λίστα, απόκρυψέ τον από την Αρχική σου για να αποφύγεις να βλέπεις τις αναρτήσεις του δύο φορές.", + "lists.exclusive_hint": "Αν κάποιος είναι σε αυτή τη λίστα, απόκρυψέ τον από την Αρχική ροή σου για να αποφύγεις να βλέπεις τις αναρτήσεις του δύο φορές.", "lists.find_users_to_add": "Εύρεση χρηστών για προσθήκη", "lists.list_members_count": "{count, plural, one {# μέλος} other {# μέλη}}", "lists.list_name": "Όνομα λίστας", diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json index d99a25c6bed0d6..ae3b58d7375e5d 100644 --- a/app/javascript/mastodon/locales/fr-CA.json +++ b/app/javascript/mastodon/locales/fr-CA.json @@ -1043,9 +1043,9 @@ "notifications.policy.filter_not_followers_title": "Personnes qui ne vous suivent pas", "notifications.policy.filter_not_following_hint": "Jusqu'à ce que vous les validiez manuellement", "notifications.policy.filter_not_following_title": "Personnes que vous ne suivez pas", - "notifications.policy.filter_private_mentions_hint": "Filtrées sauf si c'est en réponse à l'une de vos mentions ou si vous suivez l'expéditeur·ice", + "notifications.policy.filter_private_mentions_hint": "Filtrées sauf si c'est en réponse à l'une de vos mentions ou si vous suivez la personne", "notifications.policy.filter_private_mentions_title": "Mentions privées non sollicitées", - "notifications.policy.title": "Gestion des notifications des …", + "notifications.policy.title": "Gestion des notifications des…", "notifications_permission_banner.enable": "Activer les notifications de bureau", "notifications_permission_banner.how_to_control": "Pour recevoir des notifications lorsque Mastodon n’est pas ouvert, activez les notifications de bureau. Vous pouvez contrôler précisément quels types d’interactions génèrent des notifications de bureau via le bouton {icon} ci-dessus une fois qu’elles sont activées.", "notifications_permission_banner.title": "Ne rien rater", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index c76754c1e5473e..678c0f5906f7df 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -1027,7 +1027,7 @@ "notifications.group": "{count} notifications", "notifications.mark_as_read": "Marquer toutes les notifications comme lues", "notifications.permission_denied": "Impossible d’activer les notifications de bureau car l’autorisation a été refusée.", - "notifications.permission_denied_alert": "Les notifications de bureau ne peuvent pas être activées, car l’autorisation du navigateur a été refusée avant", + "notifications.permission_denied_alert": "Les notifications de bureau ne peuvent pas être activées, car l’autorisation du navigateur a été refusée auparavant", "notifications.permission_required": "Les notifications de bureau ne sont pas disponibles car l’autorisation requise n’a pas été accordée.", "notifications.policy.accept": "Accepter", "notifications.policy.accept_hint": "Afficher dans les notifications", @@ -1043,9 +1043,9 @@ "notifications.policy.filter_not_followers_title": "Personnes qui ne vous suivent pas", "notifications.policy.filter_not_following_hint": "Jusqu'à ce que vous les validiez manuellement", "notifications.policy.filter_not_following_title": "Personnes que vous ne suivez pas", - "notifications.policy.filter_private_mentions_hint": "Filtrées sauf si c'est en réponse à l'une de vos mentions ou si vous suivez l'expéditeur·ice", + "notifications.policy.filter_private_mentions_hint": "Filtrées sauf si c'est en réponse à l'une de vos mentions ou si vous suivez la personne", "notifications.policy.filter_private_mentions_title": "Mentions privées non sollicitées", - "notifications.policy.title": "Gestion des notifications des …", + "notifications.policy.title": "Gestion des notifications des…", "notifications_permission_banner.enable": "Activer les notifications de bureau", "notifications_permission_banner.how_to_control": "Pour recevoir des notifications lorsque Mastodon n’est pas ouvert, activez les notifications du bureau. Vous pouvez contrôler précisément quels types d’interactions génèrent des notifications de bureau via le bouton {icon} ci-dessus une fois qu’elles sont activées.", "notifications_permission_banner.title": "Toujours au courant", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 96da1b8d85613b..41fdb1ec397bde 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -328,11 +328,15 @@ "annual_report.summary.share_on_mastodon": "Comhroinn ar Mastodon", "attachments_list.unprocessed": "(neamhphróiseáilte)", "audio.hide": "Cuir fuaim i bhfolach", + "block_modal.no_collections": "Ní féidir le ceachtar agaibh a chéile a chur le bailiúcháin. Bainfear sibh go huathoibríoch ó bhailiúcháin atá agaibh cheana féin, más infheidhme.", "block_modal.remote_users_caveat": "Iarrfaimid ar an bhfreastalaí {domain} meas a bheith agat ar do chinneadh. Mar sin féin, ní ráthaítear comhlíonadh toisc go bhféadfadh roinnt freastalaithe bloic a láimhseáil ar bhealach difriúil. Seans go mbeidh postálacha poiblí fós le feiceáil ag úsáideoirí nach bhfuil logáilte isteach.", "block_modal.show_less": "Taispeáin níos lú", "block_modal.show_more": "Taispeáin níos mó", + "block_modal.they_cant_mention": "Ní féidir libh a chéile a lua, a leanúint ná a chéile a lua.", + "block_modal.they_cant_see_posts": "Ní féidir leo d’ábhar a fheiceáil agus ní fheicfidh tú a gcuid ábhair.", "block_modal.they_will_know": "Is féidir leo a fheiceáil go bhfuil bac orthu.", "block_modal.title": "Úsáideoir a bhlocáil?", + "block_modal.you_wont_see_mentions": "Ní fheicfidh tú poist ó dhaoine eile a luann iad.", "boost_modal.combo": "Is féidir leat {combo} a bhrú chun é seo a scipeáil an chéad uair eile", "boost_modal.reblog": "An post a threisiú?", "boost_modal.undo_reblog": "An deireadh a chur le postáil?", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 291829bfa9112f..dffd687febad74 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -224,6 +224,7 @@ "account_edit.profile_tab.show_media.title": "„Média” lap megjelenítése", "account_edit.profile_tab.show_media_replies.description": "Ha engedélyezve van, akkor a Média lap megjeleníti a bejegyzéseidet és a mások bejegyzéseihez írt válaszaidat.", "account_edit.profile_tab.show_media_replies.title": "Válaszok megjelenítése a „Média” lapon", + "account_edit.profile_tab.show_relations.description": "A profilodban megjeleníti azokat a fiókokat, melyeket követsz, valamint a többi felhasználó követőit. Mások továbbra is látni fogják, hogy követed-e őket.", "account_edit.profile_tab.show_relations.title": "„Követők” és „Követettek” megjelenítése", "account_edit.profile_tab.subtitle": "A profil megjelenítésének testreszabása.", "account_edit.profile_tab.title": "Profil megjelenítési beállításai", @@ -327,6 +328,7 @@ "annual_report.summary.share_on_mastodon": "Megosztás a Mastodonon", "attachments_list.unprocessed": "(feldolgozatlan)", "audio.hide": "Hang elrejtése", + "block_modal.no_collections": "Egyikőtök sem adhatja hozzá a másikat gyűjteményekhez. Automatikusan el is lesztek távolítva az egymás gyűjteményéből.", "block_modal.remote_users_caveat": "Arra kérjük a {domain} kiszolgálót, hogy tartsa tiszteletben a döntésedet. Ugyanakkor az együttműködés nem garantált, mivel néhány kiszolgáló másképp kezelheti a letiltásokat. A nyilvános bejegyzések a be nem jelentkezett felhasználók számára továbbra is látszódhatnak.", "block_modal.show_less": "Kevesebb mutatása", "block_modal.show_more": "Több mutatása", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index 080e2d181395b1..37ddb9d07bb6e3 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -36,6 +36,7 @@ "account.familiar_followers_many": "Yeṭṭafaṛ-it {name1} d {name2}, akked {othersCount, plural, one {yiwen nniḍen i tessneḍ} other {# nniḍen i tessneḍ}}", "account.familiar_followers_one": "Yeṭṭafar-it {name1}", "account.familiar_followers_two": "Yeṭṭafar-it {name1} akked {name2}", + "account.featured": "Ufrinen", "account.featured.accounts": "Imeɣna", "account.featured.collections": "Tilkensa", "account.featured.new_collection": "Talkensit tamaynut", @@ -68,6 +69,8 @@ "account.join_modal.me_today": "Ass-a, d ass-ik⋅im amezwaru deg {server}!", "account.join_modal.other": "{name} yerna-d ɣer {server} ass n", "account.join_modal.other_today": "D ass amezwaru n {name} ɣef {server}!", + "account.join_modal.share.intro": "Bḍu izen anida deg-s ad temmeslayeḍ fell-ak⋅am", + "account.join_modal.years": "{number, plural, one {n useggas} other {n iseggasen}}", "account.joined_short": "Izeddi da seg ass n", "account.languages": "Beddel tutlayin yettwajerden", "account.last_active": "Armud aneggaru", @@ -87,6 +90,7 @@ "account.menu.remove_follower": "Kkes aneḍfar", "account.menu.report": "Cetki ɣef umiḍan-a", "account.menu.share": "Zuzer…", + "account.menu.unblock": "Kkes asewḥel i umiḍan", "account.moved_to": "{name} yenna-d dakken amiḍan-is amaynut yuɣal :", "account.mute": "Sgugem @{name}", "account.mute_notifications_short": "Susem ilɣa", @@ -141,6 +145,7 @@ "account_edit.display_name.edit_label": "Ẓreg isem ara d-yettwaskanen", "account_edit.display_name.title": "Isem ara d-yettwaskanen", "account_edit.featured_hashtags.edit_label": "Rnu ihacṭagen", + "account_edit.featured_hashtags.title": "Ihacṭagen ufrinen", "account_edit.field_actions.delete": "Kkes urti", "account_edit.field_actions.edit": "Ẓreg urti", "account_edit.field_delete_modal.delete_button": "Kkes", @@ -167,6 +172,7 @@ "account_edit.name_modal.add_title": "Rnu isem ara d-yettwaskanen", "account_edit.name_modal.edit_title": "Ẓreg isem ara d-yettwaskanen", "account_edit.profile_tab.button_label": "Sagen", + "account_edit.profile_tab.show_featured.title": "Sken-d accer n \"Ufrinen\"", "account_edit.save": "Sekles", "account_edit.upload_modal.back": "Uɣal", "account_edit.upload_modal.done": "Dayen", @@ -179,12 +185,16 @@ "account_edit.upload_modal.title_add.header": "Rnu tawlaft n tduli", "account_edit.upload_modal.title_replace.avatar": "Semselsi tawlaft n umaɣnu", "account_edit.upload_modal.title_replace.header": "Semselsi tawlaft n tduli", + "account_edit.verified_modal.invisible_link.summary": "Amek ara rreɣ aseɣwen-nni ur yettban ara?", + "account_edit.verified_modal.title": "Amek ara ternuḍ aseɣwen yettuselknen", "account_edit_tags.add_tag": "Rnu #{tagName}", "account_edit_tags.column_title": "Asiẓreg n yihacṭagen", "account_edit_tags.search_placeholder": "Sekcem-d ahacṭag…", "account_edit_tags.suggestions": "Isumren:", "account_edit_tags.tag_status_count": "{count, plural, one {# n yizen} other {# n yiznan}}", + "account_list.total": "{total, plural, one {# n umiḍan} other {# n imiḍanen}}", "account_note.placeholder": "Ulac iwenniten", + "admin.dashboard.retention.cohort": "Ajerred deg ayyur", "admin.dashboard.retention.cohort_size": "Iseqdacen imaynuten", "alert.rate_limited.message": "Ma ulac aɣilif ɛreḍ tikelt-nniḍen akka {retry_time, time, medium}.", "alert.rate_limited.title": "Aktum s talast", @@ -223,6 +233,7 @@ "block_modal.title": "Sewḥel aseqdac ?", "boost_modal.combo": "Tzemreḍ ad tsiteḍ ɣef {combo} akken ad tzegleḍ aya tikelt i d-iteddun", "boost_modal.reblog": "Zuzer tasuffeɣt?", + "boost_modal.undo_reblog": "Semmet azuzer n yizen-a?", "bundle_column_error.copy_stacktrace": "Nɣel tuccḍa n uneqqis", "bundle_column_error.error.title": "Uh, ala !", "bundle_column_error.network.body": "Teḍra-d tuccḍa deg usali n usebter-a. Aya yezmer ad yili d ugur akudan deg tuqqna-inek·inem ɣer internet neɣ deg uqeddac-a.", @@ -234,6 +245,7 @@ "bundle_modal_error.close": "Mdel", "bundle_modal_error.retry": "Ɛreḍ tikelt-nniḍen", "callout.dismiss": "Zgel-it", + "character_counter.required": "{currentLength}/{maxLength} n yisekkilen", "closed_registrations_modal.description": "Asnulfu n umiḍan deg {domain} mačči d ayen izemren ad yili, maca ttxil-k·m, err deg lbal-ik·im belli ur teḥwaǧeḍ ara amiḍan s wudem ibanen ɣef {domain} akken ad tesqedceḍ Mastodon.", "closed_registrations_modal.find_another_server": "Aff-d aqeddac nniḍen", "closed_registrations_modal.title": "Ajerred deg Masṭudun", @@ -243,6 +255,8 @@ "collection.share_modal.title": "Bḍu talkensit", "collection.share_modal.title_new": "Zuzer talkensit-ik·im tamaynut!", "collections.account_count": "{count, plural, one {# n umiḍan} other {# n imiḍanen}}", + "collections.accounts.empty_description": "Rnu alamma d {count} n imiḍanen", + "collections.accounts.empty_editor_title": "Ulac ula yiwen ɛad deg telkensit-a", "collections.accounts.empty_title": "Talkensit-a d tilemt", "collections.block_collection_owner": "Sewḥel amiḍan", "collections.by_account": "sɣur {account_handle}", @@ -262,12 +276,14 @@ "collections.detail.revoke_inclusion": "Kkes-iyi", "collections.detail.sensitive_content": "Agbur amḥulfu", "collections.detail.share": "Zuzer talkensit-a", + "collections.detail.you_are_in_this_collection": "Aql-ik⋅em ɣer sdat deg telsenkit-a", "collections.edit_details": "Ẓreg talqayt", "collections.hidden_accounts_link": "{count, plural, one {# n umiḍan uffir} other {# n imiḍanen yettwaffaren}}", "collections.hints.accounts_counter": "{count}/{max} n imiḍanen", "collections.last_updated_at": "Taẓrigt taneggarut: {date}", "collections.list.created_by_author": "D-yesnulfa {name}", "collections.list.created_by_you": "D-tesnulfaḍ", + "collections.list.featuring_you": "Yid-k⋅m", "collections.manage_accounts": "Sefrek imiḍanen", "collections.name_length_hint": "talast n 40 n yisekkilen", "collections.new_collection": "Talkensit tamaynut", @@ -276,6 +292,7 @@ "collections.revoke_collection_inclusion": "Kkes-iyi seg telkensit-a", "collections.search_accounts_label": "Nadi ɣef umiḍan ara ternuḍ", "collections.share_short": "Bḍu", + "collections.suggestions.can_not_add": "Ur tezmireḍ ara ad t-ternuḍt", "collections.view_collection": "Wali talkensit", "collections.visibility_public": "Azayaz", "collections.visibility_title": "Abani", @@ -290,6 +307,7 @@ "column.edit_list": "Ẓreg tabdart", "column.favourites": "Imenyafen", "column.firehose": "Isuddam usriden", + "column.firehose_singular": "Asuddem usrid", "column.follow_requests": "Isuturen n teḍfeṛt", "column.home": "Agejdan", "column.list_members": "Sefrek iεeggalen n tebdart", @@ -299,6 +317,7 @@ "column.other_collections": "Tilkensa sɣur {name}", "column.pins": "Tisuffaɣ yettwasenṭḍen", "column.public": "Tasuddemt tamatut", + "column.your_collections": "Tilkensa-k·m", "column_back_button.label": "Tuɣalin", "column_header.hide_settings": "Ffer iɣewwaṛen", "column_header.moveLeft_settings": "Err ajgu ɣer tama tazelmaḍt", @@ -355,6 +374,7 @@ "confirmations.follow_to_list.confirm": "Ḍfeṛ-it sakin rnu-t ɣer tebdart", "confirmations.follow_to_list.title": "Ḍfer aseqdac?", "confirmations.hide_featured_tab.confirm": "Ffer accer", + "confirmations.hide_featured_tab.title": "Ffer accer n \"Ufrinen\"?", "confirmations.logout.confirm": "Ffeɣ", "confirmations.logout.message": "D tidet tebɣiḍ ad teffɣeḍ?", "confirmations.logout.title": "Tebɣiḍ ad teffɣeḍ ssya?", @@ -432,11 +452,13 @@ "emoji_button.symbols": "Izamulen", "emoji_button.travel": "Imeḍqan d Yinigen", "empty_column.account_featured_self.no_collections_button": "Snulfu-d talkensit", + "empty_column.account_featured_self.no_collections_hide_tab": "Ɣumm accer-a", "empty_column.account_suspended": "Amiḍan yettwaḥbas", "empty_column.account_timeline": "Ulac tisuffaɣ da !", "empty_column.account_unavailable": "Ur nufi ara amaɣnu-ayi", "empty_column.blocks": "Ur tesḥebseḍ ula yiwen n umseqdac ar tura.", "empty_column.bookmarked_statuses": "Ulac kra n tsuffeɣt i terniḍ ɣer yismenyifen-ik·im ar tura. Ticki terniḍ yiwet, ad d-tettwasken da.", + "empty_column.collections.featured_in": "Ur-k yerni ḥedd ɛad ɣer kra n telkensit.", "empty_column.community": "Tasuddemt tazayezt tadigant n yisallen d tilemt. Aru ihi kra akken ad tt-teččareḍ!", "empty_column.domain_blocks": "Ulac kra n taɣult yettwaffren ar tura.", "empty_column.explore_statuses": "Ulac ayen yellan d anezzuɣ akka tura. Uɣal-d ticki!", @@ -458,6 +480,7 @@ "explore.trending_tags": "Ihacṭagen", "featured_carousel.current": "Izen wis {current, number} / {max, number}", "featured_carousel.header": "{count, plural, one {n tsuffeɣt tunṭiḍt} other {n tsuffaɣ tunṭiḍin}}", + "featured_carousel.slide": "Iznen {current, number} ɣef {max, number}", "featured_tags.more_items": "+{count}", "featured_tags.suggestions.add": "Rnu", "featured_tags.suggestions.dismiss": "Uhu, tanemmirt", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 5067e505a4b494..9daf7c29c9d09a 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -43,6 +43,7 @@ "account.featured": "Utvald", "account.featured.accounts": "Profilar", "account.featured.collections": "Samlingar", + "account.featured.new_collection": "Ny samling", "account.field_overflow": "Vis heile innhaldet", "account.filters.all": "All aktivitet", "account.filters.boosts_toggle": "Vis framhevingar", @@ -68,6 +69,16 @@ "account.go_to_profile": "Gå til profil", "account.hide_reblogs": "Gøym framhevingar frå @{name}", "account.in_memoriam": "Til minne om.", + "account.join_modal.day": "Dag", + "account.join_modal.me": "Du vart medlem av {server} den", + "account.join_modal.me_anniversary": "God allheimsbursdag! Du vart medlem av {server} den", + "account.join_modal.me_today": "Det er fyrste dagen din på {server}!", + "account.join_modal.other": "{name} vart medlem av {server} den", + "account.join_modal.other_today": "{name} har sin fyrste dag på {server}!", + "account.join_modal.share.celebrate": "Skriv eit jubileumsinnlegg", + "account.join_modal.share.intro": "Skriv eit introduksjonsinnlegg", + "account.join_modal.share.welcome": "Skriv eit velkomstinnlegg", + "account.join_modal.years": "{number, plural, one {år} other {år}}", "account.joined_short": "Vart med", "account.languages": "Endre språktingingar", "account.last_active": "Sist aktiv", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index cc993ce578e9e6..4c952ba57d017a 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -324,11 +324,15 @@ "annual_report.summary.share_on_mastodon": "Ndajeni në Mastodon me të tjerë", "attachments_list.unprocessed": "(e papërpunuar)", "audio.hide": "Fshihe audion", + "block_modal.no_collections": "Asnjë prej jush s’mund shtojë tjetrin te koleksione. Do të hiqeni automatikisht nga koleksionne ekzistuese të njëri-tjetrit, nëse ka vend.", "block_modal.remote_users_caveat": "Do t’i kërkojmë shërbyesit {domain} të respektojë vendimin tuaj. Por, pajtimi s’është i garantuar, ngaqë disa shërbyes mund t’i trajtojnë ndryshe bllokimet. Psotimet publike mundet të jenë ende të dukshme për përdorues pa bërë hyrje në llogari.", "block_modal.show_less": "Shfaq më pak", "block_modal.show_more": "Shfaq më tepër", + "block_modal.they_cant_mention": "S’mund të përmendni, ndiqni, ose citoni njëri-tjetrin.", + "block_modal.they_cant_see_posts": "S’mund të shohin lëndën tuaj dhe ju s’do të shihni të tyren.", "block_modal.they_will_know": "Mund të shohin se janë bllokuar.", "block_modal.title": "Të bllokohet përdoruesi?", + "block_modal.you_wont_see_mentions": "S’do të shihni postime nga të tjerë që i përmendin ata.", "boost_modal.combo": "Që kjo të anashkalohet herës tjetër, mund të shtypni {combo}", "boost_modal.reblog": "Përforcim postimi?", "boost_modal.undo_reblog": "Të hiqet përforcim për postimin?", diff --git a/config/locales/da.yml b/config/locales/da.yml index 1f8795c7fc698d..08697d48bde48d 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -484,8 +484,10 @@ da: title: Blokér nyt e-maildomæne no_email_domain_block_selected: Ingen e-maildomæneblokeringer ændret (ingen var valgt) not_permitted: Ikke tilladt + reset: Nulstil resolved_dns_records_hint_html: Domænenavnet opløses til flg. MX-domæner, som i sidste ende er ansvarlige for e-mailmodtagelse. Blokering af et MX-domæne blokerer også tilmeldinger fra enhver e-mailadresse på det pågældende MX-domæne, selv hvis det synlige domænenavn er et andet. Pas på ikke at blokere større e-mailudbydere. resolved_through_html: Opløst via %{domain} + search: Søg title: Blokerede e-maildomæner email_subscriptions: accounts: diff --git a/config/locales/de.yml b/config/locales/de.yml index 1521df439a2776..e6ebce926bdf17 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -484,8 +484,10 @@ de: title: Neue E-Mail-Domain sperren no_email_domain_block_selected: Es wurden keine E-Mail-Domain-Sperren geändert, da keine ausgewählt wurden not_permitted: Nicht erlaubt + reset: Zurücksetzen resolved_dns_records_hint_html: Die Domain wird zu den folgenden MX-Domains aufgelöst, die für die Annahme von E-Mails zuständig sind. Das Sperren einer MX-Domain sperrt Anmeldungen aller E-Mail-Adressen, die dieselbe MX-Domain verwenden, auch wenn die sichtbare Domain anders lautet. Achte daher darauf, keine großen E-Mail-Anbieter versehentlich zu sperren. resolved_through_html: Durch %{domain} aufgelöst + search: Suchen title: Gesperrte E-Mail-Domains email_subscriptions: accounts: @@ -495,26 +497,39 @@ de: 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 subscribers: Abonnent*innen title: Mailingliste + additional_footer_texts: + show: + title: Fußzeile compliance_settings: additional_footer_text: action: Verwalten + hint: Der Text erscheint ausschließlich in der Fußzeile von E-Mails + title: Fußzeile + lead: E-Mail-Newsletter können abhängig vom geltenden Recht als Marketing-E-Mails betrachtet werden. privacy_policy: action: Verwalten + hint: Die Datenschutzerklärung wird in der Fußzeile jeder E-Mail beigefügt title: Datenschutzerklärung + title: Einstellungen zur Einhaltung von Vorschriften danger_zone: disable_feature: action: Deaktivieren + hint: Funktion für alle Konten deaktivieren title: Funktion deaktivieren erase_all_data: action: Daten löschen + hint: Löscht dauerhaft alle E-Mails aus allen Mailinglisten title: Alle Daten löschen title: Gefahrenzone + disabled_msg: E-Mail-Abonnements wurden erfolgreich deaktiviert. index: disabled: + description: Diese Funktion ermöglicht bestimmten Konten, ein Widget zu ihrem Profil hinzuzufügen, damit Gäste ohne Mastodon-Konto deren Beiträge per E-Mail erhalten können. get_started: Loslegen lead: Ermögliche Gästen, Beiträge von ausgewählten Konten dieses Servers per E-Mail zu abonnieren. title: E-Mail-Newsletter @@ -533,6 +548,11 @@ de: show: enable_feature: Funktionen aktivieren important_information: Wichtige Informationen + list: + 1_permission_explanation: Wenn die Funktion aktiviert ist, können alle berechtigten Konten ein E-Mail-Formular zu ihrem Profil hinzufügen. + 2_feature_explanation: Sobald Gäste ein Profil abonnieren und das Abonnement bestätigen, werden sie E-Mails über neue öffentliche Beiträge des betreffenden Profils erhalten. + 3_privacy_policy_warning: Server-Admins werden Zugriff auf persönlich identifizierbare Informationen (E-Mail-Adressen) haben. Daher müssen die Datenschutzerklärung und Nutzungsbedingungen im Vorfeld aktualisiert werden, bevor diese Funktion verwendet werden kann. + 4_cost_warning: Abhängig vom Hosting-Provider können Gebühren für den E-Mail-Versand anfallen. Kläre für deinen Server vorher alle Details, da diese Funktion die Anzahl versendeter E-Mails drastisch erhöhen kann. export_domain_allows: new: title: Erlaubte Domains importieren @@ -838,6 +858,7 @@ de: manage_custom_emojis: Emojis manage_custom_emojis_description: Spezielle Emojis dieses Servers verwalten manage_email_subscriptions: E-Mail-Abonnements + manage_email_subscriptions_description: Konten mit dieser Berechtigung dürfen die Funktion für E-Mail-Newsletter verwenden manage_federation: Föderation manage_federation_description: Domains anderer Mastodon-Server sperren/zulassen – und Zustellbarkeit kontrollieren manage_invites: Einladungen diff --git a/config/locales/el.yml b/config/locales/el.yml index 3ed839cd0de89c..7a7bdb5496a3d4 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -484,8 +484,10 @@ el: title: Αποκλεισμός νέου τομέα email no_email_domain_block_selected: Δεν άλλαξαν οι αποκλεισμοί τομέα email καθώς δεν επιλέχθηκε κανένας not_permitted: Δεν επιτρέπεται + reset: Επαναφορά resolved_dns_records_hint_html: Το όνομα τομέα επιλύεται στους ακόλουθους τομείς MX, οι οποίοι είναι τελικά υπεύθυνοι για την αποδοχή των email. Αποκλείοντας έναν τομέα MX θα αποκλείει τις εγγραφές από οποιαδήποτε διεύθυνση email που χρησιμοποιεί τον ίδιο τομέα MX, ακόμη και αν το ορατό όνομα τομέα είναι διαφορετικό. Προσέξτε να μην αποκλείσετε τους μεγάλους παρόχους ηλεκτρονικού ταχυδρομείου. resolved_through_html: Επιλύθηκε μέσω %{domain} + search: Αναζήτηση title: Αποκλεισμένοι τομείς email email_subscriptions: accounts: diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index b4ed31057786ba..8ea041ed6d1855 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -484,8 +484,10 @@ es-AR: title: Bloquear nuevo dominio de correo electrónico no_email_domain_block_selected: No se cambiaron bloqueos de dominio de correo electrónico, ya que no se seleccionó ninguno not_permitted: No permitidos + reset: Restablecer resolved_dns_records_hint_html: El nombre de dominio resuelve los siguientes dominios MX, los cuales son responsables en última instancia de aceptar el correo electrónico. Bloquear un dominio MX bloqueará los registros de cualquier dirección de correo electrónico que utilice el mismo dominio MX, incluso si el nombre de dominio visible es diferente. Tené cuidado de no bloquear los principales proveedores de correo electrónico. resolved_through_html: Resuelto a través de %{domain} + search: Buscar title: Dominios bloqueados de correo electrónico email_subscriptions: accounts: diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index 8a3e953d3097ca..632bdca3e32a5f 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -484,8 +484,10 @@ es-MX: title: Bloquear nuevo dominio de correo no_email_domain_block_selected: No se han cambiado bloqueos de dominio de correo, ya que ninguno ha sido seleccionado not_permitted: No permitido + reset: Restablecer resolved_dns_records_hint_html: El nombre de dominio resuelve los siguientes dominios MX, los cuales son responsables en última instancia de aceptar el correo electrónico. Bloquear un dominio MX bloqueará los registros de cualquier dirección de correo electrónico que utilice el mismo dominio MX, incluso si el nombre de dominio visible es diferente. Ten cuidado de no bloquear los principales proveedores de correo electrónico. resolved_through_html: Resuelto a través de %{domain} + search: Buscar title: Dominios de correo bloqueados email_subscriptions: accounts: @@ -496,7 +498,7 @@ es-MX: no_lists_yet: No hay listas todavía 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. + lead: A continuación se mostrarán las cuentas que hayan activado la función y tengan suscriptores. status: Estado subscribers: Suscriptores title: Listas de correo @@ -506,33 +508,33 @@ es-MX: compliance_settings: additional_footer_text: action: Administrar - hint: Texto opcional que aparece únicamente en el pie de los correos electrónicos del boletín de noticias + hint: Texto opcional que aparece únicamente en el pie de página de los correos electrónicos del boletín informativo title: Texto de pie de página adicional - lead: Los boletines de correo electrónico pueden considerarse correos electrónicos de marketing, dependiendo de las jurisdicciones en las que operas. + lead: Los boletines informativos por correo electrónico pueden considerarse correos electrónicos de marketing, dependiendo de las jurisdicciones en las que operes. privacy_policy: action: Administrar - hint: Esta política está enlazada en el pie de cada correo electrónico + hint: Esta política aparece en el pie de página de cada correo electrónico title: Política de privacidad title: Ajustes de cumplimiento normativo danger_zone: disable_feature: action: Desactivar - hint: Desactivar función para todas las cuentas + hint: Desactivar la función para todas las cuentas title: Desactivar función erase_all_data: - action: Borrar datos - hint: Borra permanentemente todos los correos electrónicos de todas las listas de correo - title: Borrar todos los datos + action: Eliminar datos + hint: Elimina de forma permanente todos los correos electrónicos de todas las listas de correo + title: Eliminar todos los datos title: Zona peligrosa - disabled_msg: Las suscripciones de correo electrónico se han desactivado correctamente. + disabled_msg: Las suscripciones por correo electrónico se han desactivado correctamente. index: disabled: cannot_be_enabled: Tu proveedor técnico no ha habilitado esta función para tu servidor. - description: Esta función permite a las cuentas especificadas añadir un widget a sus perfiles, permitiendo a los visitantes sin una cuenta de Mastodon recibir sus publicaciones por correo electrónico. + description: Esta función permite a las cuentas especificadas añadir un widget a sus perfiles, lo que permite a los visitantes que no tienen una cuenta de Mastodon recibir sus publicaciones por correo electrónico. get_started: Primeros pasos - lead: Permitir a los visitantes recibir publicaciones por correo electrónico de cuentas dedicadas en este servidor. - title: Boletines de correo electrónico - purged_msg: Todos los datos de las suscripciones de correo electrónico están siendo borrados. + lead: Permitir que los visitantes reciban publicaciones por correo electrónico desde cuentas específicas de este servidor. + title: Boletines informativos por correo electrónico + purged_msg: Se están borrando todos los datos de las suscripciones por correo electrónico. roles: accounts: Cuentas edit_role: Editar rol @@ -545,13 +547,13 @@ es-MX: title: Roles setups: show: - enable_feature: Activar función + enable_feature: Habilitar función important_information: Información importante list: - 1_permission_explanation: Cuando esta función está activada, las cuentas con los permisos designados pueden añadir un formulario de recopilación de correo electrónico a sus perfiles. - 2_feature_explanation: Cuando los visitantes se registran en la página de perfil de una cuenta y confirman su suscripción, comenzarán a recibir actualizaciones por correo electrónico cuando la cuenta cree nuevas publicaciones públicas. - 3_privacy_policy_warning: Los administradores del servidor tendrán acceso a información de identificación personal (direcciones de correo electrónico). Por lo tanto, la política de privacidad y los Términos del Servicio del servidor deben actualizarse antes de usar esta función. - 4_cost_warning: Los correos electrónicos pueden incurrir en un cargo dependiendo de la configuración del alojamiento. Habla con tu proveedor de alojamiento antes de activarlo, ya que esta característica podría aumentar drásticamente la cantidad de correos electrónicos enviados desde tu servidor. + 1_permission_explanation: Cuando esta función está habilitada, las cuentas con los permisos correspondientes pueden añadir un formulario de recopilación de correos electrónicos a sus perfiles. + 2_feature_explanation: Cuando los visitantes se suscriban en la página de perfil de una cuenta y confirmen su suscripción, empezarán a recibir notificaciones por correo electrónico cada vez que la cuenta publique nuevas entradas públicas. + 3_privacy_policy_warning: Los administradores del servidor tendrán acceso a la información de identificación personal (direcciones de correo electrónico) recopilada. Por lo tanto, es necesario actualizar la política de privacidad y los Términos de servicio del servidor antes de utilizar esta función. + 4_cost_warning: El envío de correos electrónicos puede conllevar un cargo adicional dependiendo de la configuración del alojamiento web. Consúltalo con tu proveedor de alojamiento antes de habilitar esta función, ya que podría aumentar considerablemente el volumen de correos electrónicos enviados desde tu servidor. export_domain_allows: new: title: Importar dominios permitidos @@ -857,7 +859,7 @@ es-MX: manage_custom_emojis: Administrar Emojis Personalizados manage_custom_emojis_description: Permite a los usuarios gestionar emojis personalizados en el servidor manage_email_subscriptions: Gestionar suscripciones por correo electrónico - manage_email_subscriptions_description: Permite a los usuarios con este permiso habilitar la función del boletín de noticias por correo electrónico para su cuenta + manage_email_subscriptions_description: Permitir a los usuarios con este permiso activar la función de boletín informativo por correo electrónico en su cuenta manage_federation: Administrar Federación manage_federation_description: Permite a los usuarios bloquear o permitir la federación con otros dominios, y controlar la entregabilidad manage_invites: Administrar Invitaciones diff --git a/config/locales/es.yml b/config/locales/es.yml index 4c81cacafe4514..7b81ea0ed4e7f2 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -484,8 +484,10 @@ es: title: Bloquear nuevo dominio de correo no_email_domain_block_selected: No se han cambiado bloqueos de dominio de correo, ya que ninguno ha sido seleccionado not_permitted: No permitido + reset: Restablecer resolved_dns_records_hint_html: El nombre de dominio resuelve los siguientes dominios MX, los cuales son responsables en última instancia de aceptar el correo electrónico. Bloquear un dominio MX bloqueará los registros de cualquier dirección de correo electrónico que utilice el mismo dominio MX, incluso si el nombre de dominio visible es diferente. Ten cuidado de no bloquear los principales proveedores de correo electrónico. resolved_through_html: Resuelto a través de %{domain} + search: Buscar title: Dominios de correo bloqueados email_subscriptions: accounts: diff --git a/config/locales/et.yml b/config/locales/et.yml index bedf62ade49808..4dcf00d2c01ade 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -539,6 +539,19 @@ et: empty: hint: Kellelgi pole õigust seda oskust kasutada. no_roles_added: Rolle pole lisatud + lead: Järgmiste rollidega kontod saavad selle oskuse oma profiilis sisse lülitada. + manage_roles: Halda rolle + role_name: Rolli nimi + title: Rollid + setups: + show: + enable_feature: Luba oskus + important_information: Oluline info + list: + 1_permission_explanation: Kui see funktsioon on sisse lülitatud, saavad vastavate õigustega kontod lisada oma profiilidesse e-posti kogumise vormi. + 2_feature_explanation: Kui külastajad registreeruvad konto profiililehel ja kinnitavad tellimuse, hakkavad nad saama e-kirju, kui konto avaldab uusi avalikke postitusi. + 3_privacy_policy_warning: Serveri administraatoritel on juurdepääs kogutud isikuandmetele (e-posti aadressidele). Seetõttu tuleb enne selle funktsiooni kasutamist ajakohastada serveri privaatsuspoliitika ja kasutustingimused. + 4_cost_warning: Sõltuvalt veebimajutuse seadistustest võib e-kirjade saatmine kaasa tuua lisatasu. Enne selle funktsiooni aktiveerimist konsulteeri oma veebimajutuse pakkujaga, kuna sinu serverist saadetavate e-kirjade arv võib oluliselt suureneda. export_domain_allows: new: title: Lubatud domeenide import @@ -844,6 +857,7 @@ et: manage_custom_emojis: Halda isetehtud emotikone manage_custom_emojis_description: Lubab kasutajatel hallata serveris isetehtud emotikone manage_email_subscriptions: Halda e-posti tellimusi + manage_email_subscriptions_description: Luba selle õigusega kasutajatel oma kontol e-posti uudiskirja funktsioon sisse lülitada manage_federation: Halda födereerumist manage_federation_description: Lubab kasutajail keelata või lubada föderatsioone teiste domeenidega ja hallata ühenduvust manage_invites: Halda kutseid diff --git a/config/locales/ga.yml b/config/locales/ga.yml index 46096a3c48b54b..ba2df405274ccd 100644 --- a/config/locales/ga.yml +++ b/config/locales/ga.yml @@ -517,6 +517,71 @@ ga: resolved_dns_records_hint_html: Réitíonn an t-ainm fearainn chuig na fearainn MX seo a leanas, atá freagrach sa deireadh as glacadh le ríomhphost. Má dhéantar fearann ​​MX a bhlocáil, cuirfear bac ar chlárúcháin ó aon seoladh ríomhphoist a úsáideann an fearann ​​MX céanna, fiú má tá an t-ainm fearainn infheicthe difriúil. Bí cúramach gan bac a chur ar phríomhsholáthraithe ríomhphoist. resolved_through_html: Réitithe trí %{domain} title: Fearainn ríomhphoist bactha + 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 + subscribers: Síntiúsóirí + title: Liostaí poist + additional_footer_texts: + show: + title: Téacs breise sa bhuntásc + compliance_settings: + additional_footer_text: + action: Bainistigh + hint: Téacs roghnach a thaispeántar i mbunús ríomhphoist nuachtlitir amháin + title: Téacs breise sa bhuntásc + lead: Féadfar nuachtlitreacha ríomhphoist a mheas mar ríomhphoist mhargaíochta, ag brath ar na dlínsí ina bhfeidhmíonn tú. + privacy_policy: + action: Bainistigh + hint: Tá nasc chuig an mbeartas seo i mbun gach ríomhphoist + title: Polasaí príobháideachta + title: Socruithe comhlíontachta + danger_zone: + disable_feature: + action: Díchumasaigh + hint: Múch an ghné do gach cuntas + title: Díchumasaigh gné + erase_all_data: + action: Scrios sonraí + hint: Scriosann sé gach ríomhphost i ngach liosta seoltaí go buan + title: Scrios na sonraí go léir + title: Crios contúirte + disabled_msg: Tá síntiúis ríomhphoist díchumasaithe go rathúil. + index: + disabled: + cannot_be_enabled: Níl an ghné seo cumasaithe ag do sholáthraí teicniúil do do fhreastalaí. + description: Leis an ngné seo, is féidir le cuntais shonraithe giuirléid a chur lena bpróifílí, rud a chuireann ar chumas cuairteoirí gan cuntas Mastodon a gcuid post a fháil trí ríomhphost. + get_started: Tosaigh + lead: Lig do chuairteoirí poist a fháil trí ríomhphost ó chuntais tiomnaithe ar an bhfreastalaí seo. + title: Nuachtlitreacha ríomhphoist + purged_msg: Tá gach sonraí síntiúis ríomhphoist á scriosadh. + roles: + accounts: Cuntais + edit_role: Cuir ról in eagar + empty: + hint: Níl cead ag aon duine an ghné seo a úsáid. + no_roles_added: Níor cuireadh aon róil leis + lead: Is féidir le cuntais leis na róil seo a leanas an ghné seo a chumasú ar a bpróifílí. + manage_roles: Bainistigh róil + role_name: Ainm an róil + title: Róil + setups: + show: + enable_feature: Cumasaigh gné + important_information: Faisnéis thábhachtach + list: + 1_permission_explanation: Nuair a bhíonn an ghné seo cumasaithe, is féidir le cuntais a bhfuil na ceadanna ainmnithe acu foirm bhailiúcháin ríomhphoist a chur lena bpróifílí. + 2_feature_explanation: Nuair a chláraíonn cuairteoirí ar leathanach próifíle cuntais agus a dheimhníonn siad a síntiús, tosóidh siad ag fáil nuashonruithe ríomhphoist nuair a chruthaíonn an cuntas poist phoiblí nua. + 3_privacy_policy_warning: Beidh rochtain ag riarthóirí freastalaí ar PII (seoltaí ríomhphoist) a bhailítear. Dá bhrí sin, ní mór an polasaí príobháideachta agus na Téarmaí Seirbhíse don fhreastalaí a nuashonrú sula n-úsáidtear an ghné seo. + 4_cost_warning: D’fhéadfadh táille a bheith i gceist le ríomhphoist ag brath ar shocrú an óstála. Pléigh le do sholáthraí óstála sula gcumasaíonn tú é, mar d’fhéadfadh an ghné seo líon na ríomhphoist a sheoltar ó do fhreastalaí a mhéadú go mór. export_domain_allows: new: title: Ceadaíonn fearann ​​​​iomportála @@ -840,6 +905,7 @@ ga: manage_custom_emojis: Bainistigh Emojis Saincheaptha manage_custom_emojis_description: Ligeann sé d'úsáideoirí emojis saincheaptha a bhainistiú ar an bhfreastalaí manage_email_subscriptions: Bainistigh Síntiúis Ríomhphoist + manage_email_subscriptions_description: Lig d’úsáideoirí a bhfuil an cead seo acu gné an nuachtlitir ríomhphoist a chumasú dá gcuntas manage_federation: Cónaidhm a bhainistiú manage_federation_description: Ligeann sé d’úsáideoirí cónaidhm a bhlocáil nó a cheadú le fearainn eile, agus inseachadacht a rialú manage_invites: Bainistigh Cuirí diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 41e85c8e65e1e3..ff4c36c0e2a4e7 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -484,8 +484,10 @@ gl: title: Bloquear novo dominio de correo no_email_domain_block_selected: Non se cambiou ningún bloqueo de dominio porque non había ningún seleccionado not_permitted: Non permitido + reset: Restabelecer resolved_dns_records_hint_html: O nome de dominio corresponde cos seguintes dominios MX, que son os responsables últimos de aceptar o correo. Ao bloquear un dominio MX bloquerás a creación de contas para todo enderezo de correo que use o mesmo dominio MX, incluso se o nome de dominio visible é diferente. Ten coidado xa que podes bloquear os principais provedores de correo. resolved_through_html: Resolto a través de %{domain} + search: Buscar title: Dominios de correo bloqueados email_subscriptions: accounts: @@ -551,6 +553,7 @@ gl: 1_permission_explanation: Cando se activa esta ferramenta as contas cos permisos concedidos poden engadir un formulario no seu perfil para recoller correos. 2_feature_explanation: Cando unha persoa visita se apunta na páxina do perfil e confirma a súa subscrición, comezará a recibir actualizacións por correo cando a conta publique novas publicacións públicas. 3_privacy_policy_warning: A administración do servidor vai ter acceso aos PII (enderezos de correo) recollidos. Así, a directiva de privacidade e os termos do servizo do servidor deben actualizarse antes de activar esta ferramenta. + 4_cost_warning: Os correos poderían supoñer costes adicionais do servidor. Consulta co teu provedor de hospedaxe antes de activalos, xa que esta ferramenta podería facer aumentar drásticamente o número de correos que envía o teu servidor. export_domain_allows: new: title: Importar dominios permitidos @@ -856,6 +859,7 @@ gl: manage_custom_emojis: Xestionar Emojis personalizados manage_custom_emojis_description: Permite xestionar os emojis personalizados do servidor manage_email_subscriptions: Xestionar subscripcións por correo + manage_email_subscriptions_description: Permitir ás usuarias con este permiso activar para a súa conta a ferramenta do boletín por correo manage_federation: Xestionar a federación manage_federation_description: Permite bloquear ou permitir a federación con outros dominios, e controlar as entregas manage_invites: Xestionar Convites diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 62250a9bfbb07e..d2a1303522d7f5 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -496,6 +496,7 @@ hu: 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 subscribers: Feliratkozók title: Levelezőlisták @@ -527,6 +528,7 @@ hu: index: disabled: cannot_be_enabled: A műszaki szolgáltató nem kapcsolta be ezt a funkciót a kiszolgálód számára. + description: A funkció lehetővé teszi, hogy a megadott fiókok hozzáadjanak egy kisalkalmazást a profiljukhoz, mellyel a Mastodon-fiók nélküli látogatók e-mailben megkaphatják a bejegyzéseiket. get_started: Első lépések title: E-mailes hírlevelek purged_msg: Az összes e-mail-feliratkozási adat törlése folyamatban van. diff --git a/config/locales/is.yml b/config/locales/is.yml index 97c09f79882e83..cb467743906b3b 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -484,8 +484,10 @@ is: title: Útiloka nýtt tölvupóstlén no_email_domain_block_selected: Engum útilokunum tölvupóstléna var breytt þar sem ekkert var valið not_permitted: Ekki leyft + reset: Endurstilla resolved_dns_records_hint_html: Heiti lénsins vísar til eftirfarandi MX-léna, sem bera endanlega ábyrgð á að tölvupóstur skili sér. Útilokun á MX-léni mun koma í veg fyrir nýskráningar með hverju því tölvupóstfangi sem notar sama MX-lén, jafnvel þótt sýnilega lénsheitið sé frábrugðið. Farðu varlega svo þú útilokir ekki algengar tölvupóstþjónustur. resolved_through_html: Leyst í gegnum %{domain} + search: Leita title: Útilokuð tölvupóstlén email_subscriptions: accounts: diff --git a/config/locales/it.yml b/config/locales/it.yml index 72260e1a40c46a..4112e5e9db4716 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -486,6 +486,7 @@ it: not_permitted: Non consentito resolved_dns_records_hint_html: Il nome di dominio si risolve nei seguenti domini MX, che sono in ultima analisi responsabili dell'accettazione delle e-mail. Il blocco di un dominio MX bloccherà le registrazioni da qualsiasi indirizzo e-mail che utilizzi lo stesso dominio MX, anche se il nome di dominio visibile è diverso. Fai attenzione a non bloccare i principali provider di posta elettronica. resolved_through_html: Risolto attraverso %{domain} + search: Cerca title: Domini e-mail bloccati email_subscriptions: accounts: @@ -521,6 +522,7 @@ it: title: Disabilita la funzionalità erase_all_data: action: Cancella i dati + hint: Elimina in modo permanente tutti gli indirizzi email in tutte le mailing list title: Cancella tutti i dati title: Zona pericolosa disabled_msg: Le iscrizioni via email sono state disabilitate con successo. diff --git a/config/locales/kab.yml b/config/locales/kab.yml index 662b3be45f4e9f..7b5765436e9851 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -1005,6 +1005,7 @@ kab: development: Taneflit edit_profile: Ẓreg amaɣnu export: Sifeḍ + featured_tags: Ihacṭagen ufrinen import: Kter import_and_export: Taktert d usifeḍ migrate: Tunigin n umiḍan diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml index 60d98c40b6c9fb..fb562719f18e35 100644 --- a/config/locales/simple_form.de.yml +++ b/config/locales/simple_form.de.yml @@ -92,6 +92,7 @@ de: closed_registrations_message: Wird angezeigt, wenn Registrierungen deaktiviert sind content_cache_retention_period: Sämtliche Beiträge von anderen Servern (einschließlich geteilte Beiträge und Antworten) werden, unabhängig von der Interaktion der lokalen Nutzer*innen mit diesen Beiträgen, nach der festgelegten Anzahl von Tagen gelöscht. Davon sind auch Beiträge betroffen, die von lokalen Nutzer*innen favorisiert oder als Lesezeichen gespeichert wurden. Private Erwähnungen zwischen Nutzer*innen von verschiedenen Servern werden ebenfalls verloren gehen und können nicht wiederhergestellt werden. Diese Option richtet sich ausschließlich an Server mit speziellen Zwecken und wird die allgemeine Nutzungserfahrung beeinträchtigen, wenn sie für den allgemeinen Gebrauch aktiviert ist. custom_css: Du kannst eigene Stylesheets für das Webinterface von Mastodon verwenden. + email_footer_text: Der Text erscheint ausschließlich in der Fußzeile von E-Mails. favicon: WebP, PNG, GIF oder JPG. Überschreibt das Standard-Mastodon-Favicon mit einem eigenen Favicon. landing_page: Legt fest, welchen Bereich (nicht angemeldete) Besucher*innen sehen, wenn sie deinen Server besuchen. Für „Trends“ müssen die Trends in den Entdecken-Einstellungen aktiviert sein. Für „Lokaler Feed“ muss „Zugriff auf Live-Feeds, die lokale Beiträge beinhalten“ in den Entdecken-Einstellungen auf „Alle“ gesetzt werden. mascot: Überschreibt die Abbildung im erweiterten Webinterface. @@ -294,6 +295,7 @@ de: closed_registrations_message: Nachricht, falls Registrierungen deaktiviert sind content_cache_retention_period: Aufbewahrungsfrist für externe Inhalte custom_css: Eigenes CSS + email_footer_text: Fußzeile favicon: Favicon landing_page: Landingpage für Gäste local_live_feed_access: Zugriff auf Live-Feeds, die lokale Beiträge beinhalten @@ -322,6 +324,9 @@ de: trendable_by_default: Trends ohne vorherige Überprüfung erlauben trends: Trends aktivieren wrapstodon: Wrapstodon aktivieren + form_email_subscriptions_confirmation: + agreement_email_volume: Ich verstehe, dass das Aktivieren dieser Funktion die Anzahl versendeter E-Mails drastisch erhöhen kann. Ich übernehme die Verantwortung für mögliche Zusatzkosten. + agreement_privacy_and_terms: Datenschutzerklärung und Nutzungsbedingungen wurden im Vorfeld aktualisiert. interactions: must_be_follower: Benachrichtigungen von Profilen, die mir nicht folgen, ausblenden must_be_following: Benachrichtigungen von Profilen, denen ich nicht folge, ausblenden diff --git a/config/locales/simple_form.el.yml b/config/locales/simple_form.el.yml index 26f62f273720e4..5d4cb3f332a343 100644 --- a/config/locales/simple_form.el.yml +++ b/config/locales/simple_form.el.yml @@ -156,7 +156,7 @@ el: jurisdiction: Ανέφερε τη χώρα όπου ζει αυτός που πληρώνει τους λογαριασμούς. Εάν πρόκειται για εταιρεία ή άλλη οντότητα, ανέφερε τη χώρα όπου υφίσταται, και την πόλη, περιοχή, έδαφος ή πολιτεία ανάλογα με την περίπτωση. min_age: Δεν πρέπει να είναι κάτω από την ελάχιστη ηλικία που απαιτείται από τους νόμους της δικαιοδοσίας σας. user: - chosen_languages: Όταν ενεργοποιηθεί, μόνο αναρτήσεις σε επιλεγμένες γλώσσες θα εμφανίζονται στις δημόσιες ροές. Αυτή η ρύθμιση δεν επηρεάζει την Αρχική ροή και τις λίστες σας. + chosen_languages: Όταν επιλέξετε, στις δημόσιες ροές θα εμφανίζονται αναρτήσεις μόνο από τις επιλεγμένες γλώσσες. Αυτή η ρύθμιση δεν επηρεάζει την Αρχική ροή και τις λίστες σας. date_of_birth: one: Πρέπει να βεβαιωθούμε ότι είσαι τουλάχιστον %{count} για να χρησιμοποιήσεις το %{domain}. Δε θα το αποθηκεύσουμε. other: Πρέπει να βεβαιωθούμε ότι είσαι τουλάχιστον %{count} για να χρησιμοποιήσεις το %{domain}. Δε θα το αποθηκεύσουμε. diff --git a/config/locales/simple_form.es-MX.yml b/config/locales/simple_form.es-MX.yml index 9eb9d85446179a..631dbb4f01156c 100644 --- a/config/locales/simple_form.es-MX.yml +++ b/config/locales/simple_form.es-MX.yml @@ -92,7 +92,7 @@ es-MX: closed_registrations_message: Mostrado cuando los registros están cerrados content_cache_retention_period: Todas las publicaciones de otros servidores (incluyendo impuestos y respuestas) serán borrados después del número de días especificado, sin tener en cuenta cualquier interacción del usuario local con esas publicaciones. Esto incluye los mensajes que un usuario local haya marcado como favoritos. Las menciones privadas entre usuarios de diferentes instancias también se perderán y será imposible restaurarlas. El uso de esta configuración está pensado para instancias de propósito especial y rompe muchas expectativas de los usuarios cuando se implementa para uso general. custom_css: Puedes aplicar estilos personalizados a la versión web de Mastodon. - email_footer_text: Texto opcional que aparece únicamente en el pie de los correos electrónicos del boletín de correo electrónico. + email_footer_text: Texto opcional que aparece únicamente en el pie de página de los correos electrónicos del boletín informativo. favicon: WEBP, PNG, GIF o JPG. Reemplaza el icono predeterminado de Mastodon con un icono personalizado. landing_page: Selecciona qué página ven los nuevos visitantes cuando llegan por primera vez a tu servidor. Si seleccionas "Tendencias", entonces las tendencias deben estar habilitadas en la Configuración de Descubrimiento. Si selecciona "Cronología local", entonces "Acceso a las cronologías que destacan publicaciones locales" debe configurarse a "Todos" en la Configuración de Descubrimiento. mascot: Reemplaza la ilustración en la interfaz web avanzada. @@ -325,8 +325,8 @@ es-MX: trends: Habilitar tendencias wrapstodon: Habilitar Wrapstodon form_email_subscriptions_confirmation: - agreement_email_volume: Entiendo que activar esta característica puede aumentar significativamente el volumen de correos electrónicos enviados desde el servidor, y que soy el único responsable de cualquier coste incurrido. - agreement_privacy_and_terms: He actualizado la Política de Privacidad y los Términos del Servicio. + agreement_email_volume: Entiendo que al habilitar esta función puede aumentar considerablemente el volumen de correos electrónicos enviados desde el servidor y que soy el único responsable de los gastos en que se incurra. + agreement_privacy_and_terms: He actualizado la Política de privacidad y los Términos de servicio. interactions: must_be_follower: Bloquear notificaciones de personas que no te siguen must_be_following: Bloquear notificaciones de personas que no sigues diff --git a/config/locales/simple_form.et.yml b/config/locales/simple_form.et.yml index 7ea286ab4fbda5..9866920cc1f4ca 100644 --- a/config/locales/simple_form.et.yml +++ b/config/locales/simple_form.et.yml @@ -92,6 +92,7 @@ et: closed_registrations_message: Kuvatakse, kui liitumised pole võimalikud content_cache_retention_period: Kõik teiste serverite postitused (sealhulgas jagamised ja vastused) kustutatakse pärast määratud arvu päevade möödumist, sõltumata, kuidas kohalik kasutaja on nende postitustega interakteerunud. Hõlmatud on ka postitused, mille kohalik kasutaja on märkinud järjehoidjaks või lemmikuks. Ka eri instantside kasutajate vahelised privaatsed mainimised kaovad ja neid on võimatu taastada. See seadistus on mõeldud eriotstarbeliste instantside jaoks ja rikub paljude kasutajate ootusi, kui seda rakendatakse üldotstarbelise kasutuse puhul. custom_css: Mastodoni veebiliideses on võimalik kasutada kohandatud stiile. + email_footer_text: Valikuline tekst, mida kuvatakse ainult uudis-e-kirjade jaluses. favicon: WEBP, PNG, GIF või JPG. Asendab Mastodoni vaike- favicon ikooni kohandatud ikooniga. landing_page: Sellega valid lehe, mida uued külastajad sinu serverisse tulles näevad. Kui sa valid „Trendid“, siis peavad nad olema lubatud. Kui sa valid „Kohalike postituste voog“, siis seadistuse „Ligipääs kohalike postituste voole“ väärtus peab olema „Kõik“. mascot: Asendab kohandatud veebiliidese illustratsiooni. @@ -294,6 +295,7 @@ et: closed_registrations_message: Kohandatud teade, kui liitumine pole võimalik content_cache_retention_period: Kaugsisu säilitamise aeg custom_css: Kohandatud CSS + email_footer_text: Täiendav jaluse tekst favicon: Favicon landing_page: Avaleht uute külastajate jaoks local_live_feed_access: Ligipääs kohalike postituste voole @@ -322,6 +324,9 @@ et: trendable_by_default: Luba trendid eelneva ülevaatuseta trends: Luba trendid wrapstodon: Luba Wrapstodon + form_email_subscriptions_confirmation: + agreement_email_volume: Ma mõistan, et selle funktsiooni aktiveerimine võib märkimisväärselt suurendada serverist saadetavate e-kirjade mahtu ning et vastutan tekkivate kulude eest täielikult ise. + agreement_privacy_and_terms: Olen uuendanud privaatsuspoliitikat ja kasutustingimusi. interactions: must_be_follower: Keela teavitused mittejälgijatelt must_be_following: Keela teavitused kasutajatelt, keda sa ei jälgi diff --git a/config/locales/simple_form.ga.yml b/config/locales/simple_form.ga.yml index 8ce7bf11aca0da..a7c94a91a71939 100644 --- a/config/locales/simple_form.ga.yml +++ b/config/locales/simple_form.ga.yml @@ -92,6 +92,7 @@ ga: closed_registrations_message: Ar taispeáint nuair a dhúntar clárúcháin content_cache_retention_period: Scriosfar gach postáil ó fhreastalaithe eile (lena n-áirítear treisithe agus freagraí) tar éis an líon sonraithe laethanta, gan aird ar aon idirghníomhaíocht úsáideora áitiúil leis na postálacha sin. Áirítear leis seo postálacha ina bhfuil úsáideoir áitiúil tar éis é a mharcáil mar leabharmharcanna nó mar cheanáin. Caillfear tagairtí príobháideacha idir úsáideoirí ó chásanna éagsúla freisin agus ní féidir iad a athchóiriú. Tá úsáid an tsocraithe seo beartaithe le haghaidh cásanna sainchuspóra agus sáraítear go leor ionchais úsáideoirí nuair a chuirtear i bhfeidhm é le haghaidh úsáid ghinearálta. custom_css: Is féidir leat stíleanna saincheaptha a chur i bhfeidhm ar an leagan gréasáin de Mastodon. + email_footer_text: Téacs roghnach a thaispeántar i mbunús ríomhphoist nuachtlitir amháin. favicon: WEBP, PNG, GIF nó JPG. Sáraíonn sé an favicon Mastodon réamhshocraithe le deilbhín saincheaptha. landing_page: Roghnaíonn sé seo an leathanach a fheiceann cuairteoirí nua nuair a shroicheann siad do fhreastalaí den chéad uair. Má roghnaíonn tú "Treochtaí", ní mór treochtaí a chumasú sna Socruithe Fionnachtana. Má roghnaíonn tú "Fotha Áitiúil", ní mór "Rochtain ar fhothaí beo ina bhfuil poist áitiúla" a shocrú go "Gach Duine" sna Socruithe Fionnachtana. mascot: Sáraíonn sé an léaráid san ardchomhéadan gréasáin. @@ -297,6 +298,7 @@ ga: closed_registrations_message: Teachtaireacht saincheaptha nuair nach bhfuil sínithe suas ar fáil content_cache_retention_period: Tréimhse choinneála inneachair cianda custom_css: CSS saincheaptha + email_footer_text: Téacs breise sa bhuntásc favicon: Favicon landing_page: Leathanach tuirlingthe do chuairteoirí nua local_live_feed_access: Rochtain ar bheatha bheo ina bhfuil poist áitiúla @@ -325,6 +327,9 @@ ga: trendable_by_default: Ceadaigh treochtaí gan athbhreithniú roimh ré trends: Cumasaigh treochtaí wrapstodon: Cumasaigh Wrapstodon + form_email_subscriptions_confirmation: + agreement_email_volume: Tuigim go bhféadfadh an ghné seo a chumasú líon na ríomhphoist a sheoltar ón bhfreastalaí a mhéadú go suntasach agus gurb mise amháin atá freagrach as aon chostais a thabhaítear. + agreement_privacy_and_terms: Tá an Polasaí Príobháideachais agus na Téarmaí Seirbhíse nuashonraithe agam. interactions: must_be_follower: Cuir bac ar fhógraí ó dhaoine nach leantóirí iad must_be_following: Cuir bac ar fhógraí ó dhaoine nach leanann tú diff --git a/config/locales/simple_form.gl.yml b/config/locales/simple_form.gl.yml index 3283190387f4f1..85cbacc70adc86 100644 --- a/config/locales/simple_form.gl.yml +++ b/config/locales/simple_form.gl.yml @@ -92,6 +92,7 @@ gl: closed_registrations_message: Móstrase cando non se admiten novas usuarias content_cache_retention_period: Todas as publicacións procedentes de outros servidores (incluído promocións e respostas) van ser eliminadas despois do número de días indicado, sen importar as interaccións das usuarias locais con esas publicacións. Esto inclúe publicacións que a usuaria local marcou como favoritas ou incluíu nos marcadores. As mencións privadas entre usuarias de diferentes instancias tamén se eliminarán e non se poderán restablecer. O uso desta ferramenta esta orientado a situacións especiais e estraga moitas das expectativas das usuarias ao implementala cun propósito de uso xeral. custom_css: Podes aplicar deseños personalizados na versión web de Mastodon. + email_footer_text: Texto optativo que só aparece no rodapé dos correos co boletín. favicon: WEBP, PNG, GIF ou JPG. Sobrescribe a icona de favoritos de Mastodon por defecto cunha icona personalizada. landing_page: Elixe a páxina que verán as persoas que se acheguen por primeira vez ao teu servidor. Se elixes «Tendencias» entón debes activar as tendencias nos Axustes de Descubrimento. Se elixes «Cronoloxía local», hai que configurar nos Axustes de Descubrimento a opción «Acceso das cronoloxías en directo ás publicacións locais» como «Calquera». mascot: Sobrescribe a ilustración na interface web avanzada. @@ -294,6 +295,7 @@ gl: closed_registrations_message: Mensaxe personalizada para cando o rexistro está pechado content_cache_retention_period: Período de retención de contido remoto custom_css: CSS personalizado + email_footer_text: Texto adicional no rodapé favicon: Favicon landing_page: Páxina que se mostra ás visitas local_live_feed_access: Acceso a cronoloxías ao vivo que mostran publicacións locais @@ -322,6 +324,9 @@ gl: trendable_by_default: Permitir tendencias sen aprobación previa trends: Activar tendencias wrapstodon: Activar Wrapstodon + form_email_subscriptions_confirmation: + agreement_email_volume: Comprendo que activar esta ferramenta pode aumentar de xeito significativo o volume de correos electrónicos que envía o servidor e que é responsabilidade miña calquera custo que xenere. + agreement_privacy_and_terms: Actualicei a Directiva de Privacidade e os Termos do Servizo. interactions: must_be_follower: Bloquea as notificacións de persoas que non te seguen must_be_following: Bloquea as notificacións de persoas que non segues diff --git a/config/locales/simple_form.sq.yml b/config/locales/simple_form.sq.yml index 24e6f4ffb1d149..b513e66deec408 100644 --- a/config/locales/simple_form.sq.yml +++ b/config/locales/simple_form.sq.yml @@ -91,6 +91,7 @@ sq: closed_registrations_message: Shfaqur kur mbyllen dritare regjistrimesh content_cache_retention_period: Krejt postimet prej shërbyesve të tjerë (përfshi përforcime dhe përgjigje) do të fshihen pas numrit të caktuar të ditëve, pa marrë parasysh çfarëdo ndërveprimi përdoruesi me këto postime. Kjo përfshin postime kur një përdorues vendor u ka vënë shenjë si faqerojtës, ose të parapëlqyer. Do të humbin gjithashtu dhe përmendje private mes përdoruesish nga instanca të ndryshme dhe s’do të jetë e mundshme të rikthehen. Përdorimi i këtij rregullimi është menduar për instanca me qëllim të caktuar dhe ndërhyn në çka presin mjaft përdorues, kur sendërtohet për përdorim të përgjithshëm. custom_css: Stile vetjakë mund të aplikoni në versionin web të Mastodon-it. + email_footer_text: Tekst opsional që shfaqet vetëm te fundfaqja e email-eve të buletinit. favicon: WEBP, PNG, GIF, ose JPG. Anashkalon favikonën parazgjedhje Mastodon me një ikonë vetjake. landing_page: Përzgjedh cilën faqe shohin vizitorët e rinj, kur vijnë për herë të parë në shërbyesin tuaj. Nëse përzgjidhni “Në modë”, atëherë “në modë” duhet aktivizuar te Rregullime për Zbulime. Nëse përzgjidhni “Prurje vendore”, atëherë “Hyrje te prurje vendore që përmbajnë postime vendore” duhet vënë si “Gjithkush”, te Rregullime për Zbulime. mascot: Anashkalon ilustrimin te ndërfaqja web e thelluar. @@ -322,6 +323,9 @@ sq: trendable_by_default: Lejoni gjëra në modë pa shqyrtim paraprak trends: Aktivizo gjëra në modë wrapstodon: Aktivizo Përmbledhjedon-in + form_email_subscriptions_confirmation: + agreement_email_volume: E kuptoj se aktivizimi i kësaj veçorie mund të rrisë në mënyrë domethënëse vëllimin e email-eve nga shërbyesi dhe se jam i vetmi që mban përgjegjësi për çfarëdo kostos që rrjedhin prej kësaj. + agreement_privacy_and_terms: Kam përditësuar Rregulla Privatësie dhe Kushte Shërbimi. interactions: must_be_follower: Blloko njoftime nga jo-ndjekës must_be_following: Blloko njoftime nga persona që s’i ndiqni diff --git a/config/locales/sq.yml b/config/locales/sq.yml index 99e238af902747..d065158e6dd265 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -484,8 +484,10 @@ sq: title: Blloko përkatësi të re email no_email_domain_block_selected: S’u ndryshuan bllokime përkatësish email, ngaqë s’qe përzgjedhur ndonjë not_permitted: Jo i lejuar + reset: Riktheje te parazgjedhjet resolved_dns_records_hint_html: Emri i përkatësisë u përket përkatësive vijuese MX, që janë përgjegjëset përfundimtare për pranim email-esh. Bllokimi i një përkatësie MX do të bllokojë regjistrime nga çfarëdo adrese email që përdor të njëjtën përkatësi MX, edhe nëse emri i dukshëm i përkatësisë është i ndryshëm. Hapni sytë të mos bllokoni shërbime të njohur email-esh. resolved_through_html: Zgjidhur përmes %{domain} + search: Kërko title: Përkatësi email të bllokuara email_subscriptions: accounts: @@ -508,21 +510,38 @@ sq: action: Administrojini hint: Tekst opsional që shfaqet vetëm te fundfaqja e email-eve të buletinit title: Tekst fundfaqeje shtesë + lead: Në varësi të juridiksionit në të cilin veproni, buletinet me email mund të konsiderohen email-e marketingu. privacy_policy: action: Administrojini + hint: Për këto rregulla ka një lidhje te fundfaqja e çdo email-i title: Rregulla privatësie title: Rregullime përputhjeje me rregullore dhe ligje danger_zone: disable_feature: action: Çaktivizoje + hint: Çaktivizoje këtë veçori për krejt llogaritë title: Çaktivizoje veçorinë erase_all_data: action: Fshiji të dhënat + hint: Fshin në mënyrë të pakthyeshme krejt email-et në krejt listat e postimeve title: Fshiji krejt të dhënat title: Zonë rreziku + disabled_msg: Pajtimet email janë çaktivizuar me sukses. index: + disabled: + cannot_be_enabled: Shërbimi juaj teknik s’e ka aktivizuar këtë veçori për shërbyesin tuaj. + description: Kjo veçori lejon llogari të caktuara të shtojnë një “widget” te profilet e tyre, duke u bërë të mundur vizitorëve pa një llogari Mastodon të marrin postimet përmes email-i. + get_started: Fillojani + lead: Lejojuni vizitorëve të marrin postime përmes email-i, që nga llogari enkas për këtë në këtë shërbyes. title: Dërgoni buletine me email + purged_msg: Po fshihen krejt të dhënat e lidhura me pajtime me email. roles: + accounts: Llogari + edit_role: Përpunoni rolin + empty: + hint: Askush s’ka leje të përdorë këtë veçori. + no_roles_added: S’u shtuan role + lead: Llogaritë me rolet vijuese mund ta aktivizojnë këtë veçori në profilet e tyre. manage_roles: Administroni role role_name: Emër roli title: Role @@ -530,6 +549,8 @@ sq: show: enable_feature: Aktivizoje veçorinë important_information: Informacion i rëndësishëm + list: + 1_permission_explanation: Kur aktivizohet kjo veçroi, llogaritë me lejet e caktuara mund të shtojnë te profilet e tyre një formular koleksionesh email. export_domain_allows: new: title: Importoni lejime përkatësish @@ -830,6 +851,7 @@ sq: manage_custom_emojis: Të Administrojë Emoxhi Vetjake manage_custom_emojis_description: U lejon përdoruesve të administrojnë te shërbyesi emoxhi vetjake manage_email_subscriptions: Administroni Pajtime Me Email + manage_email_subscriptions_description: Lejoji përdoruesit me këtë leje të aktivizojnë veçorinë për buletine me email për llogaritë e tyre manage_federation: Të Administrojë Federim manage_federation_description: U lejon përdoruesve të bllokojnë ose lejojnë federim me përkatësi të tjera dhe të kontrollojnë shpërndarjen manage_invites: Të Administrojë Ftesa diff --git a/config/locales/sv.yml b/config/locales/sv.yml index 3d00d9519505b8..8771a4921be45d 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -484,8 +484,10 @@ sv: title: Blockera ny e-postdomän no_email_domain_block_selected: Inga blockeringar av e-postdomäner ändrades eftersom inga valdes not_permitted: Ej tillåtet + reset: Återställ resolved_dns_records_hint_html: Domännamnet ger uppslag till följande MX-domäner, vilka är ytterst ansvariga för att e-post tas emot. Att blockera en MX-domän blockerar även registreringar från alla e-postadresser som använder samma MX-domän, även om det synliga domännamnet är annorlunda. Var noga med att inte blockera stora e-postleverantörer. resolved_through_html: Uppslagen genom %{domain} + search: Sök title: Blockerade e-postdomäner export_domain_allows: new: diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 7f5e2cb1597720..8f7ee329f8ed1c 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -474,8 +474,10 @@ vi: title: Chặn tên miền email mới no_email_domain_block_selected: Không có thay đổi vì không có mục nào được chọn not_permitted: Không cho phép + reset: Đặt lại resolved_dns_records_hint_html: Tên miền phân giải thành các tên miền MX sau, các tên miền này chịu trách nhiệm cuối cùng trong việc chấp nhận email. Chặn tên miền MX sẽ chặn đăng ký từ bất kỳ địa chỉ email nào sử dụng cùng một tên miền MX, ngay cả khi tên miền hiển thị là khác. Cẩn thận đừng chặn những dịch vụ email lớn. resolved_through_html: Đã xử lý thông qua %{domain} + search: Tìm kiếm title: Tên miền email đã chặn email_subscriptions: accounts: diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 7c02995de85f32..b7dd7b9be2985f 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -474,8 +474,10 @@ zh-CN: title: 封禁新的邮箱域名 no_email_domain_block_selected: 没有任何项目被选中,因此未更改邮箱域名屏蔽列表 not_permitted: 未允许 + reset: 重置 resolved_dns_records_hint_html: 该域名解析的 MX 记录所指向的域名如下,这些域名被用于接收电子邮件。 即使电子邮件地址域名与 MX 域名不同,屏蔽一个 MX 域名意味着阻止任何使用相同 MX 域名的邮箱地址注册本站账号。 请谨慎操作,不要误屏蔽主要的邮箱提供商。 resolved_through_html: 通过 %{domain} 解析 + search: 搜索 title: 被封禁的邮箱域名 email_subscriptions: accounts: diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index d2ff545b17576e..56636fd80fec42 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -474,8 +474,10 @@ zh-TW: 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: From 2fed2edd5e6e5407166ec1233e1c3c0151499579 Mon Sep 17 00:00:00 2001 From: diondiondion Date: Thu, 7 May 2026 11:34:20 +0200 Subject: [PATCH 040/132] Hide "Follows you" badge when viewing your own list of followers (#38932) --- .../components/hover_card_account.tsx | 24 ++++++++++--------- .../features/followers/components/list.tsx | 6 ++++- .../mastodon/features/followers/index.tsx | 2 ++ 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/app/javascript/mastodon/components/hover_card_account.tsx b/app/javascript/mastodon/components/hover_card_account.tsx index 1c015e4e8077e9..b85536cfddc6ac 100644 --- a/app/javascript/mastodon/components/hover_card_account.tsx +++ b/app/javascript/mastodon/components/hover_card_account.tsx @@ -154,17 +154,19 @@ export const HoverCardAccount = forwardRef< {(isMutual || isFollower) && ( <> · - {isMutual ? ( - - ) : ( - - )} + + {isMutual ? ( + + ) : ( + + )} + )}
    diff --git a/app/javascript/mastodon/features/followers/components/list.tsx b/app/javascript/mastodon/features/followers/components/list.tsx index 734409ee55a20d..6c600d570f3a85 100644 --- a/app/javascript/mastodon/features/followers/components/list.tsx +++ b/app/javascript/mastodon/features/followers/components/list.tsx @@ -28,6 +28,7 @@ interface AccountListProps { list?: AccountList | null; loadMore: () => void; prependAccountId?: string | null; + withoutFollowsYouBadge?: boolean; scrollKey: string; } @@ -40,6 +41,7 @@ export const AccountList: FC = ({ list, loadMore, prependAccountId, + withoutFollowsYouBadge, scrollKey, }) => { const account = useAccount(accountId); @@ -57,6 +59,7 @@ export const AccountList: FC = ({ key={followerId} accountId={followerId} withBio={false} + badge={withoutFollowsYouBadge ? false : null} /> )) ?? []; @@ -66,11 +69,12 @@ export const AccountList: FC = ({ key={prependAccountId} accountId={prependAccountId} withBio={false} + badge={withoutFollowsYouBadge ? false : null} />, ); } return children; - }, [prependAccountId, list, forceEmptyState]); + }, [prependAccountId, list, forceEmptyState, withoutFollowsYouBadge]); const { multiColumn } = useLayout(); diff --git a/app/javascript/mastodon/features/followers/index.tsx b/app/javascript/mastodon/features/followers/index.tsx index 219462ef6ff04c..61345cbc975aad 100644 --- a/app/javascript/mastodon/features/followers/index.tsx +++ b/app/javascript/mastodon/features/followers/index.tsx @@ -9,6 +9,7 @@ import { expandFollowers, fetchFollowers } from '@/mastodon/actions/accounts'; import { useAccount } from '@/mastodon/hooks/useAccount'; import { useAccountId } from '@/mastodon/hooks/useAccountId'; import { useRelationship } from '@/mastodon/hooks/useRelationship'; +import { me } from '@/mastodon/initial_state'; import { selectUserListWithoutMe } from '@/mastodon/selectors/user_lists'; import { useAppDispatch, useAppSelector } from '@/mastodon/store'; @@ -85,6 +86,7 @@ const Followers: FC = () => { list={followerList} loadMore={loadMore} prependAccountId={followerId} + withoutFollowsYouBadge={accountId === me} scrollKey='followers' /> ); From f24f98ce40a144762f4b7343797c2d754cb41afb Mon Sep 17 00:00:00 2001 From: Echo Date: Thu, 7 May 2026 11:41:03 +0200 Subject: [PATCH 041/132] Profile: Remove old classes (#38920) --- .../components/account_header/buttons.tsx | 7 +- .../components/account_header/fields.tsx | 18 +- .../components/account_header/index.tsx | 53 +-- .../account_header/styles.module.scss | 120 +++++- .../components/account_authorize.jsx | 8 +- app/javascript/styles/mastodon/accounts.scss | 69 ---- app/javascript/styles/mastodon/admin.scss | 106 ++++- .../styles/mastodon/components.scss | 366 ------------------ app/views/admin/accounts/_field.html.haml | 15 +- app/views/admin/accounts/show.html.haml | 4 +- 10 files changed, 234 insertions(+), 532 deletions(-) diff --git a/app/javascript/mastodon/components/account_header/buttons.tsx b/app/javascript/mastodon/components/account_header/buttons.tsx index 737a3b9ca5a302..7a5ca4332cd300 100644 --- a/app/javascript/mastodon/components/account_header/buttons.tsx +++ b/app/javascript/mastodon/components/account_header/buttons.tsx @@ -3,8 +3,6 @@ import type { FC } from 'react'; import { defineMessages, useIntl } from 'react-intl'; -import classNames from 'classnames'; - import { followAccount } from '@/mastodon/actions/accounts'; import { useAccount } from '@/mastodon/hooks/useAccount'; import { getAccountHidden } from '@/mastodon/selectors/accounts'; @@ -18,6 +16,7 @@ import { FollowButton } from '../follow_button'; import { IconButton } from '../icon_button'; import { AccountMenu } from './menu'; +import classes from './styles.module.scss'; const messages = defineMessages({ enableNotifications: { @@ -49,7 +48,7 @@ export const AccountButtons: FC = ({ const me = useAppSelector((state) => state.meta.get('me') as string); return ( -
    +
    {!hidden && ( )} @@ -94,7 +93,7 @@ const AccountButtonsOther: FC< {!isMovedAndUnfollowedAccount && ( )} diff --git a/app/javascript/mastodon/components/account_header/fields.tsx b/app/javascript/mastodon/components/account_header/fields.tsx index ce2fe9d3225d1a..e71f3a213d5745 100644 --- a/app/javascript/mastodon/components/account_header/fields.tsx +++ b/app/javascript/mastodon/components/account_header/fields.tsx @@ -107,15 +107,8 @@ const FieldCard: FC<{ field: AccountField; }> = ({ htmlHandlers, field }) => { const intl = useIntl(); - const { - name, - name_emojified, - nameHasEmojis, - value_emojified, - value_plain, - valueHasEmojis, - verified_at, - } = field; + const { name, nameHasEmojis, value_plain, valueHasEmojis, verified_at } = + field; const { wrapperRef, isLabelOverflowing, isValueOverflowing } = useFieldOverflow(); @@ -139,7 +132,6 @@ const FieldCard: FC<{ label={ void; @@ -183,9 +173,7 @@ type FieldHTMLProps = { const FieldHTML: FC = ({ className, - extraEmojis, text, - textEmojified, textHasCustomEmoji, isOverflowing, onOverflowClick, @@ -198,7 +186,7 @@ const FieldHTML: FC = ({ const html = ( +
    {!hidden && account.memorial && } {!hidden && account.moved && ( )} {!suspendedOrHidden && !account.moved && relationship?.requested_by && ( )} -
    +
    {!suspendedOrHidden && ( -
    -
    +
    + -
    +
    -
    - {me && account.id !== me && ( - - )} - - - - -
    +
    + {me && account.id !== me && } + + + + {!me && account.email_subscriptions && ( diff --git a/app/javascript/mastodon/components/account_header/styles.module.scss b/app/javascript/mastodon/components/account_header/styles.module.scss index 2953fd0ec27dfa..65775147cdfcb4 100644 --- a/app/javascript/mastodon/components/account_header/styles.module.scss +++ b/app/javascript/mastodon/components/account_header/styles.module.scss @@ -1,26 +1,79 @@ +.moved { + opacity: 0.5; +} + +// Account header .header { height: 120px; + overflow: hidden; background: var(--color-bg-secondary); + border-bottom: 1px solid var(--color-border-primary); + + img { + object-fit: cover; + display: block; + width: 100%; + height: 100%; + margin: 0; + } @container (width >= 500px) { height: 160px; } + + :global(.inactive) & { + filter: grayscale(100%); + } } +// Wraps everything except the header image. .barWrapper { - border-bottom: none; padding-inline: 16px; } +// Avatar .avatarWrapper { margin-top: -64px; padding-top: 0; + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 8px; + overflow: hidden; + margin-inline-start: -2px; // aligns the pfp with content below +} + +.avatar { + background: var(--color-bg-primary); + border: 1px solid var(--color-border-primary); + border-radius: var(--avatar-border-radius); + + .moved & { + filter: grayscale(100%); + } } .displayNameWrapper { display: flex; align-items: start; gap: 16px; + margin-top: 16px; + margin-bottom: 16px; + + h1 { + font-size: 17px; + line-height: 22px; + color: var(--color-text-primary); + font-weight: 600; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + + :global(.emojione) { + width: 22px; + height: 22px; + } } .nameWrapper { @@ -112,21 +165,6 @@ } } -$button-breakpoint: 420px; -$button-fallback-breakpoint: $button-breakpoint + 55px; - -.buttonsDesktop { - @container (width < #{$button-breakpoint}) { - display: none; - } - - @supports (not (container-type: inline-size)) { - @media (max-width: #{$button-fallback-breakpoint}) { - display: none; - } - } -} - .handleCopy { border: 1px solid var(--color-border-primary); border-radius: 8px; @@ -147,6 +185,45 @@ $button-fallback-breakpoint: $button-breakpoint + 55px; } } +$button-breakpoint: 420px; +$button-fallback-breakpoint: $button-breakpoint + 55px; + +.buttonsDesktop, +.buttonsMobile { + display: flex; + align-items: center; + gap: 8px; + + :global(.button) { + flex-shrink: 1; + white-space: nowrap; + min-width: 80px; + } + + :global(.icon-button) { + border: 1px solid var(--color-border-primary); + border-radius: 4px; + box-sizing: content-box; + padding: 5px; + + &:global(.copied) { + border-color: var(--color-text-success); + } + } +} + +.buttonsDesktop { + @container (width < #{$button-breakpoint}) { + display: none; + } + + @supports (not (container-type: inline-size)) { + @media (max-width: #{$button-fallback-breakpoint}) { + display: none; + } + } +} + .buttonsMobile { position: sticky; bottom: var(--mobile-bottom-nav-height); @@ -188,6 +265,7 @@ $button-fallback-breakpoint: $button-breakpoint + 55px; .bio { font-size: 15px; + color: var(--color-text-primary); } .familiarFollowers { @@ -420,3 +498,13 @@ $button-fallback-breakpoint: $button-breakpoint + 55px; background: var(--color-bg-primary); } } + +// Buttons + +.followButton { + flex-grow: 1; +} + +.bioButtonsWrapper { + margin-top: 16px; +} diff --git a/app/javascript/mastodon/features/follow_requests/components/account_authorize.jsx b/app/javascript/mastodon/features/follow_requests/components/account_authorize.jsx index 6aff30bd47ad45..847a088e516d32 100644 --- a/app/javascript/mastodon/features/follow_requests/components/account_authorize.jsx +++ b/app/javascript/mastodon/features/follow_requests/components/account_authorize.jsx @@ -10,11 +10,11 @@ import ImmutablePureComponent from 'react-immutable-pure-component'; import CheckIcon from '@/material-icons/400-24px/check.svg?react'; import CloseIcon from '@/material-icons/400-24px/close.svg?react'; +import { AccountBio } from '@/mastodon/components/account_bio'; import { Avatar } from '@/mastodon/components/avatar'; import { DisplayName } from '@/mastodon/components/display_name'; import { IconButton } from '@/mastodon/components/icon_button'; import { injectIntl } from '@/mastodon/components/intl'; -import { EmojiHTML } from '@/mastodon/components/emoji/html'; const messages = defineMessages({ authorize: { id: 'follow_request.authorize', defaultMessage: 'Authorize' }, @@ -41,11 +41,7 @@ class AccountAuthorize extends ImmutablePureComponent { - +
    diff --git a/app/javascript/styles/mastodon/accounts.scss b/app/javascript/styles/mastodon/accounts.scss index 924b12434ba47f..d4eb434a2b85ec 100644 --- a/app/javascript/styles/mastodon/accounts.scss +++ b/app/javascript/styles/mastodon/accounts.scss @@ -231,75 +231,6 @@ border-color: var(--color-border-error-soft); } -.account__header__fields { - max-width: 100vw; - padding: 0; - margin: 15px -15px -15px; - border: 0 none; - border-top: 1px solid var(--color-border-primary); - border-bottom: 1px solid var(--color-border-primary); - font-size: 14px; - line-height: 20px; - - dl { - display: flex; - border-bottom: 1px solid var(--color-border-primary); - } - - dt, - dd { - box-sizing: border-box; - padding: 14px; - text-align: center; - max-height: 48px; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - } - - dt { - font-weight: 500; - width: 120px; - flex: 0 0 auto; - color: var(--color-text-primary); - background: var(--color-bg-secondary); - } - - dd { - flex: 1 1 auto; - color: var(--color-text-secondary); - } - - a { - color: var(--color-text-brand); - text-decoration: none; - - &:hover, - &:focus, - &:active { - text-decoration: underline; - } - } - - .verified { - border: 1px solid var(--color-border-success-soft); - background: var(--color-bg-success-softest); - - a { - color: var(--color-text-success); - font-weight: 500; - } - - &__mark { - color: var(--color-text-success); - } - } - - dl:last-child { - border-bottom: 0; - } -} - .directory__tag .trends__item__current { width: auto; } diff --git a/app/javascript/styles/mastodon/admin.scss b/app/javascript/styles/mastodon/admin.scss index f2fe35d13ef9a4..5ad9576b8f3f6d 100644 --- a/app/javascript/styles/mastodon/admin.scss +++ b/app/javascript/styles/mastodon/admin.scss @@ -1035,35 +1035,121 @@ a.name-tag, max-width: 100%; } - .account__header__fields, - .account__header__content { + &__fields, + &__content { background: var(--color-bg-primary); border: 1px solid var(--color-border-primary); border-radius: 4px; height: 100%; } - .account__header__fields { - margin: 0; + &__fields { border: 1px solid var(--color-border-primary); + font-size: 14px; + line-height: 20px; + display: grid; + grid-template-columns: 120px auto; + grid-auto-flow: row; + + dl { + display: flex; + } + + dt, + dd { + display: flex; + align-items: center; + justify-content: center; + box-sizing: border-box; + padding: 14px; + text-align: center; + border-bottom: 1px solid var(--color-border-primary); + + &:last-of-type:not(.verified) { + border-bottom: none; + } + } + + dt { + font-weight: 500; + width: 120px; + flex: 0 0 auto; + color: var(--color-text-primary); + background: var(--color-bg-secondary); + } + + dd { + flex: 1 1 auto; + color: var(--color-text-secondary); + + &:first-of-type.verified { + border-top-right-radius: 4px; + } + + &:last-of-type.verified { + border-bottom-right-radius: 4px; + } + } a { color: var(--color-text-brand); - } + text-decoration: none; - dl:first-child .verified { - border-radius: 0 4px 0 0; + &:hover, + &:focus, + &:active { + text-decoration: underline; + } } - .verified a { - color: var(--color-text-success); + .verified { + border: 1px solid var(--color-border-success-soft); + background: var(--color-bg-success-softest); + + a { + color: var(--color-text-success); + font-weight: 500; + } + + &__mark { + color: var(--color-text-success); + + > svg { + vertical-align: middle; + } + } } } - .account__header__content { + &__content { box-sizing: border-box; padding: 20px; color: var(--color-text-primary); + font-size: 14px; + font-weight: 400; + overflow: hidden; + word-break: normal; + overflow-wrap: break-word; + + p { + margin-bottom: 20px; + unicode-bidi: plaintext; + + &:last-child { + margin-bottom: 0; + } + } + + a { + color: var(--color-text-brand); + text-decoration: none; + + &:hover, + &:focus, + &:active { + text-decoration: underline; + } + } } } diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index eb0869d04fa1fe..b931d46d116efe 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -8320,372 +8320,6 @@ noscript { } } -.account__header__content { - color: var(--color-text-secondary); - font-size: 14px; - font-weight: 400; - overflow: hidden; - word-break: normal; - overflow-wrap: break-word; - - p { - margin-bottom: 20px; - unicode-bidi: plaintext; - - &:last-child { - margin-bottom: 0; - } - } - - a { - color: inherit; - text-decoration: underline; - - &:hover { - text-decoration: none; - } - } -} - -.account__header { - container: account-header / inline-size; - - &.inactive { - opacity: 0.5; - - .account__header__image, - .account__avatar { - filter: grayscale(100%); - } - } - - &__info { - position: absolute; - top: 20px; - inset-inline-end: 20px; - display: flex; - flex-wrap: wrap; - gap: 2px; - } - - &__image { - overflow: hidden; - height: 145px; - position: relative; - background: var(--color-bg-tertiary); - border-bottom: 1px solid var(--color-border-primary); - - img { - object-fit: cover; - display: block; - width: 100%; - height: 100%; - margin: 0; - } - } - - &__bar { - position: relative; - padding: 0 20px; - border-bottom: 1px solid var(--color-border-primary); - - .avatar { - display: block; - flex: 0 0 auto; - - .account__avatar { - background: var(--color-bg-primary); - border: 1px solid var(--color-border-primary); - border-radius: var(--avatar-border-radius); - } - } - } - - &__tabs { - display: flex; - align-items: flex-start; - justify-content: space-between; - margin-top: -55px; - padding-top: 10px; - gap: 8px; - overflow: hidden; - margin-inline-start: -2px; // aligns the pfp with content below - - &__name { - margin-top: 16px; - margin-bottom: 16px; - - .emojione { - width: 22px; - height: 22px; - } - - h1 { - font-size: 17px; - line-height: 22px; - color: var(--color-text-primary); - font-weight: 600; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - - small { - display: flex; - align-items: center; - gap: 4px; - font-size: 14px; - line-height: 20px; - color: var(--color-text-secondary); - font-weight: 400; - overflow: hidden; - text-overflow: ellipsis; - - span { - overflow: hidden; - text-overflow: ellipsis; - user-select: all; - } - - .icon-lock { - height: 18px; - width: 18px; - } - } - } - } - - .spacer { - flex: 1 1 auto; - } - } - - &__follow-button { - flex-grow: 1; - } - - &__buttons { - display: flex; - align-items: center; - gap: 8px; - - $button-breakpoint: 420px; - $button-fallback-breakpoint: $button-breakpoint + 55px; - - &--desktop { - margin-top: 55px; - - @container (width < #{$button-breakpoint}) { - display: none; - } - - @supports (not (container-type: inline-size)) { - @media (max-width: #{$button-fallback-breakpoint}) { - display: none; - } - } - } - - &--mobile { - margin-block: 16px; - - @container (width >= #{$button-breakpoint}) { - display: none; - } - - @supports (not (container-type: inline-size)) { - @media (min-width: ($button-fallback-breakpoint + 1px)) { - display: none; - } - } - } - - .button { - flex-shrink: 1; - white-space: nowrap; - min-width: 80px; - } - - .icon-button { - border: 1px solid var(--color-border-primary); - border-radius: 4px; - box-sizing: content-box; - padding: 5px; - - .icon { - width: 24px; - height: 24px; - } - - &.copied { - border-color: var(--color-text-success); - } - } - } - - &__bio { - .account__header__content { - color: var(--color-text-primary); - } - - .account__header__fields { - margin: 0; - margin-top: 16px; - border-radius: 4px; - border: 1px solid var(--color-border-primary); - - dl { - display: block; - padding: 11px 16px; - border-bottom-color: var(--color-border-primary); - } - - dd, - dt { - font-size: 13px; - line-height: 18px; - padding: 0; - text-align: initial; - } - - dt { - width: auto; - background: transparent; - text-transform: uppercase; - color: var(--color-text-tertiary); - } - - dd { - color: var(--color-text-secondary); - } - - a { - color: var(--color-text-brand); - } - - .icon { - width: 18px; - height: 18px; - } - - .verified { - border: 1px solid var(--color-text-success); - margin-top: -1px; - margin-inline: -1px; - - &:first-child { - border-top-left-radius: 4px; - border-top-right-radius: 4px; - } - - &:last-child { - border-bottom-left-radius: 4px; - border-bottom-right-radius: 4px; - margin-bottom: -1px; - } - - dt, - dd { - color: var(--color-text-success); - } - - dd { - display: flex; - align-items: center; - gap: 4px; - - span { - display: flex; - } - } - - a { - color: var(--color-text-success); - } - } - } - } - - &__extra { - margin-top: 16px; - - &__links { - font-size: 14px; - color: var(--color-text-secondary); - margin: 0 -10px; - padding-top: 16px; - padding-bottom: 10px; - - a { - display: inline-block; - color: var(--color-text-secondary); - text-decoration: none; - padding: 5px 10px; - font-weight: 500; - - strong { - font-weight: 700; - color: var(--color-text-primary); - } - } - } - } - - &__account-note { - color: var(--color-text-primary); - font-size: 14px; - font-weight: 400; - margin-bottom: 10px; - - &__loading-indicator-wrapper { - position: relative; - height: 37px; - - .loading-indicator { - left: 10px; - } - - .circular-progress { - width: 14px; - height: 14px; - } - } - - label { - display: block; - font-size: 12px; - font-weight: 500; - color: var(--color-text-secondary); - text-transform: uppercase; - margin-bottom: 5px; - } - - textarea { - display: block; - box-sizing: border-box; - width: calc(100% + 20px); - color: var(--color-text-primary); - background: transparent; - padding: 10px; - margin: 0 -10px; - font-family: inherit; - font-size: 14px; - resize: none; - border: 0; - outline: 0; - border-radius: 4px; - - &::placeholder { - color: var(--color-text-tertiary); - opacity: 1; - } - - &:focus { - background: var(--color-bg-brand-softest); - } - } - } -} - .account__contents { overflow: hidden; } diff --git a/app/views/admin/accounts/_field.html.haml b/app/views/admin/accounts/_field.html.haml index ce8d80785e68df..fa68d08d3786eb 100644 --- a/app/views/admin/accounts/_field.html.haml +++ b/app/views/admin/accounts/_field.html.haml @@ -1,9 +1,8 @@ -# locals: (field:, account:) -%dl - %dt.emojify{ title: field.name } - = prerender_custom_emojis(h(field.name), account.emojis) - %dd{ title: field.value, class: field_verified_class(field.verified?) } - - if field.verified? - %span.verified__mark{ title: t('accounts.link_verified_on', date: l(field.verified_at)) } - = material_symbol 'check' - = prerender_custom_emojis(account_field_value_format(field, with_rel_me: false), account.emojis) +%dt.emojify{ title: field.name } + = prerender_custom_emojis(h(field.name), account.emojis) +%dd{ title: field.value, class: field_verified_class(field.verified?) } + - if field.verified? + %span.verified__mark{ title: t('accounts.link_verified_on', date: l(field.verified_at)) } + = material_symbol 'check' + = prerender_custom_emojis(account_field_value_format(field, with_rel_me: false), account.emojis) diff --git a/app/views/admin/accounts/show.html.haml b/app/views/admin/accounts/show.html.haml index 977967c58fba14..d3a8a1f6fb55d2 100644 --- a/app/views/admin/accounts/show.html.haml +++ b/app/views/admin/accounts/show.html.haml @@ -11,12 +11,12 @@ .admin-account-bio - if @account.fields? %div - .account__header__fields + %dl.admin-account-bio__fields = render partial: 'field', collection: @account.fields, locals: { account: @account } - if @account.note? %div - .account__header__content.emojify + .admin-account-bio__content.emojify = prerender_custom_emojis(account_bio_format(@account), @account.emojis) = render 'admin/accounts/counters', account: @account From 60a437e045fbd6a19a51f3f0edb7e8ea3dd0228a Mon Sep 17 00:00:00 2001 From: diondiondion Date: Thu, 7 May 2026 11:51:12 +0200 Subject: [PATCH 042/132] Show "Follow" button next to accounts in a collection when logged out (#38933) --- .../collections/detail/accounts_list.tsx | 10 +++++++--- .../features/interaction_modal/index.tsx | 18 +++++++++++++----- app/javascript/mastodon/locales/en.json | 1 + 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/app/javascript/mastodon/features/collections/detail/accounts_list.tsx b/app/javascript/mastodon/features/collections/detail/accounts_list.tsx index 01718381c9ab77..441b8345fb3643 100644 --- a/app/javascript/mastodon/features/collections/detail/accounts_list.tsx +++ b/app/javascript/mastodon/features/collections/detail/accounts_list.tsx @@ -138,12 +138,16 @@ export const CollectionAccountsList: React.FC<{ const renderAccountItemButton = useCallback( ({ relationship, accountId }: RenderButtonOptions) => { + if (!me || !relationship) { + // Show follow button when logged out (it will trigger the remote interaction modal) + return ; + } + // When viewing your own collection, only show the Follow button // for accounts you're not following anymore. const withoutButton = - !relationship || - (collectionOwnerId === me && - (relationship.following || relationship.requested)); + collectionOwnerId === me && + (relationship.following || relationship.requested); if (withoutButton) return null; diff --git a/app/javascript/mastodon/features/interaction_modal/index.tsx b/app/javascript/mastodon/features/interaction_modal/index.tsx index 624ecd5613f8c4..a4ba40c069a3ae 100644 --- a/app/javascript/mastodon/features/interaction_modal/index.tsx +++ b/app/javascript/mastodon/features/interaction_modal/index.tsx @@ -483,11 +483,19 @@ const InteractionModal: React.FC<{ />

    - + {intent === 'follow' ? ( + + ) : ( + + )}

    diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index b306d90bd38d8a..12536608980ff3 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -796,6 +796,7 @@ "info_button.label": "Help", "info_button.what_is_alt_text": "

    What is alt text?

    Alt text provides image descriptions for people with vision impairments, low-bandwidth connections, or those seeking extra context.

    You can improve accessibility and understanding for everyone by writing clear, concise, and objective alt text.

    • Capture important elements
    • Summarize text in images
    • Use regular sentence structure
    • Avoid redundant information
    • Focus on trends and key findings in complex visuals (like diagrams or maps)
    ", "interaction_modal.action": "To interact with {name}'s post, you need to sign into your account on whatever Mastodon server you use.", + "interaction_modal.action_follow": "To follow {name}, you need to sign into your account on whatever Mastodon server you use.", "interaction_modal.go": "Go", "interaction_modal.no_account_yet": "Don't have an account yet?", "interaction_modal.on_another_server": "On a different server", From c47922602ff43562ebe687bcbef23d43b301b18f Mon Sep 17 00:00:00 2001 From: Echo Date: Thu, 7 May 2026 12:03:08 +0200 Subject: [PATCH 043/132] React Strict Mode (#38895) --- .../features/ui/util/intersection_observer_wrapper.js | 2 +- app/javascript/mastodon/main.tsx | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/features/ui/util/intersection_observer_wrapper.js b/app/javascript/mastodon/features/ui/util/intersection_observer_wrapper.js index 2b24c65831d87c..456bde11b56d48 100644 --- a/app/javascript/mastodon/features/ui/util/intersection_observer_wrapper.js +++ b/app/javascript/mastodon/features/ui/util/intersection_observer_wrapper.js @@ -25,7 +25,7 @@ class IntersectionObserverWrapper { this.observerBacklog.forEach(([ id, node, callback ]) => { this.observe(id, node, callback); }); - this.observerBacklog = null; + this.observerBacklog = []; } observe (id, node, callback) { diff --git a/app/javascript/mastodon/main.tsx b/app/javascript/mastodon/main.tsx index 965645f9e69d5e..ccefd7f366d377 100644 --- a/app/javascript/mastodon/main.tsx +++ b/app/javascript/mastodon/main.tsx @@ -1,3 +1,4 @@ +import { StrictMode } from 'react'; import { createRoot } from 'react-dom/client'; import { Globals } from '@react-spring/web'; @@ -33,7 +34,11 @@ function main() { await initializeEmoji(); const root = createRoot(mountNode); - root.render(); + root.render( + + + , + ); store.dispatch(setupBrowserNotifications()); if (isProduction() && me && 'serviceWorker' in navigator) { From 11803e3d047a3195b893b8a845d7d69f273ec57c Mon Sep 17 00:00:00 2001 From: David Roetzel Date: Thu, 7 May 2026 12:08:50 +0200 Subject: [PATCH 044/132] Relax uniqueness constraint to allow `nil` (#38934) --- app/models/collection_item.rb | 2 +- spec/models/collection_item_spec.rb | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/app/models/collection_item.rb b/app/models/collection_item.rb index b7b82a29c419ec..7ecb28ddb8193e 100644 --- a/app/models/collection_item.rb +++ b/app/models/collection_item.rb @@ -30,7 +30,7 @@ class CollectionItem < ApplicationRecord delegate :local?, :remote?, to: :collection - validates :account_id, uniqueness: { scope: :collection_id } + validates :account_id, uniqueness: { scope: :collection_id, allow_nil: true } validates :position, numericality: { only_integer: true, greater_than: 0 } validates :activity_uri, presence: true, if: :local_item_with_remote_account? validates :approval_uri, presence: true, unless: -> { local? || account&.local? || !accepted? } diff --git a/spec/models/collection_item_spec.rb b/spec/models/collection_item_spec.rb index 89ef2bc53483eb..0c927e368f3d71 100644 --- a/spec/models/collection_item_spec.rb +++ b/spec/models/collection_item_spec.rb @@ -41,6 +41,19 @@ subject { Fabricate.build(:unverified_remote_collection_item) } it { is_expected.to validate_presence_of(:object_uri) } + + context 'when another item without account exists' do + subject { Fabricate.build(:unverified_remote_collection_item, collection:) } + + let(:collection) { Fabricate(:remote_collection) } + + before do + Fabricate(:unverified_remote_collection_item, collection:) + collection.reload + end + + it { is_expected.to be_valid } + end end end From 9c8e1855a53a3b1a634f1ecba54ab56db6bf404f Mon Sep 17 00:00:00 2001 From: diondiondion Date: Thu, 7 May 2026 12:27:24 +0200 Subject: [PATCH 045/132] Fix collection sharing/link copying using the local/relative collection URL (#38935) --- .../features/collections/components/collection_menu.tsx | 5 +++-- .../mastodon/features/collections/components/share_modal.tsx | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/javascript/mastodon/features/collections/components/collection_menu.tsx b/app/javascript/mastodon/features/collections/components/collection_menu.tsx index f5cc518fb8a308..f9d7e18157d559 100644 --- a/app/javascript/mastodon/features/collections/components/collection_menu.tsx +++ b/app/javascript/mastodon/features/collections/components/collection_menu.tsx @@ -131,7 +131,7 @@ export const CollectionMenu: React.FC<{ { text: intl.formatMessage(messages.copyLink), action: () => { - void navigator.clipboard.writeText(getCollectionPath(id)); + void navigator.clipboard.writeText(collection.url); dispatch(showAlert({ message: messages.copyLinkConfirmation })); }, }, @@ -196,13 +196,14 @@ export const CollectionMenu: React.FC<{ id, openShareModal, isOwnCollection, + collection.url, dispatch, openDeleteConfirmation, context, currentAccountInCollection, openReportModal, - openBlockModal, openRevokeConfirmation, + openBlockModal, ]); return ( diff --git a/app/javascript/mastodon/features/collections/components/share_modal.tsx b/app/javascript/mastodon/features/collections/components/share_modal.tsx index 0e2a412594bc09..85440438a4951a 100644 --- a/app/javascript/mastodon/features/collections/components/share_modal.tsx +++ b/app/javascript/mastodon/features/collections/components/share_modal.tsx @@ -42,7 +42,7 @@ export const CollectionShareModal: React.FC<{ const isNew = !!location.state?.newCollection; const isOwnCollection = collection.account_id === me; - const collectionLink = `${window.location.origin}/collections/${collection.id}`; + const collectionLink = collection.url; const handleShareOnDevice = useCallback(() => { void navigator.share({ From 27e90864ac574f3c653b7283ad139fd217879ce2 Mon Sep 17 00:00:00 2001 From: Trivikram Kamat <16024985+trivikr@users.noreply.github.com> Date: Thu, 7 May 2026 03:43:15 -0700 Subject: [PATCH 046/132] Globally install corepack (#34406) --- .github/actions/setup-javascript/action.yml | 2 +- Dockerfile | 2 +- Vagrantfile | 2 +- bin/setup | 2 +- streaming/Dockerfile | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/actions/setup-javascript/action.yml b/.github/actions/setup-javascript/action.yml index 7f29265c1c5fab..0188c2edd97978 100644 --- a/.github/actions/setup-javascript/action.yml +++ b/.github/actions/setup-javascript/action.yml @@ -16,7 +16,7 @@ runs: # The following is needed because we can not use `cache: true` for `setup-node`, as it does not support Corepack yet and mess up with the cache location if ran after Node is installed - name: Enable corepack shell: bash - run: corepack enable + run: npm i -g corepack - name: Get yarn cache directory path id: yarn-cache-dir-path diff --git a/Dockerfile b/Dockerfile index 102a917d1c8e2b..036781826a988f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -342,7 +342,7 @@ COPY --from=node /usr/local/lib /usr/local/lib RUN \ # Configure Corepack rm /usr/local/bin/yarn*; \ - corepack enable; \ + npm i -g corepack; \ corepack prepare --activate; # hadolint ignore=DL3008 diff --git a/Vagrantfile b/Vagrantfile index a2c0b13b146031..e2d703fac204de 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -115,7 +115,7 @@ gem install bundler foreman bundle install # Install node modules -sudo corepack enable +sudo npm i -g corepack corepack prepare yarn install diff --git a/bin/setup b/bin/setup index 4ccf4594b4e4d7..b3dbece5e6cc4d 100755 --- a/bin/setup +++ b/bin/setup @@ -18,7 +18,7 @@ FileUtils.chdir APP_ROOT do system('bundle check') || system!('bundle install') puts "\n== Installing JS dependencies ==" - system! 'corepack enable' + system! 'npm i -g corepack' system! 'bin/yarn install --immutable' puts "\n== Preparing database ==" diff --git a/streaming/Dockerfile b/streaming/Dockerfile index 74c0c42aae1ccd..e8697213bea7f9 100644 --- a/streaming/Dockerfile +++ b/streaming/Dockerfile @@ -95,7 +95,7 @@ RUN \ --mount=type=cache,id=yarn-cache-${TARGETPLATFORM},target=/usr/local/share/.cache/yarn,sharing=locked \ # Configure Corepack rm /usr/local/bin/yarn*; \ - corepack enable; \ + npm i -g corepack; \ corepack prepare --activate; RUN \ From 53d0499254ab4d44aa94baa2a65796978dfdb71c Mon Sep 17 00:00:00 2001 From: diondiondion Date: Thu, 7 May 2026 13:34:54 +0200 Subject: [PATCH 047/132] Add label to "Why do you want to join" field during sign-up (#38936) --- app/views/auth/registrations/new.html.haml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/app/views/auth/registrations/new.html.haml b/app/views/auth/registrations/new.html.haml index 0dc1d894ec735e..6695160f58df0d 100644 --- a/app/views/auth/registrations/new.html.haml +++ b/app/views/auth/registrations/new.html.haml @@ -61,14 +61,11 @@ wrapper: :with_block_label - if approved_registrations? && @invite.blank? - %p.lead= t('auth.sign_up.manual_review', domain: site_hostname) - .fields-group = f.simple_fields_for :invite_request, resource.invite_request || resource.build_invite_request do |invite_request_fields| = invite_request_fields.input :text, as: :text, - hint: false, - label: false, + hint: t('auth.sign_up.manual_review', domain: site_hostname), input_html: { maxlength: UserInviteRequest::TEXT_SIZE_LIMIT }, required: Setting.require_invite_text, wrapper: :with_block_label From fcd56d6732b9a37903f4d33a365f8b78a83377fa Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 7 May 2026 16:47:19 +0200 Subject: [PATCH 048/132] Fix type of `interactingObject`, `interactionTarget` and add missing `QuoteAuthorization` (#38940) --- app/helpers/context_helper.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/helpers/context_helper.rb b/app/helpers/context_helper.rb index 4fc9ca18f6d269..1677c2d02ead5c 100644 --- a/app/helpers/context_helper.rb +++ b/app/helpers/context_helper.rb @@ -48,9 +48,9 @@ module ContextHelper }, quote_authorizations: { 'gts' => 'https://gotosocial.org/ns#', - 'quoteAuthorization' => { '@id' => 'https://w3id.org/fep/044f#quoteAuthorization', '@type' => '@id' }, - 'interactingObject' => { '@id' => 'gts:interactingObject' }, - 'interactionTarget' => { '@id' => 'gts:interactionTarget' }, + 'QuoteAuthorization' => 'https://w3id.org/fep/044f#QuoteAuthorization', + 'interactingObject' => { '@id' => 'gts:interactingObject', '@type' => '@id' }, + 'interactionTarget' => { '@id' => 'gts:interactionTarget', '@type' => '@id' }, }, }.freeze From 674e2685be97fbe2836179a269e7a69fc6347d00 Mon Sep 17 00:00:00 2001 From: diondiondion Date: Thu, 7 May 2026 16:49:31 +0200 Subject: [PATCH 049/132] Fix "New collection" link appearing on other accounts' profiles (#38942) --- .../mastodon/features/account_featured/index.tsx | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/app/javascript/mastodon/features/account_featured/index.tsx b/app/javascript/mastodon/features/account_featured/index.tsx index d4b36ae7471d68..3082f19abc9997 100644 --- a/app/javascript/mastodon/features/account_featured/index.tsx +++ b/app/javascript/mastodon/features/account_featured/index.tsx @@ -24,6 +24,7 @@ import Column from '@/mastodon/features/ui/components/column'; import { useAccount } from '@/mastodon/hooks/useAccount'; import { useAccountId } from '@/mastodon/hooks/useAccountId'; import { useAccountVisibility } from '@/mastodon/hooks/useAccountVisibility'; +import { me } from '@/mastodon/initial_state'; import { useAppDispatch, useAppSelector } from '@/mastodon/store'; import AddIcon from '@/material-icons/400-24px/add.svg?react'; @@ -173,12 +174,14 @@ const AccountFeatured: React.FC<{ multiColumn: boolean }> = ({ defaultMessage='Collections' /> - - - + {accountId === me && ( + + + + )} {hasCollections ? ( From 496d41cdcec25a519ae28d83fcafdefb52cebe12 Mon Sep 17 00:00:00 2001 From: Echo Date: Thu, 7 May 2026 17:54:19 +0200 Subject: [PATCH 050/132] Fix fields not having links (#38945) --- .../mastodon/components/account_header/fields.tsx | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/app/javascript/mastodon/components/account_header/fields.tsx b/app/javascript/mastodon/components/account_header/fields.tsx index e71f3a213d5745..5e052f5bfe1d8a 100644 --- a/app/javascript/mastodon/components/account_header/fields.tsx +++ b/app/javascript/mastodon/components/account_header/fields.tsx @@ -107,8 +107,13 @@ const FieldCard: FC<{ field: AccountField; }> = ({ htmlHandlers, field }) => { const intl = useIntl(); - const { name, nameHasEmojis, value_plain, valueHasEmojis, verified_at } = - field; + const { + name_emojified, + nameHasEmojis, + value_emojified, + valueHasEmojis, + verified_at, + } = field; const { wrapperRef, isLabelOverflowing, isValueOverflowing } = useFieldOverflow(); @@ -131,7 +136,7 @@ const FieldCard: FC<{ )} label={ Date: Thu, 7 May 2026 18:04:26 +0200 Subject: [PATCH 051/132] Redirect with interstitial when trying to view a remote collection while logged out (#38941) --- app/controllers/redirect/collections_controller.rb | 10 ++++++++++ app/lib/permalink_redirector.rb | 9 +++++++++ config/routes.rb | 1 + spec/lib/permalink_redirector_spec.rb | 12 ++++++++++++ 4 files changed, 32 insertions(+) create mode 100644 app/controllers/redirect/collections_controller.rb diff --git a/app/controllers/redirect/collections_controller.rb b/app/controllers/redirect/collections_controller.rb new file mode 100644 index 00000000000000..f5e177d102366c --- /dev/null +++ b/app/controllers/redirect/collections_controller.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +class Redirect::CollectionsController < Redirect::BaseController + private + + def set_resource + @resource = Collection.find(params[:id]) + not_found if @resource.local? || @resource&.account&.suspended? + end +end diff --git a/app/lib/permalink_redirector.rb b/app/lib/permalink_redirector.rb index 19fb3f401c9b6c..6cf071a09836db 100644 --- a/app/lib/permalink_redirector.rb +++ b/app/lib/permalink_redirector.rb @@ -21,6 +21,9 @@ def object elsif accounts_request? && record_integer_id_request? account = Account.find_by(id: second_segment) account if !account&.local? && !account&.suspended? + elsif collections_request? && record_integer_id_request? + collection = Collection.find_by(id: second_segment) + collection if !collection&.local? && !collection&.account&.suspended? end end end @@ -43,6 +46,8 @@ def redirect_confirmation_path redirect_account_path(object.id) when 'Status' redirect_status_path(object.id) + when 'Collection' + redirect_collection_path(object.id) else @path.delete_prefix('/deck') if @path.start_with?('/deck') end @@ -70,6 +75,10 @@ def accounts_request? first_segment == 'accounts' end + def collections_request? + first_segment == 'collections' + end + def record_integer_id_request? second_segment =~ /\d/ end diff --git a/config/routes.rb b/config/routes.rb index 772ca28f1cd835..8538635124caa9 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -189,6 +189,7 @@ def redirect_with_vary(path) namespace :redirect do resources :accounts, only: :show resources :statuses, only: :show + resources :collections, only: :show end namespace :email_subscriptions do diff --git a/spec/lib/permalink_redirector_spec.rb b/spec/lib/permalink_redirector_spec.rb index 81fa05449e96d0..2f3a10b9dc1051 100644 --- a/spec/lib/permalink_redirector_spec.rb +++ b/spec/lib/permalink_redirector_spec.rb @@ -45,6 +45,12 @@ redirector = described_class.new('@alice/123?foo=bar') expect(redirector.redirect_path).to eq 'https://example.com/status-123' end + + it 'returns path for collections link' do + collection = Fabricate(:remote_collection, account: remote_account) + redirector = described_class.new("collections/#{collection.id}") + expect(redirector.redirect_path).to eq(ActivityPub::TagManager.instance.url_for(collection) || ActivityPub::TagManager.instance.uri_for(collection)) + end end context 'when account is suspended' do @@ -81,6 +87,12 @@ redirector = described_class.new('@alice/123?foo=bar') expect(redirector.redirect_path).to be_nil end + + it 'returns nil for collections link' do + collection = Fabricate(:remote_collection, account: remote_account) + redirector = described_class.new("collections/#{collection.id}") + expect(redirector.redirect_path).to be_nil + end end end end From 9ff094b62ed2f081fa3e273071aa2578e0fb97cc Mon Sep 17 00:00:00 2001 From: Shlee Date: Fri, 8 May 2026 16:14:28 +0930 Subject: [PATCH 052/132] Fix #38946 (#38951) --- app/javascript/mastodon/components/status.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/app/javascript/mastodon/components/status.jsx b/app/javascript/mastodon/components/status.jsx index a68138125dafd2..374fa00052c879 100644 --- a/app/javascript/mastodon/components/status.jsx +++ b/app/javascript/mastodon/components/status.jsx @@ -32,6 +32,7 @@ import StatusActionBar from './status_action_bar'; import StatusContent from './status_content'; import { StatusThreadLabel } from './status_thread_label'; import { CollectionPreviewCard } from '../features/collections/components/collection_preview_card'; +import { compareUrls } from '../utils/compare_urls'; const domParser = new DOMParser(); From b71333921bb571b4023adc33ba75a900d7c094fe Mon Sep 17 00:00:00 2001 From: diondiondion Date: Fri, 8 May 2026 10:34:55 +0200 Subject: [PATCH 053/132] Fix text overflow issues in list item component (#38954) --- .../mastodon/components/account_list_item/index.tsx | 2 +- .../components/account_list_item/styles.module.scss | 7 +++++++ app/javascript/mastodon/components/list_item/index.tsx | 2 +- .../mastodon/components/list_item/styles.module.scss | 5 +++++ 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/components/account_list_item/index.tsx b/app/javascript/mastodon/components/account_list_item/index.tsx index 04817cb33e2f90..d6da056c8c952f 100644 --- a/app/javascript/mastodon/components/account_list_item/index.tsx +++ b/app/javascript/mastodon/components/account_list_item/index.tsx @@ -90,7 +90,7 @@ export const AccountListItem: React.FC = ({ {handle}} > = ({ return (
    {icon} -
    {children}
    +
    {children}
    {sideContent && ( {sideContent} )} diff --git a/app/javascript/mastodon/components/list_item/styles.module.scss b/app/javascript/mastodon/components/list_item/styles.module.scss index 8a90234f931d49..26840e6738de9e 100644 --- a/app/javascript/mastodon/components/list_item/styles.module.scss +++ b/app/javascript/mastodon/components/list_item/styles.module.scss @@ -14,6 +14,11 @@ color: var(--color-text-primary); } +.main { + min-width: 0; + overflow-wrap: break-word; +} + .title { font-weight: 500; From 658ad9f57e46b37a2eef033578ddfb05d2ccb3ab Mon Sep 17 00:00:00 2001 From: diondiondion Date: Fri, 8 May 2026 11:22:28 +0200 Subject: [PATCH 054/132] Fix crash when rendering remote post with collection card (#38959) --- app/javascript/mastodon/components/status.jsx | 2 +- .../mastodon/features/status/components/detailed_status.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/components/status.jsx b/app/javascript/mastodon/components/status.jsx index 374fa00052c879..5e72d8e545ff96 100644 --- a/app/javascript/mastodon/components/status.jsx +++ b/app/javascript/mastodon/components/status.jsx @@ -556,7 +556,7 @@ class Status extends ImmutablePureComponent { ).find((item) => compareUrls(item.get('url'), cardUrl)); if (taggedCollection) { - media = ; + media = ; } else { media = ( ; + media = ; } else { media = ( Date: Fri, 8 May 2026 11:52:09 +0200 Subject: [PATCH 055/132] Add language to collection payload (#38961) --- .../features/collections/editor/details.tsx | 24 ++++++++----- app/javascript/mastodon/initial_state.ts | 18 +++++++--- .../mastodon/reducers/slices/collections.ts | 34 +++++++++---------- 3 files changed, 47 insertions(+), 29 deletions(-) diff --git a/app/javascript/mastodon/features/collections/editor/details.tsx b/app/javascript/mastodon/features/collections/editor/details.tsx index f90f4be5e1efbb..7fe25245c438ca 100644 --- a/app/javascript/mastodon/features/collections/editor/details.tsx +++ b/app/javascript/mastodon/features/collections/editor/details.tsx @@ -46,8 +46,16 @@ import { WizardStepTitle } from './wizard_step_title'; export const CollectionDetails: React.FC = () => { const dispatch = useAppDispatch(); const history = useHistory(); - const { id, name, description, topic, discoverable, sensitive, items } = - useAppSelector((state) => state.collections.editor); + const { + id, + name, + description, + topic, + language, + discoverable, + sensitive, + items, + } = useAppSelector((state) => state.collections.editor); const handleNameChange = useCallback( (event: React.ChangeEvent) => { @@ -110,6 +118,7 @@ export const CollectionDetails: React.FC = () => { name, description, tag_name: topic || null, + language: language || null, discoverable, sensitive, }; @@ -125,6 +134,9 @@ export const CollectionDetails: React.FC = () => { sensitive, account_ids: items.map((item) => item.account_id), }; + if (language) { + payload.language = language; + } if (topic) { payload.tag_name = topic; } @@ -149,6 +161,7 @@ export const CollectionDetails: React.FC = () => { description, topic, discoverable, + language, sensitive, dispatch, history, @@ -392,13 +405,8 @@ const renderTagItem = (item: TagSearchResult) => ( const LanguageField: React.FC = () => { const dispatch = useAppDispatch(); - const initialLanguage = useAppSelector( - (state) => state.compose.get('default_language') as string, - ); const { language } = useAppSelector((state) => state.collections.editor); - const selectedLanguage = language ?? initialLanguage; - const handleLanguageChange = useCallback( (event: React.ChangeEvent) => { dispatch( @@ -419,7 +427,7 @@ const LanguageField: React.FC = () => { defaultMessage='Language' /> } - value={selectedLanguage} + value={language} onChange={handleLanguageChange} >
    example.com/te')) - .toEqual('example.com/te'); - expect(emojify('', { ':luigi:': { static_url: 'luigi.exe' } })) - .toEqual(''); - }); - - it('avoid emojifying on invisible text with nested tags', () => { - expect(emojify('😇')) - .toEqual('😇'); - expect(emojify('😇')) - .toEqual('😇'); - expect(emojify('😇')) - .toEqual('😇'); - }); - - it('does not emojify emojis with textual presentation VS15 character', () => { - expect(emojify('✴︎')) // This is U+2734 EIGHT POINTED BLACK STAR then U+FE0E VARIATION SELECTOR-15 - .toEqual('✴︎'); - }); - - it('does a simple emoji properly', () => { - expect(emojify('♀♂')) - .toEqual('♀♂'); - }); - - it('does an emoji containing ZWJ properly', () => { - expect(emojify('💂‍♀️💂‍♂️')) - .toEqual('💂‍♀️💂‍♂️'); - }); - - it('keeps ordering as expected (issue fixed by PR 20677)', () => { - expect(emojify('

    💕 #foo test: foo.

    ')) - .toEqual('

    💕 #foo test: foo.

    '); - }); - }); -}); diff --git a/app/javascript/mastodon/features/emoji/emoji.js b/app/javascript/mastodon/features/emoji/emoji.js deleted file mode 100644 index 8f45c76ac78e14..00000000000000 --- a/app/javascript/mastodon/features/emoji/emoji.js +++ /dev/null @@ -1,170 +0,0 @@ -import Trie from 'substring-trie'; - -import { getIsSystemTheme, isDarkMode } from '@/mastodon/utils/theme'; -import { assetHost } from 'mastodon/utils/config'; - -import { autoPlayGif } from '../../initial_state'; - -import { unicodeMapping } from './emoji_unicode_mapping_light'; - -const trie = new Trie(Object.keys(unicodeMapping)); - -// Convert to file names from emojis. (For different variation selector emojis) -const emojiFilenames = (emojis) => { - return emojis.map(v => unicodeMapping[v].filename); -}; - -// Emoji requiring extra borders depending on theme -const darkEmoji = emojiFilenames(['🎱', '🐜', '⚫', '🖤', '⬛', '◼️', '◾', '◼️', '✒️', '▪️', '💣', '🎳', '📷', '📸', '♣️', '🕶️', '✴️', '🔌', '💂‍♀️', '📽️', '🍳', '🦍', '💂', '🔪', '🕳️', '🕹️', '🕋', '🖊️', '🖋️', '💂‍♂️', '🎤', '🎓', '🎥', '🎼', '♠️', '🎩', '🦃', '📼', '📹', '🎮', '🐃', '🏴', '🐞', '🕺', '📱', '📲', '🚲', '🪮', '🐦‍⬛']); -const lightEmoji = emojiFilenames(['👽', '⚾', '🐔', '☁️', '💨', '🕊️', '👀', '🍥', '👻', '🐐', '❕', '❔', '⛸️', '🌩️', '🔊', '🔇', '📃', '🌧️', '🐏', '🍚', '🍙', '🐓', '🐑', '💀', '☠️', '🌨️', '🔉', '🔈', '💬', '💭', '🏐', '🏳️', '⚪', '⬜', '◽', '◻️', '▫️', '🪽', '🪿']); - -/** - * @param {string} filename - * @param {"light" | "dark" } colorScheme - * @returns {string} - */ -const emojiFilename = (filename, colorScheme) => { - const borderedEmoji = colorScheme === "light" ? lightEmoji : darkEmoji; - return borderedEmoji.includes(filename) ? (filename + '_border') : filename; -}; - -const emojifyTextNode = (node, customEmojis) => { - const VS15 = 0xFE0E; - const VS16 = 0xFE0F; - - let str = node.textContent; - - const fragment = new DocumentFragment(); - let i = 0; - - for (;;) { - let unicode_emoji; - - // Skip to the next potential emoji to replace (either custom emoji or custom emoji :shortcode: - if (customEmojis === null) { - while (i < str.length && !(unicode_emoji = trie.search(str.slice(i)))) { - i += str.codePointAt(i) < 65536 ? 1 : 2; - } - } else { - while (i < str.length && str[i] !== ':' && !(unicode_emoji = trie.search(str.slice(i)))) { - i += str.codePointAt(i) < 65536 ? 1 : 2; - } - } - - // We reached the end of the string, nothing to replace - if (i === str.length) { - break; - } - - let rend, replacement = null; - if (str[i] === ':') { // Potentially the start of a custom emoji :shortcode: - rend = str.indexOf(':', i + 1) + 1; - - // no matching ending ':', skip - if (!rend) { - i++; - continue; - } - - const shortcode = str.slice(i, rend); - const custom_emoji = customEmojis[shortcode]; - - // not a recognized shortcode, skip - if (!custom_emoji) { - i++; - continue; - } - - // now got a replacee as ':shortcode:' - // if you want additional emoji handler, add statements below which set replacement and return true. - const filename = autoPlayGif ? custom_emoji.url : custom_emoji.static_url; - replacement = document.createElement('img'); - replacement.setAttribute('draggable', 'false'); - replacement.setAttribute('class', 'emojione custom-emoji'); - replacement.setAttribute('alt', shortcode); - replacement.setAttribute('title', shortcode); - replacement.setAttribute('src', filename); - replacement.setAttribute('data-original', custom_emoji.url); - replacement.setAttribute('data-static', custom_emoji.static_url); - } else { // start of an unicode emoji - rend = i + unicode_emoji.length; - - // If the matched character was followed by VS15 (for selecting text presentation), skip it. - if (str.codePointAt(rend - 1) !== VS16 && str.codePointAt(rend) === VS15) { - i = rend + 1; - continue; - } - - const { filename, shortCode } = unicodeMapping[unicode_emoji]; - const title = shortCode ? `:${shortCode}:` : ''; - - const isSystemTheme = getIsSystemTheme(); - - const theme = (isSystemTheme || !isDarkMode()) ? 'light' : 'dark'; - - const imageFilename = emojiFilename(filename, theme); - - const img = document.createElement('img'); - img.setAttribute('draggable', 'false'); - img.setAttribute('class', 'emojione'); - img.setAttribute('alt', unicode_emoji); - img.setAttribute('title', title); - img.setAttribute('src', `${assetHost}/emoji/${imageFilename}.svg`); - - if (isSystemTheme && imageFilename !== emojiFilename(filename, 'dark')) { - replacement = document.createElement('picture'); - - const source = document.createElement('source'); - source.setAttribute('media', '(prefers-color-scheme: dark)'); - source.setAttribute('srcset', `${assetHost}/emoji/${emojiFilename(filename, 'dark')}.svg`); - replacement.appendChild(source); - replacement.appendChild(img); - } else { - replacement = img; - } - } - - // Add the processed-up-to-now string and the emoji replacement - fragment.append(document.createTextNode(str.slice(0, i))); - fragment.append(replacement); - str = str.slice(rend); - i = 0; - } - - fragment.append(document.createTextNode(str)); - node.parentElement.replaceChild(fragment, node); -}; - -const emojifyNode = (node, customEmojis) => { - for (const child of Array.from(node.childNodes)) { - switch(child.nodeType) { - case Node.TEXT_NODE: - emojifyTextNode(child, customEmojis); - break; - case Node.ELEMENT_NODE: - if (!child.classList.contains('invisible')) - emojifyNode(child, customEmojis); - break; - } - } -}; - -/** - * Legacy emoji processing function. - * @param {string} str - * @param {object} customEmojis - * @returns {string} - */ -const emojify = (str, customEmojis = {}) => { - const wrapper = document.createElement('div'); - wrapper.innerHTML = str; - - if (!Object.keys(customEmojis).length) - customEmojis = null; - - emojifyNode(wrapper, customEmojis); - - return wrapper.innerHTML; -}; - -export default emojify; diff --git a/app/javascript/mastodon/features/emoji/emoji_unicode_mapping_light.ts b/app/javascript/mastodon/features/emoji/emoji_unicode_mapping_light.ts deleted file mode 100644 index ecf36e3ea85ceb..00000000000000 --- a/app/javascript/mastodon/features/emoji/emoji_unicode_mapping_light.ts +++ /dev/null @@ -1,62 +0,0 @@ -// A mapping of unicode strings to an object containing the filename -// (i.e. the svg filename) and a shortCode intended to be shown -// as a "title" attribute in an HTML element (aka tooltip). - -import emojiCompressed from 'virtual:mastodon-emoji-compressed'; -import type { - FilenameData, - ShortCodesToEmojiDataKey, -} from 'virtual:mastodon-emoji-compressed'; - -import { unicodeToFilename } from './unicode_utils'; - -type UnicodeMapping = Record< - FilenameData[number][0], - { - shortCode: ShortCodesToEmojiDataKey; - filename: FilenameData[number][number]; - } ->; - -const [ - shortCodesToEmojiData, - _skins, - _categories, - _short_names, - emojisWithoutShortCodes, -] = emojiCompressed; - -// decompress -const unicodeMapping: UnicodeMapping = {}; - -function processEmojiMapData( - emojiMapData: FilenameData[number], - shortCode?: ShortCodesToEmojiDataKey, -) { - const [native, _filename] = emojiMapData; - // filename name can be derived from unicodeToFilename - const filename = emojiMapData[1] ?? unicodeToFilename(native); - unicodeMapping[native] = { - shortCode, - filename, - }; -} - -Object.keys(shortCodesToEmojiData).forEach( - (shortCode: ShortCodesToEmojiDataKey) => { - if (shortCode === undefined) return; - - const emojiData = shortCodesToEmojiData[shortCode]; - if (!emojiData) return; - const [filenameData, _searchData] = emojiData; - filenameData.forEach((emojiMapData) => { - processEmojiMapData(emojiMapData, shortCode); - }); - }, -); - -emojisWithoutShortCodes.forEach((emojiMapData) => { - processEmojiMapData(emojiMapData); -}); - -export { unicodeMapping }; diff --git a/app/javascript/mastodon/features/emoji/mode.ts b/app/javascript/mastodon/features/emoji/mode.ts index 6763fc4b50bae7..f7b0ea02168a00 100644 --- a/app/javascript/mastodon/features/emoji/mode.ts +++ b/app/javascript/mastodon/features/emoji/mode.ts @@ -34,6 +34,43 @@ export function useEmojiAppState(): EmojiAppState { }; } +export function getEmojiAppState(): EmojiAppState { + const currentLocale = toSupportedLocale(document.documentElement.lang); + + let emojiStyle = 'auto'; + const initialStateText = + document.getElementById('initial-state')?.textContent; + if (initialStateText) { + try { + const state = JSON.parse(initialStateText) as unknown; + if ( + state !== null && + typeof state === 'object' && + 'meta' in state && + state.meta !== null && + typeof state.meta === 'object' && + 'emoji_style' in state.meta && + typeof state.meta.emoji_style === 'string' + ) { + emojiStyle = state.meta.emoji_style; + } + } catch (err: unknown) { + console.warn( + 'Failed to parse initial state for emoji, defaulting to auto. Error:', + err, + ); + } + } + + return { + currentLocale, + locales: [currentLocale], + mode: determineEmojiMode(emojiStyle), + darkTheme: isDarkMode(), + assetHost, + }; +} + type Feature = Uint8ClampedArray; // See: https://github.com/nolanlawson/emoji-picker-element/blob/master/src/picker/constants.js diff --git a/app/javascript/mastodon/features/emoji/normalize.ts b/app/javascript/mastodon/features/emoji/normalize.ts index 6d2cfbb46ab176..fd4f61c66d3c31 100644 --- a/app/javascript/mastodon/features/emoji/normalize.ts +++ b/app/javascript/mastodon/features/emoji/normalize.ts @@ -152,11 +152,11 @@ const CODES_WITH_LIGHT_BORDER = EMOJIS_WITH_LIGHT_BORDER.map(emojiToUnicodeHex); export function unicodeHexToUrl({ unicodeHex, - darkTheme, + darkTheme = true, assetHost, }: { unicodeHex: string; - darkTheme: boolean; + darkTheme?: boolean; assetHost: string; }): string { const normalizedHex = unicodeToTwemojiHex(unicodeHex); diff --git a/app/javascript/mastodon/features/emoji/render.test.ts b/app/javascript/mastodon/features/emoji/render.test.ts index dffebd1f8c576c..a668f33d29c9aa 100644 --- a/app/javascript/mastodon/features/emoji/render.test.ts +++ b/app/javascript/mastodon/features/emoji/render.test.ts @@ -1,11 +1,13 @@ import { customEmojiFactory, unicodeEmojiFactory } from '@/testing/factories'; +import { EMOJI_MODE_TWEMOJI } from './constants'; import * as db from './database'; import * as loader from './loader'; import { loadEmojiDataToState, stringToEmojiState, tokenizeText, + updateHtmlWithEmoji, } from './render'; import type { EmojiStateCustom, EmojiStateUnicode } from './types'; @@ -107,6 +109,74 @@ describe('stringToEmojiState', () => { }); }); +describe('updateHtmlWithEmoji', () => { + const defaultOptions = { + assetHost: '', + darkTheme: false, + mode: EMOJI_MODE_TWEMOJI, + locale: 'en', + } as const; + + beforeEach(() => { + vi.clearAllMocks(); + }); + + test('updates element text with emojis', async () => { + const element = document.createElement('div'); + element.textContent = '😊'; + + vi.spyOn(db, 'loadLegacyShortcodesByShortcode').mockResolvedValueOnce( + undefined, + ); + vi.spyOn(db, 'loadEmojiByHexcode').mockResolvedValueOnce( + unicodeEmojiFactory(), + ); + + await updateHtmlWithEmoji({ + ...defaultOptions, + element, + }); + + const img = element.querySelector('img'); + expect(img).toBeDefined(); + }); + + test('does not update element text when mode is native', async () => { + const element = document.createElement('div'); + element.textContent = '😊'; + + const dbShortcodeCall = vi.spyOn(db, 'loadLegacyShortcodesByShortcode'); + const dbEmojiCall = vi.spyOn(db, 'loadEmojiByHexcode'); + + await updateHtmlWithEmoji({ + ...defaultOptions, + mode: 'native', + element, + }); + + expect(dbShortcodeCall).not.toHaveBeenCalled(); + expect(dbEmojiCall).not.toHaveBeenCalled(); + expect(element.textContent).toBe('😊'); + }); + + test('does not try to load custom emojis', async () => { + const element = document.createElement('div'); + element.textContent = ':smile:'; + + const dbShortcodeCall = vi.spyOn(db, 'loadLegacyShortcodesByShortcode'); + const dbEmojiCall = vi.spyOn(db, 'loadEmojiByHexcode'); + + await updateHtmlWithEmoji({ + ...defaultOptions, + element, + }); + + expect(dbShortcodeCall).not.toHaveBeenCalled(); + expect(dbEmojiCall).not.toHaveBeenCalled(); + expect(element.textContent).toBe(':smile:'); + }); +}); + describe('loadEmojiDataToState', () => { beforeEach(() => { vi.clearAllMocks(); @@ -137,6 +207,18 @@ describe('loadEmojiDataToState', () => { }); }); + test('converts unicode emoji code to hexcode when loading data', async () => { + const dbCall = vi + .spyOn(db, 'loadEmojiByHexcode') + .mockResolvedValue(unicodeEmojiFactory()); + const unicodeState = { + type: 'unicode', + code: '😊', + } as const satisfies EmojiStateUnicode; + await loadEmojiDataToState(unicodeState, 'en'); + expect(dbCall).toHaveBeenCalledWith('1F60A', 'en'); + }); + test('returns null for custom emoji without data', async () => { const customState = { type: 'custom', diff --git a/app/javascript/mastodon/features/emoji/render.ts b/app/javascript/mastodon/features/emoji/render.ts index 4b65f3abde5d9a..affa8e0f16eb11 100644 --- a/app/javascript/mastodon/features/emoji/render.ts +++ b/app/javascript/mastodon/features/emoji/render.ts @@ -4,7 +4,9 @@ import { EMOJI_TYPE_UNICODE, EMOJI_TYPE_CUSTOM, } from './constants'; +import { emojiToInversionClassName, unicodeHexToUrl } from './normalize'; import type { + EmojiAppState, EmojiLoadedState, EmojiMode, EmojiState, @@ -47,14 +49,14 @@ export function tokenizeText(text: string): TokenizedText { if (code.startsWith(':') && code.endsWith(':')) { // Custom emoji tokens.push({ - type: EMOJI_TYPE_CUSTOM, code, + type: EMOJI_TYPE_CUSTOM, } satisfies EmojiStateCustom); } else { // Unicode emoji tokens.push({ + code, type: EMOJI_TYPE_UNICODE, - code: code, } satisfies EmojiStateUnicode); } lastIndex = match.index + code.length; @@ -76,8 +78,8 @@ export function stringToEmojiState( ): EmojiStateUnicode | Required | null { if (isUnicodeEmoji(code)) { return { - type: EMOJI_TYPE_UNICODE, code: emojiToUnicodeHex(code), + type: EMOJI_TYPE_UNICODE, }; } @@ -95,6 +97,68 @@ export function stringToEmojiState( return null; } +/** + * Takes an element and emojifies all native emoji. + */ +export async function updateHtmlWithEmoji({ + assetHost, + darkTheme, + element, + mode, + locale, +}: { + element: Element; + locale: string; +} & Omit) { + if (mode === EMOJI_MODE_NATIVE) { + return; + } + + const tokens = tokenizeText(element.innerHTML); + const newChildren: (string | Element)[] = []; + for (const token of tokens) { + if (typeof token === 'string') { + newChildren.push(token); + continue; + } + + const state = await loadEmojiDataToState(token, locale); + // Ignore custom emoji if we encounter them. + if (!state || state.type === EMOJI_TYPE_CUSTOM) { + newChildren.push(token.code); + continue; + } + + if (!shouldRenderImage(state, mode)) { + newChildren.push(state.data.unicode); + continue; + } + + const img = document.createElement('img'); + img.src = unicodeHexToUrl({ + assetHost, + darkTheme, + unicodeHex: state.data.hexcode, + }); + img.alt = state.data.unicode; + img.title = state.data.label; + img.classList.add('emojione'); + + const inversionClass = emojiToInversionClassName(state.data.unicode); + if (inversionClass) { + img.classList.add(inversionClass); + } + + newChildren.push(img); + } + + element.innerHTML = newChildren.reduce( + (prev, curr) => + typeof curr === 'string' ? prev + curr : prev + curr.outerHTML, + '', + ); +} + /** * Loads emoji data into the given state if not already loaded. * @param state Emoji state to load data for. @@ -121,17 +185,19 @@ export async function loadEmojiDataToState( LocaleNotLoadedError, } = await import('./database'); + const code = isUnicodeEmoji(state.code) + ? emojiToUnicodeHex(state.code) + : state.code; + // First, try to load the data from IndexedDB. try { - const legacyCode = await loadLegacyShortcodesByShortcode(state.code); + const legacyCode = await loadLegacyShortcodesByShortcode(code); // This is duplicative, but that's because TS can't distinguish the state type easily. - const data = await loadEmojiByHexcode( - legacyCode?.hexcode ?? state.code, - locale, - ); + const data = await loadEmojiByHexcode(legacyCode?.hexcode ?? code, locale); if (data) { return { ...state, + code, type: EMOJI_TYPE_UNICODE, data, // TODO: Use CLDR shortcodes when the picker supports them. @@ -140,14 +206,14 @@ export async function loadEmojiDataToState( } // If not found, assume it's not an emoji and return null. - log('Could not find emoji %s for locale %s', state.code, locale); + log('Could not find emoji %s for locale %s', code, locale); return null; } catch (err: unknown) { // If the locale is not loaded, load it and retry once. if (!retry && err instanceof LocaleNotLoadedError) { log( 'Error loading emoji %s for locale %s, loading locale and retrying.', - state.code, + code, locale, ); const { importEmojiData } = await import('./loader'); diff --git a/app/javascript/mastodon/utils/objects.test.ts b/app/javascript/mastodon/utils/objects.test.ts new file mode 100644 index 00000000000000..5c08cd0561177e --- /dev/null +++ b/app/javascript/mastodon/utils/objects.test.ts @@ -0,0 +1,27 @@ +/* eslint-disable @typescript-eslint/no-confusing-void-expression */ +import { getNestedProperty } from './objects'; + +describe('getNestedProperty', () => { + test('returns the value of a nested property if it exists', () => { + const obj = { a: { b: { c: 42 } } }; + expect(getNestedProperty(obj, 'a', 'b', 'c')).toBe(42); + }); + + test('returns undefined if any part of the path does not exist', () => { + const obj = { a: { b: { c: 42 } } }; + expect(getNestedProperty(obj, 'a', 'x', 'c')).toBeUndefined(); + expect(getNestedProperty(obj, 'a', 'b', 'x')).toBeUndefined(); + expect(getNestedProperty(obj, 'x', 'b', 'c')).toBeUndefined(); + }); + + test('returns undefined if the initial object is not a record', () => { + expect(getNestedProperty(null, 'a', 'b')).toBeUndefined(); + expect(getNestedProperty(42, 'a', 'b')).toBeUndefined(); + expect(getNestedProperty('string', 'a', 'b')).toBeUndefined(); + }); + + test('returns undefined if no keys are provided', () => { + const obj = { a: 1 }; + expect(getNestedProperty(obj)).toBeUndefined(); + }); +}); diff --git a/app/javascript/mastodon/utils/objects.ts b/app/javascript/mastodon/utils/objects.ts new file mode 100644 index 00000000000000..4430849c0c3638 --- /dev/null +++ b/app/javascript/mastodon/utils/objects.ts @@ -0,0 +1,52 @@ +import { isPlainObject } from '@reduxjs/toolkit'; + +export type RecordObject = Record; + +export function isRecordObject(obj: unknown): obj is RecordObject { + return isPlainObject(obj); +} + +type NestedProperty = K extends readonly [ + infer Head, + ...infer Tail, +] + ? Head extends keyof NonNullable + ? Tail extends readonly PropertyKey[] + ? NestedProperty[Head], Tail> + : NonNullable[Head] + : undefined + : T; + +export function getNestedProperty< + TObject extends RecordObject, + const TKeys extends readonly PropertyKey[], +>(object: TObject, ...keys: TKeys): NestedProperty | undefined; +export function getNestedProperty( + object: unknown, + ...keys: PropertyKey[] +): unknown; +export function getNestedProperty( + object: unknown, + ...keys: PropertyKey[] +): unknown { + if (!isRecordObject(object) || keys.length === 0) { + return undefined; + } + + const remainingKeys = [...keys]; + let currentObject: RecordObject = object; + while (remainingKeys.length > 0) { + const currentKey = remainingKeys.shift(); + if (currentKey !== undefined && currentKey in currentObject) { + const nextObject = currentObject[currentKey]; + if (isRecordObject(nextObject)) { + currentObject = nextObject; + continue; + } else if (remainingKeys.length === 0) { + return nextObject; + } + } + } + + return undefined; +} From dcc26c1b2484848d5b7c3c1a56cfe38b37e83d23 Mon Sep 17 00:00:00 2001 From: diondiondion Date: Fri, 8 May 2026 16:24:02 +0200 Subject: [PATCH 059/132] Stylelint: Allow leading underscore in CSS variable names (#38966) --- .../mastodon/components/number_fields/styles.module.scss | 4 ++-- stylelint.config.js | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/components/number_fields/styles.module.scss b/app/javascript/mastodon/components/number_fields/styles.module.scss index d4e8bd9c304111..cfe6de5c527317 100644 --- a/app/javascript/mastodon/components/number_fields/styles.module.scss +++ b/app/javascript/mastodon/components/number_fields/styles.module.scss @@ -1,11 +1,11 @@ .list { - --item-gap: var(--number-fields-gap, 24px); + --_item-gap: var(--number-fields-gap, 24px); display: flex; flex-wrap: wrap; margin: 0; padding: 0; - gap: 4px var(--item-gap); + gap: 4px var(--_item-gap); font-size: 13px; color: var(--color-text-secondary); } diff --git a/stylelint.config.js b/stylelint.config.js index 10a2f1cd555694..7f13399587abc7 100644 --- a/stylelint.config.js +++ b/stylelint.config.js @@ -24,6 +24,13 @@ module.exports = { 'selector-id-pattern': null, 'value-keyword-case': null, 'value-no-vendor-prefix': null, + 'custom-property-pattern': [ + '^_?[a-z]([a-z0-9])*(-[a-z0-9]+)*$', + { + message: (name) => + `Expected custom property name "${name}" to be kebab-case (optional leading underscore allowed)`, + }, + ], 'scss/dollar-variable-empty-line-before': null, 'scss/no-global-function-names': null, From e7ed8bb682b4d68808ed8ac985d798726fdfd08a Mon Sep 17 00:00:00 2001 From: diondiondion Date: Sun, 10 May 2026 10:31:12 +0200 Subject: [PATCH 060/132] Indent collection preview cards when displayed in notifications (#38957) --- app/javascript/styles/mastodon/components.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index b931d46d116efe..a01531614895de 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -10759,6 +10759,7 @@ noscript { .picture-in-picture-placeholder, .more-from-author, .status-card, + .collection-preview, .hashtag-bar, .content-warning, .filter-warning { From b1f7c9641fa6f73d897bdcdb39e32d2740a16c69 Mon Sep 17 00:00:00 2001 From: David Roetzel Date: Mon, 11 May 2026 08:08:44 +0200 Subject: [PATCH 061/132] Fix updating collection items when position is unknown (#38962) --- .../process_featured_item_service.rb | 4 ++-- .../process_featured_item_service_spec.rb | 18 ++++++++++++++---- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/app/services/activitypub/process_featured_item_service.rb b/app/services/activitypub/process_featured_item_service.rb index a4323b41c6a220..245133607c6d69 100644 --- a/app/services/activitypub/process_featured_item_service.rb +++ b/app/services/activitypub/process_featured_item_service.rb @@ -16,10 +16,10 @@ def call(collection, uri_or_object, position: nil, request_id: nil) with_redis_lock("collection_item:#{@item_json['id']}") do @collection_item = existing_item || pre_approved_item || new_item + @collection_item.position = position unless position.nil? @collection_item.update!( uri: @item_json['id'], - object_uri: value_or_id(@item_json['featuredObject']), - position: + object_uri: value_or_id(@item_json['featuredObject']) ) @approval_uri = @item_json['featureAuthorization'] diff --git a/spec/services/activitypub/process_featured_item_service_spec.rb b/spec/services/activitypub/process_featured_item_service_spec.rb index 14147b37849855..d21b4ccea5d286 100644 --- a/spec/services/activitypub/process_featured_item_service_spec.rb +++ b/spec/services/activitypub/process_featured_item_service_spec.rb @@ -72,15 +72,25 @@ end end - context 'when item exists at a different position' do + context 'when item exists' do let!(:collection_item) do Fabricate(:collection_item, collection:, uri: featured_item_json['id'], position: 2) end - it 'updates the position' do - expect { subject.call(collection, object, position:) }.to_not change(collection.collection_items, :count) + context 'when no position is given' do + it 'does not change the position' do + expect { subject.call(collection, object) }.to_not change(collection.collection_items, :count) - expect(collection_item.reload.position).to eq 3 + expect(collection_item.reload.position).to eq 2 + end + end + + context 'when a different position is given' do + it 'updates the position' do + expect { subject.call(collection, object, position:) }.to_not change(collection.collection_items, :count) + + expect(collection_item.reload.position).to eq 3 + end end end From 8e03c9c1fc49690cf160fda3a26c15c549199a6b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 11 May 2026 08:21:03 +0200 Subject: [PATCH 062/132] Update dependency devise to v5.0.4 [SECURITY] (#38969) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 1797e38f97eae7..37205c70a4ec4b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -190,7 +190,7 @@ GEM irb (~> 1.10) reline (>= 0.3.8) debug_inspector (1.2.0) - devise (5.0.3) + devise (5.0.4) bcrypt (~> 3.0) orm_adapter (~> 0.1) railties (>= 7.0) @@ -354,7 +354,7 @@ GEM azure-blob (~> 0.5.2) hashie (~> 5.0) jmespath (1.6.2) - json (2.19.4) + json (2.19.5) json-canonicalization (1.0.0) json-jwt (1.17.0) activesupport (>= 4.2) @@ -449,7 +449,7 @@ GEM mime-types-data (3.2026.0414) mini_mime (1.1.5) mini_portile2 (2.8.9) - minitest (6.0.5) + minitest (6.0.6) drb (~> 2.0) prism (~> 1.5) msgpack (1.8.0) From 2e7df2718099fc90eb437af70c96b570410a83f9 Mon Sep 17 00:00:00 2001 From: diondiondion Date: Mon, 11 May 2026 08:21:51 +0200 Subject: [PATCH 063/132] Make search field and tabs sticky on search results page (#38968) --- .../mastodon/features/search/index.tsx | 98 ++++++++++--------- 1 file changed, 54 insertions(+), 44 deletions(-) diff --git a/app/javascript/mastodon/features/search/index.tsx b/app/javascript/mastodon/features/search/index.tsx index 0424ed30c39ee0..724d9c16d61a48 100644 --- a/app/javascript/mastodon/features/search/index.tsx +++ b/app/javascript/mastodon/features/search/index.tsx @@ -222,51 +222,61 @@ export const SearchResults: React.FC<{ multiColumn: boolean }> = ({ title={intl.formatMessage(messages.title, { q })} onClick={handleHeaderClick} multiColumn={multiColumn} - /> - -
    - -
    + appendContent={ + <> +
    + +
    -
    - - - - -
    +
    + + + + +
    + + } + />
    Date: Mon, 11 May 2026 08:22:19 +0200 Subject: [PATCH 064/132] Update dependency hiredis-client to v0.29.0 (#38958) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 37205c70a4ec4b..e48aee1661aa61 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -305,8 +305,8 @@ GEM json highline (3.1.2) reline - hiredis-client (0.28.0) - redis-client (= 0.28.0) + hiredis-client (0.29.0) + redis-client (= 0.29.0) hkdf (0.3.0) htmlentities (4.4.2) http (5.3.1) @@ -709,7 +709,7 @@ GEM redcarpet (3.6.1) redis (5.4.1) redis-client (>= 0.22.0) - redis-client (0.28.0) + redis-client (0.29.0) connection_pool regexp_parser (2.12.0) reline (0.6.3) From c45287c72dfdb83102d342d3d108e6a4a3552282 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 11 May 2026 08:46:36 +0200 Subject: [PATCH 065/132] Update dependency vite to v8.0.11 (#38931) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 192 +++++++++++++++++++++++++----------------------------- 1 file changed, 90 insertions(+), 102 deletions(-) diff --git a/yarn.lock b/yarn.lock index d4a876eced108c..600578379c3dc4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3645,10 +3645,10 @@ __metadata: languageName: node linkType: hard -"@oxc-project/types@npm:=0.127.0, @oxc-project/types@npm:^0.127.0": - version: 0.127.0 - resolution: "@oxc-project/types@npm:0.127.0" - checksum: 10c0/52c0947ac64a9ca119fe971f947e784a35ecd14a072fa3f542a58a5f6c42010b53f2bf92731e39b9899b83c990a9517bbd29d1e5a5b7b489e52616685c6a9278 +"@oxc-project/types@npm:=0.128.0, @oxc-project/types@npm:^0.128.0": + version: 0.128.0 + resolution: "@oxc-project/types@npm:0.128.0" + checksum: 10c0/b6999b1b6b012d979364231a2c0c9204bca814a73f8417234edd39bf352a081779dad72aaf18ac60a676fb904c1408b63553e4e1230d7408a4f885002d66c809 languageName: node linkType: hard @@ -3659,10 +3659,10 @@ __metadata: languageName: node linkType: hard -"@oxc-project/types@npm:^0.128.0": - version: 0.128.0 - resolution: "@oxc-project/types@npm:0.128.0" - checksum: 10c0/b6999b1b6b012d979364231a2c0c9204bca814a73f8417234edd39bf352a081779dad72aaf18ac60a676fb904c1408b63553e4e1230d7408a4f885002d66c809 +"@oxc-project/types@npm:^0.127.0": + version: 0.127.0 + resolution: "@oxc-project/types@npm:0.127.0" + checksum: 10c0/52c0947ac64a9ca119fe971f947e784a35ecd14a072fa3f542a58a5f6c42010b53f2bf92731e39b9899b83c990a9517bbd29d1e5a5b7b489e52616685c6a9278 languageName: node linkType: hard @@ -4070,93 +4070,93 @@ __metadata: languageName: node linkType: hard -"@rolldown/binding-android-arm64@npm:1.0.0-rc.17": - version: 1.0.0-rc.17 - resolution: "@rolldown/binding-android-arm64@npm:1.0.0-rc.17" +"@rolldown/binding-android-arm64@npm:1.0.0-rc.18": + version: 1.0.0-rc.18 + resolution: "@rolldown/binding-android-arm64@npm:1.0.0-rc.18" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@rolldown/binding-darwin-arm64@npm:1.0.0-rc.17": - version: 1.0.0-rc.17 - resolution: "@rolldown/binding-darwin-arm64@npm:1.0.0-rc.17" +"@rolldown/binding-darwin-arm64@npm:1.0.0-rc.18": + version: 1.0.0-rc.18 + resolution: "@rolldown/binding-darwin-arm64@npm:1.0.0-rc.18" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@rolldown/binding-darwin-x64@npm:1.0.0-rc.17": - version: 1.0.0-rc.17 - resolution: "@rolldown/binding-darwin-x64@npm:1.0.0-rc.17" +"@rolldown/binding-darwin-x64@npm:1.0.0-rc.18": + version: 1.0.0-rc.18 + resolution: "@rolldown/binding-darwin-x64@npm:1.0.0-rc.18" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@rolldown/binding-freebsd-x64@npm:1.0.0-rc.17": - version: 1.0.0-rc.17 - resolution: "@rolldown/binding-freebsd-x64@npm:1.0.0-rc.17" +"@rolldown/binding-freebsd-x64@npm:1.0.0-rc.18": + version: 1.0.0-rc.18 + resolution: "@rolldown/binding-freebsd-x64@npm:1.0.0-rc.18" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0-rc.17": - version: 1.0.0-rc.17 - resolution: "@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0-rc.17" +"@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0-rc.18": + version: 1.0.0-rc.18 + resolution: "@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0-rc.18" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@rolldown/binding-linux-arm64-gnu@npm:1.0.0-rc.17": - version: 1.0.0-rc.17 - resolution: "@rolldown/binding-linux-arm64-gnu@npm:1.0.0-rc.17" +"@rolldown/binding-linux-arm64-gnu@npm:1.0.0-rc.18": + version: 1.0.0-rc.18 + resolution: "@rolldown/binding-linux-arm64-gnu@npm:1.0.0-rc.18" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@rolldown/binding-linux-arm64-musl@npm:1.0.0-rc.17": - version: 1.0.0-rc.17 - resolution: "@rolldown/binding-linux-arm64-musl@npm:1.0.0-rc.17" +"@rolldown/binding-linux-arm64-musl@npm:1.0.0-rc.18": + version: 1.0.0-rc.18 + resolution: "@rolldown/binding-linux-arm64-musl@npm:1.0.0-rc.18" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@rolldown/binding-linux-ppc64-gnu@npm:1.0.0-rc.17": - version: 1.0.0-rc.17 - resolution: "@rolldown/binding-linux-ppc64-gnu@npm:1.0.0-rc.17" +"@rolldown/binding-linux-ppc64-gnu@npm:1.0.0-rc.18": + version: 1.0.0-rc.18 + resolution: "@rolldown/binding-linux-ppc64-gnu@npm:1.0.0-rc.18" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard -"@rolldown/binding-linux-s390x-gnu@npm:1.0.0-rc.17": - version: 1.0.0-rc.17 - resolution: "@rolldown/binding-linux-s390x-gnu@npm:1.0.0-rc.17" +"@rolldown/binding-linux-s390x-gnu@npm:1.0.0-rc.18": + version: 1.0.0-rc.18 + resolution: "@rolldown/binding-linux-s390x-gnu@npm:1.0.0-rc.18" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@rolldown/binding-linux-x64-gnu@npm:1.0.0-rc.17": - version: 1.0.0-rc.17 - resolution: "@rolldown/binding-linux-x64-gnu@npm:1.0.0-rc.17" +"@rolldown/binding-linux-x64-gnu@npm:1.0.0-rc.18": + version: 1.0.0-rc.18 + resolution: "@rolldown/binding-linux-x64-gnu@npm:1.0.0-rc.18" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@rolldown/binding-linux-x64-musl@npm:1.0.0-rc.17": - version: 1.0.0-rc.17 - resolution: "@rolldown/binding-linux-x64-musl@npm:1.0.0-rc.17" +"@rolldown/binding-linux-x64-musl@npm:1.0.0-rc.18": + version: 1.0.0-rc.18 + resolution: "@rolldown/binding-linux-x64-musl@npm:1.0.0-rc.18" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@rolldown/binding-openharmony-arm64@npm:1.0.0-rc.17": - version: 1.0.0-rc.17 - resolution: "@rolldown/binding-openharmony-arm64@npm:1.0.0-rc.17" +"@rolldown/binding-openharmony-arm64@npm:1.0.0-rc.18": + version: 1.0.0-rc.18 + resolution: "@rolldown/binding-openharmony-arm64@npm:1.0.0-rc.18" conditions: os=openharmony & cpu=arm64 languageName: node linkType: hard -"@rolldown/binding-wasm32-wasi@npm:1.0.0-rc.17": - version: 1.0.0-rc.17 - resolution: "@rolldown/binding-wasm32-wasi@npm:1.0.0-rc.17" +"@rolldown/binding-wasm32-wasi@npm:1.0.0-rc.18": + version: 1.0.0-rc.18 + resolution: "@rolldown/binding-wasm32-wasi@npm:1.0.0-rc.18" dependencies: "@emnapi/core": "npm:1.10.0" "@emnapi/runtime": "npm:1.10.0" @@ -4165,16 +4165,16 @@ __metadata: languageName: node linkType: hard -"@rolldown/binding-win32-arm64-msvc@npm:1.0.0-rc.17": - version: 1.0.0-rc.17 - resolution: "@rolldown/binding-win32-arm64-msvc@npm:1.0.0-rc.17" +"@rolldown/binding-win32-arm64-msvc@npm:1.0.0-rc.18": + version: 1.0.0-rc.18 + resolution: "@rolldown/binding-win32-arm64-msvc@npm:1.0.0-rc.18" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@rolldown/binding-win32-x64-msvc@npm:1.0.0-rc.17": - version: 1.0.0-rc.17 - resolution: "@rolldown/binding-win32-x64-msvc@npm:1.0.0-rc.17" +"@rolldown/binding-win32-x64-msvc@npm:1.0.0-rc.18": + version: 1.0.0-rc.18 + resolution: "@rolldown/binding-win32-x64-msvc@npm:1.0.0-rc.18" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -4201,10 +4201,10 @@ __metadata: languageName: node linkType: hard -"@rolldown/pluginutils@npm:1.0.0-rc.17": - version: 1.0.0-rc.17 - resolution: "@rolldown/pluginutils@npm:1.0.0-rc.17" - checksum: 10c0/5e840b20cc531910c093c1ca36e550952cf4936465a50d89f0a98fc9d0dfd7d319d06a10a5f4376209d89e9bf4d60af6cc8363ebf0dcc5e60842f7fef438b2f0 +"@rolldown/pluginutils@npm:1.0.0-rc.18": + version: 1.0.0-rc.18 + resolution: "@rolldown/pluginutils@npm:1.0.0-rc.18" + checksum: 10c0/c09f2ebe53762df23b725f452a3f7ee45968824b062a38ec06054e368551e8c5e1874b0ef28143ff3b1b9d6d5ca60177a34378bdd672e899c3646fb8d0bd5aff languageName: node linkType: hard @@ -12581,14 +12581,14 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.0.0, postcss@npm:^8.4.35, postcss@npm:^8.5.10, postcss@npm:^8.5.13": - version: 8.5.13 - resolution: "postcss@npm:8.5.13" +"postcss@npm:^8.0.0, postcss@npm:^8.4.35, postcss@npm:^8.5.13, postcss@npm:^8.5.14": + version: 8.5.14 + resolution: "postcss@npm:8.5.14" dependencies: nanoid: "npm:^3.3.11" picocolors: "npm:^1.1.1" source-map-js: "npm:^1.2.1" - checksum: 10c0/3aa7c8cbdfbfd99b34406a433cef56d164dd135fc9cb9e63d487cc363291f877a55ec7b8ff6ec15348c17c2d98a43be46bfad671e6340403041a3e79f70c2f2f + checksum: 10c0/48138207cf5ef5581be1bfe2cb65ccfe0ac75e43888ba045afc8ed6043d7b56aeb3b9a9fe5b353ff554be943cd0cc15d826ccb991525159175971e5ee8ab0237 languageName: node linkType: hard @@ -13470,27 +13470,27 @@ __metadata: languageName: node linkType: hard -"rolldown@npm:1.0.0-rc.17": - version: 1.0.0-rc.17 - resolution: "rolldown@npm:1.0.0-rc.17" - dependencies: - "@oxc-project/types": "npm:=0.127.0" - "@rolldown/binding-android-arm64": "npm:1.0.0-rc.17" - "@rolldown/binding-darwin-arm64": "npm:1.0.0-rc.17" - "@rolldown/binding-darwin-x64": "npm:1.0.0-rc.17" - "@rolldown/binding-freebsd-x64": "npm:1.0.0-rc.17" - "@rolldown/binding-linux-arm-gnueabihf": "npm:1.0.0-rc.17" - "@rolldown/binding-linux-arm64-gnu": "npm:1.0.0-rc.17" - "@rolldown/binding-linux-arm64-musl": "npm:1.0.0-rc.17" - "@rolldown/binding-linux-ppc64-gnu": "npm:1.0.0-rc.17" - "@rolldown/binding-linux-s390x-gnu": "npm:1.0.0-rc.17" - "@rolldown/binding-linux-x64-gnu": "npm:1.0.0-rc.17" - "@rolldown/binding-linux-x64-musl": "npm:1.0.0-rc.17" - "@rolldown/binding-openharmony-arm64": "npm:1.0.0-rc.17" - "@rolldown/binding-wasm32-wasi": "npm:1.0.0-rc.17" - "@rolldown/binding-win32-arm64-msvc": "npm:1.0.0-rc.17" - "@rolldown/binding-win32-x64-msvc": "npm:1.0.0-rc.17" - "@rolldown/pluginutils": "npm:1.0.0-rc.17" +"rolldown@npm:1.0.0-rc.18": + version: 1.0.0-rc.18 + resolution: "rolldown@npm:1.0.0-rc.18" + dependencies: + "@oxc-project/types": "npm:=0.128.0" + "@rolldown/binding-android-arm64": "npm:1.0.0-rc.18" + "@rolldown/binding-darwin-arm64": "npm:1.0.0-rc.18" + "@rolldown/binding-darwin-x64": "npm:1.0.0-rc.18" + "@rolldown/binding-freebsd-x64": "npm:1.0.0-rc.18" + "@rolldown/binding-linux-arm-gnueabihf": "npm:1.0.0-rc.18" + "@rolldown/binding-linux-arm64-gnu": "npm:1.0.0-rc.18" + "@rolldown/binding-linux-arm64-musl": "npm:1.0.0-rc.18" + "@rolldown/binding-linux-ppc64-gnu": "npm:1.0.0-rc.18" + "@rolldown/binding-linux-s390x-gnu": "npm:1.0.0-rc.18" + "@rolldown/binding-linux-x64-gnu": "npm:1.0.0-rc.18" + "@rolldown/binding-linux-x64-musl": "npm:1.0.0-rc.18" + "@rolldown/binding-openharmony-arm64": "npm:1.0.0-rc.18" + "@rolldown/binding-wasm32-wasi": "npm:1.0.0-rc.18" + "@rolldown/binding-win32-arm64-msvc": "npm:1.0.0-rc.18" + "@rolldown/binding-win32-x64-msvc": "npm:1.0.0-rc.18" + "@rolldown/pluginutils": "npm:1.0.0-rc.18" dependenciesMeta: "@rolldown/binding-android-arm64": optional: true @@ -13524,7 +13524,7 @@ __metadata: optional: true bin: rolldown: bin/cli.mjs - checksum: 10c0/bb99abc62ece4e34edd06d2b8eb9ffb7194dc2f0465a4329bb106cbde3006a10f1575e3580b198b793341109a2109581aed623c537c12b0c3a4ba0d72169b2fb + checksum: 10c0/699b8545a9a8b85ed4c639122163a6f46f84404fd88262bafa9549b01546744db625fd4425fceb4658c888de1671323170de1f837f6f6bb93e243e6e1d48c114 languageName: node linkType: hard @@ -15409,7 +15409,7 @@ __metadata: languageName: node linkType: hard -"unplugin@npm:^2.0.0": +"unplugin@npm:^2.0.0, unplugin@npm:^2.3.5": version: 2.3.11 resolution: "unplugin@npm:2.3.11" dependencies: @@ -15421,18 +15421,6 @@ __metadata: languageName: node linkType: hard -"unplugin@npm:^2.3.5": - version: 2.3.10 - resolution: "unplugin@npm:2.3.10" - dependencies: - "@jridgewell/remapping": "npm:^2.3.5" - acorn: "npm:^8.15.0" - picomatch: "npm:^4.0.3" - webpack-virtual-modules: "npm:^0.6.2" - checksum: 10c0/29dcd738772aeff91c6f0154f156c95c58a37a4674fcb7cc34d6868af763834f0f447a1c3af074818c0c5602baead49bd3b9399a13f0425d69a00a527e58ddda - languageName: node - linkType: hard - "unplugin@npm:^3.0.0": version: 3.0.0 resolution: "unplugin@npm:3.0.0" @@ -15695,18 +15683,18 @@ __metadata: linkType: hard "vite@npm:^6.0.0 || ^7.0.0 || ^8.0.0, vite@npm:^8.0.0": - version: 8.0.10 - resolution: "vite@npm:8.0.10" + version: 8.0.11 + resolution: "vite@npm:8.0.11" dependencies: fsevents: "npm:~2.3.3" lightningcss: "npm:^1.32.0" picomatch: "npm:^4.0.4" - postcss: "npm:^8.5.10" - rolldown: "npm:1.0.0-rc.17" + postcss: "npm:^8.5.14" + rolldown: "npm:1.0.0-rc.18" tinyglobby: "npm:^0.2.16" peerDependencies: "@types/node": ^20.19.0 || >=22.12.0 - "@vitejs/devtools": ^0.1.0 + "@vitejs/devtools": ^0.1.18 esbuild: ^0.27.0 || ^0.28.0 jiti: ">=1.21.0" less: ^4.0.0 @@ -15747,7 +15735,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 10c0/92188b82654f856dbe562a1b679de695bb6ca18c0f43c4c276f84a869fb78e22dedb7c2df83b5617d6afdca979c059d654b5f61a0936a45f49917f352b9325ca + checksum: 10c0/504ec6064761239e7063426dd123ea68cd540cb2d475bf72f5b1062313b9c79984831f56a20891ed5e08b2753d34171ee7a75cbadf9365e975d1f68634f0a10f languageName: node linkType: hard From 817a0a676402ddb42bd91a133a50a08e6169929b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 11 May 2026 08:46:53 +0200 Subject: [PATCH 066/132] Update dependency aws-sdk-s3 to v1.221.0 (#38928) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index e48aee1661aa61..80f5baf3a80768 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -99,7 +99,7 @@ GEM ast (2.4.3) attr_required (1.0.2) aws-eventstream (1.4.0) - aws-partitions (1.1242.0) + aws-partitions (1.1245.0) aws-sdk-core (3.246.0) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.992.0) @@ -111,7 +111,7 @@ GEM aws-sdk-kms (1.124.0) aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-s3 (1.220.0) + aws-sdk-s3 (1.221.0) aws-sdk-core (~> 3, >= 3.244.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.5) From c3a1e04692c49f2f81167c82727a5aead74e9ec0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 11 May 2026 08:47:22 +0200 Subject: [PATCH 067/132] Update dorny/paths-filter digest to d1c1ffe (#38886) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/chromatic.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/chromatic.yml b/.github/workflows/chromatic.yml index 19548c28c1355e..9ead1916dd47bb 100644 --- a/.github/workflows/chromatic.yml +++ b/.github/workflows/chromatic.yml @@ -20,7 +20,7 @@ jobs: with: fetch-depth: 0 - - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3 + - uses: dorny/paths-filter@d1c1ffe0248fe513906c8e24db8ea791d46f8590 # v3 id: filter with: filters: | From e081d5936c716df610606d6cbcfe2909a2046c03 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 11 May 2026 09:02:39 +0200 Subject: [PATCH 068/132] New Crowdin Translations (automated) (#38952) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/be.json | 3 +- app/javascript/mastodon/locales/br.json | 47 +++++++++++ app/javascript/mastodon/locales/da.json | 1 + app/javascript/mastodon/locales/de.json | 1 + app/javascript/mastodon/locales/el.json | 1 + app/javascript/mastodon/locales/es-AR.json | 3 +- app/javascript/mastodon/locales/es-MX.json | 5 +- app/javascript/mastodon/locales/es.json | 3 +- app/javascript/mastodon/locales/et.json | 15 ++-- app/javascript/mastodon/locales/fi.json | 1 + app/javascript/mastodon/locales/fr-CA.json | 1 + app/javascript/mastodon/locales/fr.json | 1 + app/javascript/mastodon/locales/ga.json | 1 + app/javascript/mastodon/locales/gl.json | 1 + app/javascript/mastodon/locales/he.json | 2 +- app/javascript/mastodon/locales/hu.json | 1 + app/javascript/mastodon/locales/is.json | 1 + app/javascript/mastodon/locales/it.json | 1 + app/javascript/mastodon/locales/kab.json | 9 +++ app/javascript/mastodon/locales/nan-TW.json | 18 ++++- app/javascript/mastodon/locales/nl.json | 5 ++ app/javascript/mastodon/locales/ru.json | 35 ++++++++- app/javascript/mastodon/locales/sq.json | 1 + app/javascript/mastodon/locales/sv.json | 21 +++++ app/javascript/mastodon/locales/th.json | 4 +- app/javascript/mastodon/locales/tr.json | 47 +++++------ app/javascript/mastodon/locales/vi.json | 1 + app/javascript/mastodon/locales/zh-CN.json | 1 + app/javascript/mastodon/locales/zh-TW.json | 5 +- config/locales/be.yml | 70 ++++++++++++++++- config/locales/cy.yml | 2 + config/locales/de.yml | 5 +- config/locales/es-MX.yml | 2 +- config/locales/es.yml | 2 +- config/locales/et.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/hu.yml | 7 ++ config/locales/it.yml | 1 + config/locales/nl.yml | 11 +++ config/locales/ru.yml | 37 +++++++++ config/locales/simple_form.be.yml | 5 ++ config/locales/simple_form.hu.yml | 1 + config/locales/simple_form.sv.yml | 5 ++ config/locales/simple_form.tr.yml | 6 +- config/locales/simple_form.zh-TW.yml | 2 +- config/locales/sv.yml | 87 +++++++++++++++++++++ config/locales/tr.yml | 4 +- 50 files changed, 440 insertions(+), 53 deletions(-) diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json index c626154900e0ea..b8b00d79b1dfa9 100644 --- a/app/javascript/mastodon/locales/be.json +++ b/app/javascript/mastodon/locales/be.json @@ -73,7 +73,7 @@ "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": "{name} далучыўся(-лася) да {server}", "account.join_modal.other_today": "Сёння першы дзень {name} на {server}!", "account.join_modal.share.celebrate": "Абагуліць урачысты допіс", "account.join_modal.share.intro": "Абагуліць допіс, каб прадставіцца", @@ -796,6 +796,7 @@ "info_button.label": "Даведка", "info_button.what_is_alt_text": "

    Што такое альтэрнатыўны тэкст?

    Альтэрнатыўны тэкст апісвае відарыс людзям з парушэннем зроку, павольным злучэннем або тым, каму патрэбны дадатковы кантэкст.

    Вы можаце зрабіць відарыс больш дасяжным і зразумелым для ўсіх, напісаўшы зразумелы, сціслы і аб'ектыўны альтэрнатыўны тэкст.

    • Ахоплівайце важныя элементы
    • Тлумачце тэкст на відарысе
    • Карыстайцеся звычайнымі сказамі
    • Пазбягайце залішняй інфармацыі
    • Засяроджвайцеся на тэндэнцыях і ключавых высновах у цяжкіх для разумення візуальных матэрыялах (напрыклад, дыяграмах або картах)
    ", "interaction_modal.action": "Каб узаемадзейнічаць з допісам {name}, Вам трэба ўвайсці ў свой уліковы запіс на любым серверы Mastodon, якім Вы карыстаецеся.", + "interaction_modal.action_follow": "Каб падпісацца на {name}, Вам трэба ўвайсці ў свой уліковы запіс на любым серверы Mastodon, якім Вы карыстаецеся.", "interaction_modal.go": "Перайсці", "interaction_modal.no_account_yet": "Не маеце ўліковага запісу?", "interaction_modal.on_another_server": "На іншым серверы", diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json index 288131bc9f1360..52a801ba8c5339 100644 --- a/app/javascript/mastodon/locales/br.json +++ b/app/javascript/mastodon/locales/br.json @@ -15,8 +15,13 @@ "about.rules": "Reolennoù ar servijer", "account.account_note_header": "Notenn bersonel", "account.add_or_remove_from_list": "Ouzhpenn pe dilemel eus al listennadoù", + "account.badges.admin": "Merour", + "account.badges.blocked": "Stanket", "account.badges.bot": "Robot", + "account.badges.domain_blocked": "Domani stanket", "account.badges.group": "Strollad", + "account.badges.muted": "Kuzhet", + "account.badges.muted_until": "Kuzhet betek {until}", "account.block": "Stankañ @{name}", "account.block_domain": "Stankañ an domani {domain}", "account.block_short": "Stankañ", @@ -33,6 +38,7 @@ "account.familiar_followers_two": "Heuliet gant {name1} ha {name2}", "account.featured": "En a-raok", "account.featured.accounts": "Profiloù", + "account.filters.replies_toggle": "Diskouez ar respontoù", "account.follow": "Heuliañ", "account.follow_back": "Heuliañ d'ho tro", "account.follow_back_short": "Heuliañ d'ho tro", @@ -49,12 +55,20 @@ "account.go_to_profile": "Gwelet ar profil", "account.hide_reblogs": "Kuzh skignadennoù gant @{name}", "account.in_memoriam": "E koun.", + "account.join_modal.years": "{number, plural, two {vloavezh} many {a vloavezhioù} other {bloavezh}}", "account.joined_short": "Amañ abaoe", "account.languages": "Cheñch ar yezhoù koumanantet", "account.link_verified_on": "Gwiriet eo bet perc'hennidigezh al liamm d'an deiziad-mañ : {date}", "account.locked_info": "Prennet eo ar gont-mañ. Gant ar perc'henn e vez dibabet piv a c'hall heuliañ anezhi pe anezhañ.", "account.media": "Media", "account.mention": "Menegiñ @{name}", + "account.menu.block": "Stankañ ar gont", + "account.menu.block_domain": "Stankañ {domain}", + "account.menu.mute": "Kuzhat ar gont", + "account.menu.share": "Rannañ…", + "account.menu.unblock": "Distankañ ar gont", + "account.menu.unblock_domain": "Distankañ {domain}", + "account.menu.unmute": "Diguzhat ar gont", "account.moved_to": "Gant {name} eo bet merket e oa bremañ h·e gont nevez :", "account.mute": "Kuzhat @{name}", "account.mute_notifications_short": "Kuzhat ar c'hemennoù", @@ -62,6 +76,7 @@ "account.muted": "Kuzhet", "account.mutual": "Heuliañ a rit an eil egile", "account.no_bio": "Deskrivadur ebet da gaout.", + "account.node_modal.save": "Enrollañ", "account.open_original_page": "Digeriñ ar bajenn orin", "account.posts": "Embannadurioù", "account.remove_from_followers": "Dilemel {name} eus an heulierien·ezed", @@ -79,6 +94,15 @@ "account.unmute": "Diguzhat @{name}", "account.unmute_notifications_short": "Diguzhat ar c'hemennoù", "account.unmute_short": "Diguzhat", + "account_edit.field_edit_modal.name_hint": "Da skouer \"lec'hienn web personel\"", + "account_edit.image_delete_modal.delete_button": "Dilemel", + "account_edit.image_delete_modal.title": "Dilemel ar skeudenn ?", + "account_edit.image_edit.add_button": "Ouzhpennañ ur skeudenn", + "account_edit.image_edit.remove_button": "Dilemel ar skeudenn", + "account_edit.item_list.delete": "Dilemel {name}", + "account_edit.save": "Enrollañ", + "account_edit.upload_modal.back": "Distreiñ", + "account_edit.upload_modal.step_upload.header": "Dibab ur skeudenn", "account_note.placeholder": "Klikit evit ouzhpennañ un notenn", "admin.dashboard.daily_retention": "Feur azdalc'h an implijerien·ezed dre zeiz goude bezañ lakaet o anv", "admin.dashboard.monthly_retention": "Feur azdalc'h an implijerien·ezed dre viz goude bezañ lakaet o anv", @@ -98,11 +122,13 @@ "alt_text_modal.change_thumbnail": "Kemmañ ar velvenn", "alt_text_modal.done": "Graet", "announcement.announcement": "Kemennad", + "annual_report.nav_item.badge": "Nevez", "annual_report.summary.archetype.die_drei_fragezeichen": "???", "annual_report.summary.close": "Serriñ", "annual_report.summary.most_used_app.most_used_app": "arload muiañ implijet", "annual_report.summary.most_used_hashtag.most_used_hashtag": "ar gerioù-klik implijet ar muiañ", "annual_report.summary.new_posts.new_posts": "embannadurioù nevez", + "annual_report.summary.share_on_mastodon": "Rannañ war Mastodon", "attachments_list.unprocessed": "(ket meret)", "audio.hide": "Kuzhat ar c'hleved", "block_modal.show_less": "Diskouez nebeutoc'h", @@ -127,6 +153,14 @@ "closed_registrations_modal.find_another_server": "Kavout ur servijer all", "closed_registrations_modal.preamble": "Digreizennet eo Mastodon, forzh pelec'h e vefe krouet ho kont e viot gouest da heuliañ hag etreweriañ gant an holl war ar servijer-mañ. Gallout a rit herbec'hiañ anezhañ hoc'h-unan zoken!", "closed_registrations_modal.title": "Enskrivadurioù war Mastodon", + "collections.block_collection_owner": "Stankañ ar gont", + "collections.by_account": "gant {account_handle}", + "collections.collection_description": "Deskrivadur", + "collections.collection_language": "Yezh", + "collections.collection_name": "Anv", + "collections.continue": "Kenderc'hel", + "collections.remove_account": "Dilemel", + "collections.share_short": "Rannañ", "column.about": "Diwar-benn", "column.blocks": "Implijerien·ezed stanket", "column.bookmarks": "Sinedoù", @@ -153,6 +187,7 @@ "column_header.show_settings": "Diskouez an arventennoù", "column_header.unpin": "Dispilhennañ", "column_search.cancel": "Nullañ", + "combobox.loading": "O kargañ", "community.column_settings.local_only": "Nemet lec'hel", "community.column_settings.media_only": "Nemet Mediaoù", "community.column_settings.remote_only": "Nemet a-bell", @@ -183,6 +218,8 @@ "confirmations.delete.confirm": "Dilemel", "confirmations.delete.message": "Ha sur oc'h e fell deoc'h dilemel an embannadur-mañ?", "confirmations.delete.title": "Dilemel an embannadur?", + "confirmations.delete_collection.confirm": "Dilemel", + "confirmations.delete_collection.title": "Dilemel \"{name}\" ?", "confirmations.delete_list.confirm": "Dilemel", "confirmations.delete_list.message": "Ha sur eo hoc'h eus c'hoant da zilemel ar roll-mañ da vat ?", "confirmations.delete_list.title": "Dilemel al listenn?", @@ -194,6 +231,7 @@ "confirmations.discard_edit_media.message": "Bez ez eus kemmoù n'int ket enrollet e deskrivadur ar media pe ar rakwel, nullañ anezho evelato?", "confirmations.follow_to_list.confirm": "Heuliañ hag ouzhpennañ d'al listenn", "confirmations.follow_to_list.title": "Heuliañ an implijer·ez?", + "confirmations.hide_featured_tab.confirm": "Kuzhat an ivinell", "confirmations.logout.confirm": "Digevreañ", "confirmations.logout.message": "Ha sur oc'h e fell deoc'h digevreañ ?", "confirmations.logout.title": "Digevreañ?", @@ -217,6 +255,7 @@ "content_warning.hide": "Kuzhat an embannadur", "content_warning.show": "Diskwel memes tra", "content_warning.show_more": "Diskouez muioc'h", + "content_warning.show_short": "Diskouez", "conversation.delete": "Dilemel ar gaozeadenn", "conversation.mark_as_read": "Merkañ evel lennet", "conversation.open": "Gwelet ar gaozeadenn", @@ -241,6 +280,8 @@ "domain_pill.whats_in_a_handle": "Petra eo an anaouder?", "domain_pill.your_handle": "Hoc'h anaouder:", "dropdown.empty": "Diuzit un dibarzh", + "email_subscriptions.email": "Postel", + "email_subscriptions.form.action": "Koumanantiñ", "embed.instructions": "Enframmit an embannadur-mañ en ho lec’hienn en ur eilañ ar c’hod amañ-dindan.", "embed.preview": "Setu penaos e teuio war wel :", "emoji_button.activity": "Obererezh", @@ -285,6 +326,8 @@ "explore.trending_links": "Keleier", "explore.trending_statuses": "Embannadurioù", "explore.trending_tags": "Gerioù-klik", + "featured_tags.more_items": "+{count}", + "featured_tags.suggestions.add": "Ouzhpennañ", "filter_modal.added.context_mismatch_title": "Kenarroud digenglotus !", "filter_modal.added.expired_title": "Sil deuet d'e dermen !", "filter_modal.added.review_and_configure_title": "Arventennoù ar sil", @@ -311,6 +354,7 @@ "follow_suggestions.view_all": "Gwelet pep tra", "follow_suggestions.who_to_follow": "Piv heuliañ", "followed_tags": "Gerioù-klik heuliet", + "following.title": "Heuliet gant {name}", "footer.about": "Diwar-benn", "footer.about_mastodon": "Diwar-benn Mastodon", "footer.about_server": "Diwar-benn {domain}", @@ -398,6 +442,7 @@ "keyboard_shortcuts.unfocus": "Difokus an dachenn testenn/klask", "keyboard_shortcuts.up": "Pignat er roll", "learn_more_link.got_it": "Mat eo", + "learn_more_link.learn_more": "Gouzout hiroc'h", "lightbox.close": "Serriñ", "lightbox.next": "Da-heul", "lightbox.previous": "A-raok", @@ -526,6 +571,7 @@ "onboarding.follows.search": "Klask", "onboarding.profile.display_name": "Anv diskouezet", "onboarding.profile.display_name_hint": "Hoc'h anv klok pe hoc'h anv fentus…", + "onboarding.profile.finish": "Echuiñ", "onboarding.profile.note": "Berr-ha-berr", "onboarding.profile.note_hint": "Gallout a rit @menegiñ tud all pe #gerioù-klik…", "onboarding.profile.title": "Kefluniañ ar profil", @@ -707,6 +753,7 @@ "tabs_bar.notifications": "Kemennoù", "tabs_bar.publish": "Embannadenn nevez", "tabs_bar.search": "Klask", + "tag.remove": "Dilemel", "terms_of_service.title": "Divizoù implijout", "time_remaining.days": "{number, plural,one {# devezh} other {# a zevezh}} a chom", "time_remaining.hours": "{number, plural, one {# eurvezh} other{# eurvezh}} a chom", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index 06d4d1e2fb1a52..e1e732a0f6f76d 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -796,6 +796,7 @@ "info_button.label": "Hjælp", "info_button.what_is_alt_text": "

    Hvad er alt-tekst?

    Alt-tekst leverer billedbeskrivelser til folk med synsnedsættelser, lav båndbredde-forbindelser eller med ønske om ekstra kontekst.

    Tilgængelighed og forståelse kan forbedres for alle ved at skrive klar, kortfattet og objektiv alt-tekst.

    • Fang vigtige elementer
    • Opsummér tekst i billeder
    • Brug almindelig sætningsstruktur
    • Undgå overflødig information
    • Fokusér på tendenser og centrale resultater i kompleks grafik (såsom diagrammer eller kort)
    ", "interaction_modal.action": "For at interagere med {name}'s indlæg skal du logge ind på din konto på den Mastodon-server, du bruger.", + "interaction_modal.action_follow": "For at følge {name} skal du logge ind på din konto på den Mastodon-server, du bruger.", "interaction_modal.go": "Gå", "interaction_modal.no_account_yet": "Har endnu ingen konto?", "interaction_modal.on_another_server": "På en anden server", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index ff8e5dc38642d6..cf1ff3b8280d72 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -796,6 +796,7 @@ "info_button.label": "Hilfe", "info_button.what_is_alt_text": "

    Was ist Alt-Text?

    Der Alt-Text bietet Bildbeschreibungen für blinde und sehbehinderte Menschen, aber auch für alle mit einer schlechten Internetverbindung und wer einen zusätzlichen Kontext möchten.

    Du kannst die Barrierefreiheit und Verständlichkeit für alle verbessern, indem du eine klare, genaue und objektive Bildbeschreibung erstellst.

    • Erfasse wichtige Elemente
    • Fasse Texte bildlich zusammen
    • Verwende einen korrekten Satzbau
    • Vermeide unwichtige und überflüssige Informationen
    • Konzentriere dich bei komplexen Darstellungen (z. B. bei Diagrammen oder Karten) auf Veränderungen und Schlüsselwörter
    ", "interaction_modal.action": "Melde dich auf deinem Mastodon-Server an, damit du mit dem Beitrag von {name} interagieren kannst.", + "interaction_modal.action_follow": "Melde dich auf deinem Mastodon-Server an, damit du {name} folgen kannst.", "interaction_modal.go": "Los", "interaction_modal.no_account_yet": "Du hast noch kein Konto?", "interaction_modal.on_another_server": "Auf anderem Server", diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 63e215c81c8558..c4994c8ccdeb51 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -796,6 +796,7 @@ "info_button.label": "Βοήθεια", "info_button.what_is_alt_text": "

    Τι είναι το εναλλακτικό κείμενο;

    Το εναλλακτικό κείμενο (alt text) παρέχει περιγραφές εικόνας για άτομα με προβλήματα όρασης, διαδικτυακές συνδέσεις χαμηλής ταχύτητας ή για άτομα που αναζητούν επιπλέον περιεχόμενο.

    Μπορείς να βελτιώσεις την προσβασιμότητα και την κατανόηση για όλους, γράφοντας σαφές, συνοπτικό και αντικειμενικό εναλλακτικό κείμενο.

    • Κατέγραψε σημαντικά στοιχεία
    • Συνόψισε το κείμενο στις εικόνες
    • Χρησιμοποίησε δομή κανονικής πρότασης
    • Απέφυγε περιττές πληροφορίες
    • Εστίασε στις τάσεις και τα βασικά ευρήματα σε σύνθετα οπτικά στοιχεία (όπως διαγράμματα ή χάρτες)
    ", "interaction_modal.action": "Για να αλληλεπιδράσετε με την ανάρτηση του/της {name}, πρέπει να συνδεθείτε στον λογαριασμό σας σε οποιονδήποτε διακομιστή Mastodon χρησιμοποιείτε.", + "interaction_modal.action_follow": "Για να ακολουθήσετε τον/την {name}, πρέπει να συνδεθείτε στον λογαριασμό σας σε οποιονδήποτε διακομιστή Mastodon χρησιμοποιείτε.", "interaction_modal.go": "Πάμε", "interaction_modal.no_account_yet": "Δεν έχεις ακόμη λογαριασμό;", "interaction_modal.on_another_server": "Σε διαφορετικό διακομιστή", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 1dcf23a8922cfc..5e3d582879094f 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -79,7 +79,7 @@ "account.join_modal.share.intro": "Compartí un mensaje introductorio", "account.join_modal.share.welcome": "Compartí un mensaje de bienvenida", "account.join_modal.years": "{number, plural, one {# año} other {# años}}", - "account.joined_short": "En este servidor desde el", + "account.joined_short": "Se unió", "account.languages": "Cambiar idiomas suscritos", "account.last_active": "Última actividad", "account.link_verified_on": "La propiedad de este enlace fue verificada el {date}", @@ -796,6 +796,7 @@ "info_button.label": "Ayuda", "info_button.what_is_alt_text": "

    ¿Qué es el texto alternativo?

    El texto alternativo proporciona descripciones de las imágenes para personas con dificultades visuales, conexiones con escaso ancho de banda o que buscan un contexto adicional.

    Podés mejorar la accesibilidad y la comprensión para todos escribiendo un texto alternativo claro, conciso y objetivo.

    • Captura los elementos importantes.
    • Resumí el texto en imágenes.
    • Usá una estructura de frases normal.
    • Evitá la información redundante.
    • Focalizate en las tendencias y conclusiones clave de los elementos visuales complejos (como diagramas o mapas).
    ", "interaction_modal.action": "Para interactuar con el mensaje de {name}, tenés que iniciar sesión en la cuenta del servidor de Mastodon que usés.", + "interaction_modal.action_follow": "Para seguir a {name}, tenés que iniciar sesión en tu cuenta de cualquier servidor de Mastodon que usés.", "interaction_modal.go": "Ir", "interaction_modal.no_account_yet": "¿Todavía no tenés cuenta?", "interaction_modal.on_another_server": "En un servidor diferente", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index 37de85f2c484cb..d587bfbd516a71 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -405,8 +405,8 @@ "collections.hints.accounts_counter": "{count}/{max} cuentas", "collections.last_updated_at": "Última actualización: {date}", "collections.list.collections_with_count": "{count, plural,one {# Colección} other {# Colecciones}}", - "collections.list.created_by_author": "Creado por {name}", - "collections.list.created_by_you": "Creado por ti", + "collections.list.created_by_author": "Creada por {name}", + "collections.list.created_by_you": "Creadas por ti", "collections.list.featuring_you": "Con tu partipación", "collections.manage_accounts": "Administrar cuentas", "collections.mark_as_sensitive": "Marcar como sensible", @@ -796,6 +796,7 @@ "info_button.label": "Ayuda", "info_button.what_is_alt_text": "

    ¿Qué es el texto alternativo?

    El texto alternativo ofrece descripciones de las imágenes para individuos con dificultades visuales, conexiones de bajo ancho de banda o que buscan un contexto adicional.

    Puedes mejorar la accesibilidad y la comprensión para todos redactando un texto alternativo claro, breve y objetivo.

    • Captura los elementos clave.
    • Resume el texto en imágenes.
    • Utiliza una estructura de oraciones estándar.
    • Evita la información repetitiva.
    • Enfócate en las tendencias y conclusiones principales de los elementos visuales complejos (como gráficos o mapas).
    ", "interaction_modal.action": "Para interactuar con la publicación de {name}, debes iniciar sesión en tu cuenta en cualquier servidor Mastodon que utilices.", + "interaction_modal.action_follow": "Para seguir a {name}, debes iniciar sesión en tu cuenta en el servidor de Mastodon que utilices.", "interaction_modal.go": "Ir", "interaction_modal.no_account_yet": "¿Aún no tienes una cuenta?", "interaction_modal.on_another_server": "En un servidor diferente", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 33d9704ffa5d44..904bdc8b3c58fe 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -336,7 +336,7 @@ "block_modal.they_cant_see_posts": "No podrá ver tu contenido y tú no podrás ver el suyo.", "block_modal.they_will_know": "Pueden ver que están bloqueados.", "block_modal.title": "¿Bloquear usuario?", - "block_modal.you_wont_see_mentions": "No podrás ver publicaciones de otros donde sea mencionado.", + "block_modal.you_wont_see_mentions": "No podrás ver publicaciones de otras personas que lo mencionen.", "boost_modal.combo": "Puedes hacer clic en {combo} para saltar este aviso la próxima vez", "boost_modal.reblog": "¿Impulsar la publicación?", "boost_modal.undo_reblog": "¿Dejar de impulsar la publicación?", @@ -796,6 +796,7 @@ "info_button.label": "Ayuda", "info_button.what_is_alt_text": "

    ¿Qué es el texto alternativo?

    El texto alternativo proporciona descripciones de las imágenes para personas con problemas de visión, conexiones con poco ancho de banda o que buscan un contexto adicional.

    Puedes mejorar la accesibilidad y la comprensión para todos escribiendo un texto alternativo claro, conciso y objetivo.

    • Captura los elementos importantes.
    • Resume el texto en imágenes.
    • Usa una estructura de frases normal.
    • Evita la información redundante.
    • Céntrate en las tendencias y conclusiones clave de los elementos visuales complejos (como diagramas o mapas).
    ", "interaction_modal.action": "Para interactuar con la publicación de {name}, debes iniciar sesión en tu cuenta en cualquier servidor Mastodon que utilices.", + "interaction_modal.action_follow": "Para seguir a {name}, debes iniciar sesión en tu cuenta en cualquier servidor Mastodon que utilices.", "interaction_modal.go": "Ir", "interaction_modal.no_account_yet": "¿Todavía no tienes cuenta?", "interaction_modal.on_another_server": "En un servidor diferente", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index a24e946f03ac7d..7bb3529b791840 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -113,7 +113,7 @@ "account.name.copy": "Kopeeri kasutajatunnus", "account.name.help.domain": "{domain} on server, kus antud konto koos profiiliga asub ning kust postitused saavad alguse.", "account.name.help.domain_self": "{domain} on server, kus sinu konto koos profiiliga asub ning kust sinu postitused saavad alguse.", - "account.name.help.footer": "Nii nagu saad saata e-kirju inimestele, kes kasutavad erinevaid e-posti teenusepakkujaid, saad suhelda ka teiste Mastodoni serverite kasutajatega ning kõigi teistega födiversumi rakendustest.", + "account.name.help.footer": "Nii nagu saad saata e-kirju inimestele, kes kasutavad erinevaid e-posti teenusepakkujaid, saad suhelda ka teiste Mastodoni serverite kasutajatega ning kõigi teistega muudest Födiversumi rakendustest.", "account.name.help.header": "Kasutajatunnus on nagu e-posti aadress", "account.name.help.username": "{username} on selle konto kasutajanimi tema serveris. Kellelgi teisel mõnes muus serveris võib olla sama kasutajanimi.", "account.name.help.username_self": "{username} on sinu kasutajanimi selles serveris. Kellelgi teisel mõnes muus serveris võib olla sama kasutajanimi.", @@ -162,7 +162,7 @@ "account_edit.custom_fields.edit_label": "Muuda välja", "account_edit.custom_fields.placeholder": "Lisa oma asesõnad, välislingid või mistahes muu, mida soovid jagada.", "account_edit.custom_fields.reorder_button": "Järjesta välju ümber", - "account_edit.custom_fields.tip_content": "Saad Mastodoni konto usaldusväärsust hõlpsasti suurendada, kinnitades lingid lehtedele, mis sulle kuuluvad.", + "account_edit.custom_fields.tip_content": "Saad Mastodoni konto usaldusväärsust hõlpsasti suurendada, verifitseerides lingid veebisaitidele, mis sulle kuuluvad.", "account_edit.custom_fields.tip_title": "Soovitus: Kinnitatud linkide lisamine", "account_edit.custom_fields.title": "Kohandatud väljad", "account_edit.custom_fields.verified_hint": "Kuidas lisada kinnitatud linki?", @@ -216,16 +216,16 @@ "account_edit.name_modal.add_title": "Lisa kuvatav nimi", "account_edit.name_modal.edit_title": "Muuda kuvatavat nime", "account_edit.profile_tab.button_label": "Kohanda", - "account_edit.profile_tab.hint.description": "Need seaded määravad, mida kasutajad näevad {server} ametlikes rakendustes, kuid ei pruugi kehtida teiste serverite kasutajate ja kolmandate osapoolte rakenduste puhul.", - "account_edit.profile_tab.hint.title": "Näitamine siiski erinev", + "account_edit.profile_tab.hint.description": "Need seadistused määravad, mida kasutajad näevad {server} serveri ametlikes rakendustes, kuid ei pruugi kehtida teiste serverite kasutajate ja kolmandate osapoolte rakenduste puhul.", + "account_edit.profile_tab.hint.title": "Näitamine siiski võib erineda", "account_edit.profile_tab.show_featured.description": "„Esiletõstetud“ on valikuline vahekaart, kus saad näidata teisi kontosid.", "account_edit.profile_tab.show_featured.title": "Näita vahekaarti „Esiletõstetud“", "account_edit.profile_tab.show_media.description": "„Meedium“ on valikuline vahekaart, mis näitab sinu piltide või videotega postitusi.", "account_edit.profile_tab.show_media.title": "Näita multimeedia vahekaarti", "account_edit.profile_tab.show_media_replies.description": "Sisselülitatuna näitab mediumi vahekaart, nii sinu postitusi kui su vastuseid teiste kasutajate postitustele.", "account_edit.profile_tab.show_media_replies.title": "Kaasa vahekaardile „Meedium“ ka vastused", - "account_edit.profile_tab.show_relations.description": "Näitab profiilis teistele kasutajatele kontosid, mida jälgid, ja su jälgijaid. Inimesed saavad endiselt näha, kas sa neid jälgid.", - "account_edit.profile_tab.show_relations.title": "Näita \"Jälgijad\" ja \"Jälgib\"", + "account_edit.profile_tab.show_relations.description": "Näitab sinu profiilis teistele kasutajatele kontosid, mida jälgid ning su jälgijaid. Inimesed saavad endiselt näha, kas sa neid jälgid.", + "account_edit.profile_tab.show_relations.title": "Näita „Jälgijad“ ja „Jälgib“", "account_edit.profile_tab.subtitle": "Kohanda, kuidas su profiili näidatakse.", "account_edit.profile_tab.title": "Profiili näitamise seaded", "account_edit.save": "Salvesta", @@ -255,7 +255,7 @@ "account_edit_tags.search_placeholder": "Sisesta teemaviide…", "account_edit_tags.suggestions": "Soovitused:", "account_edit_tags.tag_status_count": "{count, plural, one {# postitus} other {# postitust}}", - "account_list.hidden_notice": "See on nähtav ainult sulle. Kui soovid seda loetelu teistele näidata, mine aadressile {page} > {modal} > {field}.", + "account_list.hidden_notice": "See on nähtav ainult sulle. Kui soovid seda loetelu teistele näidata, ava {page} > {modal} > {field}.", "account_list.total": "{total, plural, one {# konto} other {# kontot}}", "account_note.placeholder": "Klõpsa märke lisamiseks", "admin.dashboard.daily_retention": "Kasutajate päevane allesjäämine peale registreerumist", @@ -796,6 +796,7 @@ "info_button.label": "Abi", "info_button.what_is_alt_text": "

    Mis on alt-tekst?

    Alt-tekst pakub pildi kirjeldust nägemispuudega inimeste jaoks või neile, kel on aeglane internet või neile, kes otsivad lisaselgitust

    Saad parandada ligipääsetavust ja mõistmist kõigi jaoks, kirjutades selge, lühida ja objektiivse alt-teksti.

    • Lisa tähtsad elemendid
    • Tee pildil olevast tekstist kokkuvõte
    • Kasuta reeglipärast lausestruktuuri
    • Väldi ebaolulist infot
    • Keskendu keerukate vaadete puhul (näiteks diagrammid ja kaardid) puhul trendidele ja põhiseostele
    ", "interaction_modal.action": "Suhestumaks kasutaja {name} postitusega palun logi sisse oma Mastodoni kasutajakontoga sõltumata serverist, mida kasutad.", + "interaction_modal.action_follow": "Jälgimaks kasutajat {name} pead sisenema oma kontole mistahes Mastodoni serveris, mida kasutad.", "interaction_modal.go": "Mine", "interaction_modal.no_account_yet": "Pole veel kontot?", "interaction_modal.on_another_server": "Teises serveris", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 9e0ae04782f543..915702c5426502 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -796,6 +796,7 @@ "info_button.label": "Ohje", "info_button.what_is_alt_text": "

    Mikä tekstivastine on?

    Tekstivastine tarjoaa kuvauksen kuvista ihmisille, joilla on näkövamma tai matalan kaistanleveyden yhteys tai jotka kaipaavat lisäkontekstia.

    Voit parantaa saavutettavuutta ja ymmärrettävyyttä kaikkien näkökulmasta kirjoittamalla selkeän, tiiviin ja objektiivisen tekstivastineen.

    • Ota mukaan tärkeät elementit
    • Tiivistä kuvissa oleva teksti
    • Käytä tavallisia lauserakenteita
    • Vältä turhaa tietoa
    • Keskity trendeihin ja keskeisiin tuloksiin monimutkaisissa visuaalisissa esityksissä (kuten kaavioissa tai kartoissa)
    ", "interaction_modal.action": "Jotta voit olla vuorovaikutuksessa käyttäjän {name} julkaisun kanssa, sinun on kirjauduttava sisään tilillesi käyttämälläsi Mastodon-palvelimella.", + "interaction_modal.action_follow": "Jotta voit seurata käyttäjää {name}, sinun on kirjauduttava sisään tilillesi käyttämälläsi Mastodon-palvelimella.", "interaction_modal.go": "Siirry", "interaction_modal.no_account_yet": "Eikö sinulla ole vielä tiliä?", "interaction_modal.on_another_server": "Toisella palvelimella", diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json index ae3b58d7375e5d..597c50f79d5cd9 100644 --- a/app/javascript/mastodon/locales/fr-CA.json +++ b/app/javascript/mastodon/locales/fr-CA.json @@ -796,6 +796,7 @@ "info_button.label": "Aide", "info_button.what_is_alt_text": "

    Qu'est-ce que le texte alternatif ?

    Un texte alternatif fournit une description de l'image aux personnes avec un handicap visuel ou une connexion limitée ou qui souhaitent avoir un contexte supplémentaire.

    Vous pouvez améliorer l'accessibilité et la compression de tout le monde en écrivant un texte alternatif clair, concis et objectif.

    • Identifiez les éléments importants
    • Résumez le texte présent à l'image
    • Utilisez une structure de phrase normale
    • Évitez les informations redondantes
    • Pour les visuels complexes (tels que les diagrammes ou les cartes), indiquez les tendances ou points-clés
    ", "interaction_modal.action": "Pour interagir avec le message de {name}, vous devez vous connecter à votre compte sur le serveur Mastodon que vous utilisez.", + "interaction_modal.action_follow": "Pour suivre {name}, vous devez vous connecter à votre compte sur le serveur Mastodon que vous utilisez.", "interaction_modal.go": "Valider", "interaction_modal.no_account_yet": "Vous n'avez pas encore de compte ?", "interaction_modal.on_another_server": "Sur un autre serveur", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 678c0f5906f7df..c8445294661f8d 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -796,6 +796,7 @@ "info_button.label": "Aide", "info_button.what_is_alt_text": "

    Qu'est-ce que le texte alternatif ?

    Un texte alternatif fournit une description de l'image aux personnes avec un handicap visuel ou une connexion limitée ou qui souhaitent avoir un contexte supplémentaire.

    Vous pouvez améliorer l'accessibilité et la compression de tout le monde en écrivant un texte alternatif clair, concis et objectif.

    • Identifiez les éléments importants
    • Résumez le texte présent à l'image
    • Utilisez une structure de phrase normale
    • Évitez les informations redondantes
    • Pour les visuels complexes (tels que les diagrammes ou les cartes), indiquez les tendances ou points-clés
    ", "interaction_modal.action": "Pour interagir avec le message de {name}, vous devez vous connecter à votre compte sur le serveur Mastodon que vous utilisez.", + "interaction_modal.action_follow": "Pour suivre {name}, vous devez vous connecter à votre compte sur le serveur Mastodon que vous utilisez.", "interaction_modal.go": "Valider", "interaction_modal.no_account_yet": "Vous n'avez pas encore de compte ?", "interaction_modal.on_another_server": "Sur un autre serveur", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 41fdb1ec397bde..954e8b933973c6 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -796,6 +796,7 @@ "info_button.label": "Cabhrú", "info_button.what_is_alt_text": "

    Cad is téacs altach ann?

    Soláthraíonn téacs Alt cur síos ar íomhánna do dhaoine le lagú radhairc, naisc íseal-bandaleithead, nó daoine atá ag lorg comhthéacs breise.

    Is féidir leat inrochtaineacht agus tuiscint a fheabhsú do chách trí théacs alt soiléir, gonta, oibiachtúil a scríobh.

    • Glac gnéithe tábhachtacha
    • Déan achoimre ar théacs in íomhánna
    • Úsáid struchtúr abairtí rialta
    • li>
    • Seachain faisnéis iomarcach
    • Fócas ar threochtaí agus ar phríomhthorthaí i bhfíseanna casta (amhail léaráidí nó léarscáileanna)
    ", "interaction_modal.action": "Chun idirghníomhú le post {name}, ní mór duit síniú isteach i do chuntas ar cibé freastalaí Mastodon a úsáideann tú.", + "interaction_modal.action_follow": "Chun {name} a leanúint, ní mór duit síniú isteach i do chuntas ar cibé freastalaí Mastodon a úsáideann tú.", "interaction_modal.go": "Téigh", "interaction_modal.no_account_yet": "Níl cuntas agat fós?", "interaction_modal.on_another_server": "Ar freastalaí eile", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 16d6e58ce344ac..819f7380af1e0c 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -796,6 +796,7 @@ "info_button.label": "Axuda", "info_button.what_is_alt_text": "

    Que é o Texto Alternativo?

    O Text Alt proporciona a descrición das imaxes para as persoas con deficiencias visuais, conexións a internet de baixa calidade ou para engadir contexto ás mesmas.

    Podes mellorar a accesibilidade e a comprensión da publicación ao escribir un texto alternativo claro, conciso e obxectivo.

    • Identifica os elementos importantes
    • Inclúe o texto que apareza nas imaxes
    • Utiliza sintaxe estándar nas frases
    • Evita información redundante
    • Céntrate nos elementos principais cando sexan imaxes complexas (como diagramas ou mapas)
    ", "interaction_modal.action": "Para interactuar coa publicación de {name} debes iniciar sesión no servidor Mastodon que utilices.", + "interaction_modal.action_follow": "Para seguir a {name} tes que iniciar sesión no servidor de Mastodon que utilices.", "interaction_modal.go": "Ir", "interaction_modal.no_account_yet": "Aínda non tes unha conta?", "interaction_modal.on_another_server": "Nun servidor diferente", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 8deaff385edfe4..596d93517c1bd6 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -277,7 +277,7 @@ "alt_text_modal.cancel": "ביטול", "alt_text_modal.change_thumbnail": "החלפת התמונה הממוזערת", "alt_text_modal.describe_for_people_with_hearing_impairments": "תיאור התוכן לכבדי שמיעה…", - "alt_text_modal.describe_for_people_with_visual_impairments": "תיאור התוכן לפגועי ראיה…", + "alt_text_modal.describe_for_people_with_visual_impairments": "תיאור התוכן לבעלי לקויות ראייה …", "alt_text_modal.done": "סיום", "announcement.announcement": "הכרזה", "annual_report.announcement.action_build": "בנה לי את הסיכומודון שלי", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index dffd687febad74..7a19c49dbb6307 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -796,6 +796,7 @@ "info_button.label": "Súgó", "info_button.what_is_alt_text": "

    Mi az alternatív szöveg?

    Az alternatív szöveg képleírást biztosít a látássérültek, az alacsony sávszélességű kapcsolatokkal rendelkezők, illetve a bővebb kontextust keresők számára.

    Az egyértelmű, tömör és objektív alternatív szöveg megírásával mindenki számára akadálymentesebb és könnyebben érthető lesz.

    • Rögzítsd a fontos elemeket.
    • Foglald össze szövegesen a képeket.
    • Használj szabályos mondatszerkezetet.
    • Kerüld a felesleges információkat.
    • Összetett vizuális ábrákon (például diagramokon vagy térképeken) összpontosíts a trendekre és a legfontosabb megállapításokra.
    ", "interaction_modal.action": "Hogy interakcióba lépj {name} bejegyzésével, be kell jelentkezned a fiókodba az általad használt Mastodon kiszolgálón.", + "interaction_modal.action_follow": "Hogy kövesd {name} felhasználót, be kell jelentkezned a fiókodba az általad használt Mastodon-kiszolgálón.", "interaction_modal.go": "Ugrás", "interaction_modal.no_account_yet": "Még nincs fiókod?", "interaction_modal.on_another_server": "Másik kiszolgálón", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index 17426d2a1ccad2..932ed00e28986a 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -796,6 +796,7 @@ "info_button.label": "Hjálp", "info_button.what_is_alt_text": "

    Hvað er alt-texti?

    Hjálpartexti eða ALT-myndatexti inniheldur lýsingu á myndefni fyrir fólk með ýmsar gerðir sjónskerðingar, fyrir tengingar með litla bandbreidd, eða til að gefa nánara samhengi fyrir myndefni.

    Þú getur með þessu bætt almennt aðgengi og aukið skilning á efni sem þú birtir með því að skrifa skýran, skorinortan og hlutlægan alt-texta til vara.

    • Lýstu mikilvægum atriðum
    • \\n
    • Hafðu yfirlit með þeim texta sem sést í myndum
    • Notaðu eðlilega setningaskipan
    • Forðastu óþarfar upplýsingar
    • Leggðu áherslu á aðalatriði í flóknu myndefni (eins og línuritum eða landakortum)
    ", "interaction_modal.action": "Til að eiga við færsluna frá {name} þarftu að skrá þig inn á reikning þinn á þeim Mastodon-þjóni sem þú notar.", + "interaction_modal.action_follow": "Til að fylgjast með {name}, þá þarftu að skrá þig inn á þann Mastodon-netþjón sem þú notar.", "interaction_modal.go": "Áfram", "interaction_modal.no_account_yet": "Ertu ekki ennþá með aðgang?", "interaction_modal.on_another_server": "Á öðrum netþjóni", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index ee04a53f8b7457..971236fd79eadc 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -796,6 +796,7 @@ "info_button.label": "Aiuto", "info_button.what_is_alt_text": "

    Cos'è il testo alternativo?

    Il testo alternativo fornisce descrizioni delle immagini per le persone con disturbi della vista, connessioni a bassa larghezza di banda o per coloro che cercano un contesto aggiuntivo.

    È possibile migliorare l'accessibilità e la comprensione per tutti scrivendo un testo alt chiaro, conciso e obiettivo.

    • Cattura elementi importanti
    • Riassume il testo nelle immagini
    • Usa la struttura delle frasi regolari
    • Evita le informazioni ridondanti
    • Concentrati sulle tendenze e i risultati chiave in immagini complesse (come diagrammi o mappe)
    ", "interaction_modal.action": "Per interagire con il post di {name}, devi accedere al tuo account su qualsiasi server Mastodon tu utilizzi.", + "interaction_modal.action_follow": "Per seguire {name}, devi accedere al tuo account su qualunque server Mastodon tu utilizzi.", "interaction_modal.go": "Vai", "interaction_modal.no_account_yet": "Non hai ancora un account?", "interaction_modal.on_another_server": "Su un altro server", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index 37ddb9d07bb6e3..f705776ca0f35f 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -91,6 +91,7 @@ "account.menu.report": "Cetki ɣef umiḍan-a", "account.menu.share": "Zuzer…", "account.menu.unblock": "Kkes asewḥel i umiḍan", + "account.menu.unmute": "Kkes asgugem ɣef umiḍan", "account.moved_to": "{name} yenna-d dakken amiḍan-is amaynut yuɣal :", "account.mute": "Sgugem @{name}", "account.mute_notifications_short": "Susem ilɣa", @@ -109,6 +110,7 @@ "account.note.edit_button": "Ẓreg", "account.note.title": "Tazmilt tudmawant (tettbin-d i kečč·mm kan)", "account.open_original_page": "Ldi asebter anasli", + "account.pending": "Yettraǧu", "account.posts": "Tisuffaɣ", "account.remove_from_followers": "Kkes {name} seg ineḍfaren", "account.report": "Cetki ɣef @{name}", @@ -433,6 +435,7 @@ "domain_pill.your_server": "D axxam-inek·inem umḍin, anda i zedɣent akk tsuffaɣ-ik·im. Ur k·m-yeεǧib ara wa? Ssenfel-d iqeddacen melmi i ak·m-yehwa, awi-d daɣen ineḍfaren-ik·im yid-k·m.", "dropdown.empty": "Fren taxtiṛit", "email_subscriptions.email": "Imayl", + "email_subscriptions.submitted.title": "Yiwen n usurif nniḍen", "email_subscriptions.validation.email.invalid": "Tansa imayl d tarameɣtut", "embed.instructions": "Ẓẓu addad-agi deg usmel-inek·inem s wenɣal n tangalt yellan sdaw-agi.", "embed.preview": "Akka ara d-iban:", @@ -618,9 +621,11 @@ "lists.done": "Immed", "lists.edit": "Ẓreg tabdart", "lists.find_users_to_add": "Af-d iseqdacen ara ternuḍ", + "lists.list_members_count": "{count, plural, one {# n uɛeggal} other {# n iɛeggalen}}", "lists.list_name": "Isem n tebdart", "lists.new_list_name": "Isem n tebdart tamaynut", "lists.no_lists_yet": "Ulac tibdarin akka tura.", + "lists.no_members_yet": "Ulac iɛeggalen akka tura.", "lists.no_results_found": "Ulac igemmad.", "lists.remove_member": "Kkes", "lists.replies_policy.followed": "Kra n useqdac i yettwaḍefren", @@ -747,15 +752,19 @@ "notifications_permission_banner.enable": "Rmed ilɣa n tnarit", "notifications_permission_banner.title": "Ur zeggel acemma", "onboarding.follows.back": "Uɣal", + "onboarding.follows.next": "Uḍfir: Swel amaɣnu-inek⋅inem", "onboarding.follows.search": "Nadi", "onboarding.follows.title": "Ḍfeṛ walbɛaḍ i wakken ad ttebdud", + "onboarding.profile.discoverable": "Err amaɣnu-inu ad yettwaf", "onboarding.profile.display_name": "Isem ara d-yettwaskanen", "onboarding.profile.display_name_hint": "Isem-ik·im ummid neɣ isem-ik·im n uqeṣṣer…", + "onboarding.profile.finish": "Kfu", "onboarding.profile.note": "Tameddurt", "onboarding.profile.note_hint": "Tzemreḍ ad d-@tbedreḍ imdanen niḍen neɣ #ihacṭagen …", "onboarding.profile.title": "Asbadu n umaɣnu", "onboarding.profile.upload_avatar": "Sali tugna n umaɣnu", "onboarding.profile.upload_header": "Sali tacacit n umaɣnu", + "password_confirmation.mismatching": "Asentem n wawal n uɛeddi ur yemṣada ara", "picture_in_picture.restore": "Err-it amkan-is", "poll.closed": "Tfukk", "poll.refresh": "Smiren", diff --git a/app/javascript/mastodon/locales/nan-TW.json b/app/javascript/mastodon/locales/nan-TW.json index fc3de78cc4132c..740931123de0d5 100644 --- a/app/javascript/mastodon/locales/nan-TW.json +++ b/app/javascript/mastodon/locales/nan-TW.json @@ -218,8 +218,8 @@ "account_edit.profile_tab.button_label": "自訂", "account_edit.profile_tab.hint.description": "Tsiah ê設定自訂用官方應用程式佇 {server} 所看著ê內容,毋kú in可能無用佇別ê服侍器或者用第三方應用程式ê用者。", "account_edit.profile_tab.hint.title": "展示結果uân-á可能無kâng款", - "account_edit.profile_tab.show_featured.description": "「精選ê」是通揀ê分頁,其中lí ē當展示別ê口座。", - "account_edit.profile_tab.show_featured.title": "顯示「精選ê」分頁", + "account_edit.profile_tab.show_featured.description": "「特色ê」是通揀ê分頁,其中lí ē當展示別ê口座。", + "account_edit.profile_tab.show_featured.title": "顯示「特色ê」分頁", "account_edit.profile_tab.show_media.description": "「媒體」是通揀ê分頁,展示lí包含影像kap影片ê PO文。", "account_edit.profile_tab.show_media.title": "展示「媒體」分頁", "account_edit.profile_tab.show_media_replies.description": "若是啟用,媒體分頁展示lí ê PO文kap對別lâng ê PO文ê回應。", @@ -328,11 +328,15 @@ "annual_report.summary.share_on_mastodon": "佇Mastodon分享", "attachments_list.unprocessed": "(Iáu bē處理)", "audio.hide": "Tshàng聲音", + "block_modal.no_collections": "Lín雙方lóng bē當kā對方加入收藏。若是通用,Lín ē自動uì對方ê收藏suá掉。", "block_modal.remote_users_caveat": "Guán ē要求服侍器 {domain} 尊重lí ê決定。但是bô法度保證ta̍k ê服侍器lóng遵守,因為tsi̍t-kuá服侍器huân-sè用別款方法處理封鎖。公開ê PO文可能iáu是ē hōo bô登入ê用者看著。", "block_modal.show_less": "看khah少", "block_modal.show_more": "顯示其他ê內容", + "block_modal.they_cant_mention": "Lín bē當提起、跟tuè,á是引用對方。", + "block_modal.they_cant_see_posts": "In看無lí ê內容,lí mā看無in ê。", "block_modal.they_will_know": "In通看見in hőng封鎖。", "block_modal.title": "Kám beh封鎖用者?", + "block_modal.you_wont_see_mentions": "Lí ē看無別lâng提起in ê PO文。", "boost_modal.combo": "後擺lí thang tshi̍h {combo} 跳過", "boost_modal.reblog": "Kám beh轉PO?", "boost_modal.undo_reblog": "Kám beh取消轉PO?", @@ -412,6 +416,7 @@ "collections.name_length_hint": "限制 40 字", "collections.new_collection": "新ê收藏", "collections.pending_accounts.message": "佇guán leh等對用者iáu是in ê服侍器來ê回應ê時陣,口座可能ē顯示做等beh處理ê狀態。Kan-ta lí ē當看見等beh處理ê口座。", + "collections.pending_accounts.title": "是án-nuá我ē看著leh等審查ê口座?", "collections.remove_account": "Suá掉", "collections.report_collection": "檢舉tsit ê收藏", "collections.revoke_collection_inclusion": "Kā我對收藏內底suá掉", @@ -457,6 +462,7 @@ "column.other_collections": "{name} ê收藏", "column.pins": "釘起來ê PO文", "column.public": "聯邦ê時間線", + "column.your_collections": "Lí ê收藏", "column_back_button.label": "頂頁", "column_header.hide_settings": "Khàm掉設定", "column_header.moveLeft_settings": "Kā欄sak khah倒pîng", @@ -629,8 +635,13 @@ "emoji_button.search_results": "Tshiau-tshuē ê結果", "emoji_button.symbols": "符號", "emoji_button.travel": "旅行kap地點", + "empty_column.account_featured.other": "{acct} iáu無收藏半ê。", "empty_column.account_featured_self.no_collections_button": "建立收藏", + "empty_column.account_featured_self.no_collections_hide_tab": "改做隱藏tsit ê分頁", "empty_column.account_featured_self.pre_collections": "請期待收藏", + "empty_column.account_featured_self.pre_collections_desc": "收藏(佇Mastodon 4.6推出)予lí建立家己ê精選口座列單,來推薦予別lâng。", + "empty_column.account_featured_self.showcase_accounts": "展示lí上kah意ê口座", + "empty_column.account_featured_self.showcase_accounts_desc": "收藏是精選ê口座列單,幫tsān別lâng探索聯邦宇宙ê其他內容。", "empty_column.account_featured_unknown.other": "Tsit ê口座iáu無收藏siánn物。", "empty_column.account_hides_collections": "Tsit位用者選擇無愛公開tsit ê資訊", "empty_column.account_suspended": "口座已經受停止", @@ -638,6 +649,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.featured_in": "Lí iáu buē加添kàu任何收藏。", "empty_column.community": "本站時間線是空ê。緊來公開PO文oh!", "empty_column.direct": "Lí iáu無任何ê私人訊息。Nā是lí送á是收著私人訊息,ē佇tsia顯示。.", "empty_column.disabled_feed": "Tsit ê feed已經hōo lí ê服侍器ê管理員停用。", @@ -784,6 +796,7 @@ "info_button.label": "幫tsān", "info_button.what_is_alt_text": "

    Siánn物是替代文字?

    替代文字kā視覺有障礙、網路速度khah慢,á是beh tshuē頂下文ê lâng,提供圖ê敘述。

    Lí ē當通過寫明白、簡單kap客觀ê替代文字,替逐家改善容易使用性kap幫tsān理解。

    • 掌握重要ê因素
    • 替圖寫摘要ê文字
    • 用規則ê語句結構
    • 避免重複ê資訊
    • 專注佇趨勢kap佇複雜視覺(比如圖表á是地圖)內底tshuē關鍵
    ", "interaction_modal.action": "Nā beh hām {name} ê PO文互動,lí愛佇lí所用ê Mastodon服侍器登入口座。", + "interaction_modal.action_follow": "Nā beh跟tuè {name},lí著佇lí所用ê服侍器登入lí ê口座。", "interaction_modal.go": "行", "interaction_modal.no_account_yet": "Tsit-má iáu bô口座?", "interaction_modal.on_another_server": "佇無kâng ê服侍器", @@ -915,6 +928,7 @@ "navigation_panel.expand_followed_tags": "Kā跟tuè ê hashtag目錄thián開", "navigation_panel.expand_lists": "Thián開列單目錄", "not_signed_in_indicator.not_signed_in": "Lí著登入來接近使用tsit ê資源。", + "notification.added_to_collection": "{name} kā lí加kàu收藏", "notification.admin.report": "{name} kā {target} 檢舉ah", "notification.admin.report_account": "{name} kā {target} 所寫ê {count, plural, other {# 篇PO文}}檢舉ah,原因是:{category}", "notification.admin.report_account_other": "{name} kā {target} 所寫ê {count, plural, other {# 篇PO文}}檢舉ah", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 5d363fc1970a4f..12a010465ed5d3 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -113,6 +113,7 @@ "account.name.copy": "Fediverse-adres kopiëren", "account.name.help.domain": "{domain} is de server waar zich het profiel en de berichten van de gebruiker bevinden.", "account.name.help.domain_self": "{domain} is jouw server waar zich jouw profiel en berichten bevinden.", + "account.name.help.footer": "Net zoals je e-mails kunt verzenden naar mensen met verschillende e-mailproviders, kun je interactie hebben met mensen op andere Mastodon-servers en met iedereen op andere Fediverse-apps.", "account.name.help.header": "Een fediverse-adres valt te vergelijken met een e-mailadres", "account.name.help.username": "{username} is de gebruikersnaam van het account op hun server. Het is mogelijk dat iemand anders dezelfde gebruikersnaam op een andere server heeft.", "account.name.help.username_self": "{username} is jouw gebruikersnaam op deze server. Het is mogelijk dat iemand anders dezelfde gebruikersnaam op een andere server heeft.", @@ -327,8 +328,10 @@ "block_modal.remote_users_caveat": "We vragen de server {domain} om je besluit te respecteren. Het naleven hiervan is echter niet gegarandeerd, omdat sommige servers blokkades anders kunnen interpreteren. Openbare berichten zijn mogelijk nog steeds zichtbaar voor niet-ingelogde gebruikers.", "block_modal.show_less": "Minder tonen", "block_modal.show_more": "Meer tonen", + "block_modal.they_cant_see_posts": "De persoon kan jouw berichten niet zien en jij ook niet diens berichten.", "block_modal.they_will_know": "De persoon kan zien dat die wordt geblokkeerd.", "block_modal.title": "Gebruiker blokkeren?", + "block_modal.you_wont_see_mentions": "Je ziet geen berichten van anderen meer die dit account vermelden.", "boost_modal.combo": "Je kunt {combo} klikken om dit de volgende keer over te slaan", "boost_modal.reblog": "Bericht boosten?", "boost_modal.undo_reblog": "Bericht niet langer boosten?", @@ -391,6 +394,7 @@ "collections.detail.share": "Deze verzameling delen", "collections.detail.you_are_in_this_collection": "Je wordt in deze verzameling uitgelicht", "collections.edit_details": "Gegevens bewerken", + "collections.error_loading_collections": "Er is een fout opgetreden bij het laden van deze verzamelingen.", "collections.hidden_accounts_description": "Je hebt {count, plural, one {deze gebruiker} other {deze gebruikers}} geblokkeerd", "collections.hidden_accounts_link": "{count, plural, one {# verborgen account} other {# verborgen accounts}}", "collections.hints.accounts_counter": "{count}/{max} accounts", @@ -786,6 +790,7 @@ "info_button.label": "Help", "info_button.what_is_alt_text": "

    Wat is alt-tekst?

    Alt-tekst biedt beschrijvingen van afbeeldingen voor mensen met een visuele beperking, voor verbindingen met lage internetsnelheid of mensen die op zoek zijn naar extra context.

    Je kunt de toegankelijkheid en de begrijpelijkheid voor iedereen verbeteren door heldere, beknopte en objectieve alt-teksten te schrijven.

    • Leg belangrijke elementen vast
    • Tekst in afbeeldingen samenvatten
    • Een eenvoudige zinsbouw gebruiken
    • Overbodige informatie vermijden
    • Voor complexe diagrammen of kaarten alleen op trends en belangrijke bevindingen focussen
    ", "interaction_modal.action": "Wanneer je met het bericht van {name} interactie wil hebben, moet je met jouw account op jouw eigen Mastodon-server inloggen.", + "interaction_modal.action_follow": "Om {name} te volgen, moet je met jouw account op jouw eigen Mastodon-server inloggen.", "interaction_modal.go": "Ga", "interaction_modal.no_account_yet": "Heb je nog geen account?", "interaction_modal.on_another_server": "Op een andere server", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 4b8c14d28cea9d..354655b2e02e86 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -18,7 +18,7 @@ "account.add_note": "Добавить заметку для себя", "account.add_or_remove_from_list": "Добавить в списки", "account.badges.admin": "Администратор", - "account.badges.blocked": "Заблокирован(а)", + "account.badges.blocked": "Заблокирован", "account.badges.bot": "Бот", "account.badges.domain_blocked": "Домен заблокирован", "account.badges.group": "Группа", @@ -43,6 +43,7 @@ "account.featured": "Рекомендации", "account.featured.accounts": "Профили", "account.featured.collections": "Подборки", + "account.featured.new_collection": "Новая коллекция", "account.field_overflow": "Показать полностью", "account.filters.all": "Всё вместе", "account.filters.boosts_toggle": "Показывать продвижения", @@ -68,6 +69,15 @@ "account.go_to_profile": "Перейти к профилю", "account.hide_reblogs": "Скрыть продвижения от @{name}", "account.in_memoriam": "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.share.celebrate": "Поделиться праздничным сообщением", + "account.join_modal.share.intro": "Поделиться сообщением", + "account.join_modal.share.welcome": "Поделиться приветственным сообщением", + "account.join_modal.years": "{number, plural, one {year} few {years} many {years} other {years}}", "account.joined_short": "Дата регистрации", "account.languages": "Изменить языки подписки", "account.last_active": "Последняя активность", @@ -99,8 +109,10 @@ "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": "Так же как вы можете отправлять письма людям, использующим различных поставщиков электронной почты, вы можете взаимодействовать с людьми на других серверах Mastodon, и с кем угодно в других приложениях Fediverse.", "account.name.help.header": "Адрес пользователя напоминает адрес электронной почты", "account.name.help.username": "{username} — это имя пользователя на сервере. На разных серверах могут встречаться люди с тем же именем пользователя.", "account.name.help.username_self": "{username} — это ваше имя пользователя на этом сервере. На других серверах могут встречаться люди с тем же именем пользователя.", @@ -115,6 +127,7 @@ "account.note.edit_button": "Редактировать", "account.note.title": "Заметка для себя (никто, кроме вас, её не видит)", "account.open_original_page": "Открыть исходную страницу", + "account.pending": "Ожидают одобрения", "account.posts": "Посты", "account.remove_from_followers": "Убрать {name} из подписчиков", "account.report": "Пожаловаться на @{name}", @@ -276,6 +289,7 @@ "annual_report.summary.archetype.title_self": "Ваш архетип", "annual_report.summary.close": "Закрыть", "annual_report.summary.copy_link": "Скопировать ссылку", + "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.new_posts.new_posts": "новых постов", @@ -314,6 +328,7 @@ "closed_registrations_modal.find_another_server": "Найти другой сервер", "closed_registrations_modal.preamble": "Mastodon децентрализован, поэтому независимо от того, где именно вы зарегистрируетесь, вы сможете подписываться на кого угодно и взаимодействовать с кем угодно на этом сервере. Вы даже можете создать свой собственный сервер!", "closed_registrations_modal.title": "Регистрация в Mastodon", + "collection.share_modal.share_link_label": "Поделиться ссылкой", "collection.share_modal.share_via_post": "Опубликовать в Mastodon", "collection.share_modal.share_via_system": "Поделиться…", "collection.share_modal.title": "Поделиться подборкой", @@ -321,7 +336,9 @@ "collection.share_template_other": "Зацените эту замечательную подборку: {link}", "collection.share_template_own": "Зацените мою новую подборку: {link}", "collections.account_count": "{count, plural, one {# пользователь} few {# пользователя} other {# пользователей}}", + "collections.accounts.empty_editor_title": "Никто еще не в этой коллекции", "collections.accounts.empty_title": "В этой подборке пока никого нет", + "collections.block_collection_owner": "Заблокировать аккаунт", "collections.by_account": "составил(а) {account_handle}", "collections.collection_description": "Описание", "collections.collection_language": "Язык", @@ -331,6 +348,7 @@ "collections.confirm_account_removal": "Вы уверены, что хотите исключить этого пользователя из подборки?", "collections.content_warning": "Предупреждение о содержании", "collections.continue": "Продолжить", + "collections.copy_link": "Копировать ссылку", "collections.create.accounts_title": "Кого вы выберете для этой подборки?", "collections.create.basic_details_title": "Основная информация", "collections.create.steps": "Шаг {step}/{total}", @@ -338,18 +356,26 @@ "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.share": "Поделитесь этой коллекцией", "collections.edit_details": "Изменить параметры", "collections.last_updated_at": "Последнее обновление: {date}", "collections.manage_accounts": "Управление аккаунтами", "collections.name_length_hint": "Не более 40 символов", "collections.new_collection": "Новая подборка", + "collections.remove_account": "Удалить", "collections.report_collection": "Пожаловаться на подборку", "collections.revoke_collection_inclusion": "Исключить себя из этой подборки", "collections.revoke_inclusion.confirmation": "Вы были исключены из подборки «{collection}»", "collections.search_accounts_max_reached": "Вы добавили максимальное количество пользователей", "collections.sensitive": "Чувствительный", + "collections.share_short": "Поделиться", + "collections.suggestions.can_not_add": "Не может быть добавлено", + "collections.suggestions.must_follow": "Сначала нужно подписаться", "collections.topic_hint": "Добавьте хештег, чтобы помочь другим пользователям лучше понять главную тему этой подборки.", + "collections.unlisted_collections_with_count": "Неперечисленные коллекции ({count})", "collections.view_collection": "Посмотреть коллекцию", "collections.visibility_public": "Публичная", "collections.visibility_title": "Видимость", @@ -376,6 +402,7 @@ "column.notifications": "Уведомления", "column.pins": "Закреплённые посты", "column.public": "Глобальная лента", + "column.your_collections": "Ваша коллекция", "column_back_button.label": "Назад", "column_header.hide_settings": "Скрыть настройки", "column_header.moveLeft_settings": "Передвинуть колонку влево", @@ -440,6 +467,8 @@ "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.title": "Скрыть вкладку 'Избранное'?", "confirmations.logout.confirm": "Выйти", "confirmations.logout.message": "Вы уверены, что хотите выйти?", "confirmations.logout.title": "Выйти?", @@ -542,6 +571,9 @@ "emoji_button.search_results": "Результаты поиска", "emoji_button.symbols": "Символы", "emoji_button.travel": "Путешествия и места", + "empty_column.account_featured_self.no_collections_button": "Создать коллекцию", + "empty_column.account_featured_self.pre_collections": "Будьте в курсе коллекций", + "empty_column.account_featured_self.pre_collections_desc": "Коллекции (входящие в Mastodon 4.6) позволяют создавать собственные курируемые списки учетных записей, чтобы рекомендовать другим пользователям.", "empty_column.account_hides_collections": "Пользователь предпочёл не раскрывать эту информацию", "empty_column.account_suspended": "Учётная запись заблокирована", "empty_column.account_timeline": "Здесь нет постов!", @@ -1090,6 +1122,7 @@ "server_banner.active_users": "активные пользователи", "server_banner.administered_by": "Управляется:", "server_banner.is_one_of_many": "{domain} — это один из многих независимых серверов Mastodon, которые вы можете использовать, чтобы присоединиться к сети Fediverse.", + "server_banner.more_about_this_server": "Больше об этом сервере", "server_banner.server_stats": "Статистика сервера:", "sign_in_banner.create_account": "Зарегистрироваться", "sign_in_banner.follow_anyone": "Подписывайтесь на кого угодно в федивёрсе и читайте ленту в хронологическом порядке. Никаких алгоритмов, рекламы и кликбейта.", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 4c952ba57d017a..a9e91599072d00 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -791,6 +791,7 @@ "info_button.label": "Ndihmë", "info_button.what_is_alt_text": "

    Ç’është teksti alternativ?

    Teksti alternativ jep përshkrime figurash për persona me mangësi në të parët, lidhje me gjerësi bande të ulët, ose për ata që duan kontekst shtesë.

    Mund të përmirësoni përdorimin nga persona me aftësi të kufizuara dhe kuptimin për këto, duke shkruar tekst alternativ të qartë, konciz dhe objektiv.

    • Rrokni elementët e rëndësishëm
    • Përmblidhni tekst në figura
    • Përdorni strukturë të rregullt fjalish
    • Shmangni përsëritje informacioni
    • Në aspekte pamore të ndërlikuara (fjala vjen, diagrame ose harta) përqendrohuni te prirje dhe gjetje gjërash kyçe
    ", "interaction_modal.action": "Që të ndërveproni me postimin nga {name}, lypset të bëni hyrjen në llogarinë tuaj, ose në çfarëdo shërbyesi Mastodon që përdorni.", + "interaction_modal.action_follow": "Që të ndiqni {name}, lypset të bëni hyrjen te llogaria juaj në cilindo shërbyes Mastodon që përdorni.", "interaction_modal.go": "Shko", "interaction_modal.no_account_yet": "S’keni ende një llogari?", "interaction_modal.on_another_server": "Në një tjetër shërbyes", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index ec504852ae79f6..75e6118859a544 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -113,6 +113,7 @@ "account.name.copy": "Kopiera handtag", "account.name.help.domain": "{domain} är servern som är värd för användarens profil och inlägg.", "account.name.help.domain_self": "{domain} är din server som är värd för användarens profil och inlägg.", + "account.name.help.footer": "Precis som du kan skicka e-post till personer som använder olika e-postleverantörer, kan du interagera med personer på andra Mastodon-servrar, och med vem som helst på andra Fedivers-appar.", "account.name.help.header": "Ett handtag är som en e-postadress", "account.name.help.username": "{username} är kontots användarnamn på deras server. Någon på en annan server kan ha samma användarnamn.", "account.name.help.username_self": "{username} är ditt användarnamn på denna server. Någon på en annan server kan ha samma användarnamn.", @@ -127,6 +128,7 @@ "account.note.edit_button": "Redigera", "account.note.title": "Personlig anteckning (endast synlig för dig)", "account.open_original_page": "Öppna den ursprungliga sidan", + "account.pending": "Väntande", "account.posts": "Inlägg", "account.remove_from_followers": "Ta bort {name} från följare", "account.report": "Rapportera @{name}", @@ -222,6 +224,10 @@ "account_edit.profile_tab.show_media.title": "Visa fliken ‘Media’", "account_edit.profile_tab.show_media_replies.description": "När den är aktiverad visar fliken Media både dina inlägg och svar på andras inlägg.", "account_edit.profile_tab.show_media_replies.title": "Inkludera svar på fliken Media", + "account_edit.profile_tab.show_relations.description": "Visar konton som du följer och följare till andra användare i din profil. Folk kommer fortfarande att kunna se om du följer dem.", + "account_edit.profile_tab.show_relations.title": "Visa ‘Följare’ och ‘Följer’", + "account_edit.profile_tab.subtitle": "Anpassa hur din profil visas.", + "account_edit.profile_tab.title": "Inställningar för profilvisning", "account_edit.save": "Spara", "account_edit.upload_modal.back": "Tillbaka", "account_edit.upload_modal.done": "Färdig", @@ -249,6 +255,7 @@ "account_edit_tags.search_placeholder": "Ange en hashtagg…", "account_edit_tags.suggestions": "Förslag:", "account_edit_tags.tag_status_count": "{count, plural, one {# inlägg} other {# inlägg}}", + "account_list.hidden_notice": "Detta är endast synligt för dig. För att visa denna lista för andra, gå till {page} > {modal} > {field}.", "account_list.total": "{total, plural, one {# konto} other {# konton}}", "account_note.placeholder": "Klicka för att lägga till anteckning", "admin.dashboard.daily_retention": "Användarlojalitet per dag efter registrering", @@ -321,11 +328,15 @@ "annual_report.summary.share_on_mastodon": "Dela på Mastodon", "attachments_list.unprocessed": "(obehandlad)", "audio.hide": "Dölj audio", + "block_modal.no_collections": "Varken av er kan lägga till varandra i samlingar. Ni kommer automatiskt att tas bort från varandras befintliga samlingar, om de finns.", "block_modal.remote_users_caveat": "Vi kommer att be servern {domain} att respektera ditt beslut. Dock garanteras inte efterlevnad eftersom vissa servrar kan hantera blockeringar på olika sätt. Offentliga inlägg kan fortfarande vara synliga för icke-inloggade användare.", "block_modal.show_less": "Visa mindre", "block_modal.show_more": "Visa mer", + "block_modal.they_cant_mention": "Ni kan inte nämna, följa eller citera varandra.", + "block_modal.they_cant_see_posts": "De kan inte se ditt innehåll och du kommer inte att se deras.", "block_modal.they_will_know": "De kan se att de är blockerade.", "block_modal.title": "Blockera användare?", + "block_modal.you_wont_see_mentions": "Du kommer inte att se inlägg från andra som nämner dem.", "boost_modal.combo": "Du kan trycka på {combo} för att hoppa över detta nästa gång", "boost_modal.reblog": "Boosta inlägg?", "boost_modal.undo_reblog": "Avboosta inlägg?", @@ -388,10 +399,15 @@ "collections.detail.share": "Dela denna samling", "collections.detail.you_are_in_this_collection": "Du är med i denna samling", "collections.edit_details": "Redigera detaljer", + "collections.error_loading_collections": "Det uppstod ett fel när dessa samlingar skulle laddas.", "collections.hidden_accounts_description": "Du har blockerat eller tystat {count, plural, one {denna användare} other {dessa användare}}", "collections.hidden_accounts_link": "{count, plural, one {# gömt konto} other {# gömda konton}}", "collections.hints.accounts_counter": "{count}/{max} konton", "collections.last_updated_at": "Senast uppdaterad: {date}", + "collections.list.collections_with_count": "{count, plural, one {# samling} other {# samlingar}}", + "collections.list.created_by_author": "Skapad av {name}", + "collections.list.created_by_you": "Skapad av dig", + "collections.list.featuring_you": "Med dig", "collections.manage_accounts": "Hantera konton", "collections.mark_as_sensitive": "Markera som känsligt innehåll", "collections.mark_as_sensitive_hint": "Döljer samlingens beskrivning och konton bakom en innehållsvarning. Samlingsnamnet kommer fortfarande att vara synligt.", @@ -399,6 +415,8 @@ "collections.maximum_collection_count_reached": "Du har skapat det maximala antalet samlingar", "collections.name_length_hint": "Begränsat till 40 tecken", "collections.new_collection": "Ny samling", + "collections.pending_accounts.message": "Konton kan visas som väntande när vi väntar på ett svar från användaren eller deras server. Endast du kan se väntande konton.", + "collections.pending_accounts.title": "Varför ser jag väntande konton?", "collections.remove_account": "Ta bort", "collections.report_collection": "Rapportera denna samling", "collections.revoke_collection_inclusion": "Ta bort mig själv från denna samling", @@ -444,6 +462,7 @@ "column.other_collections": "Samlingar av {name}", "column.pins": "Fästa inlägg", "column.public": "Global tidslinje", + "column.your_collections": "Dina samlingar", "column_back_button.label": "Tillbaka", "column_header.hide_settings": "Dölj inställningar", "column_header.moveLeft_settings": "Flytta kolumnen åt vänster", @@ -630,6 +649,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.featured_in": "Du har inte lagts till i några samlingar än.", "empty_column.community": "Den lokala tidslinjen är tom. Skriv något offentligt för att sätta bollen i rullning!", "empty_column.direct": "Du har inga privata omnämnanden. När du skickar eller tar emot ett direktmeddelande kommer det att visas här.", "empty_column.disabled_feed": "Detta flöde har inaktiverats av dina serveradministratörer.", @@ -776,6 +796,7 @@ "info_button.label": "Hjälp", "info_button.what_is_alt_text": "

    Vad är alt-text?

    alt-text ger bildbeskrivningar för personer med synnedsättning, anslutningar med låg bandbredd eller de som söker extra sammanhang.

    Du kan förbättra tillgängligheten och förståelsen för alla genom att skriva en tydlig, koncis och objektiv alt-text.

    • Fånga viktiga element
    • Sammanfatta text i bilder
    • Använd vanlig meningsstruktur
    • Undvik överflödig information
    • Fokus på trender och viktiga resultat i komplexa bilder (som diagram eller kartor)
    ", "interaction_modal.action": "För att interagera med {name}s inlägg måste du logga in på ditt konto på vilken Mastodon-server du än använder.", + "interaction_modal.action_follow": "För att följa {name} måste du logga in på ditt konto för den Mastodon-server du använder.", "interaction_modal.go": "Vidare", "interaction_modal.no_account_yet": "Har du inget konto än?", "interaction_modal.on_another_server": "På en annan server", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 9b4ffa3e409fcd..228ed0c7f19b63 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -16,7 +16,7 @@ "account.account_note_header": "หมายเหตุส่วนบุคคล", "account.add_note": "เพิ่มโน้ตส่วนบุคคล", "account.add_or_remove_from_list": "เพิ่มหรือเอาออกจากรายการ", - "account.badges.admin": "แอดมิน", + "account.badges.admin": "ผู้ดูแล", "account.badges.blocked": "บล็อกอยู่", "account.badges.bot": "อัตโนมัติ", "account.badges.domain_blocked": "โดเมนที่ถูกบล็อก", @@ -65,7 +65,7 @@ "account.locked_info": "มีการตั้งสถานะความเป็นส่วนตัวของบัญชีนี้เป็นล็อคอยู่ เจ้าของตรวจทานผู้ที่สามารถติดตามเขาด้วยตนเอง", "account.media": "สื่อ", "account.mention": "กล่าวถึง @{name}", - "account.menu.remove_follower": "ลบผู้ติดตาม", + "account.menu.remove_follower": "เอาผู้ติดตามออก", "account.moved_to": "{name} ได้ระบุว่าบัญชีใหม่ของเขาในตอนนี้คือ:", "account.mute": "ซ่อน @{name}", "account.mute_notifications_short": "ซ่อนการแจ้งเตือน", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index ff3f829aa8f4d7..f468f88b2b16d9 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -67,17 +67,17 @@ "account.follows.empty": "Bu kullanıcı henüz kimseyi takip etmiyor.", "account.follows_you": "Seni takip ediyor", "account.go_to_profile": "Profile git", - "account.hide_reblogs": "@{name} kişisinin yeniden paylaşımlarını gizle", + "account.hide_reblogs": "@{name} kullanıcısının yeniden paylaşımlarını gizle", "account.in_memoriam": "Hatırasına.", "account.join_modal.day": "Gün", "account.join_modal.me": "{server} sunucusuna katıldığınız tarih", - "account.join_modal.me_anniversary": "Fediversary kutlu olsun! {server} sunucusuna katıldığınız tarih", + "account.join_modal.me_anniversary": "Fediverse Yıldönümünüz kutlu olsun! {server} sunucusuna katıldığınız tarih", "account.join_modal.me_today": "{server} sunucusunda ilk gününüz!", "account.join_modal.other": "{name}, {server} sunucusuna katıldığı tarih", "account.join_modal.other_today": "{name} kişisinin {server} sunucusunda ilk günü!", "account.join_modal.share.celebrate": "Kutlama amaçlı bir paylaşım yapın", "account.join_modal.share.intro": "Tanıtım için bir paylaşım yapın", - "account.join_modal.share.welcome": "Bir hoşgeldiniz paylaşımı yapın", + "account.join_modal.share.welcome": "Bir hoş geldiniz paylaşımı yapın", "account.join_modal.years": "{number, plural, one {yıl} other {yıl}}", "account.joined_short": "Katıldı", "account.languages": "Abone olunan dilleri değiştir", @@ -110,11 +110,11 @@ "account.mute_short": "Sessize al", "account.muted": "Susturuldu", "account.mutual": "Birbirinizi takip ediyorsunuz", - "account.name.copy": "İsmi Kopyala", + "account.name.copy": "Kullanıcı kimliğini kopyala", "account.name.help.domain": "{domain} kullanıcının profilini ve gönderilerini barındıran sunucudur.", "account.name.help.domain_self": "{domain} profilinizi ve gönderilerinizi barındıran sunucunuzdur.", "account.name.help.footer": "Tıpkı farklı e-posta sağlayıcılarını kullanan kişilere e-posta gönderebileceğiniz gibi, diğer Mastodon sunucularındaki kullanıcılarla ve diğer Fediverse uygulamalarındaki herkesle etkileşim kurabilirsiniz.", - "account.name.help.header": "Takma ad bir e-posta adresi gibidir", + "account.name.help.header": "Bir kullanıcı kimliği, e-posta adresi gibidir", "account.name.help.username": "{username} bu hesabın sunucudaki kullanıcı adıdır. Başka bir sunucudaki başka bir kişi de aynı kullanıcı adına sahip olabilir.", "account.name.help.username_self": "{username} bu sunucudaki kullanıcı adınızdır. Başka bir sunucudaki başka bir kullanıcı da aynı kullanıcı adına sahip olabilir.", "account.name_info": "Bu ne anlama geliyor?", @@ -155,13 +155,13 @@ "account_edit.bio.placeholder": "Diğerlerinin sizi tanımasına yardımcı olmak için kısa bir tanıtım ekleyin.", "account_edit.bio.title": "Kişisel bilgiler", "account_edit.bio_modal.add_title": "Kişisel bilgi ekle", - "account_edit.bio_modal.edit_title": "Kişisel bilgiyi düzenle", - "account_edit.column_button": "Tamamlandı", + "account_edit.bio_modal.edit_title": "Biyografiyi düzenle", + "account_edit.column_button": "Tamam", "account_edit.column_title": "Profili Düzenle", "account_edit.custom_fields.add_label": "Alan ekle", "account_edit.custom_fields.edit_label": "Alanı düzenle", - "account_edit.custom_fields.placeholder": "Zamirlerinizi, harici bağlantılarınızı veya paylaşmak istediğiniz diğer bilgileri ekleyin.", - "account_edit.custom_fields.reorder_button": "Alanları yeniden sırala", + "account_edit.custom_fields.placeholder": "Hitaplarınızı, dış bağlantılarınızı veya paylaşmak istediğiniz herhangi bir şeyi ekleyin.", + "account_edit.custom_fields.reorder_button": "Alanları sırala", "account_edit.custom_fields.tip_content": "Sahip olduğunuz web sitelerine bağlantıları doğrulayarak Mastodon hesabınıza kolayca güvenilirlik katabilirsiniz.", "account_edit.custom_fields.tip_title": "İpucu: Doğrulanmış bağlantılar ekleme", "account_edit.custom_fields.title": "Özel alanlar", @@ -187,7 +187,7 @@ "account_edit.field_edit_modal.name_hint": "Örn. \"Kişisel web sitesi\"", "account_edit.field_edit_modal.name_label": "Etiket", "account_edit.field_edit_modal.url_warning": "Bağlantı eklemek için lütfen başlangıca {protocol} ekleyin.", - "account_edit.field_edit_modal.value_hint": "Örn. \"https://example.me\"", + "account_edit.field_edit_modal.value_hint": "Ör. “https://example.me”", "account_edit.field_edit_modal.value_label": "Değer", "account_edit.field_reorder_modal.drag_cancel": "Sürükleme iptal edildi. \"{item}\" alanı bırakıldı.", "account_edit.field_reorder_modal.drag_end": "\"{item}\" alanı bırakıldı.", @@ -332,11 +332,11 @@ "block_modal.remote_users_caveat": "{domain} sunucusundan kararınıza saygı duymasını isteyeceğiz. Ancak, Uymaları garanti değildir çünkü bazı sunucular engellemeyi farklı şekilde yapıyorlar. Herkese açık gönderiler giriş yapmamış kullanıcılara görüntülenmeye devam edebilir.", "block_modal.show_less": "Daha az göster", "block_modal.show_more": "Daha fazla göster", - "block_modal.they_cant_mention": "Birbirinizden bahsedemez, birbirinizi takip edemez veya birbirinizin sözlerini alıntılayamazsınız.", - "block_modal.they_cant_see_posts": "Onlar sizin içeriğinizi göremezler, siz de onlarınkini göremezsiniz.", + "block_modal.they_cant_mention": "Birbirinizden bahsedemez, birbirinizi takip edemez veya birbirinizin gönderilerini alıntılayamazsınız.", + "block_modal.they_cant_see_posts": "Sizin içeriklerinizi göremez, siz de onun içeriklerini göremezsiniz.", "block_modal.they_will_know": "Engellendiklerini görebiliyorlar.", "block_modal.title": "Kullanıcıyı engelle?", - "block_modal.you_wont_see_mentions": "Onlardan bahseden diğer kullanıcıların gönderilerini göremeyeceksiniz.", + "block_modal.you_wont_see_mentions": "Bu kullanıcıdan bahseden diğer kullanıcıların gönderilerini göremeyeceksiniz.", "boost_modal.combo": "Bir daha ki sefere {combo} tuşuna basabilirsin", "boost_modal.reblog": "Gönderiyi yeniden paylaş?", "boost_modal.undo_reblog": "Gönderinin yeniden paylaşımını geri al?", @@ -374,7 +374,7 @@ "collections.accounts.empty_editor_title": "Koleksiyonda henüz kimse yok", "collections.accounts.empty_title": "Bu koleksiyon boş", "collections.block_collection_owner": "Hesabı engelle", - "collections.by_account": "yazan {account_handle}", + "collections.by_account": "Hazırlayan: {account_handle}", "collections.collection_description": "Açıklama", "collections.collection_language": "Dil", "collections.collection_language_none": "Hiçbiri", @@ -563,7 +563,7 @@ "confirmations.unblock.confirm": "Engeli kaldır", "confirmations.unblock.title": "{name} için engel kaldırılsın mı?", "confirmations.unfollow.confirm": "Takibi bırak", - "confirmations.unfollow.title": "{name} takipten çıkılsın mı?", + "confirmations.unfollow.title": "{name} kullanıcısının takibi bırakılsın mı?", "confirmations.withdraw_request.confirm": "İsteği geri çek", "confirmations.withdraw_request.title": "{name} takip isteği geri çekilsin mi?", "content_warning.hide": "Gönderiyi gizle", @@ -599,14 +599,14 @@ "domain_pill.activitypub_lets_connect": "Sadece Mastodon üzerindeki değil, diğer sosyal uygulamalardaki kişilerle de bağlantı kurmanıza ve etkileşmenize olanak sağlar.", "domain_pill.activitypub_like_language": "ActivityPub, Mastodon'un diğer sosyal ağlarla konuşmak için kullandığı dil gibidir.", "domain_pill.server": "Sunucu", - "domain_pill.their_handle": "Tanıtıcıları:", + "domain_pill.their_handle": "Kullanıcı kimliği:", "domain_pill.their_server": "Dijital evleri, tüm gönderilerinin yaşadığı yerdir.", "domain_pill.their_username": "Sunucularındaki tekil tanımlayıcıları. Farklı sunucularda aynı kullanıcı adına sahip kullanıcıları bulmak mümkündür.", "domain_pill.username": "Kullanıcı adı", - "domain_pill.whats_in_a_handle": "Tanıtıcı nedir?", - "domain_pill.who_they_are": "Tanıtıcılar bir kişinin kim olduğunu ve nerede olduğunu söylediği için, sosyal ağındaki insanlarla etkileşime geçebilirsiniz.", - "domain_pill.who_you_are": "Tanıtıcınız kim olduğunuzu ve nerede olduğunuzu söylediği için, sosyal ağındaki insanlar sizinle etkileşime geçebilir.", - "domain_pill.your_handle": "Tanıtıcınız:", + "domain_pill.whats_in_a_handle": "Kullanıcı kimliği nedir?", + "domain_pill.who_they_are": "Kullanıcı kimlikleri bir kişinin kim olduğunu ve nerede olduğunu söylediği için, sosyal ağındaki insanlarla etkileşime geçebilirsiniz.", + "domain_pill.who_you_are": "Kullanıcı kimliğiniz kim olduğunuzu ve nerede olduğunuzu söylediği için, sosyal ağındaki insanlar sizinle etkileşime geçebilir.", + "domain_pill.your_handle": "Kullanıcı kimliğiniz:", "domain_pill.your_server": "Dijital anasayfanız, tüm gönderilerinizin yaşadığı yerdir. Bunu beğenmediniz mi? İstediğiniz zaman sunucularınızı değiştirin ve takipçilerinizi de getirin.", "domain_pill.your_username": "Bu sunucudaki tekil tanımlayıcınız. Farklı sunucularda aynı kullanıcı adına sahip kullanıcıları bulmak mümkündür.", "dropdown.empty": "Bir seçenek seçin", @@ -649,7 +649,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.featured_in": "Henüz herhangi bir koleksiyona atanmadınız.", + "empty_column.collections.featured_in": "Henüz herhangi bir koleksiyona eklenmediniz.", "empty_column.community": "Yerel zaman çizelgesi boş. Daha fazla eğlence için herkese açık bir gönderi paylaşın!", "empty_column.direct": "Henüz doğrudan değinmeniz yok. Bir tane gönderdiğinizde veya aldığınızda burada listelenecek.", "empty_column.disabled_feed": "Bu akış sunucu yöneticileri tarafından devre dışı bırakılmıştır.", @@ -795,7 +795,8 @@ "ignore_notifications_modal.private_mentions_title": "İstenmeyen özel bahsetmelerden gelen bildirimleri yoksay?", "info_button.label": "Yardım", "info_button.what_is_alt_text": "

    Alternatif metin nedir?

    Alternatif metin, görme bozukluğu olan, düşük bant genişliğine sahip bağlantıları olan veya ekstra bağlam arayan kişiler için görsel açıklamaları sağlar.

    Net, sade ve nesnel alternatif metin yazarak herkes için erişilebilirliği ve anlaşılabilirliği iyileştirebilirsiniz.

    • Önemlileri yakalayın
    • Resimlerdeki metni özetleyin
    • Düzenli cümle yapısı kullanın
    • Gereksiz bilgilerden kaçının
    • Karmaşık görsellerde (şemalar veya haritalar gibi) trendlere ve temel bulgulara odaklanın
    ", - "interaction_modal.action": "{name}'nin gönderisiyle etkileşim kurmak için, kullandığınız Mastodon sunucusunda hesabınıza giriş yapmanız gerekir.", + "interaction_modal.action": "{name} kullanıcısının gönderisiyle etkileşim kurmak için, kullandığınız Mastodon sunucusunda hesabınıza giriş yapmanız gerekir.", + "interaction_modal.action_follow": "{name}'i takip etmek için, kullandığınız Mastodon sunucusunda hesabınıza giriş yapmanız gerekir.", "interaction_modal.go": "Git", "interaction_modal.no_account_yet": "Henüz bir hesabınız yok mu?", "interaction_modal.on_another_server": "Farklı bir sunucuda", @@ -1292,7 +1293,7 @@ "status.replyAll": "Konuyu yanıtla", "status.report": "@{name} adlı kişiyi bildir", "status.request_quote": "Alıntılamayı iste", - "status.revoke_quote": "@{name}'nin gönderisinden benim gönderimi kaldır", + "status.revoke_quote": "@{name} kullanıcısının gönderisinden benim gönderimi kaldır", "status.sensitive_warning": "Hassas içerik", "status.share": "Paylaş", "status.show_less_all": "Hepsi için daha az göster", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index de45c3dffe73db..94a99c011a8f41 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -796,6 +796,7 @@ "info_button.label": "Trợ giúp", "info_button.what_is_alt_text": "

    Văn bản thay thế là gì?

    Văn bản thay thế giúp mô tả hình ảnh cho những người khiếm thị, kết nối mạng chậm hoặc đơn giản là bổ sung ngữ cảnh.

    Bạn có thể cải thiện khả năng tiếp cận và giải thích kỹ hơn cho mọi người bằng cách viết văn bản thay thế rõ ràng, ngắn gọn và khách quan.

    • Nắm bắt thành phần quan trọng
    • Tóm tắt văn bản trong hình
    • Dùng cấu trúc câu đơn
    • Tránh giải thích rối rắm
    • Tập trung vào các xu hướng và kết luận chính trong hình ảnh phức tạp (như biểu đồ hoặc bản đồ)
    ", "interaction_modal.action": "Để tương tác với tút của {name}, bạn cần đăng nhập vào tài khoản trên một máy chủ Mastodon bất kỳ.", + "interaction_modal.action_follow": "Để theo dõi {name}, bạn cần đăng nhập vào tài khoản trên một máy chủ Mastodon bất kỳ.", "interaction_modal.go": "Đi", "interaction_modal.no_account_yet": "Chưa có tài khoản?", "interaction_modal.on_another_server": "Trên máy chủ khác", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index f5c6b9aaaf7e4f..c7c33dd27f5832 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -796,6 +796,7 @@ "info_button.label": "帮助", "info_button.what_is_alt_text": "

    什么是替代文本?

    替代文本为视力障碍者、低带宽连接用户或需要额外背景信息的用户提供图像描述。

    通过编写清晰、简洁、客观的替代文本,可以提升所有人的可访问性和理解力。

    • 捕捉重要元素
    • 总结图像中的文本
    • 使用常规句子结构
    • 避免冗余信息
    • 关注复杂视觉内容(如图表或地图)中的趋势和关键信息
    ", "interaction_modal.action": "要和 {name} 的嘟文互动,你需要登录到你在Mastodon服务器上注册的账号。", + "interaction_modal.action_follow": "要关注 {name},你需要登录到你在Mastodon服务器上注册的账号。", "interaction_modal.go": "跳转", "interaction_modal.no_account_yet": "还没有账号?", "interaction_modal.on_another_server": "在另一服务器", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index f984e40939a95c..8d3a97867f0178 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -503,7 +503,7 @@ "compose_form.save_changes": "更新", "compose_form.spoiler.marked": "移除內容警告", "compose_form.spoiler.unmarked": "新增內容警告", - "compose_form.spoiler_placeholder": "內容警告 (可選的)", + "compose_form.spoiler_placeholder": "內容警告 (非必填)", "confirmation_modal.cancel": "取消", "confirmations.block.confirm": "封鎖", "confirmations.delete.confirm": "刪除", @@ -744,7 +744,7 @@ "footer.status": "狀態", "footer.terms_of_service": "服務條款", "form_error.blank": "欄位內容無法為空白。", - "form_field.optional": "(可選的)", + "form_field.optional": "(非必填)", "generic.saved": "已儲存", "getting_started.heading": "開始使用", "hashtag.admin_moderation": "開啟 #{name} 之管理介面", @@ -796,6 +796,7 @@ "info_button.label": "幫助", "info_button.what_is_alt_text": "

    何謂 ALT 說明文字?

    ALT 說明文字為視覺障礙者、低網路頻寬或尋求額外上下文語境的人們提供圖片描述。

    您可以透過撰寫清晰、簡潔及客觀的說明文字以替所有人改善無障礙特性與協助理解。

    • 掌握幾個重要元素
    • 替圖片提供文字摘要
    • 使用常規行文結構
    • 避免冗贅資訊
    • 聚焦於趨勢與複雜視覺中之關鍵(如圖表或地圖)
    ", "interaction_modal.action": "若欲與 {name} 之嘟文互動,您必須登入您帳號所註冊之 Mastodon 伺服器。", + "interaction_modal.action_follow": "若欲跟隨 {name},您必須登入您帳號所註冊之 Mastodon 伺服器。", "interaction_modal.go": "Go!", "interaction_modal.no_account_yet": "仍尚未擁有帳號嗎?", "interaction_modal.on_another_server": "於不同伺服器", diff --git a/config/locales/be.yml b/config/locales/be.yml index c4d99b955b80f9..f5da3b1517c1c8 100644 --- a/config/locales/be.yml +++ b/config/locales/be.yml @@ -504,9 +504,76 @@ be: 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: Апошняя электронная пошта + lead: Уліковыя запісы, якія ўключылі гэту функцыю і маюць падпісчыкаў, будуць паказаныя знізу. + 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: Небяспечная зона + disabled_msg: Падпіскі па электроннай пошце былі паспяхова адключаныя. + index: + disabled: + cannot_be_enabled: Ваш пастаўшчык тэхнічных паслуг не ўключыў гэту функцыю на Вашым серверы. + description: Гэтая функцыя дазваляе вызначаным уліковым запісам дадаваць віджэты ў свае профілі, дазваляючы наведвальнікам без уліковага запісу Mastodon атрымліваць іх допісы па электроннай пошце. + get_started: Пачаць + lead: Дазволіць наведвальнікам атрымліваць па электроннай пошце допісы ад вызначаных уліковых запісаў на гэтым серверы. + title: Рассылкі па электроннай пошце + purged_msg: Усе даныя аб падпісках па электроннай пошце былі сцёртыя. + roles: + accounts: Уліковыя запісы + edit_role: Рэдагаваць ролю + empty: + hint: У нікога няма дазволу карыстацца гэтай функцыяй. + no_roles_added: Ніякая роля не была даданая + lead: Уліковыя запісы з наступнымі ролямі могуць уключыць гэту функцыю ў сваіх профілях. + manage_roles: Кіраваць ролямі + role_name: Назва ролі + title: Ролі + setups: + show: + enable_feature: Уключыць функцыю + important_information: Важная інфармацыя + list: + 1_permission_explanation: Калі гэтая функцыя ўключаная, уліковыя запісы з атрыманымі дазволамі могуць дадаваць форму збору адрасоў электроннай пошты ў свае профілі. + 2_feature_explanation: Калі наведвальнікі зарэгіструюцца на старонцы профілю ўліковага запісу і пацвердзяць сваю падпіску, яны пачнуць атрымліваць абнаўленні па электроннай пошце, калі ўліковы запіс будзе ствараць новыя публічныя допісы. + 3_privacy_policy_warning: Адміністратары сервера атрымаюць доступ да сабраных асабістых даных (адрасоў электроннай пошты). Таму, перад выкарыстаннем гэтай функцыі, неабходна абнавіць палітыку прыватнасці і ўмовы карыстання сервера. + 4_cost_warning: Праз налады хостынгу за электронныя лісты можа спаганяцца плата. Абмяркуйце гэта са сваім хостынг-правайдарам перад уключэннем функцыі, паколькі яна можа значна павялічыць колькасць электронных лістоў, якія адпраўляе Ваш сервер. export_domain_allows: new: title: Імпарт дазволаў дамена @@ -824,6 +891,7 @@ be: manage_custom_emojis: Кіраванне адвольнымі эмодзі manage_custom_emojis_description: Дазваляе кіраваць адвольнымі эмодзі на серверы manage_email_subscriptions: Наладзіць падпіскі па электроннай пошце + manage_email_subscriptions_description: Дазволіць карыстальнікам з гэтым дазволам уключыць функцыю рассылкі па электроннай пошце ў сваіх уліковых запісах manage_federation: Кіраваць федэрацыяй manage_federation_description: Дазваляе карыстальнікам блакіраваць або дазваляць аб'яднанне з іншымі даменамі і кантраляваць магчымасць дастаўкі manage_invites: Кіраванне запрашэннямі @@ -2375,5 +2443,5 @@ be: otp_required: Каб выкарыстоўваць ключы бяспекі, спачатку ўключыце двухфактарную аўтэнтыфікацыю. registered_on: Зарэгістраваны %{date} wrapstodon: - description: Паглядзіце, як %{name} карыстаў(-ла)ся Mastodon у гэтым годзе! + description: Паглядзіце, як %{name} карыстаўся(-лася) Mastodon у гэтым годзе! title: Вынікадон %{year} для %{name} diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 4ef5ef8efa6767..f7179240c1c5e5 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -524,8 +524,10 @@ cy: title: Rhwystro parth e-bost newydd no_email_domain_block_selected: Ni newidiwyd unrhyw rwystro parth e-bost gan na ddewiswyd yr un ohonyn nhw not_permitted: Dim caniatâd + reset: Ailosod resolved_dns_records_hint_html: Mae'r enw parth yn cyd-fynd â'r parthau MX canlynol, sy'n gyfrifol yn y pen draw am dderbyn e-bost. Bydd rhwystro parth MX yn rhwystro cofrestriadau o unrhyw gyfeiriad e-bost sy'n defnyddio'r un parth MX, hyd yn oed os yw'r enw parth gweladwy yn wahanol. Byddwch yn ofalus i beidio â rhwystro'r prif ddarparwyr e-bost. resolved_through_html: Wedi'i ddatrys trwy %{domain} + search: Chwilio title: Parthau e-bost wedi'u rhwystro email_subscriptions: accounts: diff --git a/config/locales/de.yml b/config/locales/de.yml index e6ebce926bdf17..d7b9bc7889854e 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -529,6 +529,7 @@ de: disabled_msg: E-Mail-Abonnements wurden erfolgreich deaktiviert. index: disabled: + cannot_be_enabled: Die Administrator*innen deines Mastodon-Servers haben diese Funktion noch nicht aktiviert. description: Diese Funktion ermöglicht bestimmten Konten, ein Widget zu ihrem Profil hinzuzufügen, damit Gäste ohne Mastodon-Konto deren Beiträge per E-Mail erhalten können. get_started: Loslegen lead: Ermögliche Gästen, Beiträge von ausgewählten Konten dieses Servers per E-Mail zu abonnieren. @@ -542,11 +543,11 @@ de: no_roles_added: Keine Rollen hinzugefügt lead: Die folgenden Rollen berechtigen zur Aktivierung der Funktion. manage_roles: Rollen verwalten - role_name: Name der Rolle + role_name: Rolle title: Rollen setups: show: - enable_feature: Funktionen aktivieren + enable_feature: Funktion aktivieren important_information: Wichtige Informationen list: 1_permission_explanation: Wenn die Funktion aktiviert ist, können alle berechtigten Konten ein E-Mail-Formular zu ihrem Profil hinzufügen. diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index 632bdca3e32a5f..abbeda19134bbf 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -1486,7 +1486,7 @@ es-MX: your_appeal_rejected: Tu apelación ha sido rechazada edit_profile: other: Otro - redesign_body: Ahora puede acceder a la edición del perfil desde la propia página del 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 email_subscription_mailer: diff --git a/config/locales/es.yml b/config/locales/es.yml index 7b81ea0ed4e7f2..b1c584abf77980 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -510,7 +510,7 @@ es: action: Administrar hint: Texto opcional que aparece únicamente en el pie de los correos electrónicos del boletín de noticias title: Texto de pie de página adicional - lead: Los boletines de correo electrónico pueden considerarse correos electrónicos de marketing, dependiendo de las jurisdicciones en las que operas. + lead: Los boletines de correo electrónico podrían considerarse correos electrónicos de marketing, dependiendo de las jurisdicciones en las que operes. privacy_policy: action: Administrar hint: Esta política está enlazada en el pie de cada correo electrónico diff --git a/config/locales/et.yml b/config/locales/et.yml index 4dcf00d2c01ade..79720e784ca6ad 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -484,8 +484,10 @@ et: title: Blokeeri uus e-posti domeen no_email_domain_block_selected: Ühtegi e-posti domeeni blokeeringut ei muudetud, kuna ühtegi ei valitud not_permitted: Ei ole lubatud + reset: Lähtesta resolved_dns_records_hint_html: Domeeninimi lahendatakse järgmistele MX-domeenidele, mis on lõppkokkuvõttes vastutavad e-kirjade vastuvõtmise eest. MX-domeeni blokeerimine blokeerib registreerimise mis tahes e-posti aadressilt, mis kasutab sama MX-domeeni, isegi kui nähtav domeeninimi on erinev. Ole ettevaatlik, et mitte blokeerida peamisi e-posti teenusepakkujaid. resolved_through_html: Lahendatud %{domain} kaudu + search: Otsi title: Blokeeritud e-posti domeenid email_subscriptions: accounts: diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 3d0608f59c90ad..75a1364559ef35 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -484,8 +484,10 @@ fi: title: Estä uusi sähköpostiverkkotunnus no_email_domain_block_selected: Sähköpostiverkkotunnusten estoja ei muutettu, koska yhtäkään ei ollut valittuna not_permitted: Ei sallittu + reset: Palauta resolved_dns_records_hint_html: Verkkotunnusnimi kytkeytyy seuraaviin MX-verkkotunnuksiin, jotka ovat viime kädessä vastuussa sähköpostin vastaanottamisesta. MX-verkkotunnuksen estäminen estää rekisteröitymisen mistä tahansa sähköpostiosoitteesta, joka käyttää samaa MX-verkkotunnusta, vaikka näkyvä verkkotunnuksen nimi olisikin erilainen. Varo estämästä suuria sähköpostipalvelujen tarjoajia. resolved_through_html: Ratkaistu verkkotunnuksen %{domain} kautta + search: Hae title: Estetyt sähköpostiverkkotunnukset email_subscriptions: accounts: diff --git a/config/locales/fr-CA.yml b/config/locales/fr-CA.yml index e5c8f759b79b3a..4fda3c3cc520a4 100644 --- a/config/locales/fr-CA.yml +++ b/config/locales/fr-CA.yml @@ -484,8 +484,10 @@ fr-CA: title: Blocage d'un nouveau domaine de messagerie électronique no_email_domain_block_selected: Aucun blocage de domaine de messagerie n'a été modifié comme aucun n'a été sélectionné not_permitted: Non autorisé + reset: Réinitialiser resolved_dns_records_hint_html: Le nom de domaine est lié aux domaines MX suivants, qui sont responsables de la réception des courriels. Le blocage d'un domaine MX empêchera l'inscription de toute adresse de courriel utilisant le même domaine MX, et ce même si le nom de domaine visible est différent. Veillez à ne pas bloquer les principaux fournisseurs de services de messagerie. resolved_through_html: Résolu par %{domain} + search: Rechercher title: Domaines de messagerie électronique bloqués email_subscriptions: accounts: diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 1a60d7495e82a2..6d48a8beb36bfa 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -484,8 +484,10 @@ fr: title: Blocage d'un nouveau domaine de messagerie électronique no_email_domain_block_selected: Aucun blocage de domaine de messagerie n'a été modifié comme aucun n'a été sélectionné not_permitted: Non autorisé + reset: Réinitialiser resolved_dns_records_hint_html: Le nom de domaine est lié aux domaines MX suivants, qui sont responsables de la réception des courriels. Le blocage d'un domaine MX empêchera l'inscription de toute adresse de courriel utilisant le même domaine MX, et ce même si le nom de domaine visible est différent. Veillez à ne pas bloquer les principaux fournisseurs de services de messagerie. resolved_through_html: Résolu par %{domain} + search: Rechercher title: Domaines de messagerie électronique bloqués email_subscriptions: accounts: diff --git a/config/locales/ga.yml b/config/locales/ga.yml index ba2df405274ccd..6f08f5e8073eef 100644 --- a/config/locales/ga.yml +++ b/config/locales/ga.yml @@ -514,8 +514,10 @@ ga: title: Cuir bac ar fhearann ​​​​ríomhphoist nua no_email_domain_block_selected: Níor athraíodh aon bhloc fearainn ríomhphoist mar níor roghnaíodh ceann ar bith not_permitted: Níl sé ceadaithe + reset: Athshocraigh resolved_dns_records_hint_html: Réitíonn an t-ainm fearainn chuig na fearainn MX seo a leanas, atá freagrach sa deireadh as glacadh le ríomhphost. Má dhéantar fearann ​​MX a bhlocáil, cuirfear bac ar chlárúcháin ó aon seoladh ríomhphoist a úsáideann an fearann ​​MX céanna, fiú má tá an t-ainm fearainn infheicthe difriúil. Bí cúramach gan bac a chur ar phríomhsholáthraithe ríomhphoist. resolved_through_html: Réitithe trí %{domain} + search: Cuardaigh title: Fearainn ríomhphoist bactha email_subscriptions: accounts: diff --git a/config/locales/hu.yml b/config/locales/hu.yml index d2a1303522d7f5..6908318b97cf1a 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -484,8 +484,10 @@ hu: title: Új e-mail-domain tiltása no_email_domain_block_selected: Nem változott meg egy domaintiltás sem, mert semmi sem volt kiválasztva not_permitted: Nem engedélyezett + reset: Visszaállítás resolved_dns_records_hint_html: A domain név a következő MX domain-ekre oldódik fel, melyek valójában fogadják az e-mailt. Az MX domain letiltása minden olyan feliratkozást tiltani fog, melyben az e-mailcím ugyanazt az MX domaint használja, még akkor is, ha a látható domain név más. Légy óvatos, hogy ne tilts le nagy e-mail szolgáltatókat. resolved_through_html: Feloldva %{domain}-n keresztül + search: Keresés title: Tiltott e-mail-domainek email_subscriptions: accounts: @@ -530,6 +532,7 @@ hu: cannot_be_enabled: A műszaki szolgáltató nem kapcsolta be ezt a funkciót a kiszolgálód számára. description: A funkció lehetővé teszi, hogy a megadott fiókok hozzáadjanak egy kisalkalmazást a profiljukhoz, mellyel a Mastodon-fiók nélküli látogatók e-mailben megkaphatják a bejegyzéseiket. get_started: Első lépések + lead: Lehetővé teszi, hogy a látogatók e-mailben kapják meg a kiszolgáló dedikált fiókjainak bejegyzéseit. title: E-mailes hírlevelek purged_msg: Az összes e-mail-feliratkozási adat törlése folyamatban van. roles: @@ -547,7 +550,10 @@ hu: enable_feature: Funkció bekapcsolása important_information: Fontos információk list: + 1_permission_explanation: Ha ez a funkció be van kapcsolva, akkor a kijelölt engedéllyel rendelkező fiókok e-mail-gyűjtési űrlapot adhatnak hozzá a profiljukhoz. + 2_feature_explanation: Amikor a látogatók feliratkoznak egy fiók profiloldalán, és megerősítik a feliratkozásukat, akkor e-mailben értesítést kapnak arról, ha a fiók új nyilvános bejegyzést tesz közzé. 3_privacy_policy_warning: A kiszolgálóadminok hozzá fognak férni a gyűjtött személyazonosításra alkalmas információkhoz (e-mail-címek). Ezért a funkció használata előtt frissíteni kell a kiszolgáló Adatvédelmi szabályzatát és a Felhasználási feltételeket. + 4_cost_warning: A levelek költséget jelenthetnek a kiszolgálótól függően. A bekapcsolása előtt beszélj a szolgáltatóval, mert a funkció drasztikusan növelheti a kiszolgálóról küldött e-mailek számát. export_domain_allows: new: title: Domain engedélyezések importálása @@ -853,6 +859,7 @@ hu: manage_custom_emojis: Egyedi emodzsik kezelése manage_custom_emojis_description: Lehetővé teszi a felhasználó számára, hogy a kiszolgáló egyéni emodzsiait kezelje manage_email_subscriptions: E-mail-feliratkozások kezelése + manage_email_subscriptions_description: Engedélyezés, hogy az ezzel az engedéllyel rendelkező felhasználók bekapcsolhassák a hírlevél funkciót a fiókjukhoz manage_federation: Föderáció kezelése manage_federation_description: Lehetővé teszi a felhasználó számára, hogy más domainnekkel való föderációt engedélyezzen vagy letiltson, illetve szabályozza a kézbesítést manage_invites: Meghívások kezelése diff --git a/config/locales/it.yml b/config/locales/it.yml index 4112e5e9db4716..57b437dae389d9 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -484,6 +484,7 @@ it: title: Blocca nuovo dominio e-mail no_email_domain_block_selected: Nessun blocco di dominio e-mail è stato modificato poiché nessuno è stato selezionato not_permitted: Non consentito + reset: Reset resolved_dns_records_hint_html: Il nome di dominio si risolve nei seguenti domini MX, che sono in ultima analisi responsabili dell'accettazione delle e-mail. Il blocco di un dominio MX bloccherà le registrazioni da qualsiasi indirizzo e-mail che utilizzi lo stesso dominio MX, anche se il nome di dominio visibile è diverso. Fai attenzione a non bloccare i principali provider di posta elettronica. resolved_through_html: Risolto attraverso %{domain} search: Cerca diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 8531bc6de70f58..a5454a4e4ad18e 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -484,8 +484,10 @@ nl: title: Nieuw e-maildomein blokkeren no_email_domain_block_selected: Er werden geen e-maildomeinblokkades gewijzigd, omdat er geen enkele werd geselecteerd not_permitted: Niet toegestaan + reset: Opnieuw resolved_dns_records_hint_html: De domeinnaam slaat op de volgende MX-domeinen die uiteindelijk verantwoordelijk zijn voor het accepteren van e-mail. Het blokkeren van een MX-domein blokkeert aanmeldingen van elk e-mailadres dat hetzelfde MX-domein gebruikt, zelfs als de zichtbare domeinnaam anders is. Pas op dat u geen grote e-mailproviders blokkeert. resolved_through_html: Geblokkeerd via %{domain} + search: Zoeken title: Geblokkeerde e-maildomeinen email_subscriptions: accounts: @@ -496,6 +498,7 @@ nl: 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 subscribers: Abonnees title: Mailinglijsten @@ -507,8 +510,10 @@ nl: action: Beheren hint: Optionele tekst dat alleen onderin de e-mailnieuwsbrief verschijnt title: Aanvullende voettekst + lead: E-mailnieuwsbrieven kunnen, afhankelijk van jouw jurisdictie, als marketingmails worden gezien. privacy_policy: action: Beheren + hint: Dit beleid wordt onderaan elke e-mail gelinkt title: Privacybeleid title: Compliance-instellingen danger_zone: @@ -518,12 +523,18 @@ nl: title: Functionaliteit uitschakelen erase_all_data: action: Gegevens verwijderen + hint: Verwijderd permanent alle e-mails in alle mailinglijsten title: Alle gegevens verwijderen title: Gevarenzone + disabled_msg: Het uitschakelen van e-mailabonnementen is geslaagd. index: disabled: + cannot_be_enabled: Jouw serverbeheerder heeft deze functionaliteit op deze server niet ingeschakeld. + description: Deze functionaliteit staat bepaalde accounts toe om een widget op hun profiel te plaatsen, waardoor bezoekers zonder Mastodon-account hun berichten via e-mail kunnen ontvangen. get_started: Aan de slag + lead: Sta bezoekers toe om berichten van bepaalde accounts op deze server via e-mail te ontvangen. title: E-mailnieuwsbrieven + purged_msg: Alle gegevens van e-mailabonnementen worden verwijderd. roles: accounts: Accounts edit_role: Rol bewerken diff --git a/config/locales/ru.yml b/config/locales/ru.yml index b7b0d4c6096529..acb55b8bf56d0c 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -352,6 +352,7 @@ ru: updated_msg: Объявление отредактировано collections: accounts: Учётные записи + contents: Контент open: Открыть view_publicly: Посмотреть публично critical_update_pending: Доступно критическое обновление @@ -496,9 +497,29 @@ ru: title: Заблокировать домен электронной почты no_email_domain_block_selected: Ничего не изменилось, так как ни один почтовый домен не был выделен not_permitted: Недостаточно прав + reset: Перезагрузить resolved_dns_records_hint_html: Доменное имя указывает на следующие MX-домены, которые в конечном итоге отвечают за приём электронной почты. Блокировка MX-домена приведёт к блокировке регистраций со всех адресов электронной почты, которые используют тот же MX-домен, даже если видимое доменное имя отличается от него. Будьте осторожны, чтобы не заблокировать основных провайдеров электронной почты resolved_through_html: Из DNS-записей домена %{domain} + search: Искать title: Блокировки по домену эл. почты + email_subscriptions: + accounts: + account: Аккаунт + active: Актив + status: Статус + subscribers: Подписчики + danger_zone: + disable_feature: + action: Выключить + title: Опасная зона + roles: + accounts: Аккаунты + edit_role: Изменить роль + role_name: Ролевое имя + title: Роли + setups: + show: + important_information: Важная информация export_domain_allows: new: title: Импорт белого списка доменов @@ -703,6 +724,7 @@ ru: cancel: Отменить category: Категория category_description_html: Причина, по которой были доложены этот пользователь или содержимое, будет указана при коммуникации с фигурирующим в жалобе пользователем + collections: Коллекции (%{count}) comment: none: Нет comment_description_html: 'В дополнение, %{name} добавил(а) следующий комментарий:' @@ -732,11 +754,13 @@ ru: 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: @@ -773,6 +797,7 @@ ru: categories: administration: Администрирование devops: DevOps + email: Email invites: Приглашения moderation: Модерирование special: Особые разрешения @@ -1352,8 +1377,12 @@ ru: invalid_password: Неверный пароль prompt: Введите пароль, чтобы продолжить color_scheme: + auto: Авто dark: Тёмный light: Светлый + contrast: + auto: Авто + high: Высоко crypto: errors: invalid_key: должен быть действительным Ed25519- или Curve25519-ключом @@ -1787,6 +1816,7 @@ ru: update: subject: "%{name} отредактировал(а) пост" notifications: + administration_emails: Email уведомления админа email_events: События для уведомлений по электронной почте email_events_hint: 'Выберите события, для которых вы хотели бы получать уведомления:' number: @@ -1988,6 +2018,9 @@ ru: other: "%{count} видео" boosted_from_html: Продвижение польз. %{acct_link} content_warning: 'Предупреждение о содержании: %{warning}' + content_warnings: + hide: Скрыть пост + show: Показать больше default_language: Тот же, что язык интерфейса disallowed_hashtags: few: 'содержались запрещённые хэштеги: %{tags}' @@ -2004,6 +2037,9 @@ ru: limit: Вы достигли максимального количества постов, которые можно закрепить в профиле ownership: Нельзя закрепить чужой пост reblog: Нельзя закрепить продвижение + quote_error: + not_available: Пост недоступен + revoked: Пост удален автором quote_policies: followers: Только подписчики nobody: Только я @@ -2091,6 +2127,7 @@ ru: webauthn: Электронные ключи unsubscriptions: create: + action: Перейти на главную страницу сервера title: Вы отписались show: action: Отписаться diff --git a/config/locales/simple_form.be.yml b/config/locales/simple_form.be.yml index 44baccb20a3cb2..31d00427a275b1 100644 --- a/config/locales/simple_form.be.yml +++ b/config/locales/simple_form.be.yml @@ -92,6 +92,7 @@ be: closed_registrations_message: Паказваецца, калі рэгістрацыя закрытая content_cache_retention_period: Усе допісы з іншых сервераў (разам з пашырэннямі і адказамі) будуць выдалены праз паказаную колькасць дзён, незалежна ад таго, як лакальны карыстальнік узаемадзейнічаў з гэтымі допісамі. Гэта датычыцца і тых допісаў, якія лакальны карыстальнік пазначыў у закладкі або ўпадабанае. Прыватныя згадванні паміж карыстальнікамі з розных экзэмпляраў сервераў таксама будуць страчаны і іх нельга будзе аднавіць. Выкарыстанне гэтай налады прызначана для экзэмпляраў сервераў спецыяльнага прызначэння і парушае многія чаканні карыстальнікаў пры выкарыстанні ў агульных мэтах. custom_css: Вы можаце прымяняць карыстальніцкія стылі ў вэб-версіі Mastodon. + email_footer_text: Неабавязковы тэкст, які з’яўляецца толькі ў ніжнім калонтытуле рассылкі па электроннай пошце. favicon: WEBP, PNG, GIF ці JPG. Замяняе прадвызначаны favicon Mastodon на ўласны значок. landing_page: Выбірае, якую старонку бачаць новыя наведвальнікі, калі прыходзяць на Ваш сервер. Калі выбераце "Трэнды", тады неабходна іх уключыць у наладах Выяўленне. Калі выбераце "Тутэйшая стужка", тады ў наладах Выяўленне ў налады "Доступ да жывых стужак з лакальнымі допісамі" мусіць стаяць варыянт "Усе". mascot: Замяняе ілюстрацыю ў пашыраным вэб-інтэрфейсе. @@ -296,6 +297,7 @@ be: closed_registrations_message: Уласнае паведамленне, калі рэгістрацыя немагчымая content_cache_retention_period: Перыяд захоўвання змесціва з іншых сервераў custom_css: CSS карыстальніка + email_footer_text: Дадатковы тэкст ніжняга калонтытула favicon: Значок сайта landing_page: Старонка прыбыцця для новых наведвальнікаў local_live_feed_access: Доступ да жывых стужак з лакальнымі допісамі @@ -324,6 +326,9 @@ be: trendable_by_default: Дазваляць трэнды без папярэдняй праверкі trends: Уключыць трэнды wrapstodon: Уключыць Вынікадон + form_email_subscriptions_confirmation: + agreement_email_volume: Я разумею, што ўключэнне гэтай функцыі можа значна павялічыць колькасць электронных лістоў, якія адпраўляе гэты сервер, і што я асабіста адказны за ўсе наступныя выдаткі. + agreement_privacy_and_terms: Я абнавіў(-ла) палітыку прыватнасці і ўмовы карыстання. interactions: must_be_follower: Заблакіраваць апавяшчэнні ад непадпісаных людзей must_be_following: Заблакіраваць апавяшчэнні ад людзей на якіх вы не падпісаны diff --git a/config/locales/simple_form.hu.yml b/config/locales/simple_form.hu.yml index b9582b474e3639..6b2d3d16a3ae71 100644 --- a/config/locales/simple_form.hu.yml +++ b/config/locales/simple_form.hu.yml @@ -325,6 +325,7 @@ hu: trends: Trendek engedélyezése wrapstodon: Wrapstodon engedélyezése form_email_subscriptions_confirmation: + agreement_email_volume: Megértettem, hogy a funkció bekapcsolása jelentősen növeli a kiszolgálóról küldött e-mailek mennyiségét, és a felmerülő költségekért kizárólag én vagyok a felelős. agreement_privacy_and_terms: Frissítettem az Adatvédelmi szabályzatot és a Felhasználási feltételeket. interactions: must_be_follower: Nem követőidtől érkező értesítések tiltása diff --git a/config/locales/simple_form.sv.yml b/config/locales/simple_form.sv.yml index 28aa09f441751d..fca43a84b22ef6 100644 --- a/config/locales/simple_form.sv.yml +++ b/config/locales/simple_form.sv.yml @@ -92,6 +92,7 @@ sv: closed_registrations_message: Visas när nyregistreringar är avstängda content_cache_retention_period: Alla inlägg från andra servrar (inklusive booster och svar) kommer att raderas efter det angivna antalet dagar, utan hänsyn till någon lokal användarinteraktion med dessa inlägg. Detta inkluderar inlägg där en lokal användare har markerat det som bokmärke eller favoriter. Privata omnämnanden mellan användare från olika instanser kommer också att gå förlorade och blir omöjliga att återställa. Användningen av denna inställning är avsedd för specialfall och bryter många användarförväntningar när de implementeras för allmänt bruk. custom_css: Du kan använda anpassade stilar på webbversionen av Mastodon. + email_footer_text: Valfri text som endast visas i sidfoten av e-post om nyhetsbrev. favicon: WEBP, PNG, GIF eller JPG. Används på mobila enheter istället för appens egen ikon. landing_page: Väljer vilken sida nya besökare ser när de först anländer till din server. Om du väljer "Trender" måste trenderna aktiveras i Upptäckningsinställningarna. Om du väljer "Lokalt flöde" måste "Åtkomst till live-flöden med lokala inlägg" sättas till "Alla" i Upptäckningsinställningarna. mascot: Åsidosätter illustrationen i det avancerade webbgränssnittet. @@ -294,6 +295,7 @@ sv: closed_registrations_message: Anpassat meddelande när nyregistreringar inte är tillgängliga content_cache_retention_period: Förvaringsperiod för fjärrinnehåll custom_css: Anpassad CSS + email_footer_text: Ytterligare sidfotstext favicon: Favicon landing_page: Startsida för nya besökare local_live_feed_access: Åtkomst till live-flöden med lokala inlägg @@ -322,6 +324,9 @@ sv: trendable_by_default: Tillåt trender utan föregående granskning trends: Aktivera trender wrapstodon: Aktivera Wrapstodon + form_email_subscriptions_confirmation: + agreement_email_volume: Jag förstår att om denna funktion aktiveras kan volymen av e-post som skickas från servern öka avsevärt och att jag är ensam ansvarig för eventuella kostnader. + agreement_privacy_and_terms: Jag har uppdaterat integritetspolicyn och användarvillkoren. interactions: must_be_follower: Blockera notiser från icke-följare must_be_following: Blockera notiser från personer du inte följer diff --git a/config/locales/simple_form.tr.yml b/config/locales/simple_form.tr.yml index 5b4c1d2a463929..8831c112e934dc 100644 --- a/config/locales/simple_form.tr.yml +++ b/config/locales/simple_form.tr.yml @@ -188,9 +188,9 @@ tr: show_collections: Takipleri ve takipçileri profilde göster unlocked: Yeni takipçileri otomatik olarak kabul et account_alias: - acct: Eski hesabın tanıtıcısı + acct: Eski hesabın kullanıcı kimliği account_migration: - acct: Yeni hesabın tanıtıcısı + acct: Yeni hesabın kullanıcı kimliği account_warning_preset: text: Ön ayarlı metin title: Başlık @@ -323,7 +323,7 @@ tr: thumbnail_description: Küçük resim alternatif metni trendable_by_default: Ön incelemesiz öne çıkanlara izin ver trends: Öne çıkanları etkinleştir - wrapstodon: Wrapstodonu Etkinleştir + wrapstodon: Wrapstodon'u Etkinleştir form_email_subscriptions_confirmation: agreement_email_volume: Bu özelliği etkinleştirmenin sunucudan gönderilen e-posta sayısını önemli ölçüde artırabileceğini ve ortaya çıkabilecek tüm masraflardan tamamen kendimin sorumlu olduğunu anlıyorum. agreement_privacy_and_terms: Gizlilik Politikası ve Hizmet Şartları'nı güncelledim. diff --git a/config/locales/simple_form.zh-TW.yml b/config/locales/simple_form.zh-TW.yml index 616a9acb862f73..7747a034465285 100644 --- a/config/locales/simple_form.zh-TW.yml +++ b/config/locales/simple_form.zh-TW.yml @@ -60,7 +60,7 @@ zh-TW: setting_boost_modal: 當啟用時,轉嘟前將先開啟確認對話框,您能於其變更轉嘟之可見性。 setting_default_quote_policy_private: Mastodon 上發佈之僅限跟隨者嘟文無法被其他使用者引用。 setting_default_quote_policy_unlisted: 當其他人引用您時,他們的嘟文也會自熱門時間軸隱藏。 - setting_default_sensitive: 敏感內容媒體為預設隱藏,且按一下即可重新顯示 + setting_default_sensitive: 將敏感內容媒體預設為隱藏,按一下即可重新顯示 setting_display_media_default: 將標記為敏感內容之多媒體隱藏於警告之後 setting_display_media_hide_all: 將所有多媒體內容隱藏於警告之後 setting_display_media_show_all: 不警告並顯示所有多媒體內容,包括標記為敏感內容者 diff --git a/config/locales/sv.yml b/config/locales/sv.yml index 8771a4921be45d..2bc008b6dbf60c 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -489,6 +489,71 @@ sv: resolved_through_html: Uppslagen genom %{domain} search: Sök title: Blockerade e-postdomäner + 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 + subscribers: Prenumeranter + title: E-postlistor + additional_footer_texts: + show: + title: Ytterligare sidfotstext + compliance_settings: + additional_footer_text: + action: Hantera + hint: Valfri text som endast visas i sidfoten av e-post om nyhetsbrev + title: Ytterligare sidfotstext + lead: E-postnyhetsbrev kan anses vara e-post om marknadsföring, beroende på lagarna där du befinner dig. + privacy_policy: + action: Hantera + hint: Denna policy är länkad i sidfoten av varje e-post + title: Integritetspolicy + title: Inställningar för efterlevnad + danger_zone: + disable_feature: + action: Inaktivera + hint: Stäng av funktionen för alla konton + title: Inaktivera funktion + erase_all_data: + action: Radera data + hint: Raderar permanent alla e-postmeddelanden i alla e-postlistor + title: Radera all data + title: Farozon + disabled_msg: E-postprenumerationer har inaktiverats. + index: + disabled: + cannot_be_enabled: Din tekniska leverantör har inte aktiverat denna funktion för din server. + description: Denna funktion tillåter specificerade konton att lägga till en widget i sina profiler, vilket gör att besökare utan ett Mastodon-konto kan ta emot sina inlägg via e-post. + get_started: Kom igång + lead: Tillåt besökare att ta emot inlägg via e-post från dedikerade konton på denna server. + title: Nyhetsbrev via e-post + purged_msg: All data från e-postprenumerationer tas bort. + roles: + accounts: Konton + edit_role: Redigera roll + empty: + hint: Ingen har behörighet att använda den här funktionen. + no_roles_added: Inga roller tillagda + lead: Konton med följande roller kan aktivera denna funktion på sina profiler. + manage_roles: Hantera roller + role_name: Rollnamn + title: Roller + setups: + show: + enable_feature: Aktivera funktion + important_information: Viktig information + list: + 1_permission_explanation: När denna funktion är aktiverad kan konton med de angivna behörigheterna lägga till ett insamlingsformulär för e-post till sina profiler. + 2_feature_explanation: När besökare registrerar sig på ett kontos profilsida och bekräftar sin prenumeration, kommer de att börja ta emot e-postuppdateringar när kontot skapar nya offentliga inlägg. + 3_privacy_policy_warning: Serveradministratörer kommer att ha tillgång till PII (e-postadresser) samlade. Därmed måste sekretesspolicyn och användarvillkoren för servern uppdateras innan den här funktionen används. + 4_cost_warning: E-postmeddelanden kan medföra en avgift beroende på hosting-setup. Diskutera med ditt webbhotells leverantör innan aktivering, eftersom denna funktion drastiskt kan öka mängden e-post som skickas från din server. export_domain_allows: new: title: Importera domäntillåtelser @@ -794,6 +859,7 @@ sv: manage_custom_emojis: Hantera egna emojier manage_custom_emojis_description: Tillåter användare att hantera egna emojier på servern manage_email_subscriptions: Hantera e-postprenumerationer + manage_email_subscriptions_description: Tillåt användare med denna behörighet att aktivera funktionen för e-postnyhetsbrev för deras konto manage_federation: Hantera federering manage_federation_description: Tillåter användare att blockera eller tillåta federering med andra domäner, samt kontrollera levererbarhet manage_invites: Hantera inbjudningar @@ -1732,6 +1798,27 @@ sv: copy_account_note_text: 'Den här användaren flyttade från %{acct}, här var dina föregående anteckningar om dem:' navigation: toggle_menu: Växla meny + notification_fallbacks: + added_to_collection: + title_html: "%{name} lade till dig i en samling" + admin_report: + title_html: "%{name} rapporterade %{target}" + admin_sign_up: + title_and_others_html: + one: "%{name} och en annan anmälde sig" + other: "%{name} och %{count} andra anmälde sig" + title_html: "%{name} registrerade sig" + collection_update: + title_html: "%{name} uppdaterade en samling du är med i" + generic: + sign_in: Logga in på Mastodons webbapp + summary_html: Du är på en app som inte stöder den senaste versionen av Mastodon. %{link} för full funktionalitet. + moderation_warning: + summary_html: Du är på en app som inte stöder den senaste versionen av Mastodon. %{link}. + title: Du har fått en moderationsvarning. + severed_relationships: + summary_html: En administratör från %{from} har stängt av %{target}, vilket innebär att du inte längre kan ta emot uppdateringar från dem eller interagera med dem. %{link} för att hämta en lista över förlorade relationer. + title: Förlorade kontakter med %{name} notification_mailer: admin: report: diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 301df709e9929e..a5d9d7b949df98 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -484,8 +484,10 @@ tr: title: Yeni e-posta kara liste girişi no_email_domain_block_selected: Seçim yapılmadığından hiç bir e-posta alan adı engeli değiştirilmedi not_permitted: İzin verilmedi + reset: Sıfırla resolved_dns_records_hint_html: Alan adı aşağıdaki MX alan adlarına çözümleniyor, ancak hiç biri nihayetinde e-posta kabulünden sorum değil. Bir MX alan adını engellemek, görünen alan adı farklı osa bile aynı MX alan adını kullanan e-posta adreslerinden gelen kayıtları engelleyecektir. Başlıca e-posta sağlayıcıları engellememek için dikkatli olun. resolved_through_html: "%{domain} aracılığıyla çözümlendi" + search: Arama title: Engelli e-posta alan adları email_subscriptions: accounts: @@ -1807,7 +1809,7 @@ tr: other: "%{name} ve %{count} kişi kaydoldu" title_html: "%{name} kayıt oldu" collection_update: - title_html: "%{name} olduğunuz bir koleksiyonu güncelledi" + title_html: "%{name} içinde bulunduğunuz bir koleksiyonu güncelledi" generic: sign_in: Mastodon web uygulamasını kullanmak için oturum açın summary_html: Şu anda Mastodon'un en son sürümünü desteklemeyen bir uygulamayı kullanıyorsunuz. Tüm özelliklerden yararlanmak için %{link} adresini ziyaret edin. From 82ce9367c37a765af902843604dd0853a936c838 Mon Sep 17 00:00:00 2001 From: Echo Date: Mon, 11 May 2026 13:13:37 +0200 Subject: [PATCH 069/132] Fixes line spacing in bio (#38988) --- .../mastodon/components/account_header/styles.module.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/javascript/mastodon/components/account_header/styles.module.scss b/app/javascript/mastodon/components/account_header/styles.module.scss index ce1d531a985c24..43c5b5d83b72c1 100644 --- a/app/javascript/mastodon/components/account_header/styles.module.scss +++ b/app/javascript/mastodon/components/account_header/styles.module.scss @@ -274,6 +274,10 @@ $button-fallback-breakpoint: $button-breakpoint + 55px; .bio { font-size: 15px; color: var(--color-text-primary); + unicode-bidi: plaintext; + display: flex; + flex-direction: column; + gap: 20px; :any-link { color: var(--color-text-status-links); From a6a8a37ae18b2aeb74c622e19ec1721746ae1cde Mon Sep 17 00:00:00 2001 From: "Pia B." Date: Mon, 11 May 2026 17:17:00 +0200 Subject: [PATCH 070/132] add raketasks to generate collections for testing (#38986) --- lib/tasks/dev.rake | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/lib/tasks/dev.rake b/lib/tasks/dev.rake index b1a144f64cdd33..5aefb1fd00e11f 100644 --- a/lib/tasks/dev.rake +++ b/lib/tasks/dev.rake @@ -441,8 +441,39 @@ namespace :dev do text: 'This post has a manual quote policy', account: remote_account, visibility: :public, - quote_approval_policy: Status::QUOTE_APPROVAL_POLICY_FLAGS[:public] + quote_approval_policy: InteractionPolicy::POLICY_FLAGS[:public] ).find_or_create_by!(id: 10_000_030) + + showcase_collection = Collection.create_with( + account: showcase_account, + name: 'Showcase Collection', + description: 'super cool description', + local: true, + sensitive: false, + discoverable: true + ).find_or_create_by!(id: 10_000_031) + + another_collection = Collection.create_with( + account: showcase_account, + name: 'Another Collection', + description: 'super cool description', + local: true, + sensitive: false, + discoverable: true + ).find_or_create_by!(id: 10_000_032) + + report = Report.create_with( + action_taken_at: nil + ).find_or_create_by!(account: showcase_sidekick_account, target_account: showcase_account, comment: 'not very nice') + + CollectionReport.find_or_create_by!(collection: showcase_collection, report: report) + + CollectionReport.find_or_create_by!(collection: another_collection, report: report) + + Report.create_with( + status_ids: [10_000_028, 10_000_027], + action_taken_at: nil + ).find_or_create_by!(account: showcase_sidekick_account, target_account: showcase_account, comment: 'very unique comment') end end end From 735a00d741efca5d2d2f28cd7a909a41d435df6d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 12 May 2026 09:54:35 +0200 Subject: [PATCH 071/132] New Crowdin Translations (automated) (#39000) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/cs.json | 8 ++++++++ config/locales/cs.yml | 18 ++++++++++++++++++ config/locales/it.yml | 2 +- config/locales/simple_form.it.yml | 6 +++--- config/locales/simple_form.pt-BR.yml | 5 +++++ config/locales/zh-TW.yml | 8 ++++---- 6 files changed, 39 insertions(+), 8 deletions(-) diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index 1a4d4a507f03aa..8758c92c33d116 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -42,6 +42,8 @@ "account.familiar_followers_two": "Sleduje je {name1} a {name2}", "account.featured": "Zvýrazněné", "account.featured.accounts": "Profily", + "account.featured.collections": "Sbírky", + "account.featured.new_collection": "Nová sbírka", "account.filters.all": "Veškerá aktivita", "account.filters.boosts_toggle": "Zobrazit boosty", "account.filters.posts_boosts": "Příspěvky a boosty", @@ -235,17 +237,23 @@ "closed_registrations_modal.find_another_server": "Najít jiný server", "closed_registrations_modal.preamble": "Mastodon je decentralizovaný, takže bez ohledu na to, kde vytvoříte svůj účet, budete moci sledovat a komunikovat s kýmkoli na tomto serveru. Můžete ho dokonce hostovat!", "closed_registrations_modal.title": "Registrace na Mastodon", + "collection.share_modal.title": "Sdílet sbírku", + "collections.accounts.empty_title": "Tato sbírka je prázdná", "collections.collection_description": "Popis", + "collections.collection_language": "Jazyk", "collections.collection_name": "Název", "collections.collection_topic": "Téma", "collections.confirm_account_removal": "Jste si jisti, že chcete odstranit tento účet z této sbírky?", "collections.content_warning": "Varování o obsahu", "collections.continue": "Pokračovat", + "collections.create_collection": "Vytvořit sbírku", + "collections.delete_collection": "Smazat sbírku", "collections.mark_as_sensitive_hint": "Skryje popis kolekce a účty za varováním obsahu. Název kolekce bude stále viditelný.", "collections.name_length_hint": "Limit 40 znaků", "collections.new_collection": "Nová sbírka", "collections.search_accounts_max_reached": "Přidali jste maximální počet účtů", "collections.sensitive": "Citlivé", + "collections.share_short": "Sdílet", "collections.topic_hint": "Přidat štítek, který pomůže ostatním pochopit hlavní téma této kolekce.", "collections.view_collection": "Zobrazit sbírku", "collections.visibility_public": "Veřejné", diff --git a/config/locales/cs.yml b/config/locales/cs.yml index 728d9f87fd8454..94f5babb09465a 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -505,6 +505,22 @@ cs: resolved_dns_records_hint_html: Doménové jméno vede na následující MX domény, které mají nakonec na starost přijímání e-mailů. Blokování MX domény zablokuje registrace z jakékoliv e-mailové adresy, která používá stejnou MX doménu, i když je viditelné doménové jméno jiné. Dejte si pozor, abyste nezablokovali velké e-mailové poskytovatele. resolved_through_html: Přeložena přes %{domain} title: Blokované e-mailové domény + email_subscriptions: + accounts: + account: Účet + inactive: Neaktivní + last_email: Poslední e-mail + status: Status + compliance_settings: + additional_footer_text: + action: Spravovat + privacy_policy: + action: Spravovat + roles: + edit_role: Upravit roli + manage_roles: Spravovat role + role_name: Název role + title: Role export_domain_allows: new: title: Importovat povolené domény @@ -717,6 +733,7 @@ cs: cancel: Zrušit category: Kategorie category_description_html: Důvod nahlášení tohoto účtu a/nebo obsahu bude uveden v komunikaci s nahlášeným účtem + collections: Sbírky (%{count}) comment: none: Žádné comment_description_html: 'Pro upřesnění uživatel %{name} napsal:' @@ -788,6 +805,7 @@ cs: categories: administration: Administrace devops: DevOps + email: E-mail invites: Pozvánky moderation: Moderování special: Speciální diff --git a/config/locales/it.yml b/config/locales/it.yml index 57b437dae389d9..a5ef7cd0821646 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -1290,7 +1290,7 @@ it: appearance: advanced_settings: Impostazioni avanzate animations_and_accessibility: Animazioni e accessibilità - boosting_preferences: Preferenze di potenziamento + boosting_preferences: Preferenze di condivisione boosting_preferences_info_html: "Suggerimento: Indipendentemente dalle impostazioni, Maiusc + Fare clic su sull'icona Boost %{icon} aumenterà immediatamente." discovery: Scoperta localization: diff --git a/config/locales/simple_form.it.yml b/config/locales/simple_form.it.yml index 05ab3ee4ed6e8c..7013f2460e2012 100644 --- a/config/locales/simple_form.it.yml +++ b/config/locales/simple_form.it.yml @@ -57,7 +57,7 @@ it: setting_advanced_layout: Visualizza Mastodon con un layout multicolonna, permettendoti di visualizzare la cronologia, le notifiche e una terza colonna a tua scelta. Non consigliato per schermi di dimensioni più piccole. setting_aggregate_reblogs: Non mostrare nuove condivisioni per toot che sono stati condivisi di recente (ha effetto solo sulle nuove condivisioni) setting_always_send_emails: Normalmente le notifiche e-mail non vengono inviate quando si utilizza attivamente Mastodon - setting_boost_modal: Se abilitata, la funzione Boost aprirà prima una finestra di dialogo di conferma in cui potrai modificare la visibilità del tuo potenziamento. + setting_boost_modal: Se abilitata, la funzione Condividi aprirà prima una finestra di dialogo di conferma in cui potrai modificare la visibilità della tua condivisione. setting_default_quote_policy_private: I post scritti e riservati ai follower su Mastodon non possono essere citati da altri. setting_default_quote_policy_unlisted: Quando le persone ti citano, il loro post verrà nascosto anche dalle timeline di tendenza. setting_default_sensitive: Media con contenuti sensibili sono nascosti in modo predefinito e possono essere rivelati con un click @@ -244,7 +244,7 @@ it: setting_aggregate_reblogs: Raggruppa condivisioni in timeline setting_always_send_emails: Manda sempre notifiche via email setting_auto_play_gif: Riproduci automaticamente le GIF animate - setting_boost_modal: Controllo della visibilità del potenziamento + setting_boost_modal: Controllo della visibilità della condivisione setting_color_scheme: Schema dei colori setting_contrast: Contrasto setting_default_language: Lingua dei post @@ -262,7 +262,7 @@ it: setting_expand_spoilers: Espandi sempre post con content warning setting_hide_network: Nascondi la tua rete setting_missing_alt_text_modal: Avvisami prima di pubblicare contenuti multimediali senza testo alternativo - setting_quick_boosting: Abilita il potenziamento rapido + setting_quick_boosting: Abilita la condivisione rapida setting_reduce_motion: Riduci movimento nelle animazioni setting_system_font_ui: Usa il carattere predefinito del sistema setting_system_scrollbars_ui: Utilizza la barra di scorrimento predefinita del sistema diff --git a/config/locales/simple_form.pt-BR.yml b/config/locales/simple_form.pt-BR.yml index d390c262d7ed96..01d311208c5672 100644 --- a/config/locales/simple_form.pt-BR.yml +++ b/config/locales/simple_form.pt-BR.yml @@ -92,6 +92,7 @@ pt-BR: closed_registrations_message: Exibido quando as inscrições estiverem fechadas content_cache_retention_period: Todas as postagens de outros servidores (incluindo boosts e respostas) serão excluídas após o número especificado de dias, sem levar a qualquer interação do usuário local com esses posts. Isto inclui postagens onde um usuário local o marcou como favorito ou favoritos. Menções privadas entre usuários de diferentes instâncias também serão perdidas e impossíveis de restaurar. O uso desta configuração destina-se a instâncias especiais de propósitos e quebra muitas expectativas dos usuários quando implementadas para uso de propósito geral. custom_css: Você pode aplicar estilos personalizados na versão da web do Mastodon. + email_footer_text: Texto opcional que aparece no rodapé dos e-mails do boletim informativo. favicon: WEBP, PNG, GIF ou JPG. Sobrescreve o favicon padrão do Mastodon com um ícone personalizado. landing_page: Seleciona a página que os novos visitantes veem ao acessar seu servidor pela primeira vez. Se você selecionar "Tendências", as tendências precisam estar ativadas nas Configurações de Descoberta. Se você selecionar "Feed local", o "Acesso a feeds ao vivo com publicações locais" precisa estar definido como "Todos" nas Configurações de Descoberta. mascot: Substitui a ilustração na interface web avançada. @@ -294,6 +295,7 @@ pt-BR: closed_registrations_message: Mensagem personalizada quando inscrições não estão disponíveis content_cache_retention_period: Período de retenção de conteúdo remoto custom_css: CSS personalizável + email_footer_text: Texto de rodapé adicional favicon: Favicon landing_page: Página inicial para novos visitantes local_live_feed_access: Acessar feeds ao vivo com destaque em publicações locais @@ -322,6 +324,9 @@ pt-BR: trendable_by_default: Permitir tendências sem revisão prévia trends: Habilitar tendências wrapstodon: Ativar Wrapstodon + form_email_subscriptions_confirmation: + agreement_email_volume: Eu compreendo que habilitar este recurso pode aumentar significativamente o volume de emails enviados a partir do servidor e que eu sou o único responsável por quaisquer custos incorridos. + agreement_privacy_and_terms: Eu atualizei a Política de Privacidade e os Termos de Serviço. interactions: must_be_follower: Bloquear notificações de não-seguidores must_be_following: Bloquear notificações de não-seguidos diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 56636fd80fec42..a14a55e79ffa3e 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -37,7 +37,7 @@ zh-TW: add_email_domain_block: 封鎖電子郵件網域 approve: 批准 approved_msg: 已成功審核 %{username} 的新帳號申請 - are_you_sure: 您確定嗎? + are_you_sure: 您是否確定? avatar: 大頭貼 by_domain: 站點 change_email: @@ -587,7 +587,7 @@ zh-TW: select_capabilities: 選擇功能 sign_in: 登入 status: 狀態 - title: 聯邦宇宙輔助服務提供商 (Fediverse Auxiliary Service Providers) + title: 聯邦宇宙輔助服務提供商(Fediverse Auxiliary Service Providers) title: FASP follow_recommendations: description_html: "跟隨建議幫助新使用者們快速找到有趣的內容。當使用者沒有與其他帳號有足夠多的互動以建立個人化跟隨建議時,這些帳號將會被推薦。這些帳號將基於某選定語言之高互動與高本地跟隨者數量帳號而每日重新更新。" @@ -614,7 +614,7 @@ zh-TW: back_to_limited: 受限制的 back_to_warning: 警告 by_domain: 站台 - confirm_purge: 您確定要永久刪除來自此網域的資料嗎? + confirm_purge: 您是否確定要永久刪除來自此網域的資料? content_policies: comment: 內部備註 description_html: 您可以定義對所有此網域帳號及其子網域所實施之內容政策。 @@ -737,7 +737,7 @@ zh-TW: already_suspended_badges: local: 已自此伺服器停權 remote: 已自該伺服器停權 - are_you_sure: 您確定嗎? + are_you_sure: 您是否確定? assign_to_self: 指派給自己 assigned: 指派站務 by_target_domain: 檢舉帳號之網域 From a547dfff37ab89d6993e2c60783611a590a063ff Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 12 May 2026 09:12:49 -0400 Subject: [PATCH 072/132] Move flatware setup into rails_helper (#38944) --- .github/workflows/test-ruby.yml | 2 +- spec/flatware_helper.rb | 12 ------------ spec/rails_helper.rb | 9 +++++++++ 3 files changed, 10 insertions(+), 13 deletions(-) delete mode 100644 spec/flatware_helper.rb diff --git a/.github/workflows/test-ruby.yml b/.github/workflows/test-ruby.yml index b8c525d9d426ac..b8ff18fc0f9fe3 100644 --- a/.github/workflows/test-ruby.yml +++ b/.github/workflows/test-ruby.yml @@ -163,7 +163,7 @@ jobs: rspec-persistence-main rspec-persistence - - run: bin/flatware rspec -r ./spec/flatware_helper.rb + - run: bin/flatware rspec - name: Upload coverage reports to Codecov if: matrix.ruby-version == '.ruby-version' diff --git a/spec/flatware_helper.rb b/spec/flatware_helper.rb deleted file mode 100644 index a1bcb62340eada..00000000000000 --- a/spec/flatware_helper.rb +++ /dev/null @@ -1,12 +0,0 @@ -# frozen_string_literal: true - -if defined?(Flatware) - Flatware.configure do |config| - config.after_fork do |test_env_number| - if ENV.fetch('COVERAGE', false) - require 'simplecov' - SimpleCov.at_fork.call(test_env_number) # Combines parallel coverage results - end - end - end -end diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 3e11cc6dfc085f..c3a6e9b2d56ec6 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -6,6 +6,9 @@ require 'simplecov' SimpleCov.start 'rails' do + # During parallel runs, ensure unique names for post-run merge + command_name "job-#{ENV['TEST_ENV_NUMBER']}" if ENV['TEST_ENV_NUMBER'] + if ENV['CI'] require 'simplecov-lcov' formatter SimpleCov::Formatter::LcovFormatter @@ -26,6 +29,12 @@ add_group 'Services', 'app/services' add_group 'Validators', 'app/validators' end + + if defined?(Flatware) + Flatware.configure do |config| + config.after_fork { |test| SimpleCov.at_fork.call(test) } # Combines parallel coverage results + end + end end # This needs to be defined before Rails is initialized From 2f1bbe051c1dba5c9ac759c5762f4a3d702e0ddd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 12 May 2026 15:20:47 +0200 Subject: [PATCH 073/132] Update dependency sidekiq to v8.1.4 (#38953) 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 80f5baf3a80768..9afbcb792002b9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -816,7 +816,7 @@ GEM securerandom (0.4.1) shoulda-matchers (7.0.1) activesupport (>= 7.1) - sidekiq (8.1.3) + sidekiq (8.1.4) connection_pool (>= 3.0.0) json (>= 2.16.0) logger (>= 1.7.0) From d2f640272f3f36c8979cff645416682840528906 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Tue, 12 May 2026 10:22:38 -0500 Subject: [PATCH 074/132] Prepare Dockerfile for Node 26 (#38943) --- Dockerfile | 11 +++++++---- streaming/Dockerfile | 18 ++++++++---------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/Dockerfile b/Dockerfile index 036781826a988f..6159df35e4d143 100644 --- a/Dockerfile +++ b/Dockerfile @@ -340,10 +340,13 @@ COPY --from=node /usr/local/bin /usr/local/bin COPY --from=node /usr/local/lib /usr/local/lib RUN \ - # Configure Corepack - rm /usr/local/bin/yarn*; \ - npm i -g corepack; \ - corepack prepare --activate; + # Mount local Corepack and Yarn caches from Docker buildx caches + --mount=type=cache,id=corepack-cache-${TARGETPLATFORM},target=/usr/local/share/.cache/corepack,sharing=locked \ + --mount=type=cache,id=yarn-cache-${TARGETPLATFORM},target=/usr/local/share/.cache/yarn,sharing=locked \ + # Remove pre-installed Yarn binaries (only present on Node <26) + rm -f /usr/local/bin/yarn*; \ + # Install Corepack + npm i -g corepack; # hadolint ignore=DL3008 RUN \ diff --git a/streaming/Dockerfile b/streaming/Dockerfile index e8697213bea7f9..a62233d6744f51 100644 --- a/streaming/Dockerfile +++ b/streaming/Dockerfile @@ -32,20 +32,18 @@ ARG GID="991" # Apply Mastodon build options based on options above ENV \ - # Apply Mastodon version information MASTODON_VERSION_PRERELEASE="${MASTODON_VERSION_PRERELEASE}" \ MASTODON_VERSION_METADATA="${MASTODON_VERSION_METADATA}" \ - # Apply timezone TZ=${TZ} +# Configure the IP to bind Mastodon to when serving traffic +# Explicitly set PORT to match the exposed port +# Use production settings for Yarn, Node and related nodejs based tools +# Add Ruby and Mastodon installation to the PATH ENV \ - # Configure the IP to bind Mastodon to when serving traffic BIND="0.0.0.0" \ - # Explicitly set PORT to match the exposed port PORT=4000 \ - # Use production settings for Yarn, Node and related nodejs based tools NODE_ENV="production" \ - # Add Ruby and Mastodon installation to the PATH DEBIAN_FRONTEND="noninteractive" # Set default shell used for running commands @@ -93,10 +91,10 @@ RUN \ # Mount local Corepack and Yarn caches from Docker buildx caches --mount=type=cache,id=corepack-cache-${TARGETPLATFORM},target=/usr/local/share/.cache/corepack,sharing=locked \ --mount=type=cache,id=yarn-cache-${TARGETPLATFORM},target=/usr/local/share/.cache/yarn,sharing=locked \ - # Configure Corepack - rm /usr/local/bin/yarn*; \ - npm i -g corepack; \ - corepack prepare --activate; + # Remove pre-installed Yarn binaries (only present on Node <26) + rm -f /usr/local/bin/yarn*; \ + # Install Corepack + npm i -g corepack; RUN \ # Mount Corepack and Yarn caches from Docker buildx caches From 7c05f56fe81f99d426997ce47cbe3e15b1a44cf2 Mon Sep 17 00:00:00 2001 From: "Pia B." Date: Tue, 12 May 2026 18:13:01 +0200 Subject: [PATCH 075/132] Add batch actions to collections and possibility to report multiple collections (#38991) --- .../admin/collections_controller.rb | 39 +++++++++++++++ app/models/admin/collection_batch_action.rb | 42 ++++++++++++++++ app/views/admin/collections/index.html.haml | 49 ++++++++++++++++++ app/views/admin/reports/show.html.haml | 8 +-- .../shared/_collection_batch_row.html.haml | 2 +- config/locales/en.yml | 7 +++ config/routes/admin.rb | 2 +- .../admin/collection_batch_action_spec.rb | 50 +++++++++++++++++++ spec/requests/admin/collections_spec.rb | 44 ++++++++++++++-- 9 files changed, 234 insertions(+), 9 deletions(-) create mode 100644 app/models/admin/collection_batch_action.rb create mode 100644 app/views/admin/collections/index.html.haml create mode 100644 spec/models/admin/collection_batch_action_spec.rb diff --git a/app/controllers/admin/collections_controller.rb b/app/controllers/admin/collections_controller.rb index 4701500f9f8691..2698abbd451ff7 100644 --- a/app/controllers/admin/collections_controller.rb +++ b/app/controllers/admin/collections_controller.rb @@ -4,13 +4,48 @@ module Admin class CollectionsController < BaseController before_action :set_account before_action :set_collection, only: :show + before_action :set_collections, except: :show + + PER_PAGE = 20 + + def index + authorize [:admin, :collection], :index? + @collection_batch_action = Admin::CollectionBatchAction.new + end def show authorize @collection, :show? end + def batch + authorize [:admin, :collection], :index? + + @collection_batch_action = Admin::CollectionBatchAction.new(admin_collection_batch_action_params.merge(current_account: current_account, report_id: params[:report_id], type: 'report')) + + @collection_batch_action.save! + rescue ActionController::ParameterMissing + flash[:alert] = I18n.t('admin.collections.no_collection_selected') + ensure + redirect_to after_create_redirect_path + end + private + def after_create_redirect_path + report_id = @collections_batch_action&.report_id || params[:report_id] + + if report_id.present? + admin_report_path(report_id) + else + admin_account_collections_path(params[:account_id], params[:page]) + end + end + + def admin_collection_batch_action_params + params + .expect(admin_collection_batch_action: [collection_ids: []]) + end + def set_account @account = Account.find(params[:account_id]) end @@ -18,5 +53,9 @@ def set_account def set_collection @collection = @account.collections.includes(accepted_collection_items: :account).find(params[:id]) end + + def set_collections + @collections = @account.collections.includes(accepted_collection_items: :account).page(params[:page]).per(PER_PAGE) + end end end diff --git a/app/models/admin/collection_batch_action.rb b/app/models/admin/collection_batch_action.rb new file mode 100644 index 00000000000000..d08f17d747129e --- /dev/null +++ b/app/models/admin/collection_batch_action.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +class Admin::CollectionBatchAction < Admin::BaseAction + TYPES = %w( + report + remove_from_report + ).freeze + + attr_accessor :collection_ids + + private + + def process_action! + return unless collection_ids + + add_to_report! + end + + def add_to_report! + @report = Report.new(report_params) unless with_report? + + @report.collections = (@report.collections + selected_collections).uniq + @report.save! + @report_id = @report.id + end + + def selected_collections + @report.target_account.collections.where(id: collection_ids) + end + + def report_params + { account: current_account, target_account: target_account } + end + + def collection + @collection ||= Collection.where(id: collection_ids.first) + end + + def target_account + @target_account ||= collection.first.account + end +end diff --git a/app/views/admin/collections/index.html.haml b/app/views/admin/collections/index.html.haml new file mode 100644 index 00000000000000..10c9e65b5e6f69 --- /dev/null +++ b/app/views/admin/collections/index.html.haml @@ -0,0 +1,49 @@ +- content_for :page_title do + = t('admin.collections.title', name: @account.pretty_acct) + +.filters + .filter-subset + %ul + %li= filter_link_to t('generic.all'), id: nil + .back-link + - if params[:report_id] + = link_to admin_report_path(params[:report_id].to_i) do + = material_symbol 'chevron_left' + = t('admin.collections.back_to_report') + - else + = link_to admin_account_path(@account.id) do + = material_symbol 'chevron_left' + = t('admin.collections.back_to_account') + +%hr.spacer/ + + += form_with model: @collection_batch_action, url: batch_admin_account_collections_path(@account.id) do |f| + = hidden_field_tag :page, params[:page] || 1 + = hidden_field_tag :report_id, params[:report_id] + + .batch-table + .batch-table__toolbar + %label.batch-table__toolbar__select.batch-checkbox-all + = check_box_tag :batch_checkbox_all, nil, false + .batch-table__toolbar__actions + - unless @collections.empty? + - if params[:report_id] + = f.button safe_join([material_symbol('add'), t('admin.collections.batch.add_to_report', id: params[:report_id])]), + class: 'table-action-link', + data: { confirm: t('admin.reports.are_you_sure') }, + name: :report, + type: :submit + - else + = f.button safe_join([material_symbol('flag'), t('admin.collections.batch.report')]), + class: 'table-action-link', + data: { confirm: t('admin.reports.are_you_sure') }, + name: :report, + type: :submit + .batch-table__body + - if @collections.empty? + = nothing_here 'nothing-here--under-tabs' + - else + = render partial: 'admin/shared/collection_batch_row', collection: @collections, as: :collection, locals: { f: f } + += paginate @collections diff --git a/app/views/admin/reports/show.html.haml b/app/views/admin/reports/show.html.haml index 2d20b6a969317e..0aa2f69ba57256 100644 --- a/app/views/admin/reports/show.html.haml +++ b/app/views/admin/reports/show.html.haml @@ -67,17 +67,19 @@ %summary = t 'admin.reports.collections', count: @report.collections.size - %form + = form_with model: @form, url: batch_admin_account_collections_path(@report.target_account_id, report_id: @report.id) do |f| .batch-table .batch-table__toolbar %label.batch-table__toolbar__select.batch-checkbox-all - -# = check_box_tag :batch_checkbox_all, nil, false .batch-table__toolbar__actions + = link_to safe_join([material_symbol('add'), t('admin.reports.add_to_report')]), + admin_account_collections_path(@report.target_account_id, report_id: @report.id), + class: 'table-action-link' .batch-table__body - if @report.collections.empty? = nothing_here 'nothing-here--under-tabs' - else - = render partial: 'admin/shared/collection_batch_row', collection: @report.collections, as: :collection + = render partial: 'admin/shared/collection_batch_row', collection: @report.collections, as: :collection, locals: { f: f } - if @report.unresolved? %hr.spacer/ diff --git a/app/views/admin/shared/_collection_batch_row.html.haml b/app/views/admin/shared/_collection_batch_row.html.haml index 8bf7857e95a381..8f42ab8db49105 100644 --- a/app/views/admin/shared/_collection_batch_row.html.haml +++ b/app/views/admin/shared/_collection_batch_row.html.haml @@ -1,5 +1,5 @@ .batch-table__row %label.batch-table__row__select.batch-checkbox - -# = f.check_box :collection_ids, { multiple: true, include_hidden: false }, collection.id + = f.check_box :collection_ids, { multiple: true, include_hidden: false }, collection.id .batch-table__row__content = render partial: 'admin/shared/collection', object: collection diff --git a/config/locales/en.yml b/config/locales/en.yml index b0533881bac224..4a95e738b45115 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -345,12 +345,19 @@ en: updated_msg: Announcement successfully updated! collections: accounts: Accounts + back_to_account: Back to account page + back_to_report: Back to report page + batch: + add_to_report: 'Add to report #%{id}' + report: Report collection_title: Collection by %{name} contents: Contents + no_collection_selected: No collections were changed as none were selected number_of_accounts: one: 1 account other: "%{count} accounts" open: Open + title: Account collections - @%{name} view_publicly: View publicly critical_update_pending: Critical update pending custom_emojis: diff --git a/config/routes/admin.rb b/config/routes/admin.rb index 770a9cd77769ac..a48defb3b9362c 100644 --- a/config/routes/admin.rb +++ b/config/routes/admin.rb @@ -157,7 +157,7 @@ resource :reset, only: [:create] resource :action, only: [:new, :create], controller: 'account_actions' - resources :collections, only: [:show] + resources :collections, only: [:index, :show], concerns: :batch resources :statuses, only: [:index, :show], concerns: :batch resources :relationships, only: [:index] diff --git a/spec/models/admin/collection_batch_action_spec.rb b/spec/models/admin/collection_batch_action_spec.rb new file mode 100644 index 00000000000000..0ed57817e00269 --- /dev/null +++ b/spec/models/admin/collection_batch_action_spec.rb @@ -0,0 +1,50 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Admin::CollectionBatchAction do + subject do + described_class.new( + current_account:, + collection_ids:, + report_id:, + type: + ) + end + + let(:account) { Fabricate(:account) } + let(:target_account) { Fabricate(:account) } + let(:current_account) { Fabricate(:admin_user).account } + let(:collection) { Fabricate(:collection, account: account) } + let(:collection_ids) { [collection.id] } + let(:report) { Fabricate(:report, account: target_account, target_account: account) } + let(:type) { 'report' } + + before 'create collection report' do + report.collections << collection + report.save! + end + + describe '#save!' do + context 'when with_report? is true' do + let(:other_collection) { Fabricate(:collection, account: account) } + let(:report_id) { report.id } + + it 'creates no report and adds the collection to the existing report' do + collection_ids << other_collection.id + + expect { subject.save! }.to_not change(Report, :count) + expect(report.collections).to include(other_collection) + end + end + + context 'when with_report? is false' do + let(:report_id) { nil } + + it 'creates a new report from the collection_ids' do + expect { subject.save! }.to change(Report, :count).by(1) + expect(Report.last.collections).to include(collection) + end + end + end +end diff --git a/spec/requests/admin/collections_spec.rb b/spec/requests/admin/collections_spec.rb index 0e87e277ae88b7..6cb3a1ec2dfabc 100644 --- a/spec/requests/admin/collections_spec.rb +++ b/spec/requests/admin/collections_spec.rb @@ -3,13 +3,19 @@ require 'rails_helper' RSpec.describe 'Admin Collections' do + let(:account) { Fabricate(:account) } + let(:other_account) { Fabricate(:account) } + let(:collection) { Fabricate(:collection, account: account) } + let!(:second_collection) { Fabricate(:collection, account: account) } + let(:report) { Fabricate(:report, account: other_account, target_account: account) } + + before do + sign_in Fabricate(:admin_user) + end + describe 'GET /admin/accounts/:account_id/collections/:id' do let(:collection) { Fabricate(:collection) } - before do - sign_in Fabricate(:admin_user) - end - it 'returns success' do get admin_account_collection_path(collection.account_id, collection) @@ -17,4 +23,34 @@ .to have_http_status(200) end end + + describe 'GET /admin/accounts/:account_id/collections/' do + it 'returns http success' do + get admin_account_collections_path(account_id: account.id, id: collection.id) + expect(response).to have_http_status(200) + end + end + + describe 'POST /admin/accounts/:account_id/collections/batch' do + subject { post batch_admin_account_collections_path(account_id: account.id, report_id: report_id, admin_collection_batch_action: { collection_ids: [collection.id, second_collection.id] }) } + + context 'with a valid report' do + let(:report_id) { report.id } + + it 'redirects to the report page' do + report.collections << collection + subject + expect(response).to redirect_to(admin_report_path(report.id)) + end + end + + context 'with an invalid report' do + let(:report_id) { nil } + + it 'redirects to the account collections page' do + subject + expect(response).to redirect_to(admin_account_collections_path(account.id)) + end + end + end end From cb5c5432b359649261b76617359d1212743b100e Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Tue, 12 May 2026 11:16:55 -0500 Subject: [PATCH 076/132] Narrow scope of Docker build cache in Github workflows (#39014) --- .github/workflows/build-container-image.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-container-image.yml b/.github/workflows/build-container-image.yml index ae85d9d5e6155d..a899e186b8b1e9 100644 --- a/.github/workflows/build-container-image.yml +++ b/.github/workflows/build-container-image.yml @@ -87,8 +87,8 @@ jobs: platforms: ${{ matrix.platform }} provenance: false push: ${{ inputs.push_to_images != '' }} - cache-from: ${{ inputs.cache && 'type=gha' || '' }} - cache-to: ${{ inputs.cache && 'type=gha,mode=max' || '' }} + cache-from: ${{ inputs.cache && format('type=gha,scope=build-{0}-{1}', hashFiles(inputs.file_to_build), env.PLATFORM_PAIR) || '' }} + cache-to: ${{ inputs.cache && format('type=gha,mode=max,scope=build-{0}-{1}', hashFiles(inputs.file_to_build), env.PLATFORM_PAIR) || '' }} outputs: type=image,"name=${{ env.IMAGE_NAMES }}",push-by-digest=true,name-canonical=true,push=${{ inputs.push_to_images != '' }} - name: Export digest From bbb3392dbe35da834b0f31a5d3b15b19480fb688 Mon Sep 17 00:00:00 2001 From: "Pia B." Date: Tue, 12 May 2026 19:46:24 +0200 Subject: [PATCH 077/132] add collections icon to admin report interface (#39009) --- app/views/admin/reports/index.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/admin/reports/index.html.haml b/app/views/admin/reports/index.html.haml index 1049cf733e2456..070d8c8518c4b0 100644 --- a/app/views/admin/reports/index.html.haml +++ b/app/views/admin/reports/index.html.haml @@ -69,7 +69,7 @@ - if Mastodon::Feature.collections_enabled? %span.report-card__summary__item__content__icon{ title: t('admin.accounts.collections') } - = material_symbol('groups-fill') + = material_symbol('category') = report.collections.size - if report.forwarded? From 758db36ec7da7f3e402b5290f06a120e8517ed6d Mon Sep 17 00:00:00 2001 From: Echo Date: Wed, 13 May 2026 10:38:17 +0200 Subject: [PATCH 078/132] Refactor account header banners (#38921) --- .../components/account_header/banners.tsx | 140 ++++++++++++ .../components/account_header/index.tsx | 16 +- .../account_header/memorial_note.tsx | 12 - .../components/account_header/moved_note.tsx | 46 ---- .../account_header/styles.module.scss | 61 ++++- .../account_header/subscription_form.tsx | 30 ++- .../account/components/account_note.tsx | 131 ----------- .../account/components/domain_pill.tsx | 210 ------------------ .../components/follow_request_note.jsx | 41 ---- .../follow_request_note_container.js | 17 -- app/javascript/mastodon/locales/en.json | 15 -- .../styles/mastodon/components.scss | 41 ---- 12 files changed, 214 insertions(+), 546 deletions(-) create mode 100644 app/javascript/mastodon/components/account_header/banners.tsx delete mode 100644 app/javascript/mastodon/components/account_header/memorial_note.tsx delete mode 100644 app/javascript/mastodon/components/account_header/moved_note.tsx delete mode 100644 app/javascript/mastodon/features/account/components/account_note.tsx delete mode 100644 app/javascript/mastodon/features/account/components/domain_pill.tsx delete mode 100644 app/javascript/mastodon/features/account/components/follow_request_note.jsx delete mode 100644 app/javascript/mastodon/features/account/containers/follow_request_note_container.js diff --git a/app/javascript/mastodon/components/account_header/banners.tsx b/app/javascript/mastodon/components/account_header/banners.tsx new file mode 100644 index 00000000000000..269f65b8d19a1e --- /dev/null +++ b/app/javascript/mastodon/components/account_header/banners.tsx @@ -0,0 +1,140 @@ +import { useCallback } from 'react'; +import type { FC, ReactElement, ReactNode } from 'react'; + +import { FormattedMessage } from 'react-intl'; + +import { Link } from 'react-router-dom'; + +import { + authorizeFollowRequest, + rejectFollowRequest, +} from '@/mastodon/actions/accounts'; +import { useAccountVisibility } from '@/mastodon/hooks/useAccountVisibility'; +import { useRelationship } from '@/mastodon/hooks/useRelationship'; +import type { Account } from '@/mastodon/models/account'; +import { useAppDispatch, useAppSelector } from '@/mastodon/store'; +import CheckIcon from '@/material-icons/400-24px/check.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; + +import { AvatarOverlay } from '../avatar_overlay'; +import { Button } from '../button'; +import { DisplayName } from '../display_name'; +import { Icon } from '../icon'; + +import classes from './styles.module.scss'; + +export const AccountBanners: FC<{ account: Account }> = ({ account }) => { + const { suspended, hidden } = useAccountVisibility(account.id); + const relationship = useRelationship(account.id); + + if (hidden) { + return null; + } + + let banner: ReactNode = null; + + if (account.memorial) { + banner = ( + + + + ); + } + + if (account.moved) { + banner = ; + } + + if (!suspended && relationship?.requested_by) { + banner = ; + } + + if (!banner) { + return null; + } + + return
    {banner}
    ; +}; + +const FollowRequestNote: FC<{ account: Account }> = ({ account }) => { + const accountId = account.id; + const dispatch = useAppDispatch(); + const handleAuthorize = useCallback(() => { + dispatch(authorizeFollowRequest(accountId)); + }, [accountId, dispatch]); + const handleReject = useCallback(() => { + dispatch(rejectFollowRequest(accountId)); + }, [accountId, dispatch]); + + return ( + <> + + }} + /> + + +
    + + + +
    + + ); +}; + +const MovedNote: React.FC<{ + account: Account; + targetAccountId: string; +}> = ({ account: from, targetAccountId }) => { + const to = useAppSelector((state) => state.accounts.get(targetAccountId)); + + return ( + <> + + , + }} + /> + + +
    + + + + + + + + +
    + + ); +}; + +const MessageText: React.FC<{ children: ReactElement }> = ({ children }) => ( +
    {children}
    +); diff --git a/app/javascript/mastodon/components/account_header/index.tsx b/app/javascript/mastodon/components/account_header/index.tsx index 33c36ae1c9c129..df2493c7e9bd96 100644 --- a/app/javascript/mastodon/components/account_header/index.tsx +++ b/app/javascript/mastodon/components/account_header/index.tsx @@ -5,7 +5,6 @@ import classNames from 'classnames'; import { Helmet } from '@unhead/react/helmet'; import { openModal } from '@/mastodon/actions/modal'; -import FollowRequestNoteContainer from '@/mastodon/features/account/containers/follow_request_note_container'; import { useLayout } from '@/mastodon/hooks/useLayout'; import { useVisibility } from '@/mastodon/hooks/useVisibility'; import { @@ -22,10 +21,9 @@ import { Avatar } from '../avatar'; import { AnimateEmojiProvider } from '../emoji/context'; import { FamiliarFollowers } from '../familiar_followers'; +import { AccountBanners } from './banners'; import { AccountButtons } from './buttons'; import { AccountHeaderFields } from './fields'; -import { MemorialNote } from './memorial_note'; -import { MovedNote } from './moved_note'; import { AccountName } from './name'; import { AccountNote } from './note'; import { AccountNumberFields } from './number_fields'; @@ -51,9 +49,6 @@ export const AccountHeader: React.FC<{ }> = ({ accountId, hideTabs }) => { const dispatch = useAppDispatch(); const account = useAppSelector((state) => state.accounts.get(accountId)); - const relationship = useAppSelector((state) => - state.relationships.get(accountId), - ); const hidden = useAppSelector((state) => getAccountHidden(state, accountId)); const handleOpenAvatar = useCallback( @@ -98,18 +93,11 @@ export const AccountHeader: React.FC<{ return (
    - {!hidden && account.memorial && } - {!hidden && account.moved && ( - - )} + - {!suspendedOrHidden && !account.moved && relationship?.requested_by && ( - - )} -
    {!suspendedOrHidden && ( ( -
    -
    - -
    -
    -); diff --git a/app/javascript/mastodon/components/account_header/moved_note.tsx b/app/javascript/mastodon/components/account_header/moved_note.tsx deleted file mode 100644 index 153c206bbc96c5..00000000000000 --- a/app/javascript/mastodon/components/account_header/moved_note.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { FormattedMessage } from 'react-intl'; - -import { Link } from 'react-router-dom'; - -import { useAppSelector } from '@/mastodon/store'; - -import { AvatarOverlay } from '../avatar_overlay'; -import { DisplayName } from '../display_name'; - -export const MovedNote: React.FC<{ - accountId: string; - targetAccountId: string; -}> = ({ accountId, targetAccountId }) => { - const from = useAppSelector((state) => state.accounts.get(accountId)); - const to = useAppSelector((state) => state.accounts.get(targetAccountId)); - - return ( -
    -
    - , - }} - /> -
    - -
    - -
    - -
    - - - - - - -
    -
    - ); -}; diff --git a/app/javascript/mastodon/components/account_header/styles.module.scss b/app/javascript/mastodon/components/account_header/styles.module.scss index 43c5b5d83b72c1..a54ca18c8a6096 100644 --- a/app/javascript/mastodon/components/account_header/styles.module.scss +++ b/app/javascript/mastodon/components/account_header/styles.module.scss @@ -453,13 +453,24 @@ $button-fallback-breakpoint: $button-breakpoint + 55px; border-bottom: 1px solid var(--color-border-primary); } +// Banners + +.bannerWrapper, .bannerBase { box-sizing: border-box; + display: flex; + flex-direction: column; +} + +.bannerWrapper { + background: var(--color-bg-tertiary); padding: 16px; + align-items: center; +} + +.bannerBase { border-radius: 12px; background: var(--color-bg-secondary); - display: flex; - flex-direction: column; gap: 12px; justify-content: center; align-items: flex-start; @@ -475,6 +486,13 @@ $button-fallback-breakpoint: $button-breakpoint + 55px; } } +.bannerText { + color: var(--color-text-secondary); + font-size: 14px; + font-weight: 500; + text-align: center; +} + .bannerTextAndActions { display: flex; flex-direction: column; @@ -489,6 +507,19 @@ $button-fallback-breakpoint: $button-breakpoint + 55px; } } +.bannerActions { + display: flex; + justify-content: space-between; + align-items: center; + gap: 15px; + width: 100%; + margin-top: 16px; + + button { + width: 100%; + } +} + .bannerDisclaimer { a { color: inherit; @@ -519,6 +550,32 @@ $button-fallback-breakpoint: $button-breakpoint + 55px; } } +.bannerActionsDisplayName { + color: var(--color-text-secondary); + display: flex; + align-items: center; + gap: 10px; + font-size: 15px; + line-height: 22px; + overflow: hidden; + text-decoration: none; + + &:hover strong { + text-decoration: underline; + } + + strong, + span { + display: block; + text-overflow: ellipsis; + overflow: hidden; + } + + strong { + color: var(--color-text-primary); + } +} + // Buttons .followButton { diff --git a/app/javascript/mastodon/components/account_header/subscription_form.tsx b/app/javascript/mastodon/components/account_header/subscription_form.tsx index f78077bef76910..e09e7d4b1451b2 100644 --- a/app/javascript/mastodon/components/account_header/subscription_form.tsx +++ b/app/javascript/mastodon/components/account_header/subscription_form.tsx @@ -104,8 +104,6 @@ export const AccountSubscriptionForm: React.FC<{ accountId: string }> = ({ .then(() => { setSubmitting(false); setSubmitted(true); - - return ''; }) .catch((err: unknown) => { setSubmitting(false); @@ -133,12 +131,11 @@ export const AccountSubscriptionForm: React.FC<{ accountId: string }> = ({ className={classNames(classes.bannerBase, classes.bannerBaseCentered)} >
    -

    - -

    + = ({ return (
    -

    - , - }} - /> -

    + , + }} + />
    diff --git a/app/javascript/mastodon/features/account/components/account_note.tsx b/app/javascript/mastodon/features/account/components/account_note.tsx deleted file mode 100644 index ea3a4cdaca94e8..00000000000000 --- a/app/javascript/mastodon/features/account/components/account_note.tsx +++ /dev/null @@ -1,131 +0,0 @@ -import type { ChangeEventHandler, KeyboardEventHandler } from 'react'; -import { useState, useRef, useCallback, useId } from 'react'; - -import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; - -import Textarea from 'react-textarea-autosize'; - -import { submitAccountNote } from '@/mastodon/actions/account_notes'; -import { LoadingIndicator } from '@/mastodon/components/loading_indicator'; -import { useAppDispatch, useAppSelector } from '@/mastodon/store'; - -const messages = defineMessages({ - placeholder: { - id: 'account_note.placeholder', - defaultMessage: 'Click to add a note', - }, -}); - -const AccountNoteUI: React.FC<{ - initialValue: string | undefined; - onSubmit: (newNote: string) => void; - wasSaved: boolean; -}> = ({ initialValue, onSubmit, wasSaved }) => { - const intl = useIntl(); - const uniqueId = useId(); - const [value, setValue] = useState(initialValue ?? ''); - const isLoading = initialValue === undefined; - const canSubmitOnBlurRef = useRef(true); - - const handleChange = useCallback>( - (e) => { - setValue(e.target.value); - }, - [], - ); - - const handleKeyDown = useCallback>( - (e) => { - if (e.key === 'Escape') { - e.preventDefault(); - - setValue(initialValue ?? ''); - - canSubmitOnBlurRef.current = false; - e.currentTarget.blur(); - } else if (e.key === 'Enter' && (e.ctrlKey || e.metaKey)) { - e.preventDefault(); - - onSubmit(value); - - canSubmitOnBlurRef.current = false; - e.currentTarget.blur(); - } - }, - [initialValue, onSubmit, value], - ); - - const handleBlur = useCallback(() => { - if (initialValue !== value && canSubmitOnBlurRef.current) { - onSubmit(value); - } - canSubmitOnBlurRef.current = true; - }, [initialValue, onSubmit, value]); - - return ( -
    - - {isLoading ? ( -
    - -
    - ) : ( -