From 2f73e486b7e107763e92b47b8659e152f363d988 Mon Sep 17 00:00:00 2001 From: Tim Rogers Date: Sat, 4 May 2024 21:24:10 -0500 Subject: [PATCH 01/17] =?UTF-8?q?Switched=20HTMLEntities=20to=20the=20expa?= =?UTF-8?q?nded=20flavor=20which=20supports=20a=20larger=20=E2=80=A6=20(#3?= =?UTF-8?q?0173)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/lib/link_details_extractor.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/lib/link_details_extractor.rb b/app/lib/link_details_extractor.rb index bec7d3a455..07776c3699 100644 --- a/app/lib/link_details_extractor.rb +++ b/app/lib/link_details_extractor.rb @@ -282,6 +282,6 @@ class LinkDetailsExtractor end def html_entities - @html_entities ||= HTMLEntities.new + @html_entities ||= HTMLEntities.new(:expanded) end end From e4841ca82b58f33ec42742b40211f38fef1e7338 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 10:26:12 +0200 Subject: [PATCH 02/17] Update dependency irb to v1.13.1 (#30177) 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 cb36bc2ddc..27d858ed05 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -346,7 +346,7 @@ GEM activesupport (>= 3.0) nokogiri (>= 1.6) io-console (0.7.2) - irb (1.13.0) + irb (1.13.1) rdoc (>= 4.0.0) reline (>= 0.4.2) jmespath (1.6.2) @@ -601,7 +601,7 @@ GEM redlock (1.3.2) redis (>= 3.0.0, < 6.0) regexp_parser (2.9.0) - reline (0.5.4) + reline (0.5.5) io-console (~> 0.5) request_store (1.6.0) rack (>= 1.4) From d544b83f917773749f9664be4bca4eec4078a2b6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 10:26:28 +0200 Subject: [PATCH 03/17] Update formatjs monorepo (#30175) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/yarn.lock b/yarn.lock index e45da3a480..7f0747faa1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2307,23 +2307,23 @@ __metadata: languageName: node linkType: hard -"@formatjs/intl@npm:2.10.1": - version: 2.10.1 - resolution: "@formatjs/intl@npm:2.10.1" +"@formatjs/intl@npm:2.10.2": + version: 2.10.2 + resolution: "@formatjs/intl@npm:2.10.2" dependencies: "@formatjs/ecma402-abstract": "npm:1.18.2" "@formatjs/fast-memoize": "npm:2.2.0" "@formatjs/icu-messageformat-parser": "npm:2.7.6" "@formatjs/intl-displaynames": "npm:6.6.6" "@formatjs/intl-listformat": "npm:7.5.5" - intl-messageformat: "npm:10.5.11" + intl-messageformat: "npm:10.5.12" tslib: "npm:^2.4.0" peerDependencies: typescript: ^4.7 || 5 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/24eee77382d1efd226aee7590228d3ae80f66a8547a65295f8028986b15b6abbfea3e380f4a338ece0e841e1db6f36554ca48124d84c0830382e3a9d395b5d75 + checksum: 10c0/20df407e141055e8c7b2605c06e952b643be7ea01d992862e13fc623ca2db034069744eae2be16655bf7888b3add1bfc2653fd0a08bcfdb67fb9b72a306f7718 languageName: node linkType: hard @@ -9615,15 +9615,15 @@ __metadata: languageName: node linkType: hard -"intl-messageformat@npm:10.5.11, intl-messageformat@npm:^10.3.5": - version: 10.5.11 - resolution: "intl-messageformat@npm:10.5.11" +"intl-messageformat@npm:10.5.12, intl-messageformat@npm:^10.3.5": + version: 10.5.12 + resolution: "intl-messageformat@npm:10.5.12" dependencies: "@formatjs/ecma402-abstract": "npm:1.18.2" "@formatjs/fast-memoize": "npm:2.2.0" "@formatjs/icu-messageformat-parser": "npm:2.7.6" tslib: "npm:^2.4.0" - checksum: 10c0/423f1c879ce2d0e7b9e0b4c1787a81ead7fe4d1734e0366a20fef56b06c09146e7ca3618e2e78b4f8b8f2b59cafe6237ceed21530fe0c16cfb47d915fc80222d + checksum: 10c0/f95734e98a05ef7f51de0c27904d3a994528e3a174963bd1b3a6db9416b5fd84bbd8f7d26d84fc547d51af69ccf46dd3f73a3f4f20a2ccef5c9cd90e946ad82c languageName: node linkType: hard @@ -14346,18 +14346,18 @@ __metadata: linkType: hard "react-intl@npm:^6.4.2": - version: 6.6.5 - resolution: "react-intl@npm:6.6.5" + version: 6.6.6 + resolution: "react-intl@npm:6.6.6" dependencies: "@formatjs/ecma402-abstract": "npm:1.18.2" "@formatjs/icu-messageformat-parser": "npm:2.7.6" - "@formatjs/intl": "npm:2.10.1" + "@formatjs/intl": "npm:2.10.2" "@formatjs/intl-displaynames": "npm:6.6.6" "@formatjs/intl-listformat": "npm:7.5.5" "@types/hoist-non-react-statics": "npm:^3.3.1" "@types/react": "npm:16 || 17 || 18" hoist-non-react-statics: "npm:^3.3.2" - intl-messageformat: "npm:10.5.11" + intl-messageformat: "npm:10.5.12" tslib: "npm:^2.4.0" peerDependencies: react: ^16.6.0 || 17 || 18 @@ -14365,7 +14365,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/31f231701af080bc923fdf25ff22ae7ad56bd7892602879fe6fa3de0c6ab95aab10ff86595372be155e0be45a7130a2cca91dbab73e558359cebc1785711ded2 + checksum: 10c0/04c1d1ca783f2a5e605544290c93e57629500be6811d7c2c3342903bf9f9a720d2e4c9cf3924133bf84e510ee879bf3d870a3ff269f5b197f894a49047bd089d languageName: node linkType: hard From a96b82802380f2220d7e2a059ca3c773c9ce3472 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 10:26:33 +0200 Subject: [PATCH 04/17] Update dependency postcss-preset-env to v9.5.11 (#30171) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 376 +++++++++++++++++++++++++++--------------------------- 1 file changed, 188 insertions(+), 188 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7f0747faa1..ddc789b5fe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1551,13 +1551,13 @@ __metadata: languageName: node linkType: hard -"@csstools/cascade-layer-name-parser@npm:^1.0.9": - version: 1.0.9 - resolution: "@csstools/cascade-layer-name-parser@npm:1.0.9" +"@csstools/cascade-layer-name-parser@npm:^1.0.11": + version: 1.0.11 + resolution: "@csstools/cascade-layer-name-parser@npm:1.0.11" peerDependencies: - "@csstools/css-parser-algorithms": ^2.6.1 - "@csstools/css-tokenizer": ^2.2.4 - checksum: 10c0/f6e28c7cdeca44711288400cf20de9ebc4db71eafa39ca9a6b3e9f5d3295ba636dd986aac9fcb9e6171c84d436712d68ced923504d78d5fda0601c880eb352fe + "@csstools/css-parser-algorithms": ^2.6.3 + "@csstools/css-tokenizer": ^2.3.1 + checksum: 10c0/52ac8369877c8072ff5c111f656bd87e9a2a4b9e44e48fe005c26faeb6cffd83bfe2f463f4f385a2ae5cfe1f82bbf95d26ddaabca18b66c6b657c4fe1520fb43 languageName: node linkType: hard @@ -1568,52 +1568,52 @@ __metadata: languageName: node linkType: hard -"@csstools/css-calc@npm:^1.2.0": - version: 1.2.0 - resolution: "@csstools/css-calc@npm:1.2.0" +"@csstools/css-calc@npm:^1.2.2": + version: 1.2.2 + resolution: "@csstools/css-calc@npm:1.2.2" peerDependencies: - "@csstools/css-parser-algorithms": ^2.6.1 - "@csstools/css-tokenizer": ^2.2.4 - checksum: 10c0/ef12dc08ccdb9903e5cb24d81b469080b94c79123415f62f707196a85c53420b7729be608930314c7a9404f50c832fe5256f647c0567d1c825079cb77f6a8719 + "@csstools/css-parser-algorithms": ^2.6.3 + "@csstools/css-tokenizer": ^2.3.1 + checksum: 10c0/6032b482764a11c1b882d7502928950ab11760044fa7a2c23ecee802002902f6ea8fca045ee2919302af5a5c399e7baa9f68dff001ac6246ac7fef48fb3f6df7 languageName: node linkType: hard -"@csstools/css-color-parser@npm:^2.0.0": - version: 2.0.0 - resolution: "@csstools/css-color-parser@npm:2.0.0" +"@csstools/css-color-parser@npm:^2.0.2": + version: 2.0.2 + resolution: "@csstools/css-color-parser@npm:2.0.2" dependencies: "@csstools/color-helpers": "npm:^4.2.0" - "@csstools/css-calc": "npm:^1.2.0" + "@csstools/css-calc": "npm:^1.2.2" peerDependencies: - "@csstools/css-parser-algorithms": ^2.6.1 - "@csstools/css-tokenizer": ^2.2.4 - checksum: 10c0/295f844a194dec4f51439e8760dbb4a142901b8b60cd9d676a62c15c0e8408eb7bcdcbb40be52cdd5f67d020e655a1c3267a28923cfc4f6bae2b74aa48fce426 + "@csstools/css-parser-algorithms": ^2.6.3 + "@csstools/css-tokenizer": ^2.3.1 + checksum: 10c0/c5ae4ad78745e425dce56da9f1ab053fb4f7963399735df3303305b32123bed0b2237689c2e7e99da2c62387e3226c12ea85e70e275c4027c7507e4ac929bffa languageName: node linkType: hard -"@csstools/css-parser-algorithms@npm:^2.6.1": - version: 2.6.1 - resolution: "@csstools/css-parser-algorithms@npm:2.6.1" +"@csstools/css-parser-algorithms@npm:^2.6.1, @csstools/css-parser-algorithms@npm:^2.6.3": + version: 2.6.3 + resolution: "@csstools/css-parser-algorithms@npm:2.6.3" peerDependencies: - "@csstools/css-tokenizer": ^2.2.4 - checksum: 10c0/2c60377c4ffc96bbeb962cab19c09fccbcc834785928747219ed3bd916a34e52977393935d1d36501403f3f95ff59d358dd741d1dddcdaf9564ab36d73926aa6 + "@csstools/css-tokenizer": ^2.3.1 + checksum: 10c0/6648fda75a1c08096320fb5c04fd13656a0168de13584d2795547fecfb26c2c7d8b3b1fb79ba7aa758714851e98bfbec20d89e28697f999f41f91133eafe4207 languageName: node linkType: hard -"@csstools/css-tokenizer@npm:^2.2.4": - version: 2.2.4 - resolution: "@csstools/css-tokenizer@npm:2.2.4" - checksum: 10c0/23997db5874514f4b951ebd215e1e6cc8baf03adf9a35fc6fd028b84cb52aa2dc053860722108c09859a9b37b455f62b84181fe15539cd37797ea699b9ff85f0 +"@csstools/css-tokenizer@npm:^2.2.4, @csstools/css-tokenizer@npm:^2.3.1": + version: 2.3.1 + resolution: "@csstools/css-tokenizer@npm:2.3.1" + checksum: 10c0/fed6619fb5108e109d4dd10b0e967035a92793bae8fb84544e1342058b6df4e306d9d075623e2201fe88831b1ada797aea3546a8d12229d2d81cd7a5dfee4444 languageName: node linkType: hard -"@csstools/media-query-list-parser@npm:^2.1.9": - version: 2.1.9 - resolution: "@csstools/media-query-list-parser@npm:2.1.9" +"@csstools/media-query-list-parser@npm:^2.1.11, @csstools/media-query-list-parser@npm:^2.1.9": + version: 2.1.11 + resolution: "@csstools/media-query-list-parser@npm:2.1.11" peerDependencies: - "@csstools/css-parser-algorithms": ^2.6.1 - "@csstools/css-tokenizer": ^2.2.4 - checksum: 10c0/602e9b5631928c078e670018df20b959bfb8e42ea11024d5218f1604e5ef94e070a74934a919ccbff3713e506d99096057947fa0c2e4768939f7b22479553534 + "@csstools/css-parser-algorithms": ^2.6.3 + "@csstools/css-tokenizer": ^2.3.1 + checksum: 10c0/9bcd99f7d28ae3cdaba73fbbfef571b0393dd4e841f522cc796fe5161744f17e327ba1713dad3c481626fade1357c55890e3d365177abed50e857b69130a9be5 languageName: node linkType: hard @@ -1629,46 +1629,46 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-color-function@npm:^3.0.14": - version: 3.0.14 - resolution: "@csstools/postcss-color-function@npm:3.0.14" +"@csstools/postcss-color-function@npm:^3.0.16": + version: 3.0.16 + resolution: "@csstools/postcss-color-function@npm:3.0.16" dependencies: - "@csstools/css-color-parser": "npm:^2.0.0" - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/css-color-parser": "npm:^2.0.2" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0" "@csstools/utilities": "npm:^1.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/81592b0eb3ad7022313ecafd028908b167de42acc6765f708c9b10631f86123c2b803aca27378f021c2b3dab8cc47770c0364fe5a3c1e18ec006deaf72e17c38 + checksum: 10c0/41756a4601a3f1086290dab6ca92b54e201bd94637b54b439c66a04fd628a14e2a0bd1452ad294d2981e2f4bb306758fa5f44639b1c4332320435050749aa487 languageName: node linkType: hard -"@csstools/postcss-color-mix-function@npm:^2.0.14": - version: 2.0.14 - resolution: "@csstools/postcss-color-mix-function@npm:2.0.14" +"@csstools/postcss-color-mix-function@npm:^2.0.16": + version: 2.0.16 + resolution: "@csstools/postcss-color-mix-function@npm:2.0.16" dependencies: - "@csstools/css-color-parser": "npm:^2.0.0" - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/css-color-parser": "npm:^2.0.2" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0" "@csstools/utilities": "npm:^1.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/1dd3c63bbbbb9d3094699f169bbb9d26e86a49accb5f9abaa2441b54cb8a6f4cd332409666684a275eca867e3ef0ea3f6eafdf9fb87f2cbfa17c6296fb1ed4d7 + checksum: 10c0/70cd5b291dd615e20e4475517bf0027c90c433241397a66866f89acedb12cb91f45552a162bdd1000636ec56f7d6a099b65e44fe100fd03228fc65f17cfae285 languageName: node linkType: hard -"@csstools/postcss-exponential-functions@npm:^1.0.5": - version: 1.0.5 - resolution: "@csstools/postcss-exponential-functions@npm:1.0.5" +"@csstools/postcss-exponential-functions@npm:^1.0.7": + version: 1.0.7 + resolution: "@csstools/postcss-exponential-functions@npm:1.0.7" dependencies: - "@csstools/css-calc": "npm:^1.2.0" - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/css-calc": "npm:^1.2.2" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" peerDependencies: postcss: ^8.4 - checksum: 10c0/45e18ca9025597da29cbef214cef39fcabef1e169bbb1f5c015de5f677e2927a1c3b8ae18558d815701e8d3e64db1043412a222af35036c92c25011a0e1e027d + checksum: 10c0/2079c81c3437686ef432d88502fa3a13bf8a27b7af105b4c6c2eb8e779f14adc8967a5a3ed03271ab919eeaf999fc4489fe4b37d32a8f61ab3212439517bddcc languageName: node linkType: hard @@ -1684,46 +1684,46 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-gamut-mapping@npm:^1.0.7": - version: 1.0.7 - resolution: "@csstools/postcss-gamut-mapping@npm:1.0.7" +"@csstools/postcss-gamut-mapping@npm:^1.0.9": + version: 1.0.9 + resolution: "@csstools/postcss-gamut-mapping@npm:1.0.9" dependencies: - "@csstools/css-color-parser": "npm:^2.0.0" - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/css-color-parser": "npm:^2.0.2" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" peerDependencies: postcss: ^8.4 - checksum: 10c0/7b349db44fcd697d57172ab63b7a02a56c0b49bce17e48cb72aa0fa246bd2be83fe693c507fd400a9ed83597a711d18ece9319ee3af8000c8fd3a2761e228a11 + checksum: 10c0/412ae1410f3fce240401576441637c2c4e71d1a54153ac9b7a991b3de7519c253d03e10db78b09872eb10b0776d7f960b442779efabc11332b5be6672163c836 languageName: node linkType: hard -"@csstools/postcss-gradients-interpolation-method@npm:^4.0.15": - version: 4.0.15 - resolution: "@csstools/postcss-gradients-interpolation-method@npm:4.0.15" +"@csstools/postcss-gradients-interpolation-method@npm:^4.0.17": + version: 4.0.17 + resolution: "@csstools/postcss-gradients-interpolation-method@npm:4.0.17" dependencies: - "@csstools/css-color-parser": "npm:^2.0.0" - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/css-color-parser": "npm:^2.0.2" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0" "@csstools/utilities": "npm:^1.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/dc0bbf6a4787d5ad3f9fe268dfa9776ecdc25b6cc0a49486bf53238341a339647f1e475240ead3cec1f4af9a237f6518ace015103e90ce8afe4d44539a566e04 + checksum: 10c0/465ac42856ca1a57aa2b9ea41ede31d9e2bcf2fe84345dbc182ae41f463069a0cfd41041b834b5133108c702cd85ecb8636b51b0b88fff8a221628639b59f386 languageName: node linkType: hard -"@csstools/postcss-hwb-function@npm:^3.0.13": - version: 3.0.13 - resolution: "@csstools/postcss-hwb-function@npm:3.0.13" +"@csstools/postcss-hwb-function@npm:^3.0.15": + version: 3.0.15 + resolution: "@csstools/postcss-hwb-function@npm:3.0.15" dependencies: - "@csstools/css-color-parser": "npm:^2.0.0" - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/css-color-parser": "npm:^2.0.2" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0" "@csstools/utilities": "npm:^1.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/684c3d408ceb027e7276c4f25c9a17ef9bd52f0948268cf58b5184097e9b71f5364a41b42bab44691938c6fadffcba0c8e66f809a339a8b282f4a432d32d00ef + checksum: 10c0/fdfaeefbab1008ab1e4a98a2b45cc3db002b2724c404fa0600954b411a68b1fa4028286250bf9898eed10fa80c44e4d6b4e55f1aca073c3dfce8198a0aaedf3f languageName: node linkType: hard @@ -1761,17 +1761,17 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-light-dark-function@npm:^1.0.3": - version: 1.0.3 - resolution: "@csstools/postcss-light-dark-function@npm:1.0.3" +"@csstools/postcss-light-dark-function@npm:^1.0.5": + version: 1.0.5 + resolution: "@csstools/postcss-light-dark-function@npm:1.0.5" dependencies: - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0" "@csstools/utilities": "npm:^1.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/99a1b72aba08a6fa5c7271d42f4459d86f001fe83f533c0ed3d21556f53ee227f65f94cda1feee1aa910890fc42482f15a4dfb3edbc7afdad828ce8897d0c52b + checksum: 10c0/4fbeda98372d0da25d3ed87da09903c9a0a5d0b8c13cc9de82a98acce4a8f8367e5ba33bfc25c2534d10f2b1db9d5b4278df4ebab755e27ef2b03a95e0ebe264 languageName: node linkType: hard @@ -1813,42 +1813,42 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-logical-viewport-units@npm:^2.0.7": - version: 2.0.7 - resolution: "@csstools/postcss-logical-viewport-units@npm:2.0.7" +"@csstools/postcss-logical-viewport-units@npm:^2.0.9": + version: 2.0.9 + resolution: "@csstools/postcss-logical-viewport-units@npm:2.0.9" dependencies: - "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/css-tokenizer": "npm:^2.3.1" "@csstools/utilities": "npm:^1.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/9493f5395ccfe88d0d0740e54f77f0c844afc79b164068fdd907aed75004b4252ba9423dea22194ad98114dd1a2e77c14e307604305d926425251d4ab3013949 + checksum: 10c0/25b01e36b08c571806d09046be63582dbebf97a4612df59be405fa8a92e6eebcd4e768ad7fbe53b0b8739d6ab04d56957964fb04d6a3ea129fc5f72e6d0adf95 languageName: node linkType: hard -"@csstools/postcss-media-minmax@npm:^1.1.4": - version: 1.1.4 - resolution: "@csstools/postcss-media-minmax@npm:1.1.4" +"@csstools/postcss-media-minmax@npm:^1.1.6": + version: 1.1.6 + resolution: "@csstools/postcss-media-minmax@npm:1.1.6" dependencies: - "@csstools/css-calc": "npm:^1.2.0" - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" - "@csstools/media-query-list-parser": "npm:^2.1.9" + "@csstools/css-calc": "npm:^1.2.2" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" + "@csstools/media-query-list-parser": "npm:^2.1.11" peerDependencies: postcss: ^8.4 - checksum: 10c0/620bb85065195c72cf9c0abe9af822f9feeaf919b53bfd47ec09f75b644cb544bd967b09278c48f829348808b34c552718c1aa3eb5342e2dec983e22eb63b0a0 + checksum: 10c0/2cbfb3728a232c655d82f63d5ac7da36876d14e5fee5d62a0738efed40c58f20ef11f600395ade24d5063d750e8e093251dd93cc361f782b5a6c0e0f80288f51 languageName: node linkType: hard -"@csstools/postcss-media-queries-aspect-ratio-number-values@npm:^2.0.7": - version: 2.0.7 - resolution: "@csstools/postcss-media-queries-aspect-ratio-number-values@npm:2.0.7" +"@csstools/postcss-media-queries-aspect-ratio-number-values@npm:^2.0.9": + version: 2.0.9 + resolution: "@csstools/postcss-media-queries-aspect-ratio-number-values@npm:2.0.9" dependencies: - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" - "@csstools/media-query-list-parser": "npm:^2.1.9" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" + "@csstools/media-query-list-parser": "npm:^2.1.11" peerDependencies: postcss: ^8.4 - checksum: 10c0/d5d52a744f9a9466d86a506aab430811778dfa681d3f52f5486ee9b686390919eaae9ad356b84bc782d263227f35913ef68d9a6c3eefcfc38d8ffaccc9b94de0 + checksum: 10c0/d431d2900a7177c938d9dc2d5bdf3c1930758adc214cc72f94b34e6bbd02fd917c200dc81482db515519c97d4f1e766ba3200f3ec9b55081887f2f8111f68e20 languageName: node linkType: hard @@ -1875,18 +1875,18 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-oklab-function@npm:^3.0.14": - version: 3.0.14 - resolution: "@csstools/postcss-oklab-function@npm:3.0.14" +"@csstools/postcss-oklab-function@npm:^3.0.16": + version: 3.0.16 + resolution: "@csstools/postcss-oklab-function@npm:3.0.16" dependencies: - "@csstools/css-color-parser": "npm:^2.0.0" - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/css-color-parser": "npm:^2.0.2" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0" "@csstools/utilities": "npm:^1.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/dfe0b12c2256dded995c64825fac9507be9c747d776cfa09eeefff6dee0efa5eed6a92a1ecba39069a751a7fc3cefa8891c34209a7a3c7ea33d356c95d01a02d + checksum: 10c0/9c67ee5f51116df16ab6baffa1b3c6c7aa93d53b836f421125ae8824075bd3cfaa1a93594466de0ac935c89c4fc8171e80974e1a15bafa23ea864e4cf1f1c1f2 languageName: node linkType: hard @@ -1901,18 +1901,18 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-relative-color-syntax@npm:^2.0.14": - version: 2.0.14 - resolution: "@csstools/postcss-relative-color-syntax@npm:2.0.14" +"@csstools/postcss-relative-color-syntax@npm:^2.0.16": + version: 2.0.16 + resolution: "@csstools/postcss-relative-color-syntax@npm:2.0.16" dependencies: - "@csstools/css-color-parser": "npm:^2.0.0" - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/css-color-parser": "npm:^2.0.2" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0" "@csstools/utilities": "npm:^1.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/64cd5f8054e4403f4e25ed11a5b9d157098af639dbc30ac25b94660b3af489c0bacc49fc439cba1ccceefa4caa5831a913e3d1d889a9796cc6fbf3902c7c31c1 + checksum: 10c0/cdc965706212dcbc03394f55c79a0ad043d1e0174059c4d0d90e4267fe8e6fd9eef7cfed4f5bbc1f8e89c225c1c042ae792e115bba198eb2daae763d65f44679 languageName: node linkType: hard @@ -1927,16 +1927,16 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-stepped-value-functions@npm:^3.0.6": - version: 3.0.6 - resolution: "@csstools/postcss-stepped-value-functions@npm:3.0.6" +"@csstools/postcss-stepped-value-functions@npm:^3.0.8": + version: 3.0.8 + resolution: "@csstools/postcss-stepped-value-functions@npm:3.0.8" dependencies: - "@csstools/css-calc": "npm:^1.2.0" - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/css-calc": "npm:^1.2.2" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" peerDependencies: postcss: ^8.4 - checksum: 10c0/a198aedc4fffe88909c92bfaa36031e6803e739a2578ba4a81c01b9f1525e6a6876d6ffacbbe21701298598dcade8b2ac8423d8ab0fc5d9f4ba86ed60f53cbca + checksum: 10c0/2be66aa769808245137be8ff14308aa17c3a0d75433f6fd6789114966a78c365dbf173d087e7ff5bc80118c75be2ff740baab83ed39fc0671980f6217779956b languageName: node linkType: hard @@ -1952,16 +1952,16 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-trigonometric-functions@npm:^3.0.6": - version: 3.0.6 - resolution: "@csstools/postcss-trigonometric-functions@npm:3.0.6" +"@csstools/postcss-trigonometric-functions@npm:^3.0.8": + version: 3.0.8 + resolution: "@csstools/postcss-trigonometric-functions@npm:3.0.8" dependencies: - "@csstools/css-calc": "npm:^1.2.0" - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/css-calc": "npm:^1.2.2" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" peerDependencies: postcss: ^8.4 - checksum: 10c0/4b484af853d9eb59a4a4b1c063fcf48e2658bb2d6930dfab1d79e676986534687e6440b8cdcd2731ddcb7726537f4ed484208a2b80ef2c9359053762ba35e5e7 + checksum: 10c0/aeed8d1026f4a5cb7afafbadd739af84291d5bfcbcdef2f79b77174f003d0cd0c7f9deb3fe0b9377efab37ce9bb17a2499efd4af8211f5ff9eb01b878b0b62b3 languageName: node linkType: hard @@ -13147,18 +13147,18 @@ __metadata: languageName: node linkType: hard -"postcss-color-functional-notation@npm:^6.0.9": - version: 6.0.9 - resolution: "postcss-color-functional-notation@npm:6.0.9" +"postcss-color-functional-notation@npm:^6.0.11": + version: 6.0.11 + resolution: "postcss-color-functional-notation@npm:6.0.11" dependencies: - "@csstools/css-color-parser": "npm:^2.0.0" - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/css-color-parser": "npm:^2.0.2" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0" "@csstools/utilities": "npm:^1.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/120f7bc23bf46dd1c008b3aa806fb02dd988ae180f9c0c10dca9f5ea3473bf20d7743aafae1441df5b4a3945a63ebb0dae1d4d55f7c8bcd34540529b627c4e3e + checksum: 10c0/7fd75e6881cf62f536f79dfc0ae1b709ea0b8b84833cce1671372711f6019ab4360c6a17089b654b2d376b87e7f9455b94f0d13b45ab0ab767e547b604709b3d languageName: node linkType: hard @@ -13212,46 +13212,46 @@ __metadata: languageName: node linkType: hard -"postcss-custom-media@npm:^10.0.4": - version: 10.0.4 - resolution: "postcss-custom-media@npm:10.0.4" +"postcss-custom-media@npm:^10.0.6": + version: 10.0.6 + resolution: "postcss-custom-media@npm:10.0.6" dependencies: - "@csstools/cascade-layer-name-parser": "npm:^1.0.9" - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" - "@csstools/media-query-list-parser": "npm:^2.1.9" + "@csstools/cascade-layer-name-parser": "npm:^1.0.11" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" + "@csstools/media-query-list-parser": "npm:^2.1.11" peerDependencies: postcss: ^8.4 - checksum: 10c0/2384a40f0e38abe92fbfc707000b264e4bdfe65bd0086ab18c6aab71049198f9dd1431bc4f9bbf68f7cca86b4ff0da352bac4a6ecd04e3671b7ddf6ed6ec3d04 + checksum: 10c0/98a524bc46b780a86094bbe8007f1e577137da5490823631a683d4b3df4a13e40c5e1ab52380275a54f7011abfd98bb597c6293d964c14f9f22ec6cf9d75c550 languageName: node linkType: hard -"postcss-custom-properties@npm:^13.3.8": - version: 13.3.8 - resolution: "postcss-custom-properties@npm:13.3.8" +"postcss-custom-properties@npm:^13.3.10": + version: 13.3.10 + resolution: "postcss-custom-properties@npm:13.3.10" dependencies: - "@csstools/cascade-layer-name-parser": "npm:^1.0.9" - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/cascade-layer-name-parser": "npm:^1.0.11" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" "@csstools/utilities": "npm:^1.0.0" postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/03dd1918f897005b23d09615ebb2c3faf4a01cac67462069c9cfa87c024b2a878f64948b0cf668971bc0ca00cfc349080879b3864deb3808a32d52ff2b473319 + checksum: 10c0/52688fd0aaadccfdf4a3d86d3a2ab988163e8108088c5e33fc9145d261f75b92b8321c044a8161345abda10df5715d674330309dcc0c17f2980db5515f6a76d6 languageName: node linkType: hard -"postcss-custom-selectors@npm:^7.1.8": - version: 7.1.8 - resolution: "postcss-custom-selectors@npm:7.1.8" +"postcss-custom-selectors@npm:^7.1.10": + version: 7.1.10 + resolution: "postcss-custom-selectors@npm:7.1.10" dependencies: - "@csstools/cascade-layer-name-parser": "npm:^1.0.9" - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/cascade-layer-name-parser": "npm:^1.0.11" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" postcss-selector-parser: "npm:^6.0.13" peerDependencies: postcss: ^8.4 - checksum: 10c0/6a7d8248342177a222821531ea3b4008764362e4f7e8f7f2d5767e5880c37ffa39ac5adced2c686baeb9c1f4ed4c283fcc8a8d30ef3b4fc5f63d4ef9a691285e + checksum: 10c0/11311ae6f306420223c6bf926fb1798738f3aa525a267de204de8e8ee9de467bf63b580d9ad5dbb0fff4bd9266770a3fa7e27a24af08a2e0a4115d0727d1d043 languageName: node linkType: hard @@ -13367,18 +13367,18 @@ __metadata: languageName: node linkType: hard -"postcss-lab-function@npm:^6.0.14": - version: 6.0.14 - resolution: "postcss-lab-function@npm:6.0.14" +"postcss-lab-function@npm:^6.0.16": + version: 6.0.16 + resolution: "postcss-lab-function@npm:6.0.16" dependencies: - "@csstools/css-color-parser": "npm:^2.0.0" - "@csstools/css-parser-algorithms": "npm:^2.6.1" - "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/css-color-parser": "npm:^2.0.2" + "@csstools/css-parser-algorithms": "npm:^2.6.3" + "@csstools/css-tokenizer": "npm:^2.3.1" "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0" "@csstools/utilities": "npm:^1.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/0b5d998ddb98ec6243448f1eca216f6e23872431885b152843feef1e844fc5b6b3ebe16ea8940f3d6abea732aa0c51b2ec0e57437e4326e5b2cb2bcb949e6d9f + checksum: 10c0/ba8717cd8a197ec17acaac1b61631cd4403f07bd406b0c92f2e430a55e3f786cd6c338b626c3326e9178a0f3e58ff838ebaded19f480f39197a9cb17349ecdcd languageName: node linkType: hard @@ -13698,37 +13698,37 @@ __metadata: linkType: hard "postcss-preset-env@npm:^9.5.2": - version: 9.5.9 - resolution: "postcss-preset-env@npm:9.5.9" + version: 9.5.11 + resolution: "postcss-preset-env@npm:9.5.11" dependencies: "@csstools/postcss-cascade-layers": "npm:^4.0.4" - "@csstools/postcss-color-function": "npm:^3.0.14" - "@csstools/postcss-color-mix-function": "npm:^2.0.14" - "@csstools/postcss-exponential-functions": "npm:^1.0.5" + "@csstools/postcss-color-function": "npm:^3.0.16" + "@csstools/postcss-color-mix-function": "npm:^2.0.16" + "@csstools/postcss-exponential-functions": "npm:^1.0.7" "@csstools/postcss-font-format-keywords": "npm:^3.0.2" - "@csstools/postcss-gamut-mapping": "npm:^1.0.7" - "@csstools/postcss-gradients-interpolation-method": "npm:^4.0.15" - "@csstools/postcss-hwb-function": "npm:^3.0.13" + "@csstools/postcss-gamut-mapping": "npm:^1.0.9" + "@csstools/postcss-gradients-interpolation-method": "npm:^4.0.17" + "@csstools/postcss-hwb-function": "npm:^3.0.15" "@csstools/postcss-ic-unit": "npm:^3.0.6" "@csstools/postcss-initial": "npm:^1.0.1" "@csstools/postcss-is-pseudo-class": "npm:^4.0.6" - "@csstools/postcss-light-dark-function": "npm:^1.0.3" + "@csstools/postcss-light-dark-function": "npm:^1.0.5" "@csstools/postcss-logical-float-and-clear": "npm:^2.0.1" "@csstools/postcss-logical-overflow": "npm:^1.0.1" "@csstools/postcss-logical-overscroll-behavior": "npm:^1.0.1" "@csstools/postcss-logical-resize": "npm:^2.0.1" - "@csstools/postcss-logical-viewport-units": "npm:^2.0.7" - "@csstools/postcss-media-minmax": "npm:^1.1.4" - "@csstools/postcss-media-queries-aspect-ratio-number-values": "npm:^2.0.7" + "@csstools/postcss-logical-viewport-units": "npm:^2.0.9" + "@csstools/postcss-media-minmax": "npm:^1.1.6" + "@csstools/postcss-media-queries-aspect-ratio-number-values": "npm:^2.0.9" "@csstools/postcss-nested-calc": "npm:^3.0.2" "@csstools/postcss-normalize-display-values": "npm:^3.0.2" - "@csstools/postcss-oklab-function": "npm:^3.0.14" + "@csstools/postcss-oklab-function": "npm:^3.0.16" "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0" - "@csstools/postcss-relative-color-syntax": "npm:^2.0.14" + "@csstools/postcss-relative-color-syntax": "npm:^2.0.16" "@csstools/postcss-scope-pseudo-class": "npm:^3.0.1" - "@csstools/postcss-stepped-value-functions": "npm:^3.0.6" + "@csstools/postcss-stepped-value-functions": "npm:^3.0.8" "@csstools/postcss-text-decoration-shorthand": "npm:^3.0.6" - "@csstools/postcss-trigonometric-functions": "npm:^3.0.6" + "@csstools/postcss-trigonometric-functions": "npm:^3.0.8" "@csstools/postcss-unset-value": "npm:^3.0.1" autoprefixer: "npm:^10.4.19" browserslist: "npm:^4.22.3" @@ -13738,12 +13738,12 @@ __metadata: cssdb: "npm:^8.0.0" postcss-attribute-case-insensitive: "npm:^6.0.3" postcss-clamp: "npm:^4.1.0" - postcss-color-functional-notation: "npm:^6.0.9" + postcss-color-functional-notation: "npm:^6.0.11" postcss-color-hex-alpha: "npm:^9.0.4" postcss-color-rebeccapurple: "npm:^9.0.3" - postcss-custom-media: "npm:^10.0.4" - postcss-custom-properties: "npm:^13.3.8" - postcss-custom-selectors: "npm:^7.1.8" + postcss-custom-media: "npm:^10.0.6" + postcss-custom-properties: "npm:^13.3.10" + postcss-custom-selectors: "npm:^7.1.10" postcss-dir-pseudo-class: "npm:^8.0.1" postcss-double-position-gradients: "npm:^5.0.6" postcss-focus-visible: "npm:^9.0.1" @@ -13751,7 +13751,7 @@ __metadata: postcss-font-variant: "npm:^5.0.0" postcss-gap-properties: "npm:^5.0.1" postcss-image-set-function: "npm:^6.0.3" - postcss-lab-function: "npm:^6.0.14" + postcss-lab-function: "npm:^6.0.16" postcss-logical: "npm:^7.0.1" postcss-nesting: "npm:^12.1.2" postcss-opacity-percentage: "npm:^2.0.0" @@ -13763,7 +13763,7 @@ __metadata: postcss-selector-not: "npm:^7.0.2" peerDependencies: postcss: ^8.4 - checksum: 10c0/dbe020e3fc08f0b71a3ee9d3c8a66a93bb6ba62281ac89fa59c82b8632ca58d6a911ddd9c65f15355c36aad63477633fc101cc0f3ce494dbc757193ba42eb61c + checksum: 10c0/9460f4ce18cf1af7582d0a1f366151f59b6e9b0c7cbb62e59081dc91da14760a749f59fa52bc190e5e2c8fd531952c647719d19c4740aa1a0ebcb93f075ad931 languageName: node linkType: hard From 9be2c02e52b9c3534fa1bd16ade00a135034d2cb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 10:36:29 +0200 Subject: [PATCH 05/17] New Crowdin Translations (automated) (#30169) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/ar.json | 39 +- app/javascript/mastodon/locales/de.json | 4 +- app/javascript/mastodon/locales/ja.json | 9 + app/javascript/mastodon/locales/sl.json | 13 + app/javascript/mastodon/locales/sq.json | 14 + config/locales/ar.yml | 1 + config/locales/devise.ia.yml | 3 + config/locales/doorkeeper.ia.yml | 1 + config/locales/doorkeeper.sq.yml | 1 + config/locales/ia.yml | 584 +++++++++++++++++++++++- config/locales/ja.yml | 1 + config/locales/lt.yml | 20 +- config/locales/pt-PT.yml | 1 + config/locales/simple_form.ar.yml | 1 + config/locales/simple_form.he.yml | 3 + config/locales/simple_form.ia.yml | 113 +++++ config/locales/simple_form.ja.yml | 4 + config/locales/simple_form.pt-PT.yml | 4 + config/locales/simple_form.sq.yml | 4 + config/locales/simple_form.th.yml | 2 + config/locales/sk.yml | 1 + config/locales/sl.yml | 1 + config/locales/sq.yml | 1 + config/locales/th.yml | 1 + 24 files changed, 807 insertions(+), 19 deletions(-) diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index dd13f10aa3..68e32dd2aa 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -5,7 +5,7 @@ "about.domain_blocks.no_reason_available": "السبب غير متوفر", "about.domain_blocks.preamble": "يسمح لك ماستدون عموماً بعرض المحتوى من المستخدمين من أي خادم آخر في الفدرالية والتفاعل معهم. وهذه هي الاستثناءات التي وضعت على هذا الخادم بالذات.", "about.domain_blocks.silenced.explanation": "عموماً، لن ترى ملفات التعريف والمحتوى من هذا الخادم، إلا إذا كنت تبحث عنه بشكل صريح أو تختار أن تتابعه.", - "about.domain_blocks.silenced.title": "تم كتمه", + "about.domain_blocks.silenced.title": "محدود", "about.domain_blocks.suspended.explanation": "لن يتم معالجة أي بيانات من هذا الخادم أو تخزينها أو تبادلها، مما يجعل أي تفاعل أو اتصال مع المستخدمين من هذا الخادم مستحيلا.", "about.domain_blocks.suspended.title": "مُعلّق", "about.not_available": "لم يتم توفير هذه المعلومات على هذا الخادم.", @@ -21,7 +21,7 @@ "account.blocked": "محظور", "account.browse_more_on_origin_server": "تصفح المزيد في الملف الشخصي الأصلي", "account.cancel_follow_request": "إلغاء طلب المتابعة", - "account.copy": "نسخ الرابط إلى الملف الشخصي", + "account.copy": "نسخ الرابط إلى الحساب", "account.direct": "إشارة خاصة لـ @{name}", "account.disable_notifications": "توقف عن إشعاري عندما ينشر @{name}", "account.domain_blocked": "اسم النِّطاق محظور", @@ -32,7 +32,7 @@ "account.featured_tags.last_status_never": "لا توجد رسائل", "account.featured_tags.title": "وسوم {name} المميَّزة", "account.follow": "متابعة", - "account.follow_back": "تابعه بدورك", + "account.follow_back": "رد المتابعة", "account.followers": "مُتابِعون", "account.followers.empty": "لا أحدَ يُتابع هذا المُستخدم إلى حد الآن.", "account.followers_counter": "{count, plural, zero{لا مُتابع} one {مُتابعٌ واحِد} two {مُتابعانِ اِثنان} few {{counter} مُتابِعين} many {{counter} مُتابِعًا} other {{counter} مُتابع}}", @@ -89,12 +89,12 @@ "announcement.announcement": "إعلان", "attachments_list.unprocessed": "(غير معالَج)", "audio.hide": "إخفاء المقطع الصوتي", - "block_modal.remote_users_caveat": "Do t’i kërkojmë shërbyesit {domain} të respektojë vendimin tuaj. Por, pajtimi s’është i garantuar, ngaqë disa shërbyes mund t’i trajtojnë ndryshe bllokimet. Psotimet publike mundet të jenë ende të dukshme për përdorues pa bërë hyrje në llogari.", - "block_modal.show_less": "اعرض أقلّ", + "block_modal.remote_users_caveat": "سوف نطلب من الخادم {domain} أن يحترم قرارك، لكن الالتزام غير مضمون لأن بعض الخواديم قد تتعامل مع نصوص الكتل بشكل مختلف. قد تظل المنشورات العامة مرئية للمستخدمين غير المسجلين الدخول.", + "block_modal.show_less": "أظهر الأقل", "block_modal.show_more": "أظهر المزيد", "block_modal.they_cant_mention": "لن يستطيع ذِكرك أو متابعتك.", "block_modal.they_cant_see_posts": "لن يستطيع رؤية منشوراتك ولن ترى منشوراته.", - "block_modal.they_will_know": "يمكنه أن يرى أنه قد تم حجبه.", + "block_modal.they_will_know": "يمكنه أن يرى أنه قد تم حظره.", "block_modal.title": "أتريد حظر المستخدم؟", "block_modal.you_wont_see_mentions": "لن تر المنشورات التي يُشار فيهم إليه.", "boost_modal.combo": "يُمكنك الضّغط على {combo} لتخطي هذا في المرة المُقبلة", @@ -220,7 +220,7 @@ "domain_pill.activitypub_lets_connect": "يتيح لك التواصل والتفاعل مع الناس ليس فقط على ماستدون، ولكن عبر تطبيقات اجتماعية مختلفة أيضا.", "domain_pill.activitypub_like_language": "إنّ ActivityPub مثل لغة ماستدون التي يتحدث بها مع شبكات اجتماعية أخرى.", "domain_pill.server": "الخادِم", - "domain_pill.their_handle": "مُعرِّفُه:", + "domain_pill.their_handle": "مُعرفه:", "domain_pill.their_server": "بيتهم الرقمي، حيث تُستضاف كافة منشوراتهم.", "domain_pill.their_username": "مُعرّفُهم الفريد على الخادم. من الممكن العثور على مستخدمين بنفس اسم المستخدم على خوادم مختلفة.", "domain_pill.username": "اسم المستخدم", @@ -308,6 +308,8 @@ "follow_suggestions.hints.similar_to_recently_followed": "هذا الملف الشخصي مشابه للملفات الشخصية التي تابعتها مؤخرا.", "follow_suggestions.personalized_suggestion": "توصية مخصصة", "follow_suggestions.popular_suggestion": "توصية رائجة", + "follow_suggestions.popular_suggestion_longer": "رائج على {domain}", + "follow_suggestions.similar_to_recently_followed_longer": "مشابهة لمواصفات الملفات الشخصية التي تابعتَها حديثًا", "follow_suggestions.view_all": "عرض الكل", "follow_suggestions.who_to_follow": "حسابات للمُتابَعة", "followed_tags": "الوسوم المتابَعة", @@ -360,8 +362,8 @@ "interaction_modal.title.reply": "الرد على منشور {name}", "intervals.full.days": "{number, plural, one {# يوم} other {# أيام}}", "intervals.full.hours": "{number, plural, one {# ساعة} other {# ساعات}}", - "intervals.full.minutes": "{number, plural, one {# دقيقة} other {# دقائق}}", - "keyboard_shortcuts.back": "للعودة", + "intervals.full.minutes": "{number, plural, one {دقيقة واحدة}two {دقيقتان} other {# دقائق}}", + "keyboard_shortcuts.back": "للرجوع", "keyboard_shortcuts.blocked": "لفتح قائمة المستخدمين المحظورين", "keyboard_shortcuts.boost": "لإعادة النشر", "keyboard_shortcuts.column": "للتركيز على منشور على أحد الأعمدة", @@ -421,7 +423,9 @@ "loading_indicator.label": "جاري التحميل…", "media_gallery.toggle_visible": "{number, plural, zero {} one {اخف الصورة} two {اخف الصورتين} few {اخف الصور} many {اخف الصور} other {اخف الصور}}", "moved_to_account_banner.text": "حسابك {disabledAccount} معطل حاليًا لأنك انتقلت إلى {movedToAccount}.", + "mute_modal.hide_from_notifications": "إخفاء من قائمة الإشعارات", "mute_modal.hide_options": "إخفاء الخيارات", + "mute_modal.indefinite": "إلى أن أفسخ كتمها", "mute_modal.show_options": "إظهار الخيارات", "mute_modal.they_can_mention_and_follow": "سيكون بإمكانه الإشارة إليك ومتابعتك، لكنك لن تره.", "mute_modal.they_wont_know": "لن يَعرف أنه قد تم كتمه.", @@ -460,10 +464,20 @@ "notification.follow": "يتابعك {name}", "notification.follow_request": "لقد طلب {name} متابعتك", "notification.mention": "{name} ذكرك", + "notification.moderation-warning.learn_more": "اعرف المزيد", + "notification.moderation_warning.action_disable": "تم تعطيل حسابك.", + "notification.moderation_warning.action_mark_statuses_as_sensitive": "بعض من منشوراتك تم تصنيفها على أنها حساسة.", + "notification.moderation_warning.action_none": "لقد تلقى حسابك تحذيرا بالإشراف.", + "notification.moderation_warning.action_sensitive": "سيتم وضع علامة على منشوراتك على أنها حساسة من الآن فصاعدا.", + "notification.moderation_warning.action_suspend": "لقد تم تعليق حسابك.", "notification.own_poll": "انتهى استطلاعك للرأي", "notification.poll": "لقد انتهى استطلاع رأي شاركتَ فيه", "notification.reblog": "قام {name} بمشاركة منشورك", + "notification.relationships_severance_event": "فقدت الاتصالات مع {name}", + "notification.relationships_severance_event.account_suspension": "قام مشرف من {from} بتعليق {target}، مما يعني أنك لم يعد بإمكانك تلقي التحديثات منهم أو التفاعل معهم.", + "notification.relationships_severance_event.domain_block": "قام مشرف من {from} بحظر {target}، بما في ذلك {followersCount} من متابعينك و {followingCount, plural, one {# حساب} other {# حسابات}} تتابعها.", "notification.relationships_severance_event.learn_more": "اعرف المزيد", + "notification.relationships_severance_event.user_domain_block": "لقد قمت بحظر {target}، مما أدى إلى إزالة {followersCount} من متابعينك و {followingCount, plural, one {# حساب} other {# حسابات}} تتابعها.", "notification.status": "{name} نشر للتو", "notification.update": "عدّلَ {name} منشورًا", "notification_requests.accept": "موافقة", @@ -503,10 +517,15 @@ "notifications.permission_denied": "تنبيهات سطح المكتب غير متوفرة بسبب رفض أذونات المتصفح مسبقاً", "notifications.permission_denied_alert": "لا يمكن تفعيل إشعارات سطح المكتب، لأن إذن المتصفح قد تم رفضه سابقاً", "notifications.permission_required": "إشعارات سطح المكتب غير متوفرة لأنه لم يتم منح الإذن المطلوب.", + "notifications.policy.filter_new_accounts.hint": "تم إنشاؤها منذ {days, plural, zero {}one {يوم واحد} two {يومان} few {# أيام} many {# أيام} other {# أيام}}", "notifications.policy.filter_new_accounts_title": "حسابات جديدة", + "notifications.policy.filter_not_followers_hint": "بما في ذلك الأشخاص الذين يتابعونك أقل من {days, plural, zero {}one {يوم واحد} two {يومان} few {# أيام} many {# أيام} other {# أيام}}", "notifications.policy.filter_not_followers_title": "أشخاص لا يتابعونك", "notifications.policy.filter_not_following_hint": "حتى توافق عليهم يدويا", "notifications.policy.filter_not_following_title": "أشخاص لا تتابعهم", + "notifications.policy.filter_private_mentions_hint": "تمت تصفيته إلا إذا أن يكون ردًا على ذكرك أو إذا كنت تتابع الحساب", + "notifications.policy.filter_private_mentions_title": "إشارات خاصة غير مرغوب فيها", + "notifications.policy.title": "تصفية الإشعارات من…", "notifications_permission_banner.enable": "تفعيل إشعارات سطح المكتب", "notifications_permission_banner.how_to_control": "لتلقي الإشعارات عندما لا يكون ماستدون مفتوح، قم بتفعيل إشعارات سطح المكتب، يمكنك التحكم بدقة في أنواع التفاعلات التي تولد إشعارات سطح المكتب من خلال زر الـ{icon} أعلاه بمجرد تفعيلها.", "notifications_permission_banner.title": "لا تفوت شيئاً أبداً", @@ -687,6 +706,7 @@ "status.edited_x_times": "عُدّل {count, plural, zero {} one {مرةً واحدة} two {مرّتان} few {{count} مرات} many {{count} مرة} other {{count} مرة}}", "status.embed": "إدماج", "status.favourite": "فضّل", + "status.favourites": "{count, plural, zero {}one {مفضلة واحدة} two {مفضلتان} few {# مفضلات} many {# مفضلات} other {# مفضلات}}", "status.filter": "تصفية هذه الرسالة", "status.filtered": "مُصفّى", "status.hide": "إخفاء المنشور", @@ -707,6 +727,7 @@ "status.reblog": "إعادة النشر", "status.reblog_private": "إعادة النشر إلى الجمهور الأصلي", "status.reblogged_by": "شارَكَه {name}", + "status.reblogs": "{count, plural, one {تعزيز واحد} two {تعزيزتان} few {# تعزيزات} many {# تعزيزات} other {# تعزيزات}}", "status.reblogs.empty": "لم يقم أي أحد بمشاركة هذا المنشور بعد. عندما يقوم أحدهم بذلك سوف يظهر هنا.", "status.redraft": "إزالة وإعادة الصياغة", "status.remove_bookmark": "احذفه مِن الفواصل المرجعية", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 59d3d0965a..5776641079 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -331,7 +331,7 @@ "footer.source_code": "Quellcode anzeigen", "footer.status": "Status", "generic.saved": "Gespeichert", - "getting_started.heading": "Auf geht’s!", + "getting_started.heading": "Auf gehts!", "hashtag.column_header.tag_mode.all": "und {additional}", "hashtag.column_header.tag_mode.any": "oder {additional}", "hashtag.column_header.tag_mode.none": "ohne {additional}", @@ -400,7 +400,7 @@ "keyboard_shortcuts.requests": "Liste der Follower-Anfragen aufrufen", "keyboard_shortcuts.search": "Suchleiste fokussieren", "keyboard_shortcuts.spoilers": "Feld für Inhaltswarnung anzeigen/ausblenden", - "keyboard_shortcuts.start": "„Auf geht’s!“ öffnen", + "keyboard_shortcuts.start": "„Auf gehts!“ öffnen", "keyboard_shortcuts.toggle_hidden": "Beitragstext hinter der Inhaltswarnung anzeigen/ausblenden", "keyboard_shortcuts.toggle_sensitivity": "Medien anzeigen/ausblenden", "keyboard_shortcuts.toot": "Neuen Beitrag erstellen", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index c11e4a2afd..6e590678fb 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -473,6 +473,15 @@ "notification.follow": "{name}さんにフォローされました", "notification.follow_request": "{name}さんがあなたにフォローリクエストしました", "notification.mention": "{name}さんがあなたに返信しました", + "notification.moderation-warning.learn_more": "さらに詳しく", + "notification.moderation_warning": "あなたは管理者からの警告を受けています。", + "notification.moderation_warning.action_delete_statuses": "あなたによるいくつかの投稿が削除されました。", + "notification.moderation_warning.action_disable": "あなたのアカウントは無効になりました。", + "notification.moderation_warning.action_mark_statuses_as_sensitive": "あなたの投稿のいくつかは閲覧注意として判定されています。", + "notification.moderation_warning.action_none": "あなたのアカウントは管理者からの警告を受けています。", + "notification.moderation_warning.action_sensitive": "あなたの投稿はこれから閲覧注意としてマークされます。", + "notification.moderation_warning.action_silence": "あなたのアカウントは制限されています。", + "notification.moderation_warning.action_suspend": "あなたのアカウントは停止されました。", "notification.own_poll": "アンケートが終了しました", "notification.poll": "アンケートが終了しました", "notification.reblog": "{name}さんがあなたの投稿をブーストしました", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index ed4fa8dfaf..7806abc6b5 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -308,6 +308,8 @@ "follow_requests.unlocked_explanation": "Čeprav vaš račun ni zaklenjen, zaposleni pri {domain} menijo, da bi morda želeli pregledati zahteve za sledenje teh računov ročno.", "follow_suggestions.curated_suggestion": "Izbor osebja", "follow_suggestions.dismiss": "Ne pokaži več", + "follow_suggestions.featured_longer": "Osebno izbrala ekipa {domain}", + "follow_suggestions.friends_of_friends_longer": "Priljubljeno med osebami, ki jim sledite", "follow_suggestions.hints.featured": "Ta profil so izbrali skrbniki strežnika {domain}.", "follow_suggestions.hints.friends_of_friends": "Ta profil je priljubljen med osebami, ki jim sledite.", "follow_suggestions.hints.most_followed": "Ta profil na strežniku {domain} je en izmed najbolj sledenih.", @@ -315,6 +317,8 @@ "follow_suggestions.hints.similar_to_recently_followed": "Ta profil je podoben profilom, ki ste jim nedavno začeli slediti.", "follow_suggestions.personalized_suggestion": "Osebno prilagojen predlog", "follow_suggestions.popular_suggestion": "Priljubljen predlog", + "follow_suggestions.popular_suggestion_longer": "Priljubljeno na {domain}", + "follow_suggestions.similar_to_recently_followed_longer": "Podobno profilom, ki ste jim pred kratkim sledili", "follow_suggestions.view_all": "Pokaži vse", "follow_suggestions.who_to_follow": "Komu slediti", "followed_tags": "Sledeni ključniki", @@ -469,6 +473,15 @@ "notification.follow": "{name} vam sledi", "notification.follow_request": "{name} vam želi slediti", "notification.mention": "{name} vas je omenil/a", + "notification.moderation-warning.learn_more": "Več o tem", + "notification.moderation_warning": "Prejeli ste opozorilo moderatorjev", + "notification.moderation_warning.action_delete_statuses": "Nekatere vaše objave so odstranjene.", + "notification.moderation_warning.action_disable": "Vaš račun je bil onemogočen.", + "notification.moderation_warning.action_mark_statuses_as_sensitive": "Nekatere vaše objave so bile označene kot občutljive.", + "notification.moderation_warning.action_none": "Vaš račun je prejel opozorilo moderatorjev.", + "notification.moderation_warning.action_sensitive": "Vaše objave bodo odslej označene kot občutljive.", + "notification.moderation_warning.action_silence": "Vaš račun je bil omejen.", + "notification.moderation_warning.action_suspend": "Vaš račun je bil suspendiran.", "notification.own_poll": "Vaša anketa je zaključena", "notification.poll": "Anketa, v kateri ste sodelovali, je zaključena", "notification.reblog": "{name} je izpostavila/a vašo objavo", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index da35b3d43b..a25eab9cbf 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -297,6 +297,7 @@ "filter_modal.select_filter.subtitle": "Përdorni një kategori ekzistuese, ose krijoni një të re", "filter_modal.select_filter.title": "Filtroje këtë postim", "filter_modal.title.status": "Filtroni një postim", + "filtered_notifications_banner.mentions": "{count, plural, one {përmendje} other {përmendje}}", "filtered_notifications_banner.pending_requests": "Njoftime prej {count, plural, =0 {askujt} one {një personi} other {# vetësh}} që mund të njihni", "filtered_notifications_banner.title": "Njoftime të filtruar", "firehose.all": "Krejt", @@ -307,6 +308,8 @@ "follow_requests.unlocked_explanation": "Edhe pse llogaria juaj s’është e kyçur, ekipi i {domain} mendoi se mund të donit të shqyrtonit dorazi kërkesa ndjekjeje prej këtyre llogarive.", "follow_suggestions.curated_suggestion": "Zgjedhur nga ekipi", "follow_suggestions.dismiss": "Mos shfaq më", + "follow_suggestions.featured_longer": "Zgjedhur enkas nga ekipi {domain}", + "follow_suggestions.friends_of_friends_longer": "Popullore mes personash që ndiqni", "follow_suggestions.hints.featured": "Ky profil është zgjedhur nga ekipi {domain}.", "follow_suggestions.hints.friends_of_friends": "Ky profil është popullor mes personave që ndiqni.", "follow_suggestions.hints.most_followed": "Ky profil është një nga më të ndjekur në {domain}.", @@ -314,6 +317,8 @@ "follow_suggestions.hints.similar_to_recently_followed": "Ky profil është i ngjashëm me profile që keni ndjekur tani afër.", "follow_suggestions.personalized_suggestion": "Sugjerim i personalizuar", "follow_suggestions.popular_suggestion": "Sugjerim popullor", + "follow_suggestions.popular_suggestion_longer": "Popullore në {domain}", + "follow_suggestions.similar_to_recently_followed_longer": "I ngjashëm me profile që keni zënë të ndiqni së fundi", "follow_suggestions.view_all": "Shihni krejt", "follow_suggestions.who_to_follow": "Cilët të ndiqen", "followed_tags": "Hashtag-ë të ndjekur", @@ -468,6 +473,15 @@ "notification.follow": "{name} zuri t’ju ndjekë", "notification.follow_request": "{name} ka kërkuar t’ju ndjekë", "notification.mention": "{name} ju ka përmendur", + "notification.moderation-warning.learn_more": "Mësoni më tepër", + "notification.moderation_warning": "Keni marrë një sinjalizim moderimi", + "notification.moderation_warning.action_delete_statuses": "Disa nga postimet tuaja janë hequr.", + "notification.moderation_warning.action_disable": "Llogaria juaj është çaktivizuar.", + "notification.moderation_warning.action_mark_statuses_as_sensitive": "Disa prej postimeve tuaja u është vënë shenjë si me spec.", + "notification.moderation_warning.action_none": "Llogaria juaj ka marrë një sinjalizim moderimi.", + "notification.moderation_warning.action_sensitive": "Postimeve tuaja do t’u vihet shenjë si me spec, nga tani e tutje.", + "notification.moderation_warning.action_silence": "Llogaria juaj është kufizuar.", + "notification.moderation_warning.action_suspend": "Llogaria juaj është pezulluar.", "notification.own_poll": "Pyetësori juaj ka përfunduar", "notification.poll": "Ka përfunduar një pyetësor ku keni votuar", "notification.reblog": "{name} përforcoi mesazhin tuaj", diff --git a/config/locales/ar.yml b/config/locales/ar.yml index 93a0720b8a..02ba56d0b2 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -804,6 +804,7 @@ ar: desc_html: ويعتمد هذا على نصوص برمجية خارجية من hCaptcha، والتي قد تكون مصدر قلق يتعلق بالأمان والخصوصية. بالإضافة إلى ذلك، قد يؤدي ذلك إلى جعل عملية التسجيل أقل سهولة بالنسبة لبعض الأشخاص (وخاصة المعاقين). لهذه الأسباب، يرجى النظر في تدابير بديلة مثل التسجيل على أساس الموافقة أو على أساس الدعوة. title: مطالبة المستخدمين الجدد بحل اختبار CAPTCHA لتأكيد حساباتهم content_retention: + danger_zone: منطقة خطرة preamble: التحكم في كيفية تخزين المحتوى الذي ينشئه المستخدم في ماستدون. title: الاحتفاظ بالمحتوى default_noindex: diff --git a/config/locales/devise.ia.yml b/config/locales/devise.ia.yml index 6c89f4c6d4..5687507818 100644 --- a/config/locales/devise.ia.yml +++ b/config/locales/devise.ia.yml @@ -23,8 +23,11 @@ ia: action_with_app: Confirmar e retornar a %{app} title: Verificar adresse de e-mail email_changed: + explanation: 'Le adresse de e-mail pro tu conto essera cambiate a:' + subject: 'Mastodon: E-mail cambiate' title: Nove adresse de e-mail password_change: + explanation: Le contrasigno de tu conto ha essite cambiate. subject: 'Mastodon: Contrasigno cambiate' title: Contrasigno cambiate reconfirmation_instructions: diff --git a/config/locales/doorkeeper.ia.yml b/config/locales/doorkeeper.ia.yml index fd7d7a0836..86bd1ad985 100644 --- a/config/locales/doorkeeper.ia.yml +++ b/config/locales/doorkeeper.ia.yml @@ -17,6 +17,7 @@ ia: authorize: Autorisar cancel: Cancellar edit: Modificar + submit: Submitter confirmations: destroy: Es tu secur? edit: diff --git a/config/locales/doorkeeper.sq.yml b/config/locales/doorkeeper.sq.yml index 308a5429a6..793819c597 100644 --- a/config/locales/doorkeeper.sq.yml +++ b/config/locales/doorkeeper.sq.yml @@ -174,6 +174,7 @@ sq: read:filters: të shohë filtrat tuaj read:follows: të shohë ndjekësit tuaj read:lists: të shohë listat tuaja + read:me: të shohë vetëm hollësi elementare të llogarisë tuaj read:mutes: të shohë ç’keni heshtuar read:notifications: të shohë njoftimet tuaja read:reports: të shohë raportimet tuaja diff --git a/config/locales/ia.yml b/config/locales/ia.yml index 59dd2dbc0f..85d7c0ed85 100644 --- a/config/locales/ia.yml +++ b/config/locales/ia.yml @@ -106,6 +106,9 @@ ia: pending: Attende revision perform_full_suspension: Suspender previous_strikes: Previe admonitiones + previous_strikes_description_html: + one: Iste conto ha un admonition. + other: Iste conto ha %{count} admonitiones. promote: Promover protocol: Protocollo public: Public @@ -159,10 +162,10 @@ ia: undo_suspension: Disfacer le suspension unsilenced_msg: Le limite del conto de %{username} ha essite cancellate unsubscribe: Desubscriber - unsuspended_msg: Annullate suspension del conto %{username} con successo + unsuspended_msg: Le suspension del conto %{username} ha essite annullate username: Nomine de usator view_domain: Vider summario de dominio - warn: Avisar + warn: Advertir web: Web whitelisted: Permittite pro federation action_logs: @@ -244,37 +247,102 @@ ia: create_user_role_html: "%{name} creava rolo de %{target}" demote_user_html: "%{name} degradava usator %{target}" destroy_announcement_html: "%{name} deleva annuncio %{target}" + destroy_canonical_email_block_html: "%{name} disblocava email con le hash %{target}" destroy_custom_emoji_html: "%{name} deleva emoji %{target}" + destroy_domain_allow_html: "%{name} impediva le federation con dominio %{target}" destroy_domain_block_html: "%{name} disblocava dominio %{target}" + destroy_email_domain_block_html: "%{name} disblocava le dominio email %{target}" + destroy_instance_html: "%{name} purgava le dominio %{target}" + destroy_ip_block_html: "%{name} deleva le regula pro IP %{target}" + destroy_status_html: "%{name} removeva le message de %{target}" + destroy_unavailable_domain_html: "%{name} resumeva le consignation al dominio %{target}" destroy_user_role_html: "%{name} deleva le rolo de %{target}" + disable_2fa_user_html: "%{name} disactivava le authentication a duo factores pro le usator %{target}" + disable_custom_emoji_html: "%{name} disactivava le emoticone %{target}" + disable_sign_in_token_auth_user_html: "%{name} disactivava authentication per testimonio via email pro %{target}" + disable_user_html: "%{name} disactivava le accesso pro le usator %{target}" + enable_custom_emoji_html: "%{name} activava le emoticone %{target}" + enable_sign_in_token_auth_user_html: "%{name} activava le authentication per testimonio via email pro %{target}" + enable_user_html: "%{name} activava le accesso pro le usator %{target}" + memorialize_account_html: "%{name} mutava le conto de %{target} in un pagina commemorative" + promote_user_html: "%{name} promoveva le usator %{target}" + reject_appeal_html: "%{name} refusava le appello del decision de moderation de %{target}" + reject_user_html: "%{name} refusava le inscription de %{target}" + remove_avatar_user_html: "%{name} removeva le avatar de %{target}" + reopen_report_html: "%{name} reaperiva le reporto %{target}" + resend_user_html: "%{name} reinviava le email de confirmation pro %{target}" + reset_password_user_html: "%{name} reinitialisava le contrasigno del usator %{target}" + resolve_report_html: "%{name} resolveva le reporto %{target}" + sensitive_account_html: "%{name} marcava como sensibile le medios de %{target}" + silence_account_html: "%{name} limitava le conto de %{target}" + suspend_account_html: "%{name} suspendeva le conto de %{target}" + unassigned_report_html: "%{name} de-assignava le reporto %{target}" + unblock_email_account_html: "%{name} disblocava le adresse email de %{target}" + unsensitive_account_html: "%{name} dismarcava como sensibile le medios de %{target}" + unsilence_account_html: "%{name} removeva le limite del conto de %{target}" + unsuspend_account_html: "%{name} removeva le suspension del conto de %{target}" + update_announcement_html: "%{name} actualisava le annuncio %{target}" + update_custom_emoji_html: "%{name} actualisava le emoticone %{target}" + update_domain_block_html: "%{name} actualisava le blocada de dominio pro %{target}" + update_ip_block_html: "%{name} cambiava le regula pro IP %{target}" + update_status_html: "%{name} actualisava le message per %{target}" + update_user_role_html: "%{name} cambiava le rolo de %{target}" deleted_account: conto delite + empty: Nulle registrationes trovate. + filter_by_action: Filtrar per action + filter_by_user: Filtrar per usator + title: Registro de inspection announcements: destroyed_msg: Annuncio delite con successo! edit: title: Modificar annuncio empty: Necun annuncios trovate. + live: Al vivo new: create: Crear annuncio title: Nove annuncio publish: Publicar published_msg: Annuncio publicate con successo! + scheduled_for: Programmate pro %{time} + scheduled_msg: Annuncio programmate pro le publication! title: Annuncios + unpublish: Depublicar + unpublished_msg: Le publication del annuncio ha essite disfacite! + updated_msg: Annuncio actualisate con successo! + critical_update_pending: Actualisation critic pendente custom_emojis: + assign_category: Assignar categoria by_domain: Dominio copied_msg: Copia local del emoji create con successo copy: Copiar + copy_failed_msg: Impossibile crear un copia local de ille emoticone create_new_category: Crear nove categoria created_msg: Emoji create con successo! delete: Deler + destroyed_msg: Emoticone destruite con successo destroyed! disable: Disactivar disabled: Disactivate disabled_msg: Emoji disactivate con successo + emoji: Emoticone enable: Activar enabled: Activate enabled_msg: Emoji activate con successo + image_hint: PNG o GIF usque %{size} + list: Listar + listed: Listate new: title: Adder nove emoji personalisate + no_emoji_selected: Nulle emoticones ha essite cambiate perque nulle ha essite seligite + not_permitted: Tu non es autorisate a exequer iste action + overwrite: Superscriber + shortcode: Via breve + shortcode_hint: Al minus 2 characteres, solo characteres alphanumeric e lineettas basse title: Emojis personalisate + uncategorized: Sin categoria + unlist: Non listar + unlisted: Non listate + update_failed_msg: Impossibile actualisar ille emoticone + updated_msg: Emoticone actualisate con successo! upload: Incargar dashboard: active_users: usatores active @@ -282,71 +350,180 @@ ia: media_storage: Immagazinage de medios new_users: nove usatores opened_reports: reportos aperte + resolved_reports: reportos resolvite software: Software + sources: Fontes de inscription + space: Uso de spatio + title: Pannello de controlo top_languages: Linguas le plus active top_servers: Servitores le plus active website: Sito web + disputes: + appeals: + empty: Nulle appellos trovate. + title: Appellos domain_allows: add_new: Permitter federation con dominio + created_msg: Le dominio ha essite permittite con successo pro federation + destroyed_msg: Le dominio ha essite prohibite pro federation export: Exportar import: Importar + undo: Prohiber federation con dominio domain_blocks: + add_new: Adder nove blocada de dominio confirm_suspension: cancel: Cancellar + confirm: Suspender + permanent_action: Disfacer le suspension non restaurara alcun datos o relation. + preamble_html: Tu es sur le puncto de suspender %{domain} e su subdominios. + remove_all_data: Isto removera de tu servitor tote le contento, multimedia e datos de profilo del contos de iste dominio. stop_communication: Tu servitor stoppara le communication con iste servitores. + title: Confirmar le blocada del dominio %{domain} + undo_relationships: Isto disfacera omne relation de sequimento inter le contos de iste servitores e illos del tue. + created_msg: Le blocada del dominio es ora in tractamento + destroyed_msg: Le blocada del dominio ha essite disfacite domain: Dominio - edit: Modificar un bloco de dominio + edit: Modificar un blocada de dominio + existing_domain_block: Tu ha ja imponite limites plus stricte sur %{name}. + existing_domain_block_html: Tu ha ja imponite limites plus stricte sur %{name}; ora es necessari disblocar lo primo. export: Exportar import: Importar new: + create: Crear blocada + hint: Le blocada del dominio non impedira le creation de entratas de conto in le base de datos, ma applicara retroactive- e automaticamente le methodos specific de moderation a iste contos. severity: + desc_html: "Limitar rendera le messages del contos de iste dominio invisibile pro tote persona que non los seque. Suspender removera de tu servitor tote le contento, multimedia e datos de profilo del contos de iste dominio. Usa Necun si tu solmente vole rejectar le files multimedial." + noop: Nemo silence: Limitar suspend: Suspender + title: Nove blocada de dominio + no_domain_block_selected: Necun blocada de dominio ha essite cambiate perque necun ha essite seligite + not_permitted: Tu non es autorisate a exequer iste action + obfuscate: Offuscar le nomine de dominio + obfuscate_hint: Offuscar partialmente le nomine de dominio in le lista si le diffusion del lista de limitationes del dominio es activate private_comment: Commento private + private_comment_hint: Commentar iste limitation de dominio pro uso interne per le moderatores. public_comment: Commento public + public_comment_hint: Commentar iste limitation de dominio pro le publico general, si le diffusion del lista de limitationes del dominio es activate. + reject_media: Refusar files multimedial + reject_media_hint: Remove le files multimedial immagazinate localmente e refusa de discargar tales in futuro. Irrelevante pro le suspensiones + reject_reports: Refusar reportos + reject_reports_hint: Ignorar tote le reportos proveniente de iste dominio. Irrelevante pro le suspensiones + undo: Disfacer blocada de dominio + view: Examinar blocada de dominio email_domain_blocks: add_new: Adder nove + allow_registrations_with_approval: Permitter inscriptiones con approbation + attempts_over_week: + one: "%{count} tentativa de inscription in le ultime septimana" + other: "%{count} tentativas de inscription in le ultime septimana" + created_msg: Le dominio de e-mail ha essite blocate delete: Deler + dns: + types: + mx: Registro MX domain: Dominio new: create: Adder un dominio + resolve: Resolver dominio title: Blocar un nove dominio de e-mail + no_email_domain_block_selected: Necun blocadas de dominio de e-mail ha essite cambiate perque necun ha essite seligite + not_permitted: Non permittite + resolved_dns_records_hint_html: Le nomine de dominio se resolve al sequente dominios MX, le quales ha le ultime responsibilitate pro le reception de e-mail. Blocar un dominio MX blocara le inscriptiones de qualcunque adresse de e-mail que usa le mesme dominio MX, mesmo si le nomine de dominio visibile es differente. Presta attention a evitar de blocar le grande fornitores de e-mail. + resolved_through_html: Resolvite per %{domain} title: Dominios de e-mail blocate export_domain_allows: + new: + title: Importar permissiones de dominio no_file: Necun file seligite export_domain_blocks: + import: + description_html: Tu es sur le puncto de importar un lista de blocadas de dominio. Per favor revide con grande cura iste lista, particularmente si tu non lo ha scribite tu mesme. + existing_relationships_warning: Relationes existente de sequimento + private_comment_description_html: 'Pro adjutar te a traciar de ubi proveni le blocadas importate, le blocadas importate essera create con le sequente commento private: %{comment}' + private_comment_template: Importate de %{source} le %{date} + title: Importar blocadas de dominio + invalid_domain_block: 'Un o plus blocadas de dominio ha essite saltate a causa del sequente error(es): %{error}' + new: + title: Importar blocadas de dominio no_file: Necun file seligite follow_recommendations: + description_html: "Le recommendationes de sequimento adjuta le nove usatores a trovar rapidemente contento interessante. Quando un usator non ha un historia sufficiente de interactiones con alteres pro formar recommendationes personalisate de sequimento, iste contos es recommendate. Illos se recalcula cata die a partir de un mixtura de contos con le plus grande numero de ingagiamentos recente e le numero de sequitores local le plus alte pro un lingua date." language: Per lingua status: Stato + suppress: Supprimer recommendation de sequimento + suppressed: Supprimite title: Sequer le recommendationes + unsuppress: Restaurar recommendation de sequimento instances: + availability: + description_html: + one: Si le livration al dominio falle %{count} die sin succeder, necun tentativa ulterior de livration essera facite, excepte si es recipite un livration ab le dominio. + other: Si le livration al dominio falle durante %{count} dies differente sin succeder, necun tentativa ulterior de livration essera facite, excepte si es recipite un livration ab le dominio. + failure_threshold_reached: Limine de fallimentos attingite le %{date}. + failures_recorded: + one: Tentativa fallite durante %{count} die. + other: Tentativa fallite durante %{count} dies differente. + no_failures_recorded: Necun fallimento cognoscite. + title: Disponibilitate + warning: Le ultime tentativa de connexion a iste servitor non ha succedite back_to_all: Toto back_to_limited: Limitate back_to_warning: Advertimento by_domain: Dominio + confirm_purge: Es tu secur que tu vole deler permanentemente le datos de iste dominio? content_policies: comment: Nota interne + description_html: Tu pote definir politicas de contento que se applicara a tote le contos de iste dominio e a qualcunque de su subdominios. + limited_federation_mode_description_html: Tu pote decider si permitter le federation con iste dominio. policies: + reject_media: Rejectar multimedia + reject_reports: Rejectar reportos silence: Limitar suspend: Suspender policy: Politica reason: Ration public + title: Politicas de contento dashboard: instance_accounts_dimension: Contos le plus sequite + instance_accounts_measure: contos immagazinate + instance_followers_measure: nostre sequitores illac + instance_follows_measure: lor sequitores hic instance_languages_dimension: Linguas principal + instance_media_attachments_measure: annexos multimedial immagazinate + instance_reports_measure: signalationes sur illos + instance_statuses_measure: messages immagazinate delivery: + all: Totes + clear: Rader errores de livration + failing: Fallente + restart: Recomenciar livration + stop: Cessar livration unavailable: Non disponibile + delivery_available: Livration es disponibile + delivery_error_days: Dies de errores de livration + delivery_error_hint: Si le livration non es possibile durante %{count} dies, illo essera automaticamente marcate como non livrabile. + destroyed_msg: Le datos de %{domain} es ora in cauda pro deletion imminente. empty: Necun dominios trovate. + known_accounts: + one: "%{count} conto cognoscite" + other: "%{count} contos cognoscite" moderation: all: Toto limited: Limitate title: Moderation private_comment: Commento private public_comment: Commento public + purge: Purgar + purge_description_html: Si tu crede que iste dominio es foras de linea pro sempre, tu pote deler de tu immagazinage tote le registros del conto e le datos associate de iste dominio. Isto pote prender un tempore. title: Federation total_blocked_by_us: Blocate per nos + total_followed_by_them: Sequite per illes total_followed_by_us: Sequite per nos + total_reported: Signalationes sur illes + total_storage: Annexos multimedial + totals_time_period_hint_html: Le totales monstrate hic infra include le datos de tote le tempore. + unknown_instance: Iste dominio non es actualmente cognoscite sur iste servitor. invites: deactivate_all: Disactivar toto filter: @@ -357,6 +534,7 @@ ia: title: Invitationes ip_blocks: add_new: Crear regula + created_msg: Le nove regula IP ha essite addite delete: Deler expires_in: '1209600': 2 septimanas @@ -367,8 +545,12 @@ ia: '94670856': 3 annos new: title: Crear un nove regula IP + no_ip_block_selected: Necun regula IP ha essite cambiate perque necun ha essite seligite title: Regulas IP + relationships: + title: Relationes de %{acct} relays: + add_new: Adder nove repetitor delete: Deler description_html: Un repetitor de federation es un servitor intermediari que excambia grande volumines de messages public inter le servitores que se inscribe e publica a illo. Illo pote adjutar le servitores micre e medie a discoperir le contento del fediverso, sin requirer que le usatores local seque manualmente altere personas sur servitores distante. disable: Disactivar @@ -376,59 +558,212 @@ ia: enable: Activar enable_hint: Un vice activate, tu servitor se inscribera a tote le messages public de iste repetitor, e comenciara a inviar le messages public de iste servitor a illo. enabled: Activate + inbox_url: URL del repetitor + pending: Attende le approbation del repetitor save_and_enable: Salveguardar e activar + setup: Crear un connexion con un repetitor + signatures_not_enabled: Le repetitores pote non functionar correctemente durante que le modo secur o le modo de federation limitate es activate status: Stato + title: Repetitores + report_notes: + created_msg: Nota de signalation create con successo! + destroyed_msg: Nota de signalation delite con successo! reports: + account: + notes: + one: "%{count} nota" + other: "%{count} notas" + action_log: Registro de inspection + action_taken_by: Action prendite per + actions: + delete_description_html: Le messages signalate essera delite e un admonition essera registrate pro adjutar te a prender mesuras in caso de futur infractiones proveniente del mesme conto. + mark_as_sensitive_description_html: Le files multimedial in le messages reportate essera marcate como sensibile e un admonition essera registrate pro adjutar te a prender mesuras in caso de futur infractiones proveniente del mesme conto. + other_description_html: Vider plus optiones pro controlar le comportamento del conto e personalisar le communication al conto signalate. + resolve_description_html: Necun action essera prendite contra le conto signalate, necun admonition registrate, e le signalation essera claudite. + silence_description_html: Iste conto essera visibile solmente a qui ja lo seque o manualmente lo cerca, limitante gravemente su portata. Pote sempre esser revertite. Claude tote le signalationes contra iste conto. + suspend_description_html: Le conto e tote su contento essera inaccessible e finalmente delite, e interager con illo essera impossibile. Reversibile intra 30 dies. Claude tote le signalationes contra iste conto. + actions_description_html: Decide qual action prender pro resolver iste signalation. Si tu prende un action punitive contra le conto signalate, le persona recipera un notification in e-mail, excepte si le categoria Spam es seligite. + actions_description_remote_html: Decide qual action prender pro resolver iste signalation. Isto affectara solmente le maniera in que tu servitor communica con iste conto remote e gere su contento. add_to_report: Adder plus al reporto + already_suspended_badges: + local: Ja suspendite sur iste servitor + remote: Ja suspendite sur su servitor are_you_sure: Es tu secur? + assign_to_self: Assignar a me + assigned: Moderator assignate + by_target_domain: Dominio del conto signalate cancel: Cancellar category: Categoria + category_description_html: Le motivo pro le qual iste conto e/o contento ha essite signalate essera citate in le communication con le conto signalate + comment: + none: Necun + comment_description_html: 'Pro fornir plus information, %{name} ha scribite:' confirm: Confirmar + confirm_action: Confirmar le action de moderation contra %{acct} + created_at: Signalate delete_and_resolve: Deler le messages + forwarded: Reexpedite + forwarded_replies_explanation: Iste signalation proveni de un usator remote e concerne contento remote. Illo te ha essite reexpedite perque le contento signalate es in responsa a un usator tue. + forwarded_to: Reexpedite a %{domain} + mark_as_resolved: Marcar como resolvite + mark_as_sensitive: Marcar como sensibile + mark_as_unresolved: Marcar como non resolvite no_one_assigned: Nemo notes: create: Adder un nota + create_and_resolve: Resolver con nota + create_and_unresolve: Reaperir con nota delete: Deler + placeholder: Describe le actiones prendite, o insere altere information pertinente... title: Notas + notes_description_html: Vider e lassar notas pro altere moderatores e pro tu proprie futuro + processed_msg: 'Reporto #%{id} elaborate con successo' + quick_actions_description_html: 'Face un rapide action o rola a basso pro vider le contento reportate:' + remote_user_placeholder: le usator remote ab %{instance} + reopen: Reaperir reporto + report: 'Reporto #%{id}' + reported_account: Conto signalate + reported_by: Signalate per + resolved: Resolvite + resolved_msg: Reporto resolvite con successo! skip_to_actions: Saltar al actiones status: Stato + statuses: Contento signalate + statuses_description_html: Le contento offensive sera citate in communication con le conto reportate + summary: + action_preambles: + delete_html: 'Tu va remover parte de messages de @%{acct}. Isto ira:' + mark_as_sensitive_html: 'Tu va marcar parte de messages de @%{acct} como sensibile. Isto ira:' + silence_html: 'Tu va limitar le conto de @%{acct}. Isto ira:' + suspend_html: 'Tu va limitar le conto de @%{acct}. Isto ira:' + actions: + delete_html: Remover le messages offensive + mark_as_sensitive_html: Marcar le medios de messages offensive como sensibile + silence_html: Limitar gravemente le portata de @%{acct} rendente le profilo e contento visibile solmente a qui ja lo seque o lo cerca manualmente + suspend_html: Suspender @%{acct}, rendente le profilo e contento inaccessibile e le interaction con illo impossibile + close_report: Marcar le signalation №%{id} como resolvite + close_reports_html: Marcar tote le signalationes contra @%{acct} como resolvite + delete_data_html: Deler le profilo e contento de @%{acct} in 30 dies excepte si le suspension es disfacite intertanto + preview_preamble_html: "@%{acct} recipera un advertimento con le sequente contento:" + record_strike_html: Registrar un admonition contra @%{acct} pro adjutar te a imponer sanctiones in caso de futur violationes de iste conto + send_email_html: Inviar un e-mail de advertimento a @%{acct} + warning_placeholder: Motivation supplementari facultative pro le action de moderation. + target_origin: Origine del conto signalate + title: Reportos + unassign: Disassignar + unknown_action_msg: 'Action incognite: %{action}' + unresolved: Non resolvite updated_at: Actualisate view_profile: Vider profilo roles: + add_new: Adder rolo assigned_users: one: "%{count} usator" other: "%{count} usatores" categories: + administration: Administration + devops: DevOps invites: Invitationes moderation: Moderation special: Special delete: Deler + description_html: Le rolos de usator permitte personalisar le functiones e areas de Mastodon al quales le usator pote acceder. + edit: Modificar le rolo '%{name}' everyone: Permissiones predefinite + everyone_full_description_html: Iste es le rolo de base que affecta tote le usatores, mesmo illes sin rolo assignate. Tote le altere rolos heredita le permissiones de illo. + permissions_count: + one: "%{count} permission" + other: "%{count} permissiones" privileges: + administrator: Administrator + administrator_description: Le usatores con iste permission pote contornar tote permission delete_user_data: Deler le datos de usator + delete_user_data_description: Permitte que usatores dele immediatemente le datos de altere usatores + invite_users: Invitar usatores + invite_users_description: Permitte que usatores invita nove personas al servitor manage_announcements: Gerer le annuncios + manage_announcements_description: Permitte que usatores genere annuncios sur le servitor + manage_appeals: Gerer appellos + manage_appeals_description: Permitte que usatores revide appellos contra actiones de moderation + manage_blocks: Gerer blocadas + manage_blocks_description: Permitter que usatores bloca le fornitores de e-mail e le adresses IP + manage_custom_emojis: Gerer emojis personalisate + manage_custom_emojis_description: Permitte que usatores gere emojis personalisate sur le servitor + manage_federation: Gerer federation + manage_federation_description: Permitte que le usatores bloca o permitte le federation con altere dominios, e controla le livration manage_invites: Gerer le invitationes + manage_invites_description: Permitte que usatores examina e deactiva ligamines de invitation + manage_reports: Gerer le reportos + manage_reports_description: Permitte que usatores revide signalationes e exeque actiones de moderation a base de illos + manage_roles: Gerer le rolos + manage_roles_description: Permitte que usatores gere e assigna rolos inferior a lor privilegios actual manage_rules: Gerer le regulas + manage_rules_description: Permitte que usatores cambia le regulas del servitor manage_settings: Gerer le parametros + manage_settings_description: Permitte que usatores cambia le parametros del sito + manage_taxonomies: Gerer taxonomias + manage_taxonomies_description: Permitte que usatores revide contento in tendentias e actualisa le parametros de hashtag + manage_user_access: Gerer le accessos de usator + manage_user_access_description: Permitte que usatores disactiva le authentication bifactorial de altere usatores, cambia lor adresses de e-mail, e reinitialisa lor contrasigno manage_users: Gerer usatores + manage_users_description: Permitte que usatores vide le detalios de altere usatores e exeque actiones de moderation contra illes + manage_webhooks: Gerer Webhooks + manage_webhooks_description: Permitte que usatores installa “webhooks” pro eventos administrative + view_audit_log: Vider le registro de inspection + view_audit_log_description: Permitte que usatores vide un historia de actiones administrative sur le servitor + view_dashboard: Vider le tabuliero de instrumentos + view_dashboard_description: Permitte que usatores accede al tabuliero de instrumentos e a varie statisticas + view_devops: DevOps + view_devops_description: Permitte que usatores accede al tabulieros de instrumentos de Sidekiq e pgHero title: Rolos rules: + add_new: Adder regula delete: Deler + description_html: Ben que multes affirma de haber legite e acceptate le conditiones de servicio, generalmente le gente non los lege completemente usque un problema surge. Facilita le visibilitate del regulas de tu servitor in un colpo de oculo forniente los in un lista a punctos. Tenta mantener le regulas individual curte e simple, ma sin divider los in multe punctos separate. + edit: Modificar regula + empty: Necun regula del servitor ha essite definite ancora. + title: Regulas del servitor settings: about: + manage_rules: Gerer le regulas del servitor + preamble: Fornir information detaliate sur le functionamento, moderation e financiamento del servitor. + rules_hint: Il ha un area dedicate al regulas que tu usatores debe acceptar. title: A proposito de appearance: preamble: Personalisar le interfacie web de Mastodon. title: Apparentia + branding: + preamble: Le marca de tu servitor lo differentia de altere servitores in le rete. Iste information pote esser monstrate in diverse ambientes, como le interfacie web de Mastodon, applicationes native, in previsualisationes de ligamines sur altere sitos web, in applicationes de messageria, etc. Pro iste ration, il es melior mantener iste information clar, breve e concise. + title: Marca + captcha_enabled: + desc_html: Iste depende de scripts externe de hCaptcha, que pote esser un problema de securitate e vita private. De plus, isto pote render le processo de inscription multo minus accessibile a certe personas (particularmente personas con discapacitates). Pro iste rationes, considera altere mesuras como le inscription basate sur approbation o invitation. + title: Require que nove usatores solve un CAPTCHA pro confirmar lor conto + content_retention: + danger_zone: Zona periculose discovery: profile_directory: Directorio de profilos public_timelines: Chronologias public + title: Discoperi trends: Tendentias + domain_blocks: + all: A omnes + disabled: A necuno + users: A usators local in session + registrations: + title: Registrationes + registrations_mode: + modes: + none: Nemo pote inscriber se + open: Quicunque pote inscriber se + security: + authorized_fetch_hint: Requirer authentication de servitores federate permitte un application plus stricte de blocadas a nivello de usator e de servitor. Nonobstante, isto diminue le prestationes del servitor, reduce le portata de tu responsas e pote introducer problemas de compatibilitate con certe servicios federate. In plus, isto non impedira le actores dedicate a recuperar tu messages public e tu contos. title: Parametros de servitor site_uploads: delete: Deler file incargate + destroyed_msg: Incarga de sito delite con successo! software_updates: documentation_link: Pro saper plus + release_notes: Notas de version title: Actualisationes disponibile type: Typo types: @@ -443,31 +778,136 @@ ia: deleted: Delite favourites: Favoritos history: Chronologia del versiones + in_reply_to: Replicante a language: Lingua media: title: Medios metadata: Metadatos open: Aperir message original_status: Message original + status_changed: Messages cambiate title: Messages del conto trending: Tendentias visibility: Visibilitate + with_media: Con medios strikes: actions: + delete_statuses: "%{name} ha delite le messages de %{target}" + disable: "%{name} ha gelate le conto de %{target}" + mark_statuses_as_sensitive: "%{name} ha marcate le messages de %{target} como sensibile" none: "%{name} ha inviate un advertimento a %{target}" + sensitive: "%{name} ha marcate le conto de %{target} como sensibile" + silence: "%{name} ha limitate le conto de %{target}" + suspend: "%{name} ha suspendite le conto de %{target}" + appeal_approved: Appello facite + appeal_pending: Appello pendente + appeal_rejected: Appello rejectate system_checks: + elasticsearch_preset: + action: Vide documentation + elasticsearch_preset_single_node: + action: Vide documentation rules_check: action: Gerer le regulas del servitor software_version_critical_check: action: Vider le actualisationes disponibile + message_html: Un actualisation critic de Mastodon es disponibile, actualisa lo le plus rapide possibile. software_version_patch_check: action: Vider le actualisationes disponibile upload_check_privacy_error: action: Verifica hic pro plus de information + upload_check_privacy_error_object_storage: + action: Verifica hic pro plus de information + trends: + approved: Approbate + rejected: Rejectate + tags: + not_usable: Non pote esser usate + title: Tendentias + warning_presets: + add_new: Adder nove + delete: Deler + webhooks: + delete: Deler + disable: Disactivar + disabled: Disactivate + enable: Activar + events: Eventos + status: Stato + admin_mailer: + new_critical_software_updates: + subject: Actualisationes critic de Mastodon es disponibile pro %{instance}! + new_software_updates: + subject: Nove versiones de Mastodon es disponibile pro %{instance}! + appearance: + advanced_web_interface: Interfacie web avantiate + sensitive_content: Contento sensibile application_mailer: + notification_preferences: Cambiar preferentias de e-mail + settings: 'Cambiar preferentias de e-mail: %{link}' unsubscribe: Desubscriber + view: 'Vider:' + view_profile: Vider profilo + view_status: Vider message + applications: + created: Application create con successo + destroyed: Application delite con successo + logout: Clauder le session + auth: + confirmations: + welcome_title: Benvenite, %{name}! + delete_account: Deler le conto + logout: Clauder le session + progress: + details: Tu detalios + set_new_password: Definir un nove contrasigno + status: + account_status: Stato del conto + view_strikes: Examinar le admonitiones passate contra tu conto + challenge: + invalid_password: Contrasigno non valide + deletes: + proceed: Deler le conto + success_msg: Tu conto esseva delite con successo + warning: + data_removal: Tu messages e altere datos essera removite permanentemente + email_change_html: Tu pote cambiar tu adresse de e-mail sin deler tu conto + disputes: + strikes: + action_taken: Action prendite + appeal: Facer appello + appeal_approved: Iste admonition ha essite annullate in appello e non es plus valide + appeal_rejected: Le appello ha essite rejectate + appeal_submitted_at: Appello submittite + appealed_msg: Tu appello ha essite submittite. Si es approbate, tu recipera notification. + appeals: + submit: Submitter appello + approve_appeal: Approbar apello + associated_report: Signalation associate + created_at: Del data + description_html: Istes es le actiones prendite contra tu conto e le advertimentos que te ha essite inviate per le personal de %{instance}. + recipient: Adressate a + reject_appeal: Rejectar appello + status: Message №%{id} + status_removed: Le message ha ja essite removite del systema + title: "%{action} del %{date}" + title_actions: + delete_statuses: Elimination de messages + disable: Gelamento del conto + mark_statuses_as_sensitive: Marcation de messages como sensibile + none: Advertimento + sensitive: Marcation del conto como sensibile + silence: Limitation del conto + suspend: Suspension del conto + your_appeal_approved: Tu appello ha essite approbate + your_appeal_pending: Tu ha submittite un appello + your_appeal_rejected: Tu appello ha essite rejectate edit_profile: + basic_information: Information basic other: Alteres + errors: + '422': + content: Le verification de securitate ha fallite. Bloca tu le cookies? existing_username_validator: not_found_multiple: non poteva trovar %{usernames} exports: @@ -478,6 +918,7 @@ ia: blocks: Tu ha blocate bookmarks: Marcapaginas csv: CSV + domain_blocks: Blocadas de dominio mutes: Tu ha silentiate storage: Immagazinage de medios featured_tags: @@ -496,6 +937,10 @@ ia: title: Modificar filtro index: delete: Deler + title: Filtros + new: + save: Salveguardar nove filtro + title: Adder nove filtro generic: all: Toto cancel: Cancellar @@ -509,12 +954,37 @@ ia: imports: errors: empty: File CSV vacue + invalid_csv_file: 'File CSV non valide. Error: %{error}' too_large: Le file es troppo longe failures: Fallimentos + overwrite_preambles: + blocking_html: Tu es sur le puncto de reimplaciar tu lista de blocadas per usque a %{total_items} contos proveniente de %{filename}. + domain_blocking_html: Tu es sur le puncto de reimplaciar tu lista de blocadas de dominio per usque a %{total_items} dominios proveniente de %{filename}. + preambles: + blocking_html: Tu es sur le puncto de blocar usque a %{total_items} contos a partir de %{filename}. + domain_blocking_html: Tu es sur le puncto de blocar usque a %{total_items} dominios a partir de %{filename}. + preface: Tu pote importar datos que tu ha exportate de un altere servitor, como un lista de personas que tu seque o bloca. + recent_imports: Importationes recente status: Stato + titles: + blocking: Importation de contos blocate + bookmarks: Importation de marcapaginas + domain_blocking: Importation de dominios blocate + lists: Importation de listas + muting: Importation de contos silentiate + type: Typo de importation + type_groups: + constructive: Sequites e marcapaginas + destructive: Blocadas e silentiamentos types: + blocking: Lista de blocadas + bookmarks: Marcapaginas + domain_blocking: Lista de dominios blocate lists: Listas + upload: Incargar invites: + delete: Disactivar + expired: Expirate expires_in: '1800': 30 minutas '21600': 6 horas @@ -544,9 +1014,90 @@ ia: migrations: errors: not_found: non poterea esser trovate + move_handler: + carry_blocks_over_text: Iste usator ha cambiate de conto desde %{acct}, que tu habeva blocate. + notification_mailer: + follow: + title: Nove sequitor + follow_request: + title: Nove requesta de sequimento + mention: + action: Responder + poll: + subject: Un inquesta de %{name} ha finite + pagination: + next: Sequente preferences: + other: Altere public_timelines: Chronologias public + privacy_policy: + title: Politica de confidentialitate + relationships: + activity: Activitate del conto + most_recent: Plus recente + status: Stato del conto + sessions: + activity: Ultime activitate + browser: Navigator + browsers: + alipay: Alipay + blackberry: BlackBerry + chrome: Chrome + edge: Microsoft Edge + electron: Electron + firefox: Firefox + generic: Navigator incognite + huawei_browser: Huawei Browser + ie: Internet Explorer + micro_messenger: MicroMessenger + nokia: Navigator de Nokia S40 Ovi + opera: Opera + otter: Otter + phantom_js: PhantomJS + qq: QQ Browser + safari: Safari + uc_browser: UC Browser + unknown_browser: Navigator Incognite + weibo: Weibo + current_session: Session actual + date: Data + description: "%{browser} sur %{platform}" + platforms: + adobe_air: Adobe Air + android: Android + blackberry: BlackBerry + chrome_os: ChromeOS + firefox_os: Firefox OS + ios: iOS + kai_os: KaiOS + linux: Linux + mac: macOS + unknown_platform: Platteforma incognite + windows: Windows + windows_mobile: Windows Mobile + windows_phone: Windows Phone + settings: + account: Conto + account_settings: Parametros de conto + appearance: Apparentia + delete: Deletion de conto + development: Disveloppamento + edit_profile: Modificar profilo + import: Importar + migrate: Migration de conto + notifications: Notificationes de e-mail + preferences: Preferentias + profile: Profilo public + relationships: Sequites e sequitores + strikes: Admonitiones de moderation + severed_relationships: + event_type: + domain_block: Suspension del servitor (%{target_name}) + user_domain_block: Tu ha blocate %{target_name} + preamble: Tu pote perder sequites e sequitores quando tu bloca un dominio o quando tu moderatores decide suspender un servitor remote. Quando isto occurre, tu potera discargar listas de relationes rumpite, a inspectar e eventualmente importar in un altere servitor. + type: Evento statuses: + open_in_web: Aperir in le web poll: vote: Votar show_more: Monstrar plus @@ -563,7 +1114,13 @@ ia: '604800': 1 septimana '63113904': 2 annos '7889238': 3 menses + stream_entries: + sensitive_content: Contento sensibile + strikes: + errors: + too_late: Es troppo tarde pro facer appello contra iste admonition themes: + contrast: Mastodon (Alte contrasto) default: Mastodon (Obscur) mastodon-light: Mastodon (Clar) system: Automatic (usar thema del systema) @@ -574,6 +1131,24 @@ ia: user_mailer: appeal_approved: action: Parametros de conto + explanation: Le appello contra le admonition contra tu conto del %{strike_date}, que tu ha submittite le %{appeal_date}, ha essite approbate. Tu conto ha de novo un bon reputation. + appeal_rejected: + explanation: Le appello contra le admonition contra tu conto del %{strike_date}, que tu ha submittite le %{appeal_date}, ha essite rejectate. + warning: + appeal: Submitter un appello + subject: + none: Advertimento pro %{acct} + sensitive: Tu messages sur %{acct} essera marcate como sensibile a partir de ora + silence: Tu conto %{acct} ha essite limitate + suspend: Tu conto %{acct} ha essite suspendite + title: + delete_statuses: Messages removite + disable: Conto gelate + mark_statuses_as_sensitive: Messages marcate como sensibile + none: Advertimento + sensitive: Conto marcate como sensibile + silence: Conto limitate + suspend: Conto suspendite welcome: apps_android_action: Obtene lo sur Google Play apps_ios_action: Discargar sur le App Store @@ -582,6 +1157,9 @@ ia: edit_profile_action: Personalisar edit_profile_title: Personalisar tu profilo feature_action: Apprender plus + follow_action: Sequer + post_title: Face tu prime message + share_action: Compartir share_title: Compartir tu profilo de Mastodon subject: Benvenite in Mastodon verification: diff --git a/config/locales/ja.yml b/config/locales/ja.yml index da9a421411..0712ba380a 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -737,6 +737,7 @@ ja: desc_html: この機能は hCaptcha による外部スクリプトを使用しますが、hCaptcha にはセキュリティとプライバシーの懸念が考えられます。また、CAPTCHAにより新規登録のアクセシビリティが大幅に損なわれる可能性があり、身体および精神障害者においては特に顕著です。以上の理由から、承認制や招待制を基本とするなど、代わりの登録手順を提供することを検討してください。 title: 新規ユーザーのアカウント確認にCHAPCHAを要求する content_retention: + danger_zone: 危険な操作 preamble: ユーザーが生成したコンテンツがどのように Mastodon に保存されるかを管理します。 title: コンテンツの保持 default_noindex: diff --git a/config/locales/lt.yml b/config/locales/lt.yml index 82fbde6ce1..3449f1d5d7 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -410,6 +410,8 @@ lt: silence: Riboti suspend: Pristabdyti title: Naujos domeno blokas + public_comment: Viešas komentaras + public_comment_hint: Komentaras apie šį domeno apribojimą plačiajai visuomenei, jei įjungtas domenų apribojimų sąrašo reklamavimas. reject_media: Atmesti medijos failus reject_media_hint: Panaikina lokaliai saugomus medijos failus bei atsisako jų parsisiuntimo ateityje. Neliečia užblokavimu reject_reports: Atmesti ataskaitas @@ -427,11 +429,14 @@ lt: title: El pašto juodasis sąrašas instances: by_domain: Domenas + content_policies: + reason: Viešoji priežastis delivery_available: Pristatymas galimas moderation: all: Visi limited: Limituotas title: Moderacija + public_comment: Viešas komentaras title: Federacija total_blocked_by_us: Mes užblokavome total_followed_by_them: Jų sekami @@ -449,11 +454,11 @@ lt: relays: add_new: Pridėti naują pamainą delete: Ištrinti - description_html: "Federacijos perjungėjas tai tarpinis serveris, kuris apsikeičia didelios apimties informacija tarp kitų serverių. Tai gali padėti mažesniems serveriams atrasti turinį iš fedi-visatos, kuris kitaip reikalautų vartotojų lokaliai sekti kitus žmones naudojantis kitus tolimus serverius." + description_html: "Federacijos perdavimas – tai tarpinis serveris, kuris keičiasi dideliais viešų įrašų kiekiais tarp jį prenumeruojančių ir skelbiančių serverių. Jis gali padėti mažiems ir vidutiniams serveriams atrasti fediverse esantį turinį, nes priešingu atveju vietiniams naudotojams reikėtų rankiniu būdu sekti kitus žmones iš nutolusių serverių." disable: Išjungti disabled: Išjungtas enable: Įjungti - enable_hint: Kai įjungta, Jūsų serveris prenumeruos visas viešas žinutes iš šio tinklo, ir pradės siųsti šio serverio viešas žinutes į tinklą. + enable_hint: Kai bus įjungtas, tavo serveris užsiprenumeruos visus šio perdavimo viešus įrašus ir pradės į jį siųsti šio serverio viešus įrašus. enabled: Įjungtas inbox_url: Perdavimo URL pending: Laukiama perdavimo patvirtinimo @@ -504,6 +509,8 @@ lt: desc_html: Tai priklauso nuo hCaptcha išorinių skriptų, kurie gali kelti susirūpinimą dėl saugumo ir privatumo. Be to, dėl to registracijos procesas kai kuriems žmonėms (ypač neįgaliesiems) gali būti gerokai sunkiau prieinami. Dėl šių priežasčių apsvarstyk alternatyvias priemones, pavyzdžiui, patvirtinimu arba kvietimu grindžiamą registraciją. content_retention: danger_zone: Pavojinga zona + discovery: + public_timelines: Viešieji laiko skalės domain_blocks: all: Visiems registrations: @@ -543,7 +550,7 @@ lt: body: Mastodon verčia savanoriai. guide_link_text: Visi gali prisidėti. application_mailer: - notification_preferences: Keisti el pašto parinktis + notification_preferences: Keisti el. pašto nuostatas settings: 'Keisti el. pašto nuostatas: %{link}' view: 'Peržiūra:' view_profile: Peržiurėti profilį @@ -635,7 +642,7 @@ lt: contexts: home: Namų laiko juosta notifications: Priminimai - public: Viešos laiko juostos + public: Viešieji laiko skalės thread: Pokalbiai edit: title: Keisti filtrą @@ -727,6 +734,8 @@ lt: prev: Ankstesnis preferences: other: Kita + posting_defaults: Skelbimo numatytosios nuostatos + public_timelines: Viešieji laiko skalės privacy: hint_html: "Tikrink, kaip nori, kad tavo profilis ir įrašai būtų randami. Įjungus įvairias Mastodon funkcijas, jos gali padėti pasiekti platesnę auditoriją. Akimirką peržiūrėk šiuos nustatymus, kad įsitikintum, jog jie atitinka tavo naudojimo būdą." redirects: @@ -769,7 +778,8 @@ lt: import: Importuoti migrate: Paskyros migracija notifications: El. laiško pranešimai - preferences: Preferencijos + preferences: Nuostatos + profile: Viešas profilis two_factor_authentication: Dviejų veiksnių autentikacija statuses: attached: diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index 8e30a27b8b..0c2e6cfd6d 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -751,6 +751,7 @@ pt-PT: desc_html: Isto depende de scripts externos da hCaptcha, o que pode ser uma preocupação de segurança e privacidade. Além disso, isto pode tornar o processo de registo menos acessível para algumas pessoas (especialmente as com limitações físicas). Por isso, considere medidas alternativas tais como registo mediante aprovação ou sob convite. title: Requerer que novos utilizadores resolvam um CAPTCHA para confirmar a sua conta content_retention: + danger_zone: Zona de perigo preamble: Controle como o conteúdo gerado pelos utilizadores é armazenado no Mastodon. title: Retenção de conteúdo default_noindex: diff --git a/config/locales/simple_form.ar.yml b/config/locales/simple_form.ar.yml index 29e525b2c8..a1406b1ad9 100644 --- a/config/locales/simple_form.ar.yml +++ b/config/locales/simple_form.ar.yml @@ -240,6 +240,7 @@ ar: backups_retention_period: فترة الاحتفاظ بأرشيف المستخدم bootstrap_timeline_accounts: أوصي دائما بهذه الحسابات للمستخدمين الجدد closed_registrations_message: رسالة مخصصة عندما يكون التسجيل غير متاح + content_cache_retention_period: مدة الاحتفاظ بالمحتوى البعيد custom_css: سي أس أس CSS مخصص mascot: جالب حظ مخصص (قديم) media_cache_retention_period: مدة الاحتفاظ بالتخزين المؤقت للوسائط diff --git a/config/locales/simple_form.he.yml b/config/locales/simple_form.he.yml index b07ed8b8b5..841745dbc0 100644 --- a/config/locales/simple_form.he.yml +++ b/config/locales/simple_form.he.yml @@ -77,10 +77,13 @@ he: warn: הסתר את התוכן המסונן מאחורי אזהרה עם כותרת המסנן form_admin_settings: activity_api_enabled: מספר ההודעות שפורסמו מקומית, משתמשים פעילים, והרשמות חדשות בדליים שבועיים + backups_retention_period: למשתמשים יש יכולת לבקש ארכיון של הודעותיהם להורדה מאוחר יותר. כאשר נבחר ערך חיובי, הארכיונים הללו ימחקו מאחסון לאחר מספר הימים שצוינו. bootstrap_timeline_accounts: חשבונות אלו יוצמדו לראש רשימת המלצות המעקב של משתמשים חדשים. closed_registrations_message: להציג כאשר הרשמות חדשות אינן מאופשרות + content_cache_retention_period: כל ההודעות משרתים אחרים (לרבות הדהודים ותגובות) ימחקו אחרי מספר ימים, ללא קשר לאינטראקציה של משתמשים מקומיים איתם. בכלל זה הודעות שהמתשתמשים המקומיים סימנו בסימניה או חיבוב. איזכורים פרטיים ("דיאם") בין משתמשים בין שרתים שונים יאבדו גם הם ולא תהיה אפשרות לשחזרם. השימוש באפשרות הזו מיועד לשרתים עם ייעוד מיוחד ושובר את ציפיותיהם של רב המשתמשים כאשר האפשרות מופעלת בשרת לשימוש כללי. custom_css: ניתן לבחור ערכות סגנון אישיות בגרסת הדפדפן של מסטודון. mascot: בחירת ציור למנשק הווב המתקדם. + media_cache_retention_period: קבצי מדיה מהודעות שהגיעו משרתים רחוקים נשמרות על השרת שלך. כאשר יבחר פה מספר חיובי, המדיה תמחק לאחר מספר ימים כמצוין. אם המידע יבוקש שוב לאחר שנמחק, הוא יורד מחדש, אם המידע עדיין זמין בצד הרחוק. עקב מגבלות על תכיפות שליפת כרטיסי קדימון מאתרים מרוחקים, מומלץ לכוון את הערך ל־14 יום לפחות, או שכרטיסי קדימונים לא יעודכנו לפי דרישה לפני חלוף חלון הזמן הזה. peers_api_enabled: רשימת השרתים ששרת זה פגש בפדיוורס. לא כולל מידע לגבי קשר ישיר עם שרת נתון, אלא רק שידוע לשרת זה על קיומו. מידע זה משמש שירותים האוספים סטטיסטיקות כלליות על הפדרציה. profile_directory: ספריית הפרופילים מציגה ברשימה את כל המשתמשים שביקשו להיות ניתנים לגילוי. require_invite_text: כאשר הרשמות דורשות אישור ידני, הפיכת טקסט ה"מדוע את/ה רוצה להצטרף" להכרחי במקום אופציונלי diff --git a/config/locales/simple_form.ia.yml b/config/locales/simple_form.ia.yml index b5ec14e60e..c796cb5fac 100644 --- a/config/locales/simple_form.ia.yml +++ b/config/locales/simple_form.ia.yml @@ -90,11 +90,54 @@ ia: site_contact_email: Como pote contactar te le personas pro questiones legal o de supporto. site_contact_username: Como pote contactar te le personas re Mastodon. site_extended_description: Qualcunque information additional que pote esser utile al visitatores e a tu usatores. Pote esser structurate con syntaxe de markdown. + site_short_description: Un breve description pro adjutar a univocamente identificar tu servitor. Qui ha exequite illo, proque es illo? + site_terms: Usa tu proprie politica de confidentialitate o lassa blanc pro usar le predefinite. Pote esser structurate con syntaxe de markdown. + site_title: Como le personas pote referer se a tu servitor in addition su nomine de dominio. + status_page_url: URL de un pagina ubi le personas pote vider le stato de iste servitor durante un interruption + theme: Thema que le visitatores disconnexe e le nove usatores vide. + thumbnail: Un imagine approximativemente 2:1 monstrate al latere del informationes de tu servitor. + timeline_preview: Le visitatores disconnexe potera navigar per le plus recente messages public disponibile sur le servitor. + trendable_by_default: Saltar le revision manual del contento de tendentia. Elementos singule pote ancora esser removite de tendentias post le facto. + trends: Tendentias monstra que messages, hashtags e novas gania traction sur tu servitor. + trends_as_landing_page: Monstrar contento de tendentia a usatores disconnexe e visitatores in vice que un description de iste servitor. Require tendentias esser activate. + form_challenge: + current_password: Tu entra in un area secur + imports: + data: File CSV exportate ab un altere servitor de Mastodon + invite_request: + text: Isto nos adjutara a revider tu application ip_block: + comment: Optional. Memorar perque tu ha addite iste regula. + expires_in: Le adresses IP es un ressource finite, illos es aliquando compartite e sovente cambia manos. Pro iste ration, blocadas de IP indefinite non es recommendate. + ip: Inserer un adresse IPv4 o IPv6. Tu pote blocar campos integre per le syntaxe CIDR. Sia attente pro non disconnecter te! severities: no_access: Blocar accesso a tote le ressources + sign_up_block: Nove inscriptiones non sera possibile + sign_up_requires_approval: Nove inscriptiones requirera tu approbation + severity: Seliger que evenira con requestas ab iste IP + rule: + hint: Optional. Forni altere detalios re le regula + text: Describe un regula o requisito pro usatores sur iste servitor. Tenta de mantener lo breve e simple + sessions: + otp: 'Insere le codice a duo factores generate per le app de tu telephono o usa un de tu codices de recuperation:' + webauthn: Si illo es un clave USB cura de inserer lo e, si necessari, tocca lo. + settings: + indexable: Tu pagina del profilo pote apparer in resultatos del recerca sur Google, Bing, e alteros. + show_application: Tu sempre sera capace totevia de vider que app publicava tu message. + tag: + name: Tu pote solo cambiar le inveloppe del litteras, per exemplo, pro render lo plus legibile + user: + chosen_languages: Si marcate, solo le messages in le linguas seligite sera monstrate in chronologias public + role: Le rolo controla que permissos ha le usator + user_role: + color: Color a esser usate pro le rolo in omne parte del UI, como RGB in formato hexadecimal + highlighted: Iste rende le rolo publicamente visibile + name: Nomine public del rolo, si rolo es definite a esser monstrate como insignia + permissions_as_keys: Usatores con iste rolo habera accesso a... + position: Rolo superior decide resolution de conflicto in certe situationes. Certe actiones pote solo esser exequite sur rolos con un prioritate inferior webhook: events: Selige le eventos a inviar + template: Compone tu proprie carga utile JSON per interpolation de variabile. Lassar blanc pro JSON predefinite. url: Ubi le eventos essera inviate labels: account: @@ -105,10 +148,15 @@ ia: indexable: Includer messages public in le resultatos de recerca show_collections: Monstrar sequites e sequitores in le profilo unlocked: Acceptar automaticamente nove sequitores + account_alias: + acct: Pseudonymo del vetere conto + account_migration: + acct: Pseudonymo del nove conto account_warning_preset: text: Texto predefinite title: Titulo admin_account_action: + include_statuses: Includer messages reportate in le email send_email_notification: Notificar le usator per e-mail text: Advertimento personalisate type: Action @@ -118,12 +166,19 @@ ia: sensitive: Sensibile silence: Limitar suspend: Suspender + warning_preset_id: Usar un aviso predefinite announcement: + all_day: Evento quotidian + ends_at: Fin del evento + scheduled_at: Planificar publication starts_at: Initio del evento text: Annuncio + appeal: + text: Explicar perque iste decision deberea esser revertite defaults: autofollow: Invitar a sequer tu conto avatar: Pictura de profilo + bot: Isto es un conto automatisate chosen_languages: Filtrar linguas confirm_new_password: Confirmar nove contrasigno confirm_password: Confirmar contrasigno @@ -137,6 +192,7 @@ ia: header: Imagine titulo honeypot: "%{label} (non compilar)" inbox_url: URL del cassa de ingresso de repetitor + irreversible: Declinar in vice que celar locale: Lingua de interfacie max_uses: Numero max de usos new_password: Nove contrasigno @@ -145,15 +201,27 @@ ia: password: Contrasigno phrase: Parola o phrase clave setting_advanced_layout: Activar le interfacie web avantiate + setting_aggregate_reblogs: Gruppa promotiones in classificationes temporal setting_always_send_emails: Sempre inviar notificationes per e-mail + setting_auto_play_gif: Auto-reproduce GIFs animate + setting_boost_modal: Monstrar dialogo de confirmation ante promover setting_default_language: Lingua de publication + setting_default_privacy: Confidentialitate del messages + setting_default_sensitive: Sempre marcar le medios cmo sensbile + setting_delete_modal: Monstrar le dialogo de confirmation ante deler un message + setting_disable_swiping: Disactivar le movimentos per glissamento setting_display_media: Visualisation de medios setting_display_media_default: Predefinite setting_display_media_hide_all: Celar toto setting_display_media_show_all: Monstrar toto + setting_expand_spoilers: Sempre expander messages marcate con avisos de contento + setting_hide_network: Cela tu rete social + setting_reduce_motion: Reducer movimento in animationes setting_system_font_ui: Usar typo de litteras predefinite del systema setting_theme: Thema de sito setting_trends: Monstrar le tendentias de hodie + setting_unfollow_modal: Monstrar dialogo de confirmation ante cessar de sequer alcuno + setting_use_blurhash: Monstrar imagines degradate multicolor pro medios celate setting_use_pending_items: Modo lente severity: Severitate sign_in_token_attempt: Codice de securitate @@ -162,6 +230,8 @@ ia: username: Nomine de usator username_or_email: Nomine de usator o e-mail whole_word: Parola integre + email_domain_block: + with_dns_records: Includer registrationes MX e IPs del dominio featured_tag: name: Hashtag filters: @@ -169,55 +239,98 @@ ia: hide: Celar completemente warn: Celar con un advertimento form_admin_settings: + activity_api_enabled: Publicar statisticas aggregate re le activitate de usator in le API + backups_retention_period: Periodo de retention del archivo de usator bootstrap_timeline_accounts: Recommenda sempre iste contos a nove usatores + closed_registrations_message: Message personalisate quando le inscriptiones non es disponibile + content_cache_retention_period: Periodo de retention del contento remote custom_css: CSS personalisate + mascot: Personalisar le mascotte (hereditage) + media_cache_retention_period: Periodo de retention del cache multimedial + peers_api_enabled: Publicar le lista de servitores discoperite in le API profile_directory: Activar directorio de profilos + registrations_mode: Qui pote inscriber se + require_invite_text: Requirer un ration pro junger se + show_domain_blocks: Monstrar le blocadas de dominio + show_domain_blocks_rationale: Monstrar perque le dominios era blocate site_contact_email: Adresse de e-mail de contacto site_contact_username: Nomine de usator de contacto + site_extended_description: Description extense site_short_description: Description de servitor site_terms: Politica de confidentialitate site_title: Nomine de servitor status_page_url: URL del pagina de stato theme: Thema predefinite thumbnail: Miniatura de servitor + timeline_preview: Permitter accesso non authenticate a chronologias public + trendable_by_default: Permitter tendentias sin revision previe trends: Activar tendentias + trends_as_landing_page: Usar tendentias como pagina de destination + interactions: + must_be_follower: Blocar notificationes de non-sequaces + must_be_following: Blocar notificationes de gente que tu non sequer + must_be_following_dm: Blocar messages directe de gente que tu non seque invite: comment: Commento + invite_request: + text: Perque vole tu junger te? ip_block: comment: Commento ip: IP severities: no_access: Blocar le accesso + sign_up_block: Blocar inscriptiones + sign_up_requires_approval: Limitar inscriptiones severity: Regula notification_emails: + appeal: Alcuno appella un decision de moderator digest: Inviar emails compendio + favourite: Alcuno appreciava tu message + follow: Alcuno te sequeva + follow_request: Alcuno requireva de sequer te + mention: Alcuno te mentionava + pending_account: Nove conto besonia de revision + reblog: Alcuno promoveva tu message + report: Un nove reporto es inviate software_updates: all: Notificar sur tote le actualisationes critical: Notificar solmente sur actualisationes critic label: Un nove version de Mastodon es disponibile none: Nunquam notificar sur actualisationes (non recommendate) + patch: Notificar re actualisationes de correction de bug + trending_tag: Un nove tendentia require revision rule: hint: Information additional text: Regula settings: indexable: Includer pagina de profilo in le motores de recerca + show_application: Monstrar ab que app tu ha inviate un message tag: listable: Permitter a iste hashtag apparer in le recercas e suggestiones name: Hashtag + trendable: Permitter a iste hashtag de sub tendentias usable: Permitter al messages usar iste hashtag user: role: Rolo time_zone: Fuso horari user_role: + color: Color de insignia + highlighted: Monstrar le rolo como insignia sur le profilos de usator name: Nomine permissions_as_keys: Permissiones position: Prioritate webhook: events: Eventos activate + template: Modello de carga utile + url: URL de extremo 'no': 'No' not_recommended: Non recommendate + overridden: Supplantate recommended: Recommendate required: mark: "*" text: requirite + title: + sessions: + webauthn: Usa un de tu claves de securitate pro acceder 'yes': Si diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml index 5e35bc14c0..caf4c54299 100644 --- a/config/locales/simple_form.ja.yml +++ b/config/locales/simple_form.ja.yml @@ -77,10 +77,13 @@ ja: warn: フィルタに一致した投稿を非表示にし、フィルタのタイトルを含む警告を表示します form_admin_settings: activity_api_enabled: 週単位でローカルで公開された投稿数、アクティブユーザー数、新規登録者数を表示します + backups_retention_period: ユーザーには、後でダウンロードするために投稿のアーカイブを生成する機能があります。正の値に設定すると、これらのアーカイブは指定された日数後に自動的にストレージから削除されます。 bootstrap_timeline_accounts: これらのアカウントは、新しいユーザー向けのおすすめユーザーの一番上にピン留めされます。 closed_registrations_message: アカウント作成を停止している時に表示されます + content_cache_retention_period: 他のサーバーからのすべての投稿(ブーストや返信を含む)は、指定された日数が経過すると、ローカルユーザーとのやりとりに関係なく削除されます。これには、ローカルユーザーがブックマークやお気に入りとして登録した投稿も含まれます。異なるサーバーのユーザー間の非公開な変身も失われ、復元することは不可能です。この設定の使用は特別な目的のインスタンスのためのものであり、一般的な目的のサーバーで使用するした場合、多くのユーザーの期待を裏切ることになります。 custom_css: ウェブ版のMastodonでカスタムスタイルを適用できます。 mascot: 上級者向けWebインターフェースのイラストを上書きします。 + media_cache_retention_period: リモートユーザーが投稿したメディアファイルは、あなたのサーバーにキャッシュされます。正の値を設定すると、メディアは指定した日数後に削除されます。削除後にメディアデータが要求された場合、ソースコンテンツがまだ利用可能であれば、再ダウンロードされます。リンクプレビューカードがサードパーティのサイトを更新する頻度に制限があるため、この値を少なくとも14日に設定することをお勧めします。 peers_api_enabled: このサーバーが Fediverse で遭遇したドメイン名のリストです。このサーバーが知っているだけで、特定のサーバーと連合しているかのデータは含まれません。これは一般的に Fediverse に関する統計情報を収集するサービスによって使用されます。 profile_directory: ディレクトリには、掲載する設定をしたすべてのユーザーが一覧表示されます。 require_invite_text: アカウント登録が承認制の場合、登録の際の申請事由の入力を必須にします @@ -240,6 +243,7 @@ ja: backups_retention_period: ユーザーアーカイブの保持期間 bootstrap_timeline_accounts: おすすめユーザーに常に表示するアカウント closed_registrations_message: アカウント作成を停止している時のカスタムメッセージ + content_cache_retention_period: リモートコンテンツの保存期間 custom_css: カスタムCSS mascot: カスタムマスコット(レガシー) media_cache_retention_period: メディアキャッシュの保持期間 diff --git a/config/locales/simple_form.pt-PT.yml b/config/locales/simple_form.pt-PT.yml index 3292c48289..a26468894b 100644 --- a/config/locales/simple_form.pt-PT.yml +++ b/config/locales/simple_form.pt-PT.yml @@ -77,10 +77,13 @@ pt-PT: warn: Ocultar o conteúdo filtrado por trás de um aviso mencionando o título do filtro form_admin_settings: activity_api_enabled: Contagem, em blocos semanais, de publicações locais, utilizadores ativos e novos registos + backups_retention_period: Os utilizadores têm a possibilidade de gerar arquivos das suas mensagens para descarregar mais tarde. Quando definido para um valor positivo, estes arquivos serão automaticamente eliminados do seu armazenamento após o número de dias especificado. bootstrap_timeline_accounts: Estas contas serão destacadas no topo das recomendações aos novos utilizadores. closed_registrations_message: Apresentado quando as inscrições estiverem encerradas + content_cache_retention_period: Todas as publicações de outros servidores (incluindo boosts e respostas) serão eliminadas após o número de dias especificado, independentemente de qualquer interação do utilizador local com essas publicações. Isto inclui publicações em que um utilizador local as tenha marcado como favoritas ou adicionado aos items salvos. As menções privadas entre utilizadores de instâncias diferentes também se perderão e serão impossíveis de restaurar. A utilização desta definição destina-se a instâncias para fins especiais e quebra muitas expectativas dos utilizadores quando implementada para utilização geral. custom_css: Pode aplicar estilos personalizados na versão web do Mastodon. mascot: Sobrepõe-se à ilustração na interface web avançada. + media_cache_retention_period: Os ficheiros multimédia de publicações feitas por utilizadores remotos são armazenados em cache no seu servidor. Quando definido para um valor positivo, os ficheiros multimédia serão eliminados após o número de dias especificado. Se os ficheiros multimédia forem solicitados depois de terem sido eliminados, serão transferidos novamente, se o conteúdo de origem ainda estiver disponível. Devido a restrições sobre a frequência com que os cartões de pré-visualização de links pesquisam sites de terceiros, recomenda-se que este valor seja definido para, pelo menos, 14 dias, ou os cartões de pré-visualização de links não serão atualizados a pedido antes desse período. peers_api_enabled: Uma lista de nomes de domínio que este servidor encontrou no fediverso. Nenhum dado é incluído aqui sobre se você federa com um determinado servidor, apenas que o seu servidor o conhece. Este serviço é utilizado por serviços que recolhem estatísticas na federação, em termos gerais. profile_directory: O diretório de perfis lista todos os utilizadores que optaram por ter a sua conta a ser sugerida a outros. require_invite_text: Quando as incrições exigirem aprovação manual, faça o texto "Por que se quer juntar a nós?" da solicitação de convite ser obrigatório, em vez de opcional @@ -240,6 +243,7 @@ pt-PT: backups_retention_period: Período de retenção de arquivos de utilizador bootstrap_timeline_accounts: Recomendar sempre estas contas para novos utilizadores closed_registrations_message: Mensagem personalizada quando as inscrições não estiverem disponíveis + content_cache_retention_period: Período de retenção de conteúdos remotos custom_css: CSS personalizado mascot: Mascote personalizada (legado) media_cache_retention_period: Período de retenção de ficheiros de media em cache diff --git a/config/locales/simple_form.sq.yml b/config/locales/simple_form.sq.yml index a6c9303380..d545f2cd34 100644 --- a/config/locales/simple_form.sq.yml +++ b/config/locales/simple_form.sq.yml @@ -77,10 +77,13 @@ sq: warn: Fshihe lëndën e filtruar pas një sinjalizimi që përmend titullin e filtrit form_admin_settings: activity_api_enabled: Numër postimesh të botuar lokalisht, përdoruesish aktiv dhe regjistrimesh të reja sipas matjesh javore + backups_retention_period: Përdorues kanë aftësinë të prodhojnë arkiva të postimeve të tyre për t’i shkarkuar më vonë. Kur i jepet një vlerë pozitive, këto arkiva do të fshihen automatikisht prej depozitës tuaj pas numrit të dhënë të ditëve. bootstrap_timeline_accounts: Këto llogari do të fiksohen në krye të rekomandimeve për ndjekje nga përdorues të rinj. closed_registrations_message: Shfaqur kur mbyllen dritare regjistrimesh + content_cache_retention_period: Krejt postimet prej shërbyesve të tjerë (përfshi përforcime dhe përgjigje) do të fshihen pas numrit të caktuar të ditëve, pa marrë parasysh çfarëdo ndërveprimi përdoruesi me këto postime. Kjo përfshin postime kur një përdorues vendor u ka vënë shenjë si faqerojtës, ose të parapëlqyer. Do të humbin gjithashtu dhe përmendje private mes përdoruesish nga instanca të ndryshme dhe s’do të jetë e mundshme të rikthehen. Përdorimi i këtij rregullimi është menduar për instanca me qëllim të caktuar dhe ndërhyn në çka presin mjaft përdorues, kur sendërtohet për përdorim të përgjithshëm. custom_css: Stile vetjakë mund të aplikoni në versionin web të Mastodon-it. mascot: Anashkalon ilustrimin te ndërfaqja web e thelluar. + media_cache_retention_period: Kartela media nga postime të bëra nga përdorues të largët ruhen në një fshehtinë në shërbyesin tuaj. Kur i jepet një vlerë pozitive, media do të fshihet pas numrit të dhënë të ditëve. Nëse të dhënat e medias duhen pas fshirjes, do të rishkarkohen, nëse lënda burim mund të kihet ende. Për shkak kufizimesh mbi sa shpesh skeda paraparjesh lidhjesh ndërveprojnë me sajte palësh të treta, rekomandohet të vihet kjo vlerë të paktën 14 ditë, ose skedat e paraparjes së lidhje s’do të përditësohen duke e kërkuar para asaj kohe. peers_api_enabled: Një listë emrash përkatësish që ky shërbyes ka hasur në fedivers. Këtu s’jepen të dhëna nëse jeni i federuar me shërbyesin e dhënë, thjesht tregohet se shërbyesi juaj e njeh. Kjo përdoret nga shërbime që mbledhin statistika mbi federimin në kuptimin e përgjithshëm. profile_directory: Drejtoria e profileve paraqet krejt përdoruesit që kanë zgjedhur të jenë të zbulueshëm. require_invite_text: Kur regjistrimet lypin miratim dorazi, bëje tekstin “Përse doni të bëheni pjesë?” të detyrueshëm, në vend se opsional @@ -240,6 +243,7 @@ sq: backups_retention_period: Periudhë mbajtjeje arkivash përdoruesish bootstrap_timeline_accounts: Rekomandoju përherë këto llogari përdoruesve të rinj closed_registrations_message: Mesazh vetjak për pamundësi regjistrimesh të reja + content_cache_retention_period: Periudhë mbajtjeje lënde të largët custom_css: CSS Vetjake mascot: Simbol vetjak (e dikurshme) media_cache_retention_period: Periudhë mbajtjeje lënde media diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml index bfc2d2e6b6..e68642c2f6 100644 --- a/config/locales/simple_form.th.yml +++ b/config/locales/simple_form.th.yml @@ -77,8 +77,10 @@ th: warn: ซ่อนเนื้อหาที่กรองอยู่หลังคำเตือนที่กล่าวถึงชื่อเรื่องของตัวกรอง form_admin_settings: activity_api_enabled: จำนวนโพสต์ที่เผยแพร่ในเซิร์ฟเวอร์, ผู้ใช้ที่ใช้งานอยู่ และการลงทะเบียนใหม่ในบักเก็ตรายสัปดาห์ + backups_retention_period: ผู้ใช้มีความสามารถในการสร้างการเก็บถาวรของโพสต์ของเขาเพื่อดาวน์โหลดในภายหลัง เมื่อตั้งเป็นค่าบวก จะลบการเก็บถาวรเหล่านี้ออกจากที่เก็บข้อมูลของคุณโดยอัตโนมัติหลังจากจำนวนวันที่ระบุ bootstrap_timeline_accounts: จะปักหมุดบัญชีเหล่านี้ไว้ด้านบนสุดของคำแนะนำการติดตามของผู้ใช้ใหม่ closed_registrations_message: แสดงเมื่อมีการปิดการลงทะเบียน + content_cache_retention_period: จะลบโพสต์ทั้งหมดจากเซิร์ฟเวอร์อื่น ๆ (รวมถึงการดันและการตอบกลับ) หลังจากจำนวนวันที่ระบุ โดยไม่คำนึงถึงการโต้ตอบใด ๆ ของผู้ใช้ในเซิร์ฟเวอร์กับโพสต์เหล่านั้น สิ่งนี้รวมถึงโพสต์ที่ผู้ใช้ในเซิร์ฟเวอร์ได้ทำเครื่องหมายโพสต์ว่าเป็นที่คั่นหน้าหรือรายการโปรด การกล่าวถึงแบบส่วนตัวระหว่างผู้ใช้จากอินสแตนซ์ที่แตกต่างกันจะหายไปและไม่สามารถคืนค่าได้เช่นกัน การใช้การตั้งค่านี้มีไว้สำหรับอินสแตนซ์ที่มีวัตถุประสงค์พิเศษและทำลายความคาดหวังของผู้ใช้จำนวนมากเมื่อนำไปใช้สำหรับการใช้งานที่มีวัตถุประสงค์ทั่วไป custom_css: คุณสามารถนำไปใช้ลักษณะที่กำหนดเองใน Mastodon รุ่นเว็บ mascot: เขียนทับภาพประกอบในส่วนติดต่อเว็บขั้นสูง peers_api_enabled: รายการชื่อโดเมนที่เซิร์ฟเวอร์นี้พบในจักรวาลสหพันธ์ ไม่มีข้อมูลรวมอยู่ที่นี่เกี่ยวกับว่าคุณติดต่อกับเซิร์ฟเวอร์ที่กำหนดหรือไม่ เพียงแค่ว่าเซิร์ฟเวอร์ของคุณทราบเกี่ยวกับเซิร์ฟเวอร์ที่กำหนด มีการใช้สิ่งนี้โดยบริการที่เก็บรวบรวมสถิติในการติดต่อกับภายนอกในความหมายทั่วไป diff --git a/config/locales/sk.yml b/config/locales/sk.yml index 400059770b..78e7bdb25e 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -524,6 +524,7 @@ sk: many: "%{count} poznámok" one: "%{count} poznámka" other: "%{count} poznámky" + action_log: Denník auditu action_taken_by: Zákrok vykonal/a actions: suspend_description_html: Tento účet a všetok jeho obsah bude nedostupný a nakoniec zmazaný, interaktovať s ním bude nemožné. Zvrátiteľné v rámci 30 dní. Uzatvára všetky hlásenia voči tomuto účtu. diff --git a/config/locales/sl.yml b/config/locales/sl.yml index ff23e64841..6c26511ad6 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -779,6 +779,7 @@ sl: desc_html: To se zanaša na zunanje skripte hCaptcha in lahko predstavlja tveganje za varnost in zasebnost. Poleg tega to lahko nekaterim ljudem (posebno invalidom) občutno oteži dostopnost registracijskega postopka. Zato svetujemo, da razmislite o drugih ukrepih, kot je na primer registracija na podlagi odobritve ali povabila. title: Od novih uporabnikov zahtevaj reševanje CAPTCHA za potrditev računov content_retention: + danger_zone: Območje nevarnosti preamble: Nazdor nad hrambo vsebine uporabnikov v Mastodonu. title: Hramba vsebin default_noindex: diff --git a/config/locales/sq.yml b/config/locales/sq.yml index dcacb46bf9..8319cfcaec 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -748,6 +748,7 @@ sq: desc_html: Kjo bazohet në programthe të jashtëm prej hCaptcha, çka mund të përbëjë një shqetësim për sigurinë dhe privatësinë. Veç kësaj, kjo mund ta bëjë procesin e regjistrimit në shkallë të madhe më pak të përdorshëm për disa persona (veçanërisht ata me paaftësi). Për këto arsye, ju lutemi, shihni mundësinë e masave alternative, fjala vjen, bazuar në miratim, ose regjistrim vetëm me ftesa. title: Kërko prej përdoruesve të rinj të zgjidhin një CAPTCHA, si ripohim të llogarisë të tyre content_retention: + danger_zone: Zonë rreziku preamble: Kontrolloni se si depozitohen në Mastodon lënda e prodhuar nga përdoruesit. title: Mbajtje lënde default_noindex: diff --git a/config/locales/th.yml b/config/locales/th.yml index 0d7483d79a..8a001d8755 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -1837,6 +1837,7 @@ th: explanation: นี่คือเคล็ดลับบางส่วนที่จะช่วยให้คุณเริ่มต้นใช้งาน feature_action: เรียนรู้เพิ่มเติม feature_audience: Mastodon มีความพิเศษที่ให้คุณจัดการผู้รับสารของคุณได้โดยไม่มีตัวกลาง นอกจากนี้ การติดตั้ง Mastodon บนโครงสร้างพื้นฐานของคุณจะทำให้คุณสามารถติดตาม (และติดตามโดย) เซิร์ฟเวอร์ Mastodon แห่งไหนก็ได้ที่ทำงานอยู่ โดยไม่มีใครสามารถควบคุมได้นอกจากคุณ + feature_audience_title: สร้างผู้ชมของคุณด้วยความมั่นใจ follow_action: ติดตาม follow_step: การติดตามผู้คนที่น่าสนใจคือสิ่งที่ Mastodon ให้ความสำคัญ follow_title: ปรับแต่งฟีดหน้าแรกของคุณ From 86f17e4b32eb5da3dfcd82c4be72d529d8a72565 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 10:46:17 +0200 Subject: [PATCH 06/17] Update devDependencies (non-major) (#30185) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 53 +++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 39 insertions(+), 14 deletions(-) diff --git a/yarn.lock b/yarn.lock index ddc789b5fe..26ffbcee1f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2212,16 +2212,37 @@ __metadata: linkType: hard "@formatjs/cli@npm:^6.1.1": - version: 6.2.9 - resolution: "@formatjs/cli@npm:6.2.9" + version: 6.2.10 + resolution: "@formatjs/cli@npm:6.2.10" peerDependencies: + "@glimmer/env": ^0.1.7 + "@glimmer/reference": ^0.91.1 + "@glimmer/syntax": ^0.91.1 + "@glimmer/validator": ^0.91.1 + "@vue/compiler-core": ^3.4.0 + content-tag: ^2.0.1 + ember-template-recast: ^6.1.4 vue: ^3.4.0 peerDependenciesMeta: + "@glimmer/env": + optional: true + "@glimmer/reference": + optional: true + "@glimmer/syntax": + optional: true + "@glimmer/validator": + optional: true + "@vue/compiler-core": + optional: true + content-tag: + optional: true + ember-template-recast: + optional: true vue: optional: true bin: formatjs: bin/formatjs - checksum: 10c0/498383bcdca7f8f8a748c1151be17392f71eb1861f6a23bc714280533167cba7cdc35a470a380113f6111236e721ff43cbee7b084939dac67b6a5d9b04c0587c + checksum: 10c0/34b1b0b3be25d945111c1f57913f50da7308ecd05501a27eaca210a774eb50c616b5706ba796d37ffa223ac4c5cddd5f36fe0ca8d31ad8c8ade79cdd497ccfb9 languageName: node linkType: hard @@ -3334,8 +3355,8 @@ __metadata: linkType: hard "@testing-library/jest-dom@npm:^6.0.0": - version: 6.4.2 - resolution: "@testing-library/jest-dom@npm:6.4.2" + version: 6.4.5 + resolution: "@testing-library/jest-dom@npm:6.4.5" dependencies: "@adobe/css-tools": "npm:^4.3.2" "@babel/runtime": "npm:^7.9.2" @@ -3343,7 +3364,7 @@ __metadata: chalk: "npm:^3.0.0" css.escape: "npm:^1.5.1" dom-accessibility-api: "npm:^0.6.3" - lodash: "npm:^4.17.15" + lodash: "npm:^4.17.21" redent: "npm:^3.0.0" peerDependencies: "@jest/globals": ">= 28" @@ -3362,21 +3383,25 @@ __metadata: optional: true vitest: optional: true - checksum: 10c0/e7eba527b34ce30cde94424d2ec685bdfed51daaafb7df9b68b51aec6052e99a50c8bfe654612dacdf857a1eb81d68cf294fc89de558ee3a992bf7a6019fffcc + checksum: 10c0/4cfdd44e2abab2b9d399c47cbfe686729bb65160d7df0f9e2329aaaea7702f6e852a9eefb29b468f00c1e5a5274b684f8cac76959d33299dfa909ba007ea191d languageName: node linkType: hard "@testing-library/react@npm:^15.0.0": - version: 15.0.5 - resolution: "@testing-library/react@npm:15.0.5" + version: 15.0.6 + resolution: "@testing-library/react@npm:15.0.6" dependencies: "@babel/runtime": "npm:^7.12.5" "@testing-library/dom": "npm:^10.0.0" "@types/react-dom": "npm:^18.0.0" peerDependencies: + "@types/react": ^18.0.0 react: ^18.0.0 react-dom: ^18.0.0 - checksum: 10c0/8759cc8e7e6b4d8964f151d8872ea3c91b6ef6d8fb3b9116fae53350b9a6b29e5ad45b18408c22525924d050263f7ea77cd17ca803918759f22a760f68a42227 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/3705a2272f929f2f848f5d7e6ac9829bf7ecc1725a35733ffae7e7a261d4bdab470b080558e8544edb1f9ba25db9fbc4232527df9b4ec6ab6ae4462a902a7f95 languageName: node linkType: hard @@ -11403,7 +11428,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.17.10, lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.20, lodash@npm:^4.17.21": +"lodash@npm:^4.17.10, lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.20, lodash@npm:^4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c @@ -16438,8 +16463,8 @@ __metadata: linkType: hard "stylelint@npm:^16.0.2": - version: 16.4.0 - resolution: "stylelint@npm:16.4.0" + version: 16.5.0 + resolution: "stylelint@npm:16.5.0" dependencies: "@csstools/css-parser-algorithms": "npm:^2.6.1" "@csstools/css-tokenizer": "npm:^2.2.4" @@ -16482,7 +16507,7 @@ __metadata: write-file-atomic: "npm:^5.0.1" bin: stylelint: bin/stylelint.mjs - checksum: 10c0/7e603a0d88732180b60528c9f2edfca7fdf8c966f42c260af16131854c3acb5acfa30403b1f4fd72cd1470eb9ba625ca4de84e8cb379942df54127c55afc1288 + checksum: 10c0/9281693ff6c1918e07fdcf7a950531f79678a28261a0d5bd36ca2fcf524e53d7305158d20ba890f5dd01c0ff90c09a13453dce2fe6887f4c157d8c2c0acf3666 languageName: node linkType: hard From 00c34070ae3679116f4962b5608b53fa95a61e1b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 10:46:22 +0200 Subject: [PATCH 07/17] Update eslint (non-major) (#30186) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 102 +++++++++++++++++++++++++++--------------------------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/yarn.lock b/yarn.lock index 26ffbcee1f..785df92e51 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4107,14 +4107,14 @@ __metadata: linkType: hard "@typescript-eslint/eslint-plugin@npm:^7.0.0": - version: 7.7.1 - resolution: "@typescript-eslint/eslint-plugin@npm:7.7.1" + version: 7.8.0 + resolution: "@typescript-eslint/eslint-plugin@npm:7.8.0" dependencies: "@eslint-community/regexpp": "npm:^4.10.0" - "@typescript-eslint/scope-manager": "npm:7.7.1" - "@typescript-eslint/type-utils": "npm:7.7.1" - "@typescript-eslint/utils": "npm:7.7.1" - "@typescript-eslint/visitor-keys": "npm:7.7.1" + "@typescript-eslint/scope-manager": "npm:7.8.0" + "@typescript-eslint/type-utils": "npm:7.8.0" + "@typescript-eslint/utils": "npm:7.8.0" + "@typescript-eslint/visitor-keys": "npm:7.8.0" debug: "npm:^4.3.4" graphemer: "npm:^1.4.0" ignore: "npm:^5.3.1" @@ -4127,25 +4127,25 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/11a085240e7daf4bdeb011aa53ac7cfeea6263c60d53607823f5c314eb5c9d559b28fce0d6686acb9702ee3d0cb0406534fafae61163e5a903eaf818c48194ad + checksum: 10c0/37ca22620d1834ff0baa28fa4b8fd92039a3903cb95748353de32d56bae2a81ce50d1bbaed27487eebc884e0a0f9387fcb0f1647593e4e6df5111ef674afa9f0 languageName: node linkType: hard "@typescript-eslint/parser@npm:^7.0.0": - version: 7.7.1 - resolution: "@typescript-eslint/parser@npm:7.7.1" + version: 7.8.0 + resolution: "@typescript-eslint/parser@npm:7.8.0" dependencies: - "@typescript-eslint/scope-manager": "npm:7.7.1" - "@typescript-eslint/types": "npm:7.7.1" - "@typescript-eslint/typescript-estree": "npm:7.7.1" - "@typescript-eslint/visitor-keys": "npm:7.7.1" + "@typescript-eslint/scope-manager": "npm:7.8.0" + "@typescript-eslint/types": "npm:7.8.0" + "@typescript-eslint/typescript-estree": "npm:7.8.0" + "@typescript-eslint/visitor-keys": "npm:7.8.0" debug: "npm:^4.3.4" peerDependencies: eslint: ^8.56.0 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/ace43eeb8123bbee61e936650e1d57a2cf70f2030870c6dcad8602fce3f7cdf2cce350121dbbc66cffd60bac36652f426a1c5293c45ed28998b90cd95673b5c9 + checksum: 10c0/0dd994c1b31b810c25e1b755b8d352debb7bf21a31f9a91acaec34acf4e471320bcceaa67cf64c110c0b8f5fac10a037dbabac6ec423e17adf037e59a7bce9c1 languageName: node linkType: hard @@ -4159,22 +4159,22 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:7.7.1": - version: 7.7.1 - resolution: "@typescript-eslint/scope-manager@npm:7.7.1" +"@typescript-eslint/scope-manager@npm:7.8.0": + version: 7.8.0 + resolution: "@typescript-eslint/scope-manager@npm:7.8.0" dependencies: - "@typescript-eslint/types": "npm:7.7.1" - "@typescript-eslint/visitor-keys": "npm:7.7.1" - checksum: 10c0/4032da8fce8922044a6b659c8435ba203377778d5b7de6a5572c1172f2e3cf8ddd890a0f9e083c5d5315a9c2dba323707528ee4ad3cc1be2bd334de2527ef5cb + "@typescript-eslint/types": "npm:7.8.0" + "@typescript-eslint/visitor-keys": "npm:7.8.0" + checksum: 10c0/c253b98e96d4bf0375f473ca2c4d081726f1fd926cdfa65ee14c9ee99cca8eddb763b2d238ac365daa7246bef21b0af38180d04e56e9df7443c0e6f8474d097c languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:7.7.1": - version: 7.7.1 - resolution: "@typescript-eslint/type-utils@npm:7.7.1" +"@typescript-eslint/type-utils@npm:7.8.0": + version: 7.8.0 + resolution: "@typescript-eslint/type-utils@npm:7.8.0" dependencies: - "@typescript-eslint/typescript-estree": "npm:7.7.1" - "@typescript-eslint/utils": "npm:7.7.1" + "@typescript-eslint/typescript-estree": "npm:7.8.0" + "@typescript-eslint/utils": "npm:7.8.0" debug: "npm:^4.3.4" ts-api-utils: "npm:^1.3.0" peerDependencies: @@ -4182,7 +4182,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/bd083c4106e207aa8c2a71251eca52d23c7ea905399b8c62004f3bb1e85b9c88d601db9dcecae88beef0f8362d53450bb2721aab353ee731c1665496fea3fbda + checksum: 10c0/00f6315626b64f7dbc1f7fba6f365321bb8d34141ed77545b2a07970e59a81dbdf768c1e024225ea00953750d74409ddd8a16782fc4a39261e507c04192dacab languageName: node linkType: hard @@ -4193,10 +4193,10 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:7.7.1": - version: 7.7.1 - resolution: "@typescript-eslint/types@npm:7.7.1" - checksum: 10c0/7d240503d9d0b12d68c8204167690609f02ededb77dcb035c1c8b932da08cf43553829c29a5f7889824a7337463c300343bc5abe532479726d4c83443a7e2704 +"@typescript-eslint/types@npm:7.8.0": + version: 7.8.0 + resolution: "@typescript-eslint/types@npm:7.8.0" + checksum: 10c0/b2fdbfc21957bfa46f7d8809b607ad8c8b67c51821d899064d09392edc12f28b2318a044f0cd5d523d782e84e8f0558778877944964cf38e139f88790cf9d466 languageName: node linkType: hard @@ -4219,12 +4219,12 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:7.7.1": - version: 7.7.1 - resolution: "@typescript-eslint/typescript-estree@npm:7.7.1" +"@typescript-eslint/typescript-estree@npm:7.8.0": + version: 7.8.0 + resolution: "@typescript-eslint/typescript-estree@npm:7.8.0" dependencies: - "@typescript-eslint/types": "npm:7.7.1" - "@typescript-eslint/visitor-keys": "npm:7.7.1" + "@typescript-eslint/types": "npm:7.8.0" + "@typescript-eslint/visitor-keys": "npm:7.8.0" debug: "npm:^4.3.4" globby: "npm:^11.1.0" is-glob: "npm:^4.0.3" @@ -4234,24 +4234,24 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/c6b32bd96fd13b9da0a30de01935066f7505f6214f5759e3cd019f7d1852f7bf19358765f62e51de72be47647656aa0e8f07ac0ab316c4149a4e6bd1dd12cbb6 + checksum: 10c0/1690b62679685073dcb0f62499f0b52b445b37ae6e12d02aa4acbafe3fb023cf999b01f714b6282e88f84fd934fe3e2eefb21a64455d19c348d22bbc68ca8e47 languageName: node linkType: hard -"@typescript-eslint/utils@npm:7.7.1": - version: 7.7.1 - resolution: "@typescript-eslint/utils@npm:7.7.1" +"@typescript-eslint/utils@npm:7.8.0": + version: 7.8.0 + resolution: "@typescript-eslint/utils@npm:7.8.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.4.0" "@types/json-schema": "npm:^7.0.15" "@types/semver": "npm:^7.5.8" - "@typescript-eslint/scope-manager": "npm:7.7.1" - "@typescript-eslint/types": "npm:7.7.1" - "@typescript-eslint/typescript-estree": "npm:7.7.1" + "@typescript-eslint/scope-manager": "npm:7.8.0" + "@typescript-eslint/types": "npm:7.8.0" + "@typescript-eslint/typescript-estree": "npm:7.8.0" semver: "npm:^7.6.0" peerDependencies: eslint: ^8.56.0 - checksum: 10c0/0986b8c297d6bfdbd2ac8cd3bcf447ef9b934e2dae536771d3368a5c284a0b16c0ea041f82aa100c48d05acc33198e1a3d9d721d3319ae80abba0f5e69c21633 + checksum: 10c0/31fb58388d15b082eb7bd5bce889cc11617aa1131dfc6950471541b3df64c82d1c052e2cccc230ca4ae80456d4f63a3e5dccb79899a8f3211ce36c089b7d7640 languageName: node linkType: hard @@ -4282,13 +4282,13 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:7.7.1": - version: 7.7.1 - resolution: "@typescript-eslint/visitor-keys@npm:7.7.1" +"@typescript-eslint/visitor-keys@npm:7.8.0": + version: 7.8.0 + resolution: "@typescript-eslint/visitor-keys@npm:7.8.0" dependencies: - "@typescript-eslint/types": "npm:7.7.1" + "@typescript-eslint/types": "npm:7.8.0" eslint-visitor-keys: "npm:^3.4.3" - checksum: 10c0/19cbd14ac9a234d847f457cbd880cbd98b83c331a46d2dc2d8c0e6cb54ce6159552f6dd2f7236035be1a71f13f48df4a2aa09e70ad1f1e2ff3da7c3622927bd3 + checksum: 10c0/5892fb5d9c58efaf89adb225f7dbbb77f9363961f2ff420b6b130bdd102dddd7aa8a16c46a5a71c19889d27b781e966119a89270555ea2cb5653a04d8994123d languageName: node linkType: hard @@ -7772,8 +7772,8 @@ __metadata: linkType: hard "eslint-plugin-formatjs@npm:^4.10.1": - version: 4.13.0 - resolution: "eslint-plugin-formatjs@npm:4.13.0" + version: 4.13.1 + resolution: "eslint-plugin-formatjs@npm:4.13.1" dependencies: "@formatjs/icu-messageformat-parser": "npm:2.7.6" "@formatjs/ts-transformer": "npm:3.13.12" @@ -7788,7 +7788,7 @@ __metadata: unicode-emoji-utils: "npm:^1.2.0" peerDependencies: eslint: 7 || 8 - checksum: 10c0/3dbe4ffd3e72d4ce5b14afdcf6dd5db889dd09cb15bc875f29bcc5b49295e0ae4a3eb672ed89ed33f22aacbfe655151398ca4307fd0610508e568a6e4db50aa8 + checksum: 10c0/ce18141dff84e8fe026127085c1a63279acb3a1bc0b70dc1ddce2fc65bb37d68ccf6d097231428745eda2caea42080e1c80a01a1895803155c15123a01bfeee3 languageName: node linkType: hard From 4f0d18168c39a52250b8be07558675716bf292ee Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 10:46:43 +0200 Subject: [PATCH 08/17] Update DefinitelyTyped types (non-major) (#30184) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/yarn.lock b/yarn.lock index 785df92e51..acaab739aa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3702,9 +3702,9 @@ __metadata: linkType: hard "@types/lodash@npm:^4.14.195": - version: 4.17.0 - resolution: "@types/lodash@npm:4.17.0" - checksum: 10c0/4c5b41c9a6c41e2c05d08499e96f7940bcf194dcfa84356235b630da920c2a5e05f193618cea76006719bec61c76617dff02defa9d29934f9f6a76a49291bd8f + version: 4.17.1 + resolution: "@types/lodash@npm:4.17.1" + checksum: 10c0/af2ad8a3c8d7deb170a7ec6e18afc5ae8980576e5f7fe798d8a95a1df7222c15bdf967a25a35879f575a3b64743de00145710ee461a0051e055e94e4fe253f45 languageName: node linkType: hard @@ -3760,13 +3760,13 @@ __metadata: linkType: hard "@types/pg@npm:^8.6.6": - version: 8.11.5 - resolution: "@types/pg@npm:8.11.5" + version: 8.11.6 + resolution: "@types/pg@npm:8.11.6" dependencies: "@types/node": "npm:*" pg-protocol: "npm:*" pg-types: "npm:^4.0.1" - checksum: 10c0/d64d183bee2df96cd0558231190ff629558e8c0fd3203b880f48a7d34b1eaea528d20c09b57b19c0939f369136e6c6941533592eadd71174be78d1ec0ca5e60e + checksum: 10c0/e68e057d9500b25cd776f4fcc547b4880c4f3b0c7b6e03c8a0e5e262b6189dd7a00f4edc8937ffc55a9f6a136a78d7e4a9b6bbe6a46122a95c134f7be66f6842 languageName: node linkType: hard @@ -3820,11 +3820,11 @@ __metadata: linkType: hard "@types/react-dom@npm:^18.0.0, @types/react-dom@npm:^18.2.4": - version: 18.2.25 - resolution: "@types/react-dom@npm:18.2.25" + version: 18.3.0 + resolution: "@types/react-dom@npm:18.3.0" dependencies: "@types/react": "npm:*" - checksum: 10c0/87604407eca6884c5b4d4657cb511dc5ba28ea1cfa5d0ce1fc2d659a7ad1b64ae85dcda60e3f010641f9a52a6a60dfcaa6be3b0d0de9d624475052a13dae01f4 + checksum: 10c0/6c90d2ed72c5a0e440d2c75d99287e4b5df3e7b011838cdc03ae5cd518ab52164d86990e73246b9d812eaf02ec351d74e3b4f5bd325bf341e13bf980392fd53b languageName: node linkType: hard @@ -3896,11 +3896,11 @@ __metadata: linkType: hard "@types/react-test-renderer@npm:^18.0.0": - version: 18.0.7 - resolution: "@types/react-test-renderer@npm:18.0.7" + version: 18.3.0 + resolution: "@types/react-test-renderer@npm:18.3.0" dependencies: "@types/react": "npm:*" - checksum: 10c0/45cbe963354acee2ab090979d856763c84f59ef7b63477d1fef5d0fd52760b69aa67bbd205fbd3bd36264620fce72c8e407735a9f2009c40ca50da59b0058c34 + checksum: 10c0/3c9748be52e8e659e7adf91dea6939486463264e6f633bf21c4cb116de18af7bef0595568a1e588160420b2f65289473075dda1cb417c2875df8cf7a09f5d913 languageName: node linkType: hard @@ -3923,12 +3923,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.2.79 - resolution: "@types/react@npm:18.2.79" + version: 18.3.1 + resolution: "@types/react@npm:18.3.1" dependencies: "@types/prop-types": "npm:*" csstype: "npm:^3.0.2" - checksum: 10c0/c8a8a005d8830a48cc1ef93c3510c4935a2a03e5557dbecaa8f1038450cbfcb18eb206fa7fba7077d54b8da21faeb25577e897a333392770a7797f625b62c78a + checksum: 10c0/18d856c12a4ec93f3cda2d58ef3d77a9480818afd3af895f812896fb82cfca1f35a692ab1add4ce826a4eb58a071624c7d1c8c6c4ccfb81c100d2916dc607614 languageName: node linkType: hard From e5062b713588cbdc7249a65311a2e59a08bf9731 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 6 May 2024 11:52:34 +0200 Subject: [PATCH 09/17] Fix post deletion not being deferred when those are part of an account warning (#30163) --- app/models/status.rb | 2 +- spec/models/status_spec.rb | 42 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/app/models/status.rb b/app/models/status.rb index 0bb5c0ce23..72a8d6c40e 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -266,7 +266,7 @@ class Status < ApplicationRecord end def reported? - @reported ||= Report.where(target_account: account).unresolved.exists?(['? = ANY(status_ids)', id]) + @reported ||= account.targeted_reports.unresolved.exists?(['? = ANY(status_ids)', id]) || account.strikes.exists?(['? = ANY(status_ids)', id.to_s]) end def emojis diff --git a/spec/models/status_spec.rb b/spec/models/status_spec.rb index 284576ceda..271cf8690e 100644 --- a/spec/models/status_spec.rb +++ b/spec/models/status_spec.rb @@ -205,6 +205,48 @@ RSpec.describe Status do end end + describe '#reported?' do + context 'when the status is not reported' do + it 'returns false' do + expect(subject.reported?).to be false + end + end + + context 'when the status is part of an open report' do + before do + Fabricate(:report, target_account: subject.account, status_ids: [subject.id]) + end + + it 'returns true' do + expect(subject.reported?).to be true + end + end + + context 'when the status is part of a closed report with an account warning mentioning the account' do + before do + report = Fabricate(:report, target_account: subject.account, status_ids: [subject.id]) + report.resolve!(Fabricate(:account)) + Fabricate(:account_warning, target_account: subject.account, status_ids: [subject.id], report: report) + end + + it 'returns true' do + expect(subject.reported?).to be true + end + end + + context 'when the status is part of a closed report with an account warning not mentioning the account' do + before do + report = Fabricate(:report, target_account: subject.account, status_ids: [subject.id]) + report.resolve!(Fabricate(:account)) + Fabricate(:account_warning, target_account: subject.account, report: report) + end + + it 'returns false' do + expect(subject.reported?).to be false + end + end + end + describe '.mutes_map' do subject { described_class.mutes_map([status.conversation.id], account) } From dbaa4ed891f5eb97e74600ddd4e38a9be40f9180 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 6 May 2024 07:50:45 -0400 Subject: [PATCH 10/17] Use `chewy` which relaxes ES version reqs (#30157) --- Gemfile.lock | 16 ++++++++-------- .../system_check/elasticsearch_check_spec.rb | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 27d858ed05..190888ddb8 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -167,9 +167,9 @@ GEM activesupport cbor (0.5.9.8) charlock_holmes (0.7.7) - chewy (7.5.1) + chewy (7.6.0) activesupport (>= 5.2) - elasticsearch (>= 7.12.0, < 7.14.0) + elasticsearch (>= 7.14.0, < 8) elasticsearch-dsl chunky_png (1.4.0) climate_control (1.2.0) @@ -220,14 +220,14 @@ GEM dotenv (3.1.1) drb (2.2.1) ed25519 (1.3.0) - elasticsearch (7.13.3) - elasticsearch-api (= 7.13.3) - elasticsearch-transport (= 7.13.3) - elasticsearch-api (7.13.3) + elasticsearch (7.17.10) + elasticsearch-api (= 7.17.10) + elasticsearch-transport (= 7.17.10) + elasticsearch-api (7.17.10) multi_json elasticsearch-dsl (0.1.10) - elasticsearch-transport (7.13.3) - faraday (~> 1) + elasticsearch-transport (7.17.10) + faraday (>= 1, < 3) multi_json email_spec (2.2.2) htmlentities (~> 4.3.3) diff --git a/spec/lib/admin/system_check/elasticsearch_check_spec.rb b/spec/lib/admin/system_check/elasticsearch_check_spec.rb index a885640ce0..8f210579d0 100644 --- a/spec/lib/admin/system_check/elasticsearch_check_spec.rb +++ b/spec/lib/admin/system_check/elasticsearch_check_spec.rb @@ -127,7 +127,7 @@ describe Admin::SystemCheck::ElasticsearchCheck do end def stub_elasticsearch_error - client = instance_double(Elasticsearch::Transport::Client) + client = instance_double(Elasticsearch::Client) allow(client).to receive(:info).and_raise(Elasticsearch::Transport::Transport::Error) allow(Chewy).to receive(:client).and_return(client) end From 8e4fea77e311399e4bcfff729aa06fed4e82e57c Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 6 May 2024 14:41:14 +0200 Subject: [PATCH 11/17] Fix race condition in `POST /api/v1/push/subscription` (#30166) --- .../api/v1/push/subscriptions_controller.rb | 33 ++++++++++++------- app/lib/access_token_extension.rb | 2 ++ 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/app/controllers/api/v1/push/subscriptions_controller.rb b/app/controllers/api/v1/push/subscriptions_controller.rb index 3634acf956..e1ad89ee3e 100644 --- a/app/controllers/api/v1/push/subscriptions_controller.rb +++ b/app/controllers/api/v1/push/subscriptions_controller.rb @@ -1,9 +1,12 @@ # frozen_string_literal: true class Api::V1::Push::SubscriptionsController < Api::BaseController + include Redisable + include Lockable + before_action -> { doorkeeper_authorize! :push } before_action :require_user! - before_action :set_push_subscription + before_action :set_push_subscription, only: [:show, :update] before_action :check_push_subscription, only: [:show, :update] def show @@ -11,16 +14,18 @@ class Api::V1::Push::SubscriptionsController < Api::BaseController end def create - @push_subscription&.destroy! + with_redis_lock("push_subscription:#{current_user.id}") do + destroy_web_push_subscriptions! - @push_subscription = Web::PushSubscription.create!( - endpoint: subscription_params[:endpoint], - key_p256dh: subscription_params[:keys][:p256dh], - key_auth: subscription_params[:keys][:auth], - data: data_params, - user_id: current_user.id, - access_token_id: doorkeeper_token.id - ) + @push_subscription = Web::PushSubscription.create!( + endpoint: subscription_params[:endpoint], + key_p256dh: subscription_params[:keys][:p256dh], + key_auth: subscription_params[:keys][:auth], + data: data_params, + user_id: current_user.id, + access_token_id: doorkeeper_token.id + ) + end render json: @push_subscription, serializer: REST::WebPushSubscriptionSerializer end @@ -31,14 +36,18 @@ class Api::V1::Push::SubscriptionsController < Api::BaseController end def destroy - @push_subscription&.destroy! + destroy_web_push_subscriptions! render_empty end private + def destroy_web_push_subscriptions! + doorkeeper_token.web_push_subscriptions.destroy_all + end + def set_push_subscription - @push_subscription = Web::PushSubscription.find_by(access_token_id: doorkeeper_token.id) + @push_subscription = doorkeeper_token.web_push_subscriptions.first end def check_push_subscription diff --git a/app/lib/access_token_extension.rb b/app/lib/access_token_extension.rb index f51bde4927..4e9585dd1e 100644 --- a/app/lib/access_token_extension.rb +++ b/app/lib/access_token_extension.rb @@ -6,6 +6,8 @@ module AccessTokenExtension included do include Redisable + has_many :web_push_subscriptions, class_name: 'Web::PushSubscription', inverse_of: :access_token + after_commit :push_to_streaming_api end From 30ef9fccf0c603ba917191ddbefdd497523d3d67 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 6 May 2024 14:47:19 +0200 Subject: [PATCH 12/17] Fix hashtag matching pattern matching some link anchors (#30190) --- app/models/tag.rb | 2 +- spec/models/tag_spec.rb | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/models/tag.rb b/app/models/tag.rb index 35be921e2d..3f88cb0680 100644 --- a/app/models/tag.rb +++ b/app/models/tag.rb @@ -37,7 +37,7 @@ class Tag < ApplicationRecord HASHTAG_LAST_SEQUENCE = '([[:word:]_]*[[:alpha:]][[:word:]_]*)' HASHTAG_NAME_PAT = "#{HASHTAG_FIRST_SEQUENCE}|#{HASHTAG_LAST_SEQUENCE}" - HASHTAG_RE = %r{(? Date: Mon, 6 May 2024 15:17:56 +0200 Subject: [PATCH 13/17] Implement RFC 8414 for OAuth 2.0 server metadata (#29191) --- .../well_known/oauth_metadata_controller.rb | 23 +++++++ app/presenters/oauth_metadata_presenter.rb | 67 +++++++++++++++++++ app/serializers/oauth_metadata_serializer.rb | 9 +++ config/routes.rb | 1 + .../well_known/oauth_metadata_spec.rb | 37 ++++++++++ 5 files changed, 137 insertions(+) create mode 100644 app/controllers/well_known/oauth_metadata_controller.rb create mode 100644 app/presenters/oauth_metadata_presenter.rb create mode 100644 app/serializers/oauth_metadata_serializer.rb create mode 100644 spec/requests/well_known/oauth_metadata_spec.rb diff --git a/app/controllers/well_known/oauth_metadata_controller.rb b/app/controllers/well_known/oauth_metadata_controller.rb new file mode 100644 index 0000000000..c80be2d652 --- /dev/null +++ b/app/controllers/well_known/oauth_metadata_controller.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +module WellKnown + class OauthMetadataController < ActionController::Base # rubocop:disable Rails/ApplicationController + include CacheConcern + + # Prevent `active_model_serializer`'s `ActionController::Serialization` from calling `current_user` + # and thus re-issuing session cookies + serialization_scope nil + + def show + # Due to this document potentially changing between Mastodon versions (as + # new OAuth scopes are added), we don't use expires_in to cache upstream, + # instead just caching in the rails cache: + render_with_cache( + json: ::OauthMetadataPresenter.new, + serializer: ::OauthMetadataSerializer, + content_type: 'application/json', + expires_in: 15.minutes + ) + end + end +end diff --git a/app/presenters/oauth_metadata_presenter.rb b/app/presenters/oauth_metadata_presenter.rb new file mode 100644 index 0000000000..546503bfcc --- /dev/null +++ b/app/presenters/oauth_metadata_presenter.rb @@ -0,0 +1,67 @@ +# frozen_string_literal: true + +class OauthMetadataPresenter < ActiveModelSerializers::Model + include RoutingHelper + + attributes :issuer, :authorization_endpoint, :token_endpoint, + :revocation_endpoint, :scopes_supported, + :response_types_supported, :response_modes_supported, + :grant_types_supported, :token_endpoint_auth_methods_supported, + :service_documentation, :app_registration_endpoint + + def issuer + root_url + end + + def service_documentation + 'https://docs.joinmastodon.org/' + end + + def authorization_endpoint + oauth_authorization_url + end + + def token_endpoint + oauth_token_url + end + + # As the api_v1_apps route doesn't technically conform to the specification + # for OAuth 2.0 Dynamic Client Registration defined in RFC 7591 we use a + # non-standard property for now to indicate the mastodon specific registration + # endpoint. See: https://datatracker.ietf.org/doc/html/rfc7591 + def app_registration_endpoint + api_v1_apps_url + end + + def revocation_endpoint + oauth_revoke_url + end + + def scopes_supported + doorkeeper.scopes + end + + def response_types_supported + doorkeeper.authorization_response_types + end + + def response_modes_supported + doorkeeper.authorization_response_flows.flat_map(&:response_mode_matches).uniq + end + + def grant_types_supported + grant_types_supported = doorkeeper.grant_flows.dup + grant_types_supported << 'refresh_token' if doorkeeper.refresh_token_enabled? + grant_types_supported + end + + def token_endpoint_auth_methods_supported + %w(client_secret_basic client_secret_post) + end + + private + + def doorkeeper + @doorkeeper ||= Doorkeeper.configuration + end +end diff --git a/app/serializers/oauth_metadata_serializer.rb b/app/serializers/oauth_metadata_serializer.rb new file mode 100644 index 0000000000..5f3dc7b87e --- /dev/null +++ b/app/serializers/oauth_metadata_serializer.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class OauthMetadataSerializer < ActiveModel::Serializer + attributes :issuer, :authorization_endpoint, :token_endpoint, + :revocation_endpoint, :scopes_supported, + :response_types_supported, :response_modes_supported, + :grant_types_supported, :token_endpoint_auth_methods_supported, + :service_documentation, :app_registration_endpoint +end diff --git a/config/routes.rb b/config/routes.rb index 3d3c94096c..f4662dd5da 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -62,6 +62,7 @@ Rails.application.routes.draw do tokens: 'oauth/tokens' end + get '.well-known/oauth-authorization-server', to: 'well_known/oauth_metadata#show', as: :oauth_metadata, defaults: { format: 'json' } get '.well-known/host-meta', to: 'well_known/host_meta#show', as: :host_meta, defaults: { format: 'xml' } get '.well-known/nodeinfo', to: 'well_known/node_info#index', as: :nodeinfo, defaults: { format: 'json' } get '.well-known/webfinger', to: 'well_known/webfinger#show', as: :webfinger diff --git a/spec/requests/well_known/oauth_metadata_spec.rb b/spec/requests/well_known/oauth_metadata_spec.rb new file mode 100644 index 0000000000..deef189ac9 --- /dev/null +++ b/spec/requests/well_known/oauth_metadata_spec.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe 'The /.well-known/oauth-authorization-server request' do + let(:protocol) { ENV.fetch('LOCAL_HTTPS', true) ? :https : :http } + + before do + host! ENV.fetch('LOCAL_DOMAIN') + end + + it 'returns http success with valid JSON response' do + get '/.well-known/oauth-authorization-server' + + expect(response) + .to have_http_status(200) + .and have_attributes( + media_type: 'application/json' + ) + + grant_types_supported = Doorkeeper.configuration.grant_flows.dup + grant_types_supported << 'refresh_token' if Doorkeeper.configuration.refresh_token_enabled? + + expect(body_as_json).to include( + issuer: root_url(protocol: protocol), + service_documentation: 'https://docs.joinmastodon.org/', + authorization_endpoint: oauth_authorization_url(protocol: protocol), + token_endpoint: oauth_token_url(protocol: protocol), + revocation_endpoint: oauth_revoke_url(protocol: protocol), + scopes_supported: Doorkeeper.configuration.scopes.map(&:to_s), + response_types_supported: Doorkeeper.configuration.authorization_response_types, + grant_types_supported: grant_types_supported, + # non-standard extension: + app_registration_endpoint: api_v1_apps_url(protocol: protocol) + ) + end +end From 05126d106fd972e4baf5a1cec857e44a451b90a9 Mon Sep 17 00:00:00 2001 From: Fawaz Farid Date: Mon, 6 May 2024 16:31:39 +0300 Subject: [PATCH 14/17] Redirect back after site upload deletion (#30141) --- app/controllers/admin/site_uploads_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/admin/site_uploads_controller.rb b/app/controllers/admin/site_uploads_controller.rb index a5d2cf41cf..96e61cf6bb 100644 --- a/app/controllers/admin/site_uploads_controller.rb +++ b/app/controllers/admin/site_uploads_controller.rb @@ -9,7 +9,7 @@ module Admin @site_upload.destroy! - redirect_to admin_settings_path, notice: I18n.t('admin.site_uploads.destroyed_msg') + redirect_back fallback_location: admin_settings_path, notice: I18n.t('admin.site_uploads.destroyed_msg') end private From b152f936c1361cc82e21c853335557c3ffa80409 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 6 May 2024 11:05:12 -0400 Subject: [PATCH 15/17] Migrate paperclip `_file_size` columns to bigint (#29263) Co-authored-by: Claire --- .../instance_media_attachments_measure.rb | 2 +- ...51_convert_file_size_columns_to_big_int.rb | 42 +++++++++++++++++++ db/schema.rb | 16 +++---- 3 files changed, 51 insertions(+), 9 deletions(-) create mode 100644 db/migrate/20240217175251_convert_file_size_columns_to_big_int.rb diff --git a/app/lib/admin/metrics/measure/instance_media_attachments_measure.rb b/app/lib/admin/metrics/measure/instance_media_attachments_measure.rb index 1d2dbbe414..65f444624e 100644 --- a/app/lib/admin/metrics/measure/instance_media_attachments_measure.rb +++ b/app/lib/admin/metrics/measure/instance_media_attachments_measure.rb @@ -50,7 +50,7 @@ class Admin::Metrics::Measure::InstanceMediaAttachmentsMeasure < Admin::Metrics: WHERE date_trunc('day', media_attachments.created_at)::date = axis.period AND #{account_domain_sql(params[:include_subdomains])} ) - SELECT COALESCE(SUM(size), 0) FROM new_media_attachments + SELECT COALESCE(SUM(size), 0)::bigint FROM new_media_attachments ) AS value FROM ( SELECT generate_series(date_trunc('day', :start_at::timestamp)::date, date_trunc('day', :end_at::timestamp)::date, interval '1 day') AS period diff --git a/db/migrate/20240217175251_convert_file_size_columns_to_big_int.rb b/db/migrate/20240217175251_convert_file_size_columns_to_big_int.rb new file mode 100644 index 0000000000..f8223f9c93 --- /dev/null +++ b/db/migrate/20240217175251_convert_file_size_columns_to_big_int.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +require_relative '../../lib/mastodon/migration_helpers' + +class ConvertFileSizeColumnsToBigInt < ActiveRecord::Migration[7.1] + include Mastodon::MigrationHelpers + + TABLE_COLUMN_MAPPING = [ + [:accounts, :avatar_file_size], + [:accounts, :header_file_size], + [:custom_emojis, :image_file_size], + [:imports, :data_file_size], + [:media_attachments, :file_file_size], + [:media_attachments, :thumbnail_file_size], + [:preview_cards, :image_file_size], + [:site_uploads, :file_file_size], + ].freeze + + disable_ddl_transaction! + + def migrate_columns(to_type) + TABLE_COLUMN_MAPPING.each do |column_parts| + table, column = column_parts + + # Skip this if we're resuming and already did this one. + next if column_for(table, column).sql_type == to_type.to_s + + safety_assured do + change_column_type_concurrently table, column, to_type + cleanup_concurrent_column_type_change table, column + end + end + end + + def up + migrate_columns(:bigint) + end + + def down + migrate_columns(:integer) + end +end diff --git a/db/schema.rb b/db/schema.rb index 11f1a202f7..ee41a0c3a1 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -166,11 +166,11 @@ ActiveRecord::Schema[7.1].define(version: 2024_03_22_161611) do t.string "url" t.string "avatar_file_name" t.string "avatar_content_type" - t.integer "avatar_file_size" + t.bigint "avatar_file_size" t.datetime "avatar_updated_at", precision: nil t.string "header_file_name" t.string "header_content_type" - t.integer "header_file_size" + t.bigint "header_file_size" t.datetime "header_updated_at", precision: nil t.string "avatar_remote_url" t.boolean "locked", default: false, null: false @@ -368,7 +368,7 @@ ActiveRecord::Schema[7.1].define(version: 2024_03_22_161611) do t.string "domain" t.string "image_file_name" t.string "image_content_type" - t.integer "image_file_size" + t.bigint "image_file_size" t.datetime "image_updated_at", precision: nil t.datetime "created_at", precision: nil, null: false t.datetime "updated_at", precision: nil, null: false @@ -558,7 +558,7 @@ ActiveRecord::Schema[7.1].define(version: 2024_03_22_161611) do t.datetime "updated_at", precision: nil, null: false t.string "data_file_name" t.string "data_content_type" - t.integer "data_file_size" + t.bigint "data_file_size" t.datetime "data_updated_at", precision: nil t.bigint "account_id", null: false t.boolean "overwrite", default: false, null: false @@ -635,7 +635,7 @@ ActiveRecord::Schema[7.1].define(version: 2024_03_22_161611) do t.bigint "status_id" t.string "file_file_name" t.string "file_content_type" - t.integer "file_file_size" + t.bigint "file_file_size" t.datetime "file_updated_at", precision: nil t.string "remote_url", default: "", null: false t.datetime "created_at", precision: nil, null: false @@ -651,7 +651,7 @@ ActiveRecord::Schema[7.1].define(version: 2024_03_22_161611) do t.integer "file_storage_schema_version" t.string "thumbnail_file_name" t.string "thumbnail_content_type" - t.integer "thumbnail_file_size" + t.bigint "thumbnail_file_size" t.datetime "thumbnail_updated_at", precision: nil t.string "thumbnail_remote_url" t.index ["account_id", "status_id"], name: "index_media_attachments_on_account_id_and_status_id", order: { status_id: :desc } @@ -855,7 +855,7 @@ ActiveRecord::Schema[7.1].define(version: 2024_03_22_161611) do t.string "description", default: "", null: false t.string "image_file_name" t.string "image_content_type" - t.integer "image_file_size" + t.bigint "image_file_size" t.datetime "image_updated_at", precision: nil t.integer "type", default: 0, null: false t.text "html", default: "", null: false @@ -993,7 +993,7 @@ ActiveRecord::Schema[7.1].define(version: 2024_03_22_161611) do t.string "var", default: "", null: false t.string "file_file_name" t.string "file_content_type" - t.integer "file_file_size" + t.bigint "file_file_size" t.datetime "file_updated_at", precision: nil t.json "meta" t.datetime "created_at", precision: nil, null: false From bc24c4792d0bef744ff1d39e8eb543b1b6aa98c2 Mon Sep 17 00:00:00 2001 From: Fawaz Farid Date: Mon, 6 May 2024 18:06:52 +0300 Subject: [PATCH 16/17] Allow admins to configure instance favicon and logo (#30040) --- app/helpers/application_helper.rb | 7 +++++ app/models/form/admin_settings.rb | 4 +++ app/models/site_upload.rb | 8 ++++++ app/serializers/manifest_serializer.rb | 20 ++++--------- .../admin/settings/branding/show.html.haml | 28 +++++++++++++++++++ app/views/layouts/application.html.haml | 10 +++---- config/locales/simple_form.en-GB.yml | 3 ++ config/locales/simple_form.en.yml | 2 ++ spec/helpers/application_helper_spec.rb | 24 ++++++++++++++++ 9 files changed, 87 insertions(+), 19 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 4cf959f2d8..ff351429e0 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -240,6 +240,13 @@ module ApplicationHelper EmojiFormatter.new(html, custom_emojis, other_options.merge(animate: prefers_autoplay?)).to_s end + def site_icon_path(type, size = '48') + icon = SiteUpload.find_by(var: type) + return nil unless icon + + icon.file.url(size) + end + private def storage_host_var diff --git a/app/models/form/admin_settings.rb b/app/models/form/admin_settings.rb index cb37a52217..85b913cf80 100644 --- a/app/models/form/admin_settings.rb +++ b/app/models/form/admin_settings.rb @@ -37,6 +37,8 @@ class Form::AdminSettings status_page_url captcha_enabled authorized_fetch + app_icon + favicon ).freeze INTEGER_KEYS = %i( @@ -63,6 +65,8 @@ class Form::AdminSettings UPLOAD_KEYS = %i( thumbnail mascot + app_icon + favicon ).freeze OVERRIDEN_SETTINGS = { diff --git a/app/models/site_upload.rb b/app/models/site_upload.rb index 03d472cdb2..b3926ec7ed 100644 --- a/app/models/site_upload.rb +++ b/app/models/site_upload.rb @@ -19,7 +19,15 @@ class SiteUpload < ApplicationRecord include Attachmentable + FAVICON_SIZES = [16, 32, 48].freeze + APPLE_ICON_SIZES = [57, 60, 72, 76, 114, 120, 144, 152, 167, 180, 1024].freeze + ANDROID_ICON_SIZES = [36, 48, 72, 96, 144, 192, 256, 384, 512].freeze + + APP_ICON_SIZES = (APPLE_ICON_SIZES + ANDROID_ICON_SIZES).uniq.freeze + STYLES = { + app_icon: APP_ICON_SIZES.each_with_object({}) { |size, hash| hash[size.to_s.to_sym] = "#{size}x#{size}#" }.freeze, + favicon: FAVICON_SIZES.each_with_object({}) { |size, hash| hash[size.to_s.to_sym] = "#{size}x#{size}#" }.freeze, thumbnail: { '@1x': { format: 'png', diff --git a/app/serializers/manifest_serializer.rb b/app/serializers/manifest_serializer.rb index 1c1f7d0ad5..759490228c 100644 --- a/app/serializers/manifest_serializer.rb +++ b/app/serializers/manifest_serializer.rb @@ -1,21 +1,10 @@ # frozen_string_literal: true class ManifestSerializer < ActiveModel::Serializer + include ApplicationHelper include RoutingHelper include ActionView::Helpers::TextHelper - ICON_SIZES = %w( - 36 - 48 - 72 - 96 - 144 - 192 - 256 - 384 - 512 - ).freeze - attributes :id, :name, :short_name, :icons, :theme_color, :background_color, :display, :start_url, :scope, @@ -37,9 +26,12 @@ class ManifestSerializer < ActiveModel::Serializer end def icons - ICON_SIZES.map do |size| + SiteUpload::ANDROID_ICON_SIZES.map do |size| + src = site_icon_path('app_icon', size.to_i) + src = URI.join(root_url, src).to_s if src.present? + { - src: frontend_asset_url("icons/android-chrome-#{size}x#{size}.png"), + src: src || frontend_asset_url("icons/android-chrome-#{size}x#{size}.png"), sizes: "#{size}x#{size}", type: 'image/png', purpose: 'any maskable', diff --git a/app/views/admin/settings/branding/show.html.haml b/app/views/admin/settings/branding/show.html.haml index 769c0dafe8..71aac5ead1 100644 --- a/app/views/admin/settings/branding/show.html.haml +++ b/app/views/admin/settings/branding/show.html.haml @@ -40,5 +40,33 @@ = fa_icon 'trash fw' = t('admin.site_uploads.delete') + .fields-row + .fields-row__column.fields-row__column-6.fields-group + = f.input :favicon, + as: :file, + input_html: { accept: ['image/jpeg', 'image/png', 'image/gif', 'image/webp'].join(',') }, + wrapper: :with_block_label + + .fields-row__column.fields-row__column-6.fields-group + - if @admin_settings.favicon.persisted? + = image_tag @admin_settings.favicon.file.url('48'), class: 'fields-group__thumbnail' + = link_to admin_site_upload_path(@admin_settings.favicon), data: { method: :delete }, class: 'link-button link-button--destructive' do + = fa_icon 'trash fw' + = t('admin.site_uploads.delete') + + .fields-row + .fields-row__column.fields-row__column-6.fields-group + = f.input :app_icon, + as: :file, + input_html: { accept: ['image/jpeg', 'image/png', 'image/gif', 'image/webp'].join(',') }, + wrapper: :with_block_label + + .fields-row__column.fields-row__column-6.fields-group + - if @admin_settings.app_icon.persisted? + = image_tag @admin_settings.app_icon.file.url('48'), class: 'fields-group__thumbnail' + = link_to admin_site_upload_path(@admin_settings.app_icon), data: { method: :delete }, class: 'link-button link-button--destructive' do + = fa_icon 'trash fw' + = t('admin.site_uploads.delete') + .actions = f.button :button, t('generic.save_changes'), type: :submit diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index 9d7669d685..56857b2b63 100755 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -11,13 +11,13 @@ - if storage_host? %link{ rel: 'dns-prefetch', href: storage_host }/ - %link{ rel: 'icon', href: '/favicon.ico', type: 'image/x-icon' }/ + %link{ rel: 'icon', href: site_icon_path('favicon') || '/favicon.ico', type: 'image/x-icon' }/ - - %w(16 32 48).each do |size| - %link{ rel: 'icon', sizes: "#{size}x#{size}", href: frontend_asset_path("icons/favicon-#{size}x#{size}.png"), type: 'image/png' }/ + - SiteUpload::FAVICON_SIZES.each do |size| + %link{ rel: 'icon', sizes: "#{size}x#{size}", href: site_icon_path('favicon', size.to_i) || frontend_asset_path("icons/favicon-#{size}x#{size}.png"), type: 'image/png' }/ - - %w(57 60 72 76 114 120 144 152 167 180 1024).each do |size| - %link{ rel: 'apple-touch-icon', sizes: "#{size}x#{size}", href: frontend_asset_path("icons/apple-touch-icon-#{size}x#{size}.png") }/ + - SiteUpload::APPLE_ICON_SIZES.each do |size| + %link{ rel: 'apple-touch-icon', sizes: "#{size}x#{size}", href: site_icon_path('app_icon', size.to_i) || frontend_asset_path("icons/apple-touch-icon-#{size}x#{size}.png") }/ %link{ rel: 'mask-icon', href: frontend_asset_path('images/logo-symbol-icon.svg'), color: '#6364FF' }/ %link{ rel: 'manifest', href: manifest_path(format: :json) }/ diff --git a/config/locales/simple_form.en-GB.yml b/config/locales/simple_form.en-GB.yml index f4668ccada..9aedac15f3 100644 --- a/config/locales/simple_form.en-GB.yml +++ b/config/locales/simple_form.en-GB.yml @@ -77,9 +77,12 @@ en-GB: warn: Hide the filtered content behind a warning mentioning the filter's title form_admin_settings: activity_api_enabled: Counts of locally published posts, active users, and new registrations in weekly buckets + app_icon: WEBP, PNG, GIF or JPG. Overrides the default app icon on mobile devices with a custom icon. + backups_retention_period: Keep generated user archives for the specified number of days. bootstrap_timeline_accounts: These accounts will be pinned to the top of new users' follow recommendations. closed_registrations_message: Displayed when sign-ups are closed custom_css: You can apply custom styles on the web version of Mastodon. + favicon: WEBP, PNG, GIF or JPG. Overrides the default Mastodon favicon with a custom icon. mascot: Overrides the illustration in the advanced web interface. peers_api_enabled: A list of domain names this server has encountered in the fediverse. No data is included here about whether you federate with a given server, just that your server knows about it. This is used by services that collect statistics on federation in a general sense. profile_directory: The profile directory lists all users who have opted-in to be discoverable. diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index 7304bdc22f..fdc9f61813 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -77,11 +77,13 @@ en: warn: Hide the filtered content behind a warning mentioning the filter's title form_admin_settings: activity_api_enabled: Counts of locally published posts, active users, and new registrations in weekly buckets + app_icon: WEBP, PNG, GIF or JPG. Overrides the default app icon on mobile devices with a custom icon. backups_retention_period: Users have the ability to generate archives of their posts to download later. When set to a positive value, these archives will be automatically deleted from your storage after the specified number of days. bootstrap_timeline_accounts: These accounts will be pinned to the top of new users' follow recommendations. closed_registrations_message: Displayed when sign-ups are closed content_cache_retention_period: All posts from other servers (including boosts and replies) will be deleted after the specified number of days, without regard to any local user interaction with those posts. This includes posts where a local user has marked it as bookmarks or favorites. Private mentions between users from different instances will also be lost and impossible to restore. Use of this setting is intended for special purpose instances and breaks many user expectations when implemented for general purpose use. custom_css: You can apply custom styles on the web version of Mastodon. + favicon: WEBP, PNG, GIF or JPG. Overrides the default Mastodon favicon with a custom icon. mascot: Overrides the illustration in the advanced web interface. media_cache_retention_period: Media files from posts made by remote users are cached on your server. When set to a positive value, media will be deleted after the specified number of days. If the media data is requested after it is deleted, it will be re-downloaded, if the source content is still available. Due to restrictions on how often link preview cards poll third-party sites, it is recommended to set this value to at least 14 days, or link preview cards will not be updated on demand before that time. peers_api_enabled: A list of domain names this server has encountered in the fediverse. No data is included here about whether you federate with a given server, just that your server knows about it. This is used by services that collect statistics on federation in a general sense. diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb index 9330eb0dae..56501034b2 100644 --- a/spec/helpers/application_helper_spec.rb +++ b/spec/helpers/application_helper_spec.rb @@ -285,4 +285,28 @@ describe ApplicationHelper do end end end + + describe '#site_icon_path' do + context 'when an icon exists' do + let!(:favicon) { Fabricate(:site_upload, var: 'favicon') } + + it 'returns the URL of the icon' do + expect(helper.site_icon_path('favicon')).to eq(favicon.file.url('48')) + end + + it 'returns the URL of the icon with size parameter' do + expect(helper.site_icon_path('favicon', 16)).to eq(favicon.file.url('16')) + end + end + + context 'when an icon does not exist' do + it 'returns nil' do + expect(helper.site_icon_path('favicon')).to be_nil + end + + it 'returns nil with size parameter' do + expect(helper.site_icon_path('favicon', 16)).to be_nil + end + end + end end From 2fe1b8d1695d8faa452a69872fde94ccc4611576 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 6 May 2024 17:19:15 +0200 Subject: [PATCH 17/17] Add API to get multiple accounts and statuses (#27871) Co-authored-by: noellabo --- app/controllers/api/v1/accounts_controller.rb | 30 ++++++++++++++++--- app/controllers/api/v1/statuses_controller.rb | 29 ++++++++++++++++-- .../concerns/status/threading_concern.rb | 27 +++++++++++------ config/routes/api.rb | 4 +-- spec/requests/api/v1/accounts_spec.rb | 16 ++++++++++ spec/requests/api/v1/statuses_spec.rb | 16 ++++++++++ 6 files changed, 104 insertions(+), 18 deletions(-) diff --git a/app/controllers/api/v1/accounts_controller.rb b/app/controllers/api/v1/accounts_controller.rb index 23fc85b475..be7b302d3b 100644 --- a/app/controllers/api/v1/accounts_controller.rb +++ b/app/controllers/api/v1/accounts_controller.rb @@ -9,16 +9,22 @@ class Api::V1::AccountsController < Api::BaseController before_action -> { doorkeeper_authorize! :follow, :write, :'write:blocks' }, only: [:block, :unblock] before_action -> { doorkeeper_authorize! :write, :'write:accounts' }, only: [:create] - before_action :require_user!, except: [:show, :create] - before_action :set_account, except: [:create] - before_action :check_account_approval, except: [:create] - before_action :check_account_confirmation, except: [:create] + before_action :require_user!, except: [:index, :show, :create] + before_action :set_account, except: [:index, :create] + before_action :set_accounts, only: [:index] + before_action :check_account_approval, except: [:index, :create] + before_action :check_account_confirmation, except: [:index, :create] before_action :check_enabled_registrations, only: [:create] + before_action :check_accounts_limit, only: [:index] skip_before_action :require_authenticated_user!, only: :create override_rate_limit_headers :follow, family: :follows + def index + render json: @accounts, each_serializer: REST::AccountSerializer + end + def show cache_if_unauthenticated! render json: @account, serializer: REST::AccountSerializer @@ -79,6 +85,10 @@ class Api::V1::AccountsController < Api::BaseController @account = Account.find(params[:id]) end + def set_accounts + @accounts = Account.where(id: account_ids).without_unapproved + end + def check_account_approval raise(ActiveRecord::RecordNotFound) if @account.local? && @account.user_pending? end @@ -87,10 +97,22 @@ class Api::V1::AccountsController < Api::BaseController raise(ActiveRecord::RecordNotFound) if @account.local? && !@account.user_confirmed? end + def check_accounts_limit + raise(Mastodon::ValidationError) if account_ids.size > DEFAULT_ACCOUNTS_LIMIT + end + def relationships(**options) AccountRelationshipsPresenter.new([@account], current_user.account_id, **options) end + def account_ids + Array(accounts_params[:ids]).uniq.map(&:to_i) + end + + def accounts_params + params.permit(ids: []) + end + def account_params params.permit(:username, :email, :password, :agreement, :locale, :reason, :time_zone, :invite_code) end diff --git a/app/controllers/api/v1/statuses_controller.rb b/app/controllers/api/v1/statuses_controller.rb index 01c3718763..36a9ec6325 100644 --- a/app/controllers/api/v1/statuses_controller.rb +++ b/app/controllers/api/v1/statuses_controller.rb @@ -5,9 +5,11 @@ class Api::V1::StatusesController < Api::BaseController before_action -> { authorize_if_got_token! :read, :'read:statuses' }, except: [:create, :update, :destroy] before_action -> { doorkeeper_authorize! :write, :'write:statuses' }, only: [:create, :update, :destroy] - before_action :require_user!, except: [:show, :context] - before_action :set_status, only: [:show, :context] - before_action :set_thread, only: [:create] + before_action :require_user!, except: [:index, :show, :context] + before_action :set_statuses, only: [:index] + before_action :set_status, only: [:show, :context] + before_action :set_thread, only: [:create] + before_action :check_statuses_limit, only: [:index] override_rate_limit_headers :create, family: :statuses override_rate_limit_headers :update, family: :statuses @@ -23,6 +25,11 @@ class Api::V1::StatusesController < Api::BaseController DESCENDANTS_LIMIT = 60 DESCENDANTS_DEPTH_LIMIT = 20 + def index + @statuses = cache_collection(@statuses, Status) + render json: @statuses, each_serializer: REST::StatusSerializer + end + def show cache_if_unauthenticated! @status = cache_collection([@status], Status).first @@ -111,6 +118,10 @@ class Api::V1::StatusesController < Api::BaseController private + def set_statuses + @statuses = Status.permitted_statuses_from_ids(status_ids, current_account) + end + def set_status @status = Status.find(params[:id]) authorize @status, :show? @@ -125,6 +136,18 @@ class Api::V1::StatusesController < Api::BaseController render json: { error: I18n.t('statuses.errors.in_reply_not_found') }, status: 404 end + def check_statuses_limit + raise(Mastodon::ValidationError) if status_ids.size > DEFAULT_STATUSES_LIMIT + end + + def status_ids + Array(statuses_params[:ids]).uniq.map(&:to_i) + end + + def statuses_params + params.permit(ids: []) + end + def status_params params.permit( :status, diff --git a/app/models/concerns/status/threading_concern.rb b/app/models/concerns/status/threading_concern.rb index ca8c448140..478a139d63 100644 --- a/app/models/concerns/status/threading_concern.rb +++ b/app/models/concerns/status/threading_concern.rb @@ -3,6 +3,23 @@ module Status::ThreadingConcern extend ActiveSupport::Concern + class_methods do + def permitted_statuses_from_ids(ids, account, stable: false) + statuses = Status.with_accounts(ids).to_a + account_ids = statuses.map(&:account_id).uniq + domains = statuses.filter_map(&:account_domain).uniq + relations = account&.relations_map(account_ids, domains) || {} + + statuses.reject! { |status| StatusFilter.new(status, account, relations).filtered? } + + if stable + statuses.sort_by! { |status| ids.index(status.id) } + else + statuses + end + end + end + def ancestors(limit, account = nil) find_statuses_from_tree_path(ancestor_ids(limit), account) end @@ -76,15 +93,7 @@ module Status::ThreadingConcern end def find_statuses_from_tree_path(ids, account, promote: false) - statuses = Status.with_accounts(ids).to_a - account_ids = statuses.map(&:account_id).uniq - domains = statuses.filter_map(&:account_domain).uniq - relations = account&.relations_map(account_ids, domains) || {} - - statuses.reject! { |status| StatusFilter.new(status, account, relations).filtered? } - - # Order ancestors/descendants by tree path - statuses.sort_by! { |status| ids.index(status.id) } + statuses = Status.permitted_statuses_from_ids(ids, account, stable: true) # Bring self-replies to the top if promote diff --git a/config/routes/api.rb b/config/routes/api.rb index 60fb0394e7..bf3cee0c10 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -6,7 +6,7 @@ namespace :api, format: false do # JSON / REST API namespace :v1 do - resources :statuses, only: [:create, :show, :update, :destroy] do + resources :statuses, only: [:index, :create, :show, :update, :destroy] do scope module: :statuses do resources :reblogged_by, controller: :reblogged_by_accounts, only: :index resources :favourited_by, controller: :favourited_by_accounts, only: :index @@ -182,7 +182,7 @@ namespace :api, format: false do resources :familiar_followers, only: :index end - resources :accounts, only: [:create, :show] do + resources :accounts, only: [:index, :create, :show] do scope module: :accounts do resources :statuses, only: :index resources :followers, only: :index, controller: :follower_accounts diff --git a/spec/requests/api/v1/accounts_spec.rb b/spec/requests/api/v1/accounts_spec.rb index e543c41360..55f8e1c6fa 100644 --- a/spec/requests/api/v1/accounts_spec.rb +++ b/spec/requests/api/v1/accounts_spec.rb @@ -8,6 +8,22 @@ describe '/api/v1/accounts' do let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } + describe 'GET /api/v1/accounts?ids[]=:id' do + let(:account) { Fabricate(:account) } + let(:other_account) { Fabricate(:account) } + let(:scopes) { 'read:accounts' } + + it 'returns expected response' do + get '/api/v1/accounts', headers: headers, params: { ids: [account.id, other_account.id, 123_123] } + + expect(response).to have_http_status(200) + expect(body_as_json).to contain_exactly( + hash_including(id: account.id.to_s), + hash_including(id: other_account.id.to_s) + ) + end + end + describe 'GET /api/v1/accounts/:id' do context 'when logged out' do let(:account) { Fabricate(:account) } diff --git a/spec/requests/api/v1/statuses_spec.rb b/spec/requests/api/v1/statuses_spec.rb index a3b84afa26..0b2d1f90cf 100644 --- a/spec/requests/api/v1/statuses_spec.rb +++ b/spec/requests/api/v1/statuses_spec.rb @@ -9,6 +9,22 @@ describe '/api/v1/statuses' do let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, application: client_app, scopes: scopes) } let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } + describe 'GET /api/v1/statuses?ids[]=:id' do + let(:status) { Fabricate(:status) } + let(:other_status) { Fabricate(:status) } + let(:scopes) { 'read:statuses' } + + it 'returns expected response' do + get '/api/v1/statuses', headers: headers, params: { ids: [status.id, other_status.id, 123_123] } + + expect(response).to have_http_status(200) + expect(body_as_json).to contain_exactly( + hash_including(id: status.id.to_s), + hash_including(id: other_status.id.to_s) + ) + end + end + describe 'GET /api/v1/statuses/:id' do subject do get "/api/v1/statuses/#{status.id}", headers: headers