From efc0d4d526e3f05b089b7eb1685dbe415f12bb03 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 10:35:11 +0200 Subject: [PATCH 01/22] Update dependency react-intl to v6.7.0 (#32028) 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 c90ada78f5..c17ccb3988 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2330,9 +2330,9 @@ __metadata: languageName: node linkType: hard -"@formatjs/intl@npm:2.10.4": - version: 2.10.4 - resolution: "@formatjs/intl@npm:2.10.4" +"@formatjs/intl@npm:2.10.5": + version: 2.10.5 + resolution: "@formatjs/intl@npm:2.10.5" dependencies: "@formatjs/ecma402-abstract": "npm:2.0.0" "@formatjs/fast-memoize": "npm:2.2.0" @@ -2346,7 +2346,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/ca7877e962f73f1fe0e358f12d73bdc3ec4006c14ee801e06d9f7aef06bcdcc12355a8f53f32b0e890f829949ded35e825c914ca5f4709eb1e08c2a18c1368c2 + checksum: 10c0/d00ef00e41200947ed22895b73a0863283de4762ec238b4a81e2252e642e30a309cd9c73174e4917b6c675ab6f148eda5a4e3345c3caeef64e090fc8374d27c4 languageName: node linkType: hard @@ -14509,12 +14509,12 @@ __metadata: linkType: hard "react-intl@npm:^6.4.2": - version: 6.6.8 - resolution: "react-intl@npm:6.6.8" + version: 6.7.0 + resolution: "react-intl@npm:6.7.0" dependencies: "@formatjs/ecma402-abstract": "npm:2.0.0" "@formatjs/icu-messageformat-parser": "npm:2.7.8" - "@formatjs/intl": "npm:2.10.4" + "@formatjs/intl": "npm:2.10.5" "@formatjs/intl-displaynames": "npm:6.6.8" "@formatjs/intl-listformat": "npm:7.5.7" "@types/hoist-non-react-statics": "npm:^3.3.1" @@ -14528,7 +14528,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/7673507eb73ad4edd1593da7173cec68f316cf77037e0959900babd32d5984a39ba7fa10aaa0a23bcddb7b98daf7dd007cb73ddfc39127ede87c18ec780a519c + checksum: 10c0/210088bf0e934ad5f09d8e7c6d7d72682bb806583645fb333d4efd8ae55585b675ea8e47bb240140d5143ca15ecc0457c3ddc3e8ca45e9b576bce1fa2f9886b3 languageName: node linkType: hard From f294c4a594ebf6da8ea5a18bdfd62b754941575e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 10:35:23 +0200 Subject: [PATCH 02/22] Update libretranslate/libretranslate Docker tag to v1.6.1 (#32027) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .devcontainer/compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/compose.yaml b/.devcontainer/compose.yaml index f87082013c..5c7263c874 100644 --- a/.devcontainer/compose.yaml +++ b/.devcontainer/compose.yaml @@ -69,7 +69,7 @@ services: hard: -1 libretranslate: - image: libretranslate/libretranslate:v1.6.0 + image: libretranslate/libretranslate:v1.6.1 restart: unless-stopped volumes: - lt-data:/home/libretranslate/.local From 84d04386dd2b16e86c520349efd898c3d4bf8b44 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 10:35:37 +0200 Subject: [PATCH 03/22] Update DefinitelyTyped types (non-major) (#32026) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index c17ccb3988..944262bb4f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3786,9 +3786,9 @@ __metadata: linkType: hard "@types/prop-types@npm:*, @types/prop-types@npm:^15.7.5": - version: 15.7.12 - resolution: "@types/prop-types@npm:15.7.12" - checksum: 10c0/1babcc7db6a1177779f8fde0ccc78d64d459906e6ef69a4ed4dd6339c920c2e05b074ee5a92120fe4e9d9f1a01c952f843ebd550bee2332fc2ef81d1706878f8 + version: 15.7.13 + resolution: "@types/prop-types@npm:15.7.13" + checksum: 10c0/1b20fc67281902c6743379960247bc161f3f0406ffc0df8e7058745a85ea1538612109db0406290512947f9632fe9e10e7337bf0ce6338a91d6c948df16a7c61 languageName: node linkType: hard @@ -3931,12 +3931,12 @@ __metadata: linkType: hard "@types/react@npm:*, @types/react@npm:16 || 17 || 18, @types/react@npm:>=16.9.11, @types/react@npm:^18.2.7": - version: 18.3.5 - resolution: "@types/react@npm:18.3.5" + version: 18.3.8 + resolution: "@types/react@npm:18.3.8" dependencies: "@types/prop-types": "npm:*" csstype: "npm:^3.0.2" - checksum: 10c0/548b1d3d7c2f0242fbfdbbd658731b4ce69a134be072fa83e6ab516f2840402a3f20e3e7f72e95133b23d4880ef24a6d864050dc8e1f7c68f39fa87ca8445917 + checksum: 10c0/367312c9fe276639ecb142265e090a4dd04bb39f8d718cbab546de3f1ddcfddeff415e1147d0fc40f734badaa7420b7b109d511bd4304b2c4c9c36164612fdf8 languageName: node linkType: hard From c37f9c0d44fb78e5023942ce9948168b5e637b74 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 10:36:57 +0200 Subject: [PATCH 04/22] Update dependency jsdom to v25.0.1 (#32017) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 56 +++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 38 insertions(+), 18 deletions(-) diff --git a/yarn.lock b/yarn.lock index 944262bb4f..4aa0d4b62f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6826,12 +6826,12 @@ __metadata: languageName: node linkType: hard -"cssstyle@npm:^4.0.1": - version: 4.0.1 - resolution: "cssstyle@npm:4.0.1" +"cssstyle@npm:^4.1.0": + version: 4.1.0 + resolution: "cssstyle@npm:4.1.0" dependencies: - rrweb-cssom: "npm:^0.6.0" - checksum: 10c0/cadf9a8b23e11f4c6d63f21291096a0b0be868bd4ab9c799daa2c5b18330e39e5281605f01da906e901b42f742df0f3b3645af6465e83377ff7d15a88ee432a0 + rrweb-cssom: "npm:^0.7.1" + checksum: 10c0/05c6597e5d3e0ec6b15221f2c0ce9a0443a46cc50a6089a3ba9ee1ac27f83ff86a445a8f95435137dadd859f091fc61b6d342abaf396d3c910471b5b33cfcbfa languageName: node linkType: hard @@ -11105,10 +11105,10 @@ __metadata: linkType: hard "jsdom@npm:^25.0.0": - version: 25.0.0 - resolution: "jsdom@npm:25.0.0" + version: 25.0.1 + resolution: "jsdom@npm:25.0.1" dependencies: - cssstyle: "npm:^4.0.1" + cssstyle: "npm:^4.1.0" data-urls: "npm:^5.0.0" decimal.js: "npm:^10.4.3" form-data: "npm:^4.0.0" @@ -11121,7 +11121,7 @@ __metadata: rrweb-cssom: "npm:^0.7.1" saxes: "npm:^6.0.0" symbol-tree: "npm:^3.2.4" - tough-cookie: "npm:^4.1.4" + tough-cookie: "npm:^5.0.0" w3c-xmlserializer: "npm:^5.0.0" webidl-conversions: "npm:^7.0.0" whatwg-encoding: "npm:^3.1.1" @@ -11134,7 +11134,7 @@ __metadata: peerDependenciesMeta: canvas: optional: true - checksum: 10c0/1552bcfb816b2c69ae159ba0cd79e8964030c106cc0cb2deb20a64c1ca54e1ea41352b9802d89b7cf823e43e6d74ed7289abff4aacc95b1b2bc936570aab3594 + checksum: 10c0/6bda32a6dfe4e37a30568bf51136bdb3ba9c0b72aadd6356280404275a34c9e097c8c25b5eb3c742e602623741e172da977ff456684befd77c9042ed9bf8c2b4 languageName: node linkType: hard @@ -15366,13 +15366,6 @@ __metadata: languageName: node linkType: hard -"rrweb-cssom@npm:^0.6.0": - version: 0.6.0 - resolution: "rrweb-cssom@npm:0.6.0" - checksum: 10c0/3d9d90d53c2349ea9c8509c2690df5a4ef930c9cf8242aeb9425d4046f09d712bb01047e00da0e1c1dab5db35740b3d78fd45c3e7272f75d3724a563f27c30a3 - languageName: node - linkType: hard - "rrweb-cssom@npm:^0.7.1": version: 0.7.1 resolution: "rrweb-cssom@npm:0.7.1" @@ -17036,6 +17029,24 @@ __metadata: languageName: node linkType: hard +"tldts-core@npm:^6.1.47": + version: 6.1.47 + resolution: "tldts-core@npm:6.1.47" + checksum: 10c0/538372072aea7153e842646a9e22d0d9335acf7fd877d10ee374cf78dceff79a2ccebadf7d25e0dbddd7b7b60bafe1c885aac3e3b1d5bec7806963c89b163ee7 + languageName: node + linkType: hard + +"tldts@npm:^6.1.32": + version: 6.1.47 + resolution: "tldts@npm:6.1.47" + dependencies: + tldts-core: "npm:^6.1.47" + bin: + tldts: bin/cli.js + checksum: 10c0/42c999ab24ce3ab221cfefe77488d145d16d9523524913badaa4af4f1f0d65e0a92a678659b22b7d26d1c62796540c95158049220c9ff243090b93470f236302 + languageName: node + linkType: hard + "tmpl@npm:1.0.5": version: 1.0.5 resolution: "tmpl@npm:1.0.5" @@ -17111,7 +17122,7 @@ __metadata: languageName: node linkType: hard -"tough-cookie@npm:^4.1.2, tough-cookie@npm:^4.1.4": +"tough-cookie@npm:^4.1.2": version: 4.1.4 resolution: "tough-cookie@npm:4.1.4" dependencies: @@ -17123,6 +17134,15 @@ __metadata: languageName: node linkType: hard +"tough-cookie@npm:^5.0.0": + version: 5.0.0 + resolution: "tough-cookie@npm:5.0.0" + dependencies: + tldts: "npm:^6.1.32" + checksum: 10c0/4a69c885bf6f45c5a64e60262af99e8c0d58a33bd3d0ce5da62121eeb9c00996d0128a72df8fc4614cbde59cc8b70aa3e21e4c3c98c2bbde137d7aba7fa00124 + languageName: node + linkType: hard + "tr46@npm:^1.0.1": version: 1.0.1 resolution: "tr46@npm:1.0.1" From f4632d941ad1f89a52a2cd1dfd09b54797e935d0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 10:40:46 +0200 Subject: [PATCH 05/22] Update dependency aws-sdk-s3 to v1.164.0 (#32010) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 79e542014c..85c3b4abd4 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -101,16 +101,16 @@ GEM awrence (1.2.1) aws-eventstream (1.3.0) aws-partitions (1.977.0) - aws-sdk-core (3.206.0) + aws-sdk-core (3.207.0) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.651.0) aws-sigv4 (~> 1.9) jmespath (~> 1, >= 1.6.1) - aws-sdk-kms (1.91.0) - aws-sdk-core (~> 3, >= 3.205.0) + aws-sdk-kms (1.92.0) + aws-sdk-core (~> 3, >= 3.207.0) aws-sigv4 (~> 1.5) - aws-sdk-s3 (1.163.0) - aws-sdk-core (~> 3, >= 3.205.0) + aws-sdk-s3 (1.164.0) + aws-sdk-core (~> 3, >= 3.207.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.5) aws-sigv4 (1.10.0) From 958f01e7225daf371307848d6fe2729a2580e0a8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 08:41:05 +0000 Subject: [PATCH 06/22] Update dependency sass to v1.79.3 (#32009) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 4aa0d4b62f..eff88f772e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15468,15 +15468,15 @@ __metadata: linkType: hard "sass@npm:^1.62.1": - version: 1.79.2 - resolution: "sass@npm:1.79.2" + version: 1.79.3 + resolution: "sass@npm:1.79.3" dependencies: chokidar: "npm:^4.0.0" immutable: "npm:^4.0.0" source-map-js: "npm:>=0.6.2 <2.0.0" bin: sass: sass.js - checksum: 10c0/b637daf133da4fbafbb7e6ae07b01ff7c73e406f3134e66749bf6f712dcc0056c6971d8629d8cc2b186df5ffb2282baa8f1818f35e326b3558ab284e31fdd87d + checksum: 10c0/ad171bbbb2d7a789cc47803a59dcf2d0ac92ede34b538bb3fd683b6391a9ac3dc3eabaac264fc9582c770c4e435b85840e011785b7adfc0ac002b51ba91179c9 languageName: node linkType: hard From 10d2f83025b3161fb2a149b997d06cbb5f1b8e48 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 08:41:26 +0000 Subject: [PATCH 07/22] Update dependency selenium-webdriver to v4.25.0 (#32008) 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 85c3b4abd4..8fece04a6d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -406,7 +406,7 @@ GEM llhttp-ffi (0.5.0) ffi-compiler (~> 1.0) rake (~> 13.0) - logger (1.6.0) + logger (1.6.1) lograge (0.14.0) actionpack (>= 4) activesupport (>= 4) @@ -781,7 +781,7 @@ GEM scenic (1.8.0) activerecord (>= 4.0.0) railties (>= 4.0.0) - selenium-webdriver (4.24.0) + selenium-webdriver (4.25.0) base64 (~> 0.2) logger (~> 1.4) rexml (~> 3.2, >= 3.2.5) From 5fae1d55e5e15bb3e44cae2677b0904799e4ef62 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 23 Sep 2024 10:42:03 +0200 Subject: [PATCH 08/22] Fix OAuth authorization prompt referring to third-party apps (#32005) --- config/locales/doorkeeper.en.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/locales/doorkeeper.en.yml b/config/locales/doorkeeper.en.yml index e28f6a7966..3b3b141afa 100644 --- a/config/locales/doorkeeper.en.yml +++ b/config/locales/doorkeeper.en.yml @@ -60,7 +60,7 @@ en: error: title: An error has occurred new: - prompt_html: "%{client_name} would like permission to access your account. It is a third-party application. If you do not trust it, then you should not authorize it." + prompt_html: "%{client_name} would like permission to access your account. Only approve this request if you recognize and trust this source." review_permissions: Review permissions title: Authorization required show: From e0b45b35c9415c912f92803ab7c797b1ae516a7e Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 23 Sep 2024 04:42:52 -0400 Subject: [PATCH 09/22] Combine repeated parsed_body assertions into single (#32002) --- .../activitypub/outboxes_controller_spec.rb | 15 +++++++++------ spec/requests/api/v1/admin/tags_spec.rb | 14 ++++++++++---- spec/requests/api/v1/apps/credentials_spec.rb | 5 +++-- 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/spec/controllers/activitypub/outboxes_controller_spec.rb b/spec/controllers/activitypub/outboxes_controller_spec.rb index 7ae28e8e09..ca986dcabb 100644 --- a/spec/controllers/activitypub/outboxes_controller_spec.rb +++ b/spec/controllers/activitypub/outboxes_controller_spec.rb @@ -69,9 +69,10 @@ RSpec.describe ActivityPub::OutboxesController do expect(response.parsed_body) .to include( - orderedItems: be_an(Array).and(have_attributes(size: 2)) + orderedItems: be_an(Array) + .and(have_attributes(size: 2)) + .and(all(satisfy { |item| targets_public_collection?(item) })) ) - expect(response.parsed_body[:orderedItems].all? { |item| targets_public_collection?(item) }).to be true end context 'when account is permanently suspended' do @@ -113,9 +114,10 @@ RSpec.describe ActivityPub::OutboxesController do expect(response.parsed_body) .to include( - orderedItems: be_an(Array).and(have_attributes(size: 2)) + orderedItems: be_an(Array) + .and(have_attributes(size: 2)) + .and(all(satisfy { |item| targets_public_collection?(item) })) ) - expect(response.parsed_body[:orderedItems].all? { |item| targets_public_collection?(item) }).to be true end end @@ -132,9 +134,10 @@ RSpec.describe ActivityPub::OutboxesController do expect(response.parsed_body) .to include( - orderedItems: be_an(Array).and(have_attributes(size: 3)) + orderedItems: be_an(Array) + .and(have_attributes(size: 3)) + .and(all(satisfy { |item| targets_public_collection?(item) || targets_followers_collection?(item, account) })) ) - expect(response.parsed_body[:orderedItems].all? { |item| targets_public_collection?(item) || targets_followers_collection?(item, account) }).to be true end end diff --git a/spec/requests/api/v1/admin/tags_spec.rb b/spec/requests/api/v1/admin/tags_spec.rb index 3623c09ac7..696a11da67 100644 --- a/spec/requests/api/v1/admin/tags_spec.rb +++ b/spec/requests/api/v1/admin/tags_spec.rb @@ -82,8 +82,11 @@ RSpec.describe 'Tags' do expect(response.content_type) .to start_with('application/json') - expect(response.parsed_body[:id].to_i).to eq(tag.id) - expect(response.parsed_body[:name]).to eq(tag.name) + expect(response.parsed_body) + .to include( + id: tag.id.to_s, + name: tag.name + ) end context 'when the requested tag does not exist' do @@ -116,8 +119,11 @@ RSpec.describe 'Tags' do expect(response.content_type) .to start_with('application/json') - expect(response.parsed_body[:id].to_i).to eq(tag.id) - expect(response.parsed_body[:name]).to eq(tag.name.upcase) + expect(response.parsed_body) + .to include( + id: tag.id.to_s, + name: tag.name.upcase + ) end context 'when the updated display name is invalid' do diff --git a/spec/requests/api/v1/apps/credentials_spec.rb b/spec/requests/api/v1/apps/credentials_spec.rb index 30200ed60c..8e5fa14b7e 100644 --- a/spec/requests/api/v1/apps/credentials_spec.rb +++ b/spec/requests/api/v1/apps/credentials_spec.rb @@ -41,8 +41,9 @@ RSpec.describe 'Credentials' do expect(response.content_type) .to start_with('application/json') - expect(response.parsed_body[:client_id]).to_not be_present - expect(response.parsed_body[:client_secret]).to_not be_present + expect(response.parsed_body) + .to not_include(client_id: be_present) + .and not_include(client_secret: be_present) end end From 0ba3ad4a354df6b7cdcc9fbad4dc50d86f429171 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 23 Sep 2024 04:45:05 -0400 Subject: [PATCH 10/22] Remove `body_json_ids` from api/v2/admin/accounts spec (#32003) --- spec/requests/api/v2/admin/accounts_spec.rb | 32 ++++++++++++++------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/spec/requests/api/v2/admin/accounts_spec.rb b/spec/requests/api/v2/admin/accounts_spec.rb index bc3db4f886..1d1fda3e67 100644 --- a/spec/requests/api/v2/admin/accounts_spec.rb +++ b/spec/requests/api/v2/admin/accounts_spec.rb @@ -36,7 +36,10 @@ RSpec.describe 'API V2 Admin Accounts' do expect(response).to have_http_status(200) expect(response.content_type) .to start_with('application/json') - expect(body_json_ids).to eq([admin_account.id]) + expect(response.parsed_body) + .to contain_exactly( + hash_including(id: admin_account.id.to_s) + ) end end @@ -47,8 +50,11 @@ RSpec.describe 'API V2 Admin Accounts' do expect(response).to have_http_status(200) expect(response.content_type) .to start_with('application/json') - expect(body_json_ids).to include(remote_account.id) - expect(body_json_ids).to_not include(other_remote_account.id) + expect(response.parsed_body) + .to contain_exactly( + hash_including(id: remote_account.id.to_s) + ) + .and not_include(hash_including(id: other_remote_account.id.to_s)) end end @@ -59,7 +65,11 @@ RSpec.describe 'API V2 Admin Accounts' do expect(response).to have_http_status(200) expect(response.content_type) .to start_with('application/json') - expect(body_json_ids).to include(suspended_remote.id, suspended_account.id) + expect(response.parsed_body) + .to contain_exactly( + hash_including(id: suspended_remote.id.to_s), + hash_including(id: suspended_account.id.to_s) + ) end end @@ -70,7 +80,10 @@ RSpec.describe 'API V2 Admin Accounts' do expect(response).to have_http_status(200) expect(response.content_type) .to start_with('application/json') - expect(body_json_ids).to include(disabled_account.id) + expect(response.parsed_body) + .to contain_exactly( + hash_including(id: disabled_account.id.to_s) + ) end end @@ -81,14 +94,13 @@ RSpec.describe 'API V2 Admin Accounts' do expect(response).to have_http_status(200) expect(response.content_type) .to start_with('application/json') - expect(body_json_ids).to include(pending_account.id) + expect(response.parsed_body) + .to contain_exactly( + hash_including(id: pending_account.id.to_s) + ) end end - def body_json_ids - response.parsed_body.map { |a| a[:id].to_i } - end - context 'with limit param' do let(:params) { { limit: 1 } } From ed90d9342ee61efa110996dc88f7352c3c9efe8d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 08:50:19 +0000 Subject: [PATCH 11/22] New Crowdin Translations (automated) (#32011) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/an.json | 2 - app/javascript/mastodon/locales/ar.json | 2 - app/javascript/mastodon/locales/be.json | 2 - app/javascript/mastodon/locales/bg.json | 2 - app/javascript/mastodon/locales/br.json | 2 - app/javascript/mastodon/locales/ca.json | 4 +- app/javascript/mastodon/locales/ckb.json | 2 - app/javascript/mastodon/locales/co.json | 2 - app/javascript/mastodon/locales/cs.json | 2 - app/javascript/mastodon/locales/cy.json | 2 - app/javascript/mastodon/locales/da.json | 4 +- app/javascript/mastodon/locales/de.json | 6 +- app/javascript/mastodon/locales/el.json | 2 - app/javascript/mastodon/locales/en-GB.json | 4 +- app/javascript/mastodon/locales/eo.json | 97 +++++++++++++++++++- app/javascript/mastodon/locales/es-AR.json | 4 +- app/javascript/mastodon/locales/es-MX.json | 4 +- app/javascript/mastodon/locales/es.json | 4 +- app/javascript/mastodon/locales/et.json | 2 - app/javascript/mastodon/locales/eu.json | 2 - app/javascript/mastodon/locales/fa.json | 2 - app/javascript/mastodon/locales/fi.json | 4 +- app/javascript/mastodon/locales/fo.json | 4 +- app/javascript/mastodon/locales/fr-CA.json | 2 - app/javascript/mastodon/locales/fr.json | 2 - app/javascript/mastodon/locales/fy.json | 2 - app/javascript/mastodon/locales/ga.json | 4 +- app/javascript/mastodon/locales/gd.json | 2 - app/javascript/mastodon/locales/gl.json | 4 +- app/javascript/mastodon/locales/he.json | 4 +- app/javascript/mastodon/locales/hi.json | 2 - app/javascript/mastodon/locales/hu.json | 4 +- app/javascript/mastodon/locales/hy.json | 2 - app/javascript/mastodon/locales/ia.json | 2 - app/javascript/mastodon/locales/id.json | 2 - app/javascript/mastodon/locales/ie.json | 2 - app/javascript/mastodon/locales/io.json | 2 - app/javascript/mastodon/locales/is.json | 2 - app/javascript/mastodon/locales/it.json | 4 +- app/javascript/mastodon/locales/ja.json | 6 +- app/javascript/mastodon/locales/kab.json | 8 +- app/javascript/mastodon/locales/ko.json | 4 +- app/javascript/mastodon/locales/ku.json | 2 - app/javascript/mastodon/locales/kw.json | 2 - app/javascript/mastodon/locales/lad.json | 6 +- app/javascript/mastodon/locales/lt.json | 4 +- app/javascript/mastodon/locales/lv.json | 2 - app/javascript/mastodon/locales/mr.json | 2 - app/javascript/mastodon/locales/ms.json | 2 - app/javascript/mastodon/locales/my.json | 2 - app/javascript/mastodon/locales/nl.json | 4 +- app/javascript/mastodon/locales/nn.json | 4 +- app/javascript/mastodon/locales/no.json | 2 - app/javascript/mastodon/locales/oc.json | 2 - app/javascript/mastodon/locales/pl.json | 4 +- app/javascript/mastodon/locales/pt-BR.json | 3 +- app/javascript/mastodon/locales/pt-PT.json | 2 - app/javascript/mastodon/locales/ro.json | 2 - app/javascript/mastodon/locales/ru.json | 2 - app/javascript/mastodon/locales/sa.json | 2 - app/javascript/mastodon/locales/sc.json | 2 - app/javascript/mastodon/locales/sco.json | 2 - app/javascript/mastodon/locales/sk.json | 2 - app/javascript/mastodon/locales/sl.json | 2 - app/javascript/mastodon/locales/sq.json | 2 - app/javascript/mastodon/locales/sr-Latn.json | 2 - app/javascript/mastodon/locales/sr.json | 2 - app/javascript/mastodon/locales/sv.json | 2 - app/javascript/mastodon/locales/th.json | 2 - app/javascript/mastodon/locales/tok.json | 2 - app/javascript/mastodon/locales/tr.json | 4 +- app/javascript/mastodon/locales/tt.json | 2 - app/javascript/mastodon/locales/uk.json | 4 +- app/javascript/mastodon/locales/vi.json | 80 ++++++++-------- app/javascript/mastodon/locales/zh-CN.json | 4 +- app/javascript/mastodon/locales/zh-HK.json | 2 - app/javascript/mastodon/locales/zh-TW.json | 4 +- config/locales/devise.kab.yml | 4 +- config/locales/doorkeeper.kab.yml | 12 +-- config/locales/es-MX.yml | 2 +- config/locales/ja.yml | 3 + config/locales/kab.yml | 8 +- config/locales/lad.yml | 19 ++++ config/locales/simple_form.kab.yml | 2 +- config/locales/simple_form.lad.yml | 1 + config/locales/simple_form.vi.yml | 12 +-- config/locales/vi.yml | 18 ++-- 87 files changed, 247 insertions(+), 224 deletions(-) diff --git a/app/javascript/mastodon/locales/an.json b/app/javascript/mastodon/locales/an.json index fcd3080421..be303985ee 100644 --- a/app/javascript/mastodon/locales/an.json +++ b/app/javascript/mastodon/locales/an.json @@ -288,8 +288,6 @@ "keyboard_shortcuts.unfocus": "Retirar lo foco d'a caixa de redacción/busqueda", "keyboard_shortcuts.up": "Ir enta alto en a lista", "lightbox.close": "Zarrar", - "lightbox.compress": "Comprimir quadro de visualización d'imachen", - "lightbox.expand": "Expandir quadro de visualización d'imachen", "lightbox.next": "Siguient", "lightbox.previous": "Anterior", "limited_account_hint.action": "Amostrar perfil de totz modos", diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index d50ca8dbb5..17b288723b 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -420,8 +420,6 @@ "keyboard_shortcuts.unfocus": "لإلغاء التركيز على حقل النص أو نافذة البحث", "keyboard_shortcuts.up": "للانتقال إلى أعلى القائمة", "lightbox.close": "إغلاق", - "lightbox.compress": "ضغط مربع عرض الصورة", - "lightbox.expand": "توسيع مربع عرض الصور", "lightbox.next": "التالي", "lightbox.previous": "العودة", "limited_account_hint.action": "إظهار الملف التعريفي على أي حال", diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json index 8c28e71d2c..098c7a7e9d 100644 --- a/app/javascript/mastodon/locales/be.json +++ b/app/javascript/mastodon/locales/be.json @@ -412,8 +412,6 @@ "keyboard_shortcuts.unfocus": "Расфакусаваць тэкставую вобласць/пошукавы радок", "keyboard_shortcuts.up": "Перамясціцца ўверх па спісе", "lightbox.close": "Закрыць", - "lightbox.compress": "Сціснуць бачную вобласць выявы", - "lightbox.expand": "Павялічыць бачную вобласць выявы", "lightbox.next": "Далей", "lightbox.previous": "Назад", "limited_account_hint.action": "Усе роўна паказваць профіль", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index 507b8d2937..c8f8474e91 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -419,8 +419,6 @@ "keyboard_shortcuts.unfocus": "Разфокусиране на текстовото поле за съставяне/търсене", "keyboard_shortcuts.up": "Преместване нагоре в списъка", "lightbox.close": "Затваряне", - "lightbox.compress": "Свиване на полето за преглед на образи", - "lightbox.expand": "Разгъване на полето за преглед на образи", "lightbox.next": "Напред", "lightbox.previous": "Назад", "limited_account_hint.action": "Показване на профила въпреки това", diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json index 18616fcef2..79949ed91f 100644 --- a/app/javascript/mastodon/locales/br.json +++ b/app/javascript/mastodon/locales/br.json @@ -338,8 +338,6 @@ "keyboard_shortcuts.unfocus": "Difokus an dachenn testenn/klask", "keyboard_shortcuts.up": "Pignat er roll", "lightbox.close": "Serriñ", - "lightbox.compress": "Bihanaat boest hewel ar skeudenn", - "lightbox.expand": "Ledanaat boest hewel ar skeudenn", "lightbox.next": "Da-heul", "lightbox.previous": "A-raok", "limited_account_hint.action": "Diskouez an aelad memes tra", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 3cdeab3ae4..710ac594f5 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "Descentra l'àrea de composició de text/cerca", "keyboard_shortcuts.up": "Apuja a la llista", "lightbox.close": "Tanca", - "lightbox.compress": "Comprimeix el quadre de visualització d’imatge", - "lightbox.expand": "Amplia el quadre de visualització d’imatge", "lightbox.next": "Següent", "lightbox.previous": "Anterior", + "lightbox.zoom_in": "Amplia fins a la mida real", + "lightbox.zoom_out": "Amplia fins a encabir", "limited_account_hint.action": "Mostra el perfil de totes maneres", "limited_account_hint.title": "Aquest perfil l'han amagat els moderadors de {domain}.", "link_preview.author": "Per {name}", diff --git a/app/javascript/mastodon/locales/ckb.json b/app/javascript/mastodon/locales/ckb.json index 2a3a391eab..bea6e5ceec 100644 --- a/app/javascript/mastodon/locales/ckb.json +++ b/app/javascript/mastodon/locales/ckb.json @@ -335,8 +335,6 @@ "keyboard_shortcuts.unfocus": "بۆ دروستکردنی ناوچەی دەق/گەڕان", "keyboard_shortcuts.up": "بۆ ئەوەی لە لیستەکەدا بڕۆیت", "lightbox.close": "دابخە", - "lightbox.compress": "سندوقی نیشاندانی وێنە بپەستێنە", - "lightbox.expand": "فراوانکردنی سندوقی بینینی وێنە", "lightbox.next": "داهاتوو", "lightbox.previous": "پێشوو", "limited_account_hint.action": "بەهەر حاڵ پڕۆفایلی پیشان بدە", diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json index 37eb945615..043061769b 100644 --- a/app/javascript/mastodon/locales/co.json +++ b/app/javascript/mastodon/locales/co.json @@ -196,8 +196,6 @@ "keyboard_shortcuts.unfocus": "ùn fucalizà più l'area di testu", "keyboard_shortcuts.up": "cullà indè a lista", "lightbox.close": "Chjudà", - "lightbox.compress": "Cumprime a finestra d'affissera di i ritratti", - "lightbox.expand": "Ingrandà a finestra d'affissera di i ritratti", "lightbox.next": "Siguente", "lightbox.previous": "Pricidente", "lists.account.add": "Aghjunghje à a lista", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index af7a012813..b70ff3ee2b 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -410,8 +410,6 @@ "keyboard_shortcuts.unfocus": "Zrušit zaměření na nový příspěvek/hledání", "keyboard_shortcuts.up": "Posunout v seznamu nahoru", "lightbox.close": "Zavřít", - "lightbox.compress": "Sbalit pole zobrazení obrázku", - "lightbox.expand": "Rozbalit pole zobrazení obrázku", "lightbox.next": "Další", "lightbox.previous": "Předchozí", "limited_account_hint.action": "Přesto profil zobrazit", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index 51ea1bdf3a..ec93a5b11b 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -432,8 +432,6 @@ "keyboard_shortcuts.unfocus": "Dad-ffocysu ardal cyfansoddi testun/chwilio", "keyboard_shortcuts.up": "Symud yn uwch yn y rhestr", "lightbox.close": "Cau", - "lightbox.compress": "Cywasgu blwch gweld delwedd", - "lightbox.expand": "Ehangu blwch gweld delwedd", "lightbox.next": "Nesaf", "lightbox.previous": "Blaenorol", "limited_account_hint.action": "Dangos y proffil beth bynnag", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index 2c36869622..76752802b0 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "Fjern fokus fra tekstskrivningsområde/søgning", "keyboard_shortcuts.up": "Flyt opad på listen", "lightbox.close": "Luk", - "lightbox.compress": "Komprimér billedvisningsfelt", - "lightbox.expand": "Udvid billedvisningsfelt", "lightbox.next": "Næste", "lightbox.previous": "Forrige", + "lightbox.zoom_in": "Zoom til faktisk størrelse", + "lightbox.zoom_out": "Zoom for at tilpasse", "limited_account_hint.action": "Vis profil alligevel", "limited_account_hint.title": "Denne profil er blevet skjult af {domain}-moderatorerne.", "link_preview.author": "Af {name}", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index e6c086bfa2..1931ce23f1 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -155,7 +155,7 @@ "compose_form.lock_disclaimer.lock": "geschützt", "compose_form.placeholder": "Was gibt’s Neues?", "compose_form.poll.duration": "Umfragedauer", - "compose_form.poll.multiple": "Mul­ti­ple-Choice", + "compose_form.poll.multiple": "Mehrfachauswahl", "compose_form.poll.option_placeholder": "Option {number}", "compose_form.poll.single": "Einfachauswahl", "compose_form.poll.switch_to_multiple": "Mehrfachauswahl erlauben", @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "Eingabefeld/Suche nicht mehr fokussieren", "keyboard_shortcuts.up": "Ansicht nach oben bewegen", "lightbox.close": "Schließen", - "lightbox.compress": "Bildansicht verkleinern", - "lightbox.expand": "Bildansicht vergrößern", "lightbox.next": "Vor", "lightbox.previous": "Zurück", + "lightbox.zoom_in": "In Originalgröße anzeigen", + "lightbox.zoom_out": "In angepasster Größe anzeigen", "limited_account_hint.action": "Profil trotzdem anzeigen", "limited_account_hint.title": "Dieses Profil wurde von den Moderator*innen von {domain} ausgeblendet.", "link_preview.author": "Von {name}", diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 367efe1cd9..ac6a2cf4e8 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -427,8 +427,6 @@ "keyboard_shortcuts.unfocus": "Αποεστίαση του πεδίου σύνθεσης/αναζήτησης", "keyboard_shortcuts.up": "Μετακίνηση προς τα πάνω στη λίστα", "lightbox.close": "Κλείσιμο", - "lightbox.compress": "Συμπίεση πλαισίου προβολής εικόνας", - "lightbox.expand": "Ανάπτυξη πλαισίου εμφάνισης εικόνας", "lightbox.next": "Επόμενο", "lightbox.previous": "Προηγούμενο", "limited_account_hint.action": "Εμφάνιση προφίλ ούτως ή άλλως", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index c81f389b9d..c0335dd6b2 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "Move up in the list", "lightbox.close": "Close", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", + "lightbox.zoom_in": "Zoom to actual size", + "lightbox.zoom_out": "Zoom to fit", "limited_account_hint.action": "Show profile anyway", "limited_account_hint.title": "This profile has been hidden by the moderators of {domain}.", "link_preview.author": "By {name}", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index e162e732d0..05f53fb731 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -215,8 +215,25 @@ "dismissable_banner.explore_statuses": "Ĉi tioj estas afiŝoj de socia reto kiu populariĝas hodiau.", "dismissable_banner.explore_tags": "Ĉi tiuj kradvostoj populariĝas en ĉi tiu kaj aliaj serviloj en la malcentraliza reto nun.", "dismissable_banner.public_timeline": "Ĉi tioj estas plej lastaj publikaj afiŝoj de personoj ĉe socia reto kiu personoj ĉe {domain} sekvas.", + "domain_block_modal.block": "Bloki servilon", + "domain_block_modal.block_account_instead": "Bloki @{name} anstataŭe", + "domain_block_modal.they_can_interact_with_old_posts": "Homoj de ĉi tiu servilo povas interagi kun viaj malnovaj afiŝoj.", "domain_block_modal.they_cant_follow": "Neniu el ĉi tiu servilo povas sekvi vin.", + "domain_block_modal.they_wont_know": "Ili ne scios, ke ili estas blokitaj.", + "domain_block_modal.title": "Ĉu bloki la domajnon?", + "domain_block_modal.you_will_lose_followers": "Ĉiuj viaj sekvantoj de ĉi tiu servilo estos forigitaj.", + "domain_block_modal.you_wont_see_posts": "Vi ne vidos afiŝojn aŭ sciigojn de uzantoj sur ĉi tiu servilo.", + "domain_pill.activitypub_lets_connect": "Ĝi ebligas vin konekti kaj interagi kun homoj ne nur sur Mastodon, sed ankaŭ tra diversaj sociaj apoj.", + "domain_pill.activitypub_like_language": "ActivityPub estas kiel la lingvo kiun Mastodon parolas kun aliaj sociaj retoj.", + "domain_pill.server": "Servilo", + "domain_pill.their_handle": "Ilia identigo:", + "domain_pill.their_server": "Ilia cifereca hejmo, kie ĉiuj iliaj afiŝoj loĝas.", + "domain_pill.their_username": "Ilia unika identigilo sur ilia servilo. Eblas trovi uzantojn kun la sama uzantnomo sur malsamaj serviloj.", "domain_pill.username": "Uzantnomo", + "domain_pill.whats_in_a_handle": "Kio estas en identigo?", + "domain_pill.your_handle": "Via identigo:", + "domain_pill.your_server": "Via cifereca hejmo, kie loĝas ĉiuj viaj afiŝoj. Ĉu vi ne ŝatas ĉi tiun? Transloku servilojn iam ajn kaj alportu ankaŭ viajn sekvantojn.", + "domain_pill.your_username": "Via unika identigilo sur ĉi tiu servilo. Eblas trovi uzantojn kun la sama uzantnomo sur malsamaj serviloj.", "embed.instructions": "Enkorpigu ĉi tiun afiŝon en vian retejon per kopio de la suba kodo.", "embed.preview": "Ĝi aperos tiel:", "emoji_button.activity": "Agadoj", @@ -253,6 +270,7 @@ "empty_column.list": "Ankoraŭ estas nenio en ĉi tiu listo. Kiam membroj de ĉi tiu listo afiŝos novajn afiŝojn, ili aperos ĉi tie.", "empty_column.lists": "Vi ankoraŭ ne havas liston. Kiam vi kreos iun, ĝi aperos ĉi tie.", "empty_column.mutes": "Vi ne ankoraŭ silentigis iun uzanton.", + "empty_column.notification_requests": "Ĉio klara! Estas nenio tie ĉi. Kiam vi ricevas novajn sciigojn, ili aperos ĉi tie laŭ viaj agordoj.", "empty_column.notifications": "Vi ankoraŭ ne havas sciigojn. Interagu kun aliaj por komenci konversacion.", "empty_column.public": "Estas nenio ĉi tie! Publike skribu ion, aŭ mane sekvu uzantojn de aliaj serviloj por plenigi la publikan tempolinion", "error.unexpected_crash.explanation": "Pro eraro en nia kodo, aŭ problemo de kongruo en via retumilo, ĉi tiu paĝo ne povis esti montrata ĝuste.", @@ -283,6 +301,8 @@ "filter_modal.select_filter.subtitle": "Uzu ekzistantan kategorion aŭ kreu novan", "filter_modal.select_filter.title": "Filtri ĉi tiun afiŝon", "filter_modal.title.status": "Filtri mesaĝon", + "filtered_notifications_banner.pending_requests": "El {count, plural, =0 {neniu} one {unu persono} other {# homoj}} vi eble konas", + "filtered_notifications_banner.title": "Filtritaj sciigoj", "firehose.all": "Ĉiuj", "firehose.local": "Ĉi tiu servilo", "firehose.remote": "Aliaj serviloj", @@ -290,9 +310,13 @@ "follow_request.reject": "Rifuzi", "follow_requests.unlocked_explanation": "Kvankam via konto ne estas ŝlosita, la dungitaro de {domain} opinias, ke vi eble volas revizii petojn pri sekvado de ĉi tiuj kontoj permane.", "follow_suggestions.dismiss": "Ne montri denove", + "follow_suggestions.friends_of_friends_longer": "Populara inter homoj, kiujn vi sekvas", "follow_suggestions.hints.friends_of_friends": "Ĉi tiu profilo estas populara inter la homoj, kiujn vi sekvas.", "follow_suggestions.hints.most_followed": "Ĉi tiu profilo estas unu el la plej sekvataj en {domain}.", + "follow_suggestions.hints.similar_to_recently_followed": "Ĉi tiu profilo similas al la profiloj kiujn vi plej lastatempe sekvis.", + "follow_suggestions.popular_suggestion": "Popularaj proponoj", "follow_suggestions.popular_suggestion_longer": "Populara en {domain}", + "follow_suggestions.similar_to_recently_followed_longer": "Simile al profiloj, kiujn vi lastatempe sekvis", "follow_suggestions.view_all": "Vidi ĉiujn", "follow_suggestions.who_to_follow": "Kiun sekvi", "followed_tags": "Sekvataj kradvortoj", @@ -321,6 +345,11 @@ "hashtag.follow": "Sekvi la kradvorton", "hashtag.unfollow": "Ne plu sekvi la kradvorton", "hashtags.and_other": "…kaj {count, plural,other {# pli}}", + "hints.profiles.followers_may_be_missing": "Sekvantoj por ĉi tiu profilo eble mankas.", + "hints.profiles.posts_may_be_missing": "Iuj afiŝoj de ĉi tiu profilo eble mankas.", + "hints.profiles.see_more_followers": "Vidi pli da sekvantoj sur {domain}", + "hints.profiles.see_more_posts": "Vidi pli da afiŝoj sur {domain}", + "hints.threads.see_more": "Vidi pli da respondoj sur {domain}", "home.column_settings.show_reblogs": "Montri diskonigojn", "home.column_settings.show_replies": "Montri respondojn", "home.hide_announcements": "Kaŝi la anoncojn", @@ -328,6 +357,13 @@ "home.pending_critical_update.link": "Vidi ĝisdatigojn", "home.pending_critical_update.title": "Kritika sekurĝisdatigo estas disponebla!", "home.show_announcements": "Montri anoncojn", + "ignore_notifications_modal.disclaimer": "Mastodon ne povas informi uzantojn, ke vi ignoris iliajn sciigojn. Ignori sciigojn ne malhelpos la mesaĝojn mem esti senditaj.", + "ignore_notifications_modal.ignore": "Ignori sciigojn", + "ignore_notifications_modal.limited_accounts_title": "Ĉu ignori sciigojn de moderigitaj kontoj?", + "ignore_notifications_modal.new_accounts_title": "Ĉu ignori sciigojn de novaj kontoj?", + "ignore_notifications_modal.not_followers_title": "Ĉu ignori sciigojn de homoj, kiuj ne sekvas vin?", + "ignore_notifications_modal.not_following_title": "Ĉu ignori sciigojn de homoj, kiujn vi ne sekvas?", + "ignore_notifications_modal.private_mentions_title": "Ĉu ignori sciigojn de nepetitaj privataj mencioj?", "interaction_modal.description.favourite": "Per konto ĉe Mastodon, vi povas stelumiti ĉi tiun afiŝon por sciigi la afiŝanton ke vi aprezigas ŝin kaj konservas por la estonteco.", "interaction_modal.description.follow": "Kun konto ĉe Mastodon, vi povos sekvi {name} por vidi ties mesaĝojn en via hejmo.", "interaction_modal.description.reblog": "Kun konto ĉe Mastodon, vi povas diskonigi ĉi tiun afiŝon, por ke viaj propraj sekvantoj vidu ĝin.", @@ -381,13 +417,14 @@ "keyboard_shortcuts.unfocus": "malenfokusigi la tekstujon aŭ la serĉilon", "keyboard_shortcuts.up": "iri supren en la listo", "lightbox.close": "Fermi", - "lightbox.compress": "Kunpremi bildan vidkeston", - "lightbox.expand": "Pligrandigi bildan vidkeston", "lightbox.next": "Antaŭen", "lightbox.previous": "Malantaŭen", + "lightbox.zoom_in": "Zomi al reala grandeco", + "lightbox.zoom_out": "Zomi por konveni", "limited_account_hint.action": "Montru profilon ĉiukaze", "limited_account_hint.title": "La profilo estas kaŝita de la moderigantoj de {domain}.", "link_preview.author": "De {name}", + "link_preview.more_from_author": "Pli de {name}", "link_preview.shares": "{count, plural, one {{counter} afiŝo} other {{counter} afiŝoj}}", "lists.account.add": "Aldoni al la listo", "lists.account.remove": "Forigi de la listo", @@ -407,8 +444,15 @@ "loading_indicator.label": "Ŝargado…", "media_gallery.hide": "Kaŝi", "moved_to_account_banner.text": "Via konto {disabledAccount} estas malvalidigita ĉar vi movis ĝin al {movedToAccount}.", + "mute_modal.hide_from_notifications": "Kaŝi de sciigoj", + "mute_modal.hide_options": "Kaŝi agordojn", + "mute_modal.indefinite": "Ĝis mi malsilentas ilin", "mute_modal.show_options": "Montri agordojn", "mute_modal.they_can_mention_and_follow": "Ili povas mencii kaj sekvi vin, sed vi ne vidos ilin.", + "mute_modal.they_wont_know": "Ili ne scios, ke ili estas silentigitaj.", + "mute_modal.title": "Ĉu silentigi uzanton?", + "mute_modal.you_wont_see_mentions": "Vi ne vidos afiŝojn, kiuj mencias ilin.", + "mute_modal.you_wont_see_posts": "Ili ankoraŭ povas vidi viajn afiŝojn, sed vi ne vidos iliajn.", "navigation_bar.about": "Pri", "navigation_bar.administration": "Administrado", "navigation_bar.advanced_interface": "Malfermi altnivelan retpaĝan interfacon", @@ -437,28 +481,58 @@ "navigation_bar.security": "Sekureco", "not_signed_in_indicator.not_signed_in": "Necesas saluti por aliri tiun rimedon.", "notification.admin.report": "{name} raportis {target}", + "notification.admin.report_account": "{name} raportis {count, plural, one {afiŝon} other {# afiŝojn}} de {target} por {category}", + "notification.admin.report_account_other": "{name} raportis {count, plural, one {afiŝon} other {# afiŝojn}} de {target}", + "notification.admin.report_statuses": "{name} raportis {target} por {category}", + "notification.admin.report_statuses_other": "{name} raportis {target}", "notification.admin.sign_up": "{name} kreis konton", "notification.favourite": "{name} stelumis vian afiŝon", "notification.follow": "{name} eksekvis vin", + "notification.follow.name_and_others": "{name} kaj {count, plural, one {# alia} other {# aliaj}} sekvis vin", "notification.follow_request": "{name} petis sekvi vin", + "notification.follow_request.name_and_others": "{name} kaj {count, plural, one {# alia} other {# aliaj}} petis sekvi vin", "notification.label.mention": "Mencii", "notification.label.private_mention": "Privata mencio", "notification.label.private_reply": "Privata respondo", "notification.label.reply": "Respondi", "notification.mention": "Mencii", "notification.moderation-warning.learn_more": "Lerni pli", + "notification.moderation_warning": "Vi ricevis moderigan averton", + "notification.moderation_warning.action_delete_statuses": "Kelkaj el viaj afiŝoj estis forigitaj.", + "notification.moderation_warning.action_disable": "Via konto estas malŝaltita.", + "notification.moderation_warning.action_mark_statuses_as_sensitive": "Kelkaj el viaj afiŝoj estis markitaj kiel sentemaj.", + "notification.moderation_warning.action_none": "Via konto ricevis moderigan averton.", + "notification.moderation_warning.action_sensitive": "Viaj afiŝoj estos markitaj kiel sentemaj ekde nun.", + "notification.moderation_warning.action_silence": "Via konto estis limigita.", + "notification.moderation_warning.action_suspend": "Via konto estas malakceptita.", "notification.own_poll": "Via enketo finiĝis", "notification.reblog": "{name} diskonigis vian afiŝon", + "notification.reblog.name_and_others_with_link": "{name} kaj {count, plural, one {# alia} other {# aliaj}} diskonigis vian afiŝon", "notification.relationships_severance_event.learn_more": "Lerni pli", "notification.status": "{name} ĵus afiŝis", "notification.update": "{name} redaktis afiŝon", "notification_requests.accept": "Akcepti", + "notification_requests.accept_multiple": "{count, plural, one {Akcepti # peton…} other {Akcepti # petojn…}}", + "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Akcepti peton} other {Akcepti petojn}}", + "notification_requests.confirm_accept_multiple.title": "Ĉu akcepti sciigajn petojn?", + "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Malakcepti peton} other {Malakcepti petojn}}", + "notification_requests.confirm_dismiss_multiple.title": "Ĉu malakcepti sciigajn petojn?", + "notification_requests.dismiss": "Forĵeti", + "notification_requests.edit_selection": "Redakti", + "notification_requests.exit_selection": "Farita", + "notification_requests.explainer_for_limited_account": "Sciigoj de ĉi tiu konto estis filtritaj ĉar la konto estis limigita de moderanto.", + "notification_requests.explainer_for_limited_remote_account": "Sciigoj de ĉi tiu konto estis filtritaj ĉar la konto aŭ ĝia servilo estis limigitaj de moderanto.", + "notification_requests.notifications_from": "Sciigoj de {name}", + "notification_requests.title": "Filtritaj sciigoj", + "notification_requests.view": "Vidi sciigojn", "notifications.clear": "Forviŝi sciigojn", "notifications.clear_confirmation": "Ĉu vi certas, ke vi volas porĉiame forviŝi ĉiujn viajn sciigojn?", + "notifications.clear_title": "Ĉu forigi sciigojn?", "notifications.column_settings.admin.report": "Novaj raportoj:", "notifications.column_settings.admin.sign_up": "Novaj registriĝoj:", "notifications.column_settings.alert": "Sciigoj de la retumilo", "notifications.column_settings.favourite": "Stelumoj:", + "notifications.column_settings.filter_bar.advanced": "Montri ĉiujn kategoriojn", "notifications.column_settings.follow": "Novaj sekvantoj:", "notifications.column_settings.follow_request": "Novaj petoj de sekvado:", "notifications.column_settings.mention": "Mencioj:", @@ -485,7 +559,18 @@ "notifications.permission_denied_alert": "Labortablaj sciigoj ne povas esti ebligitaj, ĉar retumilpermeso antaŭe estis rifuzita", "notifications.permission_required": "Labortablaj sciigoj ne disponeblas ĉar la bezonata permeso ne estis donita.", "notifications.policy.accept": "Akcepti", + "notifications.policy.accept_hint": "Montri en sciigoj", + "notifications.policy.drop": "Ignori", + "notifications.policy.drop_hint": "Sendi al la malpleno, por neniam esti vidita denove", + "notifications.policy.filter": "Filtri", + "notifications.policy.filter_limited_accounts_title": "Moderigitaj kontoj", + "notifications.policy.filter_new_accounts.hint": "Kreite en la {days, plural, one {lasta tago} other {# lastaj tagoj}}", "notifications.policy.filter_new_accounts_title": "Novaj kontoj", + "notifications.policy.filter_not_followers_title": "Homoj, kiuj ne sekvas vin", + "notifications.policy.filter_not_following_hint": "Ĝis vi permane aprobas ilin", + "notifications.policy.filter_not_following_title": "Homoj, kiujn vi ne sekvas", + "notifications.policy.filter_private_mentions_title": "Nepetitaj privataj mencioj", + "notifications.policy.title": "Administri sciigojn de…", "notifications_permission_banner.enable": "Ŝalti retumilajn sciigojn", "notifications_permission_banner.how_to_control": "Por ricevi sciigojn kiam Mastodon ne estas malfermita, ebligu labortablajn sciigojn. Vi povas regi precize kiuj specoj de interagoj generas labortablajn sciigojn per la supra butono {icon} post kiam ili estas ebligitaj.", "notifications_permission_banner.title": "Neniam preterlasas iun ajn", @@ -609,10 +694,13 @@ "report.unfollow_explanation": "Vi sekvas ĉi tiun konton. Por ne plu vidi ĝiajn afiŝojn en via hejma templinio, ĉesu sekvi ĝin.", "report_notification.attached_statuses": "{count, plural, one {{count} afiŝo almetita} other {{count} afiŝoj almetitaj}}", "report_notification.categories.legal": "Laŭleĝa", + "report_notification.categories.legal_sentence": "kontraŭleĝa enhavo", "report_notification.categories.other": "Alia", "report_notification.categories.other_sentence": "alia", "report_notification.categories.spam": "Trudmesaĝo", + "report_notification.categories.spam_sentence": "trudmesaĝo", "report_notification.categories.violation": "Malobservo de la regulo", + "report_notification.categories.violation_sentence": "malobservo de la regulo", "report_notification.open": "Malfermi la raporton", "search.no_recent_searches": "Neniuj lastaj serĉoj", "search.placeholder": "Serĉi", @@ -640,8 +728,10 @@ "server_banner.about_active_users": "Personoj uzantaj ĉi tiun servilon dum la lastaj 30 tagoj (Aktivaj Uzantoj Monate)", "server_banner.active_users": "aktivaj uzantoj", "server_banner.administered_by": "Administrata de:", + "server_banner.is_one_of_many": "{domain} estas unu el la multaj sendependaj Mastodon-serviloj, kiujn vi povas uzi por partopreni en la fediverso.", "server_banner.server_stats": "Statistikoj de la servilo:", "sign_in_banner.create_account": "Krei konton", + "sign_in_banner.follow_anyone": "Sekvi iun ajn tra la fediverso kaj vidi ĉion en kronologia ordo. Neniuj algoritmoj, reklamoj aŭ klakbetoj videblas.", "sign_in_banner.sign_in": "Saluti", "sign_in_banner.sso_redirect": "Ensalutu aŭ Registriĝi", "status.admin_account": "Malfermi fasadon de moderigado por @{name}", @@ -657,8 +747,10 @@ "status.direct": "Private mencii @{name}", "status.direct_indicator": "Privata mencio", "status.edit": "Redakti", + "status.edited": "Laste redaktita {date}", "status.edited_x_times": "Redactita {count, plural, one {{count} fojon} other {{count} fojojn}}", "status.favourite": "Ŝatata", + "status.favourites": "{count, plural, one {plej ŝatata} other {plej ŝatataj}}", "status.filter": "Filtri ĉi tiun afiŝon", "status.history.created": "{name} kreis {date}", "status.history.edited": "{name} redaktis {date}", @@ -677,6 +769,7 @@ "status.reblog": "Diskonigi", "status.reblog_private": "Diskonigi kun la sama videbleco", "status.reblogged_by": "{name} diskonigis", + "status.reblogs": "{count, plural, one {diskonigo} other {diskonigoj}}", "status.reblogs.empty": "Ankoraŭ neniu diskonigis tiun afiŝon. Kiam iu faras tion, ri aperos ĉi tie.", "status.redraft": "Forigi kaj reskribi", "status.remove_bookmark": "Forigi legosignon", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 968b01babc..6ab3f0fdb9 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "Quitar el foco del área de texto de redacción o de búsqueda", "keyboard_shortcuts.up": "Subir en la lista", "lightbox.close": "Cerrar", - "lightbox.compress": "Comprimir cuadro de vista de imagen", - "lightbox.expand": "Expandir cuadro de vista de imagen", "lightbox.next": "Siguiente", "lightbox.previous": "Anterior", + "lightbox.zoom_in": "Ampliar al tamaño real", + "lightbox.zoom_out": "Ampliar para ajustar", "limited_account_hint.action": "Mostrar perfil de todos modos", "limited_account_hint.title": "Este perfil fue ocultado por los moderadores de {domain}.", "link_preview.author": "Por {name}", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index 5c8f44d4a7..52ebf0ae18 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "para retirar el foco de la caja de redacción/búsqueda", "keyboard_shortcuts.up": "para ir hacia arriba en la lista", "lightbox.close": "Cerrar", - "lightbox.compress": "Comprimir cuadro de visualización de imagen", - "lightbox.expand": "Expandir cuadro de visualización de imagen", "lightbox.next": "Siguiente", "lightbox.previous": "Anterior", + "lightbox.zoom_in": "Ampliar al tamaño real", + "lightbox.zoom_out": "Ampliar para ajustar", "limited_account_hint.action": "Mostrar perfil de todos modos", "limited_account_hint.title": "Este perfil ha sido ocultado por los moderadores de {domain}.", "link_preview.author": "Por {name}", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 6a428e353b..df05e82b0b 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "para retirar el foco de la caja de redacción/búsqueda", "keyboard_shortcuts.up": "para ir hacia arriba en la lista", "lightbox.close": "Cerrar", - "lightbox.compress": "Comprimir cuadro de visualización de imagen", - "lightbox.expand": "Expandir cuadro de visualización de imagen", "lightbox.next": "Siguiente", "lightbox.previous": "Anterior", + "lightbox.zoom_in": "Ampliar al tamaño real", + "lightbox.zoom_out": "Ampliar para ajustar", "limited_account_hint.action": "Mostrar perfil de todos modos", "limited_account_hint.title": "Este perfil ha sido ocultado por los moderadores de {domain}.", "link_preview.author": "Por {name}", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index 5b8e8369f6..287ffb9852 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -432,8 +432,6 @@ "keyboard_shortcuts.unfocus": "Fookus tekstialalt/otsingult ära", "keyboard_shortcuts.up": "Liigu loetelus üles", "lightbox.close": "Sulge", - "lightbox.compress": "Suru kokku pildi vaatamise kast", - "lightbox.expand": "Laienda pildi vaatamise kast", "lightbox.next": "Järgmine", "lightbox.previous": "Eelmine", "limited_account_hint.action": "Näita profilli sellegipoolest", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index acdd27ce2b..b3137bc21a 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -432,8 +432,6 @@ "keyboard_shortcuts.unfocus": "testua konposatzeko area / bilaketatik fokua kentzea", "keyboard_shortcuts.up": "zerrendan gora mugitzea", "lightbox.close": "Itxi", - "lightbox.compress": "Konprimatu irudia ikusteko kaxa", - "lightbox.expand": "Zabaldu irudia ikusteko kaxa", "lightbox.next": "Hurrengoa", "lightbox.previous": "Aurrekoa", "limited_account_hint.action": "Erakutsi profila hala ere", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index fba8d90235..fbc65ec207 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -422,8 +422,6 @@ "keyboard_shortcuts.unfocus": "برداشتن تمرکز از ناحیهٔ نوشتن یا جست‌وجو", "keyboard_shortcuts.up": "بالا بردن در سیاهه", "lightbox.close": "بستن", - "lightbox.compress": "فشرده‌سازی جعبهٔ نمایش تصویر", - "lightbox.expand": "گسترش جعبهٔ نمایش تصویر", "lightbox.next": "بعدی", "lightbox.previous": "قبلی", "limited_account_hint.action": "به هر روی نمایه نشان داده شود", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 681f5d5bb2..d4adef40f2 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "Poistu kirjoitus- tai hakukentästä", "keyboard_shortcuts.up": "Siirry luettelossa taaksepäin", "lightbox.close": "Sulje", - "lightbox.compress": "Tiivis kuvankatselunäkymä", - "lightbox.expand": "Laajennettu kuvankatselunäkymä", "lightbox.next": "Seuraava", "lightbox.previous": "Edellinen", + "lightbox.zoom_in": "Zoomaa todelliseen kokoon", + "lightbox.zoom_out": "Zoomaa mahtumaan", "limited_account_hint.action": "Näytä profiili joka tapauksessa", "limited_account_hint.title": "Palvelimen {domain} moderaattorit ovat piilottaneet tämän profiilin.", "link_preview.author": "Tehnyt {name}", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index 793a75bb05..9b87f5c8d9 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "Tak skrivi-/leiti-økið úr miðdeplinum", "keyboard_shortcuts.up": "Flyt upp á listanum", "lightbox.close": "Lat aftur", - "lightbox.compress": "Kroyst myndavísikassa saman", - "lightbox.expand": "Víðka myndavísikassa", "lightbox.next": "Fram", "lightbox.previous": "Aftur", + "lightbox.zoom_in": "Suma til veruliga stødd", + "lightbox.zoom_out": "Suma, so tað passar", "limited_account_hint.action": "Vís vangamynd kortini", "limited_account_hint.title": "Hesin vangin er fjaldur av kjakleiðarunum á {domain}.", "link_preview.author": "Av {name}", diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json index 8e33c68442..27e776024f 100644 --- a/app/javascript/mastodon/locales/fr-CA.json +++ b/app/javascript/mastodon/locales/fr-CA.json @@ -432,8 +432,6 @@ "keyboard_shortcuts.unfocus": "Ne plus se concentrer sur la zone de rédaction/barre de recherche", "keyboard_shortcuts.up": "Monter dans la liste", "lightbox.close": "Fermer", - "lightbox.compress": "Compresser la fenêtre de visualisation d'images", - "lightbox.expand": "Agrandir la fenêtre de visualisation d'images", "lightbox.next": "Suivant", "lightbox.previous": "Précédent", "limited_account_hint.action": "Afficher le profil quand même", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index e73ddf734f..f787216c46 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -432,8 +432,6 @@ "keyboard_shortcuts.unfocus": "Quitter la zone de rédaction/barre de recherche", "keyboard_shortcuts.up": "Monter dans la liste", "lightbox.close": "Fermer", - "lightbox.compress": "Compresser la fenêtre de visualisation des images", - "lightbox.expand": "Agrandir la fenêtre de visualisation des images", "lightbox.next": "Suivant", "lightbox.previous": "Précédent", "limited_account_hint.action": "Afficher le profil quand même", diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json index 2443692133..e7723c9533 100644 --- a/app/javascript/mastodon/locales/fy.json +++ b/app/javascript/mastodon/locales/fy.json @@ -432,8 +432,6 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "Nei boppe yn list ferpleatse", "lightbox.close": "Slute", - "lightbox.compress": "Ofbylding passend werjaan", - "lightbox.expand": "Ofbylding grut werjaan", "lightbox.next": "Folgjende", "lightbox.previous": "Foarige", "limited_account_hint.action": "Profyl dochs besjen", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 11da6b64e9..e05adc2732 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "Unfocus cum textarea/search", "keyboard_shortcuts.up": "Bog suas ar an liosta", "lightbox.close": "Dún", - "lightbox.compress": "Comhbhrúigh an bosca amhairc íomhá", - "lightbox.expand": "Leathnaigh an bosca amhairc íomhá", "lightbox.next": "An céad eile", "lightbox.previous": "Roimhe seo", + "lightbox.zoom_in": "Súmáil chuig an méid iarbhír", + "lightbox.zoom_out": "Súmáil a d'oirfeadh", "limited_account_hint.action": "Taispeáin an phróifíl ar aon nós", "limited_account_hint.title": "Tá an phróifíl seo curtha i bhfolach ag na modhnóra {domain}.", "link_preview.author": "Le {name}", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index 2b93662694..6cd3cbcc56 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -432,8 +432,6 @@ "keyboard_shortcuts.unfocus": "Thoir am fòcas far raon teacsa an sgrìobhaidh/an luirg", "keyboard_shortcuts.up": "Gluais suas air an liosta", "lightbox.close": "Dùin", - "lightbox.compress": "Co-theannaich bogsa sealladh an deilbh", - "lightbox.expand": "Leudaich bogsa sealladh an deilbh", "lightbox.next": "Air adhart", "lightbox.previous": "Air ais", "limited_account_hint.action": "Seall a’ phròifil co-dhiù", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index d35bcd8cf5..5e67cbce25 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "Para deixar de destacar a área de escritura/procura", "keyboard_shortcuts.up": "Para mover cara arriba na listaxe", "lightbox.close": "Fechar", - "lightbox.compress": "Comprimir a caixa de vista da imaxe", - "lightbox.expand": "Estender a caixa de vista da imaxe", "lightbox.next": "Seguinte", "lightbox.previous": "Anterior", + "lightbox.zoom_in": "Ver tamaño real", + "lightbox.zoom_out": "Ver tamaño axustado", "limited_account_hint.action": "Mostrar perfil igualmente", "limited_account_hint.title": "Este perfil foi agochado pola moderación de {domain}.", "link_preview.author": "Por {name}", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 5e6ab56c23..6503d870e5 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "לצאת מתיבת חיבור/חיפוש", "keyboard_shortcuts.up": "לנוע במעלה הרשימה", "lightbox.close": "סגירה", - "lightbox.compress": "דחיסת קופסת צפייה בתמונה", - "lightbox.expand": "הרחבת קופסת צפייה בתמונה", "lightbox.next": "הבא", "lightbox.previous": "הקודם", + "lightbox.zoom_in": "הגדלה לגודל מלא", + "lightbox.zoom_out": "התאמה לגודל המסך", "limited_account_hint.action": "הצג חשבון בכל זאת", "limited_account_hint.title": "פרופיל המשתמש הזה הוסתר על ידי המנחים של {domain}.", "link_preview.author": "מאת {name}", diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json index 58b04a20cd..4a513c1c07 100644 --- a/app/javascript/mastodon/locales/hi.json +++ b/app/javascript/mastodon/locales/hi.json @@ -349,8 +349,6 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "बंद करें", - "lightbox.compress": "कंप्रेस इमेज व्यू बॉक्स", - "lightbox.expand": "एक्सपैंड इमेज व्यू बॉक्स", "lightbox.next": "अगला", "lightbox.previous": "पिछला", "limited_account_hint.action": "फिर भी प्रोफाइल दिखाओ", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index d4ced22463..cb3517e3a3 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "Szerkesztés/keresés fókuszból való kivétele", "keyboard_shortcuts.up": "Mozgás felfelé a listában", "lightbox.close": "Bezárás", - "lightbox.compress": "Képnéző doboz összezárása", - "lightbox.expand": "Képnéző doboz kinyitása", "lightbox.next": "Következő", "lightbox.previous": "Előző", + "lightbox.zoom_in": "Nagyítás a tényleges méretre", + "lightbox.zoom_out": "Méretre igazítás", "limited_account_hint.action": "Profil megjelenítése mindenképpen", "limited_account_hint.title": "Ezt a profilt {domain} moderátorai elrejtették.", "link_preview.author": "{name} szerint", diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index a81abb82f0..9e5ae79045 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -271,8 +271,6 @@ "keyboard_shortcuts.unfocus": "տեքստի/որոնման տիրոյթից ապասեւեռուելու համար", "keyboard_shortcuts.up": "ցանկով վերեւ շարժուելու համար", "lightbox.close": "Փակել", - "lightbox.compress": "Փակել պատկերի դիտման պատուհանը", - "lightbox.expand": "Բացել պատկերի դիտման պատուհանը", "lightbox.next": "Յաջորդ", "lightbox.previous": "Նախորդ", "lists.account.add": "Աւելացնել ցանկին", diff --git a/app/javascript/mastodon/locales/ia.json b/app/javascript/mastodon/locales/ia.json index 9e7b583375..93bee9ec79 100644 --- a/app/javascript/mastodon/locales/ia.json +++ b/app/javascript/mastodon/locales/ia.json @@ -423,8 +423,6 @@ "keyboard_shortcuts.unfocus": "Disfocalisar le area de composition de texto/de recerca", "keyboard_shortcuts.up": "Displaciar in alto in le lista", "lightbox.close": "Clauder", - "lightbox.compress": "Comprimer le quadro de visualisation de imagine", - "lightbox.expand": "Expander le quadro de visualisation de imagine", "lightbox.next": "Sequente", "lightbox.previous": "Precedente", "limited_account_hint.action": "Monstrar profilo in omne caso", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index 687c32c1b1..b6d01ec996 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -381,8 +381,6 @@ "keyboard_shortcuts.unfocus": "untuk tidak fokus pada area teks/pencarian", "keyboard_shortcuts.up": "untuk memindah ke atas pada daftar", "lightbox.close": "Tutup", - "lightbox.compress": "Kompres kotak tampilan gambar", - "lightbox.expand": "Besarkan kotak tampilan gambar", "lightbox.next": "Selanjutnya", "lightbox.previous": "Sebelumnya", "limited_account_hint.action": "Tetap tampilkan profil", diff --git a/app/javascript/mastodon/locales/ie.json b/app/javascript/mastodon/locales/ie.json index 3226801019..1439b851d3 100644 --- a/app/javascript/mastodon/locales/ie.json +++ b/app/javascript/mastodon/locales/ie.json @@ -396,8 +396,6 @@ "keyboard_shortcuts.unfocus": "Desinfocar text-area de composition/serchar", "keyboard_shortcuts.up": "Mover ad-supra in li liste", "lightbox.close": "Cluder", - "lightbox.compress": "Compresser vise-buxe de image", - "lightbox.expand": "Expander vise-buxe de image", "lightbox.next": "Sequent", "lightbox.previous": "Precedent", "limited_account_hint.action": "Monstrar profil totvez", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index bb0a86ac2b..aa284685e7 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -339,8 +339,6 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Klozar", - "lightbox.compress": "Kompresez imajvidbuxo", - "lightbox.expand": "Expansez imajvidbuxo", "lightbox.next": "Nexta", "lightbox.previous": "Antea", "limited_account_hint.action": "Jus montrez profilo", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index fb807429f7..5f32b438dd 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -432,8 +432,6 @@ "keyboard_shortcuts.unfocus": "Taka virkni úr textainnsetningarreit eða leit", "keyboard_shortcuts.up": "Fara ofar í listanum", "lightbox.close": "Loka", - "lightbox.compress": "Þjappa myndskoðunarreit", - "lightbox.expand": "Fletta út myndskoðunarreit", "lightbox.next": "Næsta", "lightbox.previous": "Fyrra", "limited_account_hint.action": "Birta notandasniðið samt", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 97518c5862..ec26d80be6 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "Rimuove il focus sull'area di composizione testuale/ricerca", "keyboard_shortcuts.up": "Scorre in su nell'elenco", "lightbox.close": "Chiudi", - "lightbox.compress": "Comprimi casella di visualizzazione immagine", - "lightbox.expand": "Espandi casella di visualizzazione immagine", "lightbox.next": "Successivo", "lightbox.previous": "Precedente", + "lightbox.zoom_in": "Ingrandisci alla dimensione attuale", + "lightbox.zoom_out": "Ingrandisci per adattarsi", "limited_account_hint.action": "Mostra comunque il profilo", "limited_account_hint.title": "Questo profilo è stato nascosto dai moderatori di {domain}.", "link_preview.author": "Di {name}", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 38492a7361..c3ddeed880 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "投稿の入力欄・検索欄から離れる", "keyboard_shortcuts.up": "カラム内一つ上に移動", "lightbox.close": "閉じる", - "lightbox.compress": "画像ビューボックスを閉じる", - "lightbox.expand": "画像ビューボックスを開く", "lightbox.next": "次", "lightbox.previous": "前", + "lightbox.zoom_in": "実際のサイズにする", + "lightbox.zoom_out": "表示範囲に合わせる", "limited_account_hint.action": "構わず表示する", "limited_account_hint.title": "このプロフィールは{domain}のモデレーターによって非表示にされています。", "link_preview.author": "{name}", @@ -457,6 +457,7 @@ "lists.subheading": "あなたのリスト", "load_pending": "{count}件の新着", "loading_indicator.label": "読み込み中…", + "media_gallery.hide": "隠す", "moved_to_account_banner.text": "あなたのアカウント『{disabledAccount}』は『{movedToAccount}』に移動したため現在無効になっています。", "mute_modal.hide_from_notifications": "通知をオフにする", "mute_modal.hide_options": "オプションを閉じる", @@ -785,6 +786,7 @@ "status.edit": "編集", "status.edited": "最終更新日 {date}", "status.edited_x_times": "{count}回編集", + "status.embed": "埋め込みコードを取得", "status.favourite": "お気に入り", "status.favourites": "{count, plural, one {お気に入り} other {お気に入り}}", "status.filter": "この投稿をフィルターする", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index 822fb59e6f..89f68ab95f 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -82,6 +82,7 @@ "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", "bundle_column_error.error.title": "Uh, ala !", "bundle_column_error.network.title": "Tuccḍa deg uẓeṭṭa", @@ -190,7 +191,7 @@ "domain_pill.server": "Aqeddac", "domain_pill.username": "Isem n useqdac", "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.", - "embed.instructions": "Ẓẓu addad-agi deg usmel-inek s wenγal n tangalt yellan sdaw-agi.", + "embed.instructions": "Ẓẓu addad-agi deg usmel-inek·inem s wenɣal n tangalt yellan sdaw-agi.", "embed.preview": "Akka ara d-iban:", "emoji_button.activity": "Aqeddic", "emoji_button.clear": "Sfeḍ", @@ -332,8 +333,6 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "i tulin ɣer d asawen n tebdart", "lightbox.close": "Mdel", - "lightbox.compress": "Ḥemmeẓ tamnaḍt n uskan n tugna", - "lightbox.expand": "Simeɣer tamnaḍt n uskan n tugna", "lightbox.next": "Ɣer zdat", "lightbox.previous": "Ɣer deffir", "limited_account_hint.action": "Wali amaɣnu akken yebɣu yili", @@ -356,7 +355,7 @@ "lists.subheading": "Tibdarin-ik·im", "load_pending": "{count, plural, one {# n uferdis amaynut} other {# n yiferdisen imaynuten}}", "loading_indicator.label": "Yessalay-d …", - "media_gallery.hide": "Ffer-it", + "media_gallery.hide": "Seggelmes", "mute_modal.hide_from_notifications": "Ffer-it deg ulɣuten", "mute_modal.hide_options": "Ffer tinefrunin", "mute_modal.indefinite": "Alamma ssnesreɣ asgugem fell-as", @@ -590,6 +589,7 @@ "status.direct_indicator": "Abdar uslig", "status.edit": "Ẓreg", "status.edited_x_times": "Tettwaẓreg {count, plural, one {{count} n tikkelt} other {{count} n tikkal}}", + "status.embed": "Awi-d tangalt n weslaɣ", "status.favourite": "Amenyaf", "status.favourites": "{count, plural, one {n usmenyaf} other {n ismenyafen}}", "status.filter": "Sizdeg tassufeɣt-a", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index cf2082e105..af1599572b 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "작성창에서 포커스 해제", "keyboard_shortcuts.up": "리스트에서 위로 이동", "lightbox.close": "닫기", - "lightbox.compress": "이미지 박스 압축", - "lightbox.expand": "이미지 박스 확장", "lightbox.next": "다음", "lightbox.previous": "이전", + "lightbox.zoom_in": "실제 크기에 맞춰 보기", + "lightbox.zoom_out": "화면 크기에 맞춰 보기", "limited_account_hint.action": "그래도 프로필 보기", "limited_account_hint.title": "이 프로필은 {domain}의 중재자에 의해 숨겨진 상태입니다.", "link_preview.author": "{name}", diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json index dd10000d18..86ecf98446 100644 --- a/app/javascript/mastodon/locales/ku.json +++ b/app/javascript/mastodon/locales/ku.json @@ -293,8 +293,6 @@ "keyboard_shortcuts.unfocus": "Bal nede cîhê nivîsê /lêgerînê", "keyboard_shortcuts.up": "Di lîsteyê de rake jor", "lightbox.close": "Bigire", - "lightbox.compress": "Qutîya wêneya nîşan dike bitepisîne", - "lightbox.expand": "Qutîya wêneya nîşan dike fireh bike", "lightbox.next": "Pêş", "lightbox.previous": "Paş", "limited_account_hint.action": "Bi heman awayî profîlê nîşan bide", diff --git a/app/javascript/mastodon/locales/kw.json b/app/javascript/mastodon/locales/kw.json index 60b8321d53..cef24aa3b7 100644 --- a/app/javascript/mastodon/locales/kw.json +++ b/app/javascript/mastodon/locales/kw.json @@ -195,8 +195,6 @@ "keyboard_shortcuts.unfocus": "Anfogella tekstva gomposya/hwilas", "keyboard_shortcuts.up": "Movya war-vann y'n rol", "lightbox.close": "Degea", - "lightbox.compress": "Kula kist a weles aven", - "lightbox.expand": "Efani kist a weles aven", "lightbox.next": "Nessa", "lightbox.previous": "Kynsa", "lists.account.add": "Keworra dhe rol", diff --git a/app/javascript/mastodon/locales/lad.json b/app/javascript/mastodon/locales/lad.json index 72bf260501..43da2ea16f 100644 --- a/app/javascript/mastodon/locales/lad.json +++ b/app/javascript/mastodon/locales/lad.json @@ -34,7 +34,9 @@ "account.follow_back": "Sige tamyen", "account.followers": "Suivantes", "account.followers.empty": "Por agora dingun no sige a este utilizador.", + "account.followers_counter": "{count, plural, one {{counter} suivante} other {{counter} suivantes}}", "account.following": "Sigiendo", + "account.following_counter": "{count, plural, other {Sigiendo a {counter}}}", "account.follows.empty": "Este utilizador ainda no sige a dingun.", "account.go_to_profile": "Va al profil", "account.hide_reblogs": "Eskonde repartajasyones de @{name}", @@ -60,6 +62,7 @@ "account.requested_follow": "{name} tiene solisitado segirte", "account.share": "Partaja el profil de @{name}", "account.show_reblogs": "Amostra repartajasyones de @{name}", + "account.statuses_counter": "{count, plural, one {{counter} publikasyon} other {{counter} publikasyones}}", "account.unblock": "Dezbloka a @{name}", "account.unblock_domain": "Dezbloka domeno {domain}", "account.unblock_short": "Dezbloka", @@ -393,8 +396,6 @@ "keyboard_shortcuts.unfocus": "No enfoka en el area de eskrivir/bushkeda", "keyboard_shortcuts.up": "Move verso arriva en la lista", "lightbox.close": "Serra", - "lightbox.compress": "Kompresa kuadro de imaje", - "lightbox.expand": "Espande kuadro de imaje", "lightbox.next": "Sigiente", "lightbox.previous": "Anterior", "limited_account_hint.action": "Amostra el profil entanto", @@ -418,6 +419,7 @@ "lists.subheading": "Tus listas", "load_pending": "{count, plural, one {# muevo elemento} other {# muevos elementos}}", "loading_indicator.label": "Eskargando…", + "media_gallery.hide": "Eskonde", "moved_to_account_banner.text": "Tu kuento {disabledAccount} esta aktualmente inkapasitado porke transferates a {movedToAccount}.", "mute_modal.hide_from_notifications": "Eskonde de avizos", "mute_modal.hide_options": "Eskonde opsyones", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index 5a510f5b96..632c33129a 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "Nebefokusuoti rengykles teksto sritį / paiešką", "keyboard_shortcuts.up": "Perkelti į viršų sąraše", "lightbox.close": "Uždaryti", - "lightbox.compress": "Suspausti vaizdo peržiūros langelį", - "lightbox.expand": "Išplėsti vaizdo peržiūros langelį", "lightbox.next": "Kitas", "lightbox.previous": "Ankstesnis", + "lightbox.zoom_in": "Padidink iki tikrojo dydžio", + "lightbox.zoom_out": "Padidink, kad tilptų", "limited_account_hint.action": "Vis tiek rodyti profilį", "limited_account_hint.title": "Šį profilį paslėpė {domain} prižiūrėtojai.", "link_preview.author": "Sukūrė {name}", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 53b3c0fcaa..43fa8369f4 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -385,8 +385,6 @@ "keyboard_shortcuts.unfocus": "Atfokusēt veidojamā teksta/meklēšanas lauku", "keyboard_shortcuts.up": "Pārvietoties augšup sarakstā", "lightbox.close": "Aizvērt", - "lightbox.compress": "Saspiest attēla skata lodziņu", - "lightbox.expand": "Izvērst attēla skata lodziņu", "lightbox.next": "Tālāk", "lightbox.previous": "Iepriekšējais", "limited_account_hint.action": "Tik un tā rādīt profilu", diff --git a/app/javascript/mastodon/locales/mr.json b/app/javascript/mastodon/locales/mr.json index 47c3a55e55..aa8169616e 100644 --- a/app/javascript/mastodon/locales/mr.json +++ b/app/javascript/mastodon/locales/mr.json @@ -169,8 +169,6 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "बंद करा", - "lightbox.compress": "प्रतिमा दृश्य बॉक्स कॉम्प्रेस करा", - "lightbox.expand": "प्रतिमा दृश्य बॉक्स विस्तृत करा", "lightbox.next": "पुढे", "lightbox.previous": "मागील", "limited_account_hint.action": "तरीही प्रोफाइल दाखवा", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index 44403ec959..cbd57ab356 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -360,8 +360,6 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "Pindah ke atas dalam senarai", "lightbox.close": "Tutup", - "lightbox.compress": "Kecilkan kotak paparan imej", - "lightbox.expand": "Besarkan kotak paparan imej", "lightbox.next": "Seterusnya", "lightbox.previous": "Sebelumnya", "limited_account_hint.action": "Paparkan profil", diff --git a/app/javascript/mastodon/locales/my.json b/app/javascript/mastodon/locales/my.json index e93b47fd54..c97de73335 100644 --- a/app/javascript/mastodon/locales/my.json +++ b/app/javascript/mastodon/locales/my.json @@ -339,8 +339,6 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "ပိတ်ပါ", - "lightbox.compress": "ရုပ်ပုံမြင်ကွင်းအကွက်ကို ချုံ့ပါ", - "lightbox.expand": "ပုံကိုဖွင့်ပါ", "lightbox.next": "ရှေ့သို့", "lightbox.previous": "ရှေ့သို့", "limited_account_hint.action": "ဘာပဲဖြစ်ဖြစ် ပရိုဖိုင်ကို ပြပါ", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 1043ca8376..f5f4a0a137 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "Tekst- en zoekveld ontfocussen", "keyboard_shortcuts.up": "Naar boven in de lijst bewegen", "lightbox.close": "Sluiten", - "lightbox.compress": "Afbeelding passend weergeven", - "lightbox.expand": "Afbeelding groot weergeven", "lightbox.next": "Volgende", "lightbox.previous": "Vorige", + "lightbox.zoom_in": "Oorspronkelijke grootte weergeven", + "lightbox.zoom_out": "Passend weergeven", "limited_account_hint.action": "Alsnog het profiel tonen", "limited_account_hint.title": "Dit profiel is door de moderatoren van {domain} verborgen.", "link_preview.author": "Door {name}", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index c4b5f0291d..702154927d 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "for å fokusere vekk skrive-/søkefeltet", "keyboard_shortcuts.up": "Flytt opp på lista", "lightbox.close": "Lukk", - "lightbox.compress": "Komprimer biletvisningsboksen", - "lightbox.expand": "Utvid biletvisningsboksen", "lightbox.next": "Neste", "lightbox.previous": "Førre", + "lightbox.zoom_in": "Zoom til faktisk storleik", + "lightbox.zoom_out": "Vis heile", "limited_account_hint.action": "Vis profilen likevel", "limited_account_hint.title": "Denne profilen er skjult av moderatorane på {domain}.", "link_preview.author": "Av {name}", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index 1222f40424..1d0294cd7c 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -432,8 +432,6 @@ "keyboard_shortcuts.unfocus": "Fjern fokus fra komponerings-/søkefeltet", "keyboard_shortcuts.up": "Flytt oppover i listen", "lightbox.close": "Lukk", - "lightbox.compress": "Komprimer bildevisningsboks", - "lightbox.expand": "Ekspander bildevisning boks", "lightbox.next": "Neste", "lightbox.previous": "Forrige", "limited_account_hint.action": "Vis profil likevel", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index 22193f82aa..9dbd123c9b 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -297,8 +297,6 @@ "keyboard_shortcuts.unfocus": "quitar lo camp tèxte/de recèrca", "keyboard_shortcuts.up": "far montar dins la lista", "lightbox.close": "Tampar", - "lightbox.compress": "Fenèstra de visualizacion dels imatges compressats", - "lightbox.expand": "Espandir la fenèstra de visualizacion d’imatge", "lightbox.next": "Seguent", "lightbox.previous": "Precedent", "limited_account_hint.action": "Afichar lo perfil de tota manièra", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index d415bb3811..a4ee25250a 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "aby opuścić pole wyszukiwania/pisania", "keyboard_shortcuts.up": "aby przejść na górę listy", "lightbox.close": "Zamknij", - "lightbox.compress": "Zmniejsz pole widoku obrazu", - "lightbox.expand": "Rozwiń pole widoku obrazu", "lightbox.next": "Następne", "lightbox.previous": "Poprzednie", + "lightbox.zoom_in": "Rozmiar rzeczywisty", + "lightbox.zoom_out": "Dopasuj", "limited_account_hint.action": "Pokaż profil mimo to", "limited_account_hint.title": "Ten profil został ukryty przez moderatorów {domain}.", "link_preview.author": "{name}", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 053ae25822..1eca63ac15 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -432,10 +432,9 @@ "keyboard_shortcuts.unfocus": "desfocar de tudo", "keyboard_shortcuts.up": "mover para cima", "lightbox.close": "Fechar", - "lightbox.compress": "Fechar imagem", - "lightbox.expand": "Abrir imagem", "lightbox.next": "Próximo", "lightbox.previous": "Anterior", + "lightbox.zoom_in": "Voltar para o tamanho real", "limited_account_hint.action": "Exibir perfil mesmo assim", "limited_account_hint.title": "Este perfil foi ocultado pelos moderadores do {domain}.", "link_preview.author": "Por {name}", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index ed4bb9ba01..80f5f9f138 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -432,8 +432,6 @@ "keyboard_shortcuts.unfocus": "para remover o foco da área de texto/pesquisa", "keyboard_shortcuts.up": "para mover para cima na lista", "lightbox.close": "Fechar", - "lightbox.compress": "Compactar caixa de visualização de imagem", - "lightbox.expand": "Expandir caixa de visualização de imagem", "lightbox.next": "Próximo", "lightbox.previous": "Anterior", "limited_account_hint.action": "Exibir perfil mesmo assim", diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json index 73b8140de6..a61f4b0d4f 100644 --- a/app/javascript/mastodon/locales/ro.json +++ b/app/javascript/mastodon/locales/ro.json @@ -334,8 +334,6 @@ "keyboard_shortcuts.unfocus": "Părăsește zona de text/bara de căutare", "keyboard_shortcuts.up": "Urcă în listă", "lightbox.close": "Închide", - "lightbox.compress": "Închide panoul de vizualizare a imaginilor", - "lightbox.expand": "Deschide panoul de vizualizare a imaginilor", "lightbox.next": "Înainte", "lightbox.previous": "Înapoi", "limited_account_hint.action": "Afișează profilul oricum", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index d97b1658c5..1366114929 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -431,8 +431,6 @@ "keyboard_shortcuts.unfocus": "убрать фокус с поля ввода/поиска", "keyboard_shortcuts.up": "вверх по списку", "lightbox.close": "Закрыть", - "lightbox.compress": "Сжать окно просмотра изображений", - "lightbox.expand": "Развернуть окно просмотра изображений", "lightbox.next": "Далее", "lightbox.previous": "Назад", "limited_account_hint.action": "Все равно показать профиль", diff --git a/app/javascript/mastodon/locales/sa.json b/app/javascript/mastodon/locales/sa.json index 85bd9aa9dd..2d48f688d5 100644 --- a/app/javascript/mastodon/locales/sa.json +++ b/app/javascript/mastodon/locales/sa.json @@ -299,8 +299,6 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "पिधीयताम्", - "lightbox.compress": "सङ्कुच चित्रप्रदर्शनपेटकम्", - "lightbox.expand": "चित्रप्रदर्शनपेटकं विस्तारय", "lightbox.next": "परः", "lightbox.previous": "पूर्वः", "limited_account_hint.action": "प्रोफैलं दर्शय कथञ्चित्", diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json index 071643a153..bb7d062b95 100644 --- a/app/javascript/mastodon/locales/sc.json +++ b/app/javascript/mastodon/locales/sc.json @@ -350,8 +350,6 @@ "keyboard_shortcuts.unfocus": "Essi de s'àrea de cumpositzione de testu o de chirca", "keyboard_shortcuts.up": "Move in susu in sa lista", "lightbox.close": "Serra", - "lightbox.compress": "Cumprime sa casella de visualizatzione de is immàgines", - "lightbox.expand": "Ismànnia sa casella de visualizatzione de is immàgines", "lightbox.next": "Imbeniente", "lightbox.previous": "Pretzedente", "limited_account_hint.title": "Custu profilu est istadu cuadu dae sa moderatzione de {domain}.", diff --git a/app/javascript/mastodon/locales/sco.json b/app/javascript/mastodon/locales/sco.json index 269e29a86f..c14f1cc51a 100644 --- a/app/javascript/mastodon/locales/sco.json +++ b/app/javascript/mastodon/locales/sco.json @@ -284,8 +284,6 @@ "keyboard_shortcuts.unfocus": "Unfocus scrieve textarea/seirch", "keyboard_shortcuts.up": "Muive up in the list", "lightbox.close": "Shut", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", "lightbox.next": "Neist", "lightbox.previous": "Last ane", "limited_account_hint.action": "Shaw profile onieweys", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index d21dc5e1ab..c989a7314c 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -396,8 +396,6 @@ "keyboard_shortcuts.unfocus": "Odísť z textového poľa", "keyboard_shortcuts.up": "Posunúť sa vyššie v zozname", "lightbox.close": "Zatvoriť", - "lightbox.compress": "Zmenšiť náhľad obrázku", - "lightbox.expand": "Rozšíriť náhľad obrázku", "lightbox.next": "Ďalej", "lightbox.previous": "Späť", "limited_account_hint.action": "Aj tak zobraziť profil", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index bdc1d56062..43042ca998 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -412,8 +412,6 @@ "keyboard_shortcuts.unfocus": "Odstrani pozornost z območja za sestavljanje besedila/iskanje", "keyboard_shortcuts.up": "Premakni navzgor po seznamu", "lightbox.close": "Zapri", - "lightbox.compress": "Strni ogledno polje slike", - "lightbox.expand": "Razširi ogledno polje slike", "lightbox.next": "Naslednji", "lightbox.previous": "Prejšnji", "limited_account_hint.action": "Vseeno pokaži profil", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index ea3c6d5c7c..c5e42aae77 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -432,8 +432,6 @@ "keyboard_shortcuts.unfocus": "Për heqjen e fokusit nga fusha e hartimit të mesazheve apo kërkimeve", "keyboard_shortcuts.up": "Për ngjitje sipër nëpër listë", "lightbox.close": "Mbylle", - "lightbox.compress": "Ngjeshe kuadratin e parjes së figurave", - "lightbox.expand": "Zgjeroje kuadratin e parjes së figurave", "lightbox.next": "Pasuesja", "lightbox.previous": "E mëparshmja", "limited_account_hint.action": "Shfaqe profilin sido qoftë", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index de30ca280f..e701da6078 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -399,8 +399,6 @@ "keyboard_shortcuts.unfocus": "Ukloni fokus sa polja za unos teksta/pretrage", "keyboard_shortcuts.up": "Premesti nagore u listi", "lightbox.close": "Zatvori", - "lightbox.compress": "Komprimuj okvir za prikaz slike", - "lightbox.expand": "Proširi okvir za prikaz slike", "lightbox.next": "Sledeće", "lightbox.previous": "Prethodno", "limited_account_hint.action": "Ipak prikaži profil", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index 255215a167..fd13c4ee5c 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -399,8 +399,6 @@ "keyboard_shortcuts.unfocus": "Уклони фокус са поља за унос текста/претраге", "keyboard_shortcuts.up": "Премести нагоре у листи", "lightbox.close": "Затвори", - "lightbox.compress": "Компримуј оквир за приказ слике", - "lightbox.expand": "Прошири оквир за приказ слике", "lightbox.next": "Следеће", "lightbox.previous": "Претходно", "limited_account_hint.action": "Ипак прикажи профил", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 4d560a6495..6bb0b1424a 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -429,8 +429,6 @@ "keyboard_shortcuts.unfocus": "för att avfokusera skrivfält/sökfält", "keyboard_shortcuts.up": "för att flytta uppåt i listan", "lightbox.close": "Stäng", - "lightbox.compress": "Komprimera bildvyrutan", - "lightbox.expand": "Utöka bildvyrutan", "lightbox.next": "Nästa", "lightbox.previous": "Tidigare", "limited_account_hint.action": "Visa profil ändå", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 9578431ff7..d446cacb92 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -432,8 +432,6 @@ "keyboard_shortcuts.unfocus": "เลิกโฟกัสพื้นที่เขียนข้อความ/การค้นหา", "keyboard_shortcuts.up": "ย้ายขึ้นในรายการ", "lightbox.close": "ปิด", - "lightbox.compress": "บีบอัดกล่องดูภาพ", - "lightbox.expand": "ขยายกล่องดูภาพ", "lightbox.next": "ถัดไป", "lightbox.previous": "ก่อนหน้า", "limited_account_hint.action": "แสดงโปรไฟล์ต่อไป", diff --git a/app/javascript/mastodon/locales/tok.json b/app/javascript/mastodon/locales/tok.json index 6c21026bdb..9f20388182 100644 --- a/app/javascript/mastodon/locales/tok.json +++ b/app/javascript/mastodon/locales/tok.json @@ -252,8 +252,6 @@ "keyboard_shortcuts.toot": "o toki", "keyboard_shortcuts.up": "o tawa sewi lon lipu", "lightbox.close": "o pini", - "lightbox.compress": "o lili e sitelen", - "lightbox.expand": "o suli e sitelen", "lightbox.next": "sinpin", "lightbox.previous": "monsi", "link_preview.author": "tan {name}", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index d4d7d3d113..bdb2de0ef1 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "Aramada bir gönderiye odaklanmamak için", "keyboard_shortcuts.up": "Listede yukarıya çıkmak için", "lightbox.close": "Kapat", - "lightbox.compress": "Resim görüntüleme kutusunu sıkıştır", - "lightbox.expand": "Resim görüntüleme kutusunu genişlet", "lightbox.next": "Sonraki", "lightbox.previous": "Önceki", + "lightbox.zoom_in": "Özgün boyuta dön", + "lightbox.zoom_out": "Sığacak şekilde boyutla", "limited_account_hint.action": "Yine de profili göster", "limited_account_hint.title": "Bu profil {domain} moderatörleri tarafından gizlendi.", "link_preview.author": "Yazar: {name}", diff --git a/app/javascript/mastodon/locales/tt.json b/app/javascript/mastodon/locales/tt.json index 01429f9431..08bb7979a1 100644 --- a/app/javascript/mastodon/locales/tt.json +++ b/app/javascript/mastodon/locales/tt.json @@ -271,8 +271,6 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Ябу", - "lightbox.compress": "Кысылган рәсемне карау тәрәзәсе", - "lightbox.expand": "Рәсемне карау тәрәзәсен ачыгыз", "lightbox.next": "Киләсе", "lightbox.previous": "Алдагы", "limited_account_hint.action": "Барыбер профильне күрсәтергә", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index a1d3a872df..3bf8d00248 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "Розфокусуватися з нового допису чи пошуку", "keyboard_shortcuts.up": "Рухатися вгору списком", "lightbox.close": "Закрити", - "lightbox.compress": "Стиснути поле перегляду зображень", - "lightbox.expand": "Розгорнути поле перегляду зображень", "lightbox.next": "Далі", "lightbox.previous": "Назад", + "lightbox.zoom_in": "Масштаб за реальним розміром", + "lightbox.zoom_out": "Збільшити відповідно до розміру", "limited_account_hint.action": "Усе одно показати профіль", "limited_account_hint.title": "Цей профіль сховали модератори {domain}.", "link_preview.author": "Від {name}", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 9fcd00ddc7..74c46c7b33 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -3,7 +3,7 @@ "about.contact": "Liên lạc:", "about.disclaimer": "Mastodon là phần mềm tự do nguồn mở của Mastodon gGmbH.", "about.domain_blocks.no_reason_available": "Lý do không được cung cấp", - "about.domain_blocks.preamble": "Mastodon cho phép bạn tương tác nội dung và giao tiếp với mọi người từ bất kỳ máy chủ nào khác trong mạng liên hợp. Còn máy chủ này có những ngoại lệ riêng.", + "about.domain_blocks.preamble": "Mastodon cho phép bạn đọc nội dung và giao tiếp với mọi người từ bất kỳ máy chủ nào. Còn đây là những ngoại lệ trên máy chủ này.", "about.domain_blocks.silenced.explanation": "Nói chung, bạn sẽ không thấy người và nội dung từ máy chủ này, trừ khi bạn tự tìm kiếm hoặc tự theo dõi.", "about.domain_blocks.silenced.title": "Hạn chế", "about.domain_blocks.suspended.explanation": "Dữ liệu từ máy chủ này sẽ không được xử lý, lưu trữ hoặc trao đổi. Mọi tương tác hoặc giao tiếp với người từ máy chủ này đều bị cấm.", @@ -34,9 +34,9 @@ "account.follow_back": "Theo dõi lại", "account.followers": "Người theo dõi", "account.followers.empty": "Chưa có người theo dõi nào.", - "account.followers_counter": "{count, plural, other {{counter} người theo dõi}}", + "account.followers_counter": "{count, plural, other {{counter} Người theo dõi}}", "account.following": "Đang theo dõi", - "account.following_counter": "{count, plural, other {{counter} đang theo dõi}}", + "account.following_counter": "{count, plural, other {{counter} Đang theo dõi}}", "account.follows.empty": "Người này chưa theo dõi ai.", "account.go_to_profile": "Xem hồ sơ", "account.hide_reblogs": "Ẩn tút @{name} đăng lại", @@ -62,7 +62,7 @@ "account.requested_follow": "{name} yêu cầu theo dõi bạn", "account.share": "Chia sẻ @{name}", "account.show_reblogs": "Hiện tút do @{name} đăng lại", - "account.statuses_counter": "{count, plural, other {{counter} tút}}", + "account.statuses_counter": "{count, plural, other {{counter} Tút}}", "account.unblock": "Bỏ chặn @{name}", "account.unblock_domain": "Bỏ ẩn {domain}", "account.unblock_short": "Bỏ chặn", @@ -145,7 +145,7 @@ "community.column_settings.remote_only": "Chỉ người ở máy chủ khác", "compose.language.change": "Chọn ngôn ngữ tút", "compose.language.search": "Tìm ngôn ngữ...", - "compose.published.body": "Đã đăng.", + "compose.published.body": "Tút đã được đăng.", "compose.published.open": "Xem lại", "compose.saved.body": "Đã lưu tút.", "compose_form.direct_message_warning_learn_more": "Tìm hiểu thêm", @@ -154,8 +154,8 @@ "compose_form.lock_disclaimer": "Tài khoản của bạn không {locked}. Bất cứ ai cũng có thể theo dõi và xem tút riêng tư của bạn.", "compose_form.lock_disclaimer.lock": "khóa", "compose_form.placeholder": "Bạn đang nghĩ gì?", - "compose_form.poll.duration": "Hết hạn vào", - "compose_form.poll.multiple": "Nhiều lựa chọn", + "compose_form.poll.duration": "Hết hạn", + "compose_form.poll.multiple": "Chọn nhiều", "compose_form.poll.option_placeholder": "Lựa chọn {number}", "compose_form.poll.single": "Chọn một", "compose_form.poll.switch_to_multiple": "Có thể chọn nhiều lựa chọn", @@ -170,30 +170,30 @@ "compose_form.spoiler_placeholder": "Nội dung ẩn (tùy chọn)", "confirmation_modal.cancel": "Hủy bỏ", "confirmations.block.confirm": "Chặn", - "confirmations.delete.confirm": "Xóa bỏ", - "confirmations.delete.message": "Bạn thật sự muốn xóa tút này?", - "confirmations.delete.title": "Xóa tút?", - "confirmations.delete_list.confirm": "Xóa bỏ", - "confirmations.delete_list.message": "Bạn thật sự muốn xóa vĩnh viễn danh sách này?", - "confirmations.delete_list.title": "Xóa danh sách?", + "confirmations.delete.confirm": "Vẫn xóa", + "confirmations.delete.message": "Bạn có chắc muốn xóa tút này?", + "confirmations.delete.title": "Xóa tút", + "confirmations.delete_list.confirm": "Vẫn xóa", + "confirmations.delete_list.message": "Bạn có chắc muốn xóa vĩnh viễn danh sách này?", + "confirmations.delete_list.title": "Xóa danh sách", "confirmations.discard_edit_media.confirm": "Bỏ qua", "confirmations.discard_edit_media.message": "Bạn chưa lưu thay đổi đối với phần mô tả hoặc bản xem trước của media, vẫn bỏ luôn?", "confirmations.edit.confirm": "Sửa", "confirmations.edit.message": "Nội dung tút cũ sẽ bị ghi đè, bạn có tiếp tục?", - "confirmations.edit.title": "Viết đè lên tút cũ?", + "confirmations.edit.title": "Viết đè lên tút cũ", "confirmations.logout.confirm": "Đăng xuất", - "confirmations.logout.message": "Bạn có thật sự muốn thoát?", - "confirmations.logout.title": "Đăng xuất?", + "confirmations.logout.message": "Bạn có chắc muốn thoát?", + "confirmations.logout.title": "Đăng xuất", "confirmations.mute.confirm": "Ẩn", "confirmations.redraft.confirm": "Xóa & viết lại", - "confirmations.redraft.message": "Bạn thật sự muốn xóa tút và viết lại? Điều này sẽ xóa mất những lượt thích và đăng lại của tút, cũng như những trả lời sẽ không còn nội dung gốc.", - "confirmations.redraft.title": "Xóa & viết lại?", + "confirmations.redraft.message": "Điều này sẽ khiến những lượt thích và đăng lại của tút bị mất, cũng như những trả lời sẽ không còn nội dung gốc.", + "confirmations.redraft.title": "Xóa & viết lại", "confirmations.reply.confirm": "Trả lời", "confirmations.reply.message": "Nội dung bạn đang soạn thảo sẽ bị ghi đè, bạn có tiếp tục?", - "confirmations.reply.title": "Viết đè lên tút cũ?", + "confirmations.reply.title": "Viết đè lên tút cũ", "confirmations.unfollow.confirm": "Bỏ theo dõi", - "confirmations.unfollow.message": "Bạn thật sự muốn bỏ theo dõi {name}?", - "confirmations.unfollow.title": "Bỏ theo dõi?", + "confirmations.unfollow.message": "Bạn có chắc muốn bỏ theo dõi {name}?", + "confirmations.unfollow.title": "Bỏ theo dõi", "content_warning.hide": "Ẩn tút", "content_warning.show": "Nhấn để xem", "conversation.delete": "Xóa tin nhắn này", @@ -227,15 +227,15 @@ "domain_pill.activitypub_like_language": "ActivityPub giống như ngôn ngữ Mastodon giao tiếp với các mạng xã hội khác.", "domain_pill.server": "Máy chủ", "domain_pill.their_handle": "Địa chỉ Mastodon:", - "domain_pill.their_server": "Ngôi nhà kỹ thuật số, nơi lưu giữ tút của ai đó.", - "domain_pill.their_username": "Danh tính duy nhất của họ trên máy chủ này. Có thể có tên người dùng giống nhau trên các máy chủ khác.", + "domain_pill.their_server": "Nơi lưu trữ tút của người này.", + "domain_pill.their_username": "Độc nhất trên máy chủ này. Những máy chủ khác có thể cũng có tên người dùng giống vậy.", "domain_pill.username": "Tên người dùng", "domain_pill.whats_in_a_handle": "Địa chỉ Mastodon là gì?", "domain_pill.who_they_are": "Vì địa chỉ Mastodon cho biết một người là ai và họ ở đâu, nên bạn có thể tương tác với mọi người trên các nền tảng có .", "domain_pill.who_you_are": "Vì địa chỉ Mastodon cho biết bạn là ai và bạn ở đâu, nên bạn có thể tương tác với mọi người trên các nền tảng có .", "domain_pill.your_handle": "Địa chỉ Mastodon của bạn:", - "domain_pill.your_server": "Ngôi nhà kỹ thuật số, nơi lưu giữ tút của bạn. Không thích ở đây? Chuyển sang máy chủ khác và mang theo người theo dõi của bạn.", - "domain_pill.your_username": "Danh tính duy nhất của bạn trên máy chủ này. Có thể có tên người dùng giống bạn trên các máy chủ khác.", + "domain_pill.your_server": "Nơi lưu trữ tút của bạn. Không thích ở đây? Chuyển sang máy chủ khác và giữ nguyên người theo dõi của bạn.", + "domain_pill.your_username": "Chỉ riêng bạn trên máy chủ này. Những máy chủ khác có thể cũng có tên người dùng giống vậy.", "embed.instructions": "Sao chép đoạn mã dưới đây và chèn vào trang web của bạn.", "embed.preview": "Nó sẽ hiển thị như vầy:", "emoji_button.activity": "Hoạt động", @@ -359,7 +359,7 @@ "hints.profiles.see_more_followers": "Xem thêm người theo dõi ở {domain}", "hints.profiles.see_more_follows": "Xem thêm người mà người này theo dõi ở {domain}", "hints.profiles.see_more_posts": "Xem thêm tút ở {domain}", - "hints.threads.replies_may_be_missing": "Lượt trả lời trên máy chủ khác có thể không đầy đủ.", + "hints.threads.replies_may_be_missing": "Lượt trả lời từ máy chủ khác có thể không đầy đủ.", "hints.threads.see_more": "Xem thêm ở {domain}", "home.column_settings.show_reblogs": "Hiện những lượt đăng lại", "home.column_settings.show_replies": "Hiện những tút dạng trả lời", @@ -432,12 +432,12 @@ "keyboard_shortcuts.unfocus": "đưa con trỏ ra khỏi ô soạn thảo hoặc ô tìm kiếm", "keyboard_shortcuts.up": "di chuyển lên trên danh sách", "lightbox.close": "Đóng", - "lightbox.compress": "Thu nhỏ hình", - "lightbox.expand": "Phóng to hình", "lightbox.next": "Tiếp", "lightbox.previous": "Trước", + "lightbox.zoom_in": "Kích cỡ gốc", + "lightbox.zoom_out": "Vừa màn hình", "limited_account_hint.action": "Vẫn cứ xem", - "limited_account_hint.title": "Người này đã bị ẩn bởi quản trị viên của {domain}.", + "limited_account_hint.title": "Người này đã bị ẩn bởi quản trị viên {domain}.", "link_preview.author": "Bởi {name}", "link_preview.more_from_author": "Thêm từ {name}", "link_preview.shares": "{count, plural, other {{counter} lượt chia sẻ}}", @@ -533,7 +533,7 @@ "notification.relationships_severance_event.learn_more": "Tìm hiểu thêm", "notification.relationships_severance_event.user_domain_block": "Bạn đã chặn {target}, xóa {followersCount} người theo dõi bạn và {followingCount, plural, other {# người}} theo dõi bạn.", "notification.status": "{name} đăng tút mới", - "notification.update": "{name} đã sửa tút", + "notification.update": "{name} cập nhật tút", "notification_requests.accept": "Chấp nhận", "notification_requests.accept_multiple": "{count, plural, other {Duyệt # yêu cầu…}}", "notification_requests.confirm_accept_multiple.button": "{count, plural, other {Yêu cầu cần duyệt}}", @@ -554,7 +554,7 @@ "notification_requests.title": "Thông báo đã lọc", "notification_requests.view": "Hiện thông báo", "notifications.clear": "Xóa hết thông báo", - "notifications.clear_confirmation": "Bạn thật sự muốn xóa vĩnh viễn tất cả thông báo của mình?", + "notifications.clear_confirmation": "Bạn có chắc muốn xóa vĩnh viễn tất cả thông báo của mình?", "notifications.clear_title": "Xóa hết thông báo?", "notifications.column_settings.admin.report": "Báo cáo mới:", "notifications.column_settings.admin.sign_up": "Người mới tham gia:", @@ -621,7 +621,7 @@ "onboarding.profile.display_name_hint": "Tên đầy đủ hoặc biệt danh đều được…", "onboarding.profile.lead": "Bạn có thể cài đặt lại trong phần cài đặt, nơi thậm chí còn có nhiều tùy chọn hơn.", "onboarding.profile.note": "Giới thiệu", - "onboarding.profile.note_hint": "Bạn có thể @nhắnriêng ai đó hoặc #hashtags…", + "onboarding.profile.note_hint": "Bạn có thể @aiđó hoặc #hashtags…", "onboarding.profile.save_and_continue": "Lưu và tiếp tục", "onboarding.profile.title": "Thiết lập hồ sơ", "onboarding.profile.upload_avatar": "Tải lên ảnh đại diện", @@ -657,7 +657,7 @@ "poll.voted": "Bạn đã bình chọn rồi", "poll.votes": "{votes, plural, other {# lượt bình chọn}}", "poll_button.add_poll": "Tạo bình chọn", - "poll_button.remove_poll": "Hủy cuộc bình chọn", + "poll_button.remove_poll": "Xóa bình chọn", "privacy.change": "Chọn kiểu tút", "privacy.direct.long": "Những người được nhắc trong tút", "privacy.direct.short": "Người cụ thể", @@ -738,7 +738,7 @@ "report_notification.categories.violation": "Vi phạm nội quy", "report_notification.categories.violation_sentence": "vi phạm nội quy", "report_notification.open": "Mở báo cáo", - "search.no_recent_searches": "Không có tìm kiếm gần đây", + "search.no_recent_searches": "Gần đây chưa tìm gì", "search.placeholder": "Tìm kiếm", "search.quick_action.account_search": "Người có tên {x}", "search.quick_action.go_to_account": "Xem trang {x}", @@ -748,12 +748,12 @@ "search.search_or_paste": "Tìm kiếm hoặc nhập URL", "search_popout.full_text_search_disabled_message": "Không khả dụng trên {domain}.", "search_popout.full_text_search_logged_out_message": "Cần đăng nhập trước.", - "search_popout.language_code": "Mã ngôn ngữ ISO", - "search_popout.options": "Tùy chọn tìm kiếm", + "search_popout.language_code": "mã ngôn ngữ ISO", + "search_popout.options": "Tìm nâng cao", "search_popout.quick_actions": "Thao tác nhanh", - "search_popout.recent": "Tìm kiếm gần đây", + "search_popout.recent": "Bạn đã tìm", "search_popout.specific_date": "ngày cụ thể", - "search_popout.user": "mọi người", + "search_popout.user": "địa chỉ Mastodon", "search_results.accounts": "Mọi người", "search_results.all": "Toàn bộ", "search_results.hashtags": "Hashtag", @@ -789,7 +789,7 @@ "status.edited_x_times": "Đã sửa {count, plural, other {{count} lần}}", "status.embed": "Lấy mã nhúng", "status.favourite": "Thích", - "status.favourites": "{count, plural, other {lượt thích}}", + "status.favourites": "{count, plural, other {Thích}}", "status.filter": "Lọc tút này", "status.history.created": "{name} đăng {date}", "status.history.edited": "{name} đã sửa {date}", @@ -808,7 +808,7 @@ "status.reblog": "Đăng lại", "status.reblog_private": "Đăng lại (Riêng tư)", "status.reblogged_by": "{name} đăng lại", - "status.reblogs": "{count, plural, other {đăng lại}}", + "status.reblogs": "{count, plural, other {Đăng lại}}", "status.reblogs.empty": "Tút này chưa có ai đăng lại. Nếu có, nó sẽ hiển thị ở đây.", "status.redraft": "Xóa và viết lại", "status.remove_bookmark": "Bỏ lưu", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 6df3cde208..a7cd089948 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "取消输入/搜索", "keyboard_shortcuts.up": "在列表中让光标上移", "lightbox.close": "关闭", - "lightbox.compress": "返回图片全览", - "lightbox.expand": "放大查看图片", "lightbox.next": "下一个", "lightbox.previous": "上一个", + "lightbox.zoom_in": "缩放为实际大小", + "lightbox.zoom_out": "缩放到适合窗口大小", "limited_account_hint.action": "仍要显示个人资料", "limited_account_hint.title": "此账号资料已被 {domain} 管理员隐藏。", "link_preview.author": "由 {name}", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 6fc1b9d267..22f51a8413 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -398,8 +398,6 @@ "keyboard_shortcuts.unfocus": "把標示移離文字輸入和搜索", "keyboard_shortcuts.up": "在列表往上移動", "lightbox.close": "關閉", - "lightbox.compress": "縮小檢視", - "lightbox.expand": "擴大檢視", "lightbox.next": "下一頁", "lightbox.previous": "上一頁", "limited_account_hint.action": "一律顯示個人檔案", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index d69f54f7c8..7f2caeaf4b 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "跳離文字撰寫區塊或搜尋框", "keyboard_shortcuts.up": "向上移動", "lightbox.close": "關閉", - "lightbox.compress": "折疊圖片檢視框", - "lightbox.expand": "展開圖片檢視框", "lightbox.next": "下一步", "lightbox.previous": "上一步", + "lightbox.zoom_in": "縮放至實際大小", + "lightbox.zoom_out": "縮放至合適大小", "limited_account_hint.action": "一律顯示個人檔案", "limited_account_hint.title": "此個人檔案已被 {domain} 的管理員隱藏。", "link_preview.author": "來自 {name}", diff --git a/config/locales/devise.kab.yml b/config/locales/devise.kab.yml index 20249aae94..32a98a37c3 100644 --- a/config/locales/devise.kab.yml +++ b/config/locales/devise.kab.yml @@ -11,9 +11,9 @@ kab: invalid: Tella tuccḍa deg %{authentication_keys} neγ deg wawal uffir. last_attempt: Γur-k yiwen n uɛraḍ-nniḍen kan send ad yettucekkel umiḍan-ik. locked: Amiḍan-ik yettwargel. - not_found_in_database: Tella tuccḍa deg %{authentication_keys} neγ deg wawal uffir. + not_found_in_database: Tella tuccḍa deg %{authentication_keys} neɣ deg wawal uffir. omniauth_user_creation_failure: Tuccḍa lawan n tmerna n umiḍan i timagit-a. - pending: Amiḍan-inek mazal-it deg ɛiwed n tmuγli. + pending: Amiḍan-inek·inem mazal-it deg ɛiwed n tmuɣli. timeout: Tiɣimit n tuqqna tezri. Ma ulac aɣilif ɛiwed tuqqna akken ad tkemmleḍ. unauthenticated: Ilaq ad teqqneḍ neɣ ad tjerrḍeḍ send ad tkemmelḍ. unconfirmed: Ilaq ad wekdeḍ tansa-inek·inem imayl send ad tkemmelḍ. diff --git a/config/locales/doorkeeper.kab.yml b/config/locales/doorkeeper.kab.yml index 13d8d93258..fa9e1c540a 100644 --- a/config/locales/doorkeeper.kab.yml +++ b/config/locales/doorkeeper.kab.yml @@ -125,10 +125,10 @@ kab: title: Tlaq tsiregt n OAuth scopes: admin:read: ad iɣeṛ akk isefka ɣef uqeddac - admin:write: ẓreg akk isefka γef uqeddac - follow: beddel assaγen n umiḍan - push: ṭṭef-d alɣuten-ik·im yettwademren - read: γeṛ akk isefka n umiḍan-ik + admin:write: ad iẓreg akk isefka ɣef uqeddac + follow: ad ibeddel assaɣen n umiḍan + push: ad iṭṭef-d alɣuten-ik·im yettwademren + read: ad iɣeṛ akk isefka n umiḍan-ik·im read:accounts: ẓer isallen n yimiḍanen read:blocks: ẓer imiḍanen i tesḥebseḍ read:bookmarks: ẓer ticraḍ-ik @@ -139,10 +139,10 @@ kab: read:notifications: ad iẓer alɣuten-inek·inem read:reports: ẓer ineqqisen-ik·im read:search: anadi deg umkan-ik·im - read:statuses: ẓer meṛṛa tisuffaɣ + read:statuses: ad iẓer meṛṛa tisuffaɣ write: beddel meṛṛa isefka n umiḍan-ik write:accounts: ad iẓreg amaɣnu-ik·im - write:blocks: seḥbes imiḍanen d tγula + write:blocks: ad iseḥbes imiḍanen akked tɣula write:bookmarks: ad yernu tisuffaɣ ɣer ticraḍ write:filters: ad isnulfu imsizedgen write:follows: ḍfeṛ imdanen diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index 8aac7cbb47..0325757dca 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -1203,7 +1203,7 @@ es-MX: caches: El contenido que ha sido almacenado en caché por otros servidores puede persistir data_removal: Tus publicaciones y el resto de datos se eliminarán definitivamente email_change_html: Puedes cambiar tu dirección de correo electrónico sin eliminar tu cuenta - email_contact_html: Si aún no te ha llegado, puedes escribir a %{email} para pedir ayuda + email_contact_html: Si todavía no te ha llegado, puedes escribir a %{email} para pedir ayuda email_reconfirmation_html: Si no te ha llegado el correo de confirmación, puedes volver a solicitarlo irreversible: No podrás restaurar ni reactivar tu cuenta more_details_html: Para más detalles, ver la política de privacidad. diff --git a/config/locales/ja.yml b/config/locales/ja.yml index ed6293e1ca..cdc1fd18a8 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -22,6 +22,8 @@ ja: admin: account_actions: action: アクションを実行 + already_silenced: すでに制限されているアカウントです。 + already_suspended: すでに停止されているアカウントです。 title: "%{acct}さんに対してアクションを実行" account_moderation_notes: create: 書き込む @@ -589,6 +591,7 @@ ja: suspend_description_html: アカウントとそのすべての内容にアクセスできなくなり、最終的に削除され、やり取りは不可能になります。 30日以内であれば元に戻すことができます。このアカウントに対するすべての通報をクローズします。 actions_description_html: このレポートへのアクションを決定してください。アカウントへ懲罰的な措置を取った場合、Spanカテゴリが選択されている場合を除き、メール通知が送信されます。 actions_description_remote_html: この通報を解決するためのアクションを選択してください。これはあなたのサーバーがこのリモートアカウントと通信し、そのコンテンツを処理する時のみ影響します。 + actions_no_posts: 削除対象となる投稿がレポートに含まれていません add_to_report: 通報にさらに追加 already_suspended_badges: local: このサーバーで停止済み diff --git a/config/locales/kab.yml b/config/locales/kab.yml index 7044983ac9..88193f8434 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -222,8 +222,8 @@ kab: shortcode: Tangalt tawezlant title: Imujiten udmawanen uncategorized: War-taggayt - unlist: Kkes seg wumuγ - unlisted: Yettwakkes seg wumuγ + unlist: Kkes seg wumuɣ + unlisted: Yettwakkes seg wumuɣ update_failed_msg: Ur izmir ara ad-issali umuji-a upload: Sali dashboard: @@ -710,8 +710,8 @@ kab: privacy_policy: title: Tasertit tabaḍnit redirects: - prompt: Ma tumneḍ aseɣwen-a, sit fell-as akken ad tkemmleḍ. - title: Aql-ik·em ad teffɣeḍ seg %{instance}. + prompt: Ma tumneḍ asaɣ-a, sit fell-as akken ad tkemmleḍ. + title: Ad teffɣeḍ seg %{instance}. relationships: activity: Armud n umiḍan followers: Imeḍfaṛen diff --git a/config/locales/lad.yml b/config/locales/lad.yml index 3d1f1a61e2..4136877ede 100644 --- a/config/locales/lad.yml +++ b/config/locales/lad.yml @@ -874,8 +874,12 @@ lad: message_html: "Tu magazinaje de objektos es mal konfigurado. La privasita de tus utilizadores esta en riziko." tags: moderation: + pending_review: Revizion esta asperando title: Estado + usable: Uzavle name: Nombre + newest: Mas muevos + oldest: Mas viejos reset: Reinisya review: Estado de revizion search: Bushka @@ -1027,7 +1031,9 @@ lad: guide_link_text: Todos pueden kontribuir. sensitive_content: Kontenido sensivle application_mailer: + notification_preferences: Troka preferensyas de posta salutation: "%{name}," + settings: 'Troka preferensyas de posta: %{link}' unsubscribe: Dezabona view: 'Mira:' view_profile: Ve profil @@ -1047,6 +1053,7 @@ lad: hint_html: Una koza mas! Tenemos ke konfirmar ke eres umano (para evitar spam!). Rezolve el CAPTCHA abasho i klika "Kontinua". title: Kontrolo de sigurita confirmations: + awaiting_review: Tu adreso de posta tiene sido konfirmado! La taifa de %{domain} esta revizando tu enrejistrasyon. Risiviras un meil si acheten tu kuento! awaiting_review_title: Estamos revizando tu enrejistramiento clicking_this_link: klikando en este atadijo login_link: konektate kon kuento @@ -1054,6 +1061,7 @@ lad: redirect_to_app_html: Seras readresado a la aplikasyon %{app_name}. Si esto no afita, aprova %{clicking_this_link} o regresa manualmente a la aplikasyon. registration_complete: Tu enrejistrasyon en %{domain} ya esta kompletada! welcome_title: Bienvenido, %{name}! + wrong_email_hint: Si este adreso de posta es inkorekto, puedes trokarlo en las preferensyas del kuento. delete_account: Efasa kuento delete_account_html: Si keres supremir tu kuento, puedes ir aki. Seras pedido de una konfirmasyon. description: @@ -1096,8 +1104,10 @@ lad: security: Sigurita set_new_password: Establese muevo kod setup: + email_below_hint_html: Mira en tu kuti de spam o solisita de muevo. Si el adreso de posta elektronika ke aparese aki es yerrado, puedes trokarlo aki. email_settings_hint_html: Klika el atadjiko ke te embimos para verifikar %{email}. Asperaremos aki. link_not_received: No risivites un atadijo? + new_confirmation_instructions_sent: Resiviras un muevo mesaj de posta elektronika kon el atadjio de konfirmasyon en unos minutos! title: Reviza tu kuti de arivo sign_in: preamble_html: Konektate kon tus kredensiales de %{domain}. Si tu kuento esta balabayado en otruno servidor, no puedras konektarte aki. @@ -1109,11 +1119,14 @@ lad: status: account_status: Estado del kuento functional: Tu kuento esta kompletamente funksyonal. + pending: Tu solisitasyon esta asperando la revizion por muestros administradores. Esto puede tadrar algun tiempo. Arisiviras una posta elektronika si la solisitasyon sea achetada. redirecting_to: Tu kuento se topa inaktivo porke esta siendo readresado a %{acct}. self_destruct: Deke %{domain} va a serrarse, solo tendras akseso limitado a tu kuento. view_strikes: Ve amonestamientos pasados kontra tu kuento too_fast: Formulario enviado demaziado rapido, aprovalo de muevo. use_security_key: Uza la yave de sigurita + author_attribution: + more_from_html: Mas de %{name} challenge: confirm: Kontinua hint_html: "Konsejo: No retornaremos a demandarte por el kod durante la sigiente ora." @@ -1150,6 +1163,9 @@ lad: before: 'Antes de kontinuar, por favor melda kon atensyon las sigientes notas:' caches: El kontenido ke tiene sido magazinado en kashe por otros sirvidores puede persistir data_removal: Tus publikasyones i el resto de datos se supremiran definitivamente + email_change_html: Puedes trokar tu adreso de posta elektronika sin supremir tu kuento + email_contact_html: Si ainda no te tiene parvenido, puedes eskrivir a %{email} para pider ayuda + email_reconfirmation_html: Si no te tiene parvenido la posta de konfirmasyon, puedes retornar a solisitarlo irreversible: No podras restaurar ni reaktivar tu kuento more_details_html: Para mas detalyos, ver la politika de privasita. username_available: Tu nombre de utilizador retornara a estar desponivle @@ -1380,6 +1396,7 @@ lad: authentication_methods: otp: aplikasyon de autentifikasyon en dos pasos password: kod + sign_in_token: kodiche de sigurita por posta elektronika webauthn: yaves de sigurita description_html: Si ves una aktivita ke no rekoneses, konsidera trokar tu kod i kapasitar la autentifikasyon en dos pasos. empty: No ay estoria de autentifikasyon desponivle @@ -1390,6 +1407,7 @@ lad: unsubscribe: action: Si, dezabona complete: Dezabonado + confirmation_html: Estas siguro de ke ya no keres risivir %{type} de Mastodon en %{domain} a tu posta elektronika %{email}? Syempre podras reabonarte dizde las opsyones de avizos por posta.. emails: notification_emails: favourite: avizos de favoritos por posta @@ -1864,6 +1882,7 @@ lad: invalid_otp_token: Kodiche de dos pasos no valido otp_lost_help_html: Si pedriste akseso a los dos, puedes kontaktarte kon %{email} rate_limited: Demaziadas provas de autentifikasyon, aprova de muevo dempues. + seamless_external_login: Estas konektado por un servisyo eksterno i estonses la konfigurasyon de kod i konto de posta no estan disponivles. signed_in_as: 'Konektado komo:' verification: extra_instructions_html: Konsejo: El atadijo en tu web puede ser invizivle. La parte importante es rel="me", ke evita la suplantasyon de identita en sitios kon kontenido jenerado por el utilizador. Puedes inkluzo uzar una etiketa atadijo en la kavesera de la pajina en vez de a, ama el HTML deve ser aksesivle sin exekutar JavaScript. diff --git a/config/locales/simple_form.kab.yml b/config/locales/simple_form.kab.yml index 203b023715..f390d42132 100644 --- a/config/locales/simple_form.kab.yml +++ b/config/locales/simple_form.kab.yml @@ -92,7 +92,7 @@ kab: setting_display_media_default: Akk-a kan setting_display_media_hide_all: Ffer-iten akk setting_display_media_show_all: Sken-iten-id akk - setting_hide_network: Ffer azetta-k·m + setting_hide_network: Ffer azetta-k·m inmetti setting_theme: Asental n wesmel setting_use_pending_items: Askar aleɣwayan sign_in_token_attempt: Tangalt n tɣellist diff --git a/config/locales/simple_form.lad.yml b/config/locales/simple_form.lad.yml index 2a381534ba..94e387107a 100644 --- a/config/locales/simple_form.lad.yml +++ b/config/locales/simple_form.lad.yml @@ -237,6 +237,7 @@ lad: warn: Eskonde kon una avertensya form_admin_settings: activity_api_enabled: Publika estatistikas adjustadas sovre la aktivita del utilizador kon la API + app_icon: Ikono de aplikasyon backups_retention_period: Periodo de retensyon de la dosya de utilizador bootstrap_timeline_accounts: Rekomenda siempre estos kuentos a muevos utilizadores closed_registrations_message: Mesaj personalizado kuando las enrejistrasyones no estan desponivles diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml index eab025c665..e675209017 100644 --- a/config/locales/simple_form.vi.yml +++ b/config/locales/simple_form.vi.yml @@ -4,12 +4,12 @@ vi: hints: account: attribution_domains_as_text: Bảo vệ khỏi những sự gán ghép sai. - discoverable: Các tút và hồ sơ công khai của bạn có thể được giới thiệu hoặc đề xuất ở nhiều khu vực khác nhau của Mastodon và hồ sơ của bạn có thể được đề xuất cho những người dùng khác. + discoverable: Hồ sơ và tút công khai của bạn được đề xuất cho những người dùng Mastodon khác. display_name: Tên đầy đủ hoặc biệt danh đều được. fields: Trang blog của bạn, nghề nghiệp, tuổi hoặc bất cứ thứ gì. - indexable: Tút công khai của bạn sẽ xuất hiện khi tìm kiếm trên Mastodon. Những người đã tương tác với tút của bạn có thể tìm kiếm chúng. - note: 'Bạn có thể @nhắnriêng ai đó hoặc #hashtags.' - show_collections: Mọi người sẽ biết những bạn theo dõi và người theo dõi bạn. Những người bạn theo dõi sẽ vẫn thấy rằng bạn theo dõi họ. + indexable: Mọi người có thể tìm kiếm và tương tác với những tút công khai của bạn trên Mastodon. + note: 'Bạn có thể @aiđó hoặc #hashtags.' + show_collections: Mọi người sẽ biết những bạn theo dõi và người theo dõi bạn. unlocked: Mọi người sẽ theo dõi bạn mà không cần bạn cho phép. account_alias: acct: Nhập tên_người_dùng@máy chủ của tài khoản cũ @@ -214,7 +214,7 @@ vi: setting_default_sensitive: Đánh dấu media nhạy cảm setting_delete_modal: Hỏi trước khi xóa tút setting_disable_hover_cards: Tắt thẻ xem trước hồ sơ - setting_disable_swiping: Không dùng chuyển động vuốt + setting_disable_swiping: Tắt thao tác vuốt setting_display_media: Media nhạy cảm setting_display_media_default: Mặc định setting_display_media_hide_all: Ẩn toàn bộ @@ -311,7 +311,7 @@ vi: text: Nội quy settings: indexable: Cho phép hiện hồ sơ trong công cụ tìm kiếm - show_application: Cho phép hiện ứng dụng dùng để đăng tút + show_application: Hiện ứng dụng dùng để đăng tút tag: listable: Cho phép xuất hiện trong tìm kiếm và đề xuất name: Hashtag diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 98696aef7c..83531c6561 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -1037,7 +1037,7 @@ vi: remove: Bỏ liên kết bí danh appearance: advanced_web_interface: Bố cục - advanced_web_interface_hint: Bố cục nhiều cột cho phép bạn chuyển bố cục hiển thị thành nhiều cột khác nhau. Thích hợp với màn hình rộng. + advanced_web_interface_hint: Chia giao diện thành nhiều cột, phù hợp với màn hình rộng. animations_and_accessibility: Hiệu ứng confirmation_dialogs: Hộp thoại xác nhận discovery: Khám phá @@ -1262,7 +1262,7 @@ vi: add_new: Thêm mới errors: limit: Bạn đã đạt tới số lượng hashtag tối đa - hint_html: "Làm nổi bật những hashtag thường dùng. Một công cụ tuyệt vời để theo dõi các tác phẩm sáng tạo và dự án dài hạn của bạn, các hashtag thường dùng sẽ hiển thị nổi bật trên hồ sơ của bạn và cho phép truy cập nhanh vào các tút." + hint_html: "Làm nổi bật những hashtag thường dùng. Một công cụ tuyệt vời để theo dõi các tác phẩm sáng tạo và dự án dài hạn của bạn, cũng như giúp truy cập nhanh vào các tút." filters: contexts: account: Trang hồ sơ @@ -1555,13 +1555,13 @@ vi: posting_defaults: Mặc định cho tút public_timelines: Bảng tin privacy: - hint_html: "Tùy chỉnh cách mọi người tìm thấy hồ sơ và các tút của bạn. Nhiều tính năng trong Mastodon có thể giúp bạn tiếp cận nhiều đối tượng hơn khi được bật. Hãy xem lại các cài đặt này để đảm bảo chúng phù hợp với bạn." + hint_html: "Tùy chỉnh cách mọi người tìm thấy hồ sơ và tút của bạn. Hãy đảm bảo các thiết lập sau phù hợp với bạn." privacy: Riêng tư privacy_hint_html: Kiểm soát mức độ chi tiết bạn muốn tiết lộ. Mọi người khám phá các hồ sơ thú vị và các ứng dụng thú vị bằng cách theo dõi những người khác và xem họ đăng từ ứng dụng nào, nhưng có thể bạn muốn ẩn nó đi. reach: Tiếp cận reach_hint_html: Kiểm soát cách bạn được khám phá và theo dõi. Bạn có muốn tút của mình xuất hiện trên màn hình Khám phá không? Bạn có muốn người khác nhìn thấy bạn trong các đề xuất theo dõi của họ không? Bạn muốn tự động chấp nhận tất cả những người theo dõi mới hay tự duyệt từng người theo dõi? search: Tìm kiếm - search_hint_html: Kiểm soát cách tìm thấy bạn. Bạn có muốn mọi người tìm thấy bạn bằng những gì bạn đã đăng công khai không? Bạn có muốn những người bên ngoài Mastodon tìm thấy hồ sơ của bạn khi tìm kiếm trên web không? Xin lưu ý rằng không thể đảm bảo loại trừ hoàn toàn khỏi tất cả các công cụ tìm kiếm đối với thông tin công khai. + search_hint_html: Kiểm soát cách tìm thấy bạn. Bạn có muốn mọi người tìm thấy bạn bằng những gì bạn đã đăng công khai không? Bạn có muốn những người bên ngoài Mastodon tìm thấy hồ sơ của bạn khi tìm kiếm trên web không? Lưu ý là không thể đảm bảo tránh khỏi các công cụ tìm kiếm đối với thông tin công khai. title: Riêng tư và tiếp cận privacy_policy: title: Chính sách bảo mật @@ -1675,7 +1675,7 @@ vi: preferences: Chung profile: Hồ sơ relationships: Quan hệ - severed_relationships: Mối quan hệ bị cắt đứt + severed_relationships: Quan hệ bị cắt đứt statuses_cleanup: Tự động xóa tút cũ strikes: Lần cảnh cáo two_factor_authentication: Xác minh 2 bước @@ -1688,7 +1688,7 @@ vi: user_domain_block: Bạn đã chặn %{target_name} lost_followers: Mất người theo dõi lost_follows: Mất người đang theo dõi - preamble: Bạn có thể mất số lượt theo dõi và người theo dõi khi chặn một máy chủ hoặc khi kiểm duyệt viên của bạn quyết định tạm dừng máy chủ từ xa. Khi điều đó xảy ra, bạn sẽ có thể tải xuống danh sách các mối quan hệ đã bị cắt đứt, để kiểm tra và nhập vào máy chủ khác. + preamble: Khi bạn hoặc kiểm duyệt viên máy chủ của bạn chặn một máy chủ, người bạn đang theo dõi và người theo dõi bạn có thể sẽ bị mất. Khi điều đó xảy ra, hãy vào đây tải xuống danh sách các mối quan hệ đã bị cắt đứt, và nhập thủ công. purged: Thông tin về máy chủ này đã bị quản trị viên máy chủ của bạn xóa sạch. type: Sự kiện statuses: @@ -1769,7 +1769,7 @@ vi: contrast: Mastodon (Tương phản) default: Mastodon (Tối) mastodon-light: Mastodon (Sáng) - system: Tự động (chủ đề hệ thống) + system: Theo hệ thống time: formats: default: "%-d.%m.%Y %H:%M" @@ -1905,7 +1905,7 @@ vi: seamless_external_login: Bạn đã đăng nhập thông qua một dịch vụ bên ngoài, vì vậy mật khẩu và email không khả dụng. signed_in_as: 'Đăng nhập bằng:' verification: - extra_instructions_html: Mẹo: Liên kết trên trang web của bạn có thể ẩn. Phần quan trọng là rel="me" ngăn chặn việc mạo danh trên các trang web có nội dung do người dùng tạo. Bạn thậm chí có thể sử dụng một thẻ link trên header của trang thay vì a, nhưng HTML phải có thể truy cập được mà không cần thực thi JavaScript. + extra_instructions_html: Mẹo: Có thể ẩn liên kết trên trang web của bạn. Quan trọng là rel="me" giúp ngăn chặn việc mạo danh trên các trang web có nội dung do người dùng tạo. Bạn cũng có thể sử dụng một thẻ link trên header của trang thay vì a, nhưng HTML phải có thể truy cập được mà không cần thực thi JavaScript. here_is_how: Cách thực hiện hint_html: "Xác minh danh tính trên Mastodon là dành cho tất cả mọi người. Dựa trên các tiêu chuẩn web mở, miễn phí bây giờ và mãi mãi. Tất cả những gì bạn cần là một trang web cá nhân để mọi người nhận ra bạn. Khi bạn liên kết đến trang web này từ hồ sơ của mình, chúng tôi sẽ kiểm tra xem trang web đó có liên kết lại với hồ sơ của bạn hay không và hiển thị một chỉ báo trực quan trên đó." instructions_html: Sao chép và dán mã bên dưới vào mã nguồn trang web của bạn. Sau đó, thêm địa chỉ trang web của bạn vào một trong các trường metadata trên hồ sơ của bạn từ tab "Sửa hồ sơ" và lưu thay đổi. @@ -1918,7 +1918,7 @@ vi: error: Có vấn đề khi thêm khóa bảo mật. Xin thử lại. success: Đã thêm khóa bảo mật mới thành công. delete: Xóa - delete_confirmation: Bạn thật sự muốn xóa khóa bảo mật này? + delete_confirmation: Bạn có chắc muốn xóa khóa bảo mật này? description_html: Nếu bạn kích hoạt khóa bảo mật, bạn sẽ cần dùng một trong những khóa bảo mật đó mỗi khi đăng nhập. destroy: error: Có vấn đề khi xóa khóa bảo mật. Xin thử lại. From 11eae691ba91c2e36ce7cbdab18bf5a60a4fb9c8 Mon Sep 17 00:00:00 2001 From: Tim Campbell Date: Mon, 23 Sep 2024 10:55:35 +0200 Subject: [PATCH 12/22] Feature more otel customization (#31998) --- config/initializers/opentelemetry.rb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/config/initializers/opentelemetry.rb b/config/initializers/opentelemetry.rb index d121a95a36..8edce03b90 100644 --- a/config/initializers/opentelemetry.rb +++ b/config/initializers/opentelemetry.rb @@ -56,12 +56,13 @@ if ENV.keys.any? { |name| name.match?(/OTEL_.*_ENDPOINT/) } }, }) - prefix = ENV.fetch('OTEL_SERVICE_NAME_PREFIX', 'mastodon') + prefix = ENV.fetch('OTEL_SERVICE_NAME_PREFIX', 'mastodon') + separator = ENV.fetch('OTEL_SERVICE_NAME_SEPARATOR', '/') c.service_name = case $PROGRAM_NAME - when /puma/ then "#{prefix}/web" + when /puma/ then "#{prefix}#{separator}web" else - "#{prefix}/#{$PROGRAM_NAME.split('/').last}" + "#{prefix}#{separator}#{$PROGRAM_NAME.split('/').last}" end c.service_version = Mastodon::Version.to_s end From 770ec9240a8ec4f9a554533821e8b9a60be71bdf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 09:02:16 +0000 Subject: [PATCH 13/22] Update Yarn to v4.5.0 (#31914) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- streaming/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index ea0c0246cb..08fec76465 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@mastodon/mastodon", "license": "AGPL-3.0-or-later", - "packageManager": "yarn@4.4.1", + "packageManager": "yarn@4.5.0", "engines": { "node": ">=18" }, diff --git a/streaming/package.json b/streaming/package.json index 64947749a1..d573c9b284 100644 --- a/streaming/package.json +++ b/streaming/package.json @@ -1,7 +1,7 @@ { "name": "@mastodon/streaming", "license": "AGPL-3.0-or-later", - "packageManager": "yarn@4.4.1", + "packageManager": "yarn@4.5.0", "engines": { "node": ">=18" }, From 5d6a3f2cb07de926da007e855e24ee852dc17b91 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 23 Sep 2024 11:13:51 +0200 Subject: [PATCH 14/22] Update dependency google-protobuf (#32029) --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 8fece04a6d..8ba091038d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -289,7 +289,7 @@ GEM raabro (~> 1.4) globalid (1.2.1) activesupport (>= 6.1) - google-protobuf (3.25.4) + google-protobuf (3.25.5) googleapis-common-protos-types (1.15.0) google-protobuf (>= 3.18, < 5.a) haml (6.3.0) From cd7b670cd8de145510091c5737f5ed158e16cd00 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 23 Sep 2024 05:18:04 -0400 Subject: [PATCH 15/22] Reduce factory creation in `User#reset_password!` spec (#32021) --- spec/models/user_spec.rb | 47 +++++++++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 972453cd69..d28e6658f1 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -434,7 +434,9 @@ RSpec.describe User do end describe '#reset_password!' do - subject(:user) { Fabricate(:user, password: 'foobar12345') } + subject(:user) { Fabricate(:user, password: original_password) } + + let(:original_password) { 'foobar12345' } let!(:session_activation) { Fabricate(:session_activation, user: user) } let!(:access_token) { Fabricate(:access_token, resource_owner_id: user.id) } @@ -442,31 +444,40 @@ RSpec.describe User do let(:redis_pipeline_stub) { instance_double(Redis::Namespace, publish: nil) } - before do - allow(redis).to receive(:pipelined).and_yield(redis_pipeline_stub) - user.reset_password! + before { stub_redis } + + it 'changes the password immediately and revokes related access' do + expect { user.reset_password! } + .to remove_activated_sessions + .and remove_active_user_tokens + .and remove_user_web_subscriptions + + expect(user) + .to_not be_external_or_valid_password(original_password) + expect { session_activation.reload } + .to raise_error(ActiveRecord::RecordNotFound) + expect { web_push_subscription.reload } + .to raise_error(ActiveRecord::RecordNotFound) + expect(redis_pipeline_stub) + .to have_received(:publish).with("timeline:access_token:#{access_token.id}", Oj.dump(event: :kill)).once end - it 'changes the password immediately' do - expect(user.external_or_valid_password?('foobar12345')).to be false + def remove_activated_sessions + change(user.session_activations, :count).to(0) end - it 'deactivates all sessions' do - expect(user.session_activations.count).to eq 0 - expect { session_activation.reload }.to raise_error(ActiveRecord::RecordNotFound) + def remove_active_user_tokens + change { Doorkeeper::AccessToken.active_for(user).count }.to(0) end - it 'revokes all access tokens' do - expect(Doorkeeper::AccessToken.active_for(user).count).to eq 0 + def remove_user_web_subscriptions + change { Web::PushSubscription.where(user: user).or(Web::PushSubscription.where(access_token: access_token)).count }.to(0) end - it 'revokes streaming access for all access tokens' do - expect(redis_pipeline_stub).to have_received(:publish).with("timeline:access_token:#{access_token.id}", Oj.dump(event: :kill)).once - end - - it 'removes push subscriptions' do - expect(Web::PushSubscription.where(user: user).or(Web::PushSubscription.where(access_token: access_token)).count).to eq 0 - expect { web_push_subscription.reload }.to raise_error(ActiveRecord::RecordNotFound) + def stub_redis + allow(redis) + .to receive(:pipelined) + .and_yield(redis_pipeline_stub) end end From 66ed7ea4b5a5c022da94eca9cb5931eb4151080d Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 23 Sep 2024 05:20:43 -0400 Subject: [PATCH 16/22] Move status creation to "with rss" context in accounts request spec (#32020) --- spec/requests/accounts_spec.rb | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/spec/requests/accounts_spec.rb b/spec/requests/accounts_spec.rb index e657ae6060..afd9ac80e2 100644 --- a/spec/requests/accounts_spec.rb +++ b/spec/requests/accounts_spec.rb @@ -46,21 +46,6 @@ RSpec.describe 'Accounts show response' do describe 'GET to short username paths' do context 'with existing statuses' do - let!(:status) { Fabricate(:status, account: account) } - let!(:status_reply) { Fabricate(:status, account: account, thread: Fabricate(:status)) } - let!(:status_self_reply) { Fabricate(:status, account: account, thread: status) } - let!(:status_media) { Fabricate(:status, account: account) } - let!(:status_pinned) { Fabricate(:status, account: account) } - let!(:status_private) { Fabricate(:status, account: account, visibility: :private) } - let!(:status_direct) { Fabricate(:status, account: account, visibility: :direct) } - let!(:status_reblog) { Fabricate(:status, account: account, reblog: Fabricate(:status)) } - - before do - status_media.media_attachments << Fabricate(:media_attachment, account: account, type: :image) - account.pinned_statuses << status_pinned - account.pinned_statuses << status_private - end - context 'with HTML' do let(:format) { 'html' } @@ -207,6 +192,21 @@ RSpec.describe 'Accounts show response' do context 'with RSS' do let(:format) { 'rss' } + let!(:status) { Fabricate(:status, account: account) } + let!(:status_reply) { Fabricate(:status, account: account, thread: Fabricate(:status)) } + let!(:status_self_reply) { Fabricate(:status, account: account, thread: status) } + let!(:status_media) { Fabricate(:status, account: account) } + let!(:status_pinned) { Fabricate(:status, account: account) } + let!(:status_private) { Fabricate(:status, account: account, visibility: :private) } + let!(:status_direct) { Fabricate(:status, account: account, visibility: :direct) } + let!(:status_reblog) { Fabricate(:status, account: account, reblog: Fabricate(:status)) } + + before do + status_media.media_attachments << Fabricate(:media_attachment, account: account, type: :image) + account.pinned_statuses << status_pinned + account.pinned_statuses << status_private + end + context 'with a normal account in an RSS request' do before do get short_account_path(username: account.username, format: format) From 447d0a3e880221973fc81840c9ba5e3cc6c06dcb Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 23 Sep 2024 05:27:53 -0400 Subject: [PATCH 17/22] Remove double no-records cases in `api/v1/admin` req specs (#32014) --- .../v1/admin/canonical_email_blocks_spec.rb | 22 ++++++++++--------- .../api/v1/admin/domain_allows_spec.rb | 19 ++++++++-------- .../api/v1/admin/domain_blocks_spec.rb | 22 ++++++++++--------- .../api/v1/admin/email_domain_blocks_spec.rb | 22 ++++++++++--------- spec/requests/api/v1/admin/ip_blocks_spec.rb | 22 ++++++++++--------- spec/requests/api/v1/admin/reports_spec.rb | 22 ++++++++++--------- spec/requests/api/v1/admin/tags_spec.rb | 20 +++++++++-------- 7 files changed, 81 insertions(+), 68 deletions(-) diff --git a/spec/requests/api/v1/admin/canonical_email_blocks_spec.rb b/spec/requests/api/v1/admin/canonical_email_blocks_spec.rb index eaa011d516..25af0a26af 100644 --- a/spec/requests/api/v1/admin/canonical_email_blocks_spec.rb +++ b/spec/requests/api/v1/admin/canonical_email_blocks_spec.rb @@ -20,19 +20,16 @@ RSpec.describe 'Canonical Email Blocks' do it_behaves_like 'forbidden for wrong role', '' it_behaves_like 'forbidden for wrong role', 'Moderator' - it 'returns http success' do - subject - - expect(response).to have_http_status(200) - expect(response.content_type) - .to start_with('application/json') - end - context 'when there is no canonical email block' do it 'returns an empty list' do subject - expect(response.parsed_body).to be_empty + expect(response) + .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body) + .to be_empty end end @@ -43,7 +40,12 @@ RSpec.describe 'Canonical Email Blocks' do it 'returns the correct canonical email hashes' do subject - expect(response.parsed_body.pluck(:canonical_email_hash)).to match_array(expected_email_hashes) + expect(response) + .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body.pluck(:canonical_email_hash)) + .to match_array(expected_email_hashes) end context 'with limit param' do diff --git a/spec/requests/api/v1/admin/domain_allows_spec.rb b/spec/requests/api/v1/admin/domain_allows_spec.rb index eb5128e420..fba1eb15d3 100644 --- a/spec/requests/api/v1/admin/domain_allows_spec.rb +++ b/spec/requests/api/v1/admin/domain_allows_spec.rb @@ -20,18 +20,14 @@ RSpec.describe 'Domain Allows' do it_behaves_like 'forbidden for wrong role', '' it_behaves_like 'forbidden for wrong role', 'Moderator' - it 'returns http success' do - subject - - expect(response).to have_http_status(200) - expect(response.content_type) - .to start_with('application/json') - end - context 'when there is no allowed domains' do it 'returns an empty body' do subject + expect(response) + .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to be_empty end end @@ -51,7 +47,12 @@ RSpec.describe 'Domain Allows' do it 'returns the correct allowed domains' do subject - expect(response.parsed_body).to match_array(expected_response) + expect(response) + .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body) + .to match_array(expected_response) end context 'with limit param' do diff --git a/spec/requests/api/v1/admin/domain_blocks_spec.rb b/spec/requests/api/v1/admin/domain_blocks_spec.rb index 1a506bd9be..029de72fd7 100644 --- a/spec/requests/api/v1/admin/domain_blocks_spec.rb +++ b/spec/requests/api/v1/admin/domain_blocks_spec.rb @@ -20,19 +20,16 @@ RSpec.describe 'Domain Blocks' do it_behaves_like 'forbidden for wrong role', '' it_behaves_like 'forbidden for wrong role', 'Moderator' - it 'returns http success' do - subject - - expect(response).to have_http_status(200) - expect(response.content_type) - .to start_with('application/json') - end - context 'when there are no domain blocks' do it 'returns an empty list' do subject - expect(response.parsed_body).to be_empty + expect(response) + .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body) + .to be_empty end end @@ -66,7 +63,12 @@ RSpec.describe 'Domain Blocks' do it 'returns the expected domain blocks' do subject - expect(response.parsed_body).to match_array(expected_responde) + expect(response) + .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body) + .to match_array(expected_responde) end context 'with limit param' do diff --git a/spec/requests/api/v1/admin/email_domain_blocks_spec.rb b/spec/requests/api/v1/admin/email_domain_blocks_spec.rb index 3f51a3ea2d..2788a45a4a 100644 --- a/spec/requests/api/v1/admin/email_domain_blocks_spec.rb +++ b/spec/requests/api/v1/admin/email_domain_blocks_spec.rb @@ -21,19 +21,16 @@ RSpec.describe 'Email Domain Blocks' do it_behaves_like 'forbidden for wrong role', '' it_behaves_like 'forbidden for wrong role', 'Moderator' - it 'returns http success' do - subject - - expect(response).to have_http_status(200) - expect(response.content_type) - .to start_with('application/json') - end - context 'when there is no email domain block' do it 'returns an empty list' do subject - expect(response.parsed_body).to be_empty + expect(response) + .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body) + .to be_empty end end @@ -44,7 +41,12 @@ RSpec.describe 'Email Domain Blocks' do it 'return the correct blocked email domains' do subject - expect(response.parsed_body.pluck(:domain)).to match_array(blocked_email_domains) + expect(response) + .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body.pluck(:domain)) + .to match_array(blocked_email_domains) end context 'with limit param' do diff --git a/spec/requests/api/v1/admin/ip_blocks_spec.rb b/spec/requests/api/v1/admin/ip_blocks_spec.rb index c096aa3328..aa3db33915 100644 --- a/spec/requests/api/v1/admin/ip_blocks_spec.rb +++ b/spec/requests/api/v1/admin/ip_blocks_spec.rb @@ -20,19 +20,16 @@ RSpec.describe 'IP Blocks' do it_behaves_like 'forbidden for wrong role', '' it_behaves_like 'forbidden for wrong role', 'Moderator' - it 'returns http success' do - subject - - expect(response).to have_http_status(200) - expect(response.content_type) - .to start_with('application/json') - end - context 'when there is no ip block' do it 'returns an empty body' do subject - expect(response.parsed_body).to be_empty + expect(response) + .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body) + .to be_empty end end @@ -60,7 +57,12 @@ RSpec.describe 'IP Blocks' do it 'returns the correct blocked ips' do subject - expect(response.parsed_body).to match_array(expected_response) + expect(response) + .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body) + .to match_array(expected_response) end context 'with limit param' do diff --git a/spec/requests/api/v1/admin/reports_spec.rb b/spec/requests/api/v1/admin/reports_spec.rb index a0e7b0a369..987f0eda7f 100644 --- a/spec/requests/api/v1/admin/reports_spec.rb +++ b/spec/requests/api/v1/admin/reports_spec.rb @@ -19,19 +19,16 @@ RSpec.describe 'Reports' do it_behaves_like 'forbidden for wrong scope', 'write:statuses' it_behaves_like 'forbidden for wrong role', '' - it 'returns http success' do - subject - - expect(response).to have_http_status(200) - expect(response.content_type) - .to start_with('application/json') - end - context 'when there are no reports' do it 'returns an empty list' do subject - expect(response.parsed_body).to be_empty + expect(response) + .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body) + .to be_empty end end @@ -66,7 +63,12 @@ RSpec.describe 'Reports' do it 'returns all unresolved reports' do subject - expect(response.parsed_body).to match_array(expected_response) + expect(response) + .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body) + .to match_array(expected_response) end context 'with resolved param' do diff --git a/spec/requests/api/v1/admin/tags_spec.rb b/spec/requests/api/v1/admin/tags_spec.rb index 696a11da67..3a57432af7 100644 --- a/spec/requests/api/v1/admin/tags_spec.rb +++ b/spec/requests/api/v1/admin/tags_spec.rb @@ -20,19 +20,16 @@ RSpec.describe 'Tags' do it_behaves_like 'forbidden for wrong scope', 'write:statuses' it_behaves_like 'forbidden for wrong role', '' - it 'returns http success' do - subject - - expect(response).to have_http_status(200) - expect(response.content_type) - .to start_with('application/json') - end - context 'when there are no tags' do it 'returns an empty list' do subject - expect(response.parsed_body).to be_empty + expect(response) + .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body) + .to be_empty end end @@ -48,6 +45,11 @@ RSpec.describe 'Tags' do it 'returns the expected tags' do subject + + expect(response) + .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') tags.each do |tag| expect(response.parsed_body.find { |item| item[:id] == tag.id.to_s && item[:name] == tag.name }).to_not be_nil end From 2b4bda800448337c3eb07b679e3e1031ea301102 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 23 Sep 2024 06:44:52 -0400 Subject: [PATCH 18/22] Add `response_avatar_link` helper to webfinger request spec (#31999) --- spec/requests/well_known/webfinger_spec.rb | 28 ++++++++++++---------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/spec/requests/well_known/webfinger_spec.rb b/spec/requests/well_known/webfinger_spec.rb index 6880ba4b58..aeff56aebf 100644 --- a/spec/requests/well_known/webfinger_spec.rb +++ b/spec/requests/well_known/webfinger_spec.rb @@ -168,10 +168,12 @@ RSpec.describe 'The /.well-known/webfinger endpoint' do it 'returns avatar in response' do perform_request! - avatar_link = get_avatar_link(response.parsed_body) - expect(avatar_link).to_not be_nil - expect(avatar_link[:type]).to eq alice.avatar.content_type - expect(avatar_link[:href]).to eq Addressable::URI.new(host: Rails.configuration.x.local_domain, path: alice.avatar.to_s, scheme: 'https').to_s + expect(response_avatar_link) + .to be_present + .and include( + type: eq(alice.avatar.content_type), + href: eq(Addressable::URI.new(host: Rails.configuration.x.local_domain, path: alice.avatar.to_s, scheme: 'https').to_s) + ) end context 'with limited federation mode' do @@ -182,8 +184,8 @@ RSpec.describe 'The /.well-known/webfinger endpoint' do it 'does not return avatar in response' do perform_request! - avatar_link = get_avatar_link(response.parsed_body) - expect(avatar_link).to be_nil + expect(response_avatar_link) + .to be_nil end end @@ -197,8 +199,8 @@ RSpec.describe 'The /.well-known/webfinger endpoint' do it 'does not return avatar in response' do perform_request! - avatar_link = get_avatar_link(response.parsed_body) - expect(avatar_link).to be_nil + expect(response_avatar_link) + .to be_nil end end end @@ -212,8 +214,8 @@ RSpec.describe 'The /.well-known/webfinger endpoint' do end it 'does not return avatar in response' do - avatar_link = get_avatar_link(response.parsed_body) - expect(avatar_link).to be_nil + expect(response_avatar_link) + .to be_nil end end @@ -247,7 +249,9 @@ RSpec.describe 'The /.well-known/webfinger endpoint' do private - def get_avatar_link(json) - json[:links].find { |link| link[:rel] == 'http://webfinger.net/rel/avatar' } + def response_avatar_link + response + .parsed_body[:links] + .find { |link| link[:rel] == 'http://webfinger.net/rel/avatar' } end end From bbf77522569ad284893d2380d0b688d361391889 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 23 Sep 2024 06:45:34 -0400 Subject: [PATCH 19/22] Combine assertions in `Notification` model spec (#32015) --- spec/models/notification_spec.rb | 127 +++++++++++++++---------------- 1 file changed, 61 insertions(+), 66 deletions(-) diff --git a/spec/models/notification_spec.rb b/spec/models/notification_spec.rb index d498ee02a5..67c85b40f3 100644 --- a/spec/models/notification_spec.rb +++ b/spec/models/notification_spec.rb @@ -252,88 +252,83 @@ RSpec.describe Notification do ] end - context 'with a preloaded target status' do - it 'preloads mention' do - expect(subject[0].type).to eq :mention - expect(subject[0].association(:mention)).to be_loaded - expect(subject[0].mention.association(:status)).to be_loaded + context 'with a preloaded target status and a cached status' do + it 'preloads association records and replaces association records' do + expect(subject) + .to contain_exactly( + mention_attributes, + status_attributes, + reblog_attributes, + follow_attributes, + follow_request_attributes, + favourite_attributes, + poll_attributes + ) end - it 'preloads status' do - expect(subject[1].type).to eq :status - expect(subject[1].association(:status)).to be_loaded + def mention_attributes + have_attributes( + type: :mention, + target_status: eq(mention.status).and(have_loaded_association(:account)), + mention: have_loaded_association(:status) + ).and(have_loaded_association(:mention)) end - it 'preloads reblog' do - expect(subject[2].type).to eq :reblog - expect(subject[2].association(:status)).to be_loaded - expect(subject[2].status.association(:reblog)).to be_loaded + def status_attributes + have_attributes( + type: :status, + target_status: eq(status).and(have_loaded_association(:account)) + ).and(have_loaded_association(:status)) end - it 'preloads follow as nil' do - expect(subject[3].type).to eq :follow - expect(subject[3].target_status).to be_nil + def reblog_attributes + have_attributes( + type: :reblog, + status: have_loaded_association(:reblog), + target_status: eq(reblog.reblog).and(have_loaded_association(:account)) + ).and(have_loaded_association(:status)) end - it 'preloads follow_request as nill' do - expect(subject[4].type).to eq :follow_request - expect(subject[4].target_status).to be_nil + def follow_attributes + have_attributes( + type: :follow, + target_status: be_nil + ) end - it 'preloads favourite' do - expect(subject[5].type).to eq :favourite - expect(subject[5].association(:favourite)).to be_loaded - expect(subject[5].favourite.association(:status)).to be_loaded + def follow_request_attributes + have_attributes( + type: :follow_request, + target_status: be_nil + ) end - it 'preloads poll' do - expect(subject[6].type).to eq :poll - expect(subject[6].association(:poll)).to be_loaded - expect(subject[6].poll.association(:status)).to be_loaded - end - end - - context 'with a cached status' do - it 'replaces mention' do - expect(subject[0].type).to eq :mention - expect(subject[0].target_status.association(:account)).to be_loaded - expect(subject[0].target_status).to eq mention.status + def favourite_attributes + have_attributes( + type: :favourite, + favourite: have_loaded_association(:status), + target_status: eq(favourite.status).and(have_loaded_association(:account)) + ).and(have_loaded_association(:favourite)) end - it 'replaces status' do - expect(subject[1].type).to eq :status - expect(subject[1].target_status.association(:account)).to be_loaded - expect(subject[1].target_status).to eq status - end - - it 'replaces reblog' do - expect(subject[2].type).to eq :reblog - expect(subject[2].target_status.association(:account)).to be_loaded - expect(subject[2].target_status).to eq reblog.reblog - end - - it 'replaces follow' do - expect(subject[3].type).to eq :follow - expect(subject[3].target_status).to be_nil - end - - it 'replaces follow_request' do - expect(subject[4].type).to eq :follow_request - expect(subject[4].target_status).to be_nil - end - - it 'replaces favourite' do - expect(subject[5].type).to eq :favourite - expect(subject[5].target_status.association(:account)).to be_loaded - expect(subject[5].target_status).to eq favourite.status - end - - it 'replaces poll' do - expect(subject[6].type).to eq :poll - expect(subject[6].target_status.association(:account)).to be_loaded - expect(subject[6].target_status).to eq poll.status + def poll_attributes + have_attributes( + type: :poll, + poll: have_loaded_association(:status), + target_status: eq(poll.status).and(have_loaded_association(:account)) + ).and(have_loaded_association(:poll)) end end end end end + +RSpec::Matchers.define :have_loaded_association do |association| + match do |record| + record.association(association).loaded? + end + + failure_message do |record| + "expected #{record} to have loaded association #{association} but it did not." + end +end From b5bdc69f7ba75852e6de651d2cd16e1e8897823f Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 23 Sep 2024 14:53:35 +0200 Subject: [PATCH 20/22] Change mobile breakpoint back to old version and allow main column to shrink (#32033) --- app/javascript/mastodon/features/ui/components/columns_area.jsx | 2 +- app/javascript/styles/mastodon/components.scss | 2 +- app/javascript/styles/mastodon/variables.scss | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/javascript/mastodon/features/ui/components/columns_area.jsx b/app/javascript/mastodon/features/ui/components/columns_area.jsx index ff76d5bcb2..de957a79b6 100644 --- a/app/javascript/mastodon/features/ui/components/columns_area.jsx +++ b/app/javascript/mastodon/features/ui/components/columns_area.jsx @@ -62,7 +62,7 @@ export default class ColumnsArea extends ImmutablePureComponent { }; // Corresponds to (max-width: $no-gap-breakpoint - 1px) in SCSS - mediaQuery = 'matchMedia' in window && window.matchMedia('(max-width: 1206px)'); + mediaQuery = 'matchMedia' in window && window.matchMedia('(max-width: 1174px)'); state = { renderComposePanel: !(this.mediaQuery && this.mediaQuery.matches), diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 53becb3b92..f8febeae18 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -2708,7 +2708,7 @@ a.account__display-name { &__main { box-sizing: border-box; width: 100%; - flex: 0 0 auto; + flex: 0 1 auto; display: flex; flex-direction: column; diff --git a/app/javascript/styles/mastodon/variables.scss b/app/javascript/styles/mastodon/variables.scss index 17442b9748..c477e7a750 100644 --- a/app/javascript/styles/mastodon/variables.scss +++ b/app/javascript/styles/mastodon/variables.scss @@ -87,7 +87,7 @@ $media-modal-media-max-width: 100%; // put margins on top and bottom of image to avoid the screen covered by image. $media-modal-media-max-height: 80%; -$no-gap-breakpoint: 1207px; +$no-gap-breakpoint: 1175px; $mobile-breakpoint: 630px; $font-sans-serif: 'mastodon-font-sans-serif' !default; From aaab6b7adc736a17ea9adc79309ef2efc90146e9 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 23 Sep 2024 15:14:15 +0200 Subject: [PATCH 21/22] Add reblogs and favourites counts to statuses in ActivityPub (#32007) --- .../activitypub/likes_controller.rb | 36 +++++++++++++++++++ .../activitypub/replies_controller.rb | 2 +- .../activitypub/shares_controller.rb | 36 +++++++++++++++++++ app/lib/activitypub/tag_manager.rb | 12 +++++++ .../activitypub/note_serializer.rb | 18 ++++++++++ config/routes.rb | 2 ++ 6 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 app/controllers/activitypub/likes_controller.rb create mode 100644 app/controllers/activitypub/shares_controller.rb diff --git a/app/controllers/activitypub/likes_controller.rb b/app/controllers/activitypub/likes_controller.rb new file mode 100644 index 0000000000..4aa6a4a771 --- /dev/null +++ b/app/controllers/activitypub/likes_controller.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +class ActivityPub::LikesController < ActivityPub::BaseController + include Authorization + + vary_by -> { 'Signature' if authorized_fetch_mode? } + + before_action :require_account_signature!, if: :authorized_fetch_mode? + before_action :set_status + + def index + expires_in 0, public: @status.distributable? && public_fetch_mode? + render json: likes_collection_presenter, serializer: ActivityPub::CollectionSerializer, adapter: ActivityPub::Adapter, content_type: 'application/activity+json' + end + + private + + def pundit_user + signed_request_account + end + + def set_status + @status = @account.statuses.find(params[:status_id]) + authorize @status, :show? + rescue Mastodon::NotPermittedError + not_found + end + + def likes_collection_presenter + ActivityPub::CollectionPresenter.new( + id: account_status_likes_url(@account, @status), + type: :unordered, + size: @status.favourites_count + ) + end +end diff --git a/app/controllers/activitypub/replies_controller.rb b/app/controllers/activitypub/replies_controller.rb index 11aac48c9c..0a19275d38 100644 --- a/app/controllers/activitypub/replies_controller.rb +++ b/app/controllers/activitypub/replies_controller.rb @@ -12,7 +12,7 @@ class ActivityPub::RepliesController < ActivityPub::BaseController before_action :set_replies def index - expires_in 0, public: public_fetch_mode? + expires_in 0, public: @status.distributable? && public_fetch_mode? render json: replies_collection_presenter, serializer: ActivityPub::CollectionSerializer, adapter: ActivityPub::Adapter, content_type: 'application/activity+json', skip_activities: true end diff --git a/app/controllers/activitypub/shares_controller.rb b/app/controllers/activitypub/shares_controller.rb new file mode 100644 index 0000000000..65b4a5b383 --- /dev/null +++ b/app/controllers/activitypub/shares_controller.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +class ActivityPub::SharesController < ActivityPub::BaseController + include Authorization + + vary_by -> { 'Signature' if authorized_fetch_mode? } + + before_action :require_account_signature!, if: :authorized_fetch_mode? + before_action :set_status + + def index + expires_in 0, public: @status.distributable? && public_fetch_mode? + render json: shares_collection_presenter, serializer: ActivityPub::CollectionSerializer, adapter: ActivityPub::Adapter, content_type: 'application/activity+json' + end + + private + + def pundit_user + signed_request_account + end + + def set_status + @status = @account.statuses.find(params[:status_id]) + authorize @status, :show? + rescue Mastodon::NotPermittedError + not_found + end + + def shares_collection_presenter + ActivityPub::CollectionPresenter.new( + id: account_status_shares_url(@account, @status), + type: :unordered, + size: @status.reblogs_count + ) + end +end diff --git a/app/lib/activitypub/tag_manager.rb b/app/lib/activitypub/tag_manager.rb index 8643286317..23b44be372 100644 --- a/app/lib/activitypub/tag_manager.rb +++ b/app/lib/activitypub/tag_manager.rb @@ -74,6 +74,18 @@ class ActivityPub::TagManager account_status_replies_url(target.account, target, page_params) end + def likes_uri_for(target) + raise ArgumentError, 'target must be a local activity' unless %i(note comment activity).include?(target.object_type) && target.local? + + account_status_likes_url(target.account, target) + end + + def shares_uri_for(target) + raise ArgumentError, 'target must be a local activity' unless %i(note comment activity).include?(target.object_type) && target.local? + + account_status_shares_url(target.account, target) + end + def followers_uri_for(target) target.local? ? account_followers_url(target) : target.followers_url.presence end diff --git a/app/serializers/activitypub/note_serializer.rb b/app/serializers/activitypub/note_serializer.rb index 27e058199d..7b29e6d69b 100644 --- a/app/serializers/activitypub/note_serializer.rb +++ b/app/serializers/activitypub/note_serializer.rb @@ -19,6 +19,8 @@ class ActivityPub::NoteSerializer < ActivityPub::Serializer has_many :virtual_tags, key: :tag has_one :replies, serializer: ActivityPub::CollectionSerializer, if: :local? + has_one :likes, serializer: ActivityPub::CollectionSerializer, if: :local? + has_one :shares, serializer: ActivityPub::CollectionSerializer, if: :local? has_many :poll_options, key: :one_of, if: :poll_and_not_multiple? has_many :poll_options, key: :any_of, if: :poll_and_multiple? @@ -64,6 +66,22 @@ class ActivityPub::NoteSerializer < ActivityPub::Serializer ) end + def likes + ActivityPub::CollectionPresenter.new( + id: ActivityPub::TagManager.instance.likes_uri_for(object), + type: :unordered, + size: object.favourites_count + ) + end + + def shares + ActivityPub::CollectionPresenter.new( + id: ActivityPub::TagManager.instance.shares_uri_for(object), + type: :unordered, + size: object.reblogs_count + ) + end + def language? object.language.present? end diff --git a/config/routes.rb b/config/routes.rb index ad607e537b..890102955c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -126,6 +126,8 @@ Rails.application.routes.draw do end resources :replies, only: [:index], module: :activitypub + resources :likes, only: [:index], module: :activitypub + resources :shares, only: [:index], module: :activitypub end resources :followers, only: [:index], controller: :follower_accounts From 5dfdec645313e556413147597138a8008bc35996 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 23 Sep 2024 09:37:32 -0400 Subject: [PATCH 22/22] Convert `settings/applications` controller spec to system/request specs (#32006) --- .../settings/applications/_fields.html.haml | 36 ---- .../settings/applications/_form.html.haml | 36 ++++ app/views/settings/applications/new.html.haml | 6 +- .../settings/applications/show.html.haml | 6 +- .../settings/applications_controller_spec.rb | 178 ------------------ spec/requests/settings/applications_spec.rb | 44 +++++ spec/system/settings/applications_spec.rb | 144 ++++++++++++++ 7 files changed, 230 insertions(+), 220 deletions(-) delete mode 100644 app/views/settings/applications/_fields.html.haml create mode 100644 app/views/settings/applications/_form.html.haml delete mode 100644 spec/controllers/settings/applications_controller_spec.rb create mode 100644 spec/requests/settings/applications_spec.rb create mode 100644 spec/system/settings/applications_spec.rb diff --git a/app/views/settings/applications/_fields.html.haml b/app/views/settings/applications/_fields.html.haml deleted file mode 100644 index d539848952..0000000000 --- a/app/views/settings/applications/_fields.html.haml +++ /dev/null @@ -1,36 +0,0 @@ -.fields-group - = f.input :name, - label: t('activerecord.attributes.doorkeeper/application.name'), - wrapper: :with_label - -.fields-group - = f.input :website, - label: t('activerecord.attributes.doorkeeper/application.website'), - wrapper: :with_label - -.fields-group - = f.input :redirect_uri, - label: t('activerecord.attributes.doorkeeper/application.redirect_uri'), hint: t('doorkeeper.applications.help.redirect_uri'), - required: true, - wrapper: :with_block_label - - %p.hint= t('doorkeeper.applications.help.native_redirect_uri', native_redirect_uri: content_tag(:code, Doorkeeper.configuration.native_redirect_uri)).html_safe - -.field-group - .input.with_block_label - %label= t('activerecord.attributes.doorkeeper/application.scopes') - %span.hint= t('simple_form.hints.defaults.scopes') - - - Doorkeeper.configuration.scopes.group_by { |s| s.split(':').first }.each_value do |value| - = f.input :scopes, - as: :check_boxes, - collection_wrapper_tag: 'ul', - collection: value.sort, - hint: false, - include_blank: false, - item_wrapper_tag: 'li', - label_method: ->(scope) { safe_join([content_tag(:samp, scope, class: class_for_scope(scope)), content_tag(:span, t("doorkeeper.scopes.#{scope}"), class: 'hint')]) }, - label: false, - required: false, - selected: f.object.scopes.all, - wrapper: :with_block_label diff --git a/app/views/settings/applications/_form.html.haml b/app/views/settings/applications/_form.html.haml new file mode 100644 index 0000000000..66ea8bc12b --- /dev/null +++ b/app/views/settings/applications/_form.html.haml @@ -0,0 +1,36 @@ +.fields-group + = form.input :name, + label: t('activerecord.attributes.doorkeeper/application.name'), + wrapper: :with_label + +.fields-group + = form.input :website, + label: t('activerecord.attributes.doorkeeper/application.website'), + wrapper: :with_label + +.fields-group + = form.input :redirect_uri, + label: t('activerecord.attributes.doorkeeper/application.redirect_uri'), hint: t('doorkeeper.applications.help.redirect_uri'), + required: true, + wrapper: :with_block_label + + %p.hint= t('doorkeeper.applications.help.native_redirect_uri', native_redirect_uri: content_tag(:code, Doorkeeper.configuration.native_redirect_uri)).html_safe + +.field-group + .input.with_block_label + %label= t('activerecord.attributes.doorkeeper/application.scopes') + %span.hint= t('simple_form.hints.defaults.scopes') + + - Doorkeeper.configuration.scopes.group_by { |s| s.split(':').first }.each_value do |value| + = form.input :scopes, + as: :check_boxes, + collection_wrapper_tag: 'ul', + collection: value.sort, + hint: false, + include_blank: false, + item_wrapper_tag: 'li', + label_method: ->(scope) { safe_join([content_tag(:samp, scope, class: class_for_scope(scope)), content_tag(:span, t("doorkeeper.scopes.#{scope}"), class: 'hint')]) }, + label: false, + required: false, + selected: form.object.scopes.all, + wrapper: :with_block_label diff --git a/app/views/settings/applications/new.html.haml b/app/views/settings/applications/new.html.haml index aa2281fea1..f6a546e8de 100644 --- a/app/views/settings/applications/new.html.haml +++ b/app/views/settings/applications/new.html.haml @@ -1,8 +1,8 @@ - content_for :page_title do = t('doorkeeper.applications.new.title') -= simple_form_for @application, url: settings_applications_path do |f| - = render 'fields', f: f += simple_form_for @application, url: settings_applications_path do |form| + = render form .actions - = f.button :button, t('doorkeeper.applications.buttons.submit'), type: :submit + = form.button :button, t('doorkeeper.applications.buttons.submit'), type: :submit diff --git a/app/views/settings/applications/show.html.haml b/app/views/settings/applications/show.html.haml index be1d13eae6..19630cf49b 100644 --- a/app/views/settings/applications/show.html.haml +++ b/app/views/settings/applications/show.html.haml @@ -23,8 +23,8 @@ %hr/ -= simple_form_for @application, url: settings_application_path(@application), method: :put do |f| - = render 'fields', f: f += simple_form_for @application, url: settings_application_path(@application), method: :put do |form| + = render form .actions - = f.button :button, t('generic.save_changes'), type: :submit + = form.button :button, t('generic.save_changes'), type: :submit diff --git a/spec/controllers/settings/applications_controller_spec.rb b/spec/controllers/settings/applications_controller_spec.rb deleted file mode 100644 index 721741bacb..0000000000 --- a/spec/controllers/settings/applications_controller_spec.rb +++ /dev/null @@ -1,178 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe Settings::ApplicationsController do - render_views - - let!(:user) { Fabricate(:user) } - let!(:app) { Fabricate(:application, owner: user) } - - before do - sign_in user, scope: :user - end - - describe 'GET #index' do - before do - Fabricate(:application) - get :index - end - - it 'returns http success with private cache control headers', :aggregate_failures do - expect(response).to have_http_status(200) - expect(response.headers['Cache-Control']).to include('private, no-store') - end - end - - describe 'GET #show' do - it 'returns http success' do - get :show, params: { id: app.id } - expect(response).to have_http_status(200) - expect(assigns[:application]).to eql(app) - end - - it 'returns 404 if you dont own app' do - app.update!(owner: nil) - - get :show, params: { id: app.id } - expect(response).to have_http_status 404 - end - end - - describe 'GET #new' do - it 'returns http success' do - get :new - expect(response).to have_http_status(200) - end - end - - describe 'POST #create' do - context 'when success (passed scopes as a String)' do - subject do - post :create, params: { - doorkeeper_application: { - name: 'My New App', - redirect_uri: 'urn:ietf:wg:oauth:2.0:oob', - website: 'http://google.com', - scopes: 'read write follow', - }, - } - end - - it 'creates an entry in the database', :aggregate_failures do - expect { subject }.to change(Doorkeeper::Application, :count) - expect(response).to redirect_to(settings_applications_path) - end - end - - context 'when success (passed scopes as an Array)' do - subject do - post :create, params: { - doorkeeper_application: { - name: 'My New App', - redirect_uri: 'urn:ietf:wg:oauth:2.0:oob', - website: 'http://google.com', - scopes: %w(read write follow), - }, - } - end - - it 'creates an entry in the database', :aggregate_failures do - expect { subject }.to change(Doorkeeper::Application, :count) - expect(response).to redirect_to(settings_applications_path) - end - end - - context 'with failure request' do - before do - post :create, params: { - doorkeeper_application: { - name: '', - redirect_uri: '', - website: '', - scopes: [], - }, - } - end - - it 'returns http success and renders form', :aggregate_failures do - expect(response).to have_http_status(200) - expect(response).to render_template(:new) - end - end - end - - describe 'PATCH #update' do - context 'when success' do - subject do - patch :update, params: { - id: app.id, - doorkeeper_application: opts, - } - response - end - - let(:opts) do - { - website: 'https://foo.bar/', - } - end - - it 'updates existing application' do - subject - - expect(app.reload.website).to eql(opts[:website]) - expect(response).to redirect_to(settings_application_path(app)) - end - end - - context 'with failure request' do - before do - patch :update, params: { - id: app.id, - doorkeeper_application: { - name: '', - redirect_uri: '', - website: '', - scopes: [], - }, - } - end - - it 'returns http success and renders form', :aggregate_failures do - expect(response).to have_http_status(200) - expect(response).to render_template(:show) - end - end - end - - describe 'destroy' do - let(:redis_pipeline_stub) { instance_double(Redis::Namespace, publish: nil) } - let!(:access_token) { Fabricate(:accessible_access_token, application: app) } - - before do - allow(redis).to receive(:pipelined).and_yield(redis_pipeline_stub) - post :destroy, params: { id: app.id } - end - - it 'redirects back to applications page removes the app' do - expect(response).to redirect_to(settings_applications_path) - expect(Doorkeeper::Application.find_by(id: app.id)).to be_nil - end - - it 'sends a session kill payload to the streaming server' do - expect(redis_pipeline_stub).to have_received(:publish).with("timeline:access_token:#{access_token.id}", '{"event":"kill"}') - end - end - - describe 'regenerate' do - let(:token) { user.token_for_app(app) } - - it 'creates new token' do - expect(token).to_not be_nil - post :regenerate, params: { id: app.id } - - expect(user.token_for_app(app)).to_not eql(token) - end - end -end diff --git a/spec/requests/settings/applications_spec.rb b/spec/requests/settings/applications_spec.rb new file mode 100644 index 0000000000..8a5b3de895 --- /dev/null +++ b/spec/requests/settings/applications_spec.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Settings / Exports' do + let(:user) { Fabricate :user } + + before { sign_in user } + + describe 'GET /settings/application/:id' do + context 'when user does not own application' do + let(:application) { Fabricate :application } + + it 'returns http missing' do + get settings_application_path(application) + + expect(response) + .to have_http_status(404) + end + end + end + + describe 'POST /settings/applications' do + subject { post '/settings/applications', params: params } + + let(:params) do + { + doorkeeper_application: { + name: 'My New App', + redirect_uri: 'urn:ietf:wg:oauth:2.0:oob', + website: 'http://google.com', + scopes: 'read write follow', + }, + } + end + + it 'supports passing scope values as string' do + expect { subject } + .to change(Doorkeeper::Application, :count).by(1) + expect(response) + .to redirect_to(settings_applications_path) + end + end +end diff --git a/spec/system/settings/applications_spec.rb b/spec/system/settings/applications_spec.rb new file mode 100644 index 0000000000..ee43da3d5d --- /dev/null +++ b/spec/system/settings/applications_spec.rb @@ -0,0 +1,144 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Settings applications page' do + let!(:application) { Fabricate :application, owner: user } + let(:user) { Fabricate :user } + + before { sign_in user } + + describe 'Viewing the list of applications' do + it 'sees the applications' do + visit settings_applications_path + + expect(page) + .to have_content(application.name) + .and have_private_cache_control + end + end + + describe 'Viewing a single application' do + it 'shows a page with application details' do + visit settings_application_path(application) + + expect(page) + .to have_content(application.name) + end + end + + describe 'Creating a new application' do + it 'accepts form input to make an application' do + visit new_settings_application_path + + fill_in_form + + 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') + end + + it 'does not save with invalid form values' do + visit new_settings_application_path + + expect { submit_form } + .to not_change(Doorkeeper::Application, :count) + expect(page) + .to have_content("can't be blank") + end + + def fill_in_form + fill_in form_app_name_label, + with: 'My new app' + fill_in I18n.t('activerecord.attributes.doorkeeper/application.website'), + with: 'http://google.com' + fill_in I18n.t('activerecord.attributes.doorkeeper/application.redirect_uri'), + with: 'urn:ietf:wg:oauth:2.0:oob' + + check 'read', id: :doorkeeper_application_scopes_read + check 'write', id: :doorkeeper_application_scopes_write + check 'follow', id: :doorkeeper_application_scopes_follow + end + + def submit_form + click_on I18n.t('doorkeeper.applications.buttons.submit') + end + end + + describe 'Updating an application' do + it 'successfully updates with valid values' do + visit settings_application_path(application) + + fill_in form_app_name_label, + with: 'My new app name with a new value' + submit_form + + expect(page) + .to have_content('My new app name with a new value') + end + + it 'does not update with wrong values' do + visit settings_application_path(application) + + fill_in form_app_name_label, + with: '' + submit_form + + expect(page) + .to have_content("can't be blank") + end + + def submit_form + click_on I18n.t('generic.save_changes') + end + end + + describe 'Destroying an application' do + let(:redis_pipeline_stub) { instance_double(Redis::Namespace, publish: nil) } + let!(:access_token) { Fabricate(:accessible_access_token, application: application) } + + before { stub_redis_pipeline } + + it 'destroys the record and tells the broader universe about that' do + visit settings_applications_path + + expect { destroy_application } + .to change(Doorkeeper::Application, :count).by(-1) + expect(page) + .to have_no_content(application.name) + expect(redis_pipeline_stub) + .to have_received(:publish).with("timeline:access_token:#{access_token.id}", '{"event":"kill"}') + end + + def destroy_application + click_on I18n.t('doorkeeper.applications.index.delete') + end + + def stub_redis_pipeline + allow(redis) + .to receive(:pipelined) + .and_yield(redis_pipeline_stub) + end + end + + describe 'Regenerating an app token' do + it 'updates the app token' do + visit settings_application_path(application) + + expect { regenerate_token } + .to(change { user.token_for_app(application) }) + expect(page) + .to have_content(I18n.t('applications.token_regenerated')) + end + + def regenerate_token + click_on I18n.t('applications.regenerate_token') + end + end + + def form_app_name_label + I18n.t('activerecord.attributes.doorkeeper/application.name') + end +end