From d6404714b60b646dfc94dff107fe6a264f232040 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 19 Aug 2024 10:10:13 +0200 Subject: [PATCH 01/77] Update eslint (non-major) (#31490) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 126 +++++++++++++++++++++++++++--------------------------- 1 file changed, 63 insertions(+), 63 deletions(-) diff --git a/yarn.lock b/yarn.lock index 2de7428b66..7e393e8ad1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2199,14 +2199,14 @@ __metadata: languageName: node linkType: hard -"@es-joy/jsdoccomment@npm:~0.46.0": - version: 0.46.0 - resolution: "@es-joy/jsdoccomment@npm:0.46.0" +"@es-joy/jsdoccomment@npm:~0.48.0": + version: 0.48.0 + resolution: "@es-joy/jsdoccomment@npm:0.48.0" dependencies: comment-parser: "npm:1.4.1" esquery: "npm:^1.6.0" - jsdoc-type-pratt-parser: "npm:~4.0.0" - checksum: 10c0/a7a67936ebf6d9aaf74af018c3ac744769af3552b05ad9b88fca96b2ffdca16e724b0ff497f53634ec4cca81e98d8c471b6b6bde0fa5b725af4222ad9a0707f0 + jsdoc-type-pratt-parser: "npm:~4.1.0" + checksum: 10c0/8d87c7c0426fade009c30ab429d4ede53fd253d40b55079c02bdacdaa4c0fe904aaea5e3084cd98052f2bed6b3030c381d84f4a3251b343a71fee6f681a08bee languageName: node linkType: hard @@ -4168,14 +4168,14 @@ __metadata: linkType: hard "@typescript-eslint/eslint-plugin@npm:^7.0.0": - version: 7.17.0 - resolution: "@typescript-eslint/eslint-plugin@npm:7.17.0" + version: 7.18.0 + resolution: "@typescript-eslint/eslint-plugin@npm:7.18.0" dependencies: "@eslint-community/regexpp": "npm:^4.10.0" - "@typescript-eslint/scope-manager": "npm:7.17.0" - "@typescript-eslint/type-utils": "npm:7.17.0" - "@typescript-eslint/utils": "npm:7.17.0" - "@typescript-eslint/visitor-keys": "npm:7.17.0" + "@typescript-eslint/scope-manager": "npm:7.18.0" + "@typescript-eslint/type-utils": "npm:7.18.0" + "@typescript-eslint/utils": "npm:7.18.0" + "@typescript-eslint/visitor-keys": "npm:7.18.0" graphemer: "npm:^1.4.0" ignore: "npm:^5.3.1" natural-compare: "npm:^1.4.0" @@ -4186,25 +4186,25 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/654d589531ae45b8ca8f3969e785926b2544100a985968d86c828e2a1ff50331250e19c8b4af83a4ba17847a0047479662eb317e4ad94f6279cac03acd5cda5a + checksum: 10c0/2b37948fa1b0dab77138909dabef242a4d49ab93e4019d4ef930626f0a7d96b03e696cd027fa0087881c20e73be7be77c942606b4a76fa599e6b37f6985304c3 languageName: node linkType: hard "@typescript-eslint/parser@npm:^7.0.0": - version: 7.17.0 - resolution: "@typescript-eslint/parser@npm:7.17.0" + version: 7.18.0 + resolution: "@typescript-eslint/parser@npm:7.18.0" dependencies: - "@typescript-eslint/scope-manager": "npm:7.17.0" - "@typescript-eslint/types": "npm:7.17.0" - "@typescript-eslint/typescript-estree": "npm:7.17.0" - "@typescript-eslint/visitor-keys": "npm:7.17.0" + "@typescript-eslint/scope-manager": "npm:7.18.0" + "@typescript-eslint/types": "npm:7.18.0" + "@typescript-eslint/typescript-estree": "npm:7.18.0" + "@typescript-eslint/visitor-keys": "npm:7.18.0" debug: "npm:^4.3.4" peerDependencies: eslint: ^8.56.0 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/0cf6922412517b4c005609b035119ddd2798e1b6e74e1bccd487aa53119d27067cfd89311f00b8e96b2b044a0fb7373418a16552be86079879158b260c397418 + checksum: 10c0/370e73fca4278091bc1b657f85e7d74cd52b24257ea20c927a8e17546107ce04fbf313fec99aed0cc2a145ddbae1d3b12e9cc2c1320117636dc1281bcfd08059 languageName: node linkType: hard @@ -4218,22 +4218,22 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:7.17.0": - version: 7.17.0 - resolution: "@typescript-eslint/scope-manager@npm:7.17.0" +"@typescript-eslint/scope-manager@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/scope-manager@npm:7.18.0" dependencies: - "@typescript-eslint/types": "npm:7.17.0" - "@typescript-eslint/visitor-keys": "npm:7.17.0" - checksum: 10c0/e1a693e19dc855fe6d04b46c6c205019bfc937eda5f8b255393f8267ebddd282165568336e37b04aab544b155a807784b9c4a92129dfc7c1eef5a9e9fe052685 + "@typescript-eslint/types": "npm:7.18.0" + "@typescript-eslint/visitor-keys": "npm:7.18.0" + checksum: 10c0/038cd58c2271de146b3a594afe2c99290034033326d57ff1f902976022c8b0138ffd3cb893ae439ae41003b5e4bcc00cabf6b244ce40e8668f9412cc96d97b8e languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:7.17.0": - version: 7.17.0 - resolution: "@typescript-eslint/type-utils@npm:7.17.0" +"@typescript-eslint/type-utils@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/type-utils@npm:7.18.0" dependencies: - "@typescript-eslint/typescript-estree": "npm:7.17.0" - "@typescript-eslint/utils": "npm:7.17.0" + "@typescript-eslint/typescript-estree": "npm:7.18.0" + "@typescript-eslint/utils": "npm:7.18.0" debug: "npm:^4.3.4" ts-api-utils: "npm:^1.3.0" peerDependencies: @@ -4241,7 +4241,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/b415cf37c0922cded78735c5049cb5a5b0065e1c0ce4a81ca2a26422763ccacca8945efa45480f40530f2ec414a14d35a88a6798258aa889f7a9cf4ca4a240cd + checksum: 10c0/ad92a38007be620f3f7036f10e234abdc2fdc518787b5a7227e55fd12896dacf56e8b34578723fbf9bea8128df2510ba8eb6739439a3879eda9519476d5783fd languageName: node linkType: hard @@ -4252,10 +4252,10 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:7.17.0": - version: 7.17.0 - resolution: "@typescript-eslint/types@npm:7.17.0" - checksum: 10c0/8f734294d432b37c534f17eb2befdfe43b76874d09118d6adf7e308e5a586e9e11b7021abe4f6692a6e6226de58a15b3cfe1300939556ce1c908d9af627b7400 +"@typescript-eslint/types@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/types@npm:7.18.0" + checksum: 10c0/eb7371ac55ca77db8e59ba0310b41a74523f17e06f485a0ef819491bc3dd8909bb930120ff7d30aaf54e888167e0005aa1337011f3663dc90fb19203ce478054 languageName: node linkType: hard @@ -4278,12 +4278,12 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:7.17.0": - version: 7.17.0 - resolution: "@typescript-eslint/typescript-estree@npm:7.17.0" +"@typescript-eslint/typescript-estree@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/typescript-estree@npm:7.18.0" dependencies: - "@typescript-eslint/types": "npm:7.17.0" - "@typescript-eslint/visitor-keys": "npm:7.17.0" + "@typescript-eslint/types": "npm:7.18.0" + "@typescript-eslint/visitor-keys": "npm:7.18.0" debug: "npm:^4.3.4" globby: "npm:^11.1.0" is-glob: "npm:^4.0.3" @@ -4293,21 +4293,21 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/10967823ce00c9f8cd4a8b56bed3524c098e38cc0e27aaa49ffd8fad4e671c00226bf0330ba858948750b88dc55527ebeb62c74be8a30bac18a106d6c033ab59 + checksum: 10c0/0c7f109a2e460ec8a1524339479cf78ff17814d23c83aa5112c77fb345e87b3642616291908dcddea1e671da63686403dfb712e4a4435104f92abdfddf9aba81 languageName: node linkType: hard -"@typescript-eslint/utils@npm:7.17.0": - version: 7.17.0 - resolution: "@typescript-eslint/utils@npm:7.17.0" +"@typescript-eslint/utils@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/utils@npm:7.18.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.4.0" - "@typescript-eslint/scope-manager": "npm:7.17.0" - "@typescript-eslint/types": "npm:7.17.0" - "@typescript-eslint/typescript-estree": "npm:7.17.0" + "@typescript-eslint/scope-manager": "npm:7.18.0" + "@typescript-eslint/types": "npm:7.18.0" + "@typescript-eslint/typescript-estree": "npm:7.18.0" peerDependencies: eslint: ^8.56.0 - checksum: 10c0/1f3e22820b3ab3e47809c45e576614ad4a965f5c8634856eca5c70981386b9351a77fb172ba32345e7c5667479cf9526c673699dd38dccd0616ad6db21704e72 + checksum: 10c0/a25a6d50eb45c514469a01ff01f215115a4725fb18401055a847ddf20d1b681409c4027f349033a95c4ff7138d28c3b0a70253dfe8262eb732df4b87c547bd1e languageName: node linkType: hard @@ -4338,13 +4338,13 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:7.17.0": - version: 7.17.0 - resolution: "@typescript-eslint/visitor-keys@npm:7.17.0" +"@typescript-eslint/visitor-keys@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/visitor-keys@npm:7.18.0" dependencies: - "@typescript-eslint/types": "npm:7.17.0" + "@typescript-eslint/types": "npm:7.18.0" eslint-visitor-keys: "npm:^3.4.3" - checksum: 10c0/fa6b339d51fc3710288bb2ffaa46d639551d77965cc42c36f96c4f43aed663ff12972e8a28652a280f6ce20b7a92dc2aea14b2b4049012799be2fc2d3cbb2c60 + checksum: 10c0/538b645f8ff1d9debf264865c69a317074eaff0255e63d7407046176b0f6a6beba34a6c51d511f12444bae12a98c69891eb6f403c9f54c6c2e2849d1c1cb73c0 languageName: node linkType: hard @@ -6973,7 +6973,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.3.6, debug@npm:~4.3.6": +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.6, debug@npm:~4.3.6": version: 4.3.6 resolution: "debug@npm:4.3.6" dependencies: @@ -7969,13 +7969,13 @@ __metadata: linkType: hard "eslint-plugin-jsdoc@npm:^50.0.0": - version: 50.0.0 - resolution: "eslint-plugin-jsdoc@npm:50.0.0" + version: 50.2.2 + resolution: "eslint-plugin-jsdoc@npm:50.2.2" dependencies: - "@es-joy/jsdoccomment": "npm:~0.46.0" + "@es-joy/jsdoccomment": "npm:~0.48.0" are-docs-informative: "npm:^0.0.2" comment-parser: "npm:1.4.1" - debug: "npm:^4.3.5" + debug: "npm:^4.3.6" escape-string-regexp: "npm:^4.0.0" espree: "npm:^10.1.0" esquery: "npm:^1.6.0" @@ -7985,7 +7985,7 @@ __metadata: synckit: "npm:^0.9.1" peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - checksum: 10c0/1d476eabdf604f4a07ef9a22fb7b13ba898d0aed81b2c428d4b6aea766b908ebdc7e6e82a16bac3f83e1013c6edba6d9a15a4015cab9a94c584ebccbd7255b70 + checksum: 10c0/f41d30246f6a4b6acb55e8cd75cf4fc256315e141ab25f7740fa6fa58cdd24e08cb672b4a350da93aeb126d210bd25981310a50f97cfb108f6a7ce8668b6b90a languageName: node linkType: hard @@ -11088,10 +11088,10 @@ __metadata: languageName: node linkType: hard -"jsdoc-type-pratt-parser@npm:~4.0.0": - version: 4.0.0 - resolution: "jsdoc-type-pratt-parser@npm:4.0.0" - checksum: 10c0/b23ef7bbbe2f56d72630d1c5a233dc9fecaff399063d373c57bef136908c1b05e723dac107177303c03ccf8d75aa51507510b282aa567600477479c5ea0c36d1 +"jsdoc-type-pratt-parser@npm:~4.1.0": + version: 4.1.0 + resolution: "jsdoc-type-pratt-parser@npm:4.1.0" + checksum: 10c0/7700372d2e733a32f7ea0a1df9cec6752321a5345c11a91b2ab478a031a426e934f16d5c1f15c8566c7b2c10af9f27892a29c2c789039f595470e929a4aa60ea languageName: node linkType: hard From d57ee3141353720aa530892f2d7b724295941774 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 19 Aug 2024 10:10:15 +0200 Subject: [PATCH 02/77] Update devDependencies (non-major) (#31489) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 89 +++++++++++++++++-------------------------------------- 1 file changed, 27 insertions(+), 62 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7e393e8ad1..a9d57c16ad 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1609,15 +1609,6 @@ __metadata: languageName: node linkType: hard -"@csstools/css-parser-algorithms@npm:^2.7.1": - version: 2.7.1 - resolution: "@csstools/css-parser-algorithms@npm:2.7.1" - peerDependencies: - "@csstools/css-tokenizer": ^2.4.1 - checksum: 10c0/7d29bef6f5790ddb67d922ad232253bf910e4fa5293f5e4a5ed8b920ae9bd4e8171942df7d8943af23b42fd4e9fb460181394d20c97da9562e6ce98a875e8c47 - languageName: node - linkType: hard - "@csstools/css-parser-algorithms@npm:^3.0.0": version: 3.0.0 resolution: "@csstools/css-parser-algorithms@npm:3.0.0" @@ -1627,13 +1618,6 @@ __metadata: languageName: node linkType: hard -"@csstools/css-tokenizer@npm:^2.4.1": - version: 2.4.1 - resolution: "@csstools/css-tokenizer@npm:2.4.1" - checksum: 10c0/fe71cee85ec7372da07083d088b6a704f43e5d3d2d8071c4b8a86fae60408b559a218a43f8625bf2f0be5c7f90c8f3ad20a1aae1921119a1c02b51c310cc2b6b - languageName: node - linkType: hard - "@csstools/css-tokenizer@npm:^3.0.0": version: 3.0.0 resolution: "@csstools/css-tokenizer@npm:3.0.0" @@ -1641,16 +1625,6 @@ __metadata: languageName: node linkType: hard -"@csstools/media-query-list-parser@npm:^2.1.13": - version: 2.1.13 - resolution: "@csstools/media-query-list-parser@npm:2.1.13" - peerDependencies: - "@csstools/css-parser-algorithms": ^2.7.1 - "@csstools/css-tokenizer": ^2.4.1 - checksum: 10c0/8bf72342c15581b8f658633436d83c26a214056f6b960ff121b940271f4b1b5b07e9cc3990a73e684fb72319592f0c392408b4f0e08bbe242b2065aa456e2733 - languageName: node - linkType: hard - "@csstools/media-query-list-parser@npm:^3.0.0": version: 3.0.0 resolution: "@csstools/media-query-list-parser@npm:3.0.0" @@ -2041,15 +2015,6 @@ __metadata: languageName: node linkType: hard -"@csstools/selector-specificity@npm:^3.1.1": - version: 3.1.1 - resolution: "@csstools/selector-specificity@npm:3.1.1" - peerDependencies: - postcss-selector-parser: ^6.0.13 - checksum: 10c0/1d4a3f8015904d6aeb3203afe0e1f6db09b191d9c1557520e3e960c9204ad852df9db4cbde848643f78a26f6ea09101b4e528dbb9193052db28258dbcc8a6e1d - languageName: node - linkType: hard - "@csstools/selector-specificity@npm:^4.0.0": version: 4.0.0 resolution: "@csstools/selector-specificity@npm:4.0.0" @@ -9639,10 +9604,10 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^5.2.0, ignore@npm:^5.3.1": - version: 5.3.1 - resolution: "ignore@npm:5.3.1" - checksum: 10c0/703f7f45ffb2a27fb2c5a8db0c32e7dee66b33a225d28e8db4e1be6474795f606686a6e3bcc50e1aa12f2042db4c9d4a7d60af3250511de74620fbed052ea4cd +"ignore@npm:^5.2.0, ignore@npm:^5.3.1, ignore@npm:^5.3.2": + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 languageName: node linkType: hard @@ -11409,8 +11374,8 @@ __metadata: linkType: hard "lint-staged@npm:^15.0.0": - version: 15.2.8 - resolution: "lint-staged@npm:15.2.8" + version: 15.2.9 + resolution: "lint-staged@npm:15.2.9" dependencies: chalk: "npm:~5.3.0" commander: "npm:~12.1.0" @@ -11424,7 +11389,7 @@ __metadata: yaml: "npm:~2.5.0" bin: lint-staged: bin/lint-staged.js - checksum: 10c0/7d43f11f493d27951c746b4c077fed16ba954c0517cf2fd999034e9e7bf86fde506a797b23531a56a1fde4c24846e0f6583ce6db3bdfd42e92335b1aab367737 + checksum: 10c0/820c622378b62b826974af17f1747e2a4b0556e4fb99d101af89ad298d392ff079f580fdc576f16a27e975d726b95d73495fd524139402ff654c4649ef2f1a6a languageName: node linkType: hard @@ -14013,10 +13978,10 @@ __metadata: languageName: node linkType: hard -"postcss-resolve-nested-selector@npm:^0.1.1, postcss-resolve-nested-selector@npm:^0.1.4": - version: 0.1.4 - resolution: "postcss-resolve-nested-selector@npm:0.1.4" - checksum: 10c0/c265c35ddd474968bc4efbe4027e33f28910ef3931ffae9c448878d7c02735aeeea6d33aa6f89902e4c111e6fe87f2cc2aa72dcb3ac242d58809f1f932baa2b6 +"postcss-resolve-nested-selector@npm:^0.1.1, postcss-resolve-nested-selector@npm:^0.1.6": + version: 0.1.6 + resolution: "postcss-resolve-nested-selector@npm:0.1.6" + checksum: 10c0/84213a2bccce481b1569c595a3c547b25c6ef1cca839fbd6c82c12ab407559966e968613c7454b573aa54f38cfd7e900c1fd603f0efc9f51939ab9f93f115455 languageName: node linkType: hard @@ -14049,13 +14014,13 @@ __metadata: languageName: node linkType: hard -"postcss-selector-parser@npm:^6.0.13, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.1.0, postcss-selector-parser@npm:^6.1.1": - version: 6.1.1 - resolution: "postcss-selector-parser@npm:6.1.1" +"postcss-selector-parser@npm:^6.0.13, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.1.0, postcss-selector-parser@npm:^6.1.1, postcss-selector-parser@npm:^6.1.2": + version: 6.1.2 + resolution: "postcss-selector-parser@npm:6.1.2" dependencies: cssesc: "npm:^3.0.0" util-deprecate: "npm:^1.0.2" - checksum: 10c0/5608765e033fee35d448e1f607ffbaa750eb86901824a8bc4a911ea8bc137cb82f29239330787427c5d3695afd90d8721e190f211dbbf733e25033d8b3100763 + checksum: 10c0/523196a6bd8cf660bdf537ad95abd79e546d54180f9afb165a4ab3e651ac705d0f8b8ce6b3164fb9e3279ce482c5f751a69eb2d3a1e8eb0fd5e82294fb3ef13e languageName: node linkType: hard @@ -14089,7 +14054,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.2.15, postcss@npm:^8.4.24, postcss@npm:^8.4.40": +"postcss@npm:^8.2.15, postcss@npm:^8.4.24, postcss@npm:^8.4.41": version: 8.4.41 resolution: "postcss@npm:8.4.41" dependencies: @@ -16696,13 +16661,13 @@ __metadata: linkType: hard "stylelint@npm:^16.0.2": - version: 16.8.1 - resolution: "stylelint@npm:16.8.1" + version: 16.8.2 + resolution: "stylelint@npm:16.8.2" dependencies: - "@csstools/css-parser-algorithms": "npm:^2.7.1" - "@csstools/css-tokenizer": "npm:^2.4.1" - "@csstools/media-query-list-parser": "npm:^2.1.13" - "@csstools/selector-specificity": "npm:^3.1.1" + "@csstools/css-parser-algorithms": "npm:^3.0.0" + "@csstools/css-tokenizer": "npm:^3.0.0" + "@csstools/media-query-list-parser": "npm:^3.0.0" + "@csstools/selector-specificity": "npm:^4.0.0" "@dual-bundle/import-meta-resolve": "npm:^4.1.0" balanced-match: "npm:^2.0.0" colord: "npm:^2.9.3" @@ -16717,7 +16682,7 @@ __metadata: globby: "npm:^11.1.0" globjoin: "npm:^0.1.4" html-tags: "npm:^3.3.1" - ignore: "npm:^5.3.1" + ignore: "npm:^5.3.2" imurmurhash: "npm:^0.1.4" is-plain-object: "npm:^5.0.0" known-css-properties: "npm:^0.34.0" @@ -16726,10 +16691,10 @@ __metadata: micromatch: "npm:^4.0.7" normalize-path: "npm:^3.0.0" picocolors: "npm:^1.0.1" - postcss: "npm:^8.4.40" - postcss-resolve-nested-selector: "npm:^0.1.4" + postcss: "npm:^8.4.41" + postcss-resolve-nested-selector: "npm:^0.1.6" postcss-safe-parser: "npm:^7.0.0" - postcss-selector-parser: "npm:^6.1.1" + postcss-selector-parser: "npm:^6.1.2" postcss-value-parser: "npm:^4.2.0" resolve-from: "npm:^5.0.0" string-width: "npm:^4.2.3" @@ -16740,7 +16705,7 @@ __metadata: write-file-atomic: "npm:^5.0.1" bin: stylelint: bin/stylelint.mjs - checksum: 10c0/7bc6b0193f83420b2170026078b427d7fb22a07d3345fc99a16241625a572f2fc3e1fa1999e54c01cc2b15bd59d135715c2b140b089c17aa7f4e377ded1fc1b5 + checksum: 10c0/898cde9b5d981f249133df709458eebf2af0a525e72410ddfafd76a7308f7da493578b6a909c593cc70061556b9eda1fed4f477385ee615435f0996d9e18d8df languageName: node linkType: hard From 9cda8c0197799cd6980457bbdfa4f18db783fd42 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 19 Aug 2024 08:12:01 +0000 Subject: [PATCH 03/77] Update dependency use-debounce to v10.0.3 (#31468) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/yarn.lock b/yarn.lock index a9d57c16ad..fcbb1a160f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17577,11 +17577,11 @@ __metadata: linkType: hard "use-debounce@npm:^10.0.0": - version: 10.0.2 - resolution: "use-debounce@npm:10.0.2" + version: 10.0.3 + resolution: "use-debounce@npm:10.0.3" peerDependencies: - react: ">=16.8.0" - checksum: 10c0/2d992108557a0ad3e59bc35028c0dbc6ad12088a08d992fd52aad3881dd24663606fe71f7fd925327fb98599c6252bfa4c143649351d48e6243d7a3332594fd6 + react: "*" + checksum: 10c0/351b62c565d6dce5a21ecc21fe3e1f8db74f70c81c8f7d9dbdfc2da1cb82d883578589f6146e684d91dac534bc3c8b145ab1a36fbf4d44cbb4113827508b39aa languageName: node linkType: hard From c4e0a7dcede811f7be8165938fcf104031b059de Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 19 Aug 2024 10:29:48 +0200 Subject: [PATCH 04/77] New Crowdin Translations (automated) (#31463) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/ar.json | 38 ++++++++++---- app/javascript/mastodon/locales/ca.json | 12 +++++ app/javascript/mastodon/locales/eo.json | 10 ++++ app/javascript/mastodon/locales/gd.json | 41 +++++++++++++++ app/javascript/mastodon/locales/ig.json | 10 ++++ app/javascript/mastodon/locales/ko.json | 43 ++++++++++++--- app/javascript/mastodon/locales/sk.json | 1 + app/javascript/mastodon/locales/sl.json | 18 +++++++ app/javascript/mastodon/locales/th.json | 7 ++- app/javascript/mastodon/locales/uk.json | 37 ++++++++++--- config/locales/ar.yml | 20 +++++-- config/locales/ca.yml | 10 ++++ config/locales/doorkeeper.ar.yml | 2 +- config/locales/doorkeeper.sr-Latn.yml | 1 + config/locales/doorkeeper.sr.yml | 1 + config/locales/gd.yml | 68 ++++++++++++++++++++++++ config/locales/ko.yml | 17 ++++++ config/locales/lt.yml | 3 +- config/locales/simple_form.ar.yml | 3 +- config/locales/simple_form.sr-Latn.yml | 1 + config/locales/simple_form.sr.yml | 1 + config/locales/simple_form.uk.yml | 1 + config/locales/sl.yml | 70 +++++++++++++++++++++++++ config/locales/sq.yml | 11 ++++ config/locales/sr-Latn.yml | 2 +- config/locales/sr.yml | 32 ++++++++++- config/locales/th.yml | 34 ++++++++++++ config/locales/uk.yml | 46 ++++++++++++++++ 28 files changed, 509 insertions(+), 31 deletions(-) diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 48448196be..0269274397 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -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 {{counter} متابع} two {{counter} متابعين} few {{counter} متابعين} many {{counter} متابعين} other {{counter} متابعين}}", @@ -169,12 +169,15 @@ "confirmations.block.confirm": "حظر", "confirmations.delete.confirm": "حذف", "confirmations.delete.message": "هل أنتَ مُتأكدٌ أنك تُريدُ حَذفَ هذا المنشور؟", + "confirmations.delete.title": "أتريد حذف المنشور؟", "confirmations.delete_list.confirm": "حذف", "confirmations.delete_list.message": "هل أنتَ مُتأكدٌ أنكَ تُريدُ حَذفَ هذِهِ القائمة بشكلٍ دائم؟", + "confirmations.delete_list.title": "أتريد حذف القائمة؟", "confirmations.discard_edit_media.confirm": "تجاهل", "confirmations.discard_edit_media.message": "لديك تغييرات غير محفوظة لوصف الوسائط أو معاينتها، أتريد تجاهلها على أي حال؟", "confirmations.edit.confirm": "تعديل", "confirmations.edit.message": "التعديل في الحين سوف يُعيد كتابة الرسالة التي أنت بصدد تحريرها. متأكد من أنك تريد المواصلة؟", + "confirmations.edit.title": "هل تريد استبدال المنشور؟", "confirmations.logout.confirm": "خروج", "confirmations.logout.message": "متأكد من أنك تريد الخروج؟", "confirmations.logout.title": "أتريد المغادرة؟", @@ -184,8 +187,10 @@ "confirmations.redraft.title": "أتريد حذف وإعادة صياغة المنشور؟", "confirmations.reply.confirm": "رد", "confirmations.reply.message": "الرد في الحين سوف يُعيد كتابة الرسالة التي أنت بصدد كتابتها. متأكد من أنك تريد المواصلة؟", + "confirmations.reply.title": "هل تريد استبدال المنشور؟", "confirmations.unfollow.confirm": "إلغاء المتابعة", "confirmations.unfollow.message": "متأكد من أنك تريد إلغاء متابعة {name} ؟", + "confirmations.unfollow.title": "إلغاء متابعة المستخدم؟", "conversation.delete": "احذف المحادثة", "conversation.mark_as_read": "اعتبرها كمقروءة", "conversation.open": "اعرض المحادثة", @@ -221,8 +226,8 @@ "domain_pill.their_username": "مُعرّفُهم الفريد على الخادم. من الممكن العثور على مستخدمين بنفس اسم المستخدم على خوادم مختلفة.", "domain_pill.username": "اسم المستخدم", "domain_pill.whats_in_a_handle": "ما المقصود بالمُعرِّف؟", - "domain_pill.who_they_are": "بما أن المعالجات تقول من هو الشخص ومكان وجوده، يمكنك التفاعل مع الناس عبر الشبكة الاجتماعية لـ .", - "domain_pill.who_you_are": "لأن معالجتك تقول من أنت ومكان وجودك، يمكن الناس التفاعل معك عبر الشبكة الاجتماعية لـ .", + "domain_pill.who_they_are": "بما أن المعرفات تقول من هو الشخص ومكان وجوده، يمكنك التفاعل مع الناس عبر الويب الاجتماعي لل .", + "domain_pill.who_you_are": "بما أن معرفك يقول من أنت ومكان وجوده، يمكن للناس التفاعل معك عبر الويب الاجتماعي لل .", "domain_pill.your_handle": "عنوانك الكامل:", "domain_pill.your_server": "منزلك الرقمي، حيث تعيش جميع مشاركاتك. لا تحب هذا؟ إنقل الخوادم في أي وقت واخضر متابعينك أيضًا.", "domain_pill.your_username": "معرفك الفريد على هذا الخادم. من الممكن العثور على مستخدمين بنفس إسم المستخدم على خوادم مختلفة.", @@ -348,6 +353,9 @@ "home.pending_critical_update.link": "اطّلع على التحديثات", "home.pending_critical_update.title": "تحديث أمان حرج متوفر!", "home.show_announcements": "إظهار الإعلانات", + "ignore_notifications_modal.disclaimer": "لا يمكن لـ Mastodon إبلاغ المستخدمين بأنك قد تجاهلت إشعاراتهم. تجاهل الإشعارات لن يمنع إرسال الرسائل نفسها.", + "ignore_notifications_modal.ignore": "تجاهل الإشعارات", + "ignore_notifications_modal.limited_accounts_title": "تجاهل الإشعارات من الحسابات التي هي تحت الإشراف؟", "interaction_modal.description.favourite": "بفضل حساب على ماستدون، يمكنك إضافة هذا المنشور إلى مفضلتك لإبلاغ الناشر عن تقديرك وكذا للاحتفاظ بالمنشور إلى وقت لاحق.", "interaction_modal.description.follow": "بفضل حساب في ماستدون، يمكنك متابعة {name} وتلقي منشوراته في موجزات خيطك الرئيس.", "interaction_modal.description.reblog": "مع حساب في ماستدون، يمكنك تعزيز هذا المنشور ومشاركته مع مُتابِعيك.", @@ -434,7 +442,7 @@ "mute_modal.they_can_mention_and_follow": "سيكون بإمكانه الإشارة إليك ومتابعتك، لكنك لن تره.", "mute_modal.they_wont_know": "لن يَعرف أنه قد تم كتمه.", "mute_modal.title": "أتريد كتم المُستخدم؟", - "mute_modal.you_wont_see_mentions": "سوف لن تر المنشورات التي يُشار إليه.", + "mute_modal.you_wont_see_mentions": "لن تر المنشورات التي يُشار فيها إليه.", "mute_modal.you_wont_see_posts": "سيكون بإمكانه رؤية منشوراتك، لكنك لن ترى منشوراته.", "navigation_bar.about": "عن", "navigation_bar.advanced_interface": "افتحه في واجهة الويب المتقدمة", @@ -494,11 +502,13 @@ "notification_requests.accept": "موافقة", "notification_requests.accept_all": "قبول الكل", "notification_requests.confirm_accept_all.button": "قبول الكل", + "notification_requests.confirm_accept_all.title": "أتريد قبول طلبات الإشعار؟", "notification_requests.confirm_dismiss_all.button": "تجاهل الكل", "notification_requests.dismiss": "تخطي", "notification_requests.dismiss_all": "تجاهل الكل", "notification_requests.enter_selection_mode": "اختر", "notification_requests.exit_selection_mode": "إلغاء", + "notification_requests.explainer_for_limited_account": "تم تصفية الإشعارات من هذا الحساب لأن الحساب تم تقييده من قبل مشرف.", "notification_requests.notifications_from": "إشعارات من {name}", "notification_requests.title": "الإشعارات المصفاة", "notifications.clear": "مسح الإشعارات", @@ -506,6 +516,8 @@ "notifications.column_settings.admin.report": "التبليغات الجديدة:", "notifications.column_settings.admin.sign_up": "التسجيلات الجديدة:", "notifications.column_settings.alert": "إشعارات سطح المكتب", + "notifications.column_settings.beta.category": "ميزات تجريبية", + "notifications.column_settings.beta.grouping": "جمّع الإشعارات", "notifications.column_settings.favourite": "المفضلة:", "notifications.column_settings.filter_bar.advanced": "عرض جميع الفئات", "notifications.column_settings.filter_bar.category": "شريط التصفية السريعة", @@ -534,14 +546,21 @@ "notifications.permission_denied": "تنبيهات سطح المكتب غير متوفرة بسبب رفض أذونات المتصفح مسبقاً", "notifications.permission_denied_alert": "لا يمكن تفعيل إشعارات سطح المكتب، لأن إذن المتصفح قد تم رفضه سابقاً", "notifications.permission_required": "إشعارات سطح المكتب غير متوفرة لأنه لم يتم منح الإذن المطلوب.", + "notifications.policy.accept": "قبول", + "notifications.policy.accept_hint": "إظهار في الإشعارات", + "notifications.policy.drop": "تجاهل", + "notifications.policy.filter": "تصفية", + "notifications.policy.filter_limited_accounts_hint": "المحدودة من قبل مشرفي الخادم", + "notifications.policy.filter_limited_accounts_title": "حسابات تحت الإشراف", "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_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.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": "لا تفوت شيئاً أبداً", @@ -650,7 +669,7 @@ "report.reasons.legal_description": "أنت تعتقد أنه ينتهك قانون بلدك أو دولة الخادم", "report.reasons.other": "شيء آخر", "report.reasons.other_description": "لا تندرج هذه المشكلة ضمن فئات أخرى", - "report.reasons.spam": "إنها رسالة مزعجة", + "report.reasons.spam": "إنه منشور غير مرغوب فيه", "report.reasons.spam_description": "روابط خبيثة أو تفاعل كاذب أو ردود متكررة", "report.reasons.violation": "ينتهك قواعد الخادم", "report.reasons.violation_description": "تعلم أنه ينتهك قواعد محددة", @@ -668,6 +687,7 @@ "report.unfollow_explanation": "أنت تتابع هذا الحساب، لإزالة مَنشوراته من موجزات خيطك الرئيس، ألغ متابعته.", "report_notification.attached_statuses": "{count, plural, one {{count} منشور} other {{count} منشورات}} مرفقة", "report_notification.categories.legal": "أمور قانونية", + "report_notification.categories.legal_sentence": "محتوى غير قانوني", "report_notification.categories.other": "آخر", "report_notification.categories.other_sentence": "آخر", "report_notification.categories.spam": "مزعج", @@ -723,7 +743,7 @@ "status.embed": "إدماج", "status.favourite": "فضّل", "status.favourites": "{count, plural, zero {}one {مفضلة واحدة} two {مفضلتان} few {# مفضلات} many {# مفضلات} other {# مفضلات}}", - "status.filter": "تصفية هذه الرسالة", + "status.filter": "تصفية هذا المنشور", "status.filtered": "مُصفّى", "status.hide": "إخفاء المنشور", "status.history.created": "أنشأه {name} {date}", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 9d2553e7df..a41e7ba4dd 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -523,13 +523,18 @@ "notification_requests.confirm_accept_all.message": "Esteu a punt d'acceptar {count, plural, one {una petició de notificació} other {# peticions de notificació}}. N'esteu segurs de continuar?", "notification_requests.confirm_accept_all.title": "Accepteu peticions de notificació?", "notification_requests.confirm_dismiss_all.button": "Descarta-les totes", + "notification_requests.confirm_dismiss_all.title": "Descarta la sol·licitud de notificació?", "notification_requests.dismiss": "Ignora", + "notification_requests.dismiss_all": "Descarta-ho tot", + "notification_requests.enter_selection_mode": "Selecciona", + "notification_requests.exit_selection_mode": "Cancel·la", "notification_requests.explainer_for_limited_account": "S'han filtrat les notificacions d'aquest compte perquè un moderador l'ha limitat.", "notification_requests.explainer_for_limited_remote_account": "S'han filtrat les notificacions d'aquest compte perquè un moderador ha limitat el compte o el seu servidor.", "notification_requests.maximize": "Maximitza", "notification_requests.minimize_banner": "Minimitza el bàner de notificacions filtrades", "notification_requests.notifications_from": "Notificacions de {name}", "notification_requests.title": "Notificacions filtrades", + "notification_requests.view": "Mostra les notificacions", "notifications.clear": "Esborra les notificacions", "notifications.clear_confirmation": "Segur que vols esborrar permanentment totes les teves notificacions?", "notifications.clear_title": "Esborrar les notificacions?", @@ -566,6 +571,12 @@ "notifications.permission_denied": "Les notificacions d’escriptori no estan disponibles perquè prèviament s’ha denegat el permís al navegador", "notifications.permission_denied_alert": "No es poden activar les notificacions de l'escriptori perquè abans s'ha denegat el permís del navegador", "notifications.permission_required": "Les notificacions d'escriptori no estan disponibles perquè el permís requerit no ha estat concedit.", + "notifications.policy.accept": "Acceptar", + "notifications.policy.accept_hint": "Mostra a notificacions", + "notifications.policy.drop": "Ignorar", + "notifications.policy.drop_hint": "Envia al buit, no es tornarà a veure mai més", + "notifications.policy.filter": "Filtrar", + "notifications.policy.filter_hint": "Filtrar", "notifications.policy.filter_limited_accounts_hint": "Limitat pels moderadors del servidor", "notifications.policy.filter_limited_accounts_title": "Comptes moderats", "notifications.policy.filter_new_accounts.hint": "Creat {days, plural, one {ahir} other {durant els # dies passats}}", @@ -576,6 +587,7 @@ "notifications.policy.filter_not_following_title": "Persones que no seguiu", "notifications.policy.filter_private_mentions_hint": "Filtrat si no és que és en resposta a una menció vostra o si seguiu el remitent", "notifications.policy.filter_private_mentions_title": "Mencions privades no sol·licitades", + "notifications.policy.title": "Gestiona les notificacions des de…", "notifications_permission_banner.enable": "Activa les notificacions d’escriptori", "notifications_permission_banner.how_to_control": "Per a rebre notificacions quan Mastodon no és obert cal activar les notificacions d’escriptori. Pots controlar amb precisió quins tipus d’interaccions generen notificacions d’escriptori després d’activar el botó {icon} de dalt.", "notifications_permission_banner.title": "No et perdis mai res", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 15fe9a5ea1..0b1ffa2bc4 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -11,6 +11,7 @@ "about.not_available": "Ĉi tiu informo ne estas disponebla ĉe ĉi tiu servilo.", "about.powered_by": "Malcentrigita socia retejo pere de {mastodon}", "about.rules": "Regularo de la servilo", + "account.account_note_header": "Personaj notoj", "account.add_or_remove_from_list": "Aldoni al aŭ forigi el listoj", "account.badges.bot": "Roboto", "account.badges.group": "Grupo", @@ -34,7 +35,9 @@ "account.follow_back": "Sekvu reen", "account.followers": "Sekvantoj", "account.followers.empty": "Ankoraŭ neniu sekvas ĉi tiun uzanton.", + "account.followers_counter": "{count, plural, one{{counter} sekvanto} other {{counter} sekvantoj}}", "account.following": "Sekvatoj", + "account.following_counter": "{count, plural, one {{counter} sekvato} other {{counter} sekvatoj}}", "account.follows.empty": "La uzanto ankoraŭ ne sekvas iun ajn.", "account.go_to_profile": "Iri al profilo", "account.hide_reblogs": "Kaŝi diskonigojn de @{name}", @@ -60,6 +63,7 @@ "account.requested_follow": "{name} petis sekvi vin", "account.share": "Diskonigi la profilon de @{name}", "account.show_reblogs": "Montri diskonigojn de @{name}", + "account.statuses_counter": "{count, plural,one {{counter} afiŝo} other {{counter} afiŝoj}}", "account.unblock": "Malbloki @{name}", "account.unblock_domain": "Malbloki la domajnon {domain}", "account.unblock_short": "Malbloki", @@ -85,6 +89,9 @@ "announcement.announcement": "Anoncoj", "attachments_list.unprocessed": "(neprilaborita)", "audio.hide": "Kaŝi aŭdion", + "block_modal.show_less": "Montri malpli", + "block_modal.show_more": "Montri pli", + "block_modal.title": "Ĉu bloki uzanton?", "boost_modal.combo": "Vi povas premi {combo} por preterpasi sekvafoje", "bundle_column_error.copy_stacktrace": "Kopii la eraran raporton", "bundle_column_error.error.body": "La petita paĝo ne povas redonitis. Eble estas eraro.", @@ -144,7 +151,10 @@ "compose_form.poll.duration": "Daŭro de la balotenketo", "compose_form.poll.switch_to_multiple": "Ŝanĝi la balotenketon por permesi multajn elektojn", "compose_form.poll.switch_to_single": "Ŝanĝi la balotenketon por permesi unu solan elekton", + "compose_form.publish": "Afiŝo", "compose_form.publish_form": "Afiŝi", + "compose_form.reply": "Respondi", + "compose_form.save_changes": "Ĝisdatigi", "compose_form.spoiler.marked": "Forigi la averton de enhavo", "compose_form.spoiler.unmarked": "Aldoni averton de enhavo", "confirmation_modal.cancel": "Nuligi", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index c5af3e557c..6cbf1e7a03 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -356,6 +356,17 @@ "home.pending_critical_update.link": "Faic na h-ùrachaidhean", "home.pending_critical_update.title": "Tha ùrachadh tèarainteachd èiginneach ri fhaighinn!", "home.show_announcements": "Seall na brathan-fios", + "ignore_notifications_modal.disclaimer": "Chan urrainn do Mhastodon innse do cheachdaichean gun do leig thu seachad na brathan uapa. Cha bhac leigeil seachad nam brathan gun dèid na teachdaireachdan fhèin a chur.", + "ignore_notifications_modal.filter_instead": "Criathraich ’na àite", + "ignore_notifications_modal.filter_to_act_users": "’S urrainn dhut gabhail ri cleachdaichean, an diùltadh no gearan a dhèanamh mun dèidhinn fhathast", + "ignore_notifications_modal.filter_to_avoid_confusion": "Cuidichidh criathradh le rù-rà ma dh’fhaoidte", + "ignore_notifications_modal.filter_to_review_separately": "’S urrainn dhut sùil fa leth a thoirt air na brathran criathraichte", + "ignore_notifications_modal.ignore": "Leig seachad na brathan", + "ignore_notifications_modal.limited_accounts_title": "A bheil thu airson na brathan o chunntasan fo mhaorsainneachd a leigeil seachad?", + "ignore_notifications_modal.new_accounts_title": "A bheil thu airson na brathan o chunntasan ùra a leigeil seachad?", + "ignore_notifications_modal.not_followers_title": "A bheil thu airson na brathan o dhaoine nach eil ’gad leantainn a leigeil seachad?", + "ignore_notifications_modal.not_following_title": "A bheil thu airson na brathan o dhaoine nach eil thu a’ leantainn a leigeil seachad?", + "ignore_notifications_modal.private_mentions_title": "A bheil thu airson na brathan o iomraidhean phrìobhaideach gun iarraidh a leigeil seachad?", "interaction_modal.description.favourite": "Le cunntas air Mastodon, ’s urrainn dhut am post seo a chur ris na h-annsachdan airson innse dhan ùghdar gu bheil e a’ còrdadh dhut ’s a shàbhaladh do uaireigin eile.", "interaction_modal.description.follow": "Le cunntas air Mastodon, ’s urrainn dhut {name} a leantainn ach am faigh thu na postaichean aca nad dhachaigh.", "interaction_modal.description.reblog": "Le cunntas air Mastodon, ’s urrainn dhut am post seo a bhrosnachadh gus a cho-roinneadh leis an luchd-leantainn agad fhèin.", @@ -482,6 +493,11 @@ "notification.favourite": "Is annsa le {name} am post agad", "notification.follow": "Tha {name} ’gad leantainn a-nis", "notification.follow_request": "Dh’iarr {name} ’gad leantainn", + "notification.label.mention": "Iomradh", + "notification.label.private_mention": "Iomradh prìobhaideach", + "notification.label.private_reply": "Freagairt phrìobhaideach", + "notification.label.reply": "Freagairt", + "notification.mention": "Iomradh", "notification.moderation-warning.learn_more": "Barrachd fiosrachaidh", "notification.moderation_warning": "Fhuair thu rabhadh on mhaorsainneachd", "notification.moderation_warning.action_delete_statuses": "Chaidh cuid dhe na postaichean agad a thoirt air falbh.", @@ -502,11 +518,26 @@ "notification.status": "Phostaich {name} rud", "notification.update": "Dheasaich {name} post", "notification_requests.accept": "Gabh ris", + "notification_requests.accept_all": "Gabh ris na h-uile", + "notification_requests.accept_multiple": "{count, plural, one {Gabh ri # iarrtas} two {Gabh ri # iarrtas} few {Gabh ri # iarrtasan} other {Gabh ri # iarrtas}}", + "notification_requests.confirm_accept_all.button": "Gabh ris na h-uile", + "notification_requests.confirm_accept_all.message": "Tha thu gu bhith gabhail ri {count, plural, one {# iarrtas bratha} two {# iarrtas bratha} few {# iarrtasan bratha} other {# iarrtas bratha}} a leigeil seachad. A bheil thu cinnteach gu bheil thu airson leantainn air adhart?", + "notification_requests.confirm_accept_all.title": "A bheil thu airson gabhail ri iarrtasan bratha?", + "notification_requests.confirm_dismiss_all.button": "Leig seachad na h-uile", + "notification_requests.confirm_dismiss_all.message": "Tha thu gu bhith {count, plural, one {# iarrtas bratha} two {# iarrtas bratha} few {# iarrtasan bratha} other {# iarrtas bratha}} a leigeil seachad. Chan fhaigh thu grèim {count, plural, one {air} two {orra} few {orra} other {orra}} a-rithist gun duilgheadas. A bheil thu cinnteach gu bheil thu airson leantainn air adhart?", + "notification_requests.confirm_dismiss_all.title": "A bheil thu airson iarrtasan bratha a leigeil seachad?", "notification_requests.dismiss": "Leig seachad", + "notification_requests.dismiss_all": "Leig seachad na h-uile", + "notification_requests.dismiss_multiple": "{count, plural, one {Leig seachad # iarrtas} two {Leig seachad # iarrtas} few {Leig seachad # iarrtasan} other {Leig seachad # iarrtas}}", + "notification_requests.enter_selection_mode": "Tagh", + "notification_requests.exit_selection_mode": "Sguir dheth", + "notification_requests.explainer_for_limited_account": "Chaidh na brathan on chunntas seo a chriathradh on a chaidh an cunntas a chuingeachadh le maor.", + "notification_requests.explainer_for_limited_remote_account": "Chaidh na brathan on chunntas seo a chriathradh on a chaidh an cunntas no am frithealaiche aige a chuingeachadh le maor.", "notification_requests.maximize": "Làn-mheudaich", "notification_requests.minimize_banner": "Fìor-lùghdaich bratach nam brathan criathraichte", "notification_requests.notifications_from": "Brathan o {name}", "notification_requests.title": "Brathan criathraichte", + "notification_requests.view": "Seall na brathan", "notifications.clear": "Falamhaich na brathan", "notifications.clear_confirmation": "A bheil thu cinnteach gu bheil thu airson na brathan uile agad fhalamhachadh gu buan?", "notifications.clear_title": "A bheil thu airson na brathan fhalamhachadh?", @@ -543,6 +574,14 @@ "notifications.permission_denied": "Chan eil brathan deasga ri fhaighinn on a chaidh iarrtas ceadan a’ bhrabhsair a dhiùltadh cheana", "notifications.permission_denied_alert": "Cha ghabh brathan deasga a chur an comas on a chaidh iarrtas ceadan a’ bhrabhsair a dhiùltadh cheana", "notifications.permission_required": "Chan eil brathan deasga ri fhaighinn on nach deach an cead riatanach a thoirt seachad.", + "notifications.policy.accept": "Gabh ris", + "notifications.policy.accept_hint": "Seall sna brathan", + "notifications.policy.drop": "Leig seachad", + "notifications.policy.drop_hint": "Cuir a-mach à sealladh gu buan", + "notifications.policy.filter": "Criathraich", + "notifications.policy.filter_hint": "Cuir gu bogsa a-steach nam brathan criathraichte", + "notifications.policy.filter_limited_accounts_hint": "Cuingichte le maoir an fhrithealaiche", + "notifications.policy.filter_limited_accounts_title": "Cunntasan fo mhaorsainneachd", "notifications.policy.filter_new_accounts.hint": "A chaidh a chruthachadh o chionn {days, plural, one {# latha} two {# latha} few {# làithean} other {# latha}}", "notifications.policy.filter_new_accounts_title": "Cunntasan ùra", "notifications.policy.filter_not_followers_hint": "A’ gabhail a-staigh an fheadhainn a lean ort nas lugha na {days, plural, one {# latha} two {# latha} few {# làithean} other {# latha}} seo chaidh", @@ -551,6 +590,7 @@ "notifications.policy.filter_not_following_title": "Daoine nach eil thu a’ leantainn", "notifications.policy.filter_private_mentions_hint": "Criathraichte ach ma tha e a’ freagairt do dh’iomradh agad fhèin no ma tha thu a’ leantainn an t-seòladair", "notifications.policy.filter_private_mentions_title": "Iomraidhean prìobhaideach o choigrich", + "notifications.policy.title": "Stiùirich na brathan o…", "notifications_permission_banner.enable": "Cuir brathan deasga an comas", "notifications_permission_banner.how_to_control": "Airson brathan fhaighinn nuair nach eil Mastodon fosgailte, cuir na brathan deasga an comas. Tha an smachd agad fhèin air dè na seòrsaichean de chonaltradh a ghineas brathan deasga leis a’ phutan {icon} gu h-àrd nuair a bhios iad air an cur an comas.", "notifications_permission_banner.title": "Na caill dad gu bràth tuilleadh", @@ -791,6 +831,7 @@ "timeline_hint.remote_resource_not_displayed": "Cha dèid {resource} o fhrithealaichean eile a shealltainn.", "timeline_hint.resources.followers": "luchd-leantainn", "timeline_hint.resources.follows": "an fheadhainn gan leantainn", + "timeline_hint.resources.replies": "Cuid de na freagairtean", "timeline_hint.resources.statuses": "postaichean nas sine", "trends.counter_by_accounts": "{count, plural, one {{counter} neach} two {{counter} neach} few {{counter} daoine} other {{counter} duine}} {days, plural, one {san {days} latha} two {san {days} latha} few {sna {days} làithean} other {sna {days} latha}} seo chaidh", "trends.trending_now": "A’ treandadh an-dràsta", diff --git a/app/javascript/mastodon/locales/ig.json b/app/javascript/mastodon/locales/ig.json index 4e3e3997da..0f4731ebaa 100644 --- a/app/javascript/mastodon/locales/ig.json +++ b/app/javascript/mastodon/locales/ig.json @@ -23,15 +23,19 @@ "column.notifications": "Nziọkwà", "column.pins": "Pinned post", "column_header.pin": "Gbado na profaịlụ gị", + "column_header.show_settings": "Gosi mwube", "column_subheading.settings": "Mwube", "community.column_settings.media_only": "Media only", "compose.language.change": "Gbanwee asụsụ", "compose.language.search": "Chọọ asụsụ...", "compose.published.open": "Mepe", + "compose_form.direct_message_warning_learn_more": "Mụtakwuo", "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.", "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.", "compose_form.placeholder": "What is on your mind?", + "compose_form.poll.single": "Họrọ otu", "compose_form.publish_form": "Publish", + "compose_form.reply": "Zaa", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", "confirmation_modal.cancel": "Kagbuo", @@ -49,7 +53,9 @@ "domain_pill.username": "Ahaojiaru", "embed.instructions": "Embed this status on your website by copying the code below.", "emoji_button.activity": "Mmemme", + "emoji_button.food": "Oriri & Ọṅụṅụ", "emoji_button.label": "Tibanye emoji", + "emoji_button.people": "Mmadụ", "emoji_button.search": "Chọọ...", "emoji_button.symbols": "Ọdịmara", "empty_column.account_timeline": "No posts found", @@ -95,15 +101,19 @@ "keyboard_shortcuts.toot": "to start a brand new post", "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", + "lightbox.close": "Mechie", "lists.delete": "Hichapụ ndepụta", "lists.edit": "Dezie ndepụta", "lists.subheading": "Ndepụta gị", "navigation_bar.about": "Maka", "navigation_bar.bookmarks": "Ebenrụtụakā", + "navigation_bar.discover": "Chọpụta", "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.favourites": "Mmasị", "navigation_bar.lists": "Ndepụta", "not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.", "notification.reblog": "{name} boosted your status", + "notification_requests.enter_selection_mode": "Họrọ", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 5954edc655..a309a50263 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -356,6 +356,15 @@ "home.pending_critical_update.link": "업데이트 보기", "home.pending_critical_update.title": "긴급 보안 업데이트가 있습니다!", "home.show_announcements": "공지사항 보기", + "ignore_notifications_modal.disclaimer": "마스토돈은 당신이 그들의 알림을 무시했다는 걸 알려줄 수 없습니다. 알림을 무시한다고 해서 메시지가 오지 않는 것은 아닙니다.", + "ignore_notifications_modal.filter_instead": "대신 필터로 거르기", + "ignore_notifications_modal.filter_to_act_users": "여전히 사용자를 수락, 거절, 신고할 수 있습니다", + "ignore_notifications_modal.ignore": "알림 무시", + "ignore_notifications_modal.limited_accounts_title": "중재된 계정의 알림을 무시할까요?", + "ignore_notifications_modal.new_accounts_title": "새 계정의 알림을 무시할까요?", + "ignore_notifications_modal.not_followers_title": "나를 팔로우하지 않는 사람들의 알림을 무시할까요?", + "ignore_notifications_modal.not_following_title": "내가 팔로우하지 않는 사람들의 알림을 무시할까요?", + "ignore_notifications_modal.private_mentions_title": "요청하지 않은 개인 멘션 알림을 무시할까요?", "interaction_modal.description.favourite": "마스토돈 계정을 통해, 게시물을 좋아하는 것으로 작성자에게 호의를 표하고 나중에 보기 위해 저장할 수 있습니다.", "interaction_modal.description.follow": "마스토돈 계정을 통해, {name} 님을 팔로우 하고 그의 게시물을 홈 피드에서 받아 볼 수 있습니다.", "interaction_modal.description.reblog": "마스토돈 계정을 통해, 이 게시물을 부스트 하고 자신의 팔로워들에게 공유할 수 있습니다.", @@ -441,7 +450,7 @@ "mute_modal.indefinite": "내가 뮤트를 해제하기 전까지", "mute_modal.show_options": "옵션 표시", "mute_modal.they_can_mention_and_follow": "나를 멘션하거나 팔로우 할 수 있습니다, 다만 나에게 안 보일 것입니다.", - "mute_modal.they_wont_know": "내가 차단했다는 사실을 모를 것입니다.", + "mute_modal.they_wont_know": "내가 뮤트했다는 사실을 모를 것입니다.", "mute_modal.title": "사용자를 뮤트할까요?", "mute_modal.you_wont_see_mentions": "그를 멘션하는 게시물을 더는 보지 않게 됩니다.", "mute_modal.you_wont_see_posts": "내가 작성한 게시물을 볼 수는 있지만, 나는 그가 작성한 것을 보지 않게 됩니다.", @@ -482,6 +491,11 @@ "notification.favourite": "{name} 님이 내 게시물을 좋아합니다", "notification.follow": "{name} 님이 나를 팔로우했습니다", "notification.follow_request": "{name} 님이 팔로우 요청을 보냈습니다", + "notification.label.mention": "멘션", + "notification.label.private_mention": "개인 멘션", + "notification.label.private_reply": "개인 답글", + "notification.label.reply": "답글", + "notification.mention": "멘션", "notification.moderation-warning.learn_more": "더 알아보기", "notification.moderation_warning": "중재 경고를 받았습니다", "notification.moderation_warning.action_delete_statuses": "게시물 몇 개가 삭제되었습니다.", @@ -502,13 +516,26 @@ "notification.status": "{name} 님이 방금 게시물을 올렸습니다", "notification.update": "{name} 님이 게시물을 수정했습니다", "notification_requests.accept": "수락", + "notification_requests.accept_all": "모두 수락", + "notification_requests.accept_multiple": "{count, plural, other {#개의 요청 수락하기}}", + "notification_requests.confirm_accept_all.button": "모두 수락", + "notification_requests.confirm_accept_all.message": "{count, plural, other {#개의 요청}}을 수락하려 합니다. 계속 진행할까요?", + "notification_requests.confirm_accept_all.title": "알림 요청을 수락할까요?", + "notification_requests.confirm_dismiss_all.button": "모두 지우기", + "notification_requests.confirm_dismiss_all.message": "{count, plural, other {#개의 요청}}을 지우려고 합니다. {count, plural, other {}}다시 접근하기 어렵습니다. 계속할까요?", + "notification_requests.confirm_dismiss_all.title": "알림 요청을 지울까요?", "notification_requests.dismiss": "지우기", + "notification_requests.dismiss_all": "모두 지우기", + "notification_requests.dismiss_multiple": "{count, plural, other {#개의 요청 지우기}}", "notification_requests.enter_selection_mode": "선택", "notification_requests.exit_selection_mode": "취소", + "notification_requests.explainer_for_limited_account": "이 계정은 중재자에 의해 제한되었기 때문에 이 계정의 알림은 걸러졌습니다.", + "notification_requests.explainer_for_limited_remote_account": "이 계정 혹은 그가 속한 서버는 중재자에 의해 제한되었기 때문에 이 계정의 알림은 걸러졌습니다.", "notification_requests.maximize": "최대화", "notification_requests.minimize_banner": "걸러진 알림 배너 최소화", "notification_requests.notifications_from": "{name} 님으로부터의 알림", "notification_requests.title": "걸러진 알림", + "notification_requests.view": "알림 보기", "notifications.clear": "알림 비우기", "notifications.clear_confirmation": "정말로 알림을 삭제하시겠습니까?", "notifications.clear_title": "알림을 모두 지울까요?", @@ -546,8 +573,11 @@ "notifications.permission_denied_alert": "이전에 브라우저 권한이 거부되었기 때문에, 데스크탑 알림이 활성화 될 수 없습니다.", "notifications.permission_required": "필요한 권한이 승인되지 않아 데스크탑 알림을 사용할 수 없습니다.", "notifications.policy.accept": "허용", + "notifications.policy.accept_hint": "알림 목록에 표시", "notifications.policy.drop": "무시", + "notifications.policy.drop_hint": "공허로 보내고, 다시는 보지 않습니다", "notifications.policy.filter": "필터", + "notifications.policy.filter_hint": "걸러진 알림 목록으로 보내기", "notifications.policy.filter_limited_accounts_hint": "서버 중재자에 의해 제한됨", "notifications.policy.filter_limited_accounts_title": "중재된 계정", "notifications.policy.filter_new_accounts.hint": "{days, plural, one {하루} other {#일}} 안에 만들어진", @@ -558,6 +588,7 @@ "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": "아무것도 놓치지 마세요", @@ -795,11 +826,11 @@ "time_remaining.minutes": "{number} 분 남음", "time_remaining.moments": "남은 시간", "time_remaining.seconds": "{number} 초 남음", - "timeline_hint.remote_resource_not_displayed": "다른 서버의 {resource} 표시는 할 수 없습니다.", - "timeline_hint.resources.followers": "팔로워", - "timeline_hint.resources.follows": "팔로우", - "timeline_hint.resources.replies": "몇몇 답글", - "timeline_hint.resources.statuses": "이전 게시물", + "timeline_hint.remote_resource_not_displayed": "다른 서버의 {resource} 표시할 수 없습니다.", + "timeline_hint.resources.followers": "팔로워는", + "timeline_hint.resources.follows": "팔로우는", + "timeline_hint.resources.replies": "몇몇 답글은", + "timeline_hint.resources.statuses": "이전 게시물은", "trends.counter_by_accounts": "이전 {days}일 동안 {counter} 명의 사용자", "trends.trending_now": "지금 유행 중", "ui.beforeunload": "지금 나가면 저장되지 않은 항목을 잃게 됩니다.", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index ca3f78bc87..108b83f0b0 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -11,6 +11,7 @@ "about.not_available": "Tieto informácie neboli sprístupnené na tomto serveri.", "about.powered_by": "Decentralizovaná sociálna sieť na základe technológie {mastodon}", "about.rules": "Pravidlá servera", + "account.account_note_header": "Osobná poznámka", "account.add_or_remove_from_list": "Pridať alebo odobrať zo zoznamov", "account.badges.bot": "Bot", "account.badges.group": "Skupina", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index 51fb72f65d..353b521a1c 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -355,6 +355,9 @@ "home.pending_critical_update.link": "Glejte posodobitve", "home.pending_critical_update.title": "Na voljo je kritična varnostna posodobbitev!", "home.show_announcements": "Pokaži obvestila", + "ignore_notifications_modal.filter_to_avoid_confusion": "Filtriranje pomaga pri izogibanju morebitni zmedi", + "ignore_notifications_modal.filter_to_review_separately": "Filtrirana obvestila lahko pregledate ločeno", + "ignore_notifications_modal.ignore": "Prezri obvestila", "interaction_modal.description.favourite": "Z računom na Mastodonu lahko to objavo postavite med priljubljene in tako avtorju nakažete, da jo cenite, in jo shranite za kasneje.", "interaction_modal.description.follow": "Z računom na Mastodonu lahko sledite {name}, da prejemate njihove objave v svoj domači vir.", "interaction_modal.description.reblog": "Z računom na Mastodonu lahko izpostavite to objavo, tako da jo delite s svojimi sledilci.", @@ -481,6 +484,9 @@ "notification.favourite": "{name} je vzljubil/a vašo objavo", "notification.follow": "{name} vam sledi", "notification.follow_request": "{name} vam želi slediti", + "notification.label.private_mention": "Zasebna omemba", + "notification.label.private_reply": "Zasebni odgovor", + "notification.label.reply": "Odgovori", "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.", @@ -501,10 +507,17 @@ "notification.status": "{name} je pravkar objavil/a", "notification.update": "{name} je uredil(a) objavo", "notification_requests.accept": "Sprejmi", + "notification_requests.accept_all": "Sprejmi vse", + "notification_requests.confirm_accept_all.button": "Sprejmi vse", + "notification_requests.confirm_dismiss_all.button": "Opusti vse", "notification_requests.dismiss": "Zavrni", + "notification_requests.dismiss_all": "Opusti vse", + "notification_requests.enter_selection_mode": "Izberi", + "notification_requests.exit_selection_mode": "Prekliči", "notification_requests.maximize": "Maksimiraj", "notification_requests.notifications_from": "Obvestila od {name}", "notification_requests.title": "Filtrirana obvestila", + "notification_requests.view": "Pokaži obvestila", "notifications.clear": "Počisti obvestila", "notifications.clear_confirmation": "Ali ste prepričani, da želite trajno izbrisati vsa svoja obvestila?", "notifications.clear_title": "Želite počistiti obvestila?", @@ -541,6 +554,9 @@ "notifications.permission_denied": "Namizna obvestila niso na voljo zaradi poprej zavrnjene zahteve dovoljenja brskalnika.", "notifications.permission_denied_alert": "Namiznih obvestil ni mogoče omogočiti, ker je bilo dovoljenje brskalnika že prej zavrnjeno", "notifications.permission_required": "Namizna obvestila niso na voljo, ker zahtevano dovoljenje ni bilo podeljeno.", + "notifications.policy.accept": "Sprejmi", + "notifications.policy.accept_hint": "Pokaži med obvestili", + "notifications.policy.drop": "Prezri", "notifications.policy.filter_new_accounts.hint": "Ustvarjen v {days, plural, one {zadnjem # dnevu} two {zadnjih # dnevih} few {zadnjih # dnevih} other {zadnjih # dnevih}}", "notifications.policy.filter_new_accounts_title": "Novi računi", "notifications.policy.filter_not_followers_hint": "Vključujoč ljudi, ki vam sledijo manj kot {days, plural, one {# dan} two {# dneva} few {# dni} other {# dni}}", @@ -549,6 +565,7 @@ "notifications.policy.filter_not_following_title": "Ljudje, ki jim ne sledite", "notifications.policy.filter_private_mentions_hint": "Filtrirano, razen če je odgovor na vašo lastno omembo ali če sledite pošiljatelju", "notifications.policy.filter_private_mentions_title": "Neželene zasebne omembe", + "notifications.policy.title": "Upravljaj obvestila od ...", "notifications_permission_banner.enable": "Omogoči obvestila na namizju", "notifications_permission_banner.how_to_control": "Če želite prejemati obvestila, ko Mastodon ni odprt, omogočite namizna obvestila. Natančno lahko nadzirate, katere vrste interakcij naj tvorijo namizna obvestila; ko so omogočena, za to uporabite gumb {icon} zgoraj.", "notifications_permission_banner.title": "Nikoli ne zamudite ničesar", @@ -789,6 +806,7 @@ "timeline_hint.remote_resource_not_displayed": "{resource} z drugih strežnikov ni prikazano.", "timeline_hint.resources.followers": "sledilcev", "timeline_hint.resources.follows": "Sledi", + "timeline_hint.resources.replies": "Nekaj odgovorov", "timeline_hint.resources.statuses": "Starejše objave", "trends.counter_by_accounts": "{count, plural, one {{count} oseba} two {{count} osebi} few {{count} osebe} other {{count} oseb}} v {days, plural, one {zadnjem {day} dnevu} two {zadnjih {days} dneh} few {zadnjih {days} dneh} other {zadnjih {days} dneh}}", "trends.trending_now": "Zdaj v trendu", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 47b6a89225..9d378a67a2 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -1,5 +1,5 @@ { - "about.blocks": "เซิร์ฟเวอร์ที่มีการกลั่นกรอง", + "about.blocks": "เซิร์ฟเวอร์ที่ได้รับการกลั่นกรอง", "about.contact": "ติดต่อ:", "about.disclaimer": "Mastodon เป็นซอฟต์แวร์เสรี โอเพนซอร์ส และเครื่องหมายการค้าของ Mastodon gGmbH", "about.domain_blocks.no_reason_available": "เหตุผลไม่พร้อมใช้งาน", @@ -357,10 +357,13 @@ "home.pending_critical_update.title": "มีการอัปเดตความปลอดภัยสำคัญพร้อมใช้งาน!", "home.show_announcements": "แสดงประกาศ", "ignore_notifications_modal.filter_instead": "กรองแทน", + "ignore_notifications_modal.filter_to_act_users": "คุณจะยังสามารถยอมรับ ปฏิเสธ หรือรายงานผู้ใช้", "ignore_notifications_modal.ignore": "เพิกเฉยการแจ้งเตือน", + "ignore_notifications_modal.limited_accounts_title": "เพิกเฉยการแจ้งเตือนจากบัญชีที่ได้รับการกลั่นกรอง?", "ignore_notifications_modal.new_accounts_title": "เพิกเฉยการแจ้งเตือนจากบัญชีใหม่?", "ignore_notifications_modal.not_followers_title": "เพิกเฉยการแจ้งเตือนจากผู้คนที่ไม่ได้ติดตามคุณ?", "ignore_notifications_modal.not_following_title": "เพิกเฉยการแจ้งเตือนจากผู้คนที่คุณไม่ได้ติดตาม?", + "ignore_notifications_modal.private_mentions_title": "เพิกเฉยการแจ้งเตือนจากการกล่าวถึงแบบส่วนตัวที่ไม่พึงประสงค์?", "interaction_modal.description.favourite": "ด้วยบัญชีใน Mastodon คุณสามารถชื่นชอบโพสต์นี้เพื่อแจ้งให้ผู้สร้างทราบว่าคุณชื่นชมโพสต์และบันทึกโพสต์ไว้สำหรับภายหลัง", "interaction_modal.description.follow": "ด้วยบัญชีใน Mastodon คุณสามารถติดตาม {name} เพื่อรับโพสต์ของเขาในฟีดหน้าแรกของคุณ", "interaction_modal.description.reblog": "ด้วยบัญชีใน Mastodon คุณสามารถดันโพสต์นี้เพื่อแชร์โพสต์กับผู้ติดตามของคุณเอง", @@ -565,7 +568,9 @@ "notifications.policy.accept": "ยอมรับ", "notifications.policy.accept_hint": "แสดงในการแจ้งเตือน", "notifications.policy.drop": "เพิกเฉย", + "notifications.policy.filter": "กรอง", "notifications.policy.filter_hint": "ส่งไปยังกล่องขาเข้าการแจ้งเตือนที่กรองอยู่", + "notifications.policy.filter_limited_accounts_title": "บัญชีที่ได้รับการกลั่นกรอง", "notifications.policy.filter_new_accounts.hint": "สร้างขึ้นภายใน {days, plural, other {# วัน}}ที่ผ่านมา", "notifications.policy.filter_new_accounts_title": "บัญชีใหม่", "notifications.policy.filter_not_followers_hint": "รวมถึงผู้คนที่ได้ติดตามคุณน้อยกว่า {days, plural, other {# วัน}}", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 1466ff0524..83b3be003e 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -35,9 +35,9 @@ "account.follow_back": "Стежити також", "account.followers": "Підписники", "account.followers.empty": "Ніхто ще не підписаний на цього користувача.", - "account.followers_counter": "{count, plural, one {{counter} підписник} few {{counter} підписники} many {{counter} підписників} other {{counter} підписники}}", + "account.followers_counter": "{count, plural, one {{counter} підписник} few {{counter} підписники} many {{counter} підписників} other {{counter} підписник}}", "account.following": "Ви стежите", - "account.following_counter": "{count, plural, one {{counter} підписка} few {{counter} підписки} many {{counter} підписок} other {{counter} підписки}}", + "account.following_counter": "{count, plural, one {{counter} підписка} few {{counter} підписки} many {{counter} підписок} other {{counter} підписка}}", "account.follows.empty": "Цей користувач ще ні на кого не підписався.", "account.go_to_profile": "Перейти до профілю", "account.hide_reblogs": "Сховати поширення від @{name}", @@ -356,9 +356,17 @@ "home.pending_critical_update.link": "Переглянути оновлення", "home.pending_critical_update.title": "Доступне критичне оновлення безпеки!", "home.show_announcements": "Показати оголошення", + "ignore_notifications_modal.disclaimer": "Mastodon не може повідомити користувачів, що ви проігнорували їх повідомлення. Ігнорування сповіщень не зупинить надсилання повідомлень.", + "ignore_notifications_modal.filter_instead": "Натомість фільтрувати", "ignore_notifications_modal.filter_to_act_users": "Ви все ще зможете прийняти, відхилити або поскаржитися на користувачів", + "ignore_notifications_modal.filter_to_avoid_confusion": "Фільтрування допомагає уникнути потенційної плутанини", "ignore_notifications_modal.filter_to_review_separately": "Ви можете переглянути відфільтровані сповіщення окремо", "ignore_notifications_modal.ignore": "Ігнорувати сповіщення", + "ignore_notifications_modal.limited_accounts_title": "Ігнорувати сповіщення від модерованих облікових записів?", + "ignore_notifications_modal.new_accounts_title": "Ігнорувати сповіщення від нових облікових записів?", + "ignore_notifications_modal.not_followers_title": "Ігнорувати сповіщення від людей, які не підписані на вас?", + "ignore_notifications_modal.not_following_title": "Ігнорувати сповіщення від людей, на яких ви не підписалися?", + "ignore_notifications_modal.private_mentions_title": "Ігнорувати сповіщення від небажаних приватних згадок?", "interaction_modal.description.favourite": "Маючи обліковий запис на Mastodon, ви можете вподобати цей допис, щоб дати автору знати, що ви його цінуєте, і зберегти його на потім.", "interaction_modal.description.follow": "Маючи обліковий запис на Mastodon, ви можете підписатися на {name}, щоб отримувати дописи цього користувача у свою стрічку.", "interaction_modal.description.reblog": "Маючи обліковий запис на Mastodon, ви можете поширити цей допис, щоб поділитися ним зі своїми підписниками.", @@ -485,8 +493,11 @@ "notification.favourite": "Ваш допис сподобався {name}", "notification.follow": "{name} підписалися на вас", "notification.follow_request": "{name} відправили запит на підписку", + "notification.label.mention": "Згадка", + "notification.label.private_mention": "Особиста згадка", "notification.label.private_reply": "Приватна відповідь", - "notification.label.reply": "Відповісти", + "notification.label.reply": "Відповідь", + "notification.mention": "Згадка", "notification.moderation-warning.learn_more": "Дізнатися більше", "notification.moderation_warning": "Ви отримали попередження модерації", "notification.moderation_warning.action_delete_statuses": "Деякі з ваших дописів було видалено.", @@ -508,16 +519,25 @@ "notification.update": "{name} змінює допис", "notification_requests.accept": "Прийняти", "notification_requests.accept_all": "Прийняти все", + "notification_requests.accept_multiple": "{count, plural, one {Прийняти # запит} few {Прийняти # запити} many {Прийняти # запитів} other {Прийняти # запит}}", "notification_requests.confirm_accept_all.button": "Прийняти все", + "notification_requests.confirm_accept_all.message": "Ви збираєтеся прийняти {count, plural, one {запит на сповіщення} few {# запити на сповіщення} many {# запитів на сповіщення} other {# запит на сповіщення}}. Ви впевнені, що хочете продовжити?", + "notification_requests.confirm_accept_all.title": "Прийняти запит на сповіщення?", "notification_requests.confirm_dismiss_all.button": "Відхили все", + "notification_requests.confirm_dismiss_all.message": "Ви збираєтеся відхилити {count, plural, one {запит на сповіщення} few {# запити на сповіщення} many {# запитів на сповіщення} other {# запит на сповіщення}}. Ви не зможете легко отримати доступ до {count, plural, one {нього} other {них}} again. Ви впевнені, що хочете продовжити?", + "notification_requests.confirm_dismiss_all.title": "Відхилити запити на сповіщення?", "notification_requests.dismiss": "Відхилити", "notification_requests.dismiss_all": "Відхили все", + "notification_requests.dismiss_multiple": "{count, plural, one {Відхилити # запит} other {Відхилити # запити}}", + "notification_requests.enter_selection_mode": "Вибрати", + "notification_requests.exit_selection_mode": "Скасувати", "notification_requests.explainer_for_limited_account": "Сповіщення від цього облікового запису фільтровані, оскільки обліковий запис обмежений модератором.", "notification_requests.explainer_for_limited_remote_account": "Сповіщення від цього облікового запису фільтровані, оскільки обліковий запис або його сервер обмежений модератором.", "notification_requests.maximize": "Розгорнути", "notification_requests.minimize_banner": "Мінімізувати відфільтрований банер сповіщень", "notification_requests.notifications_from": "Сповіщення від {name}", "notification_requests.title": "Відфільтровані сповіщення", + "notification_requests.view": "Переглянути сповіщення", "notifications.clear": "Очистити сповіщення", "notifications.clear_confirmation": "Ви впевнені, що хочете назавжди видалити всі сповіщення?", "notifications.clear_title": "Очистити сповіщення?", @@ -555,7 +575,11 @@ "notifications.permission_denied_alert": "Сповіщення не можна ввімкнути оскільки у дозволі вже було відмовлено раніше", "notifications.permission_required": "Сповіщення на стільниці не доступні, оскільки необхідний дозвіл не надано.", "notifications.policy.accept": "Прийняти", + "notifications.policy.accept_hint": "Показувати в сповіщеннях", "notifications.policy.drop": "Ігнорувати", + "notifications.policy.drop_hint": "Відправити в нікуди, щоб більше не бачити", + "notifications.policy.filter": "Фільтрувати", + "notifications.policy.filter_hint": "Надіслати до відфільтрованих вхідних", "notifications.policy.filter_limited_accounts_hint": "Обмежено модераторами сервера", "notifications.policy.filter_limited_accounts_title": "Модеровані облікові записи", "notifications.policy.filter_new_accounts.hint": "Створено впродовж {days, plural, one {одного} few {# днів} many {# днів} other {# дня}}", @@ -566,6 +590,7 @@ "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": "Щоб отримувати сповіщення, коли Mastodon не відкрито, увімкніть сповіщення стільниці. Ви можете контролювати, які типи взаємодій створюють сповіщення через кнопку {icon} вгорі після їхнього увімкнення.", "notifications_permission_banner.title": "Не проґавте нічого", @@ -726,11 +751,11 @@ "server_banner.about_active_users": "Люди, які використовують цей сервер протягом останніх 30 днів (Щомісячні Активні Користувачі)", "server_banner.active_users": "активні користувачі", "server_banner.administered_by": "Адміністратор:", - "server_banner.is_one_of_many": "{domain} - один з багатьох незалежних серверів Mastodon, які ви можете використати, щоб брати участь у федівері.", + "server_banner.is_one_of_many": "{domain} - один з багатьох незалежних серверів Mastodon, які ви можете використати, щоб брати участь у федіверсі.", "server_banner.server_stats": "Статистика сервера:", "sign_in_banner.create_account": "Створити обліковий запис", - "sign_in_banner.follow_anyone": "Слідкуйте за ким завгодно у всьому fediverse і дивіться все це в хронологічному порядку. Немає алгоритмів, реклами чи наживок для натискань при перегляді.", - "sign_in_banner.mastodon_is": "Мастодон - найкращий спосіб продовжувати свою справу.", + "sign_in_banner.follow_anyone": "Слідкуйте за ким завгодно у всьому fediverse і дивіться все це в хронологічному порядку. Немає алгоритмів, реклами чи клікбейту.", + "sign_in_banner.mastodon_is": "Mastodon — найкращий спосіб бути в курсі подій.", "sign_in_banner.sign_in": "Увійти", "sign_in_banner.sso_redirect": "Увійдіть або зареєструйтесь", "status.admin_account": "Відкрити інтерфейс модерації для @{name}", diff --git a/config/locales/ar.yml b/config/locales/ar.yml index 8a142d0bd5..18dede8fbf 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -39,6 +39,7 @@ ar: created_msg: تم إنشاء ملاحظة الإشراف بنجاح! destroyed_msg: تم تدمير ملاحظة الإشراف بنجاح! accounts: + add_email_domain_block: حظر نطاق البريد الإلكتروني approve: صادِق عليه approved_msg: تمت الموافقة على تسجيل %{username} are_you_sure: هل أنت متأكد؟ @@ -227,6 +228,7 @@ ar: update_custom_emoji: تحديث الإيموجي المخصص update_domain_block: تحديث حظر النطاق update_ip_block: تحديث قاعدة IP + update_report: تحديث التقرير update_status: تحديث المنشور update_user_role: تحديث الدور actions: @@ -559,7 +561,7 @@ ar: deactivate_all: تعطيلها كافة filter: all: الكل - available: المتوفرة + available: متاح expired: المنتهي صلاحيتها title: التصفية title: الدعوات @@ -617,6 +619,7 @@ ar: resolve_description_html: ولن يُتخذ أي إجراء ضد الحساب المبلّغ عنه، ولن تسلَّط عليه أية عقوبة، وسوف يُغلق التقرير. silence_description_html: الحساب سيظهر فقط لمن يتابعه أو قام بالبحث عنه بشكل مباشر مما يخفض إمكانية رؤيته بشكل شبه كامل. يمكنك دائما التراجع عن هذا الإجراء. تُغلَق كافة الإبلاغات عن هذا الحساب. suspend_description_html: سيُمنع الوصول إلى الحساب وجميع محتوياته وتُحذف تدريجياً، وسيكون التفاعل معه مستحيلاً. بالإمكان عكس مفعول ذلك في غضون 30 يوماً. يغلق جميع التبليغات ضد الحساب. + actions_description_html: حدد الإجراء الذي يجب عليك اتخاذه لحل هذا التقرير. إذا اتخذت إجراء عقابيا ضد الحساب المبلغ عنه، فسيتم إرسال إشعار عبر البريد الإلكتروني إليهم، باستثناء عند اختيار فئة spam. actions_description_remote_html: حدّد الإجراءات التي يتعين اتخاذها لحل هذا التقرير. هذا سيؤثر فقط على كيفية اتصال خادمك بهذا الحساب البعيد والتعامل مع محتوياته. add_to_report: أضف المزيد إلى التقرير are_you_sure: هل أنت متأكد ؟ @@ -721,8 +724,8 @@ ar: invite_users_description: يسمح للمستخدمين بدعوة أشخاص جدد إلى الخادم manage_announcements: ادارة الاعلانات manage_announcements_description: يسمح للمستخدمين بإدارة الإعلانات على الخادم - manage_appeals: إدارة الاستئنافات - manage_appeals_description: يسمح للمستخدمين بمراجعة الطعن ضد إجراءات الإشراف + manage_appeals: إدارة الطعون + manage_appeals_description: يسمح للمستخدمين بمراجعة الطعون المقدمة ضد إجراءات الإشراف manage_blocks: إدارة الحظر manage_custom_emojis: إدارة الرموز التعبيريّة المخصصة manage_custom_emojis_description: السماح للمستخدمين بإدارة الرموز التعبيريّة المخصصة على الخادم @@ -899,6 +902,9 @@ ar: action: تحقق هنا للمزيد من المعلومات message_html: "تم تكوين مخزن الكائنات الخاص بك بشكل خاطئ. خصوصية المستخدمين في خطر." tags: + moderation: + title: الحالة + newest: الأحدث review: حالة المراجعة search: البحث title: الوسوم @@ -1062,7 +1068,9 @@ ar: guide_link_text: يمكن للجميع المساهمة. sensitive_content: المحتوى الحساس application_mailer: + notification_preferences: تغيير تفضيلات البريد الإلكتروني salutation: "%{name}،" + settings: 'تغيير تفضيلات البريد الإلكتروني: %{link}' unsubscribe: إلغاء الاشتراك view: 'اعرض:' view_profile: اعرض الصفحة التعريفية @@ -1460,6 +1468,9 @@ ar: unsubscribe: action: نعم، ألغِ الاشتراك complete: غير مشترك + emails: + notification_emails: + reblog: رسائل البريد الخاصة بالمنشورات المعاد نشرها title: إلغاء الاشتراك media_attachments: validations: @@ -1817,7 +1828,7 @@ ar: min_age_label: عتبة العمر min_favs: إبقاء المشاركات المفضلة أكثر من min_favs_hint: لن تُحذف أي من منشوراتك التي تلقّت على الأقل هذا العدد من المفضلات. اتركه فارغاً لحذف المنشورات مهما كان عدد المفضلات التي تلقتها - min_reblogs: إبقاء المشاركات المعززة أكثر من + min_reblogs: إبقاء المنشورات المعاد نشرها أكثر من min_reblogs_hint: لن تُحذف أي من منشوراتك التي أعيد مشاركتها أكثر من هذا العدد من المرات. اتركه فارغاً لحذف المنشورات بغض النظر عن عدد إعادات النشر stream_entries: sensitive_content: محتوى حساس @@ -1960,6 +1971,7 @@ ar: invalid_otp_token: رمز المصادقة بخطوتين غير صالح otp_lost_help_html: إن فقدتَهُما ، يمكنك الاتصال بـ %{email} rate_limited: عدد محاولات المصادقة كثير جداً، حاول مرة أخرى لاحقاً. + seamless_external_login: لقد تم تسجيل دخولك عبر خدمة خارجية، لذا فإن إعدادات كلمة المرور والبريد الإلكتروني غير متاحة. signed_in_as: 'تم تسجيل دخولك بصفة:' verification: extra_instructions_html: نصيحة: يمكن أن يكون الرابط الموجود على موقع الويب الخاص بك غير مرئي. الجزء المهم هو rel="me" الذي يمنع انتحال الهوية على مواقع الويب ذات المحتوى الذي ينشئه المستخدم. يمكنك أيضًا استخدام علامة link في رأس الصفحة بدلاً من a، ولكن يجب أن يكون HTML قابلاً للوصول دون تنفيذ JavaScript. diff --git a/config/locales/ca.yml b/config/locales/ca.yml index ae2ea3cd7b..7cf675559d 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -130,6 +130,7 @@ ca: resubscribe: Torna a subscriure role: Rol search: Cerca + search_same_email_domain: Altres usuaris amb el mateix domini del correu electrònic search_same_ip: Altres usuaris amb la mateixa IP security: Seguretat security_measures: @@ -170,21 +171,26 @@ ca: approve_appeal: Aprova l'apel·lació approve_user: Aprova l'usuari assigned_to_self_report: Assigna un informe + change_email_user: Canvia el correu electrònic per l'usuari change_role_user: Canvia el Rol del Usuari confirm_user: Confirma l'usuari create_account_warning: Crea un avís create_announcement: Crea un anunci + create_canonical_email_block: Crea un blocatge del correu electrònic create_custom_emoji: Crea un emoji personalitzat create_domain_allow: Crea un domini permès create_domain_block: Crea un bloqueig de domini + create_email_domain_block: Crea un blocatge del domini del correu electrònic create_ip_block: Crear regla IP create_unavailable_domain: Crea un domini no disponible create_user_role: Crea Rol demote_user: Degrada l'usuari destroy_announcement: Esborra l'anunci + destroy_canonical_email_block: Elimina el blocatge del correu electrònic destroy_custom_emoji: Esborra l'emoji personalitzat destroy_domain_allow: Esborra el permís del domini destroy_domain_block: Esborra el bloqueig de domini + destroy_email_domain_block: Elimina el blocatge del domini del correu electrònic destroy_instance: Purga Domini destroy_ip_block: Eliminar regla IP destroy_status: Elimina la publicació @@ -223,7 +229,9 @@ ca: approve_appeal_html: "%{name} ha aprovat l'apel·lació a la decisió de moderació de %{target}" approve_user_html: "%{name} ha aprovat el registre de %{target}" assigned_to_self_report_html: "%{name} s'han assignat l'informe %{target} a ells mateixos" + change_email_user_html: "%{name} ha canviat l'adreça del correu electrònic de l'usuari %{target}" change_role_user_html: "%{name} ha canviat el rol de %{target}" + confirm_user_html: "%{name} ha confirmat l'adreça del correu electrònic de l'usuari %{target}" create_account_warning_html: "%{name} ha enviat un avís a %{target}" create_announcement_html: "%{name} ha creat un nou anunci %{target}" create_custom_emoji_html: "%{name} ha pujat un emoji nou %{target}" @@ -1079,6 +1087,7 @@ ca: or_log_in_with: O inicia sessió amb privacy_policy_agreement_html: He llegit i estic d'acord amb la política de privacitat progress: + confirm: Confirmar email details: Els teus detalls review: La nostra revisió rules: Accepta les normes @@ -1102,6 +1111,7 @@ ca: setup: email_settings_hint_html: Toca l'enllaç que t'hem enviat per a verificar %{email}. Esperarem aquí mateix. link_not_received: No has rebut l'enllaç? + new_confirmation_instructions_sent: Rebràs un nou correu amb l'enllaç de confirmació en pocs minuts! title: Comprova la teva safata d'entrada sign_in: preamble_html: Inicia la sessió amb les teves credencials de %{domain}. Si el teu compte es troba a un servidor diferent, no podràs iniciar sessió aquí. diff --git a/config/locales/doorkeeper.ar.yml b/config/locales/doorkeeper.ar.yml index 3cecbd495a..79e6c60152 100644 --- a/config/locales/doorkeeper.ar.yml +++ b/config/locales/doorkeeper.ar.yml @@ -136,7 +136,7 @@ ar: mutes: تم كتمها notifications: الإشعارات profile: مِلَفّ مَستُدون التعريفي الخاص بك - push: الإشعارات + push: الإشعارات المدفوعة reports: الشكاوى search: البحث statuses: المنشورات diff --git a/config/locales/doorkeeper.sr-Latn.yml b/config/locales/doorkeeper.sr-Latn.yml index 6445353c1a..89e84344fd 100644 --- a/config/locales/doorkeeper.sr-Latn.yml +++ b/config/locales/doorkeeper.sr-Latn.yml @@ -83,6 +83,7 @@ sr-Latn: access_denied: Vlasnik resursa ili autorizacioni server su odbili zahtev. credential_flow_not_configured: Tok Resource Owner Password Credentials nije uspeo pošto je Doorkeeper.configure.resource_owner_from_credentials neiskonfigurisan. invalid_client: Klijentska identifikacija nije uspela zbog nepoznatog klijenta, zato što klijent nije uključio identifikaciju ili zato što je iskorišćen nepodržani identifikacioni metod. + invalid_code_challenge_method: Metod izazova koda mora biti S256, običan nije podržan. invalid_grant: Zadata identifikaciona dozvola je neispravna, istekla, opozvana, ne poklapa se sa adresom preusmeravanja ili je izdata nekog drugom klijentu. invalid_redirect_uri: Uključena adresa preusmeravanja nije ispravna. invalid_request: diff --git a/config/locales/doorkeeper.sr.yml b/config/locales/doorkeeper.sr.yml index feb0fec3e5..63b9404784 100644 --- a/config/locales/doorkeeper.sr.yml +++ b/config/locales/doorkeeper.sr.yml @@ -83,6 +83,7 @@ sr: access_denied: Власник ресурса или ауторизациони сервер су одбили захтев. credential_flow_not_configured: Ток Resource Owner Password Credentials није успео пошто је Doorkeeper.configure.resource_owner_from_credentials неисконфигурисан. invalid_client: Клијентска идентификација није успела због непознатог клијента, зато што клијент није укључио идентификацију или зато што је искоришћен неподржани идентификациони метод. + invalid_code_challenge_method: Метод изазова кода мора бити S256, обичан није подржан. invalid_grant: Задата идентификациона дозвола је неисправна, истекла, опозвана, не поклапа се са адресом преусмеравања или је издата неког другом клијенту. invalid_redirect_uri: Укључена адреса преусмеравања није исправна. invalid_request: diff --git a/config/locales/gd.yml b/config/locales/gd.yml index 9490590bd4..9592a86c65 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -35,6 +35,7 @@ gd: created_msg: Chaidh nòta na maorsainneachd a chruthachadh! destroyed_msg: Chaidh nòta na maorsainneachd a mhilleadh! accounts: + add_email_domain_block: Bac àrainn a’ phuist-d approve: Aontaich ris approved_msg: Chaidh aontachadh ris an iarrtas clàraidh aig %{username} are_you_sure: A bheil thu cinnteach? @@ -61,6 +62,7 @@ gd: demote: Ìslich destroyed_msg: Chaidh an dàta aig %{username} a chur air a’ chiutha ach an dèid a sguabadh às an ceann greis bheag disable: Reòth + disable_sign_in_token_auth: Cuir à comas dearbhadh le tòcan puist-d disable_two_factor_authentication: Cuir an dearbhadh dà-cheumnach à comas disabled: Reòthte display_name: Ainm-taisbeanaidh @@ -69,6 +71,7 @@ gd: email: Post-d email_status: Staid a’ phuist-d enable: Dì-reòth + enable_sign_in_token_auth: Cuir an comas dearbhadh le tòcan puist-d enabled: An comas enabled_msg: Chaidh an cunntas aig %{username} a dhì-reòthadh followers: Luchd-leantainn @@ -135,6 +138,7 @@ gd: resubscribe: Fo-sgrìobh a-rithist role: Dreuchd search: Lorg + search_same_email_domain: Cleachdaichean eile aig a bheil an aon àrainn puist-d search_same_ip: Cleachdaichean eile aig a bheil an t-aon IP security: Tèarainteachd security_measures: @@ -175,21 +179,26 @@ gd: approve_appeal: Thoir aonta ris an ath-thagradh approve_user: Aontaich ris a’ chleachdaiche assigned_to_self_report: Iomruin an gearan + change_email_user: Atharraich post-d a’ chleachdaiche change_role_user: Atharraich dreuchd a’ chleachdaiche confirm_user: Dearbh an cleachdaiche create_account_warning: Cruthaich rabhadh create_announcement: Cruthaich brath-fios + create_canonical_email_block: Cruthaich bacadh puist-d create_custom_emoji: Cruthaich Emoji gnàthaichte create_domain_allow: Cruthaich ceadachadh àrainne create_domain_block: Cruthaich bacadh àrainne + create_email_domain_block: Cruthaich bacadh àrainne puist-d create_ip_block: Cruthaich riaghailt IP create_unavailable_domain: Cruthaich àrainn nach eil ri fhaighinn create_user_role: Cruthaich dreuchd demote_user: Ìslich an cleachdaiche destroy_announcement: Sguab às am brath-fios + destroy_canonical_email_block: Sguab às bacadh a’ phuist-d destroy_custom_emoji: Sguab às an t-Emoji gnàthaichte destroy_domain_allow: Sguab às ceadachadh na h-àrainne destroy_domain_block: Sguab às bacadh na h-àrainne + destroy_email_domain_block: Sguab às bacadh na h-àrainne puist-d destroy_instance: Purgaidich an àrainn destroy_ip_block: Sguab às an riaghailt IP destroy_status: Sguab às am post @@ -197,8 +206,10 @@ gd: destroy_user_role: Mill an dreuchd disable_2fa_user: Cuir an dearbhadh dà-cheumnach à comas disable_custom_emoji: Cuir an t-Emoji gnàthaichte à comas + disable_sign_in_token_auth_user: Cuir à comas dearbhadh le tòcan puist-d dhan chleachdaiche disable_user: Cuir an cleachdaiche à comas enable_custom_emoji: Cuir an t-Emoji gnàthaichte an comas + enable_sign_in_token_auth_user: Cuir an comas dearbhadh le tòcan puist-d dhan chleachdaiche enable_user: Cuir an cleachdaiche an comas memorialize_account: Dèan cuimhneachan dhen chunntas promote_user: Àrdaich an cleachdaiche @@ -228,20 +239,26 @@ gd: approve_appeal_html: Dh’aontaich %{name} ri ath-thagradh air co-dhùnadh na maorsainneachd o %{target} approve_user_html: Dh’aontaich %{name} ri clàradh o %{target} assigned_to_self_report_html: Dh’iomruin %{name} an gearan %{target} dhaibh fhèin + change_email_user_html: Dh’atharraich %{name} seòladh puist-d a’ chleachdaiche %{target} change_role_user_html: Atharraich %{name} an dreuchd aig %{target} + confirm_user_html: Dhearbh %{name} seòladh puist-d a’ chleachdaiche %{target} create_account_warning_html: Chuir %{name} rabhadh gu %{target} create_announcement_html: Chruthaich %{name} brath-fios %{target} ùr + create_canonical_email_block_html: Bhac %{name} am post-d air a bheil an hais %{target} create_custom_emoji_html: Luchdaich %{name} suas Emoji %{target} ùr create_domain_allow_html: Cheadaich %{name} co-nasgadh leis an àrainn %{target} create_domain_block_html: Bhac %{name} an àrainn %{target} + create_email_domain_block_html: Bhac %{name} an àrainn puist-d %{target} create_ip_block_html: Chruthaich %{name} riaghailt dhan IP %{target} create_unavailable_domain_html: Sguir %{name} ris an lìbhrigeadh dhan àrainn %{target} create_user_role_html: Chruthaich %{name} an dreuchd %{target} demote_user_html: Dh’ìslich %{name} an cleachdaiche %{target} destroy_announcement_html: Sguab %{name} às am brath-fios %{target} + destroy_canonical_email_block_html: Dhì-bhac %{name} am post-d air a bheil an hais %{target} destroy_custom_emoji_html: Sguab %{name} às an Emoji %{target} destroy_domain_allow_html: Dì-cheadaich %{name} co-nasgadh leis an àrainn %{target} destroy_domain_block_html: Dì-bhac %{name} an àrainn %{target} + destroy_email_domain_block_html: Dì-bhac %{name} an àrainn puist-d %{target} destroy_instance_html: Purgaidich %{name} an àrainn %{target} destroy_ip_block_html: Sguab %{name} às riaghailt dhan IP %{target} destroy_status_html: Thug %{name} post aig %{target} air falbh @@ -249,8 +266,10 @@ gd: destroy_user_role_html: Sguab %{name} às an dreuchd %{target} disable_2fa_user_html: Chuir %{name} riatanas an dearbhaidh dà-cheumnaich à comas dhan chleachdaiche %{target} disable_custom_emoji_html: Chuir %{name} an Emoji %{target} à comas + disable_sign_in_token_auth_user_html: Chuir %{name} à comas dearbhadh le tòcan puist-d dha %{target} disable_user_html: Chuir %{name} an clàradh a-steach à comas dhan chleachdaiche %{target} enable_custom_emoji_html: Chuir %{name} an Emoji %{target} an comas + enable_sign_in_token_auth_user_html: Chuir %{name} an comas dearbhadh le tòcan puist-d dha %{target} enable_user_html: Chuir %{name} an clàradh a-steach an comas dhan chleachdaiche %{target} memorialize_account_html: Rinn %{name} duilleag cuimhneachain dhen chunntas aig %{target} promote_user_html: Dh’àrdaich %{name} an cleachdaiche %{target} @@ -258,6 +277,7 @@ gd: reject_user_html: Dhiùlt %{name} an clàradh o %{target} remove_avatar_user_html: Thug %{name} avatar aig %{target} air falbh reopen_report_html: Dh’fhosgail %{name} an gearan %{target} a-rithist + resend_user_html: Chuir %{name} am post-d dearbhaidh airson %{target} a-rithist reset_password_user_html: Dh’ath-shuidhich %{name} am facal-faire aig a’ chleachdaiche %{target} resolve_report_html: Dh’fhuasgail %{name} an gearan %{target} sensitive_account_html: Chuir %{name} comharra gu bheil e frionasach ri meadhan aig %{target} @@ -428,6 +448,7 @@ gd: one: "%{count} oidhirp clàraidh rè na seachdain seo chaidh" other: "%{count} oidhirp clàraidh rè na seachdain seo chaidh" two: "%{count} oidhirp clàraidh rè na seachdain seo chaidh" + created_msg: Chaidh àrainn a’ phuist-d a bhacadh delete: Sguab às dns: types: @@ -436,8 +457,12 @@ gd: new: create: Cuir àrainn ris resolve: Fuasgail an àrainn + title: Bac àrainn puist-d ùr + no_email_domain_block_selected: Cha deach bacadh àrainn puist-d sam bith atharrachadh o nach deach gin dhiubh a thaghadh not_permitted: Chan eil seo ceadaichte + resolved_dns_records_hint_html: Thèid ainm na h-àrainne fhuasgladh nan àrainnean MX a leanas agus an urra riutha-san gun gabh iad ri post-d. Ma bhacas tu àrainn MX, bacaidh seo an clàradh o sheòladh puist-d sam bith a chleachdas an aon àrainn MX fiù ’s ma bhios ainm àrainne eadar-dhealaichte ’ga sealltainn. Thoir an aire nach bac thu solaraichean puist-d mòra. resolved_through_html: Chaidh fuasgladh slighe %{domain} + title: Bacadh àrainnean puist-d export_domain_allows: new: title: Ion-phortaich àrainnean ceadaichte @@ -599,6 +624,7 @@ gd: resolve_description_html: Cha dèid gnìomh sam bith a ghabhail an aghaidh a’ chunntais le gearan air agus thèid an gearan a dhùnadh gun rabhadh a chlàradh. silence_description_html: Chan fhaic ach an fheadhainn a tha ’ga leantainn mu thràth no a lorgas a làimh e an cunntas seo agus cuingichidh seo uiread nan daoine a ruigeas e gu mòr. Gabhaidh seo a neo-dhèanamh uair sam bith. Dùinidh seo gach gearan mun chunntas seo. suspend_description_html: Cha ghabh an cunntas seo agus an t-susbaint gu leòr aige inntrigeadh gus an dèid a sguabadh às air deireadh na sgeòil agus cha ghabh eadar-ghabhail a dhèanamh leis. Gabhaidh seo a neo-dhèanamh am broinn 30 latha. Dùinidh seo gach gearan mun chunntas seo. + actions_description_html: Cuir romhad dè nì thu airson an gearan seo fhuasgladh. Ma chuireas tu peanas air a’ chunntas le gearan air, gheibh iad brath air a’ phost-d mura tagh thu an roinn-seòrsa Spama. actions_description_remote_html: Cuir romhad dè an gnìomh a ghabhas tu airson an gearan seo fhuasgladh. Cha bheir seo buaidh ach air mar a làimhsicheas am frithealaiche agadsa an cunntas cèin seo is mar a nì e conaltradh leis. add_to_report: Cuir barrachd ris a’ ghearan already_suspended_badges: @@ -663,6 +689,7 @@ gd: delete_data_html: Sguab às a’ phròifil ’s an t-susbaint aig @%{acct} an ceann 30 latha mura dèid an cur an gnìomh a-rithist roimhe sin preview_preamble_html: 'Gheibh @%{acct} rabhadh leis an t-susbaint seo:' record_strike_html: Clàraich rabhadh an aghaidh @%{acct} airson do chuideachadh ach am bi thu nas teinne le droch-ghiùlan on chunntas seo san àm ri teachd + send_email_html: Cuir post-d rabhaidh gu @%{acct} warning_placeholder: Adhbharan roghainneil eile air gnìomh na maorsainneachd. target_origin: Tùs cunntas a’ ghearain title: Gearanan @@ -706,6 +733,7 @@ gd: manage_appeals: Stiùireadh ath-thagraidhean manage_appeals_description: Leigidh seo le cleachdaichean lèirmheas a dhèanamh air ath-thagraidhean an aghaidh gnìomhan mhaor manage_blocks: Stiùireadh nam bacaidhean + manage_blocks_description: Leigidh seo le cleachdaichean solaraichean puist-d is seòlaidhean IP a bhacadh manage_custom_emojis: Stiùireadh nan Emojis gnàthaichte manage_custom_emojis_description: Leigidh seo le cleachdaichean Emojis gnàthaichte a stiùireadh air an fhrithealaiche manage_federation: Stiùireadh a’ cho-nasgaidh @@ -723,6 +751,7 @@ gd: manage_taxonomies: Stiùireadh thacsonamaidhean manage_taxonomies_description: Leigidh seo le cleachdaichean lèirmheas a dhèanamh air an t-susbaint a tha a’ treandadh agus roghainnean nan tagaichean hais ùrachadh manage_user_access: Stiùireadh inntrigeadh chleachdaichean + manage_user_access_description: Leigidh seo le cleachdaichean gun cuir iad à comas dearbhadh dà-cheumnach càich, gun atharraich iad an seòladh puist-d aca is gun ath-shuidhich iad am facal-faire aca manage_users: Stiùireadh chleachdaichean manage_users_description: Leigidh seo le cleachdaichean mion-fhiosrachadh càich a shealltainn agus gnìomhan maoir a ghabhail ’nan aghaidh manage_webhooks: Stiùireadh nan webhooks @@ -797,6 +826,7 @@ gd: destroyed_msg: Chaidh an luchdadh suas dhan làrach a sguabadh às! software_updates: critical_update: Èiginneach – ùraich cho luath ’s a ghabhas + description: Mholamaid gun cùm thu an stàladh agad de Mhastodon ùraichte ach am faigh thu buannachd às na càraidhean ’s gleusan as ùire. A bharrachd air sin, bidh e èiginneach aig amannan gun ùraich thu Mastodon gun dàil airson duilgheadasan tèarainteachd a sheachnadh. Seo as adhbhar gun doir Mastodon sùil airson ùrachaidhean gach leth-uair a thìde ’s gun cuir e brath thugad a-rèir nan roghainnean puist-d agad. documentation_link: Barrachd fiosrachaidh release_notes: Nòtaichean sgaoilidh title: Ùrachaidhean a tha ri fhaighinn @@ -905,10 +935,16 @@ gd: trends: allow: Ceadaich approved: Aontaichte + confirm_allow: A bheil thu cinnteach gu bheil thu airson na tagaichean a thagh thu a cheadachadh? + confirm_disallow: A bheil thu cinnteach gu bheil thu airson na tagaichean a thagh thu a dhì-cheadachadh? disallow: Na ceadaich links: allow: Ceadaich an ceangal allow_provider: Ceadaich am foillsichear + confirm_allow: A bheil thu cinnteach gu bheil thu airson na ceanglaichean a thagh thu a cheadachadh? + confirm_allow_provider: A bheil thu cinnteach gu bheil thu airson na solaraichean a thagh thu a cheadachadh? + confirm_disallow: A bheil thu cinnteach gu bheil thu airson na ceanglaichean a thagh thu a dhì-cheadachadh? + confirm_disallow_provider: A bheil thu cinnteach gu bheil thu airson na solaraichean a thagh thu a dhì-cheadachadh? description_html: Seo na ceanglaichean a tha ’gan co-roinneadh le iomadh cunntas on a chì am frithealaiche agad na postaichean. Faodaidh iad a bhith ’nan cuideachadh dhan luchd-cleachdaidh ach am faigh iad a-mach dè tha tachairt air an t-saoghal. Cha dèid ceanglaichean a shealltainn gu poblach gus an aontaich thu ris an fhoillsichear. ’S urrainn dhut ceanglaichean àraidh a cheadachadh no a dhiùltadh cuideachd. disallow: Na ceadaich an ceangal disallow_provider: Na ceadaich am foillsichear @@ -934,6 +970,10 @@ gd: statuses: allow: Ceadaich am post allow_account: Ceadaich an t-ùghdar + confirm_allow: A bheil thu cinnteach gu bheil thu airson na puist a thagh thu a cheadachadh? + confirm_allow_account: A bheil thu cinnteach gu bheil thu airson na cunntasan a thagh thu a cheadachadh? + confirm_disallow: A bheil thu cinnteach gu bheil thu airson na puist a thagh thu a dhì-cheadachadh? + confirm_disallow_account: A bheil thu cinnteach gu bheil thu airson na cunntasan a thagh thu a dhì-cheadachadh? description_html: Seo na postaichean air a bheil am frithealaiche agad eòlach ’s a tha ’gan co-roinneadh is ’nan annsachd gu tric aig an àm seo. Faodaidh iad a bhith ’nan cuideachadh dhan luchd-cleachdaidh ùr no a thill ach an lorg iad daoine airson an leantainn. Cha dèid postaichean a shealltainn gu poblach gus an gabh thu ris an ùghdar agus gus an aontaich an t-ùghdar gun dèid an cunntas aca a mholadh do dhaoine eile. ’S urrainn dhut postaichean àraidh a cheadachadh no a dhiùltadh cuideachd. disallow: Na ceadaich am post disallow_account: Na ceadaich an t-ùghdar @@ -970,6 +1010,7 @@ gd: one: Chaidh a chleachdadh le %{count} rè na seachdain seo chaidh other: Chaidh a chleachdadh le %{count} rè na seachdain seo chaidh two: Chaidh a chleachdadh le %{count} rè na seachdain seo chaidh + title: Molaidhean ⁊ treandaichean trending: A’ treandadh warning_presets: add_new: Cuir fear ùr ris @@ -1056,7 +1097,9 @@ gd: guide_link_text: "’S urrainn do neach sam bith cuideachadh." sensitive_content: Susbaint fhrionasach application_mailer: + notification_preferences: Atharraich roghainnean a’ phuist-d salutation: "%{name}," + settings: 'Atharraich roghainnean a’ phuist-d: %{link}' unsubscribe: Cuir crìoch air an fho-sgrìobhadh view: 'Faic:' view_profile: Seall a’ phròifil @@ -1076,6 +1119,7 @@ gd: hint_html: Dìreach aon rud eile! Feumaidh sinn dearbhadh gu bheil thu daonna (ach am fàg sinn an spama aig an doras!). Fuasgail an CAPTCHA gu h-ìosal is briog air “Lean air adhart”. title: Deuchainn tèarainteachd confirmations: + awaiting_review: Chaidh am post-d agad a dhearbhadh! Nì an sgioba aig %{domain} lèirmheas air a’ chlàradh agad a-nis. Gheibh thu post-d nuair a bhios iad air aontachadh ris a’ chunntas agad! awaiting_review_title: Tha an cunntas agad ’ga sgrùdadh clicking_this_link: briogadh air a’ cheangal seo login_link: clàradh a-steach @@ -1083,6 +1127,7 @@ gd: redirect_to_app_html: Bu chòir dhuinn d’ ath-stiùireadh gu aplacaid %{app_name}. Mur an do dh’obraich sin, feuch %{clicking_this_link} no till dhan aplacaid a làimh. registration_complete: Tha an clàradh agad air %{domain} deiseil a-nis! welcome_title: Fàilte ort, %{name}! + wrong_email_hint: Mur eil an seòladh puist-d seo mar bu chòir, ’s urrainn dhut atharrachadh ann an roghainnean a’ chunntais. delete_account: Sguab às an cunntas delete_account_html: Nam bu mhiann leat an cunntas agad a sguabadh às, nì thu an-seo e. Thèid dearbhadh iarraidh ort. description: @@ -1103,6 +1148,7 @@ gd: or_log_in_with: No clàraich a-steach le privacy_policy_agreement_html: Leugh mi is tha mi ag aontachadh ris a’ phoileasaidh prìobhaideachd progress: + confirm: Dearbh am post-d details: Am fiosrachadh agad review: An lèirmheas againn rules: Gabh ris na riaghailtean @@ -1124,8 +1170,10 @@ gd: security: Tèarainteachd set_new_password: Suidhich facal-faire ùr setup: + email_below_hint_html: Thoir sùil air pasgan an spama agad no iarr fear eile. ’S urrainn dhut an seòladh puist-d agad a chur ceart ma tha e ceàrr. email_settings_hint_html: Briog air a’ cheangal a chuir sinn thugad a dhearbhadh %{email}. Fuirichidh sinn ort an-seo. link_not_received: Nach d’fhuair thu ceangal? + new_confirmation_instructions_sent: Gheibh thu post-d ùr le ceangal dearbhaidh an ceann corra mionaid! title: Thoir sùil air a’ bhogsa a-steach agad sign_in: preamble_html: Clàraich a-steach le do theisteas %{domain}. Ma tha an cunntas agad ’ga òstadh air frithealaiche eile, chan urrainn dhut clàradh a-steach an-seo. @@ -1136,7 +1184,9 @@ gd: title: Suidhicheamaid %{domain} dhut. status: account_status: Staid a’ chunntais + confirming: A’ feitheamh air coileanadh an dearbhaidh on phost-d. functional: Tha an cunntas agad ag obair gu slàn. + pending: Feumaidh an sgioba againn lèirmheas a dhèanamh air d’ iarrtas. Dh’fhaoidte gun doir seo greis. Gheibh thu post-d nuair a bhios sinn air aontachadh ri d’ iarrtas. redirecting_to: Chan eil an cunntas gad gnìomhach on a tha e ’ga ath-stiùireadh gu %{acct}. self_destruct: On a tha %{domain} gu bhith dùnadh, chan fhaigh thu ach inntrigeadh cuingichte dhan chunntas agad. view_strikes: Seall na rabhaidhean a fhuair an cunntas agad roimhe @@ -1179,6 +1229,9 @@ gd: before: 'Mus lean thu air adhart, leugh na nòtaichean seo gu cùramach:' caches: Dh’fhaoidte gum mair susbaint ann an tasgadain fhrithealaichean eile data_removal: Thèid na postaichean agad ’s dàta eile a thoirt air falbh gu buan + email_change_html: ’S urrainn dhut an seòladh puist-d agad atharrachadh gun a bhith a’ sguabadh às a’ chunntais agad + email_contact_html: Mura faigh thu fhathast e, ’s urrainn dhut post-d a chur gu %{email} airson cuideachaidh + email_reconfirmation_html: Mur an d’ fhuair thu am post-d dearbhaidh, ’s urrainn dhut iarraidh a-rithist irreversible: Chan urrainn dhut an cunntas agad aiseag no ath-ghnìomhachadh more_details_html: Airson barrachd fiosrachaidh faic am poileasaidh prìobhaideachd. username_available: Bidh an t-ainm-cleachdaiche agad ri fhaighinn a-rithist @@ -1427,6 +1480,7 @@ gd: authentication_methods: otp: aplacaid dearbhaidh dhà-cheumnaich password: facal-faire + sign_in_token: cuir còd tèarainteachd air a’ phost-d webauthn: iuchraichean tèarainteachd description_html: Ma chì thu gnìomhachd nach aithnich thu, mholamaid gun atharraich thu am facal-faire agad ’s gun cuir thu an dearbhadh dà-cheumnach an comas. empty: Chan eil eachdraidh an dearbhaidh ri fhaighinn @@ -1437,6 +1491,16 @@ gd: unsubscribe: action: Tha, cuir crìoch air an fho-sgrìobhadh complete: Chaidh crìoch a chur air an fho-sgrìobhadh + confirmation_html: A bheil thu cinnteach nach eil thu airson %{type} fhaighinn tuilleadh o Mhastodon air %{domain} dhan post-d agad aig %{email}? ’S urrainn dhut fo-sgrìobhadh a-rithist uair sam bith o roghainnean a’ puist-d agad. + emails: + notification_emails: + favourite: puist-d le brathan mu annsachdan + follow: puist-d le brathan mu leantainn + follow_request: puist-d le brathan mu iarrtasan leantainn + mention: puist-d le brathan mu iomraidhean + reblog: puist-d le brathan mu bhrosnachaidhean + resubscribe_html: Ma chuir thu crìoch air an fho-sgrìobhadh le mearachd, ’s urrainn dhut fo-sgrìobhadh a-rithist o roghainnean a’ puist-d agad. + success_html: Chan fhaigh thu %{type} o Mhastodon air %{domain} dhan phost-d agad aig %{email} tuilleadh. title: Cuir crìoch air an fho-sgrìobhadh media_attachments: validations: @@ -1517,6 +1581,8 @@ gd: update: subject: Dheasaich %{name} post notifications: + administration_emails: Brathan puist-d na rianachd + email_events: Tachartasan nam brathan puist-d email_events_hint: 'Tagh na tachartasan dhan a bheil thu airson brathan fhaighinn:' number: human: @@ -1675,6 +1741,7 @@ gd: import: Ion-phortadh import_and_export: Ion-phortadh ⁊ às-phortadh migrate: Imrich cunntais + notifications: Brathan puist-d preferences: Roghainnean profile: Pròifil phoblach relationships: Dàimhean leantainn @@ -1935,6 +2002,7 @@ gd: invalid_otp_token: Còd dà-cheumnach mì-dhligheach otp_lost_help_html: Ma chaill thu an t-inntrigeadh dhan dà chuid diubh, ’s urrainn dhut fios a chur gu %{email} rate_limited: Cus oidhirpean dearbhaidh, feuch ris a-rithist an ceann greis. + seamless_external_login: Rinn thu clàradh a-steach le seirbheis on taobh a-muigh, mar sin chan eil roghainnean an fhacail-fhaire ’s a’ phuist-d ri làimh dhut. signed_in_as: 'Chlàraich thu a-steach mar:' verification: extra_instructions_html: Gliocas:Faodaidh an ceangal air an làrach-lìn agad a bhith do-fhaicsinneach. ’S e rel="me" a tha sa phàirt chudromach a bhacas riochd cuideigin eile air làraichean-lìn le susbaint air a gintinn o chleachdaiche. ’S urrainn dhut fiù taga link a chleachdadh ann am bann-cinn na duilleige seach a ach feumaidh sinn an HTML ruigsinn gun a bhith a’ ruith JavaScript. diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 03bfa646ba..dc548c0f36 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -29,6 +29,7 @@ ko: created_msg: 중재 참고사항을 만들었습니다! destroyed_msg: 중재 참고사항을 지웠습니다! accounts: + add_email_domain_block: 이메일 도메인 차단 approve: 허가 approved_msg: 성공적으로 %{username}의 가입 신청서를 승인했습니다 are_you_sure: 확실합니까? @@ -55,6 +56,7 @@ ko: demote: 강등 destroyed_msg: "%{username}의 데이터는 곧 삭제되도록 대기열에 들어갔습니다" disable: 동결 + disable_sign_in_token_auth: 이메일 토큰 인증 비활성화 disable_two_factor_authentication: 2단계 인증을 비활성화 disabled: 동결됨 display_name: 표시되는 이름 @@ -63,6 +65,7 @@ ko: email: 이메일 email_status: 이메일 상태 enable: 동결 해제 + enable_sign_in_token_auth: 이메일 토큰 인증 활성화 enabled: 활성 enabled_msg: "%{username}의 동결을 성공적으로 해제 했습니다." followers: 팔로워 @@ -126,6 +129,7 @@ ko: resubscribe: 다시 구독 role: 역할 search: 검색 + search_same_email_domain: 같은 이메일 도메인을 가진 다른 사용자들 search_same_ip: 같은 IP의 다른 사용자들 security: 보안 security_measures: @@ -166,21 +170,26 @@ ko: approve_appeal: 이의제기 승인 approve_user: 사용자 승인 assigned_to_self_report: 신고 맡기 + change_email_user: 사용자 이메일 변경 change_role_user: 사용자 역할 변경 confirm_user: 사용자 확인 create_account_warning: 경고 생성 create_announcement: 공지사항 생성 + create_canonical_email_block: 이메일 차단 생성 create_custom_emoji: 커스텀 에모지 생성 create_domain_allow: 도메인 허용 생성 create_domain_block: 도메인 차단 추가 + create_email_domain_block: 이메일 도메인 차단 생성 create_ip_block: IP 규칙 만들기 create_unavailable_domain: 사용 불가능한 도메인 생성 create_user_role: 역할 생성 demote_user: 사용자 강등 destroy_announcement: 공지사항 삭제 + destroy_canonical_email_block: 이메일 차단 삭제 destroy_custom_emoji: 커스텀 에모지 삭제 destroy_domain_allow: 도메인 허용 삭제 destroy_domain_block: 도메인 차단 삭제 + destroy_email_domain_block: 이메일 도메인 차단 삭제 destroy_instance: 도메인 제거 destroy_ip_block: IP 규칙 삭제 destroy_status: 게시물 삭제 @@ -188,8 +197,10 @@ ko: destroy_user_role: 역할 삭제 disable_2fa_user: 2단계 인증 비활성화 disable_custom_emoji: 커스텀 에모지 비활성화 + disable_sign_in_token_auth_user: 사용자의 이메일 토큰 인증 비활성화 disable_user: 사용자 비활성화 enable_custom_emoji: 커스텀 에모지 활성화 + enable_sign_in_token_auth_user: 사용자의 이메일 토큰 인증 활성화 enable_user: 사용자 활성화 memorialize_account: 고인의 계정으로 전환 promote_user: 사용자 승급 @@ -219,20 +230,26 @@ ko: approve_appeal_html: "%{name} 님이 %{target}의 중재 결정에 대한 이의 제기를 승인했습니다" approve_user_html: "%{name} 님이 %{target} 님의 가입을 승인했습니다" assigned_to_self_report_html: "%{name} 님이 신고 %{target}을 자신에게 할당했습니다" + change_email_user_html: "%{name} 님이 %{target} 님의 이메일 주소를 변경했습니다" change_role_user_html: "%{name} 님이 %{target} 님의 역할을 수정했습니다" + confirm_user_html: "%{name} 님이 %{target} 님의 이메일 주소를 승인했습니다" create_account_warning_html: "%{name} 님이 %{target}에게 경고를 보냈습니다" create_announcement_html: "%{name} 님이 새 공지 %{target}을 만들었습니다" + create_canonical_email_block_html: "%{name} 님이 %{target} 해시를 가진 이메일을 차단했습니다" create_custom_emoji_html: "%{name} 님이 새로운 에모지 %{target}를 업로드 했습니다" create_domain_allow_html: "%{name} 님이 %{target} 도메인을 허용리스트에 넣었습니다" create_domain_block_html: "%{name} 님이 도메인 %{target}를 차단했습니다" + create_email_domain_block_html: "%{name} 님이 이메일 도메인 %{target}를 차단했습니다" create_ip_block_html: "%{name} 님이 IP 규칙 %{target}을 만들었습니다" create_unavailable_domain_html: "%{name} 님이 도메인 %{target}에 대한 전달을 중지했습니다" create_user_role_html: "%{name} 님이 %{target} 역할을 생성했습니다" demote_user_html: "%{name} 님이 사용자 %{target} 님을 강등했습니다" destroy_announcement_html: "%{name} 님이 공지 %{target}을 삭제했습니다" + destroy_canonical_email_block_html: "%{name} 님이 %{target} 해시를 가진 이메일을 차단 해제했습니다" destroy_custom_emoji_html: "%{name} 님이 에모지 %{target}를 삭제했습니다" destroy_domain_allow_html: "%{name} 님이 %{target} 도메인과의 연합을 금지했습니다" destroy_domain_block_html: "%{name} 님이 도메인 %{target}의 차단을 해제했습니다" + destroy_email_domain_block_html: "%{name} 님이 이메일 도메인 %{target}을 차단 해제하였습니다" destroy_instance_html: "%{name} 님이 도메인 %{target}를 제거했습니다" destroy_ip_block_html: "%{name} 님이 IP 규칙 %{target}을 삭제하였습니다" destroy_status_html: "%{name} 님이 %{target} 님의 게시물을 삭제했습니다" diff --git a/config/locales/lt.yml b/config/locales/lt.yml index dfcfcf1271..6cd647e740 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -449,7 +449,7 @@ lt: moderation: all: Visi limited: Limituotas - title: Moderacija + title: Prižiūrėjimas public_comment: Viešas komentaras title: Federacija total_blocked_by_us: Mes užblokavome @@ -1116,6 +1116,7 @@ lt: keep_self_bookmark: Laikyti įrašus, kuriuos pažymėjai keep_self_bookmark_hint: Neištrina tavo pačių įrašų, jei esi juos pažymėjęs (-usi) keep_self_fav_hint: Neištrina tavo pačių įrašų, jei esi juos pamėgęs (-usi) + min_age_label: Amžiaus riba stream_entries: sensitive_content: Jautrus turinys themes: diff --git a/config/locales/simple_form.ar.yml b/config/locales/simple_form.ar.yml index f6d177badf..e552b42b18 100644 --- a/config/locales/simple_form.ar.yml +++ b/config/locales/simple_form.ar.yml @@ -211,6 +211,7 @@ ar: setting_default_privacy: خصوصية المنشور setting_default_sensitive: اعتبر الوسائط دائما كمحتوى حساس setting_delete_modal: إظهار مربع حوار التأكيد قبل حذف أي منشور + setting_disable_hover_cards: تعطيل معاينة الملف الشخصي عند التمرير setting_disable_swiping: تعطيل حركات التمرير setting_display_media: عرض الوسائط setting_display_media_default: افتراضي @@ -294,7 +295,7 @@ ar: follow_request: ابعث بريدا إلكترونيا عندما يقوم أحدهم بإرسال طلب بالمتابعة mention: ابعث بريداً إلكترونيًا عندما يُشير إليك أو يذكُرك أحدهم pending_account: ابعث رسالة إلكترونية إن كان هناك حساب جديد بحاجة إلى مراجعة - reblog: ابعث بريداً إلكترونيًا عندما يقوم أحدهم بترقية منشورك + reblog: عندما يقوم أحدهم بإعادة نشر منشورك report: هناك إبلاغ جديد تم إرساله software_updates: all: إشعاري عند توفّر كافة التحديثات diff --git a/config/locales/simple_form.sr-Latn.yml b/config/locales/simple_form.sr-Latn.yml index e163de2f80..527c5e0a1f 100644 --- a/config/locales/simple_form.sr-Latn.yml +++ b/config/locales/simple_form.sr-Latn.yml @@ -314,6 +314,7 @@ sr-Latn: listable: Dozvoli da se ova heš oznaka pojavljuje u pretragama i predlozima name: Heš oznaka trendable: Dozvoli da se ova heš oznaka pojavi u okviru trendova + usable: Dozvoli objavama da lokalno koriste ovu heš oznaku user: role: Uloga time_zone: Vremenska zona diff --git a/config/locales/simple_form.sr.yml b/config/locales/simple_form.sr.yml index d7142390c9..d541c0b49c 100644 --- a/config/locales/simple_form.sr.yml +++ b/config/locales/simple_form.sr.yml @@ -314,6 +314,7 @@ sr: listable: Дозволи да се ова хеш ознака појављује у претрагама и предлозима name: Хеш ознака trendable: Дозволи да се ова хеш ознака појави у оквиру трендова + usable: Дозволи објавама да локално користе ову хеш ознаку user: role: Улога time_zone: Временска зона diff --git a/config/locales/simple_form.uk.yml b/config/locales/simple_form.uk.yml index 7d7f0fc765..1206714869 100644 --- a/config/locales/simple_form.uk.yml +++ b/config/locales/simple_form.uk.yml @@ -314,6 +314,7 @@ uk: listable: Дозволити появу цього хештеґа у каталозі пошуку і пропозицій name: Хештеґ trendable: Дозволити появу цього хештеґа у списку популярних хештеґів + usable: Дозволити дописам використовувати цей хештег локально user: role: Роль time_zone: Часовий пояс diff --git a/config/locales/sl.yml b/config/locales/sl.yml index cb0aff8a3e..3384049a11 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -35,6 +35,7 @@ sl: created_msg: Opomba moderiranja je uspešno ustvarjena! destroyed_msg: Opomba moderiranja je uspešno uničena! accounts: + add_email_domain_block: Blokiraj domeno e-pošte approve: Odobri approved_msg: Uspešno odobrena vloga prijave uporabnika %{username} are_you_sure: Ali ste prepričani? @@ -61,6 +62,7 @@ sl: demote: Ponižaj destroyed_msg: Podatki uporabnika %{username} so zdaj v vrsti za trajen izbris disable: Zamrzni + disable_sign_in_token_auth: Onemogoči overjanje z žetonom po e-pošti disable_two_factor_authentication: Onemogoči 2FA disabled: Zamrznjeno display_name: Pojavno ime @@ -69,6 +71,7 @@ sl: email: E-naslov email_status: Stanje e-naslova enable: Odmrzni + enable_sign_in_token_auth: Omogoči overjanje z žetonom po e-pošti enabled: Omogočeno enabled_msg: Uspešno odmrznjen račun uporabnika %{username} followers: Sledilci @@ -135,6 +138,7 @@ sl: resubscribe: Ponovno se naroči role: Vloga search: Iskanje + search_same_email_domain: Drugi uporabniki z isto e-poštno domeno search_same_ip: Drugi uporabniki z istim IP security: Varnost security_measures: @@ -175,21 +179,26 @@ sl: approve_appeal: Odobri pritožbo approve_user: Odobri uporabnika assigned_to_self_report: Dodeli prijavo + change_email_user: Spremeni e-naslov uporabnika change_role_user: Spremeni vlogo uporabnika confirm_user: Potrdi uporabnika create_account_warning: Ustvari opozorilo create_announcement: Ustvari obvestilo + create_canonical_email_block: Ustvari blokado e-naslova create_custom_emoji: Ustvari emotikon po meri create_domain_allow: Ustvari odobritev domene create_domain_block: Ustvari blokado domene + create_email_domain_block: Ustvari blokado domene e-pošte create_ip_block: Ustvari pravilo IP create_unavailable_domain: Ustvari domeno, ki ni na voljo create_user_role: Ustvari vlogo demote_user: Ponižaj uporabnika destroy_announcement: Izbriši obvestilo + destroy_canonical_email_block: Izbriši blokado e-naslova destroy_custom_emoji: Izbriši emotikon po meri destroy_domain_allow: Izbriši odobritev domene destroy_domain_block: Izbriši blokado domene + destroy_email_domain_block: Izbriši blokado domene e-pošte destroy_instance: Očisti domeno destroy_ip_block: Izbriši pravilo IP destroy_status: Izbriši objavo @@ -197,8 +206,10 @@ sl: destroy_user_role: Uniči vlogo disable_2fa_user: Onemogoči disable_custom_emoji: Onemogoči emotikon po meri + disable_sign_in_token_auth_user: Onemogoči overjanje z žetonom po e-pošti za uporabnika disable_user: Onemogoči uporabnika enable_custom_emoji: Omogoči emotikon po meri + enable_sign_in_token_auth_user: Omogoči overjanje z žetonom po e-pošti za uporabnika enable_user: Omogoči uporabnika memorialize_account: Spomenificiraj račun promote_user: Povišaj uporabnika @@ -228,20 +239,26 @@ sl: approve_appeal_html: "%{name} je ugodil pritožbi uporabnika %{target} na moderatorsko odločitev" approve_user_html: "%{name} je odobril/a registracijo iz %{target}" assigned_to_self_report_html: "%{name} je dodelil/a prijavo %{target} sebi" + change_email_user_html: "%{name} je spremenil/a naslov e-pošte uporabnika %{target}" change_role_user_html: "%{name} je spremenil/a vlogo %{target}" + confirm_user_html: "%{name} je potrdil/a naslov e-pošte uporabnika %{target}" create_account_warning_html: "%{name} je poslal/a opozorilo %{target}" create_announcement_html: "%{name} je ustvarila/a novo obvestilo %{target}" + create_canonical_email_block_html: "%{name} je dal/a na črni seznam e-pošto s ključnikom %{target}" create_custom_emoji_html: "%{name} je posodobil/a emotikone %{target}" create_domain_allow_html: "%{name} je dovolil/a federacijo z domeno %{target}" create_domain_block_html: "%{name} je blokiral/a domeno %{target}" + create_email_domain_block_html: "%{name} je dal/a na črni seznam e-pošto domene %{target}" create_ip_block_html: "%{name} je ustvaril/a pravilo za IP %{target}" create_unavailable_domain_html: "%{name} je prekinil/a dostavo v domeno %{target}" create_user_role_html: "%{name} je ustvaril/a vlogo %{target}" demote_user_html: "%{name} je ponižal/a uporabnika %{target}" destroy_announcement_html: "%{name} je izbrisal/a obvestilo %{target}" + destroy_canonical_email_block_html: "%{name} je odstranil/a s črnega seznama e-pošto s ključnikom %{target}" destroy_custom_emoji_html: "%{name} je izbrisal/a emotikon %{target}" destroy_domain_allow_html: "%{name} ni dovolil/a federacije z domeno %{target}" destroy_domain_block_html: "%{name} je odblokiral/a domeno %{target}" + destroy_email_domain_block_html: "%{name} je odblokiral/a e-pošto domene %{target}" destroy_instance_html: "%{name} je očistil/a domeno %{target}" destroy_ip_block_html: "%{name} je izbrisal/a pravilo za IP %{target}" destroy_status_html: "%{name} je odstranil/a objavo uporabnika %{target}" @@ -249,8 +266,10 @@ sl: destroy_user_role_html: "%{name} je izbrisal/a vlogo %{target}" disable_2fa_user_html: "%{name} je onemogočil/a dvofaktorsko zahtevo za uporabnika %{target}" disable_custom_emoji_html: "%{name} je onemogočil/a emotikone %{target}" + disable_sign_in_token_auth_user_html: "%{name} je onemogočil/a overjanje z žetonom po e-pošti za uporabnika %{target}" disable_user_html: "%{name} je onemogočil/a prijavo za uporabnika %{target}" enable_custom_emoji_html: "%{name} je omogočil/a emotikone %{target}" + enable_sign_in_token_auth_user_html: "%{name} je omogočil/a overjanje z žetonom po e-pošti za uporabnika %{target}" enable_user_html: "%{name} je omogočil/a prijavo za uporabnika %{target}" memorialize_account_html: "%{name} je spremenil/a račun uporabnika %{target} v spominsko stran" promote_user_html: "%{name} je povišal/a uporabnika %{target}" @@ -258,6 +277,7 @@ sl: reject_user_html: "%{name} je zavrnil/a registracijo iz %{target}" remove_avatar_user_html: "%{name} je odstranil podobo (avatar) uporabnika %{target}" reopen_report_html: "%{name} je ponovno odprl/a prijavo %{target}" + resend_user_html: "%{name} je ponovno poslal_a potrditveno e-sporočilo za %{target}" reset_password_user_html: "%{name} je ponastavil/a geslo uporabnika %{target}" resolve_report_html: "%{name} je razrešil/a prijavo %{target}" sensitive_account_html: "%{name} je označil/a medije računa %{target}'s kot občutljive" @@ -428,6 +448,7 @@ sl: one: "%{count} poskus prijave zadnji teden" other: "%{count} poskusov prijave zadnji teden" two: "%{count} poskusa prijave zadnji teden" + created_msg: Domena e-pošte je bila uspešno dodana na črni seznam delete: Izbriši dns: types: @@ -436,8 +457,12 @@ sl: new: create: Dodaj domeno resolve: Razreši domeno + title: Nov vnos e-pošte na črni seznam + no_email_domain_block_selected: Nobena domena e-računa ni bila spremenjena, ker nobena ni bila izbrana not_permitted: Ni dovoljeno + resolved_dns_records_hint_html: Ime domene se razreši na naslednje domene MX, ki so končno odgovorne za sprejemanje e-pošte. Blokiranje domene MX bo blokiralo prijave s poljubnega e-poštnega naslova, ki uporablja isto domeno MX, tudi če je vidno ime domene drugačno. Pazite, da ne blokirate večjih ponudnikov e-pošte. resolved_through_html: Razrešeno prek %{domain} + title: Črni seznam e-pošt export_domain_allows: new: title: Uvozi prepustnice domen @@ -596,6 +621,7 @@ sl: resolve_description_html: Proti prijavljenemu računu ne bo izvedeno nobeno dejanje, noben ukrep ne bo zabeležen in prijava bo zaprta. silence_description_html: Račun bo viden samo tistim, ki mu že sled ijo ali ga ročno poiščejo, s čimer bo resno omejen njegov doseg. To je vedno možno povrniti. Zaključi vse prijave zoper ta račun. suspend_description_html: Račun in vsa njegova vsebina ne bo dostopna in bo postopoma izbrisana, interakcija z njim pa ne bo več možna. Dejanje je moč povrniti v roku 30 dni. Zaključi vse prijave zoper ta račun. + actions_description_html: Odločite se, katere ukrepe boste sprejeli za rešitev te prijave. Če sprejmete kazenski ukrep proti prijavljenemu računu, mu bo poslano e-poštno obvestilo, razen če je izbrana kategorija Neželena pošta. actions_description_remote_html: Odločite se za dejanje, ki bo odločilo o tej prijavi. To bo vplivalo le na to, kako vaš strežnik komunicira s tem oddaljenim računom in obravnava njegovo vsebino. add_to_report: Dodaj več v prijavo already_suspended_badges: @@ -660,6 +686,7 @@ sl: delete_data_html: Izbriši profil in vsebine @%{acct} čez 30 dni, razen če suspenz v tem času ni preklican preview_preamble_html: 'Oseba @%{acct} bo prejela opozorilo z naslednjo vsebino:' record_strike_html: Izdajte opomin računu @%{acct}, da boste lažje stopnjevali svoj odziv ob prihodnjih kršitvah s tega računa + send_email_html: Pošlji @%{acct} opozorilno e-sporočilo warning_placeholder: Neobvezna dodatna utemeljitev dejanja moderiranja. target_origin: Izvor prijavljenega računa title: Prijave @@ -703,6 +730,7 @@ sl: manage_appeals: Upravljaj pritožbe manage_appeals_description: Omogoča uporabnikom, da pregledajo pritožbe glede dejanj moderiranja manage_blocks: Upravljaj blokirano + manage_blocks_description: Omogoča uporabnikom, da blokirajo ponudnike e-pošte in naslove IP manage_custom_emojis: Upravljaj emotikone po meri manage_custom_emojis_description: Omogoča uporabnikom, da upravljajo emotikone po meri na strežniku manage_federation: Upravljaj beli seznam @@ -720,6 +748,7 @@ sl: manage_taxonomies: Upravljaj taksonomije manage_taxonomies_description: Omogoča uporabnikom, da preverijo vsebino v trendu in posodobijo nastavitve ključnikov manage_user_access: Upravljaj dostop uporabnikov + manage_user_access_description: Omogoča uporabnikom, da onemogočijo drugim uporabnikom dvofazno overjanje, spremenijo njihov e-naslov ter ponastavijo njihovo geslo manage_users: Upravljaj uporabnike manage_users_description: Omogoča uporabnikom, da vidijo podrobnosti drugih uporabnikov in nad njimi izvedejo dejanja moderiranja manage_webhooks: Upravljaj spletne zanke @@ -794,6 +823,7 @@ sl: destroyed_msg: Prenos na strežnik uspešno izbrisan! software_updates: critical_update: Kritično — čim prej posodobite + description: Vašo namestitev Mastodona je priporočeno vedno imeti posodobljeno in tako koristiti najnovejše popravke ter zmožnosti. Poleg tega je včasih nujno čim prej posodobiti Mastodon in se s tem izogniti varnostnim težavam. Zato Mastodon vsakih 30 minut preverja razpoložljivost posodobitev in vas o njih obvešča glede na vaše nastavitve obveščanja po e-pošti. documentation_link: Več o tem release_notes: Opombe ob izdaji title: Razpoložljive posodobitve @@ -881,11 +911,13 @@ sl: message_html: "Vaša predmetna shramba je napačno nastavljena. Zasebnost vaših uporabnikov je izpostavljena tveganjem." tags: moderation: + not_trendable: Ni v trendu not_usable: Ni uporabno pending_review: Čakajoče na pregled review_requested: Zahtevan pregled reviewed: Pregledano title: Stanje + trendable: V trendu unreviewed: Nepregledano usable: Uporabno name: Ime @@ -900,10 +932,16 @@ sl: trends: allow: Dovoli approved: Odobren + confirm_allow: Ali ste prepričani, da želite dopustiti izbrane oznake? + confirm_disallow: Ali ste prepričani, da želite prepovedati izbrane oznake? disallow: Ne dovoli links: allow: Dovoli povezavo allow_provider: Dovoli izdajatelja + confirm_allow: Ali ste prepričani, da želite dopustiti izbrane povezave? + confirm_allow_provider: Ali ste prepričani, da želite dopustiti izbrane ponudnike? + confirm_disallow: Ali ste prepričani, da želite prepovedati izbrane povezave? + confirm_disallow_provider: Ali ste prepričani, da želite prepovedati izbrane ponudnike? description_html: To so povezave, ki jih trenutno veliko delijo računi, iz katerih vaš strežnik vidi objave. Vašim uporabnikom lahko pomaga izvedeti, kaj se dogaja po svetu. Nobene povezave niso javno prikazane, dokler ne odobrite izdajatelja. Posamezne povezave lahko tudi dovolite ali zavrnete. disallow: Ne dovoli povezave disallow_provider: Ne dovoli izdajatelja @@ -929,6 +967,10 @@ sl: statuses: allow: Dovoli objavo allow_account: Dovoli avtorja + confirm_allow: Ali ste prepričani, da želite dopustiti izbrana stanja? + confirm_allow_account: Ali ste prepričani, da želite dopustiti izbrane račune? + confirm_disallow: Ali ste prepričani, da želite prepovedati izbrana stanja? + confirm_disallow_account: Ali ste prepričani, da želite prepovedati izbrane račune? description_html: To so objave, za katere vaš strežnik ve, da so trenutno v skupni rabi in med priljubljenimi. Vašim novim uporabnikom in uporabnikom, ki se vračajo, lahko pomaga najti več oseb, ki jim bodo sledili. Nobena objava ni javno prikazana, dokler avtorja ne odobrite in avtor ne dovoli, da se njegov račun predlaga drugim. Posamezne objave lahko tudi dovolite ali zavrnete. disallow: Ne dovoli objave disallow_account: Ne dovoli avtorja @@ -965,6 +1007,7 @@ sl: one: Uporabila %{count} oseba v zadnjem tednu other: Uporabilo %{count} oseb v zadnjem tednu two: Uporabili %{count} osebi v zadnjem tednu + title: Priporočila in trendi trending: V porastu warning_presets: add_new: Dodaj novo @@ -1051,7 +1094,9 @@ sl: guide_link_text: Vsakdo lahko prispeva. sensitive_content: Občutljiva vsebina application_mailer: + notification_preferences: Spremenite e-poštne nastavitve salutation: "%{name}," + settings: 'Spremenite e-poštne nastavitve: %{link}' unsubscribe: Odjavi od naročnine view: 'Pogled:' view_profile: Ogled profila @@ -1071,6 +1116,7 @@ sl: hint_html: Samo še nekaj. Moramo se prepričati, da ste človek (to nam pomaga pri preprečevanju neželenih vsebin). Rešite spodnji CAPTCHA in kliknite »Nadaljuj«. title: Varnostno preverjanje confirmations: + awaiting_review: Vaš e-poštni naslov je potrjen. Skrbniki %{domain} bodo pregledali vašo prijavo. Če odobrijo vaš račun, boste o tem prejeli e-pošto. awaiting_review_title: Vaša prijava se pregleduje clicking_this_link: s klikom na to povezavo login_link: prijavo @@ -1078,6 +1124,7 @@ sl: redirect_to_app_html: Morali bi biti preusmerjeni na aplikacijo %{app_name}. Če se to ni zgodilo, poskusite %{clicking_this_link} ali pa se ročno vrnite na aplikacijo. registration_complete: Vaša prijava na %{domain} je sedaj zaključena. welcome_title: Pozdravljeni, %{name}! + wrong_email_hint: Če ta e-poštni naslov ni pravilen, ga lahko spremenite v nastavitvah računa. delete_account: Izbriši račun delete_account_html: Če želite izbrisati svoj račun, lahko nadaljujete tukaj. Prosili vas bomo za potrditev. description: @@ -1098,6 +1145,7 @@ sl: or_log_in_with: Ali se prijavite z privacy_policy_agreement_html: Prebral_a sem in se strinjam s pravilnikom o zasebnosti. progress: + confirm: Potrdi e-pošto details: Vaši podatki review: Naš pregled rules: Sprejmi pravila @@ -1119,8 +1167,10 @@ sl: security: Varnost set_new_password: Nastavi novo geslo setup: + email_below_hint_html: Poglejte v mapo neželene pošte ali zaprosite za novega. Če ste podali napačen e-naslov, ga lahko popravite. email_settings_hint_html: Kliknite povezavo, ki smo vam jo poslali, da overite %{email}. Počakali bomo. link_not_received: Ali ste prejeli povezavo? + new_confirmation_instructions_sent: Čez nekaj minut boste prejeli novo e-sporočilo s potrditveno povezavo! title: Preverite svojo dohodno e-pošto sign_in: preamble_html: Prijavite se s svojimi poverilnicami %{domain}. Če vaš račun gostuje na drugem strežniku, se tukaj ne boste mogli prijaviti. @@ -1131,7 +1181,9 @@ sl: title: Naj vas namestimo na %{domain}. status: account_status: Stanje računa + confirming: Čakanje na potrditev e-pošte. functional: Vaš račun je polno opravilen. + pending: Naše osebje preverja vašo prijavo. To lahko traja nekaj časa. Če bo vaša prijava odobrena, boste prejeli e-pošto. redirecting_to: Vaš račun ni dejaven, ker trenutno preusmerja na račun %{acct}. self_destruct: Ker se %{domain} zapira, boste imeli omejen dostop da svojega računa. view_strikes: Pokaži pretekle ukrepe proti mojemu računu @@ -1174,6 +1226,9 @@ sl: before: 'Pred nadaljevanjem previdno preberite naslednje opombe:' caches: Vsebina, ki jo medpomnijo drugi strežniki, lahko vztraja data_removal: Vaše objave in drugi podatki bodo trajno odstranjeni + email_change_html: Svoj e-naslov lahko spremenite brez izbrisa svojega računa + email_contact_html: Če še vedno ni dostavljeno, lahko za pomoč pošljete e-sporočilo na naslov %{email} + email_reconfirmation_html: Če niste prejeli potrditvenega e-sporočila, lahko znova zaprosite zanj irreversible: Vašega računa ne boste mogli obnoviti ali ponovno aktivirati more_details_html: Za podrobnosti glejte politiko zasebnosti. username_available: Vaše uporabniško ime bo znova na voljo @@ -1422,6 +1477,7 @@ sl: authentication_methods: otp: aplikacija za dvoravenjsko overjanje password: geslo + sign_in_token: varnostna koda po e-pošti webauthn: varnostni ključi description_html: Če opazite dejavnost, ki je ne prepoznate kot svoje, razmislite o spremembi svojega gesla in omogočanju dvoravenskega overjanja. empty: Zgodovina overjanja ni na voljo @@ -1432,6 +1488,16 @@ sl: unsubscribe: action: Da, odjavi me complete: Odjavljeni + confirmation_html: Ali se res želite odjaviti od prejemanja %{type} za Mastodon na %{domain} na svojo e-pošto %{email}? Kadarkoli se lahko znova prijavite iz svojih nastavitev e-poštnih obvestil. + emails: + notification_emails: + favourite: e-sporočil z obvestili o priljubljenosti + follow: e-sporočil z obvestili o sledenju + follow_request: e-sporočil o zahtevah za sledenje + mention: e-sporočil z obvestili o omembah + reblog: e-sporočil z obvestili o izpostavljanju + resubscribe_html: Če ste se odjavili po pomoti, se lahko znova prijavite iz svojih nastavitev e-poštnih obvestil. + success_html: Nič več ne boste prejemali %{type} za Mastodon na %{domain} na svoj e-naslov %{email}. title: Odjavi od naročnine media_attachments: validations: @@ -1512,6 +1578,8 @@ sl: update: subject: "%{name} je uredil(a) objavo" notifications: + administration_emails: E-poštna obvestila skrbnika + email_events: Dogodki za e-obvestila email_events_hint: 'Izberite dogodke, za katere želite prejmati obvestila:' number: human: @@ -1670,6 +1738,7 @@ sl: import: Uvozi import_and_export: Uvoz in izvoz migrate: Selitev računa + notifications: E-poštna obvestila preferences: Nastavitve profile: Profil relationships: Sledenja in sledilci @@ -1930,6 +1999,7 @@ sl: invalid_otp_token: Neveljavna dvofaktorska koda otp_lost_help_html: Če ste izgubili dostop do obeh, stopite v stik z %{email} rate_limited: Preveč poskusov preverjanja pristnosti, poskusite kasneje. + seamless_external_login: Prijavljeni ste prek zunanje storitve, tako da nastavitve gesla in e-pošte niso na voljo. signed_in_as: 'Vpisani kot:' verification: extra_instructions_html: Nasvet: Povezava na vaši spletni strani je lahko nevidna. Pomembni del je atribut rel="me", ki preprečuje lažno predstavljanje na spletnih straneh z uporabniško ustvarjeno vsebino. Namesto oznake a lahko uporabite tudi oznako link znotraj glave (head) spletne strani, vendar mora biti HTML dosegljiv brez izvajanja skript JavaScript. diff --git a/config/locales/sq.yml b/config/locales/sq.yml index 538400efb8..d13c42e263 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -1431,6 +1431,14 @@ sq: unsubscribe: action: Po, shpajtomëni complete: U shpajtuat + confirmation_html: Jeni i sigurt se doni të shpajtoheni nga marrje %{type} për Mastodon te %{domain} në email-in tuaj %{email}? Mundeni përherë të ripajtoheni që nga rregullimet tuaja për njoftime me email. + emails: + notification_emails: + favourite: email-e njoftimesh parapëlqimesh + follow: email-e njoftimesh ndjekjeje + follow_request: email-e kërkesash ndjekjeje + mention: email-e njoftimesh përmendjesh + reblog: email-e njoftimesh përforcimesh resubscribe_html: Nëse u shpajtuat gabimisht, mund të ripajtoheni që nga rregullimet tuaja për njoftime me email. success_html: S’do të merrni më %{type} për Mastodon te %{domain} në email-in tuaj te %{email}. title: Shpajtohuni @@ -1513,6 +1521,8 @@ sq: update: subject: "%{name} përpunoi një postim" notifications: + administration_emails: Njoftime email përgjegjësi + email_events: Akte për njoftime email email_events_hint: 'Përzgjidhni akte për të cilët doni të merrni njoftime:' number: human: @@ -1671,6 +1681,7 @@ sq: import: Importo import_and_export: Importim dhe eksportim migrate: Migrim llogarie + notifications: Njoftime me email preferences: Parapëlqime profile: Profil relationships: Ndjekje dhe ndjekës diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml index 11e4decd4c..dfc8a635c8 100644 --- a/config/locales/sr-Latn.yml +++ b/config/locales/sr-Latn.yml @@ -1885,7 +1885,7 @@ sr-Latn: verification: extra_instructions_html: Savet:Veza na vašem veb sajtu može da bude nevidljiva. Važan deo je rel="me" koji sprečava lažno predstavljanje na veb sajtovima sa sadržajem koji generiše korisnik. Možete čak da koristite oznaku veze u zaglavlju stranice umesto a, ali HTML mora biti dostupan bez izvršavanja JavaScript-a. here_is_how: Evo kako - hint_html: "Verifikacija vašeg identiteta na Mastodon-u je za svakoga. Zasnovano na otvorenim veb standardima, sada i zauvek besplatno. Sve što vam treba je lični veb sajt po kome vas ljudi prepoznaju. Kada se povežete sa ovim veb sajtom sa svog profila, proverićemo da li je veb sajt povezan sa vašim profilom i na njemu ćemo prikazati vizuelni indikator." + hint_html: "Svako može da verifikuje svoj identitet na Mastodon-u. Zasnovano na otvorenim veb standardima, sada i zauvek besplatno. Sve što vam treba je lični veb sajt po kome vas ljudi prepoznaju. Kada se povežete sa ovim veb sajtom sa svog profila, proverićemo da li je veb sajt povezan sa vašim profilom i na njemu ćemo prikazati vizuelni indikator." instructions_html: Kopirajte i nalepite kod ispod u HTML svog veb sajta. Zatim dodajte adresu svog veb sajta u jedno od dodatnih polja na svom profilu sa kartice „Uredi profil” i sačuvajte promene. verification: Verifikacija verified_links: Vaše verifikovane veze diff --git a/config/locales/sr.yml b/config/locales/sr.yml index 90e25eaf98..2bbc4ef131 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -33,6 +33,7 @@ sr: created_msg: Модераторска белешка успешно направљена! destroyed_msg: Модераторска белешка успешно обрисана! accounts: + add_email_domain_block: Блокирај домен е-поште approve: Одобри approved_msg: Захтев за регистрацију корисника %{username} је успешно одобрен are_you_sure: Да ли сте сигурни? @@ -59,6 +60,7 @@ sr: demote: Ражалуј destroyed_msg: Подаци корисника %{username} су неповратно стављени у ред за брисање disable: Замрзни + disable_sign_in_token_auth: Онемогући аутентификацију токена е-поште disable_two_factor_authentication: Искључи 2FA disabled: Замрзнут display_name: Име за приказ @@ -67,6 +69,7 @@ sr: email: Е-пошта email_status: Статус е-поште enable: Омогући + enable_sign_in_token_auth: Омогући аутентификацију токена е-поште enabled: Омогућен enabled_msg: Успешно одлеђен налог корисника %{username} followers: Пратиоци @@ -132,6 +135,7 @@ sr: resubscribe: Поново се претплати role: Улога search: Претрага + search_same_email_domain: Остали корисници са истим доменом е-поште search_same_ip: Остали корисници са истом IP адресом security: Безбедност security_measures: @@ -172,21 +176,26 @@ sr: approve_appeal: Уважи жалбу approve_user: Одобри корисника assigned_to_self_report: Додели пријаву + change_email_user: Промени e-адресу за корисника change_role_user: Промени улогу корисника confirm_user: Потврди корисника create_account_warning: Креирај упозорење create_announcement: Креирај најаву + create_canonical_email_block: Креирај блок е-поште create_custom_emoji: Направи прилагођени емоџи create_domain_allow: Додај дозвољени домен create_domain_block: Додај блокирани домен + create_email_domain_block: Креирај блок домена е-поште create_ip_block: Направи IP услов create_unavailable_domain: Додај домен као недоступан create_user_role: Креирај улогу demote_user: Смањи овлашћења корисника destroy_announcement: Избриши најаву + destroy_canonical_email_block: Избриши блок е-поште destroy_custom_emoji: Обриши прилагођени емоџи destroy_domain_allow: Обриши дозвољени домен destroy_domain_block: Обриши блокирани домен + destroy_email_domain_block: Избриши блок домена е-поште destroy_instance: Очисти домен destroy_ip_block: Обриши IP услов destroy_status: Избриши пост @@ -194,8 +203,10 @@ sr: destroy_user_role: Уништи позицију disable_2fa_user: Онемогући двофакторску аутентификацију disable_custom_emoji: Онемогући прилагођене емоџије + disable_sign_in_token_auth_user: Онемогући аутентификацију токена е-поште за корисника disable_user: Онемогући корисника enable_custom_emoji: Омогући прилагођене емоџије + enable_sign_in_token_auth_user: Омогући аутентификацију токена е-поште за корисника enable_user: Омогући корисника memorialize_account: Претвори у меморијални налог promote_user: Унапреди корисника @@ -218,26 +229,33 @@ sr: update_custom_emoji: Ажурирај прилагођене емоџије update_domain_block: Ажурирај домен блок update_ip_block: Ажурирај IP услов + update_report: Ажурирај извештај update_status: Уреди објаву update_user_role: Уреди улогу actions: approve_appeal_html: "%{name} је уважио жалбу корисника %{target} на одлуку модератора" approve_user_html: "%{name} је одобрио/-ла регистрацију корисника %{target}" assigned_to_self_report_html: "%{name} је себи доделио/-ла пријаву %{target}" + change_email_user_html: "%{name} је променио/ла адресу е-поште за корисника %{target}" change_role_user_html: "%{name} је променио/-ла овлашћења корисника %{target}" + confirm_user_html: "%{name} је потврдио/ла адресу е-поште за корисника %{target}" create_account_warning_html: "%{name} је послао/-ла упозорење кориснику %{target}" create_announcement_html: "%{name} је направио/-ла ново саопштење %{target}" + create_canonical_email_block_html: "%{name} је блокирао/ла адресу е-поште са хешом %{target}" create_custom_emoji_html: "%{name} је отпремио/-ла нове емоџије %{target}" create_domain_allow_html: "%{name} је дозволио/-ла федерацију са доменом %{target}" create_domain_block_html: "%{name} је блокирао/-ла домен %{target}" + create_email_domain_block_html: "%{name} је блокирао/ла домен е-поште %{target}" create_ip_block_html: "%{name} је направио/-ла услов за IP адресе %{target}" create_unavailable_domain_html: "%{name} је обуставио/-ла испоручивање домену %{target}" create_user_role_html: "%{name} је направио/-ла %{target} позицију" demote_user_html: "%{name} је смањио овлашћења корисника %{target}" destroy_announcement_html: "%{name} је обрисао/-ла саопштење %{target}" + destroy_canonical_email_block_html: "%{name} је одблокирао/ла адресу е-поште са хешом %{target}" destroy_custom_emoji_html: "%{name} је обрисао/-ла емоџи %{target}" destroy_domain_allow_html: "%{name} је забранио/-ла федерацију са доменом %{target}" destroy_domain_block_html: "%{name} је одблокирао/-ла домен %{target}" + destroy_email_domain_block_html: "%{name} је одблокирао/ла домен е-поште %{target}" destroy_instance_html: "%{name} је очистио/-ла домен %{target}" destroy_ip_block_html: "%{name} је обрисао/-ла услов за IP адресе %{target}" destroy_status_html: "%{name} је избрисао/-ла објаву корисника %{target}" @@ -245,8 +263,10 @@ sr: destroy_user_role_html: "%{name} је избрисао/-ла %{target} позицију" disable_2fa_user_html: "%{name} је онемогућио/-ла двофакторску аутентификацију за корисника %{target}" disable_custom_emoji_html: "%{name} је онемогућио/-ла емоџи %{target}" + disable_sign_in_token_auth_user_html: "%{name} је онемогућио/ла аутентификацију токена е-поште за %{target}" disable_user_html: "%{name} је онемогућио/-ла пријављивање за корисника %{target}" enable_custom_emoji_html: "%{name} је омогућио/-ла емоџи %{target}" + enable_sign_in_token_auth_user_html: "%{name} је омогућио/ла аутентификацију токена е-поште за %{target}" enable_user_html: "%{name} је омогућио/-ла пријављивање кориснику %{target}" memorialize_account_html: "%{name} је претворио/-ла налог корисника %{target} у меморијалну страницу" promote_user_html: "%{name} је унапредио/-ла корисника %{target}" @@ -254,6 +274,7 @@ sr: reject_user_html: "%{name} је одбио/-ла регистрацију корисника %{target}" remove_avatar_user_html: "%{name} је уклонио аватар корисника %{target}" reopen_report_html: "%{name} је поново отворио/-ла пријаву %{target}" + resend_user_html: "%{name} је поништио/ла е-пошту за потврду за %{target}" reset_password_user_html: "%{name} је ресетовао/-ла лозинку корисника %{target}" resolve_report_html: "%{name} је решио/-ла пријаву %{target}" sensitive_account_html: "%{name} је означио/-ла медије налога %{target} као осетљиве" @@ -419,6 +440,7 @@ sr: few: "%{count} покушаја током претходне недеље" one: "%{count} покушај током претходне недеље" other: "%{count} покушаја регистрације током претходне недеље" + created_msg: Успешно блокиран домен е-поште delete: Обриши dns: types: @@ -427,8 +449,12 @@ sr: new: create: Додај домен resolve: Претвори домен + title: Блокирај нови домен е-поште + no_email_domain_block_selected: Ниједан блок домена е-поште није промењен јер ниједан није изабран not_permitted: Није дозвољено + resolved_dns_records_hint_html: Име домена се претвара у следеће MX домене, који су напослетку одговорни за прихватање е-поште. Блокирање MX домена ће блокирати регистрације са сваке адресе е-поште која користи тај MX домен, чак и у случају када се видљиво име домена разликује. Водите рачуна о томе да не блокирате главне добављаче е-поште. resolved_through_html: Преусмерено кроз %{domain} + title: Блокирани домени е-поште export_domain_allows: new: title: Увези дозвољене домене @@ -453,6 +479,9 @@ sr: title: Препоруке за праћење unsuppress: Врати препоруку за праћење instances: + audit_log: + title: Недавни записници + view_all: Погледај пуне записнике availability: description_html: few: Уколико испорука домену не успе ниједном током %{count} различитих дана, даљи покушаји испоруке неће бити иницирани осим уколико се не прими испорука са домена. @@ -583,6 +612,7 @@ sr: resolve_description_html: Ниједна радња неће бити предузета против пријављеног налога, ниједан преступ није уписан и пријава ће бити затворена. silence_description_html: Налог ће бити видљив само онима који га већ прате или који га ручно потраже, што ће значајно ограничити његов домет. Ограничење се може повући у сваком тренутку. Затвара све пријаве поднете против овог налога. suspend_description_html: Налог и сви његови садржаји ће постати недоступни и у једном тренутку избрисани, а интеракција са налогом више неће бити могућа. Суспензија се може повући у року од 30 дана. Затвара све пријаве поднете против овог налога. + actions_description_html: Одлучите коју радњу да спроведете ради решавања ове пријаве. Уколико спроведете казнену радњу против пријављеног налога, власник налога ће бити обавештен путем е-поште, осим уколико ознака „Нежељене поруке” није одабрана. actions_description_remote_html: Одлучите коју радњу да предузмете ради решавања ове пријаве. Ово ће утицати само на то како Ваш сервер комуницира са овим удаљеним налогом и обрађује његов садржај. add_to_report: Додај још у пријаву already_suspended_badges: @@ -1885,7 +1915,7 @@ sr: verification: extra_instructions_html: Савет:Веза на вашем веб сајту може да буде невидљива. Важан део је rel="me" који спречава лажно представљање на веб сајтовима са садржајем који генерише корисник. Можете чак да користите ознаку везе у заглављу странице уместо а, али HTML мора бити доступан без извршавања JavaScript-а. here_is_how: Ево како - hint_html: "Верификација вашег идентитета на Mastodon-у је за свакога. Засновано на отвореним веб стандардима, сада и заувек бесплатно. Све што вам треба је лични веб сајт по коме вас људи препознају. Када се повежете са овим веб сајтом са свог профила, проверићемо да ли је веб сајт повезан са вашим профилом и на њему ћемо приказати визуелни индикатор." + hint_html: "Свако може да верификује свој идентитет на Mastodon-у. Засновано на отвореним веб стандардима, сада и заувек бесплатно. Све што вам треба је лични веб сајт по коме вас људи препознају. Када се повежете са овим веб сајтом са свог профила, проверићемо да ли је веб сајт повезан са вашим профилом и на њему ћемо приказати визуелни индикатор." instructions_html: Копирајте и налепите код испод у HTML свог веб сајта. Затим додајте адресу свог веб сајта у једно од додатних поља на свом профилу са картице „Уреди профил” и сачувајте промене. verification: Верификација verified_links: Ваше верификоване везе diff --git a/config/locales/th.yml b/config/locales/th.yml index e3e985f683..efa142fed3 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -56,6 +56,7 @@ th: demote: ลดขั้น destroyed_msg: ตอนนี้จัดคิวเพื่อลบข้อมูลของ %{username} ในเร็ว ๆ นี้แล้ว disable: อายัด + disable_sign_in_token_auth: ปิดใช้งานการรับรองความถูกต้องด้วยโทเคนอีเมล disable_two_factor_authentication: ปิดใช้งาน 2FA disabled: อายัดอยู่ display_name: ชื่อที่แสดง @@ -64,6 +65,7 @@ th: email: อีเมล email_status: สถานะอีเมล enable: เลิกอายัด + enable_sign_in_token_auth: เปิดใช้งานการรับรองความถูกต้องด้วยโทเคนอีเมล enabled: เปิดใช้งานอยู่ enabled_msg: เลิกอายัดบัญชีของ %{username} สำเร็จ followers: ผู้ติดตาม @@ -127,6 +129,7 @@ th: resubscribe: บอกรับใหม่ role: บทบาท search: ค้นหา + search_same_email_domain: ผู้ใช้อื่น ๆ ที่มีโดเมนอีเมลเดียวกัน search_same_ip: ผู้ใช้อื่น ๆ ที่มี IP เดียวกัน security: ความปลอดภัย security_measures: @@ -194,8 +197,10 @@ th: destroy_user_role: ทำลายบทบาท disable_2fa_user: ปิดใช้งาน 2FA disable_custom_emoji: ปิดใช้งานอีโมจิที่กำหนดเอง + disable_sign_in_token_auth_user: ปิดใช้งานการรับรองความถูกต้องด้วยโทเคนอีเมลสำหรับผู้ใช้ disable_user: ปิดใช้งานผู้ใช้ enable_custom_emoji: เปิดใช้งานอีโมจิที่กำหนดเอง + enable_sign_in_token_auth_user: เปิดใช้งานการรับรองความถูกต้องด้วยโทเคนอีเมลสำหรับผู้ใช้ enable_user: เปิดใช้งานผู้ใช้ memorialize_account: ทำให้บัญชีเป็นอนุสรณ์ promote_user: เลื่อนขั้นผู้ใช้ @@ -225,20 +230,26 @@ th: approve_appeal_html: "%{name} ได้อนุมัติการอุทธรณ์การตัดสินใจในการกลั่นกรองจาก %{target}" approve_user_html: "%{name} ได้อนุมัติการลงทะเบียนจาก %{target}" assigned_to_self_report_html: "%{name} ได้มอบหมายรายงาน %{target} ให้กับตนเอง" + change_email_user_html: "%{name} ได้เปลี่ยนที่อยู่อีเมลของผู้ใช้ %{target}" change_role_user_html: "%{name} ได้เปลี่ยนบทบาทของ %{target}" + confirm_user_html: "%{name} ได้ยืนยันที่อยู่อีเมลของผู้ใช้ %{target}" create_account_warning_html: "%{name} ได้ส่งคำเตือนไปยัง %{target}" create_announcement_html: "%{name} ได้สร้างประกาศใหม่ %{target}" + create_canonical_email_block_html: "%{name} ได้ปิดกั้นอีเมลที่มีแฮช %{target}" create_custom_emoji_html: "%{name} ได้อัปโหลดอีโมจิใหม่ %{target}" create_domain_allow_html: "%{name} ได้อนุญาตการติดต่อกับภายนอกกับโดเมน %{target}" create_domain_block_html: "%{name} ได้ปิดกั้นโดเมน %{target}" + create_email_domain_block_html: "%{name} ได้ปิดกั้นโดเมนอีเมล %{target}" create_ip_block_html: "%{name} ได้สร้างกฎสำหรับ IP %{target}" create_unavailable_domain_html: "%{name} ได้หยุดการจัดส่งไปยังโดเมน %{target}" create_user_role_html: "%{name} ได้สร้างบทบาท %{target}" demote_user_html: "%{name} ได้ลดขั้นผู้ใช้ %{target}" destroy_announcement_html: "%{name} ได้ลบประกาศ %{target}" + destroy_canonical_email_block_html: "%{name} ได้เลิกปิดกั้นอีเมลที่มีแฮช %{target}" destroy_custom_emoji_html: "%{name} ได้ลบอีโมจิ %{target}" destroy_domain_allow_html: "%{name} ได้ไม่อนุญาตการติดต่อกับภายนอกกับโดเมน %{target}" destroy_domain_block_html: "%{name} ได้เลิกปิดกั้นโดเมน %{target}" + destroy_email_domain_block_html: "%{name} ได้เลิกปิดกั้นโดเมนอีเมล %{target}" destroy_instance_html: "%{name} ได้ล้างข้อมูลโดเมน %{target}" destroy_ip_block_html: "%{name} ได้ลบกฎสำหรับ IP %{target}" destroy_status_html: "%{name} ได้เอาโพสต์โดย %{target} ออก" @@ -246,8 +257,10 @@ th: destroy_user_role_html: "%{name} ได้ลบบทบาท %{target}" disable_2fa_user_html: "%{name} ได้ปิดใช้งานความต้องการสองปัจจัยสำหรับผู้ใช้ %{target}" disable_custom_emoji_html: "%{name} ได้ปิดใช้งานอีโมจิ %{target}" + disable_sign_in_token_auth_user_html: "%{name} ได้ปิดใช้งานการรับรองความถูกต้องด้วยโทเคนอีเมลสำหรับ %{target}" disable_user_html: "%{name} ได้ปิดใช้งานการเข้าสู่ระบบสำหรับผู้ใช้ %{target}" enable_custom_emoji_html: "%{name} ได้เปิดใช้งานอีโมจิ %{target}" + enable_sign_in_token_auth_user_html: "%{name} ได้เปิดใช้งานการรับรองความถูกต้องด้วยโทเคนอีเมลสำหรับ %{target}" enable_user_html: "%{name} ได้เปิดใช้งานการเข้าสู่ระบบสำหรับผู้ใช้ %{target}" memorialize_account_html: "%{name} ได้เปลี่ยนบัญชีของ %{target} เป็นหน้าอนุสรณ์" promote_user_html: "%{name} ได้เลื่อนขั้นผู้ใช้ %{target}" @@ -255,6 +268,7 @@ th: reject_user_html: "%{name} ได้ปฏิเสธการลงทะเบียนจาก %{target}" remove_avatar_user_html: "%{name} ได้เอาภาพประจำตัวของ %{target} ออก" reopen_report_html: "%{name} ได้เปิดรายงาน %{target} ใหม่" + resend_user_html: "%{name} ได้ส่งอีเมลการยืนยันสำหรับ %{target} ใหม่" reset_password_user_html: "%{name} ได้ตั้งรหัสผ่านของผู้ใช้ %{target} ใหม่" resolve_report_html: "%{name} ได้แก้ปัญหารายงาน %{target}" sensitive_account_html: "%{name} ได้ทำเครื่องหมายสื่อของ %{target} ว่าละเอียดอ่อน" @@ -410,6 +424,7 @@ th: allow_registrations_with_approval: อนุญาตการลงทะเบียนด้วยการอนุมัติ attempts_over_week: other: "%{count} ความพยายามในการลงทะเบียนในช่วงสัปดาห์ที่ผ่านมา" + created_msg: ปิดกั้นโดเมนอีเมลสำเร็จ delete: ลบ dns: types: @@ -418,8 +433,12 @@ th: new: create: เพิ่มโดเมน resolve: แปลงที่อยู่โดเมน + title: ปิดกั้นโดเมนอีเมลใหม่ + no_email_domain_block_selected: ไม่มีการเปลี่ยนแปลงการปิดกั้นโดเมนอีเมลเนื่องจากไม่มีการเลือก not_permitted: ไม่ได้รับอนุญาต + resolved_dns_records_hint_html: ชื่อโดเมนแปลงที่อยู่เป็นโดเมน MX ดังต่อไปนี้ ซึ่งท้ายที่สุดแล้วจะรับผิดชอบสำหรับการยอมรับอีเมล การปิดกั้นโดเมน MX จะปิดกั้นการลงทะเบียนจากที่อยู่อีเมลใด ๆ ซึ่งใช้โดเมน MX เดียวกัน แม้ว่าชื่อโดเมนที่ปรากฏจะแตกต่างกันก็ตาม ระวังอย่าปิดกั้นผู้ให้บริการอีเมลรายใหญ่ resolved_through_html: แปลงที่อยู่ผ่าน %{domain} + title: โดเมนอีเมลที่ปิดกั้นอยู่ export_domain_allows: new: title: นำเข้าการอนุญาตโดเมน @@ -569,6 +588,7 @@ th: resolve_description_html: จะไม่ใช้การกระทำต่อบัญชีที่รายงาน ไม่มีการบันทึกการดำเนินการ และจะปิดรายงาน silence_description_html: บัญชีจะปรากฏแก่เฉพาะผู้ที่ติดตามโปรไฟล์อยู่แล้วหรือค้นหาโปรไฟล์ด้วยตนเองเท่านั้น จำกัดการเข้าถึงของโปรไฟล์อย่างมาก สามารถแปลงกลับได้เสมอ ปิดรายงานต่อบัญชีนี้ทั้งหมด suspend_description_html: บัญชีและเนื้อหาของบัญชีทั้งหมดจะเข้าถึงไม่ได้และได้รับการลบในที่สุด และการโต้ตอบกับบัญชีจะเป็นไปไม่ได้ แปลงกลับได้ภายใน 30 วัน ปิดรายงานต่อบัญชีนี้ทั้งหมด + actions_description_html: ตัดสินใจว่าการกระทำใดที่จะใช้เพื่อแก้ปัญหารายงานนี้ หากคุณใช้การกระทำที่เป็นการลงโทษต่อบัญชีที่รายงาน จะส่งการแจ้งเตือนอีเมลถึงเขา ยกเว้นเมื่อมีการเลือกหมวดหมู่ สแปม actions_description_remote_html: ตัดสินใจว่าการกระทำใดที่จะใช้เพื่อแก้ปัญหารายงานนี้ นี่จะมีผลต่อวิธีที่เซิร์ฟเวอร์ ของคุณ สื่อสารกับบัญชีระยะไกลนี้และจัดการเนื้อหาของบัญชีเท่านั้น add_to_report: เพิ่มข้อมูลเพิ่มเติมไปยังรายงาน already_suspended_badges: @@ -633,6 +653,7 @@ th: delete_data_html: ลบโปรไฟล์และเนื้อหาของ @%{acct} ในอีก 30 วันนับจากนี้เว้นแต่มีการเลิกระงับเขาในระหว่างนี้ preview_preamble_html: "@%{acct} จะได้รับคำเตือนโดยมีเนื้อหาดังต่อไปนี้:" record_strike_html: บันทึกการดำเนินการต่อ @%{acct} เพื่อช่วยให้คุณเลื่อนระดับการละเมิดในอนาคตจากบัญชีนี้ + send_email_html: ส่งอีเมลคำเตือนถึง @%{acct} warning_placeholder: การให้เหตุผลเพิ่มเติมที่ไม่จำเป็นสำหรับการกระทำการกลั่นกรอง target_origin: จุดเริ่มต้นของบัญชีที่ได้รับการรายงาน title: รายงาน @@ -670,6 +691,7 @@ th: manage_appeals: จัดการการอุทธรณ์ manage_appeals_description: อนุญาตให้ผู้ใช้ตรวจทานการอุทธรณ์ต่อการกระทำการกลั่นกรอง manage_blocks: จัดการการปิดกั้น + manage_blocks_description: อนุญาตให้ผู้ใช้ปิดกั้นผู้ให้บริการอีเมลและที่อยู่ IP manage_custom_emojis: จัดการอีโมจิที่กำหนดเอง manage_custom_emojis_description: อนุญาตให้ผู้ใช้จัดการอีโมจิที่กำหนดเองในเซิร์ฟเวอร์ manage_federation: จัดการการติดต่อกับภายนอก @@ -687,6 +709,7 @@ th: manage_taxonomies: จัดการอนุกรมวิธาน manage_taxonomies_description: อนุญาตให้ผู้ใช้ตรวจทานเนื้อหาที่กำลังนิยมและอัปเดตการตั้งค่าแฮชแท็ก manage_user_access: จัดการการเข้าถึงของผู้ใช้ + manage_user_access_description: อนุญาตให้ผู้ใช้ปิดใช้งานการรับรองความถูกต้องด้วยสองปัจจัยของผู้ใช้อื่น ๆ เปลี่ยนที่อยู่อีเมลของเขา และตั้งรหัสผ่านของเขาใหม่ manage_users: จัดการผู้ใช้ manage_users_description: อนุญาตให้ผู้ใช้ดูรายละเอียดของผู้ใช้อื่น ๆ และทำการกระทำการกลั่นกรองต่อผู้ใช้เหล่านั้น manage_webhooks: จัดการเว็บฮุค @@ -761,6 +784,7 @@ th: destroyed_msg: ลบการอัปโหลดไซต์สำเร็จ! software_updates: critical_update: สำคัญ — โปรดอัปเดตอย่างรวดเร็ว + description: ขอแนะนำให้ทำให้การติดตั้ง Mastodon ของคุณทันสมัยอยู่เสมอเพื่อรับประโยชน์จากการแก้ไขและคุณลักษณะล่าสุด ยิ่งไปกว่านั้น บางครั้งก็เป็นสิ่งสำคัญที่จะอัปเดต Mastodon อย่างทันท่วงทีเพื่อหลีกเลี่ยงปัญหาความปลอดภัย ด้วยเหตุผลเหล่านี้ Mastodon จึงตรวจสอบการอัปเดตทุก 30 นาที และจะแจ้งเตือนคุณตามการกำหนดลักษณะการแจ้งเตือนอีเมลของคุณ documentation_link: เรียนรู้เพิ่มเติม release_notes: บันทึกประจำรุ่น title: การอัปเดตที่พร้อมใช้งาน @@ -867,10 +891,16 @@ th: trends: allow: อนุญาต approved: อนุมัติแล้ว + confirm_allow: คุณแน่ใจหรือไม่ว่าต้องการอนุญาตแท็กที่เลือก? + confirm_disallow: คุณแน่ใจหรือไม่ว่าต้องการไม่อนุญาตแท็กที่เลือก? disallow: ไม่อนุญาต links: allow: อนุญาตลิงก์ allow_provider: อนุญาตผู้เผยแพร่ + confirm_allow: คุณแน่ใจหรือไม่ว่าต้องการอนุญาตลิงก์ที่เลือก? + confirm_allow_provider: คุณแน่ใจหรือไม่ว่าต้องการอนุญาตผู้ให้บริการที่เลือก? + confirm_disallow: คุณแน่ใจหรือไม่ว่าต้องการไม่อนุญาตลิงก์ที่เลือก? + confirm_disallow_provider: คุณแน่ใจหรือไม่ว่าต้องการไม่อนุญาตผู้ให้บริการที่เลือก? description_html: นี่คือลิงก์ที่กำลังได้รับการแบ่งปันเป็นจำนวนมากโดยบัญชีที่เซิร์ฟเวอร์ของคุณเห็นโพสต์จากในปัจจุบัน ลิงก์สามารถช่วยให้ผู้ใช้ของคุณค้นหาสิ่งที่กำลังเกิดขึ้นในโลก จะไม่แสดงลิงก์เป็นสาธารณะจนกว่าคุณจะอนุมัติผู้เผยแพร่ คุณยังสามารถอนุญาตหรือปฏิเสธลิงก์แต่ละรายการ disallow: ไม่อนุญาตลิงก์ disallow_provider: ไม่อนุญาตผู้เผยแพร่ @@ -893,6 +923,10 @@ th: statuses: allow: อนุญาตโพสต์ allow_account: อนุญาตผู้สร้าง + confirm_allow: คุณแน่ใจหรือไม่ว่าต้องการอนุญาตสถานะที่เลือก? + confirm_allow_account: คุณแน่ใจหรือไม่ว่าต้องการอนุญาตบัญชีที่เลือก? + confirm_disallow: คุณแน่ใจหรือไม่ว่าต้องการไม่อนุญาตสถานะที่เลือก? + confirm_disallow_account: คุณแน่ใจหรือไม่ว่าต้องการไม่อนุญาตบัญชีที่เลือก? description_html: นี่คือโพสต์ที่เซิร์ฟเวอร์ของคุณทราบเกี่ยวกับที่กำลังได้รับการแบ่งปันและชื่นชอบเป็นจำนวนมากในปัจจุบันในขณะนี้ โพสต์สามารถช่วยให้ผู้ใช้ใหม่และที่กลับมาของคุณค้นหาผู้คนเพิ่มเติมที่จะติดตาม จะไม่แสดงโพสต์เป็นสาธารณะจนกว่าคุณจะอนุมัติผู้สร้าง และผู้สร้างอนุญาตให้เสนอแนะบัญชีของเขาแก่ผู้อื่น คุณยังสามารถอนุญาตหรือปฏิเสธโพสต์แต่ละรายการ disallow: ไม่อนุญาตโพสต์ disallow_account: ไม่อนุญาตผู้สร้าง diff --git a/config/locales/uk.yml b/config/locales/uk.yml index eeeb117d6c..a7b48dc320 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -460,7 +460,9 @@ uk: title: Заблокувати новий домен е-пошти no_email_domain_block_selected: Налаштування блокування доменів електронної пошти не змінено, оскільки жоден домен вибрано not_permitted: Не дозволено + resolved_dns_records_hint_html: Доменне ім'я розпізнається на наступних MX-доменах, які в результаті відповідають за приймання електронної пошти. Блокування MX-домену заблокує реєстрацію з будь-якої адреси електронної пошти, яка використовує той самий MX-домен, навіть якщо видиме ім'я домену відрізняється. Будьте обережні, щоб не заблокувати основних постачальників послуг електронної пошти. resolved_through_html: Розв'язано через %{domain} + title: Заблоковані домени електронної пошти export_domain_allows: new: title: Імпорт дозволів домену @@ -622,6 +624,7 @@ uk: resolve_description_html: Не буде застосовано жодних дій проти облікового запису, на який скаржилися, не буде записано попередження, а скаргу буде закрито. silence_description_html: Обліковий запис буде видно лише тим, хто вже за ним слідкує, або знайде його вручну, що значно обмежує його охоплення. Може завжди бути повернуто. Закриває всі скарги на цей обліковий запис. suspend_description_html: Обліковий запис і весь його вміст будуть недоступними й врешті-решт видалені, і взаємодіяти з ним буде неможливо. Відновлення можливе протягом 30 днів. Закриває всі скарги на цей обліковий запис. + actions_description_html: Визначте, які дії слід вжити для розв'язання цієї скарги. Якщо ви оберете каральні дії проти зареєстрованого облікового запису, про них буде надіслано сповіщення електронним листом, крім випадків, коли вибрано категорію Спам. actions_description_remote_html: Визначте, які дії слід вжити для розв'язання цього звіту. Це вплине тільки на те, як ваш сервер з'єднується з цим віддаленим обліковим записом і обробляє його вміст. add_to_report: Додати ще подробиць до скарги already_suspended_badges: @@ -686,6 +689,7 @@ uk: delete_data_html: Видаліть профіль @%{acct} і вміст за останні 30 днів, якщо вони не дія не скасується тим часом preview_preamble_html: "@%{acct} отримає попередження з таким вмістом:" record_strike_html: Запис попередження проти @%{acct}, що допоможе вам посилити ваші майбутні санкції проти цього облікового запису + send_email_html: Надіслати "%{acct} попереджувального електронного листа warning_placeholder: Додаткові причини дії модерації. target_origin: Походження облікового запису, на який скаржаться title: Скарги @@ -729,6 +733,7 @@ uk: manage_appeals: Керувати оскарженнями manage_appeals_description: Дозволяє користувачам розглядати оскарження дій модерації manage_blocks: Керувати блокуваннями + manage_blocks_description: Дозволяє користувачам блокувати постачальників е-пошти та IP-адреси manage_custom_emojis: Керувати користувацькими емоджі manage_custom_emojis_description: Дозволяє користувачам керувати користувацькими емоджі на сервері manage_federation: Керувати федерацією @@ -746,6 +751,7 @@ uk: manage_taxonomies: Керувати таксономіями manage_taxonomies_description: Дозволяє користувачам переглядати актуальні налаштування вмісту й оновити хештеґ manage_user_access: Керувати доступом користувачів + manage_user_access_description: Дозволяє користувачам вимкнути двоетапну перевірку інших користувачів, змінити їхню адресу електронної пошти та відновити пароль manage_users: Керувати користувачами manage_users_description: Дозволяє користувачам переглядати подробиці інших користувачів і виконувати їхню модерацію manage_webhooks: Керувати Webhooks @@ -820,6 +826,7 @@ uk: destroyed_msg: Завантаження сайту успішно видалено! software_updates: critical_update: Критично — оновіться якнайшвидше + description: Радимо постійно оновлювати інсталяцію Mastodon, щоб мати змогу користуватися найновішими виправленнями та функціями. На додаток, іноді дуже важливо вчасно оновлювати Mastodon, щоб уникнути проблем з безпекою. З цих причин Mastodon перевіряє наявність оновлень що 30 хвилин і сповіщає вас про це відповідно до ваших налаштувань сповіщень на електронну пошту. documentation_link: Докладніше release_notes: Примітки до випуску title: Доступні оновлення @@ -906,16 +913,38 @@ uk: action: Перегляньте подробиці тут message_html: "Ваше сховище об'єктів неправильно налаштоване. Приватність ваших користувачів піддається ризику" tags: + moderation: + not_trendable: Не трендові + not_usable: Невикористовувані + pending_review: Очікує розгляду + review_requested: Запит на розгляд + reviewed: Розглянуто + title: Статус + trendable: У тренді + unreviewed: Не розглянуто + usable: Можна використати + name: Назва + newest: Найновіші + oldest: Найдавніші + reset: Скинути review: Переглянути допис + search: Пошук + title: Хештеги updated_msg: Параметри хештеґів успішно оновлені title: Адміністрування trends: allow: Дозволити approved: Схвалено + confirm_allow: Ви впевнені, що хочете дозволити вибрані теги? + confirm_disallow: Ви впевнені, що хочете скасувати дозвіл для вибраних тегів? disallow: Заборонити links: allow: Дозволити посилання allow_provider: Дозволити публікатора + confirm_allow: Ви впевнені, що хочете дозволити вибрані посилання? + confirm_allow_provider: Ви впевнені, що хочете дозволити вибраних постачальників? + confirm_disallow: Ви впевнені, що хочете скасувати дозвіл вибраним посиланням? + confirm_disallow_provider: Ви впевнені, що хочете скасувати дозвіл вибраним постачальникам? description_html: Це посилання, з яких наразі багаторазово поширюються записи, з яких ваш сервер бачить дописи. Це може допомогти вашим користувачам дізнатися, що відбувається у світі. Посилання не показується публічно, поки ви не затверджуєте його публікацію. Ви також можете дозволити або відхилити окремі посилання. disallow: Заборонити посилання disallow_provider: Заборонити публікатора @@ -941,6 +970,10 @@ uk: statuses: allow: Дозволити оприлюднення allow_account: Дозволити автора + confirm_allow: Ви впевнені, що хочете дозволити вибрані статуси? + confirm_allow_account: Впевнені, що хочете дозволити вибрані облікові записи? + confirm_disallow: Ви впевнені, що хочете скасувати дозвіл на вибрані статуси? + confirm_disallow_account: Впевнені, що хочете скасувати дозвіл вибраним обліковим записам? description_html: Це дописи, про які ваш сервер знає як такі, що в даний час є спільні і навіть ті, які зараз є дуже популярними. Це може допомогти вашим новим та старим користувачам, щоб знайти більше людей для слідування. Жоден запис не відображається публічно, поки ви не затверджуєте автора, і автор дозволяє іншим користувачам підписатися на це. Ви також можете дозволити або відхилити окремі повідомлення. disallow: Заборонити допис disallow_account: Заборонити автора @@ -1064,7 +1097,9 @@ uk: guide_link_text: Кожен може взяти участь. sensitive_content: Дражливий зміст application_mailer: + notification_preferences: Змінити налаштування електронної пошти salutation: "%{name}," + settings: 'Змінити налаштування електронної пошти: %{link}' unsubscribe: Відписатися view: 'Перегляд:' view_profile: Показати профіль @@ -1084,6 +1119,7 @@ uk: hint_html: Ще одне! Ми повинні пересвідчитись, що ви людина (щоб ми могли уникнути спаму!). Розв'яжіть CAPTCHA внизу і натисніть кнопку "Продовжити". title: Перевірка безпеки confirmations: + awaiting_review: Ваша електронна адреса підтверджена! Наразі співробітники %{domain} розглядають вашу реєстрацію. Ви отримаєте електронний лист, якщо вони затвердять ваш обліковий запис! awaiting_review_title: Ваша реєстрація розглядається clicking_this_link: натисніть це посилання login_link: увійти @@ -1091,6 +1127,7 @@ uk: redirect_to_app_html: Вас мало переспрямувати до програми %{app_name}. Якщо цього не сталося, спробуйте %{clicking_this_link} або вручну поверніться до програми. registration_complete: Ваша реєстрація на %{domain} завершена! welcome_title: Ласкаво просимо, %{name}! + wrong_email_hint: Якщо ця адреса електронної пошти неправильна, можна змінити її в налаштуваннях облікового запису. delete_account: Видалити обліковий запис delete_account_html: Якщо ви хочете видалити свій обліковий запис, ви можете перейти сюди. Вас попросять підтвердити дію. description: @@ -1111,6 +1148,7 @@ uk: or_log_in_with: Або увійдіть з privacy_policy_agreement_html: Мною прочитано і я погоджуюся з політикою приватності progress: + confirm: Підтвердити електронну адресу details: Ваші дані review: Наш відгук rules: Погодитися з правилами @@ -1132,8 +1170,10 @@ uk: security: Зміна паролю set_new_password: Встановити новий пароль setup: + email_below_hint_html: Перевірте теку "Спам", або зробіть ще один запит. Ви можете виправити свою електронну адресу, якщо вона неправильна. email_settings_hint_html: Натисніть на посилання, яке ми надіслали вам, щоб підтвердити %{email}. Ми чекатимемо прямо тут. link_not_received: Не отримали посилання? + new_confirmation_instructions_sent: Ви отримаєте новий лист із посиланням для підтвердження протягом кількох хвилин! title: Перевірте вашу поштову скриньку sign_in: preamble_html: Увійдіть за допомогою облікових даних %{domain}. Якщо ваш обліковий запис розміщений на іншому сервері, ви не зможете увійти тут. @@ -1144,7 +1184,9 @@ uk: title: Налаштуймо вас на %{domain}. status: account_status: Стан облікового запису + confirming: Очікуємо завершення підтвердження за допомогою електронної пошти. functional: Ваш обліковий запис повністю робочий. + pending: Ваша заява очікує розгляду нашим персоналом. Це може тривати деякий час. Ви отримаєте електронний лист, якщо ваша заява буде схвалена. redirecting_to: Ваш обліковий запис наразі неактивний, тому що він перенаправлений до %{acct}. self_destruct: Оскільки %{domain} закривається, ви отримаєте тільки обмежений доступ до вашого облікового запису. view_strikes: Переглянути попередні попередження вашому обліковому запису @@ -1187,6 +1229,9 @@ uk: before: 'До того як продовжити, будь ласка уважно прочитайте це:' caches: Інформація, кешована іншими серверами, може залишитися data_removal: Ваші дописи й інші дані будуть вилучені назавжди + email_change_html: Ви можете змінити вашу електронну адресу, не видаляючи ваш обліковий запис + email_contact_html: Якщо його все ще немає, ви можете написати до %{email} для допомоги + email_reconfirmation_html: Якщо ви не отримали електронного листа з підтвердженням, ви можете попросити його знову irreversible: Буде неможливо відновити ваш обліковий запис more_details_html: Подробиці за посиланням політика конфіденційності. username_available: Ваше ім'я користувача стане доступним для використання @@ -1446,6 +1491,7 @@ uk: unsubscribe: action: Так, відписатися complete: Відписалися + confirmation_html: Ви впевнені, що хочете відписатися від отримання %{type} для Mastodon на %{domain} до своєї скриньки %{email}? Ви можете повторно підписатися у налаштуваннях сповіщень електронною поштою. emails: notification_emails: favourite: отримувати сповіщення про вподобання електронною поштою From 3db3e3dae58ac691fa525ce68b6eed5c1d45998e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 19 Aug 2024 10:56:08 +0200 Subject: [PATCH 05/77] Update dependency postcss-preset-env to v10.0.2 (#31488) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 390 +++++++++++++++++++++++++++--------------------------- 1 file changed, 195 insertions(+), 195 deletions(-) diff --git a/yarn.lock b/yarn.lock index fcbb1a160f..47cd777f43 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1569,13 +1569,13 @@ __metadata: languageName: node linkType: hard -"@csstools/cascade-layer-name-parser@npm:^2.0.0": - version: 2.0.0 - resolution: "@csstools/cascade-layer-name-parser@npm:2.0.0" +"@csstools/cascade-layer-name-parser@npm:^2.0.1": + version: 2.0.1 + resolution: "@csstools/cascade-layer-name-parser@npm:2.0.1" peerDependencies: - "@csstools/css-parser-algorithms": ^3.0.0 - "@csstools/css-tokenizer": ^3.0.0 - checksum: 10c0/11de0c4abad1316a6b29a2c4f7966fc39af5cbcd0a542d92cbcca8a8173d472f3d577175fc097bebf793158936193a74829a035e1cb2abccbe056473a3076d89 + "@csstools/css-parser-algorithms": ^3.0.1 + "@csstools/css-tokenizer": ^3.0.1 + checksum: 10c0/e1f9030285d1a16ca0424018289e5288e58dee2d6f6cc392e27d9e8eca0deeea4ced9b749eef09a8322746cb15b6304bc7e2d04bb9dc7405c29b3717ec80e736 languageName: node linkType: hard @@ -1586,52 +1586,52 @@ __metadata: languageName: node linkType: hard -"@csstools/css-calc@npm:^2.0.0": - version: 2.0.0 - resolution: "@csstools/css-calc@npm:2.0.0" +"@csstools/css-calc@npm:^2.0.1": + version: 2.0.1 + resolution: "@csstools/css-calc@npm:2.0.1" peerDependencies: - "@csstools/css-parser-algorithms": ^3.0.0 - "@csstools/css-tokenizer": ^3.0.0 - checksum: 10c0/441f8fafaa4f87302b85e2c46bc8a3efb388e0357f0db5c45438fe99c5660afeb524332a0a3339574fdd26392e65f8db9c7ab6db3361726f1702987e8522c531 + "@csstools/css-parser-algorithms": ^3.0.1 + "@csstools/css-tokenizer": ^3.0.1 + checksum: 10c0/84c0ba3dac51466c9ac22c3540360f6058cf351a3676d71d4412584b165a91abc7c69a4ddf5a5dacc6e6082806d2317cf50ddbc0a0562275b2aedaee41cb87a9 languageName: node linkType: hard -"@csstools/css-color-parser@npm:^3.0.1": - version: 3.0.1 - resolution: "@csstools/css-color-parser@npm:3.0.1" +"@csstools/css-color-parser@npm:^3.0.2": + version: 3.0.2 + resolution: "@csstools/css-color-parser@npm:3.0.2" dependencies: "@csstools/color-helpers": "npm:^5.0.1" - "@csstools/css-calc": "npm:^2.0.0" + "@csstools/css-calc": "npm:^2.0.1" peerDependencies: - "@csstools/css-parser-algorithms": ^3.0.0 - "@csstools/css-tokenizer": ^3.0.0 - checksum: 10c0/8890a621f916cbbf49e749d4e85e934ce55c9f9c339abcc5f4a64bc165605a6e8dd3cad9d3bbc994d2419a3b38981dca84b93ae50aa91d492fb5f0f4c9d95969 + "@csstools/css-parser-algorithms": ^3.0.1 + "@csstools/css-tokenizer": ^3.0.1 + checksum: 10c0/31f42cc22426c937f5c6999889f72b40aec8504189a6badf3319552f27a5af73dd5f46be9ebc54eb87e526468eb2546ffbd60a6879fe599efa6c98e51d6cfa3d languageName: node linkType: hard -"@csstools/css-parser-algorithms@npm:^3.0.0": - version: 3.0.0 - resolution: "@csstools/css-parser-algorithms@npm:3.0.0" +"@csstools/css-parser-algorithms@npm:^3.0.0, @csstools/css-parser-algorithms@npm:^3.0.1": + version: 3.0.1 + resolution: "@csstools/css-parser-algorithms@npm:3.0.1" peerDependencies: - "@csstools/css-tokenizer": ^3.0.0 - checksum: 10c0/ffa06c9d883e6bbb6198c98b5a395abe9847ff63ae41db54d75812e52764f550b36625fdb427c9a4ea6dfd71362aa98194ccd63afad0e521f6f3470c7515d241 + "@csstools/css-tokenizer": ^3.0.1 + checksum: 10c0/064c6d519197b5af43bbf5efe8f4cdbd361b006113aa82160d637e925b50c643a52d33d512ca01c63042d952d723a2a10798231a714668356b76668fb11294e3 languageName: node linkType: hard -"@csstools/css-tokenizer@npm:^3.0.0": - version: 3.0.0 - resolution: "@csstools/css-tokenizer@npm:3.0.0" - checksum: 10c0/6d0f3e44bfb4b309bc4e260e6399163653f5715b16ebf1f2907ec98a2b31e9b2de94c09012b6d291c6f4229cc2a521e4f66594cac1b6276a4eb205e8e23e446b +"@csstools/css-tokenizer@npm:^3.0.0, @csstools/css-tokenizer@npm:^3.0.1": + version: 3.0.1 + resolution: "@csstools/css-tokenizer@npm:3.0.1" + checksum: 10c0/c9ed4373e5731b5375ea9791590081019c04e95f08b46b272977e5e7b8c3d560affc62e82263cb8def1df1e57f0673140e7e16a14a5e7be04e6a234be088d1d3 languageName: node linkType: hard -"@csstools/media-query-list-parser@npm:^3.0.0": - version: 3.0.0 - resolution: "@csstools/media-query-list-parser@npm:3.0.0" +"@csstools/media-query-list-parser@npm:^3.0.0, @csstools/media-query-list-parser@npm:^3.0.1": + version: 3.0.1 + resolution: "@csstools/media-query-list-parser@npm:3.0.1" peerDependencies: - "@csstools/css-parser-algorithms": ^3.0.0 - "@csstools/css-tokenizer": ^3.0.0 - checksum: 10c0/0a83ab7cba4fec5543c5abf3f7145ab5742c44e0ed3349d41787739a1bd897a8cf27f35f3bc714d1d02a44b2a34f28b3b82ce6d0cb6b9c4fbb679dc034f8a152 + "@csstools/css-parser-algorithms": ^3.0.1 + "@csstools/css-tokenizer": ^3.0.1 + checksum: 10c0/fca1935cabf9fb94128da87f72c34aa2cfce8eb0beba4c78d685c7b42aaba3521067710afc6905b7347fc41fe53947536ce15a7ef3387b48763d8f7d71778d5e languageName: node linkType: hard @@ -1647,60 +1647,60 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-color-function@npm:^4.0.1": - version: 4.0.1 - resolution: "@csstools/postcss-color-function@npm:4.0.1" +"@csstools/postcss-color-function@npm:^4.0.2": + version: 4.0.2 + resolution: "@csstools/postcss-color-function@npm:4.0.2" dependencies: - "@csstools/css-color-parser": "npm:^3.0.1" - "@csstools/css-parser-algorithms": "npm:^3.0.0" - "@csstools/css-tokenizer": "npm:^3.0.0" + "@csstools/css-color-parser": "npm:^3.0.2" + "@csstools/css-parser-algorithms": "npm:^3.0.1" + "@csstools/css-tokenizer": "npm:^3.0.1" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/f0d3dd0677d381df54987d13ea63a59e911816d98a22eda7a5e55ca2908f52afc42fbffb73a8d25a18632b936dc38f6ada9f3e2dd7911cf775ce3718657420f4 + checksum: 10c0/c987ccc7ab326668895396d3fe69c05087cf6e245be6f70e8c33da0cdeb56f8ac3d117cfad984191ec57be9691ab56d427aaa28c61c4a7446521972993dd5039 languageName: node linkType: hard -"@csstools/postcss-color-mix-function@npm:^3.0.1": - version: 3.0.1 - resolution: "@csstools/postcss-color-mix-function@npm:3.0.1" +"@csstools/postcss-color-mix-function@npm:^3.0.2": + version: 3.0.2 + resolution: "@csstools/postcss-color-mix-function@npm:3.0.2" dependencies: - "@csstools/css-color-parser": "npm:^3.0.1" - "@csstools/css-parser-algorithms": "npm:^3.0.0" - "@csstools/css-tokenizer": "npm:^3.0.0" + "@csstools/css-color-parser": "npm:^3.0.2" + "@csstools/css-parser-algorithms": "npm:^3.0.1" + "@csstools/css-tokenizer": "npm:^3.0.1" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/ff76400d132c42d70f58b0908ab602b550b43720320288eb4ca1f185e7340c6f232b2a789ac94be255fc7bedc3c6125314d564297d23606fb2c91a1e2d79c40b + checksum: 10c0/cfdc641f504f9d02b9a7b53d6bd933d4e767ecaee5f3d2df45d897f69b8a38b5b79b538d307b16fb56dcb7c19dc7e107518c356772e89771e28e04fd846d9035 languageName: node linkType: hard -"@csstools/postcss-content-alt-text@npm:^2.0.0": - version: 2.0.0 - resolution: "@csstools/postcss-content-alt-text@npm:2.0.0" +"@csstools/postcss-content-alt-text@npm:^2.0.1": + version: 2.0.1 + resolution: "@csstools/postcss-content-alt-text@npm:2.0.1" dependencies: - "@csstools/css-parser-algorithms": "npm:^3.0.0" - "@csstools/css-tokenizer": "npm:^3.0.0" + "@csstools/css-parser-algorithms": "npm:^3.0.1" + "@csstools/css-tokenizer": "npm:^3.0.1" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/978e99425f1b5420c55282f51de65646b910f9d60621f5ad7adb7a2dace26c68dc384cd4798604e2c5d8bcd1e635a20474a6ea044a7e9b449d068d6db77a2738 + checksum: 10c0/693e4cfa9a30a9c384120bd24846a7cd5ba1e1ebf975eb81b0e0131a21ac28a0301c7dcfa13706bc7d8b5343536fb43a46de636c3257d0fd05041c7255366e87 languageName: node linkType: hard -"@csstools/postcss-exponential-functions@npm:^2.0.0": - version: 2.0.0 - resolution: "@csstools/postcss-exponential-functions@npm:2.0.0" +"@csstools/postcss-exponential-functions@npm:^2.0.1": + version: 2.0.1 + resolution: "@csstools/postcss-exponential-functions@npm:2.0.1" dependencies: - "@csstools/css-calc": "npm:^2.0.0" - "@csstools/css-parser-algorithms": "npm:^3.0.0" - "@csstools/css-tokenizer": "npm:^3.0.0" + "@csstools/css-calc": "npm:^2.0.1" + "@csstools/css-parser-algorithms": "npm:^3.0.1" + "@csstools/css-tokenizer": "npm:^3.0.1" peerDependencies: postcss: ^8.4 - checksum: 10c0/a5ccd4fb5b6f6f370bf07ef8f918658ef4d9865a92d9866f57edfe7479c6a486701520cbe0efb8f39af9b78eda0819d8663554e9797b8bdcadc2291733bf6b3f + checksum: 10c0/ddcaedfa48cc0cf93611c8d2ed5a75d56c1d196a97015db644b45881adabb47f3255242acaef6ea869a1e5ba66328725d254bf6d29eb5e988cde8b040bc5f55d languageName: node linkType: hard @@ -1716,46 +1716,46 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-gamut-mapping@npm:^2.0.1": - version: 2.0.1 - resolution: "@csstools/postcss-gamut-mapping@npm:2.0.1" +"@csstools/postcss-gamut-mapping@npm:^2.0.2": + version: 2.0.2 + resolution: "@csstools/postcss-gamut-mapping@npm:2.0.2" dependencies: - "@csstools/css-color-parser": "npm:^3.0.1" - "@csstools/css-parser-algorithms": "npm:^3.0.0" - "@csstools/css-tokenizer": "npm:^3.0.0" + "@csstools/css-color-parser": "npm:^3.0.2" + "@csstools/css-parser-algorithms": "npm:^3.0.1" + "@csstools/css-tokenizer": "npm:^3.0.1" peerDependencies: postcss: ^8.4 - checksum: 10c0/3415c420463dd481a3ddf5b104f15661492d9aa3613c109f9b7354b2664965a92036045e157945348cf2c06e075b89a0c0c4f49c8a00d41c827c5b61de297cd0 + checksum: 10c0/8b6504f81c5036e3c2a9f9516c371f48a283112469b746546c8c7f6f0da2467c915d4dac6dfe8bb05d7dab3a7503911391eb9e666cb7632e09a032e801c029f5 languageName: node linkType: hard -"@csstools/postcss-gradients-interpolation-method@npm:^5.0.1": - version: 5.0.1 - resolution: "@csstools/postcss-gradients-interpolation-method@npm:5.0.1" +"@csstools/postcss-gradients-interpolation-method@npm:^5.0.2": + version: 5.0.2 + resolution: "@csstools/postcss-gradients-interpolation-method@npm:5.0.2" dependencies: - "@csstools/css-color-parser": "npm:^3.0.1" - "@csstools/css-parser-algorithms": "npm:^3.0.0" - "@csstools/css-tokenizer": "npm:^3.0.0" + "@csstools/css-color-parser": "npm:^3.0.2" + "@csstools/css-parser-algorithms": "npm:^3.0.1" + "@csstools/css-tokenizer": "npm:^3.0.1" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/a1c5d6bf308ff9e1972cb39030859cd135246f8f697e5d1278ddd8ed27ce53eb76b3e628acc64145290006f45140d0a4a65e5df71f131d3e6447f0e5d3301088 + checksum: 10c0/4fa27437ad9861b1457c28228f2503c17bcc2f77dcb38da1314a4a5d38fd010e7e5d11b5f9d69e0a2cb2999bbfeca1e99ce2f59422bda5b382658dcb03f7326e languageName: node linkType: hard -"@csstools/postcss-hwb-function@npm:^4.0.1": - version: 4.0.1 - resolution: "@csstools/postcss-hwb-function@npm:4.0.1" +"@csstools/postcss-hwb-function@npm:^4.0.2": + version: 4.0.2 + resolution: "@csstools/postcss-hwb-function@npm:4.0.2" dependencies: - "@csstools/css-color-parser": "npm:^3.0.1" - "@csstools/css-parser-algorithms": "npm:^3.0.0" - "@csstools/css-tokenizer": "npm:^3.0.0" + "@csstools/css-color-parser": "npm:^3.0.2" + "@csstools/css-parser-algorithms": "npm:^3.0.1" + "@csstools/css-tokenizer": "npm:^3.0.1" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/3247c3ab75d3cdb0ca80f7bb63d944ce933694ee9d7ee68aea11e727e883e0d35936b4a29e28700bda5eea2be26917a6c95c22a6b244e945cc558669f88b8a6e + checksum: 10c0/46dc9596e37830de4c38f70764d6da9f2fc7bc339217b4291eced75daa8998c4e05fb743c271701e44818df4ac111c285019b7bb3a728e8b61d86899bbeb74eb languageName: node linkType: hard @@ -1793,17 +1793,17 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-light-dark-function@npm:^2.0.1": - version: 2.0.1 - resolution: "@csstools/postcss-light-dark-function@npm:2.0.1" +"@csstools/postcss-light-dark-function@npm:^2.0.2": + version: 2.0.2 + resolution: "@csstools/postcss-light-dark-function@npm:2.0.2" dependencies: - "@csstools/css-parser-algorithms": "npm:^3.0.0" - "@csstools/css-tokenizer": "npm:^3.0.0" + "@csstools/css-parser-algorithms": "npm:^3.0.1" + "@csstools/css-tokenizer": "npm:^3.0.1" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/4caf23781daa72f036a830b7fc2c07cde1122afd7bc7c6a291992b5264ea92c1fb22ec2ed684c5ce50e6e848f6d0ea39ef34a5679ea37a546b8db6eb555e3f80 + checksum: 10c0/f8973c435868998e5d6af1fc0c35b27bbf65fa9d0c35f5055c689b8ee2807a16802044e296f7def39a7253ae544fb49559e8273ee22eb4e21845aa980a1bc82b languageName: node linkType: hard @@ -1845,42 +1845,42 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-logical-viewport-units@npm:^3.0.0": - version: 3.0.0 - resolution: "@csstools/postcss-logical-viewport-units@npm:3.0.0" +"@csstools/postcss-logical-viewport-units@npm:^3.0.1": + version: 3.0.1 + resolution: "@csstools/postcss-logical-viewport-units@npm:3.0.1" dependencies: - "@csstools/css-tokenizer": "npm:^3.0.0" + "@csstools/css-tokenizer": "npm:^3.0.1" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/d474f3b8b3949516ad431c8297eb26ad7ba8829dc323c1a99c25be79af0fa16eef43ddd4d980ea97a676599c5587b4b2afd44c9a1055cf3573bfb2090ecbbd5c + checksum: 10c0/f54f91ec4d308562371576e82131c3cc1ff461a951c9a38f0b42b783c26f37a93cc846fcd025d3c4a8437b55a4fff1192ebfac8ccf84abb6478b2c515d232552 languageName: node linkType: hard -"@csstools/postcss-media-minmax@npm:^2.0.0": - version: 2.0.0 - resolution: "@csstools/postcss-media-minmax@npm:2.0.0" +"@csstools/postcss-media-minmax@npm:^2.0.1": + version: 2.0.1 + resolution: "@csstools/postcss-media-minmax@npm:2.0.1" dependencies: - "@csstools/css-calc": "npm:^2.0.0" - "@csstools/css-parser-algorithms": "npm:^3.0.0" - "@csstools/css-tokenizer": "npm:^3.0.0" - "@csstools/media-query-list-parser": "npm:^3.0.0" + "@csstools/css-calc": "npm:^2.0.1" + "@csstools/css-parser-algorithms": "npm:^3.0.1" + "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/media-query-list-parser": "npm:^3.0.1" peerDependencies: postcss: ^8.4 - checksum: 10c0/30f8cde005ae5d3750f8d2d62a26570381e306a2a4c3fdeef2ad48febbefd389c65ea471914b69ae8772a4abbd11cd52a78ecdb5d8929ed553ca1d5731f212a2 + checksum: 10c0/23c1fb0c3ed8bf82f3223f161d0d65ba62045b917bc19624581f64aaa5d678485d22c23af2591a3f634ba02030ccb419c2b30209aa22f9fd2baa1a6474af810a languageName: node linkType: hard -"@csstools/postcss-media-queries-aspect-ratio-number-values@npm:^3.0.0": - version: 3.0.0 - resolution: "@csstools/postcss-media-queries-aspect-ratio-number-values@npm:3.0.0" +"@csstools/postcss-media-queries-aspect-ratio-number-values@npm:^3.0.1": + version: 3.0.1 + resolution: "@csstools/postcss-media-queries-aspect-ratio-number-values@npm:3.0.1" dependencies: - "@csstools/css-parser-algorithms": "npm:^3.0.0" - "@csstools/css-tokenizer": "npm:^3.0.0" - "@csstools/media-query-list-parser": "npm:^3.0.0" + "@csstools/css-parser-algorithms": "npm:^3.0.1" + "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/media-query-list-parser": "npm:^3.0.1" peerDependencies: postcss: ^8.4 - checksum: 10c0/c7af426e44c4ca2c7cb48c2f54bd8b5e4531d4d7a568011c367038956789bf47bab996fa062f767e255229de3598fb89abdb85011872158c885a4d3ace142509 + checksum: 10c0/e491cb149fb4fff85b2f03191511e43654ae00716e3c1ea9f1dc22ec4e7042c35f034d372082a69d3621c86cafbe46e8f419872fa36f4a534f145f584d655768 languageName: node linkType: hard @@ -1907,18 +1907,18 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-oklab-function@npm:^4.0.1": - version: 4.0.1 - resolution: "@csstools/postcss-oklab-function@npm:4.0.1" +"@csstools/postcss-oklab-function@npm:^4.0.2": + version: 4.0.2 + resolution: "@csstools/postcss-oklab-function@npm:4.0.2" dependencies: - "@csstools/css-color-parser": "npm:^3.0.1" - "@csstools/css-parser-algorithms": "npm:^3.0.0" - "@csstools/css-tokenizer": "npm:^3.0.0" + "@csstools/css-color-parser": "npm:^3.0.2" + "@csstools/css-parser-algorithms": "npm:^3.0.1" + "@csstools/css-tokenizer": "npm:^3.0.1" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/b4450fb792c505936e1f9290e8df5420e98ccba78fa1badc9261ff99bebff8cc3b1f050e518728de791acadba08b5e8c213d97b479f551b72b4f8a5793625998 + checksum: 10c0/3209a7cec6d3577544a7ef41f2d5cca25f77891d4ec0d7f39d32f9a79a6c9a9b0ee6b54b2937a2d995548ad11c39966b07d4b9f58e907ffbe1a4b454f2d277f3 languageName: node linkType: hard @@ -1933,18 +1933,18 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-relative-color-syntax@npm:^3.0.1": - version: 3.0.1 - resolution: "@csstools/postcss-relative-color-syntax@npm:3.0.1" +"@csstools/postcss-relative-color-syntax@npm:^3.0.2": + version: 3.0.2 + resolution: "@csstools/postcss-relative-color-syntax@npm:3.0.2" dependencies: - "@csstools/css-color-parser": "npm:^3.0.1" - "@csstools/css-parser-algorithms": "npm:^3.0.0" - "@csstools/css-tokenizer": "npm:^3.0.0" + "@csstools/css-color-parser": "npm:^3.0.2" + "@csstools/css-parser-algorithms": "npm:^3.0.1" + "@csstools/css-tokenizer": "npm:^3.0.1" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/95a0001549b0fcae6add7db6264d16183734a9dd94e54e9b606b0dcefbd96540d8917707eef2525a5024e4078ef039acfa05c2c1b309fe444a7fc1f1c05d6594 + checksum: 10c0/34a8c999e08c6e7833484ee2fb91e7fcc25235d6c361712fed581e44a5a29f1ceb95415b6f4260de53809ac13f5da5415d1905c2971477cf5d45e5196081c663 languageName: node linkType: hard @@ -1959,16 +1959,16 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-stepped-value-functions@npm:^4.0.0": - version: 4.0.0 - resolution: "@csstools/postcss-stepped-value-functions@npm:4.0.0" +"@csstools/postcss-stepped-value-functions@npm:^4.0.1": + version: 4.0.1 + resolution: "@csstools/postcss-stepped-value-functions@npm:4.0.1" dependencies: - "@csstools/css-calc": "npm:^2.0.0" - "@csstools/css-parser-algorithms": "npm:^3.0.0" - "@csstools/css-tokenizer": "npm:^3.0.0" + "@csstools/css-calc": "npm:^2.0.1" + "@csstools/css-parser-algorithms": "npm:^3.0.1" + "@csstools/css-tokenizer": "npm:^3.0.1" peerDependencies: postcss: ^8.4 - checksum: 10c0/02d9b99921a69838d5df7cc2703f381e8e18d14ac5a4bd8b8b24ff80bc9657ff70b1997cdbfd9c2f1985a5d07478a0e97d1617760519450c5475cc1d8159e788 + checksum: 10c0/7e65969b124fce603675ca17c2ffa2bb456677866e54bc9fbdc4da0945be1593fde2abb0730d3d03190776ad2022b394a1f9d4834c5b1f4c7ec497929fd35f8f languageName: node linkType: hard @@ -1984,16 +1984,16 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-trigonometric-functions@npm:^4.0.0": - version: 4.0.0 - resolution: "@csstools/postcss-trigonometric-functions@npm:4.0.0" +"@csstools/postcss-trigonometric-functions@npm:^4.0.1": + version: 4.0.1 + resolution: "@csstools/postcss-trigonometric-functions@npm:4.0.1" dependencies: - "@csstools/css-calc": "npm:^2.0.0" - "@csstools/css-parser-algorithms": "npm:^3.0.0" - "@csstools/css-tokenizer": "npm:^3.0.0" + "@csstools/css-calc": "npm:^2.0.1" + "@csstools/css-parser-algorithms": "npm:^3.0.1" + "@csstools/css-tokenizer": "npm:^3.0.1" peerDependencies: postcss: ^8.4 - checksum: 10c0/3a53d6724f068511d02a2de3b39e76bf99d622614e1c79b3d2c2eace2f0d36d865288dc2c4a1368fee8db38be7973803504400b2752cd5a1200f825ddc27b253 + checksum: 10c0/59e017ebb9f4f8f027e134024e3322b5e202cc96073e0bb0d45733a829c8eadc7f4f7ce57ce8360a748a677595af9ea95da1779684699b48b911b73b4017ac8b languageName: node linkType: hard @@ -13311,18 +13311,18 @@ __metadata: languageName: node linkType: hard -"postcss-color-functional-notation@npm:^7.0.1": - version: 7.0.1 - resolution: "postcss-color-functional-notation@npm:7.0.1" +"postcss-color-functional-notation@npm:^7.0.2": + version: 7.0.2 + resolution: "postcss-color-functional-notation@npm:7.0.2" dependencies: - "@csstools/css-color-parser": "npm:^3.0.1" - "@csstools/css-parser-algorithms": "npm:^3.0.0" - "@csstools/css-tokenizer": "npm:^3.0.0" + "@csstools/css-color-parser": "npm:^3.0.2" + "@csstools/css-parser-algorithms": "npm:^3.0.1" + "@csstools/css-tokenizer": "npm:^3.0.1" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/0cdfae4d85cb34425c8363b699b5da6f0c8cc43e7ce3b7fdd1fd39429ee81a4af75f973cd5c8293b1072688064da17a0a633827f23667e8cc0ff16217f0004eb + checksum: 10c0/e89c0bff94558b0c978ac36f7e02f7f516291f90fd43169d39c63ad2bb0415e3b1c4b3c2469280d578727e850fdf15a557230cb28275f3f0676f0f73187f2867 languageName: node linkType: hard @@ -13376,46 +13376,46 @@ __metadata: languageName: node linkType: hard -"postcss-custom-media@npm:^11.0.0": - version: 11.0.0 - resolution: "postcss-custom-media@npm:11.0.0" +"postcss-custom-media@npm:^11.0.1": + version: 11.0.1 + resolution: "postcss-custom-media@npm:11.0.1" dependencies: - "@csstools/cascade-layer-name-parser": "npm:^2.0.0" - "@csstools/css-parser-algorithms": "npm:^3.0.0" - "@csstools/css-tokenizer": "npm:^3.0.0" - "@csstools/media-query-list-parser": "npm:^3.0.0" + "@csstools/cascade-layer-name-parser": "npm:^2.0.1" + "@csstools/css-parser-algorithms": "npm:^3.0.1" + "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/media-query-list-parser": "npm:^3.0.1" peerDependencies: postcss: ^8.4 - checksum: 10c0/99e58454453581a1a4f5b7eae5cf6504c445e45d48035f09857603437fe80de06a216d0dad6036d32d14108b490e82a0845e1b4e0ec5114f752b325e388f0f1c + checksum: 10c0/771b281a28f105370ede7c4a86f9e3dd8d9ec3bf2d2883d4f2cfe9c42b5ec1bf88f713458b356870315d0ba3a285fbeb7bb514a1203d1c4fb113bd9044369bf2 languageName: node linkType: hard -"postcss-custom-properties@npm:^14.0.0": - version: 14.0.0 - resolution: "postcss-custom-properties@npm:14.0.0" +"postcss-custom-properties@npm:^14.0.1": + version: 14.0.1 + resolution: "postcss-custom-properties@npm:14.0.1" dependencies: - "@csstools/cascade-layer-name-parser": "npm:^2.0.0" - "@csstools/css-parser-algorithms": "npm:^3.0.0" - "@csstools/css-tokenizer": "npm:^3.0.0" + "@csstools/cascade-layer-name-parser": "npm:^2.0.1" + "@csstools/css-parser-algorithms": "npm:^3.0.1" + "@csstools/css-tokenizer": "npm:^3.0.1" "@csstools/utilities": "npm:^2.0.0" postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/f587e2f3026fa7ceb63dd111674848b97dc452f9e75a6480b4b87611a4705dd97e5ae5247e7d34888aecd95b4e50706170c93f57f14f05fb352135d2decdc00f + checksum: 10c0/12180a7f4a4fe2d528387346a1810b82ed870081756dcf6be226c839716ab3f6f4d6ca4c7208a07d7d84bf2c986beef6473e29964e7c2572066fca5d3b000ed5 languageName: node linkType: hard -"postcss-custom-selectors@npm:^8.0.0": - version: 8.0.0 - resolution: "postcss-custom-selectors@npm:8.0.0" +"postcss-custom-selectors@npm:^8.0.1": + version: 8.0.1 + resolution: "postcss-custom-selectors@npm:8.0.1" dependencies: - "@csstools/cascade-layer-name-parser": "npm:^2.0.0" - "@csstools/css-parser-algorithms": "npm:^3.0.0" - "@csstools/css-tokenizer": "npm:^3.0.0" + "@csstools/cascade-layer-name-parser": "npm:^2.0.1" + "@csstools/css-parser-algorithms": "npm:^3.0.1" + "@csstools/css-tokenizer": "npm:^3.0.1" postcss-selector-parser: "npm:^6.1.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/efc9ce0e9c92f298b9196e1cf240ef0e15f88bb3f90f441beecd05756e31628b27a56dcb176f696d3d34c8d4d879c0eb70d1cb62b44c55e01ebd2a653b8a9e94 + checksum: 10c0/b867233b3d68fbab90afca8a776eb74196ebc3fac8988175d95118a47993c793138fec6cc580272bb35d9bd31086acbdd33ff86da0cab83ef2f08bfc1c23ecd6 languageName: node linkType: hard @@ -13533,18 +13533,18 @@ __metadata: languageName: node linkType: hard -"postcss-lab-function@npm:^7.0.1": - version: 7.0.1 - resolution: "postcss-lab-function@npm:7.0.1" +"postcss-lab-function@npm:^7.0.2": + version: 7.0.2 + resolution: "postcss-lab-function@npm:7.0.2" dependencies: - "@csstools/css-color-parser": "npm:^3.0.1" - "@csstools/css-parser-algorithms": "npm:^3.0.0" - "@csstools/css-tokenizer": "npm:^3.0.0" + "@csstools/css-color-parser": "npm:^3.0.2" + "@csstools/css-parser-algorithms": "npm:^3.0.1" + "@csstools/css-tokenizer": "npm:^3.0.1" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/8a6f3f465911c5c608650e3ebec01097d274109eea0fceb925f1ca52213c67a6496570ff2ba9af0a6c2153e208ef1d10cc43ad81f38405f5d39639680f7150a9 + checksum: 10c0/6b2be7e762b4ccb58ea9051723d390f6732ad78bb30bfef9499139cf5e2ac160c3de31b2b005fcc30e9fced4abe1685df6cb76c99d548896bae6746105ac8520 languageName: node linkType: hard @@ -13865,38 +13865,38 @@ __metadata: linkType: hard "postcss-preset-env@npm:^10.0.0": - version: 10.0.1 - resolution: "postcss-preset-env@npm:10.0.1" + version: 10.0.2 + resolution: "postcss-preset-env@npm:10.0.2" dependencies: "@csstools/postcss-cascade-layers": "npm:^5.0.0" - "@csstools/postcss-color-function": "npm:^4.0.1" - "@csstools/postcss-color-mix-function": "npm:^3.0.1" - "@csstools/postcss-content-alt-text": "npm:^2.0.0" - "@csstools/postcss-exponential-functions": "npm:^2.0.0" + "@csstools/postcss-color-function": "npm:^4.0.2" + "@csstools/postcss-color-mix-function": "npm:^3.0.2" + "@csstools/postcss-content-alt-text": "npm:^2.0.1" + "@csstools/postcss-exponential-functions": "npm:^2.0.1" "@csstools/postcss-font-format-keywords": "npm:^4.0.0" - "@csstools/postcss-gamut-mapping": "npm:^2.0.1" - "@csstools/postcss-gradients-interpolation-method": "npm:^5.0.1" - "@csstools/postcss-hwb-function": "npm:^4.0.1" + "@csstools/postcss-gamut-mapping": "npm:^2.0.2" + "@csstools/postcss-gradients-interpolation-method": "npm:^5.0.2" + "@csstools/postcss-hwb-function": "npm:^4.0.2" "@csstools/postcss-ic-unit": "npm:^4.0.0" "@csstools/postcss-initial": "npm:^2.0.0" "@csstools/postcss-is-pseudo-class": "npm:^5.0.0" - "@csstools/postcss-light-dark-function": "npm:^2.0.1" + "@csstools/postcss-light-dark-function": "npm:^2.0.2" "@csstools/postcss-logical-float-and-clear": "npm:^3.0.0" "@csstools/postcss-logical-overflow": "npm:^2.0.0" "@csstools/postcss-logical-overscroll-behavior": "npm:^2.0.0" "@csstools/postcss-logical-resize": "npm:^3.0.0" - "@csstools/postcss-logical-viewport-units": "npm:^3.0.0" - "@csstools/postcss-media-minmax": "npm:^2.0.0" - "@csstools/postcss-media-queries-aspect-ratio-number-values": "npm:^3.0.0" + "@csstools/postcss-logical-viewport-units": "npm:^3.0.1" + "@csstools/postcss-media-minmax": "npm:^2.0.1" + "@csstools/postcss-media-queries-aspect-ratio-number-values": "npm:^3.0.1" "@csstools/postcss-nested-calc": "npm:^4.0.0" "@csstools/postcss-normalize-display-values": "npm:^4.0.0" - "@csstools/postcss-oklab-function": "npm:^4.0.1" + "@csstools/postcss-oklab-function": "npm:^4.0.2" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" - "@csstools/postcss-relative-color-syntax": "npm:^3.0.1" + "@csstools/postcss-relative-color-syntax": "npm:^3.0.2" "@csstools/postcss-scope-pseudo-class": "npm:^4.0.0" - "@csstools/postcss-stepped-value-functions": "npm:^4.0.0" + "@csstools/postcss-stepped-value-functions": "npm:^4.0.1" "@csstools/postcss-text-decoration-shorthand": "npm:^4.0.1" - "@csstools/postcss-trigonometric-functions": "npm:^4.0.0" + "@csstools/postcss-trigonometric-functions": "npm:^4.0.1" "@csstools/postcss-unset-value": "npm:^4.0.0" autoprefixer: "npm:^10.4.19" browserslist: "npm:^4.23.1" @@ -13906,12 +13906,12 @@ __metadata: cssdb: "npm:^8.1.0" postcss-attribute-case-insensitive: "npm:^7.0.0" postcss-clamp: "npm:^4.1.0" - postcss-color-functional-notation: "npm:^7.0.1" + postcss-color-functional-notation: "npm:^7.0.2" postcss-color-hex-alpha: "npm:^10.0.0" postcss-color-rebeccapurple: "npm:^10.0.0" - postcss-custom-media: "npm:^11.0.0" - postcss-custom-properties: "npm:^14.0.0" - postcss-custom-selectors: "npm:^8.0.0" + postcss-custom-media: "npm:^11.0.1" + postcss-custom-properties: "npm:^14.0.1" + postcss-custom-selectors: "npm:^8.0.1" postcss-dir-pseudo-class: "npm:^9.0.0" postcss-double-position-gradients: "npm:^6.0.0" postcss-focus-visible: "npm:^10.0.0" @@ -13919,7 +13919,7 @@ __metadata: postcss-font-variant: "npm:^5.0.0" postcss-gap-properties: "npm:^6.0.0" postcss-image-set-function: "npm:^7.0.0" - postcss-lab-function: "npm:^7.0.1" + postcss-lab-function: "npm:^7.0.2" postcss-logical: "npm:^8.0.0" postcss-nesting: "npm:^13.0.0" postcss-opacity-percentage: "npm:^2.0.0" @@ -13931,7 +13931,7 @@ __metadata: postcss-selector-not: "npm:^8.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/5849915d040413f68ab71b3489daaa5b6687b4d4710da47a0d1420df0890858f0b53c9ec6755d872dbe38a2695ab12584be654456e3d6ce311b88927209c02b2 + checksum: 10c0/51eb19994dfdbb041e87082833bedf8976053c182ae8dafab6b3ee1bf2cfd309ab9c186644ed032518011e44fbcc9f0552083bc431535779a80a919bbe78d10d languageName: node linkType: hard From 31d374e5f57c797e4d4e5bd40ed4c4bb12bfd5fc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 19 Aug 2024 13:42:33 +0200 Subject: [PATCH 06/77] Update opentelemetry-ruby (non-major) (#31451) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 61bdb1d39c..dada7c86c7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -514,17 +514,17 @@ GEM opentelemetry-api (~> 1.0) opentelemetry-instrumentation-base (~> 0.22.1) opentelemetry-instrumentation-rack (~> 0.21) - opentelemetry-instrumentation-action_view (0.7.1) + opentelemetry-instrumentation-action_view (0.7.2) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-active_support (~> 0.1) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-active_job (0.7.4) + opentelemetry-instrumentation-active_job (0.7.6) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-base (~> 0.22.1) opentelemetry-instrumentation-active_model_serializers (0.20.2) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-active_record (0.7.2) + opentelemetry-instrumentation-active_record (0.7.3) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-base (~> 0.22.1) opentelemetry-instrumentation-active_support (0.6.0) @@ -558,7 +558,7 @@ GEM opentelemetry-instrumentation-rack (0.24.6) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-rails (0.31.1) + opentelemetry-instrumentation-rails (0.31.2) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-action_mailer (~> 0.1.0) opentelemetry-instrumentation-action_pack (~> 0.9.0) From 71f257d5291a091cfb005d28221d4ab38698ef42 Mon Sep 17 00:00:00 2001 From: Emelia Smith Date: Mon, 19 Aug 2024 14:28:06 +0200 Subject: [PATCH 07/77] Disable rule selector in ReportReasonSelector if instance has no rules (#31458) --- .../mastodon/components/admin/ReportReasonSelector.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/components/admin/ReportReasonSelector.jsx b/app/javascript/mastodon/components/admin/ReportReasonSelector.jsx index cc05e5c163..351f1c949e 100644 --- a/app/javascript/mastodon/components/admin/ReportReasonSelector.jsx +++ b/app/javascript/mastodon/components/admin/ReportReasonSelector.jsx @@ -153,7 +153,7 @@ class ReportReasonSelector extends PureComponent { - + {rules.map(rule => )} From 99051479c137b04367266992514914c8b4e016db Mon Sep 17 00:00:00 2001 From: Emelia Smith Date: Mon, 19 Aug 2024 15:25:40 +0200 Subject: [PATCH 08/77] Fix Trending Tags pending review having an unstable sort order (#31473) Co-authored-by: Claire --- app/models/trends/tag_filter.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/trends/tag_filter.rb b/app/models/trends/tag_filter.rb index 46b747819e..d6f88a9486 100644 --- a/app/models/trends/tag_filter.rb +++ b/app/models/trends/tag_filter.rb @@ -14,7 +14,7 @@ class Trends::TagFilter def results scope = if params[:status] == 'pending_review' - Tag.unscoped + Tag.unscoped.order(id: :desc) else trending_scope end From 40f6631ac9474e2c78c15b9d6d360c8c45e26dd9 Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Mon, 19 Aug 2024 15:55:18 +0200 Subject: [PATCH 09/77] Fix Husky git hooks not being installed anymore (#31435) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 371b7cbf3d..321a78598d 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "lint:css": "stylelint \"**/*.{css,scss}\"", "lint": "yarn lint:js && yarn lint:css", "postversion": "git push --tags", - "prepare": "husky", + "postinstall": "test -d node_modules/husky && husky || echo \"husky is not installed\"", "start": "node ./streaming/index.js", "test": "yarn lint && yarn run typecheck && yarn jest", "typecheck": "tsc --noEmit" From 1e612c5a09097ef62f26bb9882125dc2d53c92df Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 19 Aug 2024 16:41:32 +0200 Subject: [PATCH 10/77] Refactor some actions to be proper async actions instead of passing a continuation (#31453) --- .../mastodon/actions/notifications.js | 14 +++--- .../actions/notifications_migration.tsx | 2 +- app/javascript/mastodon/actions/streaming.js | 27 ++++------ app/javascript/mastodon/actions/timelines.js | 50 ++++++++----------- .../mastodon/features/link_timeline/index.tsx | 4 +- 5 files changed, 42 insertions(+), 55 deletions(-) diff --git a/app/javascript/mastodon/actions/notifications.js b/app/javascript/mastodon/actions/notifications.js index 7d6a9d5a32..f5105d460f 100644 --- a/app/javascript/mastodon/actions/notifications.js +++ b/app/javascript/mastodon/actions/notifications.js @@ -188,8 +188,8 @@ const noOp = () => {}; let expandNotificationsController = new AbortController(); -export function expandNotifications({ maxId, forceLoad = false } = {}, done = noOp) { - return (dispatch, getState) => { +export function expandNotifications({ maxId = undefined, forceLoad = false }) { + return async (dispatch, getState) => { const activeFilter = getState().getIn(['settings', 'notifications', 'quickFilter', 'active']); const notifications = getState().get('notifications'); const isLoadingMore = !!maxId; @@ -199,7 +199,6 @@ export function expandNotifications({ maxId, forceLoad = false } = {}, done = no expandNotificationsController.abort(); expandNotificationsController = new AbortController(); } else { - done(); return; } } @@ -226,7 +225,8 @@ export function expandNotifications({ maxId, forceLoad = false } = {}, done = no dispatch(expandNotificationsRequest(isLoadingMore)); - api().get('/api/v1/notifications', { params, signal: expandNotificationsController.signal }).then(response => { + try { + const response = await api().get('/api/v1/notifications', { params, signal: expandNotificationsController.signal }); const next = getLinks(response).refs.find(link => link.rel === 'next'); dispatch(importFetchedAccounts(response.data.map(item => item.account))); @@ -236,11 +236,9 @@ export function expandNotifications({ maxId, forceLoad = false } = {}, done = no dispatch(expandNotificationsSuccess(response.data, next ? next.uri : null, isLoadingMore, isLoadingRecent, isLoadingRecent && preferPendingItems)); fetchRelatedRelationships(dispatch, response.data); dispatch(submitMarkers()); - }).catch(error => { + } catch(error) { dispatch(expandNotificationsFail(error, isLoadingMore)); - }).finally(() => { - done(); - }); + } }; } diff --git a/app/javascript/mastodon/actions/notifications_migration.tsx b/app/javascript/mastodon/actions/notifications_migration.tsx index f856e56828..b453aed6ef 100644 --- a/app/javascript/mastodon/actions/notifications_migration.tsx +++ b/app/javascript/mastodon/actions/notifications_migration.tsx @@ -13,6 +13,6 @@ export const initializeNotifications = createAppAsyncThunk( ) as boolean; if (enableBeta) void dispatch(fetchNotifications()); - else dispatch(expandNotifications()); + else void dispatch(expandNotifications()); }, ); diff --git a/app/javascript/mastodon/actions/streaming.js b/app/javascript/mastodon/actions/streaming.js index 44025bd596..630da3ef6e 100644 --- a/app/javascript/mastodon/actions/streaming.js +++ b/app/javascript/mastodon/actions/streaming.js @@ -37,7 +37,7 @@ const randomUpTo = max => * @param {string} channelName * @param {Object.} params * @param {Object} options - * @param {function(Function, Function): void} [options.fallback] + * @param {function(Function): Promise} [options.fallback] * @param {function(): void} [options.fillGaps] * @param {function(object): boolean} [options.accept] * @returns {function(): void} @@ -52,14 +52,13 @@ export const connectTimelineStream = (timelineId, channelName, params = {}, opti let pollingId; /** - * @param {function(Function, Function): void} fallback + * @param {function(Function): Promise} fallback */ - const useFallback = fallback => { - fallback(dispatch, () => { - // eslint-disable-next-line react-hooks/rules-of-hooks -- this is not a react hook - pollingId = setTimeout(() => useFallback(fallback), 20000 + randomUpTo(20000)); - }); + const useFallback = async fallback => { + await fallback(dispatch); + // eslint-disable-next-line react-hooks/rules-of-hooks -- this is not a react hook + pollingId = setTimeout(() => useFallback(fallback), 20000 + randomUpTo(20000)); }; return { @@ -132,21 +131,17 @@ export const connectTimelineStream = (timelineId, channelName, params = {}, opti /** * @param {Function} dispatch - * @param {function(): void} done */ -const refreshHomeTimelineAndNotification = (dispatch, done) => { - // @ts-expect-error - dispatch(expandHomeTimeline({}, () => - // @ts-expect-error - dispatch(expandNotifications({}, () => - dispatch(fetchAnnouncements(done)))))); -}; +async function refreshHomeTimelineAndNotification(dispatch) { + await dispatch(expandHomeTimeline({ maxId: undefined })); + await dispatch(expandNotifications({})); + await dispatch(fetchAnnouncements()); +} /** * @returns {function(): void} */ export const connectUserStream = () => - // @ts-expect-error connectTimelineStream('home', 'user', {}, { fallback: refreshHomeTimelineAndNotification, fillGaps: fillHomeTimelineGaps }); /** diff --git a/app/javascript/mastodon/actions/timelines.js b/app/javascript/mastodon/actions/timelines.js index f0ea46118e..65b6d80451 100644 --- a/app/javascript/mastodon/actions/timelines.js +++ b/app/javascript/mastodon/actions/timelines.js @@ -76,21 +76,18 @@ export function clearTimeline(timeline) { }; } -const noOp = () => {}; - const parseTags = (tags = {}, mode) => { return (tags[mode] || []).map((tag) => { return tag.value; }); }; -export function expandTimeline(timelineId, path, params = {}, done = noOp) { - return (dispatch, getState) => { +export function expandTimeline(timelineId, path, params = {}) { + return async (dispatch, getState) => { const timeline = getState().getIn(['timelines', timelineId], ImmutableMap()); const isLoadingMore = !!params.max_id; if (timeline.get('isLoading')) { - done(); return; } @@ -109,7 +106,8 @@ export function expandTimeline(timelineId, path, params = {}, done = noOp) { dispatch(expandTimelineRequest(timelineId, isLoadingMore)); - api().get(path, { params }).then(response => { + try { + const response = await api().get(path, { params }); const next = getLinks(response).refs.find(link => link.rel === 'next'); dispatch(importFetchedStatuses(response.data)); @@ -127,52 +125,48 @@ export function expandTimeline(timelineId, path, params = {}, done = noOp) { if (timelineId === 'home') { dispatch(submitMarkers()); } - }).catch(error => { + } catch(error) { dispatch(expandTimelineFail(timelineId, error, isLoadingMore)); - }).finally(() => { - done(); - }); + } }; } -export function fillTimelineGaps(timelineId, path, params = {}, done = noOp) { - return (dispatch, getState) => { +export function fillTimelineGaps(timelineId, path, params = {}) { + return async (dispatch, getState) => { const timeline = getState().getIn(['timelines', timelineId], ImmutableMap()); const items = timeline.get('items'); const nullIndexes = items.map((statusId, index) => statusId === null ? index : null); const gaps = nullIndexes.map(index => index > 0 ? items.get(index - 1) : null); // Only expand at most two gaps to avoid doing too many requests - done = gaps.take(2).reduce((done, maxId) => { - return (() => dispatch(expandTimeline(timelineId, path, { ...params, maxId }, done))); - }, done); - - done(); + for (const maxId of gaps.take(2)) { + await dispatch(expandTimeline(timelineId, path, { ...params, maxId })); + } }; } -export const expandHomeTimeline = ({ maxId } = {}, done = noOp) => expandTimeline('home', '/api/v1/timelines/home', { max_id: maxId }, done); -export const expandPublicTimeline = ({ maxId, onlyMedia, onlyRemote } = {}, done = noOp) => expandTimeline(`public${onlyRemote ? ':remote' : ''}${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { remote: !!onlyRemote, max_id: maxId, only_media: !!onlyMedia }, done); -export const expandCommunityTimeline = ({ maxId, onlyMedia } = {}, done = noOp) => expandTimeline(`community${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { local: true, max_id: maxId, only_media: !!onlyMedia }, done); +export const expandHomeTimeline = ({ maxId } = {}) => expandTimeline('home', '/api/v1/timelines/home', { max_id: maxId }); +export const expandPublicTimeline = ({ maxId, onlyMedia, onlyRemote } = {}) => expandTimeline(`public${onlyRemote ? ':remote' : ''}${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { remote: !!onlyRemote, max_id: maxId, only_media: !!onlyMedia }); +export const expandCommunityTimeline = ({ maxId, onlyMedia } = {}) => expandTimeline(`community${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { local: true, max_id: maxId, only_media: !!onlyMedia }); export const expandAccountTimeline = (accountId, { maxId, withReplies, tagged } = {}) => expandTimeline(`account:${accountId}${withReplies ? ':with_replies' : ''}${tagged ? `:${tagged}` : ''}`, `/api/v1/accounts/${accountId}/statuses`, { exclude_replies: !withReplies, exclude_reblogs: withReplies, tagged, max_id: maxId }); export const expandAccountFeaturedTimeline = (accountId, { tagged } = {}) => expandTimeline(`account:${accountId}:pinned${tagged ? `:${tagged}` : ''}`, `/api/v1/accounts/${accountId}/statuses`, { pinned: true, tagged }); export const expandAccountMediaTimeline = (accountId, { maxId } = {}) => expandTimeline(`account:${accountId}:media`, `/api/v1/accounts/${accountId}/statuses`, { max_id: maxId, only_media: true, limit: 40 }); -export const expandListTimeline = (id, { maxId } = {}, done = noOp) => expandTimeline(`list:${id}`, `/api/v1/timelines/list/${id}`, { max_id: maxId }, done); -export const expandLinkTimeline = (url, { maxId } = {}, done = noOp) => expandTimeline(`link:${url}`, `/api/v1/timelines/link`, { url, max_id: maxId }, done); -export const expandHashtagTimeline = (hashtag, { maxId, tags, local } = {}, done = noOp) => { +export const expandListTimeline = (id, { maxId } = {}) => expandTimeline(`list:${id}`, `/api/v1/timelines/list/${id}`, { max_id: maxId }); +export const expandLinkTimeline = (url, { maxId } = {}) => expandTimeline(`link:${url}`, `/api/v1/timelines/link`, { url, max_id: maxId }); +export const expandHashtagTimeline = (hashtag, { maxId, tags, local } = {}) => { return expandTimeline(`hashtag:${hashtag}${local ? ':local' : ''}`, `/api/v1/timelines/tag/${hashtag}`, { max_id: maxId, any: parseTags(tags, 'any'), all: parseTags(tags, 'all'), none: parseTags(tags, 'none'), local: local, - }, done); + }); }; -export const fillHomeTimelineGaps = (done = noOp) => fillTimelineGaps('home', '/api/v1/timelines/home', {}, done); -export const fillPublicTimelineGaps = ({ onlyMedia, onlyRemote } = {}, done = noOp) => fillTimelineGaps(`public${onlyRemote ? ':remote' : ''}${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { remote: !!onlyRemote, only_media: !!onlyMedia }, done); -export const fillCommunityTimelineGaps = ({ onlyMedia } = {}, done = noOp) => fillTimelineGaps(`community${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { local: true, only_media: !!onlyMedia }, done); -export const fillListTimelineGaps = (id, done = noOp) => fillTimelineGaps(`list:${id}`, `/api/v1/timelines/list/${id}`, {}, done); +export const fillHomeTimelineGaps = () => fillTimelineGaps('home', '/api/v1/timelines/home', {}); +export const fillPublicTimelineGaps = ({ onlyMedia, onlyRemote } = {}) => fillTimelineGaps(`public${onlyRemote ? ':remote' : ''}${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { remote: !!onlyRemote, only_media: !!onlyMedia }); +export const fillCommunityTimelineGaps = ({ onlyMedia } = {}) => fillTimelineGaps(`community${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { local: true, only_media: !!onlyMedia }); +export const fillListTimelineGaps = (id) => fillTimelineGaps(`list:${id}`, `/api/v1/timelines/list/${id}`, {}); export function expandTimelineRequest(timeline, isLoadingMore) { return { diff --git a/app/javascript/mastodon/features/link_timeline/index.tsx b/app/javascript/mastodon/features/link_timeline/index.tsx index dd726dac1a..262a21afcc 100644 --- a/app/javascript/mastodon/features/link_timeline/index.tsx +++ b/app/javascript/mastodon/features/link_timeline/index.tsx @@ -36,13 +36,13 @@ export const LinkTimeline: React.FC<{ const handleLoadMore = useCallback( (maxId: string) => { - dispatch(expandLinkTimeline(decodedUrl, { maxId })); + void dispatch(expandLinkTimeline(decodedUrl, { maxId })); }, [dispatch, decodedUrl], ); useEffect(() => { - dispatch(expandLinkTimeline(decodedUrl)); + void dispatch(expandLinkTimeline(decodedUrl)); }, [dispatch, decodedUrl]); return ( From d2e4be045655816fb0c512c3a953cfe9b062240d Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 19 Aug 2024 16:53:54 +0200 Subject: [PATCH 11/77] Hopefully fix notifications pagination flaky test (#31494) --- spec/requests/api/v1/notifications_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/requests/api/v1/notifications_spec.rb b/spec/requests/api/v1/notifications_spec.rb index 3d1e8a4787..84e6db1e51 100644 --- a/spec/requests/api/v1/notifications_spec.rb +++ b/spec/requests/api/v1/notifications_spec.rb @@ -185,7 +185,7 @@ RSpec.describe 'Notifications' do it 'returns the requested number of notifications paginated', :aggregate_failures do subject - notifications = user.account.notifications.browserable + notifications = user.account.notifications.browserable.order(id: :asc) expect(body_as_json.size) .to eq(params[:limit]) From d4f135bc6d280f834a7b3365fe0ef644cfe606b6 Mon Sep 17 00:00:00 2001 From: Edward Moulsdale <161692702+wheatear-dev@users.noreply.github.com> Date: Mon, 19 Aug 2024 16:55:42 +0100 Subject: [PATCH 12/77] Fix in memoriam accounts appearing in follow recommendations (#31474) Co-authored-by: Utkarsh Wankar <46633523+kernal053@users.noreply.github.com> --- app/models/account.rb | 1 + .../account_suggestions/friends_of_friends_source.rb | 1 + app/models/account_suggestions/source.rb | 1 + .../account_suggestions/friends_of_friends_source_spec.rb | 8 ++++++-- spec/models/account_suggestions/source_spec.rb | 2 ++ 5 files changed, 11 insertions(+), 2 deletions(-) diff --git a/app/models/account.rb b/app/models/account.rb index 23ff07c769..482eaa4aba 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -144,6 +144,7 @@ class Account < ApplicationRecord scope :dormant, -> { joins(:account_stat).merge(AccountStat.without_recent_activity) } scope :with_username, ->(value) { where arel_table[:username].lower.eq(value.to_s.downcase) } scope :with_domain, ->(value) { where arel_table[:domain].lower.eq(value&.to_s&.downcase) } + scope :without_memorial, -> { where(memorial: false) } after_update_commit :trigger_update_webhooks diff --git a/app/models/account_suggestions/friends_of_friends_source.rb b/app/models/account_suggestions/friends_of_friends_source.rb index 825b24f419..707c6ccaec 100644 --- a/app/models/account_suggestions/friends_of_friends_source.rb +++ b/app/models/account_suggestions/friends_of_friends_source.rb @@ -31,6 +31,7 @@ class AccountSuggestions::FriendsOfFriendsSource < AccountSuggestions::Source AND accounts.suspended_at IS NULL AND accounts.silenced_at IS NULL AND accounts.moved_to_account_id IS NULL + AND accounts.memorial = FALSE AND follow_recommendation_mutes.target_account_id IS NULL GROUP BY accounts.id, account_stats.id ORDER BY frequency DESC, account_stats.followers_count ASC diff --git a/app/models/account_suggestions/source.rb b/app/models/account_suggestions/source.rb index 7afc4c80ed..9ae6bbbcc9 100644 --- a/app/models/account_suggestions/source.rb +++ b/app/models/account_suggestions/source.rb @@ -14,6 +14,7 @@ class AccountSuggestions::Source .searchable .where(discoverable: true) .without_silenced + .without_memorial .where.not(follows_sql, id: account.id) .where.not(follow_requests_sql, id: account.id) .not_excluded_by_account(account) diff --git a/spec/models/account_suggestions/friends_of_friends_source_spec.rb b/spec/models/account_suggestions/friends_of_friends_source_spec.rb index c2f8d0f86c..9daaa233bf 100644 --- a/spec/models/account_suggestions/friends_of_friends_source_spec.rb +++ b/spec/models/account_suggestions/friends_of_friends_source_spec.rb @@ -15,6 +15,7 @@ RSpec.describe AccountSuggestions::FriendsOfFriendsSource do let!(:john) { Fabricate(:account, discoverable: true, hide_collections: false) } let!(:jerk) { Fabricate(:account, discoverable: true, hide_collections: false) } let!(:larry) { Fabricate(:account, discoverable: true, hide_collections: false) } + let!(:morty) { Fabricate(:account, discoverable: true, hide_collections: false, memorial: true) } context 'with follows and blocks' do before do @@ -27,8 +28,8 @@ RSpec.describe AccountSuggestions::FriendsOfFriendsSource do # alice follows eve and mallory [john, mallory].each { |account| alice.follow!(account) } - # eugen follows eve, john, jerk, larry and neil - [eve, mallory, jerk, larry, neil].each { |account| eugen.follow!(account) } + # eugen follows eve, john, jerk, larry, neil and morty + [eve, mallory, jerk, larry, neil, morty].each { |account| eugen.follow!(account) } end it 'returns eligible accounts', :aggregate_failures do @@ -51,6 +52,9 @@ RSpec.describe AccountSuggestions::FriendsOfFriendsSource do # the suggestion for neil has already been rejected expect(results).to_not include([neil.id, :friends_of_friends]) + + # morty is not included because his account is in memoriam + expect(results).to_not include([morty.id, :friends_of_friends]) end end diff --git a/spec/models/account_suggestions/source_spec.rb b/spec/models/account_suggestions/source_spec.rb index 1666094082..ae0747413e 100644 --- a/spec/models/account_suggestions/source_spec.rb +++ b/spec/models/account_suggestions/source_spec.rb @@ -21,6 +21,7 @@ RSpec.describe AccountSuggestions::Source do let!(:moved_account) { Fabricate(:account, moved_to_account: Fabricate(:account), discoverable: true) } let!(:silenced_account) { Fabricate(:account, silenced: true, discoverable: true) } let!(:undiscoverable_account) { Fabricate(:account, discoverable: false) } + let!(:memorial_account) { Fabricate(:account, memorial: true, discoverable: true) } before do Fabricate :account_domain_block, account: account, domain: account_domain_blocked_account.domain @@ -44,6 +45,7 @@ RSpec.describe AccountSuggestions::Source do .and not_include(moved_account) .and not_include(silenced_account) .and not_include(undiscoverable_account) + .and not_include(memorial_account) end end end From 53c183f899b5382f1eebd72e34a090c30f8eba6a Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 19 Aug 2024 17:59:06 +0200 Subject: [PATCH 13/77] Reload notifications when accepted notifications are merged (streaming only) (#31419) --- .../v1/notifications/requests_controller.rb | 10 +++- .../mastodon/actions/notification_groups.ts | 43 +++++++++++++++- app/javascript/mastodon/actions/streaming.js | 10 +++- .../features/notifications_v2/index.tsx | 14 +++-- .../mastodon/reducers/notification_groups.ts | 13 ++++- .../accept_notification_request_service.rb | 12 +++++ app/workers/unfilter_notifications_worker.rb | 29 ++++++++--- config/routes/api.rb | 1 + .../api/v1/notifications/requests_spec.rb | 30 +++++++++++ ...ccept_notification_request_service_spec.rb | 3 +- .../unfilter_notifications_worker_spec.rb | 51 +++++++++++++++++-- 11 files changed, 192 insertions(+), 24 deletions(-) diff --git a/app/controllers/api/v1/notifications/requests_controller.rb b/app/controllers/api/v1/notifications/requests_controller.rb index 0710166d05..b820a2ed2e 100644 --- a/app/controllers/api/v1/notifications/requests_controller.rb +++ b/app/controllers/api/v1/notifications/requests_controller.rb @@ -1,8 +1,10 @@ # frozen_string_literal: true class Api::V1::Notifications::RequestsController < Api::BaseController - before_action -> { doorkeeper_authorize! :read, :'read:notifications' }, only: :index - before_action -> { doorkeeper_authorize! :write, :'write:notifications' }, except: :index + include Redisable + + before_action -> { doorkeeper_authorize! :read, :'read:notifications' }, only: [:index, :show, :merged?] + before_action -> { doorkeeper_authorize! :write, :'write:notifications' }, except: [:index, :show, :merged?] before_action :require_user! before_action :set_request, only: [:show, :accept, :dismiss] @@ -19,6 +21,10 @@ class Api::V1::Notifications::RequestsController < Api::BaseController render json: @requests, each_serializer: REST::NotificationRequestSerializer, relationships: @relationships end + def merged? + render json: { merged: redis.get("notification_unfilter_jobs:#{current_account.id}").to_i <= 0 } + end + def show render json: @request, serializer: REST::NotificationRequestSerializer end diff --git a/app/javascript/mastodon/actions/notification_groups.ts b/app/javascript/mastodon/actions/notification_groups.ts index fd6a48e9f3..6b699706e2 100644 --- a/app/javascript/mastodon/actions/notification_groups.ts +++ b/app/javascript/mastodon/actions/notification_groups.ts @@ -138,8 +138,18 @@ export const processNewNotificationForGroups = createAppAsyncThunk( export const loadPending = createAction('notificationGroups/loadPending'); -export const updateScrollPosition = createAction<{ top: boolean }>( +export const updateScrollPosition = createAppAsyncThunk( 'notificationGroups/updateScrollPosition', + ({ top }: { top: boolean }, { dispatch, getState }) => { + if ( + top && + getState().notificationGroups.mergedNotifications === 'needs-reload' + ) { + void dispatch(fetchNotifications()); + } + + return { top }; + }, ); export const setNotificationsFilter = createAppAsyncThunk( @@ -165,5 +175,34 @@ export const markNotificationsAsRead = createAction( 'notificationGroups/markAsRead', ); -export const mountNotifications = createAction('notificationGroups/mount'); +export const mountNotifications = createAppAsyncThunk( + 'notificationGroups/mount', + (_, { dispatch, getState }) => { + const state = getState(); + + if ( + state.notificationGroups.mounted === 0 && + state.notificationGroups.mergedNotifications === 'needs-reload' + ) { + void dispatch(fetchNotifications()); + } + }, +); + export const unmountNotifications = createAction('notificationGroups/unmount'); + +export const refreshStaleNotificationGroups = createAppAsyncThunk<{ + deferredRefresh: boolean; +}>('notificationGroups/refreshStale', (_, { dispatch, getState }) => { + const state = getState(); + + if ( + state.notificationGroups.scrolledToTop || + !state.notificationGroups.mounted + ) { + void dispatch(fetchNotifications()); + return { deferredRefresh: false }; + } + + return { deferredRefresh: true }; +}); diff --git a/app/javascript/mastodon/actions/streaming.js b/app/javascript/mastodon/actions/streaming.js index 630da3ef6e..e082aea43d 100644 --- a/app/javascript/mastodon/actions/streaming.js +++ b/app/javascript/mastodon/actions/streaming.js @@ -10,7 +10,7 @@ import { deleteAnnouncement, } from './announcements'; import { updateConversations } from './conversations'; -import { processNewNotificationForGroups } from './notification_groups'; +import { processNewNotificationForGroups, refreshStaleNotificationGroups } from './notification_groups'; import { updateNotifications, expandNotifications } from './notifications'; import { updateStatus } from './statuses'; import { @@ -108,6 +108,14 @@ export const connectTimelineStream = (timelineId, channelName, params = {}, opti } break; } + case 'notifications_merged': + const state = getState(); + if (state.notifications.top || !state.notifications.mounted) + dispatch(expandNotifications({ forceLoad: true, maxId: undefined })); + if(state.settings.getIn(['notifications', 'groupingBeta'], false)) { + dispatch(refreshStaleNotificationGroups()); + } + break; case 'conversation': // @ts-expect-error dispatch(updateConversations(JSON.parse(data.payload))); diff --git a/app/javascript/mastodon/features/notifications_v2/index.tsx b/app/javascript/mastodon/features/notifications_v2/index.tsx index 63e602bdcc..29c49e05c8 100644 --- a/app/javascript/mastodon/features/notifications_v2/index.tsx +++ b/app/javascript/mastodon/features/notifications_v2/index.tsx @@ -81,7 +81,11 @@ export const Notifications: React.FC<{ const anyPendingNotification = useAppSelector(selectAnyPendingNotification); - const isUnread = unreadNotificationsCount > 0; + const needsReload = useAppSelector( + (state) => state.notificationGroups.mergedNotifications === 'needs-reload', + ); + + const isUnread = unreadNotificationsCount > 0 || needsReload; const canMarkAsRead = useAppSelector(selectSettingsNotificationsShowUnread) && @@ -118,11 +122,11 @@ export const Notifications: React.FC<{ // Keep track of mounted components for unread notification handling useEffect(() => { - dispatch(mountNotifications()); + void dispatch(mountNotifications()); return () => { dispatch(unmountNotifications()); - dispatch(updateScrollPosition({ top: false })); + void dispatch(updateScrollPosition({ top: false })); }; }, [dispatch]); @@ -147,11 +151,11 @@ export const Notifications: React.FC<{ }, [dispatch]); const handleScrollToTop = useDebouncedCallback(() => { - dispatch(updateScrollPosition({ top: true })); + void dispatch(updateScrollPosition({ top: true })); }, 100); const handleScroll = useDebouncedCallback(() => { - dispatch(updateScrollPosition({ top: false })); + void dispatch(updateScrollPosition({ top: false })); }, 100); useEffect(() => { diff --git a/app/javascript/mastodon/reducers/notification_groups.ts b/app/javascript/mastodon/reducers/notification_groups.ts index 0d3f34d2fb..0348f080ff 100644 --- a/app/javascript/mastodon/reducers/notification_groups.ts +++ b/app/javascript/mastodon/reducers/notification_groups.ts @@ -19,6 +19,7 @@ import { markNotificationsAsRead, mountNotifications, unmountNotifications, + refreshStaleNotificationGroups, } from 'mastodon/actions/notification_groups'; import { disconnectTimeline, @@ -51,6 +52,7 @@ interface NotificationGroupsState { readMarkerId: string; mounted: number; isTabVisible: boolean; + mergedNotifications: 'ok' | 'pending' | 'needs-reload'; } const initialState: NotificationGroupsState = { @@ -58,6 +60,8 @@ const initialState: NotificationGroupsState = { pendingGroups: [], // holds pending groups in slow mode scrolledToTop: false, isLoading: false, + // this is used to track whether we need to refresh notifications after accepting requests + mergedNotifications: 'ok', // The following properties are used to track unread notifications lastReadId: '0', // used internally for unread notifications readMarkerId: '0', // user-facing and updated when focus changes @@ -301,6 +305,7 @@ export const notificationGroupsReducer = createReducer( json.type === 'gap' ? json : createNotificationGroupFromJSON(json), ); state.isLoading = false; + state.mergedNotifications = 'ok'; updateLastReadId(state); }) .addCase(fetchNotificationsGap.fulfilled, (state, action) => { @@ -455,7 +460,7 @@ export const notificationGroupsReducer = createReducer( state.groups = state.pendingGroups.concat(state.groups); state.pendingGroups = []; }) - .addCase(updateScrollPosition, (state, action) => { + .addCase(updateScrollPosition.fulfilled, (state, action) => { state.scrolledToTop = action.payload.top; updateLastReadId(state); trimNotifications(state); @@ -482,7 +487,7 @@ export const notificationGroupsReducer = createReducer( action.payload.markers.notifications.last_read_id; } }) - .addCase(mountNotifications, (state) => { + .addCase(mountNotifications.fulfilled, (state) => { state.mounted += 1; commitLastReadId(state); updateLastReadId(state); @@ -498,6 +503,10 @@ export const notificationGroupsReducer = createReducer( .addCase(unfocusApp, (state) => { state.isTabVisible = false; }) + .addCase(refreshStaleNotificationGroups.fulfilled, (state, action) => { + if (action.payload.deferredRefresh) + state.mergedNotifications = 'needs-reload'; + }) .addMatcher( isAnyOf(authorizeFollowRequestSuccess, rejectFollowRequestSuccess), (state, action) => { diff --git a/app/services/accept_notification_request_service.rb b/app/services/accept_notification_request_service.rb index ad27ae3300..60ec6bb3b6 100644 --- a/app/services/accept_notification_request_service.rb +++ b/app/services/accept_notification_request_service.rb @@ -1,9 +1,21 @@ # frozen_string_literal: true class AcceptNotificationRequestService < BaseService + include Redisable + def call(request) NotificationPermission.create!(account: request.account, from_account: request.from_account) + increment_worker_count!(request) UnfilterNotificationsWorker.perform_async(request.account_id, request.from_account_id) request.destroy! end + + private + + def increment_worker_count!(request) + with_redis do |redis| + redis.incr("notification_unfilter_jobs:#{request.account_id}") + redis.expire("notification_unfilter_jobs:#{request.account_id}", 30.minutes.to_i) + end + end end diff --git a/app/workers/unfilter_notifications_worker.rb b/app/workers/unfilter_notifications_worker.rb index 4351758907..53a35ce12c 100644 --- a/app/workers/unfilter_notifications_worker.rb +++ b/app/workers/unfilter_notifications_worker.rb @@ -2,6 +2,7 @@ class UnfilterNotificationsWorker include Sidekiq::Worker + include Redisable # Earlier versions of the feature passed a `notification_request` ID # If `to_account_id` is passed, the first argument is an account ID @@ -9,19 +10,20 @@ class UnfilterNotificationsWorker def perform(notification_request_or_account_id, from_account_id = nil) if from_account_id.present? @notification_request = nil - @from_account = Account.find(from_account_id) - @recipient = Account.find(notification_request_or_account_id) + @from_account = Account.find_by(id: from_account_id) + @recipient = Account.find_by(id: notification_request_or_account_id) else - @notification_request = NotificationRequest.find(notification_request_or_account_id) - @from_account = @notification_request.from_account - @recipient = @notification_request.account + @notification_request = NotificationRequest.find_by(id: notification_request_or_account_id) + @from_account = @notification_request&.from_account + @recipient = @notification_request&.account end + return if @from_account.nil? || @recipient.nil? + push_to_conversations! unfilter_notifications! remove_request! - rescue ActiveRecord::RecordNotFound - true + decrement_worker_count! end private @@ -45,4 +47,17 @@ class UnfilterNotificationsWorker def notifications_with_private_mentions filtered_notifications.where(type: :mention).joins(mention: :status).merge(Status.where(visibility: :direct)).includes(mention: :status) end + + def decrement_worker_count! + value = redis.decr("notification_unfilter_jobs:#{@recipient.id}") + push_streaming_event! if value <= 0 && subscribed_to_streaming_api? + end + + def push_streaming_event! + redis.publish("timeline:#{@recipient.id}:notifications", Oj.dump(event: :notifications_merged, payload: '1')) + end + + def subscribed_to_streaming_api? + redis.exists?("subscribed:timeline:#{@recipient.id}") || redis.exists?("subscribed:timeline:#{@recipient.id}:notifications") + end end diff --git a/config/routes/api.rb b/config/routes/api.rb index 488bdb7453..c5addd3385 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -158,6 +158,7 @@ namespace :api, format: false do collection do post :accept, to: 'requests#accept_bulk' post :dismiss, to: 'requests#dismiss_bulk' + get :merged, to: 'requests#merged?' end member do diff --git a/spec/requests/api/v1/notifications/requests_spec.rb b/spec/requests/api/v1/notifications/requests_spec.rb index e1fe17426a..c385fb3499 100644 --- a/spec/requests/api/v1/notifications/requests_spec.rb +++ b/spec/requests/api/v1/notifications/requests_spec.rb @@ -120,4 +120,34 @@ RSpec.describe 'Requests' do expect(response).to have_http_status(200) end end + + describe 'GET /api/v1/notifications/requests/merged' do + subject do + get '/api/v1/notifications/requests/merged', headers: headers + end + + it_behaves_like 'forbidden for wrong scope', 'write write:notifications' + + context 'when the user has no accepted request pending merge' do + it 'returns http success and returns merged: true' do + subject + + expect(response).to have_http_status(200) + expect(body_as_json).to eq({ merged: true }) + end + end + + context 'when the user has an accepted request pending merge' do + before do + redis.set("notification_unfilter_jobs:#{user.account_id}", 1) + end + + it 'returns http success and returns merged: false' do + subject + + expect(response).to have_http_status(200) + expect(body_as_json).to eq({ merged: false }) + end + end + end end diff --git a/spec/services/accept_notification_request_service_spec.rb b/spec/services/accept_notification_request_service_spec.rb index bf67a52225..3c12c285a4 100644 --- a/spec/services/accept_notification_request_service_spec.rb +++ b/spec/services/accept_notification_request_service_spec.rb @@ -8,10 +8,11 @@ RSpec.describe AcceptNotificationRequestService do let(:notification_request) { Fabricate(:notification_request) } describe '#call' do - it 'destroys the notification request, creates a permission, and queues a worker' do + it 'destroys the notification request, creates a permission, increases the jobs count and queues a worker' do expect { subject.call(notification_request) } .to change { NotificationRequest.exists?(notification_request.id) }.to(false) .and change { NotificationPermission.exists?(account_id: notification_request.account_id, from_account_id: notification_request.from_account_id) }.to(true) + .and change { redis.get("notification_unfilter_jobs:#{notification_request.account_id}").to_i }.by(1) expect(UnfilterNotificationsWorker).to have_enqueued_sidekiq_job(notification_request.account_id, notification_request.from_account_id) end diff --git a/spec/workers/unfilter_notifications_worker_spec.rb b/spec/workers/unfilter_notifications_worker_spec.rb index 3f43b298a5..629eb644e4 100644 --- a/spec/workers/unfilter_notifications_worker_spec.rb +++ b/spec/workers/unfilter_notifications_worker_spec.rb @@ -13,13 +13,56 @@ describe UnfilterNotificationsWorker do Fabricate(:notification, filtered: true, from_account: sender, account: recipient, type: :mention, activity: mention) follow_request = sender.request_follow!(recipient) Fabricate(:notification, filtered: true, from_account: sender, account: recipient, type: :follow_request, activity: follow_request) + allow(redis).to receive(:publish) + allow(redis).to receive(:exists?).and_return(false) end shared_examples 'shared behavior' do - it 'unfilters notifications and adds private messages to conversations' do - expect { subject } - .to change { recipient.notifications.where(from_account_id: sender.id).pluck(:filtered) }.from([true, true]).to([false, false]) - .and change { recipient.conversations.exists?(last_status_id: sender.statuses.first.id) }.to(true) + context 'when this is the last pending merge job and the user is subscribed to streaming' do + before do + redis.set("notification_unfilter_jobs:#{recipient.id}", 1) + allow(redis).to receive(:exists?).with("subscribed:timeline:#{recipient.id}").and_return(true) + end + + it 'unfilters notifications, adds private messages to conversations, and pushes to redis' do + expect { subject } + .to change { recipient.notifications.where(from_account_id: sender.id).pluck(:filtered) }.from([true, true]).to([false, false]) + .and change { recipient.conversations.exists?(last_status_id: sender.statuses.first.id) }.to(true) + .and change { redis.get("notification_unfilter_jobs:#{recipient.id}").to_i }.by(-1) + + expect(redis).to have_received(:publish).with("timeline:#{recipient.id}:notifications", '{"event":"notifications_merged","payload":"1"}') + end + end + + context 'when this is not last pending merge job and the user is subscribed to streaming' do + before do + redis.set("notification_unfilter_jobs:#{recipient.id}", 2) + allow(redis).to receive(:exists?).with("subscribed:timeline:#{recipient.id}").and_return(true) + end + + it 'unfilters notifications, adds private messages to conversations, and does not push to redis' do + expect { subject } + .to change { recipient.notifications.where(from_account_id: sender.id).pluck(:filtered) }.from([true, true]).to([false, false]) + .and change { recipient.conversations.exists?(last_status_id: sender.statuses.first.id) }.to(true) + .and change { redis.get("notification_unfilter_jobs:#{recipient.id}").to_i }.by(-1) + + expect(redis).to_not have_received(:publish).with("timeline:#{recipient.id}:notifications", '{"event":"notifications_merged","payload":"1"}') + end + end + + context 'when this is the last pending merge job and the user is not subscribed to streaming' do + before do + redis.set("notification_unfilter_jobs:#{recipient.id}", 1) + end + + it 'unfilters notifications, adds private messages to conversations, and does not push to redis' do + expect { subject } + .to change { recipient.notifications.where(from_account_id: sender.id).pluck(:filtered) }.from([true, true]).to([false, false]) + .and change { recipient.conversations.exists?(last_status_id: sender.statuses.first.id) }.to(true) + .and change { redis.get("notification_unfilter_jobs:#{recipient.id}").to_i }.by(-1) + + expect(redis).to_not have_received(:publish).with("timeline:#{recipient.id}:notifications", '{"event":"notifications_merged","payload":"1"}') + end end end From a7751d26e7293a7d93bdc2270ebd22a79e647d1e Mon Sep 17 00:00:00 2001 From: Emelia Smith Date: Mon, 19 Aug 2024 14:28:06 +0200 Subject: [PATCH 14/77] [Glitch] Disable rule selector in ReportReasonSelector if instance has no rules Port 71f257d5291a091cfb005d28221d4ab38698ef42 to glitch-soc Signed-off-by: Claire --- .../flavours/glitch/components/admin/ReportReasonSelector.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/flavours/glitch/components/admin/ReportReasonSelector.jsx b/app/javascript/flavours/glitch/components/admin/ReportReasonSelector.jsx index 323e0b0d39..60e7f39e16 100644 --- a/app/javascript/flavours/glitch/components/admin/ReportReasonSelector.jsx +++ b/app/javascript/flavours/glitch/components/admin/ReportReasonSelector.jsx @@ -153,7 +153,7 @@ class ReportReasonSelector extends PureComponent { - + {rules.map(rule => )} From 99ffae7d4486059496033b93fde486539a3e60b0 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 19 Aug 2024 16:41:32 +0200 Subject: [PATCH 15/77] [Glitch] Refactor some actions to be proper async actions instead of passing a continuation Port 1e612c5a09097ef62f26bb9882125dc2d53c92df to glitch-soc Signed-off-by: Claire --- .../flavours/glitch/actions/notifications.js | 14 +++-- .../actions/notifications_migration.tsx | 2 +- .../flavours/glitch/actions/streaming.js | 27 ++++------ .../flavours/glitch/actions/timelines.js | 52 ++++++++----------- .../glitch/features/link_timeline/index.tsx | 4 +- 5 files changed, 43 insertions(+), 56 deletions(-) diff --git a/app/javascript/flavours/glitch/actions/notifications.js b/app/javascript/flavours/glitch/actions/notifications.js index 86e2d6eb4e..e1bf4ffb60 100644 --- a/app/javascript/flavours/glitch/actions/notifications.js +++ b/app/javascript/flavours/glitch/actions/notifications.js @@ -200,8 +200,8 @@ const noOp = () => {}; let expandNotificationsController = new AbortController(); -export function expandNotifications({ maxId, forceLoad = false } = {}, done = noOp) { - return (dispatch, getState) => { +export function expandNotifications({ maxId = undefined, forceLoad = false }) { + return async (dispatch, getState) => { const activeFilter = getState().getIn(['settings', 'notifications', 'quickFilter', 'active']); const notifications = getState().get('notifications'); const isLoadingMore = !!maxId; @@ -211,7 +211,6 @@ export function expandNotifications({ maxId, forceLoad = false } = {}, done = no expandNotificationsController.abort(); expandNotificationsController = new AbortController(); } else { - done(); return; } } @@ -238,7 +237,8 @@ export function expandNotifications({ maxId, forceLoad = false } = {}, done = no dispatch(expandNotificationsRequest(isLoadingMore)); - api().get('/api/v1/notifications', { params, signal: expandNotificationsController.signal }).then(response => { + try { + const response = await api().get('/api/v1/notifications', { params, signal: expandNotificationsController.signal }); const next = getLinks(response).refs.find(link => link.rel === 'next'); dispatch(importFetchedAccounts(response.data.map(item => item.account))); @@ -248,11 +248,9 @@ export function expandNotifications({ maxId, forceLoad = false } = {}, done = no dispatch(expandNotificationsSuccess(response.data, next ? next.uri : null, isLoadingMore, isLoadingRecent, isLoadingRecent && preferPendingItems)); fetchRelatedRelationships(dispatch, response.data); dispatch(submitMarkers()); - }).catch(error => { + } catch(error) { dispatch(expandNotificationsFail(error, isLoadingMore)); - }).finally(() => { - done(); - }); + } }; } diff --git a/app/javascript/flavours/glitch/actions/notifications_migration.tsx b/app/javascript/flavours/glitch/actions/notifications_migration.tsx index 32844d4b42..3acceef0f8 100644 --- a/app/javascript/flavours/glitch/actions/notifications_migration.tsx +++ b/app/javascript/flavours/glitch/actions/notifications_migration.tsx @@ -13,6 +13,6 @@ export const initializeNotifications = createAppAsyncThunk( ) as boolean; if (enableBeta) void dispatch(fetchNotifications()); - else dispatch(expandNotifications()); + else void dispatch(expandNotifications()); }, ); diff --git a/app/javascript/flavours/glitch/actions/streaming.js b/app/javascript/flavours/glitch/actions/streaming.js index 2d69542fc7..f7f7755acd 100644 --- a/app/javascript/flavours/glitch/actions/streaming.js +++ b/app/javascript/flavours/glitch/actions/streaming.js @@ -37,7 +37,7 @@ const randomUpTo = max => * @param {string} channelName * @param {Object.} params * @param {Object} options - * @param {function(Function, Function): void} [options.fallback] + * @param {function(Function): Promise} [options.fallback] * @param {function(): void} [options.fillGaps] * @param {function(object): boolean} [options.accept] * @returns {function(): void} @@ -52,14 +52,13 @@ export const connectTimelineStream = (timelineId, channelName, params = {}, opti let pollingId; /** - * @param {function(Function, Function): void} fallback + * @param {function(Function): Promise} fallback */ - const useFallback = fallback => { - fallback(dispatch, () => { - // eslint-disable-next-line react-hooks/rules-of-hooks -- this is not a react hook - pollingId = setTimeout(() => useFallback(fallback), 20000 + randomUpTo(20000)); - }); + const useFallback = async fallback => { + await fallback(dispatch); + // eslint-disable-next-line react-hooks/rules-of-hooks -- this is not a react hook + pollingId = setTimeout(() => useFallback(fallback), 20000 + randomUpTo(20000)); }; return { @@ -132,21 +131,17 @@ export const connectTimelineStream = (timelineId, channelName, params = {}, opti /** * @param {Function} dispatch - * @param {function(): void} done */ -const refreshHomeTimelineAndNotification = (dispatch, done) => { - // @ts-expect-error - dispatch(expandHomeTimeline({}, () => - // @ts-expect-error - dispatch(expandNotifications({}, () => - dispatch(fetchAnnouncements(done)))))); -}; +async function refreshHomeTimelineAndNotification(dispatch) { + await dispatch(expandHomeTimeline({ maxId: undefined })); + await dispatch(expandNotifications({})); + await dispatch(fetchAnnouncements()); +} /** * @returns {function(): void} */ export const connectUserStream = () => - // @ts-expect-error connectTimelineStream('home', 'user', {}, { fallback: refreshHomeTimelineAndNotification, fillGaps: fillHomeTimelineGaps }); /** diff --git a/app/javascript/flavours/glitch/actions/timelines.js b/app/javascript/flavours/glitch/actions/timelines.js index eb5050f152..1d5a696c92 100644 --- a/app/javascript/flavours/glitch/actions/timelines.js +++ b/app/javascript/flavours/glitch/actions/timelines.js @@ -87,21 +87,18 @@ export function clearTimeline(timeline) { }; } -const noOp = () => {}; - const parseTags = (tags = {}, mode) => { return (tags[mode] || []).map((tag) => { return tag.value; }); }; -export function expandTimeline(timelineId, path, params = {}, done = noOp) { - return (dispatch, getState) => { +export function expandTimeline(timelineId, path, params = {}) { + return async (dispatch, getState) => { const timeline = getState().getIn(['timelines', timelineId], ImmutableMap()); const isLoadingMore = !!params.max_id; if (timeline.get('isLoading')) { - done(); return; } @@ -120,7 +117,8 @@ export function expandTimeline(timelineId, path, params = {}, done = noOp) { dispatch(expandTimelineRequest(timelineId, isLoadingMore)); - api().get(path, { params }).then(response => { + try { + const response = await api().get(path, { params }); const next = getLinks(response).refs.find(link => link.rel === 'next'); dispatch(importFetchedStatuses(response.data)); @@ -138,53 +136,49 @@ export function expandTimeline(timelineId, path, params = {}, done = noOp) { if (timelineId === 'home') { dispatch(submitMarkers()); } - }).catch(error => { + } catch(error) { dispatch(expandTimelineFail(timelineId, error, isLoadingMore)); - }).finally(() => { - done(); - }); + } }; } -export function fillTimelineGaps(timelineId, path, params = {}, done = noOp) { - return (dispatch, getState) => { +export function fillTimelineGaps(timelineId, path, params = {}) { + return async (dispatch, getState) => { const timeline = getState().getIn(['timelines', timelineId], ImmutableMap()); const items = timeline.get('items'); const nullIndexes = items.map((statusId, index) => statusId === null ? index : null); const gaps = nullIndexes.map(index => index > 0 ? items.get(index - 1) : null); // Only expand at most two gaps to avoid doing too many requests - done = gaps.take(2).reduce((done, maxId) => { - return (() => dispatch(expandTimeline(timelineId, path, { ...params, maxId }, done))); - }, done); - - done(); + for (const maxId of gaps.take(2)) { + await dispatch(expandTimeline(timelineId, path, { ...params, maxId })); + } }; } -export const expandHomeTimeline = ({ maxId } = {}, done = noOp) => expandTimeline('home', '/api/v1/timelines/home', { max_id: maxId }, done); -export const expandPublicTimeline = ({ maxId, onlyMedia, onlyRemote, allowLocalOnly } = {}, done = noOp) => expandTimeline(`public${onlyRemote ? ':remote' : (allowLocalOnly ? ':allow_local_only' : '')}${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { remote: !!onlyRemote, allow_local_only: !!allowLocalOnly, max_id: maxId, only_media: !!onlyMedia }, done); -export const expandCommunityTimeline = ({ maxId, onlyMedia } = {}, done = noOp) => expandTimeline(`community${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { local: true, max_id: maxId, only_media: !!onlyMedia }, done); -export const expandDirectTimeline = ({ maxId } = {}, done = noOp) => expandTimeline('direct', '/api/v1/timelines/direct', { max_id: maxId }, done); +export const expandHomeTimeline = ({ maxId } = {}) => expandTimeline('home', '/api/v1/timelines/home', { max_id: maxId }); +export const expandPublicTimeline = ({ maxId, onlyMedia, onlyRemote, allowLocalOnly } = {}) => expandTimeline(`public${onlyRemote ? ':remote' : (allowLocalOnly ? ':allow_local_only' : '')}${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { remote: !!onlyRemote, allow_local_only: !!allowLocalOnly, max_id: maxId, only_media: !!onlyMedia }); +export const expandCommunityTimeline = ({ maxId, onlyMedia } = {}) => expandTimeline(`community${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { local: true, max_id: maxId, only_media: !!onlyMedia }); +export const expandDirectTimeline = ({ maxId } = {}) => expandTimeline('direct', '/api/v1/timelines/direct', { max_id: maxId }); export const expandAccountTimeline = (accountId, { maxId, withReplies, tagged } = {}) => expandTimeline(`account:${accountId}${withReplies ? ':with_replies' : ''}${tagged ? `:${tagged}` : ''}`, `/api/v1/accounts/${accountId}/statuses`, { exclude_replies: !withReplies, exclude_reblogs: withReplies, tagged, max_id: maxId }); export const expandAccountFeaturedTimeline = (accountId, { tagged } = {}) => expandTimeline(`account:${accountId}:pinned`, `/api/v1/accounts/${accountId}/statuses`, { pinned: true, tagged }); export const expandAccountMediaTimeline = (accountId, { maxId } = {}) => expandTimeline(`account:${accountId}:media`, `/api/v1/accounts/${accountId}/statuses`, { max_id: maxId, only_media: true, limit: 40 }); -export const expandListTimeline = (id, { maxId } = {}, done = noOp) => expandTimeline(`list:${id}`, `/api/v1/timelines/list/${id}`, { max_id: maxId }, done); -export const expandLinkTimeline = (url, { maxId } = {}, done = noOp) => expandTimeline(`link:${url}`, `/api/v1/timelines/link`, { url, max_id: maxId }, done); -export const expandHashtagTimeline = (hashtag, { maxId, tags, local } = {}, done = noOp) => { +export const expandListTimeline = (id, { maxId } = {}) => expandTimeline(`list:${id}`, `/api/v1/timelines/list/${id}`, { max_id: maxId }); +export const expandLinkTimeline = (url, { maxId } = {}) => expandTimeline(`link:${url}`, `/api/v1/timelines/link`, { url, max_id: maxId }); +export const expandHashtagTimeline = (hashtag, { maxId, tags, local } = {}) => { return expandTimeline(`hashtag:${hashtag}${local ? ':local' : ''}`, `/api/v1/timelines/tag/${hashtag}`, { max_id: maxId, any: parseTags(tags, 'any'), all: parseTags(tags, 'all'), none: parseTags(tags, 'none'), local: local, - }, done); + }); }; -export const fillHomeTimelineGaps = (done = noOp) => fillTimelineGaps('home', '/api/v1/timelines/home', {}, done); -export const fillPublicTimelineGaps = ({ onlyMedia, onlyRemote, allowLocalOnly } = {}, done = noOp) => fillTimelineGaps(`public${onlyRemote ? ':remote' : (allowLocalOnly ? ':allow_local_only' : '')}${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { remote: !!onlyRemote, only_media: !!onlyMedia, allow_local_only: !!allowLocalOnly }, done); -export const fillCommunityTimelineGaps = ({ onlyMedia } = {}, done = noOp) => fillTimelineGaps(`community${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { local: true, only_media: !!onlyMedia }, done); -export const fillListTimelineGaps = (id, done = noOp) => fillTimelineGaps(`list:${id}`, `/api/v1/timelines/list/${id}`, {}, done); +export const fillHomeTimelineGaps = () => fillTimelineGaps('home', '/api/v1/timelines/home', {}); +export const fillPublicTimelineGaps = ({ onlyMedia, onlyRemote, allowLocalOnly } = {}) => fillTimelineGaps(`public${onlyRemote ? ':remote' : (allowLocalOnly ? ':allow_local_only' : '')}${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { remote: !!onlyRemote, only_media: !!onlyMedia, allow_local_only: !!allowLocalOnly }); +export const fillCommunityTimelineGaps = ({ onlyMedia } = {}) => fillTimelineGaps(`community${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { local: true, only_media: !!onlyMedia }); +export const fillListTimelineGaps = (id) => fillTimelineGaps(`list:${id}`, `/api/v1/timelines/list/${id}`, {}); export function expandTimelineRequest(timeline, isLoadingMore) { return { diff --git a/app/javascript/flavours/glitch/features/link_timeline/index.tsx b/app/javascript/flavours/glitch/features/link_timeline/index.tsx index bbe295d474..2a5ae9a156 100644 --- a/app/javascript/flavours/glitch/features/link_timeline/index.tsx +++ b/app/javascript/flavours/glitch/features/link_timeline/index.tsx @@ -36,13 +36,13 @@ export const LinkTimeline: React.FC<{ const handleLoadMore = useCallback( (maxId: string) => { - dispatch(expandLinkTimeline(decodedUrl, { maxId })); + void dispatch(expandLinkTimeline(decodedUrl, { maxId })); }, [dispatch, decodedUrl], ); useEffect(() => { - dispatch(expandLinkTimeline(decodedUrl)); + void dispatch(expandLinkTimeline(decodedUrl)); }, [dispatch, decodedUrl]); return ( From bfd01110d86001e29b746d026655982e5dab21ea Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 19 Aug 2024 17:59:06 +0200 Subject: [PATCH 16/77] [Glitch] Reload notifications when accepted notifications are merged (streaming only) Port 53c183f899b5382f1eebd72e34a090c30f8eba6a to glitch-soc Signed-off-by: Claire --- .../glitch/actions/notification_groups.ts | 43 ++++++++++++++++++- .../flavours/glitch/actions/streaming.js | 10 ++++- .../features/notifications_v2/index.tsx | 14 +++--- .../glitch/reducers/notification_groups.ts | 13 +++++- 4 files changed, 70 insertions(+), 10 deletions(-) diff --git a/app/javascript/flavours/glitch/actions/notification_groups.ts b/app/javascript/flavours/glitch/actions/notification_groups.ts index 49a1a1362f..3d970e57f3 100644 --- a/app/javascript/flavours/glitch/actions/notification_groups.ts +++ b/app/javascript/flavours/glitch/actions/notification_groups.ts @@ -138,8 +138,18 @@ export const processNewNotificationForGroups = createAppAsyncThunk( export const loadPending = createAction('notificationGroups/loadPending'); -export const updateScrollPosition = createAction<{ top: boolean }>( +export const updateScrollPosition = createAppAsyncThunk( 'notificationGroups/updateScrollPosition', + ({ top }: { top: boolean }, { dispatch, getState }) => { + if ( + top && + getState().notificationGroups.mergedNotifications === 'needs-reload' + ) { + void dispatch(fetchNotifications()); + } + + return { top }; + }, ); export const setNotificationsFilter = createAppAsyncThunk( @@ -165,5 +175,34 @@ export const markNotificationsAsRead = createAction( 'notificationGroups/markAsRead', ); -export const mountNotifications = createAction('notificationGroups/mount'); +export const mountNotifications = createAppAsyncThunk( + 'notificationGroups/mount', + (_, { dispatch, getState }) => { + const state = getState(); + + if ( + state.notificationGroups.mounted === 0 && + state.notificationGroups.mergedNotifications === 'needs-reload' + ) { + void dispatch(fetchNotifications()); + } + }, +); + export const unmountNotifications = createAction('notificationGroups/unmount'); + +export const refreshStaleNotificationGroups = createAppAsyncThunk<{ + deferredRefresh: boolean; +}>('notificationGroups/refreshStale', (_, { dispatch, getState }) => { + const state = getState(); + + if ( + state.notificationGroups.scrolledToTop || + !state.notificationGroups.mounted + ) { + void dispatch(fetchNotifications()); + return { deferredRefresh: false }; + } + + return { deferredRefresh: true }; +}); diff --git a/app/javascript/flavours/glitch/actions/streaming.js b/app/javascript/flavours/glitch/actions/streaming.js index f7f7755acd..f5beff55d6 100644 --- a/app/javascript/flavours/glitch/actions/streaming.js +++ b/app/javascript/flavours/glitch/actions/streaming.js @@ -10,7 +10,7 @@ import { deleteAnnouncement, } from './announcements'; import { updateConversations } from './conversations'; -import { processNewNotificationForGroups } from './notification_groups'; +import { processNewNotificationForGroups, refreshStaleNotificationGroups } from './notification_groups'; import { updateNotifications, expandNotifications } from './notifications'; import { updateStatus } from './statuses'; import { @@ -108,6 +108,14 @@ export const connectTimelineStream = (timelineId, channelName, params = {}, opti } break; } + case 'notifications_merged': + const state = getState(); + if (state.notifications.top || !state.notifications.mounted) + dispatch(expandNotifications({ forceLoad: true, maxId: undefined })); + if(state.settings.getIn(['notifications', 'groupingBeta'], false)) { + dispatch(refreshStaleNotificationGroups()); + } + break; case 'conversation': // @ts-expect-error dispatch(updateConversations(JSON.parse(data.payload))); diff --git a/app/javascript/flavours/glitch/features/notifications_v2/index.tsx b/app/javascript/flavours/glitch/features/notifications_v2/index.tsx index 84fde80008..f5bf7adda3 100644 --- a/app/javascript/flavours/glitch/features/notifications_v2/index.tsx +++ b/app/javascript/flavours/glitch/features/notifications_v2/index.tsx @@ -81,7 +81,11 @@ export const Notifications: React.FC<{ const anyPendingNotification = useAppSelector(selectAnyPendingNotification); - const isUnread = unreadNotificationsCount > 0; + const needsReload = useAppSelector( + (state) => state.notificationGroups.mergedNotifications === 'needs-reload', + ); + + const isUnread = unreadNotificationsCount > 0 || needsReload; const canMarkAsRead = useAppSelector(selectSettingsNotificationsShowUnread) && @@ -118,11 +122,11 @@ export const Notifications: React.FC<{ // Keep track of mounted components for unread notification handling useEffect(() => { - dispatch(mountNotifications()); + void dispatch(mountNotifications()); return () => { dispatch(unmountNotifications()); - dispatch(updateScrollPosition({ top: false })); + void dispatch(updateScrollPosition({ top: false })); }; }, [dispatch]); @@ -147,11 +151,11 @@ export const Notifications: React.FC<{ }, [dispatch]); const handleScrollToTop = useDebouncedCallback(() => { - dispatch(updateScrollPosition({ top: true })); + void dispatch(updateScrollPosition({ top: true })); }, 100); const handleScroll = useDebouncedCallback(() => { - dispatch(updateScrollPosition({ top: false })); + void dispatch(updateScrollPosition({ top: false })); }, 100); useEffect(() => { diff --git a/app/javascript/flavours/glitch/reducers/notification_groups.ts b/app/javascript/flavours/glitch/reducers/notification_groups.ts index a721e4008d..af8e7a5e8c 100644 --- a/app/javascript/flavours/glitch/reducers/notification_groups.ts +++ b/app/javascript/flavours/glitch/reducers/notification_groups.ts @@ -19,6 +19,7 @@ import { markNotificationsAsRead, mountNotifications, unmountNotifications, + refreshStaleNotificationGroups, } from 'flavours/glitch/actions/notification_groups'; import { disconnectTimeline, @@ -51,6 +52,7 @@ interface NotificationGroupsState { readMarkerId: string; mounted: number; isTabVisible: boolean; + mergedNotifications: 'ok' | 'pending' | 'needs-reload'; } const initialState: NotificationGroupsState = { @@ -58,6 +60,8 @@ const initialState: NotificationGroupsState = { pendingGroups: [], // holds pending groups in slow mode scrolledToTop: false, isLoading: false, + // this is used to track whether we need to refresh notifications after accepting requests + mergedNotifications: 'ok', // The following properties are used to track unread notifications lastReadId: '0', // used internally for unread notifications readMarkerId: '0', // user-facing and updated when focus changes @@ -301,6 +305,7 @@ export const notificationGroupsReducer = createReducer( json.type === 'gap' ? json : createNotificationGroupFromJSON(json), ); state.isLoading = false; + state.mergedNotifications = 'ok'; updateLastReadId(state); }) .addCase(fetchNotificationsGap.fulfilled, (state, action) => { @@ -455,7 +460,7 @@ export const notificationGroupsReducer = createReducer( state.groups = state.pendingGroups.concat(state.groups); state.pendingGroups = []; }) - .addCase(updateScrollPosition, (state, action) => { + .addCase(updateScrollPosition.fulfilled, (state, action) => { state.scrolledToTop = action.payload.top; updateLastReadId(state); trimNotifications(state); @@ -482,7 +487,7 @@ export const notificationGroupsReducer = createReducer( action.payload.markers.notifications.last_read_id; } }) - .addCase(mountNotifications, (state) => { + .addCase(mountNotifications.fulfilled, (state) => { state.mounted += 1; commitLastReadId(state); updateLastReadId(state); @@ -498,6 +503,10 @@ export const notificationGroupsReducer = createReducer( .addCase(unfocusApp, (state) => { state.isTabVisible = false; }) + .addCase(refreshStaleNotificationGroups.fulfilled, (state, action) => { + if (action.payload.deferredRefresh) + state.mergedNotifications = 'needs-reload'; + }) .addMatcher( isAnyOf(authorizeFollowRequestSuccess, rejectFollowRequestSuccess), (state, action) => { From a7a2ff6c1d61223220590ccb3af4bfa0480587c1 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Mon, 19 Aug 2024 14:44:28 -0500 Subject: [PATCH 17/77] Use Dockerfile ADD to obtain ffmpeg and libvips source (#31498) --- Dockerfile | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index 65440bb281..cd555f7027 100644 --- a/Dockerfile +++ b/Dockerfile @@ -196,11 +196,14 @@ ARG VIPS_VERSION=8.15.3 ARG VIPS_URL=https://github.com/libvips/libvips/releases/download WORKDIR /usr/local/libvips/src +# Download and extract libvips source code +ADD ${VIPS_URL}/v${VIPS_VERSION}/vips-${VIPS_VERSION}.tar.xz /usr/local/libvips/src/ +RUN tar xf vips-${VIPS_VERSION}.tar.xz; +WORKDIR /usr/local/libvips/src/vips-${VIPS_VERSION} + +# Configure and compile libvips RUN \ - curl -sSL -o vips-${VIPS_VERSION}.tar.xz ${VIPS_URL}/v${VIPS_VERSION}/vips-${VIPS_VERSION}.tar.xz; \ - tar xf vips-${VIPS_VERSION}.tar.xz; \ - cd vips-${VIPS_VERSION}; \ meson setup build --prefix /usr/local/libvips --libdir=lib -Ddeprecated=false -Dintrospection=disabled -Dmodules=disabled -Dexamples=false; \ cd build; \ ninja; \ @@ -216,11 +219,14 @@ ARG FFMPEG_VERSION=7.0.2 ARG FFMPEG_URL=https://ffmpeg.org/releases WORKDIR /usr/local/ffmpeg/src +# Download and extract ffmpeg source code +ADD ${FFMPEG_URL}/ffmpeg-${FFMPEG_VERSION}.tar.xz /usr/local/ffmpeg/src/ +RUN tar xf ffmpeg-${FFMPEG_VERSION}.tar.xz; +WORKDIR /usr/local/ffmpeg/src/ffmpeg-${FFMPEG_VERSION} + +# Configure and compile ffmpeg RUN \ - curl -sSL -o ffmpeg-${FFMPEG_VERSION}.tar.xz ${FFMPEG_URL}/ffmpeg-${FFMPEG_VERSION}.tar.xz; \ - tar xf ffmpeg-${FFMPEG_VERSION}.tar.xz; \ - cd ffmpeg-${FFMPEG_VERSION}; \ ./configure \ --prefix=/usr/local/ffmpeg \ --toolchain=hardened \ From 98bf2fc27c6204527d8da5bc3847bd8406f1bfe8 Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Tue, 20 Aug 2024 00:11:58 +0200 Subject: [PATCH 18/77] Improve the list selection UI for notification requests (#31457) --- .../features/notifications/requests.jsx | 121 +++++++----------- app/javascript/mastodon/locales/en.json | 22 ++-- .../styles/mastodon-light/variables.scss | 1 + .../styles/mastodon/components.scss | 26 ++-- app/javascript/styles/mastodon/variables.scss | 1 + 5 files changed, 70 insertions(+), 101 deletions(-) diff --git a/app/javascript/mastodon/features/notifications/requests.jsx b/app/javascript/mastodon/features/notifications/requests.jsx index f323bda4fb..f35c042ba6 100644 --- a/app/javascript/mastodon/features/notifications/requests.jsx +++ b/app/javascript/mastodon/features/notifications/requests.jsx @@ -7,6 +7,7 @@ import { Helmet } from 'react-helmet'; import { useSelector, useDispatch } from 'react-redux'; +import ArrowDropDownIcon from '@/material-icons/400-24px/arrow_drop_down.svg?react'; import InventoryIcon from '@/material-icons/400-24px/inventory_2.svg?react'; import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react'; import { openModal } from 'mastodon/actions/modal'; @@ -15,6 +16,7 @@ import { changeSetting } from 'mastodon/actions/settings'; import { CheckBox } from 'mastodon/components/check_box'; import Column from 'mastodon/components/column'; import ColumnHeader from 'mastodon/components/column_header'; +import { Icon } from 'mastodon/components/icon'; import ScrollableList from 'mastodon/components/scrollable_list'; import DropdownMenuContainer from 'mastodon/containers/dropdown_menu_container'; @@ -26,16 +28,14 @@ const messages = defineMessages({ title: { id: 'notification_requests.title', defaultMessage: 'Filtered notifications' }, maximize: { id: 'notification_requests.maximize', defaultMessage: 'Maximize' }, more: { id: 'status.more', defaultMessage: 'More' }, - acceptAll: { id: 'notification_requests.accept_all', defaultMessage: 'Accept all' }, - dismissAll: { id: 'notification_requests.dismiss_all', defaultMessage: 'Dismiss all' }, - acceptMultiple: { id: 'notification_requests.accept_multiple', defaultMessage: '{count, plural, one {Accept # request} other {Accept # requests}}' }, - dismissMultiple: { id: 'notification_requests.dismiss_multiple', defaultMessage: '{count, plural, one {Dismiss # request} other {Dismiss # requests}}' }, - confirmAcceptAllTitle: { id: 'notification_requests.confirm_accept_all.title', defaultMessage: 'Accept notification requests?' }, - confirmAcceptAllMessage: { id: 'notification_requests.confirm_accept_all.message', defaultMessage: 'You are about to accept {count, plural, one {one notification request} other {# notification requests}}. Are you sure you want to proceed?' }, - confirmAcceptAllButton: { id: 'notification_requests.confirm_accept_all.button', defaultMessage: 'Accept all' }, - confirmDismissAllTitle: { id: 'notification_requests.confirm_dismiss_all.title', defaultMessage: 'Dismiss notification requests?' }, - confirmDismissAllMessage: { id: 'notification_requests.confirm_dismiss_all.message', defaultMessage: "You are about to dismiss {count, plural, one {one notification request} other {# notification requests}}. You won't be able to easily access {count, plural, one {it} other {them}} again. Are you sure you want to proceed?" }, - confirmDismissAllButton: { id: 'notification_requests.confirm_dismiss_all.button', defaultMessage: 'Dismiss all' }, + acceptMultiple: { id: 'notification_requests.accept_multiple', defaultMessage: '{count, plural, one {Accept # request…} other {Accept # requests…}}' }, + dismissMultiple: { id: 'notification_requests.dismiss_multiple', defaultMessage: '{count, plural, one {Dismiss # request…} other {Dismiss # requests…}}' }, + confirmAcceptMultipleTitle: { id: 'notification_requests.confirm_accept_multiple.title', defaultMessage: 'Accept notification requests?' }, + confirmAcceptMultipleMessage: { id: 'notification_requests.confirm_accept_multiple.message', defaultMessage: 'You are about to accept {count, plural, one {one notification request} other {# notification requests}}. Are you sure you want to proceed?' }, + confirmAcceptMultipleButton: { id: 'notification_requests.confirm_accept_multiple.button', defaultMessage: '{count, plural, one {Accept request} other {Accept requests}}' }, + confirmDismissMultipleTitle: { id: 'notification_requests.confirm_dismiss_multiple.title', defaultMessage: 'Dismiss notification requests?' }, + confirmDismissMultipleMessage: { id: 'notification_requests.confirm_dismiss_multiple.message', defaultMessage: "You are about to dismiss {count, plural, one {one notification request} other {# notification requests}}. You won't be able to easily access {count, plural, one {it} other {them}} again. Are you sure you want to proceed?" }, + confirmDismissMultipleButton: { id: 'notification_requests.confirm_dismiss_multiple.button', defaultMessage: '{count, plural, one {Dismiss request} other {Dismiss requests}}' }, }); const ColumnSettings = () => { @@ -74,45 +74,15 @@ const SelectRow = ({selectAllChecked, toggleSelectAll, selectedItems, selectionM const intl = useIntl(); const dispatch = useDispatch(); - const notificationRequests = useSelector(state => state.getIn(['notificationRequests', 'items'])); - const selectedCount = selectedItems.length; - const handleAcceptAll = useCallback(() => { - const items = notificationRequests.map(request => request.get('id')).toArray(); - dispatch(openModal({ - modalType: 'CONFIRM', - modalProps: { - title: intl.formatMessage(messages.confirmAcceptAllTitle), - message: intl.formatMessage(messages.confirmAcceptAllMessage, { count: items.length }), - confirm: intl.formatMessage(messages.confirmAcceptAllButton), - onConfirm: () => - dispatch(acceptNotificationRequests(items)), - }, - })); - }, [dispatch, intl, notificationRequests]); - - const handleDismissAll = useCallback(() => { - const items = notificationRequests.map(request => request.get('id')).toArray(); - dispatch(openModal({ - modalType: 'CONFIRM', - modalProps: { - title: intl.formatMessage(messages.confirmDismissAllTitle), - message: intl.formatMessage(messages.confirmDismissAllMessage, { count: items.length }), - confirm: intl.formatMessage(messages.confirmDismissAllButton), - onConfirm: () => - dispatch(dismissNotificationRequests(items)), - }, - })); - }, [dispatch, intl, notificationRequests]); - const handleAcceptMultiple = useCallback(() => { dispatch(openModal({ modalType: 'CONFIRM', modalProps: { - title: intl.formatMessage(messages.confirmAcceptAllTitle), - message: intl.formatMessage(messages.confirmAcceptAllMessage, { count: selectedItems.length }), - confirm: intl.formatMessage(messages.confirmAcceptAllButton), + title: intl.formatMessage(messages.confirmAcceptMultipleTitle), + message: intl.formatMessage(messages.confirmAcceptMultipleMessage, { count: selectedItems.length }), + confirm: intl.formatMessage(messages.confirmAcceptMultipleButton, { count: selectedItems.length}), onConfirm: () => dispatch(acceptNotificationRequests(selectedItems)), }, @@ -123,9 +93,9 @@ const SelectRow = ({selectAllChecked, toggleSelectAll, selectedItems, selectionM dispatch(openModal({ modalType: 'CONFIRM', modalProps: { - title: intl.formatMessage(messages.confirmDismissAllTitle), - message: intl.formatMessage(messages.confirmDismissAllMessage, { count: selectedItems.length }), - confirm: intl.formatMessage(messages.confirmDismissAllButton), + title: intl.formatMessage(messages.confirmDismissMultipleTitle), + message: intl.formatMessage(messages.confirmDismissMultipleMessage, { count: selectedItems.length }), + confirm: intl.formatMessage(messages.confirmDismissMultipleButton, { count: selectedItems.length}), onConfirm: () => dispatch(dismissNotificationRequests(selectedItems)), }, @@ -136,46 +106,45 @@ const SelectRow = ({selectAllChecked, toggleSelectAll, selectedItems, selectionM setSelectionMode((mode) => !mode); }, [setSelectionMode]); - const menu = selectedCount === 0 ? - [ - { text: intl.formatMessage(messages.acceptAll), action: handleAcceptAll }, - { text: intl.formatMessage(messages.dismissAll), action: handleDismissAll }, - ] : [ - { text: intl.formatMessage(messages.acceptMultiple, { count: selectedCount }), action: handleAcceptMultiple }, - { text: intl.formatMessage(messages.dismissMultiple, { count: selectedCount }), action: handleDismissMultiple }, - ]; + const menu = [ + { text: intl.formatMessage(messages.acceptMultiple, { count: selectedCount }), action: handleAcceptMultiple }, + { text: intl.formatMessage(messages.dismissMultiple, { count: selectedCount }), action: handleDismissMultiple }, + ]; + + const handleSelectAll = useCallback(() => { + setSelectionMode(true); + toggleSelectAll(); + }, [setSelectionMode, toggleSelectAll]); return (
- {selectionMode && ( -
- 0 && !selectAllChecked} onChange={toggleSelectAll} /> -
- )} -
+
+ 0 && !selectAllChecked} onChange={handleSelectAll} /> +
+ + + +
- {selectedCount > 0 && -
- {selectedCount} selected -
- } -
- -
); }; diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index aeeaf8209c..6d2b93be57 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -518,19 +518,17 @@ "notification.status": "{name} just posted", "notification.update": "{name} edited a post", "notification_requests.accept": "Accept", - "notification_requests.accept_all": "Accept all", - "notification_requests.accept_multiple": "{count, plural, one {Accept # request} other {Accept # requests}}", - "notification_requests.confirm_accept_all.button": "Accept all", - "notification_requests.confirm_accept_all.message": "You are about to accept {count, plural, one {one notification request} other {# notification requests}}. Are you sure you want to proceed?", - "notification_requests.confirm_accept_all.title": "Accept notification requests?", - "notification_requests.confirm_dismiss_all.button": "Dismiss all", - "notification_requests.confirm_dismiss_all.message": "You are about to dismiss {count, plural, one {one notification request} other {# notification requests}}. You won't be able to easily access {count, plural, one {it} other {them}} again. Are you sure you want to proceed?", - "notification_requests.confirm_dismiss_all.title": "Dismiss notification requests?", + "notification_requests.accept_multiple": "{count, plural, one {Accept # request…} other {Accept # requests…}}", + "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Accept request} other {Accept requests}}", + "notification_requests.confirm_accept_multiple.message": "You are about to accept {count, plural, one {one notification request} other {# notification requests}}. Are you sure you want to proceed?", + "notification_requests.confirm_accept_multiple.title": "Accept notification requests?", + "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Dismiss request} other {Dismiss requests}}", + "notification_requests.confirm_dismiss_multiple.message": "You are about to dismiss {count, plural, one {one notification request} other {# notification requests}}. You won't be able to easily access {count, plural, one {it} other {them}} again. Are you sure you want to proceed?", + "notification_requests.confirm_dismiss_multiple.title": "Dismiss notification requests?", "notification_requests.dismiss": "Dismiss", - "notification_requests.dismiss_all": "Dismiss all", - "notification_requests.dismiss_multiple": "{count, plural, one {Dismiss # request} other {Dismiss # requests}}", - "notification_requests.enter_selection_mode": "Select", - "notification_requests.exit_selection_mode": "Cancel", + "notification_requests.dismiss_multiple": "{count, plural, one {Dismiss # request…} other {Dismiss # requests…}}", + "notification_requests.edit_selection": "Edit", + "notification_requests.exit_selection": "Done", "notification_requests.explainer_for_limited_account": "Notifications from this account have been filtered because the account has been limited by a moderator.", "notification_requests.explainer_for_limited_remote_account": "Notifications from this account have been filtered because the account or its server has been limited by a moderator.", "notification_requests.maximize": "Maximize", diff --git a/app/javascript/styles/mastodon-light/variables.scss b/app/javascript/styles/mastodon-light/variables.scss index 9d4fd60945..39809b437f 100644 --- a/app/javascript/styles/mastodon-light/variables.scss +++ b/app/javascript/styles/mastodon-light/variables.scss @@ -65,4 +65,5 @@ body { --background-color: #fff; --background-color-tint: rgba(255, 255, 255, 80%); --background-filter: blur(10px); + --on-surface-color: #{transparentize($ui-base-color, 0.65)}; } diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 895762b803..c1ee4ea10d 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -4217,7 +4217,7 @@ a.status-card { text-decoration: none; &:hover { - background: lighten($ui-base-color, 2%); + background: var(--on-surface-color); } } @@ -4346,19 +4346,18 @@ a.status-card { display: flex; } - &__selection-mode { - flex-grow: 1; - - .text-btn:hover { - text-decoration: underline; - } + &__select-menu:disabled { + visibility: hidden; } - &__actions { - .icon-button { - border-radius: 4px; - border: 1px solid var(--background-border-color); - padding: 5px; + &__mode-button { + margin-left: auto; + color: $highlight-text-color; + font-weight: bold; + font-size: 14px; + + &:hover { + color: lighten($highlight-text-color, 6%); } } } @@ -4566,6 +4565,7 @@ a.status-card { padding: 0; font-family: inherit; font-size: inherit; + font-weight: inherit; color: inherit; border: 0; background: transparent; @@ -10366,7 +10366,7 @@ noscript { cursor: pointer; &:hover { - background: lighten($ui-base-color, 1%); + background: var(--on-surface-color); } .notification-request__checkbox { diff --git a/app/javascript/styles/mastodon/variables.scss b/app/javascript/styles/mastodon/variables.scss index 92b4770fe3..c8271e0dcd 100644 --- a/app/javascript/styles/mastodon/variables.scss +++ b/app/javascript/styles/mastodon/variables.scss @@ -109,5 +109,6 @@ $font-monospace: 'mastodon-font-monospace' !default; --surface-background-color: #{darken($ui-base-color, 4%)}; --surface-variant-background-color: #{$ui-base-color}; --surface-variant-active-background-color: #{lighten($ui-base-color, 4%)}; + --on-surface-color: #{transparentize($ui-base-color, 0.5)}; --avatar-border-radius: 8px; } From 2f01f5f4ea886c4a1bec2148d0ca82da5ae67f0c Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Tue, 20 Aug 2024 02:48:51 -0500 Subject: [PATCH 19/77] Harmonize persistent scrollbar styles (#31445) --- .../styles/mastodon-light/diff.scss | 15 +++++++++++---- .../styles/mastodon/components.scss | 4 ---- app/javascript/styles/mastodon/reset.scss | 19 +++++++++++++------ 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/app/javascript/styles/mastodon-light/diff.scss b/app/javascript/styles/mastodon-light/diff.scss index 55eb88dae1..8d801e4cd5 100644 --- a/app/javascript/styles/mastodon-light/diff.scss +++ b/app/javascript/styles/mastodon-light/diff.scss @@ -1,10 +1,6 @@ // Notes! // Sass color functions, "darken" and "lighten" are automatically replaced. -html { - scrollbar-color: $ui-base-color rgba($ui-base-color, 0.25); -} - .simple_form .button.button-tertiary { color: $highlight-text-color; } @@ -561,3 +557,14 @@ a.sparkline { color: $dark-text-color; } } + +@supports not selector(::-webkit-scrollbar) { + html { + scrollbar-color: rgba($action-button-color, 0.25) + var(--background-border-color); + } +} + +::-webkit-scrollbar-thumb { + opacity: 0.25; +} diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index c1ee4ea10d..97abf77d10 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -7560,10 +7560,6 @@ a.status-card { } } -::-webkit-scrollbar-thumb { - border-radius: 0; -} - noscript { text-align: center; diff --git a/app/javascript/styles/mastodon/reset.scss b/app/javascript/styles/mastodon/reset.scss index f8a4a08ced..5a4152826d 100644 --- a/app/javascript/styles/mastodon/reset.scss +++ b/app/javascript/styles/mastodon/reset.scss @@ -53,22 +53,29 @@ table { border-spacing: 0; } -html { - scrollbar-color: var(--background-border-color); +@supports not selector(::-webkit-scrollbar) { + html { + scrollbar-color: $action-button-color var(--background-border-color); + scrollbar-width: thin; + } } ::-webkit-scrollbar { - width: 4px; - height: 4px; + width: 8px; + height: 8px; } ::-webkit-scrollbar-thumb { - background-color: $ui-highlight-color; - opacity: .25; + background-color: $action-button-color; + border: 2px var(--background-border-color); + border-radius: 12px; + width: 6px; + box-shadow: inset 0 0 0 2px var(--background-border-color); } ::-webkit-scrollbar-track { background-color: var(--background-border-color); + border-radius: 0px; } ::-webkit-scrollbar-corner { From c75f7262ed32b7eb12aea154b0a41f876b7b58e9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 20 Aug 2024 07:59:21 +0000 Subject: [PATCH 20/77] New Crowdin Translations (automated) (#31504) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/ar.json | 7 --- app/javascript/mastodon/locales/be.json | 13 +++++ app/javascript/mastodon/locales/bg.json | 2 - app/javascript/mastodon/locales/ca.json | 20 ++++---- app/javascript/mastodon/locales/cy.json | 12 ----- app/javascript/mastodon/locales/da.json | 22 ++++----- app/javascript/mastodon/locales/de.json | 12 ----- app/javascript/mastodon/locales/el.json | 12 ----- app/javascript/mastodon/locales/en-GB.json | 12 ----- app/javascript/mastodon/locales/es-AR.json | 12 ----- app/javascript/mastodon/locales/es-MX.json | 12 ----- app/javascript/mastodon/locales/es.json | 12 ----- app/javascript/mastodon/locales/eu.json | 8 ---- app/javascript/mastodon/locales/fi.json | 24 +++++----- app/javascript/mastodon/locales/fo.json | 12 ----- app/javascript/mastodon/locales/fr-CA.json | 3 -- app/javascript/mastodon/locales/fr.json | 3 -- app/javascript/mastodon/locales/ga.json | 12 ----- app/javascript/mastodon/locales/gd.json | 12 ----- app/javascript/mastodon/locales/gl.json | 12 ----- app/javascript/mastodon/locales/he.json | 12 ----- app/javascript/mastodon/locales/hu.json | 12 ----- app/javascript/mastodon/locales/ig.json | 1 - app/javascript/mastodon/locales/is.json | 12 ----- app/javascript/mastodon/locales/it.json | 12 ----- app/javascript/mastodon/locales/kab.json | 1 - app/javascript/mastodon/locales/ko.json | 12 ----- app/javascript/mastodon/locales/lad.json | 4 -- app/javascript/mastodon/locales/lt.json | 12 ----- app/javascript/mastodon/locales/nl.json | 12 ----- app/javascript/mastodon/locales/nn.json | 12 ----- app/javascript/mastodon/locales/pl.json | 22 ++++----- app/javascript/mastodon/locales/pt-BR.json | 3 -- app/javascript/mastodon/locales/sk.json | 6 +++ app/javascript/mastodon/locales/sl.json | 6 --- app/javascript/mastodon/locales/sq.json | 12 ----- app/javascript/mastodon/locales/sv.json | 9 +--- app/javascript/mastodon/locales/th.json | 10 ---- app/javascript/mastodon/locales/tr.json | 12 ----- app/javascript/mastodon/locales/uk.json | 12 ----- app/javascript/mastodon/locales/vi.json | 10 ++++ app/javascript/mastodon/locales/zh-CN.json | 12 ----- app/javascript/mastodon/locales/zh-TW.json | 22 ++++----- config/locales/be.yml | 55 ++++++++++++++++++++++ 44 files changed, 137 insertions(+), 390 deletions(-) diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 0269274397..a022f3a0e5 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -500,14 +500,7 @@ "notification.status": "{name} نشر للتو", "notification.update": "عدّلَ {name} منشورًا", "notification_requests.accept": "موافقة", - "notification_requests.accept_all": "قبول الكل", - "notification_requests.confirm_accept_all.button": "قبول الكل", - "notification_requests.confirm_accept_all.title": "أتريد قبول طلبات الإشعار؟", - "notification_requests.confirm_dismiss_all.button": "تجاهل الكل", "notification_requests.dismiss": "تخطي", - "notification_requests.dismiss_all": "تجاهل الكل", - "notification_requests.enter_selection_mode": "اختر", - "notification_requests.exit_selection_mode": "إلغاء", "notification_requests.explainer_for_limited_account": "تم تصفية الإشعارات من هذا الحساب لأن الحساب تم تقييده من قبل مشرف.", "notification_requests.notifications_from": "إشعارات من {name}", "notification_requests.title": "الإشعارات المصفاة", diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json index 1ba69f27f3..546a1457a9 100644 --- a/app/javascript/mastodon/locales/be.json +++ b/app/javascript/mastodon/locales/be.json @@ -11,6 +11,7 @@ "about.not_available": "Дадзеная інфармацыя не дасяжная на гэтым серверы.", "about.powered_by": "Дэцэнтралізаваная сацыяльная сетка, створаная {mastodon}", "about.rules": "Правілы сервера", + "account.account_note_header": "Асабістая нататка", "account.add_or_remove_from_list": "Дадаць або выдаліць са спісаў", "account.badges.bot": "Бот", "account.badges.group": "Група", @@ -481,6 +482,11 @@ "notification.favourite": "Ваш допіс упадабаны {name}", "notification.follow": "{name} падпісаўся на вас", "notification.follow_request": "{name} адправіў запыт на падпіску", + "notification.label.mention": "Згадванне", + "notification.label.private_mention": "Асабістае згадванне", + "notification.label.private_reply": "Асабісты адказ", + "notification.label.reply": "Адказ", + "notification.mention": "Згадванне", "notification.moderation-warning.learn_more": "Даведацца больш", "notification.moderation_warning": "Вы атрымалі папярэджанне аб мадэрацыі", "notification.moderation_warning.action_delete_statuses": "Некаторыя вашыя допісы былі выдаленыя.", @@ -506,6 +512,7 @@ "notification_requests.minimize_banner": "Згарнуць банер адфільтраваных апавяшчэнняў", "notification_requests.notifications_from": "Апавяшчэнні ад {name}", "notification_requests.title": "Адфільтраваныя апавяшчэнні", + "notification_requests.view": "Прагляд апавяшчэнняў", "notifications.clear": "Ачысціць апавяшчэнні", "notifications.clear_confirmation": "Вы ўпэўнены, што жадаеце назаўсёды сцерці ўсё паведамленні?", "notifications.clear_title": "Ачысціць апавяшчэнні?", @@ -542,6 +549,10 @@ "notifications.permission_denied": "Апавяшчэнні на працоўным стале недаступныя з-за папярэдне адхіленага запыта праў браўзера", "notifications.permission_denied_alert": "Апавяшчэнні на працоўным стале не могуць быць уключаныя, з-за таго што запыт браўзера быў адхілены", "notifications.permission_required": "Апавяшчэнні на працоўным стале недаступныя, з-за таго што неабходны дазвол не быў дадзены.", + "notifications.policy.accept": "Прыняць", + "notifications.policy.accept_hint": "Паказваць у апавяшчэннях", + "notifications.policy.drop": "Iгнараваць", + "notifications.policy.filter": "Фільтраваць", "notifications.policy.filter_new_accounts.hint": "Створаныя на працягу {days, plural, one {апошняга # дня} few {апошніх # дзён} many {апошніх # дзён} other {апошняй # дня}}", "notifications.policy.filter_new_accounts_title": "Новыя ўліковыя запісы", "notifications.policy.filter_not_followers_hint": "Уключаючы людзей, якія падпісаны на вас менш, чым {days, plural, one {# дзень} few {# дні} many {# дзён} other {# дня}}", @@ -550,6 +561,7 @@ "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": "Каб атрымліваць апавяшчэнні, калі Mastodon не адкрыты, уключыце апавяшчэнні працоўнага стала. Вы зможаце дакладна кантраляваць, якія падзеі будуць ствараць апавяшчэнні з дапамогай {icon} кнопкі, як толькі яны будуць уключаны.", "notifications_permission_banner.title": "Не прапусціце нічога", @@ -790,6 +802,7 @@ "timeline_hint.remote_resource_not_displayed": "{resource} з іншых сервераў не адлюстроўваецца.", "timeline_hint.resources.followers": "Падпісчыкі", "timeline_hint.resources.follows": "Падпіскі", + "timeline_hint.resources.replies": "Некаторыя адказы", "timeline_hint.resources.statuses": "Старыя допісы", "trends.counter_by_accounts": "{count, plural, one {{counter} чалавек} few {{counter} чалавекі} many {{counter} людзей} other {{counter} чалавек}} за {days, plural, one {{days} апошні дзень} few {{days} апошнія дні} many {{days} апошніх дзён} other {{days} апошніх дзён}}", "trends.trending_now": "Актуальнае", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index 6687c64a6d..69166eafb8 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -505,8 +505,6 @@ "notification.update": "{name} промени публикация", "notification_requests.accept": "Приемам", "notification_requests.dismiss": "Отхвърлям", - "notification_requests.enter_selection_mode": "Изберете", - "notification_requests.exit_selection_mode": "Отказ", "notification_requests.explainer_for_limited_account": "Известията от този акаунт са прецедени, защото акаунтът е ограничен от модератор.", "notification_requests.explainer_for_limited_remote_account": "Известията от този акаунт са прецедени, защото акаунтът или сървърът му е ограничен от модератор.", "notification_requests.maximize": "Максимизиране", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index a41e7ba4dd..777e886327 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -517,17 +517,17 @@ "notification.status": "{name} acaba de publicar", "notification.update": "{name} ha editat un tut", "notification_requests.accept": "Accepta", - "notification_requests.accept_all": "Accepta-ho tot", - "notification_requests.accept_multiple": "{count, plural, one {Accepta # petició} other {Accepta # peticions}}", - "notification_requests.confirm_accept_all.button": "Accepta-ho tot", - "notification_requests.confirm_accept_all.message": "Esteu a punt d'acceptar {count, plural, one {una petició de notificació} other {# peticions de notificació}}. N'esteu segurs de continuar?", - "notification_requests.confirm_accept_all.title": "Accepteu peticions de notificació?", - "notification_requests.confirm_dismiss_all.button": "Descarta-les totes", - "notification_requests.confirm_dismiss_all.title": "Descarta la sol·licitud de notificació?", + "notification_requests.accept_multiple": "{count, plural, one {Accepta # petició…} other {Accepta # peticions…}}", + "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Accepta petició} other {Accepta peticions}}", + "notification_requests.confirm_accept_multiple.message": "Esteu a punt d'acceptar {count, plural, one {una petició de notificació} other {# peticions de notificació}}. N'esteu segurs de continuar?", + "notification_requests.confirm_accept_multiple.title": "Acceptar peticions de notificació?", + "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Descarta petició} other {Descarta peticions}}", + "notification_requests.confirm_dismiss_multiple.message": "Esteu a punt de descartar {count, plural, one {una petició de notificació} other {# peticions de notificació}}. No hi {count, plural, one {} other {}} podreu tornar a accedir fàcilment. N'esteu segurs de continuar?", + "notification_requests.confirm_dismiss_multiple.title": "Descartar les peticions de notificació?", "notification_requests.dismiss": "Ignora", - "notification_requests.dismiss_all": "Descarta-ho tot", - "notification_requests.enter_selection_mode": "Selecciona", - "notification_requests.exit_selection_mode": "Cancel·la", + "notification_requests.dismiss_multiple": "{count, plural, one {Descarta # petició…} other {Descarta # peticions…}}", + "notification_requests.edit_selection": "Edita", + "notification_requests.exit_selection": "Fet", "notification_requests.explainer_for_limited_account": "S'han filtrat les notificacions d'aquest compte perquè un moderador l'ha limitat.", "notification_requests.explainer_for_limited_remote_account": "S'han filtrat les notificacions d'aquest compte perquè un moderador ha limitat el compte o el seu servidor.", "notification_requests.maximize": "Maximitza", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index 8b86b49e06..4fb02ba7f1 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -518,19 +518,7 @@ "notification.status": "{name} newydd ei bostio", "notification.update": "Golygodd {name} bostiad", "notification_requests.accept": "Derbyn", - "notification_requests.accept_all": "Derbyn y cyfan", - "notification_requests.accept_multiple": "{count, plural, one {Derbyn # cais} other {Derbyn # cais}}", - "notification_requests.confirm_accept_all.button": "Derbyn y cyfan", - "notification_requests.confirm_accept_all.message": "Rydych ar fin derbyn {count, plural, one {un cais hysbysu} other {# cais hysbysiad}}. A ydych yn siŵr eich bod am fwrw ymlaen?", - "notification_requests.confirm_accept_all.title": "Derbyn ceisiadau hysbysu?", - "notification_requests.confirm_dismiss_all.button": "Diystyru pob un", - "notification_requests.confirm_dismiss_all.message": "Rydych ar fin diystyru {count, plural, one {un cais hysbysu} other {# cais hysbysiad}}. Ni fyddwch yn gallu cyrchu {count, plural, one {it} other {them}} yn hawdd eto. A ydych yn siŵr eich bod am fwrw ymlaen?", - "notification_requests.confirm_dismiss_all.title": "Diystyru ceisiadau hysbysu?", "notification_requests.dismiss": "Cau", - "notification_requests.dismiss_all": "Diystyru pob un", - "notification_requests.dismiss_multiple": "{count, plural, one {Diystyru # cais} other {Diystyru # cais}}", - "notification_requests.enter_selection_mode": "Dewis", - "notification_requests.exit_selection_mode": "Canslo", "notification_requests.explainer_for_limited_account": "Mae hysbysiadau o'r cyfrif hwn wedi'u hidlo oherwydd bod y cyfrif wedi'i gyfyngu gan gymedrolwr.", "notification_requests.explainer_for_limited_remote_account": "Mae hysbysiadau o'r cyfrif hwn wedi'u hidlo oherwydd bod y cyfrif neu ei weinydd wedi'i gyfyngu gan gymedrolwr.", "notification_requests.maximize": "Mwyhau", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index a9e549470c..9ae27e134e 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -518,19 +518,17 @@ "notification.status": "{name} har netop postet", "notification.update": "{name} redigerede et indlæg", "notification_requests.accept": "Acceptér", - "notification_requests.accept_all": "Acceptér alle", - "notification_requests.accept_multiple": "{count, plural, one {Acceptér # anmodning} other {Acceptér # anmodninger}}", - "notification_requests.confirm_accept_all.button": "Acceptér alle", - "notification_requests.confirm_accept_all.message": "Man er ved at acceptere {count, plural, one {en notifikationsanmodning} other {# notifikationsanmodninger}}. Fortsæt, sikker?", - "notification_requests.confirm_accept_all.title": "Acceptér notifikationsanmodninger?", - "notification_requests.confirm_dismiss_all.button": "Afvis alle", - "notification_requests.confirm_dismiss_all.message": "Man er ved at afvise {count, plural, one {en notifikationsanmodning} other {# notifikationsanmodninger}}. Man vil derfor ikke nemt kunne tilgå {count, plural, one {den} other {dem}} igen. Fortsæt, sikker?", - "notification_requests.confirm_dismiss_all.title": "Afvis notifikationsanmodninger?", + "notification_requests.accept_multiple": "{count, plural, one {Acceptér # anmodning…} other {Acceptér # anmodninger…}}", + "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Acceptér anmodning} other {Acceptér anmodninger}}", + "notification_requests.confirm_accept_multiple.message": "{count, plural, one {En notifikationsanmodning} other {# notifikationsanmodninger}} er ved at blive accepteret. Fortsæt, sikker?", + "notification_requests.confirm_accept_multiple.title": "Acceptér notifikationsanmodninger?", + "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Afvis anmodning} other {Afvis anmodninger}}", + "notification_requests.confirm_dismiss_multiple.message": "{count, plural, one {En notifikationsanmodning} other {# notifikationsanmodninger}} er ved at blive afvist, hvorfor man ikke nemt vil kunne tilgå {count, plural, one {den} other {dem}} igen. Fortsæt, sikker?", + "notification_requests.confirm_dismiss_multiple.title": "Afvis notifikationsanmodninger?", "notification_requests.dismiss": "Afvis", - "notification_requests.dismiss_all": "Afvis alle", - "notification_requests.dismiss_multiple": "{count, plural, one {Afvis # anmodning} other {Afvis # anmodninger}}", - "notification_requests.enter_selection_mode": "Vælg", - "notification_requests.exit_selection_mode": "Afbryd", + "notification_requests.dismiss_multiple": "{count, plural, one {Afvis # anmodning…} other {Afvis # anmodninger…}}", + "notification_requests.edit_selection": "Redigér", + "notification_requests.exit_selection": "Udført", "notification_requests.explainer_for_limited_account": "Notifikationer fra denne konto er blevet filtreret, da kontoen er pålagt restriktioner af en moderator.", "notification_requests.explainer_for_limited_remote_account": "Notifikationer fra denne konto er blevet filtreret, da kontoen eller dens server er pålagt restriktioner af en moderator.", "notification_requests.maximize": "Maksimér", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 2d49f172e6..2d72740b4a 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -518,19 +518,7 @@ "notification.status": "{name} hat gerade etwas gepostet", "notification.update": "{name} bearbeitete einen Beitrag", "notification_requests.accept": "Genehmigen", - "notification_requests.accept_all": "Alle genehmigen", - "notification_requests.accept_multiple": "{count, plural, one {# Anfrage genehmigen} other {# Anfragen genehmigen}}", - "notification_requests.confirm_accept_all.button": "Alle genehmigen", - "notification_requests.confirm_accept_all.message": "Du bist dabei, {{count, plural, one {eine Benachrichtigungsanfrage} other {# Benachrichtigungsanfragen}} zu genehmigen. Möchtest du wirklich fortfahren?", - "notification_requests.confirm_accept_all.title": "Benachrichtigungsanfragen genehmigen?", - "notification_requests.confirm_dismiss_all.button": "Alle ablehnen", - "notification_requests.confirm_dismiss_all.message": "Du bist dabei, {count, plural, one {eine Benachrichtigungsanfrage} other {# Benachrichtigungsanfragen}} abzulehnen. Du wirst nicht mehr ohne Weiteres auf {count, plural, one {sie} other {sie}} zugreifen können. Möchtest du wirklich fortfahren?", - "notification_requests.confirm_dismiss_all.title": "Benachrichtigungsanfragen ablehnen?", "notification_requests.dismiss": "Ablehnen", - "notification_requests.dismiss_all": "Alle ablehnen", - "notification_requests.dismiss_multiple": "{count, plural, one {# Anfrage ablehnen} other {# Anfragen ablehnen}}", - "notification_requests.enter_selection_mode": "Auswählen", - "notification_requests.exit_selection_mode": "Abbrechen", "notification_requests.explainer_for_limited_account": "Benachrichtigungen von diesem Konto wurden gefiltert, weil es durch Moderator*innen eingeschränkt wurde.", "notification_requests.explainer_for_limited_remote_account": "Benachrichtigungen von diesem Konto wurden gefiltert, weil deren Konto oder Server durch Moderator*innen eingeschränkt wurde.", "notification_requests.maximize": "Maximieren", diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index c220f3a4e0..9603da4ffa 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -518,19 +518,7 @@ "notification.status": "Ο/Η {name} μόλις ανέρτησε κάτι", "notification.update": "ο/η {name} επεξεργάστηκε μια ανάρτηση", "notification_requests.accept": "Αποδοχή", - "notification_requests.accept_all": "Αποδοχή όλων", - "notification_requests.accept_multiple": "{count, plural, one {Αποδοχή # αιτήματος} other {Αποδοχή # αιτημάτων}}", - "notification_requests.confirm_accept_all.button": "Αποδοχή όλων", - "notification_requests.confirm_accept_all.message": "Πρόκειται να αποδεχτείς {count, plural, one {ένα αίτημα ειδοποίησης} other {# αιτήματα ειδοποίησης}}. Σίγουρα θες να συνεχίσεις;", - "notification_requests.confirm_accept_all.title": "Αποδοχή αιτήσεων ειδοποίησης;", - "notification_requests.confirm_dismiss_all.button": "Παράβλεψη όλων", - "notification_requests.confirm_dismiss_all.message": "Πρόκειται να απορρίψεις {count, plural, one {ένα αίτημα ειδοποίησης} other {# αιτήματα ειδοποίησης}}. Δεν θα μπορείς να έχεις πρόσβαση εύκολα {count, plural, one {σε αυτή} other {σε αυτές}} ξανά. Σίγουρα θες να συνεχίσεις;", - "notification_requests.confirm_dismiss_all.title": "Απόρριψη αιτημάτων ειδοποίησης;", "notification_requests.dismiss": "Απόρριψη", - "notification_requests.dismiss_all": "Παράβλεψη όλων", - "notification_requests.dismiss_multiple": "{count, plural, one {Παράβλεψη # αιτήματος} other {Παράβλεψη # αιτημάτων}}", - "notification_requests.enter_selection_mode": "Επιλογή", - "notification_requests.exit_selection_mode": "Άκυρο", "notification_requests.explainer_for_limited_account": "Οι ειδοποιήσεις από αυτόν τον λογαριασμό έχουν φιλτραριστεί επειδή ο λογαριασμός έχει περιοριστεί από έναν συντονιστή.", "notification_requests.explainer_for_limited_remote_account": "Οι ειδοποιήσεις από αυτόν τον λογαριασμό έχουν φιλτραριστεί επειδή ο λογαριασμός ή ο διακομιστής του έχει περιοριστεί από έναν συντονιστή.", "notification_requests.maximize": "Μεγιστοποίηση", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index 8315333994..d6e3429c3b 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -517,19 +517,7 @@ "notification.status": "{name} just posted", "notification.update": "{name} edited a post", "notification_requests.accept": "Accept", - "notification_requests.accept_all": "Accept all", - "notification_requests.accept_multiple": "{count, plural, one {Accept 1 request} other {Accept # requests}}", - "notification_requests.confirm_accept_all.button": "Accept all", - "notification_requests.confirm_accept_all.message": "You are about to accept {count, plural, one {one notification request} other {# notification requests}}. Are you sure you want to proceed?", - "notification_requests.confirm_accept_all.title": "Accept notification requests?", - "notification_requests.confirm_dismiss_all.button": "Dismiss all", - "notification_requests.confirm_dismiss_all.message": "You are about to dismiss {count, plural, one {one notification request} other {# notification requests}}. You won't be able to easily access {count, plural, one {it} other {them}} again. Are you sure you want to proceed?", - "notification_requests.confirm_dismiss_all.title": "Dismiss notification requests?", "notification_requests.dismiss": "Dismiss", - "notification_requests.dismiss_all": "Dismiss all", - "notification_requests.dismiss_multiple": "{count, plural, one {Dismiss one request} other {Dismiss # requests}}", - "notification_requests.enter_selection_mode": "Select", - "notification_requests.exit_selection_mode": "Cancel", "notification_requests.explainer_for_limited_account": "Notifications from this account have been filtered because the account has been limited by a moderator.", "notification_requests.explainer_for_limited_remote_account": "Notifications from this account have been filtered because the account or its server has been limited by a moderator.", "notification_requests.minimize_banner": "Minimize filtered notifications banner", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 0722a08ea6..ba0a1a45b9 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -518,19 +518,7 @@ "notification.status": "{name} acaba de enviar un mensaje", "notification.update": "{name} editó un mensaje", "notification_requests.accept": "Aceptar", - "notification_requests.accept_all": "Aceptar todas", - "notification_requests.accept_multiple": "{count, plural, one {Aceptar # solicitud} other {Aceptar # solicitudes}}", - "notification_requests.confirm_accept_all.button": "Aceptar todas", - "notification_requests.confirm_accept_all.message": "Estás a punto de aceptar {count, plural, one {una solicitud} other {# solicitudes}}. ¿Estás seguro de que querés continuar?", - "notification_requests.confirm_accept_all.title": "¿Aceptar solicitudes de notificación?", - "notification_requests.confirm_dismiss_all.button": "Descartar todas", - "notification_requests.confirm_dismiss_all.message": "Estás a punto de descartar {count, plural, one {una solicitud} other {# solicitudes}}. No vas a poder acceder fácilmente a {count, plural, one {ella} other {ellas}} de nuevo. ¿Estás seguro de que querés continuar?", - "notification_requests.confirm_dismiss_all.title": "¿Descartar solicitudes de notificación?", "notification_requests.dismiss": "Descartar", - "notification_requests.dismiss_all": "Descartar todas", - "notification_requests.dismiss_multiple": "{count, plural, one {Descartar # solicitud} other {Descartar # solicitudes}}", - "notification_requests.enter_selection_mode": "Seleccionar", - "notification_requests.exit_selection_mode": "Cancelar", "notification_requests.explainer_for_limited_account": "Las notificaciones de esta cuenta fueron filtradas porque la misma fue limitada por un moderador.", "notification_requests.explainer_for_limited_remote_account": "Las notificaciones de esta cuenta fueron filtradas porque la cuenta o su servidor fueron limitados por un moderador.", "notification_requests.maximize": "Maximizar", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index 0ff6c25328..3267b28d61 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -518,19 +518,7 @@ "notification.status": "{name} acaba de publicar", "notification.update": "{name} editó una publicación", "notification_requests.accept": "Aceptar", - "notification_requests.accept_all": "Aceptar todas", - "notification_requests.accept_multiple": "{count, plural, one {Aceptar # solicitud} other {Aceptar # solicitudes}}", - "notification_requests.confirm_accept_all.button": "Aceptar todas", - "notification_requests.confirm_accept_all.message": "Vas a aceptar {count, plural, one {una solicitud} other {# solicitudes}}. ¿Estás seguro de que quieres continuar?", - "notification_requests.confirm_accept_all.title": "¿Aceptar todas las solicitudes?", - "notification_requests.confirm_dismiss_all.button": "Descartar todas", - "notification_requests.confirm_dismiss_all.message": "Vas a descartar {count, plural, one {una solicitud} other {# solicitudes}}. No vas a poder acceder fácilmente a {count, plural, one {ella} other {ellas}} de nuevo. ¿Estás seguro de que quieres continuar?", - "notification_requests.confirm_dismiss_all.title": "¿Descartar todas las solicitudes?", "notification_requests.dismiss": "Descartar", - "notification_requests.dismiss_all": "Descartar todas", - "notification_requests.dismiss_multiple": "{count, plural, one {Descartar # solicitud} other {Descartar # solicitudes}}", - "notification_requests.enter_selection_mode": "Seleccionar", - "notification_requests.exit_selection_mode": "Cancelar", "notification_requests.explainer_for_limited_account": "Las notificaciones de esta cuenta han sido filtradas porque la cuenta ha sido limitada por un moderador.", "notification_requests.explainer_for_limited_remote_account": "Las notificaciones de esta cuenta han sido filtradas porque la cuenta o su servidor ha sido limitada por un moderador.", "notification_requests.maximize": "Maximizar", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index b8f5de997a..04b46e166a 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -518,19 +518,7 @@ "notification.status": "{name} acaba de publicar", "notification.update": "{name} editó una publicación", "notification_requests.accept": "Aceptar", - "notification_requests.accept_all": "Aceptar todas", - "notification_requests.accept_multiple": "{count, plural, one {Aceptar # solicitud} other {Aceptar # solicitudes}}", - "notification_requests.confirm_accept_all.button": "Aceptar todas", - "notification_requests.confirm_accept_all.message": "Vas a aceptar {count, plural, one {una solicitud} other {# solicitudes}}. ¿Estás seguro de que quieres continuar?", - "notification_requests.confirm_accept_all.title": "¿Aceptar todas las solicitudes?", - "notification_requests.confirm_dismiss_all.button": "Descartar todas", - "notification_requests.confirm_dismiss_all.message": "Vas a descartar {count, plural, one {una solicitud} other {# solicitudes}}. No vas a poder acceder fácilmente a {count, plural, one {ella} other {ellas}} de nuevo. ¿Estás seguro de que quieres continuar?", - "notification_requests.confirm_dismiss_all.title": "¿Descartar todas las solicitudes?", "notification_requests.dismiss": "Descartar", - "notification_requests.dismiss_all": "Descartar todas", - "notification_requests.dismiss_multiple": "{count, plural, one {Descartar # solicitud} other {Descartar # solicitudes}}", - "notification_requests.enter_selection_mode": "Seleccionar", - "notification_requests.exit_selection_mode": "Cancelar", "notification_requests.explainer_for_limited_account": "Las notificaciones de esta cuenta han sido filtradas porque la cuenta ha sido limitada por un moderador.", "notification_requests.explainer_for_limited_remote_account": "Las notificaciones de esta cuenta han sido filtradas porque la cuenta o su servidor ha sido limitada por un moderador.", "notification_requests.maximize": "Maximizar", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index b2a8fe0da3..85855d9165 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -502,15 +502,7 @@ "notification.status": "{name} erabiltzaileak bidalketa egin berri du", "notification.update": "{name} erabiltzaileak bidalketa bat editatu du", "notification_requests.accept": "Onartu", - "notification_requests.accept_all": "Onartu dena", - "notification_requests.confirm_accept_all.button": "Onartu dena", - "notification_requests.confirm_accept_all.title": "Onartu jakinarazpen-eskaerak?", - "notification_requests.confirm_dismiss_all.button": "Baztertu guztiak", - "notification_requests.confirm_dismiss_all.title": "Baztertu jakinarazpen-eskaerak?", "notification_requests.dismiss": "Baztertu", - "notification_requests.dismiss_all": "Baztertu guztiak", - "notification_requests.enter_selection_mode": "Hautatu", - "notification_requests.exit_selection_mode": "Utzi", "notification_requests.maximize": "Maximizatu", "notification_requests.notifications_from": "{name} erabiltzailearen jakinarazpenak", "notification_requests.title": "Iragazitako jakinarazpenak", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 9b48f1bf37..1dc3872b09 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -518,19 +518,17 @@ "notification.status": "{name} julkaisi juuri", "notification.update": "{name} muokkasi julkaisua", "notification_requests.accept": "Hyväksy", - "notification_requests.accept_all": "Hyväksy kaikki", - "notification_requests.accept_multiple": "{count, plural, one {Hyväksy # pyyntö} other {Hyväksy # pyyntöä}}", - "notification_requests.confirm_accept_all.button": "Hyväksy kaikki", - "notification_requests.confirm_accept_all.message": "Olet aikeissa hyväksyä {count, plural, one {ilmoituspyynnön} other {# ilmoituspyyntöä}}. Haluatko varmasti jatkaa?", - "notification_requests.confirm_accept_all.title": "Hyväksytäänkö ilmoituspyynnöt?", - "notification_requests.confirm_dismiss_all.button": "Hylkää kaikki", - "notification_requests.confirm_dismiss_all.message": "Olet aikeissa hylätä {count, plural, one {ilmoituspyynnön} other {# ilmoituspyyntöä}}. Et saa {count, plural, one {sitä} other {niitä}} enää helposti takaisin. Haluatko varmasti jatkaa?", - "notification_requests.confirm_dismiss_all.title": "Hylätäänkö ilmoituspyynnöt?", + "notification_requests.accept_multiple": "{count, plural, one {Hyväksy # pyyntö…} other {Hyväksy # pyyntöä…}}", + "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Hyväksy pyyntö} other {Hyväksy pyynnöt}}", + "notification_requests.confirm_accept_multiple.message": "Olet aikeissa hyväksyä {count, plural, one {ilmoituspyynnön} other {# ilmoituspyyntöä}}. Haluatko varmasti jatkaa?", + "notification_requests.confirm_accept_multiple.title": "Hyväksytäänkö ilmoituspyynnöt?", + "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Hylkää pyyntö} other {Hylkää pyynnöt}}", + "notification_requests.confirm_dismiss_multiple.message": "Olet aikeissa hylätä {count, plural, one {ilmoituspyynnön} other {# ilmoituspyyntöä}}. Et saa {count, plural, one {sitä} other {niitä}} enää helposti takaisin. Haluatko varmasti jatkaa?", + "notification_requests.confirm_dismiss_multiple.title": "Hylätäänkö ilmoituspyynnöt?", "notification_requests.dismiss": "Hylkää", - "notification_requests.dismiss_all": "Hylkää kaikki", - "notification_requests.dismiss_multiple": "{count, plural, one {Hylkää # pyyntö} other {Hylkää # pyyntöä}}", - "notification_requests.enter_selection_mode": "Valitse", - "notification_requests.exit_selection_mode": "Peruuta", + "notification_requests.dismiss_multiple": "{count, plural, one {Hylkää # pyyntö…} other {Hylkää # pyyntöä…}}", + "notification_requests.edit_selection": "Muokkaa", + "notification_requests.exit_selection": "Valmis", "notification_requests.explainer_for_limited_account": "Tähän tiliin liittyvät ilmoitukset on suodatettu, koska moderaattori on rajoittanut tiliä.", "notification_requests.explainer_for_limited_remote_account": "Tähän tiliin liittyvät ilmoitukset on suodatettu, koska moderaattori on rajoittanut tiliä tai sen palvelinta.", "notification_requests.maximize": "Suurenna", @@ -589,7 +587,7 @@ "notifications.policy.filter_not_following_hint": "Kunnes hyväksyt heidät manuaalisesti", "notifications.policy.filter_not_following_title": "Käyttäjät, joita et seuraa", "notifications.policy.filter_private_mentions_hint": "Suodatetaan, ellei se ole vastaus omaan mainintaasi tai ellet seuraa lähettäjää", - "notifications.policy.filter_private_mentions_title": "Ei-toivotut yksityismaininnat", + "notifications.policy.filter_private_mentions_title": "Pyytämättömät yksityismaininnat", "notifications.policy.title": "Hallitse ilmoituksia kohteesta…", "notifications_permission_banner.enable": "Ota työpöytäilmoitukset käyttöön", "notifications_permission_banner.how_to_control": "Saadaksesi ilmoituksia, kun Mastodon ei ole auki, ota työpöytäilmoitukset käyttöön. Voit hallita tarkasti, mistä saat työpöytäilmoituksia kun ilmoitukset on otettu käyttöön yllä olevan {icon}-painikkeen kautta.", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index 36198e9e59..beabf7fa3b 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -518,19 +518,7 @@ "notification.status": "{name} hevur júst postað", "notification.update": "{name} rættaði ein post", "notification_requests.accept": "Góðtak", - "notification_requests.accept_all": "Góðtak alt", - "notification_requests.accept_multiple": "{count, plural, one {Góðtak # umbøn} other {Góðtak # umbønir}}", - "notification_requests.confirm_accept_all.button": "Góðtak alt", - "notification_requests.confirm_accept_all.message": "Tú er í ferð við at góðtaka {count, plural, one {eina fráboðanarumbøn} other {# fráboðanarumbønir}}. Er tú vís/ur í at tú vilt halda fram?", - "notification_requests.confirm_accept_all.title": "Góðtekur tú umbøn um fráboðan?", - "notification_requests.confirm_dismiss_all.button": "Vraka alt", - "notification_requests.confirm_dismiss_all.message": "Tú ert í ferð við at kveistra burtur {count, plural, one {eina fráboðanarumbøn} other {# fráboðanarumbønir}}. Tað verður ikki lætt hjá tær at fáa atgongd til {count, plural, one {hana} other {tær}} aftur. Er tú vís/ur í, at tú vil halda fram?", - "notification_requests.confirm_dismiss_all.title": "Kveistra burtur fráboðanarumbønir?", "notification_requests.dismiss": "Avvís", - "notification_requests.dismiss_all": "Vraka alt", - "notification_requests.dismiss_multiple": "{count, plural, one {Kveistra burtur # umbøn} other {Kveistra burtur # umbønir}}", - "notification_requests.enter_selection_mode": "Vel", - "notification_requests.exit_selection_mode": "Strika", "notification_requests.explainer_for_limited_account": "Fráboðanir frá hesi kontuni eru filtreraðar burtur, tí kontan er avmarkað av einum umsjónarfólki.", "notification_requests.explainer_for_limited_remote_account": "Fráboðanir frá hesi kontuni eru filtreraðar burtur, tí kontan ella ambætarin hjá kontuni eru avmarkaði av einum umsjónarfólki.", "notification_requests.maximize": "Mesta", diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json index 9cf1d8a69b..e57bc694af 100644 --- a/app/javascript/mastodon/locales/fr-CA.json +++ b/app/javascript/mastodon/locales/fr-CA.json @@ -490,9 +490,6 @@ "notification.status": "{name} vient de publier", "notification.update": "{name} a modifié une publication", "notification_requests.accept": "Accepter", - "notification_requests.accept_all": "Tout accepter", - "notification_requests.confirm_accept_all.button": "Tout accepter", - "notification_requests.confirm_dismiss_all.button": "Tout rejeter", "notification_requests.dismiss": "Rejeter", "notification_requests.notifications_from": "Notifications de {name}", "notification_requests.title": "Notifications filtrées", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 6546cbb1e9..dd713e50ea 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -490,9 +490,6 @@ "notification.status": "{name} vient de publier", "notification.update": "{name} a modifié un message", "notification_requests.accept": "Accepter", - "notification_requests.accept_all": "Tout accepter", - "notification_requests.confirm_accept_all.button": "Tout accepter", - "notification_requests.confirm_dismiss_all.button": "Tout rejeter", "notification_requests.dismiss": "Rejeter", "notification_requests.notifications_from": "Notifications de {name}", "notification_requests.title": "Notifications filtrées", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index db36db17aa..945b2582ac 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -518,19 +518,7 @@ "notification.status": "Phostáil {name} díreach", "notification.update": "Chuir {name} postáil in eagar", "notification_requests.accept": "Glac", - "notification_requests.accept_all": "Glac le gach", - "notification_requests.accept_multiple": "{count, plural, one {Glac le # iarratas} two {Glac le # iarratas} few {Glac le # iarratas} many {Glac le # iarratas} other {Glac le # iarratais}}", - "notification_requests.confirm_accept_all.button": "Glac le gach", - "notification_requests.confirm_accept_all.message": "Tá tú ar tí glacadh le {count, plural, one {iarratas fógra amháin} two {# iarratas fógra} few {# iarratas fógra} many {# iarratas fógra} other {# iarratais fógra}}. An bhfuil tú cinnte gur mian leat leanúint ar aghaidh?", - "notification_requests.confirm_accept_all.title": "Glac le hiarratais ar fhógra?", - "notification_requests.confirm_dismiss_all.button": "Ruaig gach", - "notification_requests.confirm_dismiss_all.message": "Tá tú ar tí neamhaird a dhéanamh ar {count, plural, one {iarratas fógra amháin} two {# iarratas fógra} few {# iarratas fógra} many {# iarratas fógra} other {# iarratais fógra}}. Ní bheidh tú in ann {count, plural, one {é} two {iad} few {iad} many {iad} other {iad}} a rochtain go héasca arís. An bhfuil tú cinnte gur mian leat leanúint ar aghaidh?", - "notification_requests.confirm_dismiss_all.title": "An bhfuil fonn ort iarratais ar fhógra a dhíbhe?", "notification_requests.dismiss": "Díbhe", - "notification_requests.dismiss_all": "Ruaig gach", - "notification_requests.dismiss_multiple": "{count, plural, one {Neamhaird a dhéanamh ar # iarratas} two {Neamhaird a dhéanamh ar # iarratas} few {Neamhaird a dhéanamh ar # iarratas} many {Neamhaird a dhéanamh ar # iarratas} other {Neamhaird a dhéanamh ar # iarratais}}", - "notification_requests.enter_selection_mode": "Roghnaigh", - "notification_requests.exit_selection_mode": "Cealaigh", "notification_requests.explainer_for_limited_account": "Scagadh fógraí ón gcuntas seo toisc go bhfuil an cuntas teoranta ag modhnóir.", "notification_requests.explainer_for_limited_remote_account": "Scagadh fógraí ón gcuntas seo toisc go bhfuil an cuntas nó a fhreastalaí teoranta ag modhnóir.", "notification_requests.maximize": "Uasmhéadaigh", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index 6cbf1e7a03..8ab4cafd14 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -518,19 +518,7 @@ "notification.status": "Phostaich {name} rud", "notification.update": "Dheasaich {name} post", "notification_requests.accept": "Gabh ris", - "notification_requests.accept_all": "Gabh ris na h-uile", - "notification_requests.accept_multiple": "{count, plural, one {Gabh ri # iarrtas} two {Gabh ri # iarrtas} few {Gabh ri # iarrtasan} other {Gabh ri # iarrtas}}", - "notification_requests.confirm_accept_all.button": "Gabh ris na h-uile", - "notification_requests.confirm_accept_all.message": "Tha thu gu bhith gabhail ri {count, plural, one {# iarrtas bratha} two {# iarrtas bratha} few {# iarrtasan bratha} other {# iarrtas bratha}} a leigeil seachad. A bheil thu cinnteach gu bheil thu airson leantainn air adhart?", - "notification_requests.confirm_accept_all.title": "A bheil thu airson gabhail ri iarrtasan bratha?", - "notification_requests.confirm_dismiss_all.button": "Leig seachad na h-uile", - "notification_requests.confirm_dismiss_all.message": "Tha thu gu bhith {count, plural, one {# iarrtas bratha} two {# iarrtas bratha} few {# iarrtasan bratha} other {# iarrtas bratha}} a leigeil seachad. Chan fhaigh thu grèim {count, plural, one {air} two {orra} few {orra} other {orra}} a-rithist gun duilgheadas. A bheil thu cinnteach gu bheil thu airson leantainn air adhart?", - "notification_requests.confirm_dismiss_all.title": "A bheil thu airson iarrtasan bratha a leigeil seachad?", "notification_requests.dismiss": "Leig seachad", - "notification_requests.dismiss_all": "Leig seachad na h-uile", - "notification_requests.dismiss_multiple": "{count, plural, one {Leig seachad # iarrtas} two {Leig seachad # iarrtas} few {Leig seachad # iarrtasan} other {Leig seachad # iarrtas}}", - "notification_requests.enter_selection_mode": "Tagh", - "notification_requests.exit_selection_mode": "Sguir dheth", "notification_requests.explainer_for_limited_account": "Chaidh na brathan on chunntas seo a chriathradh on a chaidh an cunntas a chuingeachadh le maor.", "notification_requests.explainer_for_limited_remote_account": "Chaidh na brathan on chunntas seo a chriathradh on a chaidh an cunntas no am frithealaiche aige a chuingeachadh le maor.", "notification_requests.maximize": "Làn-mheudaich", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index c344c19b7e..1c694bf13d 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -518,19 +518,7 @@ "notification.status": "{name} publicou", "notification.update": "{name} editou unha publicación", "notification_requests.accept": "Aceptar", - "notification_requests.accept_all": "Aceptar todo", - "notification_requests.accept_multiple": "{count, plural, one {Aceptar # solicitude} other {Acceptar # solicitudes}}", - "notification_requests.confirm_accept_all.button": "Aceptar todo", - "notification_requests.confirm_accept_all.message": "Vas aceptar {count, plural, one {unha solicitude de notificación} other {# solicitudes de notificación}}. Tes certeza de querer aceptalas?", - "notification_requests.confirm_accept_all.title": "Aceptar solicitudes de notificación?", - "notification_requests.confirm_dismiss_all.button": "Rexeitar todo", - "notification_requests.confirm_dismiss_all.message": "Vas rexeitar {count, plural, one {unha solicitude de notificación} other {# solicitudes de notificacións}}. Será complicado volver a {count, plural, one {vela} other {velas}}. Tes certeza de rexeitar?", - "notification_requests.confirm_dismiss_all.title": "Rexeitar solicitudes de notificacións?", "notification_requests.dismiss": "Desbotar", - "notification_requests.dismiss_all": "Rexeitar todo", - "notification_requests.dismiss_multiple": "{count, plural, one {Rexeitar # solicitude} other {Rexeitar # solicitudes}}", - "notification_requests.enter_selection_mode": "Escoller", - "notification_requests.exit_selection_mode": "Desbotar", "notification_requests.explainer_for_limited_account": "Filtráronse as notificacións desta conta porque a conta ten limitacións impostas pola moderación.", "notification_requests.explainer_for_limited_remote_account": "Filtráronse as notificacións desta conta porque a conta ou o seu servidor teñen limitacións impostas pola moderación.", "notification_requests.maximize": "Maximizar", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index e9cbfcbcc3..72f0612bc7 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -518,19 +518,7 @@ "notification.status": "{name} הרגע פרסמו", "notification.update": "{name} ערכו הודעה", "notification_requests.accept": "לקבל", - "notification_requests.accept_all": "לקבל את כל הבקשות", - "notification_requests.accept_multiple": "{count, plural,one {לאשר קבלת בקשה}other {לאשר קבלת # בקשות}}", - "notification_requests.confirm_accept_all.button": "לקבל את כל הבקשות", - "notification_requests.confirm_accept_all.message": "אתם עומדים לאשר {count, plural,one {בקשת התראה אחת}other {# בקשות התראה}}. להמשיך?", - "notification_requests.confirm_accept_all.title": "לקבל בקשות התראה?", - "notification_requests.confirm_dismiss_all.button": "דחיית כל הבקשות", - "notification_requests.confirm_dismiss_all.message": "אתם עומדים לדחות {count, plural,one {בקשת התראה}other {# בקשות התראה}}. לא תוכלו למצוא {count, plural,one {אותה}other {אותן}} בקלות אחר כך. להמשיך?", - "notification_requests.confirm_dismiss_all.title": "לדחות בקשות התראה?", "notification_requests.dismiss": "לבטל", - "notification_requests.dismiss_all": "דחיית כל הבקשות", - "notification_requests.dismiss_multiple": "{count, plural,one {לדחות בקשה}other {לדחות # בקשות}} לקבלת התראה", - "notification_requests.enter_selection_mode": "בחירה", - "notification_requests.exit_selection_mode": "ביטול", "notification_requests.explainer_for_limited_account": "התראות על פעולות חשבון זה סוננו כי חשבון זה הוגבל על ידי מנהלי הדיונים.", "notification_requests.explainer_for_limited_remote_account": "התראות על פעולות חשבון זה סוננו כי חשבון זה או השרת שלו הוגבלו על ידי מנהלי הדיונים.", "notification_requests.maximize": "הגדלה למקסימום", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index eb618c4666..c3e568c780 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -518,19 +518,7 @@ "notification.status": "{name} bejegyzést tett közzé", "notification.update": "{name} szerkesztett egy bejegyzést", "notification_requests.accept": "Elfogadás", - "notification_requests.accept_all": "Összes elfogadása", - "notification_requests.accept_multiple": "{count, plural, one {# kérés elfogadása} other {# kérés elfogadása}}", - "notification_requests.confirm_accept_all.button": "Összes elfogadása", - "notification_requests.confirm_accept_all.message": "Elfogadni készülsz {count, plural, one {egy értesítési kérést} other {# értesítési kérést}}. Biztosan folytatod?", - "notification_requests.confirm_accept_all.title": "Értesítési kérés elfogadása?", - "notification_requests.confirm_dismiss_all.button": "Összes elutasítása", - "notification_requests.confirm_dismiss_all.message": "{count, plural, one {Egy értesítési kérés} other {# értesítési kérés}} elvetésére készülsz. Többé nem fogsz {count, plural, one {hozzáférni} other {hozzájuk férni}}. Biztosan folytatod?", - "notification_requests.confirm_dismiss_all.title": "Értesítési kérések elvetése?", "notification_requests.dismiss": "Elvetés", - "notification_requests.dismiss_all": "Összes elutasítása", - "notification_requests.dismiss_multiple": "{count, plural, one {# kérés elvetése} other {# kérés elvetése}}", - "notification_requests.enter_selection_mode": "Kiválasztás", - "notification_requests.exit_selection_mode": "Mégse", "notification_requests.explainer_for_limited_account": "Az ettől a fióktól származó értesítéseket kiszűrték, mert a fiókot egy moderátor korlátozta.", "notification_requests.explainer_for_limited_remote_account": "Az ettől a fióktól származó értesítéseket kiszűrték, mert a fiókot vagy annak kiszolgálóját egy moderátor korlátozta.", "notification_requests.maximize": "Maximalizálás", diff --git a/app/javascript/mastodon/locales/ig.json b/app/javascript/mastodon/locales/ig.json index 0f4731ebaa..1dd380164d 100644 --- a/app/javascript/mastodon/locales/ig.json +++ b/app/javascript/mastodon/locales/ig.json @@ -113,7 +113,6 @@ "navigation_bar.lists": "Ndepụta", "not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.", "notification.reblog": "{name} boosted your status", - "notification_requests.enter_selection_mode": "Họrọ", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index d5c791e1c5..2cfe8a7c64 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -518,19 +518,7 @@ "notification.status": "{name} sendi inn rétt í þessu", "notification.update": "{name} breytti færslu", "notification_requests.accept": "Samþykkja", - "notification_requests.accept_all": "Samþykkja alla", - "notification_requests.accept_multiple": "{count, plural, one {Samþykkja # beiðni} other {Samþykkja # beiðnir}}", - "notification_requests.confirm_accept_all.button": "Samþykkja alla", - "notification_requests.confirm_accept_all.message": "Þú ert að fara að samþykkja {count, plural, one {eina beiðni um tilkynningar} other {# beiðnir um tilkynningar}}. Ertu viss um að þú viljir halda áfram?", - "notification_requests.confirm_accept_all.title": "Samþykkja beiðnir um tilkynningar?", - "notification_requests.confirm_dismiss_all.button": "Hunsa allt", - "notification_requests.confirm_dismiss_all.message": "Þú ert að fara að hunsa {count, plural, one {eina beiðni um tilkynningar} other {# beiðnir um tilkynningar}}. Þú munt ekki eiga auðvelt með að skoða {count, plural, one {hana} other {þær}} aftur síðar. Ertu viss um að þú viljir halda áfram?", - "notification_requests.confirm_dismiss_all.title": "Hunsa beiðnir um tilkynningar?", "notification_requests.dismiss": "Afgreiða", - "notification_requests.dismiss_all": "Hunsa allt", - "notification_requests.dismiss_multiple": "{count, plural, one {Afgreiða # beiðni} other {Afgreiða # beiðnir}}", - "notification_requests.enter_selection_mode": "Velja", - "notification_requests.exit_selection_mode": "Hætta við", "notification_requests.explainer_for_limited_account": "Tilkynningar frá þessum notanda hafa verið síaðar þar sem aðgangur hans hefur verið takmarkaður af umsjónarmanni.", "notification_requests.explainer_for_limited_remote_account": "Tilkynningar frá þessum notanda hafa verið síaðar þar sem aðgangurinn eða netþjónn hans hefur verið takmarkaður af umsjónarmanni.", "notification_requests.maximize": "Hámarka", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 20f5f0aa08..99fc7058be 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -518,19 +518,7 @@ "notification.status": "{name} ha appena pubblicato un post", "notification.update": "{name} ha modificato un post", "notification_requests.accept": "Accetta", - "notification_requests.accept_all": "Accetta tutte", - "notification_requests.accept_multiple": "{count, plural,one {Accetta # richiesta} other {Accetta # richieste}}", - "notification_requests.confirm_accept_all.button": "Accetta tutte", - "notification_requests.confirm_accept_all.message": "Stai per accettare {count, plural, one {una richiesta di notifica} other {# richieste di notifica}}. Si è sicuri di voler procedere?", - "notification_requests.confirm_accept_all.title": "Accettare le richieste di notifica?", - "notification_requests.confirm_dismiss_all.button": "Ignora tutte", - "notification_requests.confirm_dismiss_all.message": "Stai per ignorare {count, plural, one {una richiesta di notifica} other {# richieste di notifica}}. Non sarai più in grado di accedere facilmente {count, plural, one {ad essa} other {ad esse}} nuovamente. Si è sicuri di voler procedere?", - "notification_requests.confirm_dismiss_all.title": "Ignorare le richieste di notifica?", "notification_requests.dismiss": "Ignora", - "notification_requests.dismiss_all": "Ignora tutte", - "notification_requests.dismiss_multiple": "{count, plural, one {Ignora # richiesta} other {Ignora # richieste}}", - "notification_requests.enter_selection_mode": "Seleziona", - "notification_requests.exit_selection_mode": "Annulla", "notification_requests.explainer_for_limited_account": "Le notifiche provenienti da questo account sono state filtrate perché l'account è stato limitato da un moderatore.", "notification_requests.explainer_for_limited_remote_account": "Le notifiche provenienti da questo account sono state filtrate perché l'account o il suo server sono stati limitati da un moderatore.", "notification_requests.maximize": "Ingrandisci", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index 420ba495f0..f5adc8c56c 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -403,7 +403,6 @@ "notification.status": "{name} akken i d-yessufeɣ", "notification_requests.accept": "Qbel", "notification_requests.dismiss": "Agi", - "notification_requests.exit_selection_mode": "Sefsex", "notification_requests.notifications_from": "Alɣuten sɣur {name}", "notifications.clear": "Sfeḍ alɣuten", "notifications.clear_confirmation": "Tebɣiḍ s tidet ad tekkseḍ akk alɣuten-inek·em i lebda?", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index a309a50263..2e929040f4 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -516,19 +516,7 @@ "notification.status": "{name} 님이 방금 게시물을 올렸습니다", "notification.update": "{name} 님이 게시물을 수정했습니다", "notification_requests.accept": "수락", - "notification_requests.accept_all": "모두 수락", - "notification_requests.accept_multiple": "{count, plural, other {#개의 요청 수락하기}}", - "notification_requests.confirm_accept_all.button": "모두 수락", - "notification_requests.confirm_accept_all.message": "{count, plural, other {#개의 요청}}을 수락하려 합니다. 계속 진행할까요?", - "notification_requests.confirm_accept_all.title": "알림 요청을 수락할까요?", - "notification_requests.confirm_dismiss_all.button": "모두 지우기", - "notification_requests.confirm_dismiss_all.message": "{count, plural, other {#개의 요청}}을 지우려고 합니다. {count, plural, other {}}다시 접근하기 어렵습니다. 계속할까요?", - "notification_requests.confirm_dismiss_all.title": "알림 요청을 지울까요?", "notification_requests.dismiss": "지우기", - "notification_requests.dismiss_all": "모두 지우기", - "notification_requests.dismiss_multiple": "{count, plural, other {#개의 요청 지우기}}", - "notification_requests.enter_selection_mode": "선택", - "notification_requests.exit_selection_mode": "취소", "notification_requests.explainer_for_limited_account": "이 계정은 중재자에 의해 제한되었기 때문에 이 계정의 알림은 걸러졌습니다.", "notification_requests.explainer_for_limited_remote_account": "이 계정 혹은 그가 속한 서버는 중재자에 의해 제한되었기 때문에 이 계정의 알림은 걸러졌습니다.", "notification_requests.maximize": "최대화", diff --git a/app/javascript/mastodon/locales/lad.json b/app/javascript/mastodon/locales/lad.json index 0b0449c96a..9711bc684d 100644 --- a/app/javascript/mastodon/locales/lad.json +++ b/app/javascript/mastodon/locales/lad.json @@ -475,11 +475,7 @@ "notification.status": "{name} publiko algo", "notification.update": "{name} edito una publikasyon", "notification_requests.accept": "Acheta", - "notification_requests.accept_all": "Acheta todos", - "notification_requests.confirm_accept_all.button": "Acheta todos", "notification_requests.dismiss": "Kita", - "notification_requests.enter_selection_mode": "Eskoje", - "notification_requests.exit_selection_mode": "Anula", "notification_requests.notifications_from": "Avizos de {name}", "notification_requests.title": "Avizos filtrados", "notification_requests.view": "Amostra avizos", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index 038ec8a7b3..174d3033c7 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -516,19 +516,7 @@ "notification.status": "{name} ką tik paskelbė", "notification.update": "{name} redagavo įrašą", "notification_requests.accept": "Priimti", - "notification_requests.accept_all": "Priimti visus", - "notification_requests.accept_multiple": "{count, plural, one {Priimti # prašymą} few {Priimti # prašymus} many {Priimti # prašymo} other {Priimti # prašymų}}", - "notification_requests.confirm_accept_all.button": "Priimti visus", - "notification_requests.confirm_accept_all.message": "Ketini priimti {count, plural, one {# pranešimo prašymą} few {# pranešimų prašymus} many {# pranešimo prašymo} other {# pranešimų prašymų}}. Ar tikrai nori tęsti?", - "notification_requests.confirm_accept_all.title": "Priimti pranešimų prašymus?", - "notification_requests.confirm_dismiss_all.button": "Atmesti visus", - "notification_requests.confirm_dismiss_all.message": "Ketini atmesti {count, plural, one {# pranešimo prašymą} few {# pranešimų prašymus} many {# pranešimo prašymo} other {# pranešimų prašymų}}. Daugiau negalėsi lengvai pasiekti {count, plural, one {jo} few {jų} many {juos} other {jų}}. Ar tikrai nori tęsti?", - "notification_requests.confirm_dismiss_all.title": "Atmesti pranešimų prašymus?", "notification_requests.dismiss": "Atmesti", - "notification_requests.dismiss_all": "Atmesti visus", - "notification_requests.dismiss_multiple": "{count, plural, one {Atmesti # prašymą} few {Atmesti # prašymus} many {Atmesti # prašymo} other {Atmesti # prašymų}}", - "notification_requests.enter_selection_mode": "Pasirinkti", - "notification_requests.exit_selection_mode": "Atšaukti", "notification_requests.explainer_for_limited_account": "Pranešimai iš šios paskyros buvo filtruojami, nes prižiūrėtojas (-a) apribojo paskyrą.", "notification_requests.explainer_for_limited_remote_account": "Pranešimai iš šios paskyros buvo filtruojami, nes prižiūrėtojas (-a) apribojo paskyrą arba serverį.", "notification_requests.maximize": "Padidinti", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 9293cfb092..a8a6b23f86 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -518,19 +518,7 @@ "notification.status": "{name} heeft zojuist een bericht geplaatst", "notification.update": "{name} heeft een bericht bewerkt", "notification_requests.accept": "Accepteren", - "notification_requests.accept_all": "Alles accepteren", - "notification_requests.accept_multiple": "{count, plural, one {# verzoek accepteren} other {# verzoeken accepteren}}", - "notification_requests.confirm_accept_all.button": "Alles accepteren", - "notification_requests.confirm_accept_all.message": "Je staat op het punt om {count, plural, one {een meldingsverzoek} other {# meldingsverzoeken}} te accepteren. Wil je doorgaan?", - "notification_requests.confirm_accept_all.title": "Meldingsverzoeken accepteren?", - "notification_requests.confirm_dismiss_all.button": "Alles afwijzen", - "notification_requests.confirm_dismiss_all.message": "Je staat op het punt om {count, plural, one {een meldingsverzoek} other {# meldingsverzoeken}} af te wijzen. Je zult niet in staat zijn om {count, plural, one {hier} other {hier}} weer gemakkelijk toegang toe te krijgen. Wil je doorgaan?", - "notification_requests.confirm_dismiss_all.title": "Meldingsverzoeken afwijzen?", "notification_requests.dismiss": "Afwijzen", - "notification_requests.dismiss_all": "Alles afwijzen", - "notification_requests.dismiss_multiple": "{count, plural, one {# verzoek afwijzen} other {# verzoeken afwijzen}}", - "notification_requests.enter_selection_mode": "Selecteren", - "notification_requests.exit_selection_mode": "Annuleren", "notification_requests.explainer_for_limited_account": "Meldingen van dit account zijn gefilterd omdat dit account door een moderator is beperkt.", "notification_requests.explainer_for_limited_remote_account": "Meldingen van dit account zijn gefilterd omdat dit account of diens server door een moderator is beperkt.", "notification_requests.maximize": "Maximaliseren", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 1b0e490e60..7ecabd10c5 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -518,19 +518,7 @@ "notification.status": "{name} la nettopp ut", "notification.update": "{name} redigerte eit innlegg", "notification_requests.accept": "Godkjenn", - "notification_requests.accept_all": "Godta alle", - "notification_requests.accept_multiple": "{count, plural, one {Godta # førespurnad} other {Godta # førespurnader}}", - "notification_requests.confirm_accept_all.button": "Godta alle", - "notification_requests.confirm_accept_all.message": "Du er i ferd med å godta {count, plural, one {ein førespurnad om å fylgja deg} other {# førespurnader om å fylgja deg}}. Er du sikker på at du vil halda fram?", - "notification_requests.confirm_accept_all.title": "Godta førespurnad om varsel?", - "notification_requests.confirm_dismiss_all.button": "Avvis alle", - "notification_requests.confirm_dismiss_all.message": "Du er i ferd med å avvisa {count, plural, one {ein førespurnad om varsel} other {# førespurnader om varsel}}. Det blir ikkje lett å få tilgang til {count, plural, one {han} other {dei}} att. Er du sikker på at du vil halda fram?", - "notification_requests.confirm_dismiss_all.title": "Avvis førespurnader om varsel?", "notification_requests.dismiss": "Avvis", - "notification_requests.dismiss_all": "Avvis alle", - "notification_requests.dismiss_multiple": "{count, plural, one {Avvis # førespurnad} other {Avvis # førespurnader}}", - "notification_requests.enter_selection_mode": "Vel", - "notification_requests.exit_selection_mode": "Avbryt", "notification_requests.explainer_for_limited_account": "Varsla frå denne kontoen er filtrerte ut fordi ein moderator har avgrensa kontoen.", "notification_requests.explainer_for_limited_remote_account": "Varla frå denne kontoen er filtrerte ut fordi ein moderator har avgrensa kontoen eller tenaren.", "notification_requests.maximize": "Maksimer", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index c46c891d1b..adbdedb780 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -517,19 +517,17 @@ "notification.status": "{name} opublikował(a) nowy wpis", "notification.update": "{name} edytował(a) post", "notification_requests.accept": "Akceptuj", - "notification_requests.accept_all": "Przyjmij wszystkie", - "notification_requests.accept_multiple": "Przyjmij {count, plural, one {# wniosek} few {# wnioski} other {# wniosków}} o powiadomienia", - "notification_requests.confirm_accept_all.button": "Przyjmij wszystkie", - "notification_requests.confirm_accept_all.message": "Na pewno przyjąć {count, plural, one {# wniosek o powiadomienie} few {# wnioski o powiadomienia} other {# wniosków o powiadomienia}}?", - "notification_requests.confirm_accept_all.title": "Przyjąć wnioski o powiadomienia?", - "notification_requests.confirm_dismiss_all.button": "Odrzuć wszystkie", - "notification_requests.confirm_dismiss_all.message": "Na pewno odrzucić {count, plural, one {# wniosek o powiadomienie} few {# wnioski o powiadomienia} other {# wniosków o powiadomienia}}? Stracisz do {count, plural, one {niego} other {nich}} łatwy dostęp.", - "notification_requests.confirm_dismiss_all.title": "Odrzuć żądania powiadomień?", + "notification_requests.accept_multiple": "Przyjmij {count, plural, one {# wniosek} few {# wnioski} other {# wniosków}} o powiadomienia…", + "notification_requests.confirm_accept_multiple.button": "Przyjmij {count, plural, one {wniosek} other {wnioski}} o powiadomienia", + "notification_requests.confirm_accept_multiple.message": "Na pewno przyjąć {count, plural, one {# wniosek o powiadomienie} few {# wnioski o powiadomienia} other {# wniosków o powiadomienia}}?", + "notification_requests.confirm_accept_multiple.title": "Przyjąć wnioski o powiadomienia?", + "notification_requests.confirm_dismiss_multiple.button": "Odrzuć {count, plural, one {wniosek} other {wnioski}} o powiadomienia", + "notification_requests.confirm_dismiss_multiple.message": "Na pewno odrzucić {count, plural, one {# wniosek o powiadomienie} few {# wnioski o powiadomienia} other {# wniosków o powiadomienia}}? Stracisz do {count, plural, one {niego} other {nich}} łatwy dostęp.", + "notification_requests.confirm_dismiss_multiple.title": "Odrzuć żądania powiadomień?", "notification_requests.dismiss": "Odrzuć", - "notification_requests.dismiss_all": "Odrzuć wszystkie", - "notification_requests.dismiss_multiple": "Odrzuć {count, plural, one {# wniosek} few {# wnioski} other {# wniosków}} o powiadomienia", - "notification_requests.enter_selection_mode": "Wybierz", - "notification_requests.exit_selection_mode": "Anuluj", + "notification_requests.dismiss_multiple": "Odrzuć {count, plural, one {# wniosek} few {# wnioski} other {# wniosków}} o powiadomienia…", + "notification_requests.edit_selection": "Edytuj", + "notification_requests.exit_selection": "Gotowe", "notification_requests.explainer_for_limited_account": "Powiadomienia od tego konta zostały odfiltrowane bo to konto zostało ograniczone przez moderatora.", "notification_requests.explainer_for_limited_remote_account": "Powiadomienia od tego konta zostały odfiltrowane bo to konto, albo serwer na którym się znajduje, zostało ograniczone przez moderatora.", "notification_requests.maximize": "Zmaksymalizuj", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 613b1d4544..9f38f0b51a 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -498,10 +498,7 @@ "notification.status": "{name} acabou de tootar", "notification.update": "{name} editou uma publicação", "notification_requests.accept": "Aceitar", - "notification_requests.accept_all": "Aceitar tudo", - "notification_requests.confirm_accept_all.button": "Aceitar tudo", "notification_requests.dismiss": "Rejeitar", - "notification_requests.exit_selection_mode": "Cancelar", "notification_requests.maximize": "Maximizar", "notification_requests.notifications_from": "Notificações de {name}", "notification_requests.title": "Notificações filtradas", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 108b83f0b0..7ac05ea980 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -339,6 +339,7 @@ "home.pending_critical_update.link": "Zobraziť aktualizácie", "home.pending_critical_update.title": "Je dostupná kritická bezpečnostná aktualizácia.", "home.show_announcements": "Zobraziť oznámenia", + "ignore_notifications_modal.ignore": "Ignoruj upozornenia", "interaction_modal.description.favourite": "S účtom na Mastodone môžete tento príspevok ohviezdičkovať, tak dať autorovi vedieť, že sa vám páči, a uložiť si ho na neskôr.", "interaction_modal.description.follow": "S účtom na Mastodone môžete {name} sledovať a vidieť ich príspevky vo svojom domovskom kanáli.", "interaction_modal.description.reblog": "S účtom na Mastodone môžete tento príspevok zdeľať so svojimi sledovateľmi.", @@ -455,6 +456,11 @@ "notification.favourite": "{name} hviezdičkuje váš príspevok", "notification.follow": "{name} vás sleduje", "notification.follow_request": "{name} vás žiada sledovať", + "notification.label.mention": "Zmienka", + "notification.label.private_mention": "Súkromná zmienka", + "notification.label.private_reply": "Súkromná odpoveď", + "notification.label.reply": "Odpoveď", + "notification.mention": "Zmienka", "notification.moderation-warning.learn_more": "Zisti viac", "notification.moderation_warning.action_delete_statuses": "Niektoré z tvojich príspevkov boli odstránené.", "notification.moderation_warning.action_disable": "Tvoj účet bol vypnutý.", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index 353b521a1c..1f2d9c4cdf 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -507,13 +507,7 @@ "notification.status": "{name} je pravkar objavil/a", "notification.update": "{name} je uredil(a) objavo", "notification_requests.accept": "Sprejmi", - "notification_requests.accept_all": "Sprejmi vse", - "notification_requests.confirm_accept_all.button": "Sprejmi vse", - "notification_requests.confirm_dismiss_all.button": "Opusti vse", "notification_requests.dismiss": "Zavrni", - "notification_requests.dismiss_all": "Opusti vse", - "notification_requests.enter_selection_mode": "Izberi", - "notification_requests.exit_selection_mode": "Prekliči", "notification_requests.maximize": "Maksimiraj", "notification_requests.notifications_from": "Obvestila od {name}", "notification_requests.title": "Filtrirana obvestila", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 78b90e2788..3fe22e4df5 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -518,19 +518,7 @@ "notification.status": "{name} sapo postoi", "notification.update": "{name} përpunoi një postim", "notification_requests.accept": "Pranoje", - "notification_requests.accept_all": "Pranoji krejt", - "notification_requests.accept_multiple": "{count, plural, one {Prano # kërkesë} other {Prano # kërkesa}}", - "notification_requests.confirm_accept_all.button": "Pranoji krejt", - "notification_requests.confirm_accept_all.message": "Ju ndan një hap nga pranimi i {count, plural, one {një kërkese njoftimi} other {# kërkesash njoftimi}}. Jeni i sigurt se doni të vazhdohet?", - "notification_requests.confirm_accept_all.title": "Të pranohen kërkesa njoftimesh?", - "notification_requests.confirm_dismiss_all.button": "Hidhi tej krejt", - "notification_requests.confirm_dismiss_all.message": "Ju ndan një hap nga hedhja tej e {count, plural, one {një kërkese njoftimesh} other {# kërkesash njoftimesh}}. S’do të jeni në gjendje të shihni sërish {count, plural, one {atë} other {ato}}. Jeni i sigurt se doni të bëhet kjo?", - "notification_requests.confirm_dismiss_all.title": "Të hidhen tej kërkesa njoftimesh?", "notification_requests.dismiss": "Hidhe tej", - "notification_requests.dismiss_all": "Hidhi tej krejt", - "notification_requests.dismiss_multiple": "{count, plural, one {Hidhni tej # kërkesë} other {Hidhni tej # kërkesa}}", - "notification_requests.enter_selection_mode": "Përzgjidhni", - "notification_requests.exit_selection_mode": "Anuloje", "notification_requests.explainer_for_limited_account": "Njoftimet prej kësaj llogarie janë filtruar, ngaqë llogaria është kufizuar nga një moderator.", "notification_requests.explainer_for_limited_remote_account": "Njoftimet prej kësaj llogarie janë filtruar, ngaqë llogaria, ose shërbyesi është kufizuar nga një moderator.", "notification_requests.maximize": "Maksimizoje", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index b27b3633ee..7c57569b80 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -502,14 +502,9 @@ "notification.status": "{name} publicerade just ett inlägg", "notification.update": "{name} redigerade ett inlägg", "notification_requests.accept": "Godkänn", - "notification_requests.accept_all": "Acceptera alla", - "notification_requests.accept_multiple": "{count, plural, one {Acceptera # förfrågan} other {Acceptera # förfrågningar}}", - "notification_requests.confirm_accept_all.button": "Acceptera alla", - "notification_requests.confirm_dismiss_all.button": "Avvisa alla", "notification_requests.dismiss": "Avfärda", - "notification_requests.dismiss_all": "Avvisa alla", - "notification_requests.dismiss_multiple": "{count, plural, one {Avvisa # förfrågan} other {Avvisa # förfrågningar}}", - "notification_requests.exit_selection_mode": "Avbryt", + "notification_requests.edit_selection": "Redigera", + "notification_requests.exit_selection": "Klar", "notification_requests.notifications_from": "Aviseringar från {name}", "notification_requests.title": "Filtrerade meddelanden", "notifications.clear": "Rensa aviseringar", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 9d378a67a2..dc155ac433 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -515,17 +515,7 @@ "notification.status": "{name} เพิ่งโพสต์", "notification.update": "{name} ได้แก้ไขโพสต์", "notification_requests.accept": "ยอมรับ", - "notification_requests.accept_all": "ยอมรับทั้งหมด", - "notification_requests.accept_multiple": "{count, plural, other {ยอมรับ # คำขอ}}", - "notification_requests.confirm_accept_all.button": "ยอมรับทั้งหมด", - "notification_requests.confirm_accept_all.title": "ยอมรับคำขอการแจ้งเตือน?", - "notification_requests.confirm_dismiss_all.button": "ปิดทั้งหมด", - "notification_requests.confirm_dismiss_all.title": "ปิดคำขอการแจ้งเตือน?", "notification_requests.dismiss": "ปิด", - "notification_requests.dismiss_all": "ปิดทั้งหมด", - "notification_requests.dismiss_multiple": "{count, plural, other {ปิด # คำขอ}}", - "notification_requests.enter_selection_mode": "เลือก", - "notification_requests.exit_selection_mode": "ยกเลิก", "notification_requests.notifications_from": "การแจ้งเตือนจาก {name}", "notification_requests.title": "การแจ้งเตือนที่กรองอยู่", "notification_requests.view": "ดูการแจ้งเตือน", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index ba84b72212..adada095b1 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -518,19 +518,7 @@ "notification.status": "{name} az önce gönderdi", "notification.update": "{name} bir gönderiyi düzenledi", "notification_requests.accept": "Onayla", - "notification_requests.accept_all": "Tümünü kabul et", - "notification_requests.accept_multiple": "{count, plural, one {# isteği kabul et} other {# isteği kabul et}}", - "notification_requests.confirm_accept_all.button": "Tümünü kabul et", - "notification_requests.confirm_accept_all.message": "{count, plural, one {Bir bildirim isteğini} other {# bildirim isteğini}} kabul etmek üzeresiniz. Devam etmek istediğinizden emin misiniz?", - "notification_requests.confirm_accept_all.title": "Bildirim taleplerini kabul et?", - "notification_requests.confirm_dismiss_all.button": "Tümünü reddet", - "notification_requests.confirm_dismiss_all.message": "{count, plural, one {Bir bildirim isteğini} other {# bildirim isteğini}} reddetmek üzeresiniz. {count, plural, one {Ona} other {Onlara}} tekrar kolayca ulaşamayacaksınz. Devam etmek istediğinizden emin misiniz?", - "notification_requests.confirm_dismiss_all.title": "Bildirim taleplerini reddet?", "notification_requests.dismiss": "Yoksay", - "notification_requests.dismiss_all": "Tümünü reddet", - "notification_requests.dismiss_multiple": "{count, plural, one {# isteği reddet} other {# isteği reddet}}", - "notification_requests.enter_selection_mode": "Seç", - "notification_requests.exit_selection_mode": "İptal", "notification_requests.explainer_for_limited_account": "Hesap bir moderatör tarafından sınırlandığı için, bu hesaptan gönderilen bildirimler filtrelendi.", "notification_requests.explainer_for_limited_remote_account": "Hesap veya sunucusu bir moderatör tarafından sınırlandığı için, bu hesaptan gönderilen bildirimler filtrelendi.", "notification_requests.maximize": "Büyüt", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 83b3be003e..462b9fb171 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -518,19 +518,7 @@ "notification.status": "{name} щойно дописує", "notification.update": "{name} змінює допис", "notification_requests.accept": "Прийняти", - "notification_requests.accept_all": "Прийняти все", - "notification_requests.accept_multiple": "{count, plural, one {Прийняти # запит} few {Прийняти # запити} many {Прийняти # запитів} other {Прийняти # запит}}", - "notification_requests.confirm_accept_all.button": "Прийняти все", - "notification_requests.confirm_accept_all.message": "Ви збираєтеся прийняти {count, plural, one {запит на сповіщення} few {# запити на сповіщення} many {# запитів на сповіщення} other {# запит на сповіщення}}. Ви впевнені, що хочете продовжити?", - "notification_requests.confirm_accept_all.title": "Прийняти запит на сповіщення?", - "notification_requests.confirm_dismiss_all.button": "Відхили все", - "notification_requests.confirm_dismiss_all.message": "Ви збираєтеся відхилити {count, plural, one {запит на сповіщення} few {# запити на сповіщення} many {# запитів на сповіщення} other {# запит на сповіщення}}. Ви не зможете легко отримати доступ до {count, plural, one {нього} other {них}} again. Ви впевнені, що хочете продовжити?", - "notification_requests.confirm_dismiss_all.title": "Відхилити запити на сповіщення?", "notification_requests.dismiss": "Відхилити", - "notification_requests.dismiss_all": "Відхили все", - "notification_requests.dismiss_multiple": "{count, plural, one {Відхилити # запит} other {Відхилити # запити}}", - "notification_requests.enter_selection_mode": "Вибрати", - "notification_requests.exit_selection_mode": "Скасувати", "notification_requests.explainer_for_limited_account": "Сповіщення від цього облікового запису фільтровані, оскільки обліковий запис обмежений модератором.", "notification_requests.explainer_for_limited_remote_account": "Сповіщення від цього облікового запису фільтровані, оскільки обліковий запис або його сервер обмежений модератором.", "notification_requests.maximize": "Розгорнути", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 688adc2137..8dceeccdbd 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -509,7 +509,17 @@ "notification.status": "{name} đăng tút mới", "notification.update": "{name} đã sửa tút", "notification_requests.accept": "Chấp nhận", + "notification_requests.accept_multiple": "{count, plural, other {Duyệt # yêu cầu…}}", + "notification_requests.confirm_accept_multiple.button": "{count, plural, other {Yêu cầu cần duyệt}}", + "notification_requests.confirm_accept_multiple.message": "Bạn sẽ duyệt {count, plural, other {# yêu cầu thông báo}}. Vẫn tiếp tục?", + "notification_requests.confirm_accept_multiple.title": "Duyệt yêu cầu thông báo?", + "notification_requests.confirm_dismiss_multiple.button": "{count, plural, other {Bỏ qua yêu cầu}}", + "notification_requests.confirm_dismiss_multiple.message": "Bạn sẽ bỏ qua {count, plural, other {# yêu cầu thông báo}}. Bạn sẽ không thể truy cập dễ dàng {count, plural, other {chúng}} nữa. Vẫn tiếp tục?", + "notification_requests.confirm_dismiss_multiple.title": "Bỏ qua yêu cầu thông báo?", "notification_requests.dismiss": "Bỏ qua", + "notification_requests.dismiss_multiple": "{count, plural, other {Bỏ qua # yêu cầu…}}", + "notification_requests.edit_selection": "Sửa", + "notification_requests.exit_selection": "Xong", "notification_requests.explainer_for_limited_account": "Thông báo từ tài khoản này đã được lọc vì tài khoản đã bị giới hạn bởi kiểm duyệt viên.", "notification_requests.explainer_for_limited_remote_account": "Thông báo từ tài khoản này đã được lọc vì tài khoản hoặc máy chủ của tài khoản đã bị giới hạn bởi kiểm duyệt viên.", "notification_requests.maximize": "Tối đa", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 517390f823..fd3ce2ae6c 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -518,19 +518,7 @@ "notification.status": "{name} 刚刚发布嘟文", "notification.update": "{name} 编辑了嘟文", "notification_requests.accept": "接受", - "notification_requests.accept_all": "全部接受", - "notification_requests.accept_multiple": "{count, plural, other {接受 # 个请求}}", - "notification_requests.confirm_accept_all.button": "全部接受", - "notification_requests.confirm_accept_all.message": "你将要接受 {count, plural, other {# 个通知请求}}。是否继续?", - "notification_requests.confirm_accept_all.title": "是否接受通知请求?", - "notification_requests.confirm_dismiss_all.button": "全部拒绝", - "notification_requests.confirm_dismiss_all.message": "你将要拒绝 {count, plural, other {# 个通知请求}}。你将无法再轻易访问{count, plural, other {它们}}。是否继续?", - "notification_requests.confirm_dismiss_all.title": "是否拒绝通知请求?", "notification_requests.dismiss": "拒绝", - "notification_requests.dismiss_all": "全部拒绝", - "notification_requests.dismiss_multiple": "{count, plural, other {拒绝 # 个请求}}", - "notification_requests.enter_selection_mode": "选择", - "notification_requests.exit_selection_mode": "取消", "notification_requests.explainer_for_limited_account": "来自该账户的通知已被过滤,因为该账户已被管理员限制。", "notification_requests.explainer_for_limited_remote_account": "来自该账户的通知已被过滤,因为该账户或其所在的实例已被管理员限制。", "notification_requests.maximize": "最大化", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 16e506a181..cc130cfafc 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -518,19 +518,17 @@ "notification.status": "{name} 剛剛嘟文", "notification.update": "{name} 已編輯嘟文", "notification_requests.accept": "接受", - "notification_requests.accept_all": "全部接受", - "notification_requests.accept_multiple": "{count, plural, other {接受 # 則請求}}", - "notification_requests.confirm_accept_all.button": "全部接受", - "notification_requests.confirm_accept_all.message": "您將接受 {count, plural, other {# 則推播通知請求}}。您確定要繼續?", - "notification_requests.confirm_accept_all.title": "接受推播通知請求?", - "notification_requests.confirm_dismiss_all.button": "全部忽略", - "notification_requests.confirm_dismiss_all.message": "您將忽略 {count, plural, other {# 則推播通知請求}}。您將不再能輕易存取{count, plural, other {這些}}推播通知。您確定要繼續?", - "notification_requests.confirm_dismiss_all.title": "忽略推播通知請求?", + "notification_requests.accept_multiple": "{count, plural, other {接受 # 則請求...}}", + "notification_requests.confirm_accept_multiple.button": "{count, plural, other {接受請求}}", + "notification_requests.confirm_accept_multiple.message": "您將接受 {count, plural, other {# 則推播通知請求}}。您確定要繼續?", + "notification_requests.confirm_accept_multiple.title": "接受推播通知請求?", + "notification_requests.confirm_dismiss_multiple.button": "{count, plural, other {忽略請求}}", + "notification_requests.confirm_dismiss_multiple.message": "您將忽略 {count, plural, other {# 則推播通知請求}}。您將不再能輕易存取{count, plural, other {這些}}推播通知。您確定要繼續?", + "notification_requests.confirm_dismiss_multiple.title": "忽略推播通知請求?", "notification_requests.dismiss": "關閉", - "notification_requests.dismiss_all": "全部忽略", - "notification_requests.dismiss_multiple": "{count, plural, other {忽略 # 則請求}}", - "notification_requests.enter_selection_mode": "選擇", - "notification_requests.exit_selection_mode": "取消", + "notification_requests.dismiss_multiple": "{count, plural, other {忽略 # 則請求...}}", + "notification_requests.edit_selection": "編輯", + "notification_requests.exit_selection": "完成", "notification_requests.explainer_for_limited_account": "由於此帳號已被管理員限制,來自此帳號之通知已被過濾。", "notification_requests.explainer_for_limited_remote_account": "由於此帳號或其伺服器已被管理員限制,來自此帳號之通知已被過濾。", "notification_requests.maximize": "最大化", diff --git a/config/locales/be.yml b/config/locales/be.yml index 81804ffc32..3d4c10cbb8 100644 --- a/config/locales/be.yml +++ b/config/locales/be.yml @@ -35,6 +35,7 @@ be: created_msg: Нататка мадэратара паспяхова створана! destroyed_msg: Нататка мадэратара паспяхова выдалена! accounts: + add_email_domain_block: Заблакіраваць дамен эл. пошты approve: Пацвердзіць approved_msg: Заяўка на рэгістрацыю %{username} ухваленая are_you_sure: Вы ўпэўнены? @@ -135,6 +136,7 @@ be: resubscribe: Аднавіць падпіску role: Роля search: Пошук + search_same_email_domain: Іншыя карыстальнікі з такім жа даменам эл. пошты search_same_ip: Іншыя карыстальнікі з гэтым IP security: Бяспека security_measures: @@ -175,21 +177,26 @@ be: approve_appeal: Ухваліць абскарджанне approve_user: Зацвердзіць карыстальніка assigned_to_self_report: Прызначыць скаргу + change_email_user: Змяніць эл. пошту карыстальніка change_role_user: Змяніць ролю карыстальніка confirm_user: Пацвердзіць карыстальніка create_account_warning: Стварыць папярэджанне create_announcement: Стварыць аб'яву + create_canonical_email_block: Стварыць блакіроўку электроннай пошты create_custom_emoji: Стварыць адвольны эмодзі create_domain_allow: Стварыць даменны дазвол create_domain_block: Стварыць даменны блок + create_email_domain_block: Стварыць даменны блок электроннай пошты create_ip_block: Стварыць IP правіла create_unavailable_domain: Стварыць недаступны Дамен create_user_role: Стварыць ролю demote_user: Панізіць карыстальніка destroy_announcement: Выдаліць аб'яву + destroy_canonical_email_block: Выдаліць блакіроўку электроннай пошты destroy_custom_emoji: Выдаліць адвольны эмодзі destroy_domain_allow: Выдаліць дамены дазвол destroy_domain_block: Выдаліць даменны блок + destroy_email_domain_block: Выдаліць даменны блок электроннай пошты destroy_instance: Вычысціць дамен destroy_ip_block: Выдаліць IP правіла destroy_status: Выдаліць допіс @@ -197,8 +204,10 @@ be: destroy_user_role: Выдаліць ролю disable_2fa_user: Адключыць двухэтапнае спраўджанне disable_custom_emoji: Адключыць адвольныя эмодзі + disable_sign_in_token_auth_user: Адключыць аўтарызацыю праз электронную пошту для карыстальніка disable_user: Адключыць карыстальніка enable_custom_emoji: Уключыць адвольныя эмодзі + enable_sign_in_token_auth_user: Уключыць аўтарызацыю праз электронную пошту для карыстальніка enable_user: Уключыць карыстальніка memorialize_account: Запомніць уліковы запіс promote_user: Павысіць правы Карыстальніка @@ -228,20 +237,26 @@ be: approve_appeal_html: Карыстальнік %{name} ухваліў запыт на мадэрацыю %{target} approve_user_html: "%{name} пацвердзіў рэгістрацыю ад %{target}" assigned_to_self_report_html: "%{name} прызначыў справаздачу %{target} на сябе\n" + change_email_user_html: "%{name} змяніў паштовы адрас карыстальніка %{target}" change_role_user_html: "%{name} змяніў ролю %{target}" + confirm_user_html: "%{name} пацвердзіў паштовы адрас %{target}" create_account_warning_html: "%{name} накіраваў папярэджанне %{target}" create_announcement_html: "%{name} зрабіў новую аб'яву %{target}" + create_canonical_email_block_html: "%{name} заблакіраваў эл. пошту з хэшам %{target}" create_custom_emoji_html: "%{name} загрузіў новы смайлік %{target}\n\n" create_domain_allow_html: "%{name} дазволіў федэрацыю з даменам %{target}" create_domain_block_html: "%{name} заблакіраваў дамен %{target}" + create_email_domain_block_html: "%{name} заблакіраваў дамен эл. пошты %{target}" create_ip_block_html: "%{name} стварыў правіла для IP %{target}" create_unavailable_domain_html: "%{name} прыпыніў дастаўку да дамена %{target}" create_user_role_html: "%{name} зрабіў ролю %{target}" demote_user_html: "%{name} прыбраў карыстальніка %{target}" destroy_announcement_html: "%{name} выдаліў аб'яву %{target}" + destroy_canonical_email_block_html: "%{name} разблакіраваў эл. пошту з хэшам %{target}" destroy_custom_emoji_html: "%{name} выдаліў(а) эмоджі %{target}" destroy_domain_allow_html: "%{name} зняў дазвол на аб'яднанне з даменам %{target}\n" destroy_domain_block_html: "%{name} разблакаваў дамен %{target}" + destroy_email_domain_block_html: "%{name} разблакіраваў дамен эл. пошты %{target}" destroy_instance_html: "%{name} цалкам прыбраў дамен %{target}" destroy_ip_block_html: "%{name} выдаліў правіла для IP %{target}" destroy_status_html: "%{name} выдаліў допіс %{target}" @@ -249,8 +264,10 @@ be: destroy_user_role_html: "%{name} выдаліў ролю %{target}" disable_2fa_user_html: "%{name} амяніў абавязковую двухфактарную верыфікацыю для карыстальніка %{target}" disable_custom_emoji_html: "%{name} заблакіраваў эмодзі %{target}" + disable_sign_in_token_auth_user_html: "%{name} адключыў уваход праз эл. пошту для %{target}" disable_user_html: "%{name} адключыў уваход для карыстальніка %{target}" enable_custom_emoji_html: "%{name} уключыў эмодзі %{target}" + enable_sign_in_token_auth_user_html: "%{name} уключыў уваход праз эл. пошту для %{target}" enable_user_html: "%{name} уключыў уваход для карыстальніка %{target}" memorialize_account_html: Карыстальнік %{name} пераключыў уліковы запіс %{target} у старонку памяці promote_user_html: "%{name} павысіў карыстальніка %{target}" @@ -258,6 +275,7 @@ be: reject_user_html: "%{name} адхіліў рэгістрацыю з %{target}" remove_avatar_user_html: "%{name} выдаліў аватар %{target}" reopen_report_html: "%{name} зноў адкрыў скаргу %{target}" + resend_user_html: "%{name} зноў адправіў ліст з пацвярджэннем для %{target}" reset_password_user_html: "%{name} скінул(а) пароль для %{target}" resolve_report_html: "%{name} вырашыў скаргу %{target}" sensitive_account_html: "%{name} адзначыў медыя %{target} як далікатнае" @@ -428,6 +446,7 @@ be: many: "%{count} спроб рэгіістрацыі за апошні тыдзень" one: "%{count} спроба рэгістрацыі за апошні тыдзень" other: "%{count} спроб рэгіістрацыі за апошні тыдзень" + created_msg: Дамен эл. пошты паспяхова заблакіраваны delete: Выдаліць dns: types: @@ -436,8 +455,11 @@ be: new: create: Дадаць дамен resolve: Вызначыць дамен + title: Заблакіраваць новы дамен эл. пошты not_permitted: Забаронена + resolved_dns_records_hint_html: Даменнае імя ператвараецца ў наступныя дамены MX, якія ў канчатковым выніку адказваюць за прыём электроннай пошты. Блакаванне дамена MX заблакуе рэгістрацыю з любога адраса электроннай пошты, які выкарыстоўвае той жа дамен MX, нават калі бачнае імя дамена адрозніваецца. Будзьце асцярожныя, каб не заблакіраваць асноўных пастаўшчыкоў электроннай пошты. resolved_through_html: Вызначына каля %{domain} + title: Заблакіраваныя паштовыя дамены export_domain_allows: new: title: Імпарт дазволаў дамена @@ -599,6 +621,7 @@ be: resolve_description_html: Ніякіх дзеянняў супраць уліковага запісу, пра які паведамляецца, не будзе, папярэджэнне не зафіксавана, і скарга будзе закрыта. silence_description_html: Уліковы запіс будзе бачны толькі тым, хто ўжо сочыць за ім або шукае яго ўручную, што значна абмяжоўвае яго ахоп. Заўсёды можна вярнуць. Закрывае ўсе скаргі на гэты ўліковы запіс. suspend_description_html: Уліковы запіс і ўсё яго змесціва будзе недаступна і ў далейшым выдалены, узаемадзеянне з ім будзе немагчыма. Магчыма адмяніць на працягу 30 дзён. Закрывае ўсе скаргі на гэты ўліковы запіс. + actions_description_html: Вырашыце, якія дзеянні распачаць, каб вырашыць гэтую скаргу. Калі вы прымеце меры пакарання ў дачыненні да ўліковага запісу, пра які паведамляецца, ім будзе адпраўлена апавяшчэнне па электроннай пошце, за выключэннем выпадкаў, калі выбрана катэгорыя Спам. actions_description_remote_html: Вырашыце як паступіць з гэтай скаргай. Гэта паўплывае толькі на тое як ваш сервер звязваецца з аддалёным уліковым запісам і апрацоўвае яго кантэнт. add_to_report: Дадаць яшчэ дэталяў да скаргі already_suspended_badges: @@ -663,6 +686,7 @@ be: delete_data_html: Выдаліць профіль @%{acct} і змесціва праз 30 дзён, калі тым часам гэтае дзеянне не будзе адменена preview_preamble_html: "@%{acct} атрымае папярэджанне наступнага зместу:" record_strike_html: Зарэгістраваць папярэджанне @%{acct}, каб дапамагчы вам эскаліраваць наступныя парушэнні з боку таго ж уліковага запісу + send_email_html: Адправіць @%{acct} папярэджанне па электроннай пошце warning_placeholder: Неабавязковае дадатковае абгрунтаванне мадэрацыі. target_origin: Крыніца уліковага запісу на які пададзена скарга title: Скаргі @@ -706,6 +730,7 @@ be: manage_appeals: Кіраванне апеляцыямі manage_appeals_description: Дазваляе карыстальнікам разглядаць апеляцыі на дзеянні мадэратара manage_blocks: Кіраванне блакіроўкамі + manage_blocks_description: Дазваляе блакаваць пэўныя паштовыя правайдэры і IP адрасы manage_custom_emojis: Кіраванне адвольнымі эмодзі manage_custom_emojis_description: Дазваляе кіраваць адвольнымі эмодзі на серверы manage_federation: Кіраваць федэрацыяй @@ -723,6 +748,7 @@ be: manage_taxonomies: Кіраванне катэгорыямі manage_taxonomies_description: Дазваляе карыстальнікам праглядаць папулярны кантэнт і абнаўляць налады хэштэгаў manage_user_access: Кіраванне наладамі доступу карыстальнікаў + manage_user_access_description: Дазваляе адключаць двухфактарную аўтэнтыфікацыю іншым карыстальнікам, змяняць іх паштовы адрас і скідваць пароль manage_users: Кіраванне карыстальнікамі manage_users_description: Дазваляе праглядаць звесткі іншых карыстальнікаў і іх мадэрацыю manage_webhooks: Кіраванне вэбхукамі @@ -797,6 +823,7 @@ be: destroyed_msg: Загрузка сайту паспяхова выдалена! software_updates: critical_update: Крытычна - зрабіце абнаўленне як мага хутчэй + description: Рэкамендуецца падтрымліваць усталёўку Mastodon у актуальным стане, каб карыстацца апошнімі выпраўленнямі і магчымасцямі. Акрамя таго, часам вельмі важна своечасова абнаўляць Mastodon, каб пазбегнуць праблем з бяспекай. Па гэтых прычынах Mastodon правярае наяўнасць абнаўленняў кожныя 30 хвілін і паведамляе вам пра гэта ў адпаведнасці з вашымі наладамі апавяшчэнняў па электроннай пошце. documentation_link: Даведацца больш release_notes: Журнал змен title: Даступныя абнаўленні @@ -970,6 +997,7 @@ be: many: Выкарысталі %{count} чалавек за апошні тыдзень one: Выкарыстаў адзін чалавек за апошні тыдзень other: Выкарысталі %{count} чалавек за апошні тыдзень + title: Рэкамендацыі і трэнды trending: Папулярныя warning_presets: add_new: Дадаць новы @@ -1056,7 +1084,9 @@ be: guide_link_text: Кожны і кожная можа зрабіць унёсак. sensitive_content: Далікатны змест application_mailer: + notification_preferences: Змяніць налады эл. пошты salutation: "%{name}," + settings: 'Змяніць налады эл. пошты: %{link}' unsubscribe: Адпісацца view: 'Паглядзець:' view_profile: Паглядзець профіль @@ -1076,6 +1106,7 @@ be: hint_html: Засталася яшчэ адна рэч! Каб не дапусціць спаму, нам трэба пацвердзіць, што вы чалавек. Разгадайце CAPTCHA ніжэй і націсніце «Працягнуць». title: Праверка бяспекі confirmations: + awaiting_review: Ваш электронны адрас пацверджаны! Адміністрацыя %{domain} зараз разглядае вашу рэгістрацыю. Вы атрымаеце паведамленне па электроннай пошце, калі ваш уліковы запіс будзе ўхвалены! awaiting_review_title: Ваша рэгістрацыя разглядаецца clicking_this_link: націснуць на гэту спасылку login_link: увайсці @@ -1083,6 +1114,7 @@ be: redirect_to_app_html: Вы павінны былі быць перанакіраваны ў праграму %{app_name}. Калі гэтага не адбылося, паспрабуйце %{clicking_this_link} або вярніцеся да праграмы ўручную. registration_complete: Ваша рэгістрацыя на %{domain} завершана! welcome_title: Вітаем, %{name}! + wrong_email_hint: Калі гэты адрас электроннай пошты памылковы, вы можаце змяніць яго ў наладах уліковага запісу. delete_account: Выдаліць уліковы запіс delete_account_html: Калі вы жадаеце выдаліць ваш уліковы запіс, можаце працягнуць тут. Ад вас будзе запатрабавана пацвярджэнне. description: @@ -1103,6 +1135,7 @@ be: or_log_in_with: Або ўвайсці з дапамогай privacy_policy_agreement_html: Я азнаёміўся і пагаджаюся з палітыкай канфідэнцыйнасці progress: + confirm: Пацвердзіць email details: Вашы дадзеныя review: Наш водгук rules: Прыняць правілы @@ -1124,8 +1157,10 @@ be: security: Бяспека set_new_password: Прызначыць новы пароль setup: + email_below_hint_html: Праверце папку са спамам або зрабіце новы запыт. Вы можаце выправіць свой email, калі ён няправільны. email_settings_hint_html: Націсніце на спасылку, якую мы адправілі, каб спраўдзіць %{email}. Мы вас пачакаем тут. link_not_received: Не атрымалі спасылку? + new_confirmation_instructions_sent: Праз некалькі хвілін вы атрымаеце новы ліст на email са спасылкай для пацверджання! title: Праверце вашу пошту sign_in: preamble_html: Уваход з уліковымі дадзенымі %{domain}. Калі ваш уліковы запіс знаходзіцца на іншым серверы, у вас не атрымаецца ўвайсці тут. @@ -1136,7 +1171,9 @@ be: title: Наладзьма вас на %{domain}. status: account_status: Стан уліковага запісу + confirming: Чакаецца пацвярджэнне з электроннай пошты. functional: Ваш уліковы запіс поўнасцю працуе. + pending: Ваша заяўка разглядаецца нашым супрацоўнікам. Гэта можа заняць некаторы час. Вы атрымаеце электронны ліст, калі заяўка будзе ўхвалена. redirecting_to: Ваш уліковы запіс неактыўны, бо ў цяперашні час ён перанакіроўваецца на %{acct}. self_destruct: Паколькі %{domain} зачыняецца, вы атрымаеце толькі абмежаваны доступ да свайго уліковага запісу. view_strikes: Праглядзець мінулыя папярэджанні для вашага ўліковага запісу @@ -1179,6 +1216,9 @@ be: before: 'Перш чым працягнуць, уважліва прачытайце гэтыя заўвагі:' caches: Змесціва, кэшаванае іншымі серверамі, можа захавацца data_removal: Вашы допісы і іншыя даныя будуць выдалены назаўсёды + email_change_html: Вы можаце змяніць свой адрас электроннай пошты, не выдаляючы ўліковы запіс + email_contact_html: Калі ліст усё яшчэ не дайшоў, вы можаце звярнуцца па дапамогу на эл. пошту %{email} + email_reconfirmation_html: Калі вы не атрымалі пацвярджэнне па электроннай пошце, вы можаце запытаць яго зноў irreversible: Вы не зможаце аднавіць або паўторна актываваць свой уліковы запіс more_details_html: Падрабязнасці глядзіце ў палітыцы прыватнасці. username_available: Ваша імя карыстальніка зноў стане даступным @@ -1427,6 +1467,7 @@ be: authentication_methods: otp: праграма двухфактарнай аўтэнтыфікацыі password: пароль + sign_in_token: код з электроннай пошты webauthn: ключы бяспекі description_html: Калі вы бачыце невядомую вам актыўнасць, падумайце пра змену пароля і ўключэнне двухфактарнай аўтэнтыфікацыі. empty: Няма гісторыі ўваходаў @@ -1437,6 +1478,16 @@ be: unsubscribe: action: Так, адпісацца complete: Адпісаны + confirmation_html: Вы ўпэўнены, што жадаеце адмовіцца ад %{type} з Mastodon на дамене %{domain} на вашу электронную пошту %{email}? Вы заўсёды можаце паўторна падпісацца у наладах апавяшчэнняў па электроннай пошце. + emails: + notification_emails: + favourite: апавяшчэнні на пошту пра упадабанае + follow: апавяшчэнні на пошту пра падпіскі + follow_request: апавяшчэнні на пошту пра запыты на падпіску + mention: апавяшчэнні на пошту пра згадванні + reblog: апавяшчэнні на пошту пра пашырэнні + resubscribe_html: Калі вы адмовіліся ад падпіскі памылкова, вы можаце зноў падпісацца ў наладах апавяшчэнняў па электроннай пошце. + success_html: Вы больш не будзеце атрымліваць %{type} на сваю электронную пошту %{email} ад Mastodon на дамене %{domain}. title: Адпісацца media_attachments: validations: @@ -1517,6 +1568,8 @@ be: update: subject: "%{name} адрэдагаваў допіс" notifications: + administration_emails: Апавяшчэнні эл. пошты для адміністратара + email_events: Падзеі для апавяшчэнняў эл. пошты email_events_hint: 'Выберыце падзеі, аб якіх вы хочаце атрымліваць апавяшчэнні:' number: human: @@ -1675,6 +1728,7 @@ be: import: Імпарт import_and_export: Імпарт і экспарт migrate: Перамяшчэнне ўліковага запісу + notifications: Апавяшчэнні па эл. пошце preferences: Налады profile: Профіль relationships: Падпіскі і падпісчыкі @@ -1935,6 +1989,7 @@ be: invalid_otp_token: Няправільны код двухфактарнай аўтэнтыфікацыі otp_lost_help_html: Калі вы страцілі доступ да абодвух, вы можаце скарыстацца %{email} rate_limited: Занадта шмат спробаў аўтэнтыфікацыі, паспрабуйце пазней. + seamless_external_login: Вы ўвайшлі праз знешні сэрвіс, таму налады пароля і эл. пошты недаступныя. signed_in_as: 'Увайшлі як:' verification: extra_instructions_html: Парада: спасылка на вашым сайце можа быць нябачнай. Важнай часткай з'яўляецца rel="me", якая прадухіляе імперсанацыю на сайтах з карыстальніцкім кантэнтам. Вы нават можаце выкарыстоўваць тэг link у загалоўку старонкі замест a, але HTML павінен быць даступны без выканання JavaScript. From 71405eabfca60776b0351b022e61248861cce971 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 20 Aug 2024 07:48:15 -0400 Subject: [PATCH 21/77] Use material symbols in table link helper (#31359) --- app/helpers/admin/filter_helper.rb | 2 +- app/javascript/material-icons/400-24px/key.svg | 1 + app/javascript/material-icons/400-24px/toggle_off.svg | 5 +++++ app/javascript/material-icons/400-24px/toggle_on.svg | 5 +++++ app/views/admin/accounts/_local_account.html.haml | 10 +++++----- app/views/admin/accounts/_remote_account.html.haml | 2 +- app/views/admin/announcements/_announcement.html.haml | 6 +++--- app/views/admin/invites/_invite.html.haml | 2 +- app/views/admin/relays/_relay.html.haml | 6 +++--- app/views/admin/report_notes/_report_note.html.haml | 4 ++-- app/views/admin/reports/_header_details.html.haml | 4 ++-- app/views/admin/roles/_role.html.haml | 2 +- app/views/admin/rules/_rule.html.haml | 2 +- .../admin/warning_presets/_warning_preset.html.haml | 2 +- app/views/admin/webhooks/_webhook.html.haml | 4 ++-- app/views/admin/webhooks/show.html.haml | 4 ++-- app/views/auth/registrations/_session.html.haml | 2 +- app/views/filters/_filter.html.haml | 4 ++-- app/views/invites/_invite.html.haml | 2 +- .../oauth/authorized_applications/index.html.haml | 2 +- app/views/settings/aliases/index.html.haml | 2 +- app/views/settings/applications/index.html.haml | 2 +- app/views/settings/featured_tags/index.html.haml | 2 +- .../webauthn_credentials/index.html.haml | 2 +- .../two_factor_authentication_methods/index.html.haml | 4 ++-- 25 files changed, 47 insertions(+), 36 deletions(-) create mode 100644 app/javascript/material-icons/400-24px/key.svg create mode 100644 app/javascript/material-icons/400-24px/toggle_off.svg create mode 100644 app/javascript/material-icons/400-24px/toggle_on.svg diff --git a/app/helpers/admin/filter_helper.rb b/app/helpers/admin/filter_helper.rb index 140fc73ede..40806a4515 100644 --- a/app/helpers/admin/filter_helper.rb +++ b/app/helpers/admin/filter_helper.rb @@ -25,7 +25,7 @@ module Admin::FilterHelper end def table_link_to(icon, text, path, **options) - link_to safe_join([fa_icon(icon), text]), path, options.merge(class: 'table-action-link') + link_to safe_join([material_symbol(icon), text]), path, options.merge(class: 'table-action-link') end def selected?(more_params) diff --git a/app/javascript/material-icons/400-24px/key.svg b/app/javascript/material-icons/400-24px/key.svg new file mode 100644 index 0000000000..bba7f1de9d --- /dev/null +++ b/app/javascript/material-icons/400-24px/key.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/toggle_off.svg b/app/javascript/material-icons/400-24px/toggle_off.svg new file mode 100644 index 0000000000..dcef49f69c --- /dev/null +++ b/app/javascript/material-icons/400-24px/toggle_off.svg @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/toggle_on.svg b/app/javascript/material-icons/400-24px/toggle_on.svg new file mode 100644 index 0000000000..943b6e6d33 --- /dev/null +++ b/app/javascript/material-icons/400-24px/toggle_on.svg @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/app/views/admin/accounts/_local_account.html.haml b/app/views/admin/accounts/_local_account.html.haml index 3ed392cd1a..3ad47d8dfb 100644 --- a/app/views/admin/accounts/_local_account.html.haml +++ b/app/views/admin/accounts/_local_account.html.haml @@ -1,12 +1,12 @@ - if account.avatar? %tr %th= t('admin.accounts.avatar') - %td= table_link_to 'trash', t('admin.accounts.remove_avatar'), remove_avatar_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:remove_avatar, account) + %td= table_link_to 'delete', t('admin.accounts.remove_avatar'), remove_avatar_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:remove_avatar, account) %td - if account.header? %tr %th= t('admin.accounts.header') - %td= table_link_to 'trash', t('admin.accounts.remove_header'), remove_header_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:remove_header, account) + %td= table_link_to 'delete', t('admin.accounts.remove_header'), remove_header_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:remove_header, account) %td %tr %th= t('admin.accounts.role') @@ -16,7 +16,7 @@ - else = account.user_role&.name %td - = table_link_to 'vcard', t('admin.accounts.change_role.label'), admin_user_role_path(account.user) if can?(:change_role, account.user) + = table_link_to 'contact_mail', t('admin.accounts.change_role.label'), admin_user_role_path(account.user) if can?(:change_role, account.user) %tr %th{ rowspan: can?(:create, :email_domain_block) ? 3 : 2 }= t('admin.accounts.email') %td{ rowspan: can?(:create, :email_domain_block) ? 3 : 2 }= account.user_email @@ -25,7 +25,7 @@ %td= table_link_to 'search', t('admin.accounts.search_same_email_domain'), admin_accounts_path(email: "%@#{account.user_email.split('@').last}") - if can?(:create, :email_domain_block) %tr - %td= table_link_to 'ban', t('admin.accounts.add_email_domain_block'), new_admin_email_domain_block_path(_domain: account.user_email.split('@').last) + %td= table_link_to 'hide_source', t('admin.accounts.add_email_domain_block'), new_admin_email_domain_block_path(_domain: account.user_email.split('@').last) - if account.user_unconfirmed_email.present? %tr %th= t('admin.accounts.unconfirmed_email') @@ -48,7 +48,7 @@ = t 'admin.accounts.security_measures.only_password' %td - if account.user&.two_factor_enabled? && can?(:disable_2fa, account.user) - = table_link_to 'unlock', t('admin.accounts.disable_two_factor_authentication'), admin_user_two_factor_authentication_path(account.user.id), method: :delete + = table_link_to 'lock_open', t('admin.accounts.disable_two_factor_authentication'), admin_user_two_factor_authentication_path(account.user.id), method: :delete - if can?(:reset_password, account.user) %tr %td diff --git a/app/views/admin/accounts/_remote_account.html.haml b/app/views/admin/accounts/_remote_account.html.haml index 6755af2496..a052e877f4 100644 --- a/app/views/admin/accounts/_remote_account.html.haml +++ b/app/views/admin/accounts/_remote_account.html.haml @@ -12,4 +12,4 @@ = material_symbol DeliveryFailureTracker.available?(account.shared_inbox_url) ? 'check' : 'close' %td - if domain_block.nil? - = table_link_to 'ban', t('admin.domain_blocks.add_new'), new_admin_domain_block_path(_domain: account.domain) + = table_link_to 'hide_source', t('admin.domain_blocks.add_new'), new_admin_domain_block_path(_domain: account.domain) diff --git a/app/views/admin/announcements/_announcement.html.haml b/app/views/admin/announcements/_announcement.html.haml index 1c7f89ef21..eac78efb28 100644 --- a/app/views/admin/announcements/_announcement.html.haml +++ b/app/views/admin/announcements/_announcement.html.haml @@ -12,8 +12,8 @@ %div - if can?(:update, announcement) - if announcement.published? - = table_link_to 'toggle-off', t('admin.announcements.unpublish'), unpublish_admin_announcement_path(announcement), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } + = table_link_to 'toggle_off', t('admin.announcements.unpublish'), unpublish_admin_announcement_path(announcement), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } - else - = table_link_to 'toggle-on', t('admin.announcements.publish'), publish_admin_announcement_path(announcement), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } + = table_link_to 'toggle_on', t('admin.announcements.publish'), publish_admin_announcement_path(announcement), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } - = table_link_to 'trash', t('generic.delete'), admin_announcement_path(announcement), method: :delete, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:destroy, announcement) + = table_link_to 'delete', t('generic.delete'), admin_announcement_path(announcement), method: :delete, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:destroy, announcement) diff --git a/app/views/admin/invites/_invite.html.haml b/app/views/admin/invites/_invite.html.haml index f9cd6003f3..8bd5f10fee 100644 --- a/app/views/admin/invites/_invite.html.haml +++ b/app/views/admin/invites/_invite.html.haml @@ -27,4 +27,4 @@ %td - if invite.valid_for_use? && policy(invite).destroy? - = table_link_to 'times', t('invites.delete'), admin_invite_path(invite), method: :delete + = table_link_to 'close', t('invites.delete'), admin_invite_path(invite), method: :delete diff --git a/app/views/admin/relays/_relay.html.haml b/app/views/admin/relays/_relay.html.haml index 2e76f54308..9e9f629eee 100644 --- a/app/views/admin/relays/_relay.html.haml +++ b/app/views/admin/relays/_relay.html.haml @@ -18,8 +18,8 @@ = t 'admin.relays.disabled' %td - if relay.accepted? - = table_link_to 'power-off', t('admin.relays.disable'), disable_admin_relay_path(relay), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } + = table_link_to 'power_off', t('admin.relays.disable'), disable_admin_relay_path(relay), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } - elsif !relay.pending? - = table_link_to 'power-off', t('admin.relays.enable'), enable_admin_relay_path(relay), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } + = table_link_to 'power_off', t('admin.relays.enable'), enable_admin_relay_path(relay), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } - = table_link_to 'times', t('admin.relays.delete'), admin_relay_path(relay), method: :delete, data: { confirm: t('admin.accounts.are_you_sure') } + = table_link_to 'close', t('admin.relays.delete'), admin_relay_path(relay), method: :delete, data: { confirm: t('admin.accounts.are_you_sure') } diff --git a/app/views/admin/report_notes/_report_note.html.haml b/app/views/admin/report_notes/_report_note.html.haml index 64628989a6..dd60f7eabd 100644 --- a/app/views/admin/report_notes/_report_note.html.haml +++ b/app/views/admin/report_notes/_report_note.html.haml @@ -13,6 +13,6 @@ - if can?(:destroy, report_note) .report-notes__item__actions - if report_note.is_a?(AccountModerationNote) - = table_link_to 'trash', t('admin.reports.notes.delete'), admin_account_moderation_note_path(report_note), method: :delete + = table_link_to 'delete', t('admin.reports.notes.delete'), admin_account_moderation_note_path(report_note), method: :delete - else - = table_link_to 'trash', t('admin.reports.notes.delete'), admin_report_note_path(report_note), method: :delete + = table_link_to 'delete', t('admin.reports.notes.delete'), admin_report_note_path(report_note), method: :delete diff --git a/app/views/admin/reports/_header_details.html.haml b/app/views/admin/reports/_header_details.html.haml index 434231f733..cf81670845 100644 --- a/app/views/admin/reports/_header_details.html.haml +++ b/app/views/admin/reports/_header_details.html.haml @@ -54,6 +54,6 @@ = admin_account_link_to report.assigned_account — - if report.assigned_account != current_user.account - = table_link_to 'user', t('admin.reports.assign_to_self'), assign_to_self_admin_report_path(report), method: :post + = table_link_to 'person', t('admin.reports.assign_to_self'), assign_to_self_admin_report_path(report), method: :post - elsif !report.assigned_account.nil? - = table_link_to 'trash', t('admin.reports.unassign'), unassign_admin_report_path(report), method: :post + = table_link_to 'delete', t('admin.reports.unassign'), unassign_admin_report_path(report), method: :post diff --git a/app/views/admin/roles/_role.html.haml b/app/views/admin/roles/_role.html.haml index fd37644c83..636127354b 100644 --- a/app/views/admin/roles/_role.html.haml +++ b/app/views/admin/roles/_role.html.haml @@ -27,4 +27,4 @@ · %abbr{ title: role.permissions_as_keys.map { |privilege| I18n.t("admin.roles.privileges.#{privilege}") }.join(', ') }= t('admin.roles.permissions_count', count: role.permissions_as_keys.size) %div - = table_link_to 'pencil', t('admin.accounts.edit'), edit_admin_role_path(role) if can?(:update, role) + = table_link_to 'edit', t('admin.accounts.edit'), edit_admin_role_path(role) if can?(:update, role) diff --git a/app/views/admin/rules/_rule.html.haml b/app/views/admin/rules/_rule.html.haml index 5f37f69354..eb97eefb3c 100644 --- a/app/views/admin/rules/_rule.html.haml +++ b/app/views/admin/rules/_rule.html.haml @@ -8,4 +8,4 @@ = rule.hint %div - = table_link_to 'trash', t('admin.rules.delete'), admin_rule_path(rule), method: :delete, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:destroy, rule) + = table_link_to 'delete', t('admin.rules.delete'), admin_rule_path(rule), method: :delete, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:destroy, rule) diff --git a/app/views/admin/warning_presets/_warning_preset.html.haml b/app/views/admin/warning_presets/_warning_preset.html.haml index a58199c804..2cc056420f 100644 --- a/app/views/admin/warning_presets/_warning_preset.html.haml +++ b/app/views/admin/warning_presets/_warning_preset.html.haml @@ -7,4 +7,4 @@ = truncate(warning_preset.text) %div - = table_link_to 'trash', t('admin.warning_presets.delete'), admin_warning_preset_path(warning_preset), method: :delete, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:destroy, warning_preset) + = table_link_to 'delete', t('admin.warning_presets.delete'), admin_warning_preset_path(warning_preset), method: :delete, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:destroy, warning_preset) diff --git a/app/views/admin/webhooks/_webhook.html.haml b/app/views/admin/webhooks/_webhook.html.haml index 39abb7dd2c..dca5abeb77 100644 --- a/app/views/admin/webhooks/_webhook.html.haml +++ b/app/views/admin/webhooks/_webhook.html.haml @@ -15,5 +15,5 @@ %abbr{ title: webhook.events.join(', ') }= t('admin.webhooks.enabled_events', count: webhook.events.size) %div - = table_link_to 'pencil', t('admin.webhooks.edit'), edit_admin_webhook_path(webhook) if can?(:update, webhook) - = table_link_to 'trash', t('admin.webhooks.delete'), admin_webhook_path(webhook), method: :delete, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:destroy, webhook) + = table_link_to 'edit', t('admin.webhooks.edit'), edit_admin_webhook_path(webhook) if can?(:update, webhook) + = table_link_to 'delete', t('admin.webhooks.delete'), admin_webhook_path(webhook), method: :delete, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:destroy, webhook) diff --git a/app/views/admin/webhooks/show.html.haml b/app/views/admin/webhooks/show.html.haml index c2c4f55788..a389e61102 100644 --- a/app/views/admin/webhooks/show.html.haml +++ b/app/views/admin/webhooks/show.html.haml @@ -19,10 +19,10 @@ %td - if @webhook.enabled? %span.positive-hint= t('admin.webhooks.enabled') - = table_link_to 'power-off', t('admin.webhooks.disable'), disable_admin_webhook_path(@webhook), method: :post if can?(:disable, @webhook) + = table_link_to 'power_off', t('admin.webhooks.disable'), disable_admin_webhook_path(@webhook), method: :post if can?(:disable, @webhook) - else %span.negative-hint= t('admin.webhooks.disabled') - = table_link_to 'power-off', t('admin.webhooks.enable'), enable_admin_webhook_path(@webhook), method: :post if can?(:enable, @webhook) + = table_link_to 'power_off', t('admin.webhooks.enable'), enable_admin_webhook_path(@webhook), method: :post if can?(:enable, @webhook) %tr %th= t('admin.webhooks.events') %td diff --git a/app/views/auth/registrations/_session.html.haml b/app/views/auth/registrations/_session.html.haml index 2fa7db70c7..631ae04601 100644 --- a/app/views/auth/registrations/_session.html.haml +++ b/app/views/auth/registrations/_session.html.haml @@ -15,4 +15,4 @@ %time.time-ago{ datetime: session.updated_at.iso8601, title: l(session.updated_at) }= l(session.updated_at) %td - if current_session.session_id != session.session_id && !current_account.suspended? - = table_link_to 'times', t('sessions.revoke'), settings_session_path(session), method: :delete + = table_link_to 'close', t('sessions.revoke'), settings_session_path(session), method: :delete diff --git a/app/views/filters/_filter.html.haml b/app/views/filters/_filter.html.haml index 9993ad2ee8..9d82a979fe 100644 --- a/app/views/filters/_filter.html.haml +++ b/app/views/filters/_filter.html.haml @@ -37,5 +37,5 @@ = t('filters.index.contexts', contexts: filter.context.map { |context| I18n.t("filters.contexts.#{context}") }.join(', ')) %div - = table_link_to 'pencil', t('filters.edit.title'), edit_filter_path(filter) - = table_link_to 'times', t('filters.index.delete'), filter_path(filter), method: :delete, data: { confirm: t('admin.accounts.are_you_sure') } + = table_link_to 'edit', t('filters.edit.title'), edit_filter_path(filter) + = table_link_to 'close', t('filters.index.delete'), filter_path(filter), method: :delete, data: { confirm: t('admin.accounts.are_you_sure') } diff --git a/app/views/invites/_invite.html.haml b/app/views/invites/_invite.html.haml index 62799ca5be..d332dc5a4d 100644 --- a/app/views/invites/_invite.html.haml +++ b/app/views/invites/_invite.html.haml @@ -22,4 +22,4 @@ %td - if invite.valid_for_use? && policy(invite).destroy? - = table_link_to 'times', t('invites.delete'), invite_path(invite), method: :delete + = table_link_to 'close', t('invites.delete'), invite_path(invite), method: :delete diff --git a/app/views/oauth/authorized_applications/index.html.haml b/app/views/oauth/authorized_applications/index.html.haml index 92e24d30c8..009bbf8d85 100644 --- a/app/views/oauth/authorized_applications/index.html.haml +++ b/app/views/oauth/authorized_applications/index.html.haml @@ -29,7 +29,7 @@ - unless application.superapp? || current_account.unavailable? %div - = table_link_to 'times', t('doorkeeper.authorized_applications.buttons.revoke'), oauth_authorized_application_path(application), method: :delete, data: { confirm: t('doorkeeper.authorized_applications.confirmations.revoke') } + = table_link_to 'close', t('doorkeeper.authorized_applications.buttons.revoke'), oauth_authorized_application_path(application), method: :delete, data: { confirm: t('doorkeeper.authorized_applications.confirmations.revoke') } .announcements-list__item__permissions %ul.permissions-list diff --git a/app/views/settings/aliases/index.html.haml b/app/views/settings/aliases/index.html.haml index c618a82f1d..81c49c8203 100644 --- a/app/views/settings/aliases/index.html.haml +++ b/app/views/settings/aliases/index.html.haml @@ -30,4 +30,4 @@ - @aliases.each do |account_alias| %tr %td= account_alias.pretty_acct - %td= table_link_to 'trash', t('aliases.remove'), settings_alias_path(account_alias), data: { method: :delete } + %td= table_link_to 'delete', t('aliases.remove'), settings_alias_path(account_alias), data: { method: :delete } diff --git a/app/views/settings/applications/index.html.haml b/app/views/settings/applications/index.html.haml index 5c31d56bca..80eaed5c39 100644 --- a/app/views/settings/applications/index.html.haml +++ b/app/views/settings/applications/index.html.haml @@ -20,6 +20,6 @@ %td= link_to application.name, settings_application_path(application) %th= application.scopes %td - = table_link_to 'times', t('doorkeeper.applications.index.delete'), settings_application_path(application), method: :delete, data: { confirm: t('doorkeeper.applications.confirmations.destroy') } + = table_link_to 'close', t('doorkeeper.applications.index.delete'), settings_application_path(application), method: :delete, data: { confirm: t('doorkeeper.applications.confirmations.destroy') } = paginate @applications diff --git a/app/views/settings/featured_tags/index.html.haml b/app/views/settings/featured_tags/index.html.haml index 4b6c019e69..088a93bc59 100644 --- a/app/views/settings/featured_tags/index.html.haml +++ b/app/views/settings/featured_tags/index.html.haml @@ -31,5 +31,5 @@ = t('accounts.nothing_here') - else %time.formatted{ datetime: featured_tag.last_status_at.iso8601, title: l(featured_tag.last_status_at) }= l featured_tag.last_status_at - = table_link_to 'trash', t('filters.index.delete'), settings_featured_tag_path(featured_tag), method: :delete, data: { confirm: t('admin.accounts.are_you_sure') } + = table_link_to 'delete', t('filters.index.delete'), settings_featured_tag_path(featured_tag), method: :delete, data: { confirm: t('admin.accounts.are_you_sure') } .trends__item__current= friendly_number_to_human featured_tag.statuses_count diff --git a/app/views/settings/two_factor_authentication/webauthn_credentials/index.html.haml b/app/views/settings/two_factor_authentication/webauthn_credentials/index.html.haml index 0dfd94ab9d..3ea5810207 100644 --- a/app/views/settings/two_factor_authentication/webauthn_credentials/index.html.haml +++ b/app/views/settings/two_factor_authentication/webauthn_credentials/index.html.haml @@ -9,7 +9,7 @@ %td= credential.nickname %td= t('webauthn_credentials.registered_on', date: l(credential.created_at.to_date, format: :with_month_name)) %td - = table_link_to 'trash', t('webauthn_credentials.delete'), settings_webauthn_credential_path(credential.id), method: :delete, data: { confirm: t('webauthn_credentials.delete_confirmation') } + = table_link_to 'delete', t('webauthn_credentials.delete'), settings_webauthn_credential_path(credential.id), method: :delete, data: { confirm: t('webauthn_credentials.delete_confirmation') } %hr.spacer/ diff --git a/app/views/settings/two_factor_authentication_methods/index.html.haml b/app/views/settings/two_factor_authentication_methods/index.html.haml index 2e4ff4091c..8b670283b9 100644 --- a/app/views/settings/two_factor_authentication_methods/index.html.haml +++ b/app/views/settings/two_factor_authentication_methods/index.html.haml @@ -20,12 +20,12 @@ %tr %td= t('two_factor_authentication.otp') %td - = table_link_to 'pencil', t('two_factor_authentication.edit'), settings_otp_authentication_path, method: :post + = table_link_to 'edit', t('two_factor_authentication.edit'), settings_otp_authentication_path, method: :post %tr %td= t('two_factor_authentication.webauthn') - if current_user.webauthn_enabled? %td - = table_link_to 'pencil', t('two_factor_authentication.edit'), settings_webauthn_credentials_path, method: :get + = table_link_to 'edit', t('two_factor_authentication.edit'), settings_webauthn_credentials_path, method: :get - else %td = table_link_to 'key', t('two_factor_authentication.add'), new_settings_webauthn_credential_path, method: :get From 3be1b1eaaee1e315e4612012f431619b20861107 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 20 Aug 2024 07:52:27 -0400 Subject: [PATCH 22/77] Use material symbol for filters/statuses views (#31371) --- app/views/disputes/strikes/_card.html.haml | 2 +- app/views/filters/statuses/_status_filter.html.haml | 4 ++-- app/views/filters/statuses/index.html.haml | 4 ++-- app/views/statuses/_attachment_list.html.haml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/views/disputes/strikes/_card.html.haml b/app/views/disputes/strikes/_card.html.haml index 55551cc7d0..58965ad600 100644 --- a/app/views/disputes/strikes/_card.html.haml +++ b/app/views/disputes/strikes/_card.html.haml @@ -24,7 +24,7 @@ .emojify= one_line_preview(status) - status.ordered_media_attachments.each do |media_attachment| %abbr{ title: media_attachment.description } - = fa_icon 'link' + = material_symbol 'link' = media_attachment.file_file_name .strike-card__statuses-list__item__meta = link_to ActivityPub::TagManager.instance.url_for(status), target: '_blank', rel: 'noopener noreferrer' do diff --git a/app/views/filters/statuses/_status_filter.html.haml b/app/views/filters/statuses/_status_filter.html.haml index 9999dcda81..31aa9ec237 100644 --- a/app/views/filters/statuses/_status_filter.html.haml +++ b/app/views/filters/statuses/_status_filter.html.haml @@ -15,7 +15,7 @@ - status.ordered_media_attachments.each do |media_attachment| %abbr{ title: media_attachment.description } - = fa_icon 'link' + = material_symbol 'link' = media_attachment.file_file_name .detailed-status__meta @@ -33,5 +33,5 @@ = t("statuses.visibilities.#{status.visibility}") - if status.sensitive? · - = fa_icon('eye-slash fw') + = material_symbol 'visibility_off' = t('stream_entries.sensitive_content') diff --git a/app/views/filters/statuses/index.html.haml b/app/views/filters/statuses/index.html.haml index 915ec59caf..f9f94eee90 100644 --- a/app/views/filters/statuses/index.html.haml +++ b/app/views/filters/statuses/index.html.haml @@ -6,7 +6,7 @@ .filters .back-link = link_to edit_filter_path(@filter) do - = fa_icon 'chevron-left fw' + = material_symbol 'chevron_left' = t('filters.statuses.back_to_filter') %p.hint= t('filters.statuses.index.hint') @@ -25,7 +25,7 @@ = check_box_tag :batch_checkbox_all, nil, false .batch-table__toolbar__actions - unless @status_filters.empty? - = f.button safe_join([fa_icon('times'), t('filters.statuses.batch.remove')]), name: :remove, class: 'table-action-link', type: :submit + = f.button safe_join([material_symbol('close'), t('filters.statuses.batch.remove')]), name: :remove, class: 'table-action-link', type: :submit .batch-table__body - if @status_filters.empty? = nothing_here 'nothing-here--under-tabs' diff --git a/app/views/statuses/_attachment_list.html.haml b/app/views/statuses/_attachment_list.html.haml index d9706f47bd..a150a3fae9 100644 --- a/app/views/statuses/_attachment_list.html.haml +++ b/app/views/statuses/_attachment_list.html.haml @@ -1,6 +1,6 @@ .attachment-list .attachment-list__icon - = fa_icon 'link' + = material_symbol 'link' %ul.attachment-list__list - attachments.each do |media| %li From fa2e7b1708385c4277a67f04e540cc39fc661390 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 20 Aug 2024 07:52:45 -0400 Subject: [PATCH 23/77] Migrate fontawesome->material in more views (#31360) --- app/helpers/application_helper.rb | 3 ++- app/helpers/settings_helper.rb | 4 ++-- app/javascript/material-icons/400-24px/chat.svg | 5 +++++ .../material-icons/400-24px/desktop_mac.svg | 5 +++++ .../material-icons/400-24px/format_paragraph.svg | 5 +++++ .../material-icons/400-24px/smartphone.svg | 5 +++++ app/javascript/material-icons/400-24px/tablet.svg | 5 +++++ app/javascript/styles/mastodon/accounts.scss | 2 +- app/views/application/_card.html.haml | 2 +- .../auth/registrations/_account_warning.html.haml | 2 +- app/views/auth/registrations/_session.html.haml | 2 +- app/views/disputes/strikes/show.html.haml | 4 ++-- app/views/filters/_filter.html.haml | 4 ++-- app/views/filters/_filter_fields.html.haml | 2 +- app/views/filters/_keyword_fields.html.haml | 2 +- app/views/invites/_invite.html.haml | 2 +- app/views/kaminari/_next_page.html.haml | 2 +- app/views/kaminari/_prev_page.html.haml | 2 +- app/views/oauth/authorizations/new.html.haml | 2 +- .../oauth/authorized_applications/index.html.haml | 2 +- app/views/relationships/show.html.haml | 8 ++++---- app/views/statuses/_detailed_status.html.haml | 10 +++++----- app/views/statuses/_simple_status.html.haml | 14 +++++++------- spec/helpers/application_helper_spec.rb | 9 +++++++++ spec/helpers/settings_helper_spec.rb | 4 ++-- 25 files changed, 71 insertions(+), 36 deletions(-) create mode 100644 app/javascript/material-icons/400-24px/chat.svg create mode 100644 app/javascript/material-icons/400-24px/desktop_mac.svg create mode 100644 app/javascript/material-icons/400-24px/format_paragraph.svg create mode 100644 app/javascript/material-icons/400-24px/smartphone.svg create mode 100644 app/javascript/material-icons/400-24px/tablet.svg diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index a6ab4044bc..20da199d43 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -117,7 +117,8 @@ module ApplicationHelper inline_svg_tag( "400-24px/#{icon}.svg", class: ['icon', "material-#{icon}"].concat(attributes[:class].to_s.split), - role: :img + role: :img, + data: attributes[:data] ) end diff --git a/app/helpers/settings_helper.rb b/app/helpers/settings_helper.rb index 10863a316c..64f2ad70a6 100644 --- a/app/helpers/settings_helper.rb +++ b/app/helpers/settings_helper.rb @@ -26,11 +26,11 @@ module SettingsHelper device = session.detection.device if device.mobile? - 'mobile' + 'smartphone' elsif device.tablet? 'tablet' else - 'desktop' + 'desktop_mac' end end diff --git a/app/javascript/material-icons/400-24px/chat.svg b/app/javascript/material-icons/400-24px/chat.svg new file mode 100644 index 0000000000..7369e6f847 --- /dev/null +++ b/app/javascript/material-icons/400-24px/chat.svg @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/desktop_mac.svg b/app/javascript/material-icons/400-24px/desktop_mac.svg new file mode 100644 index 0000000000..5d2a07a369 --- /dev/null +++ b/app/javascript/material-icons/400-24px/desktop_mac.svg @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/format_paragraph.svg b/app/javascript/material-icons/400-24px/format_paragraph.svg new file mode 100644 index 0000000000..657b483c00 --- /dev/null +++ b/app/javascript/material-icons/400-24px/format_paragraph.svg @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/smartphone.svg b/app/javascript/material-icons/400-24px/smartphone.svg new file mode 100644 index 0000000000..fa56825488 --- /dev/null +++ b/app/javascript/material-icons/400-24px/smartphone.svg @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/tablet.svg b/app/javascript/material-icons/400-24px/tablet.svg new file mode 100644 index 0000000000..09a5fe6bb1 --- /dev/null +++ b/app/javascript/material-icons/400-24px/tablet.svg @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/app/javascript/styles/mastodon/accounts.scss b/app/javascript/styles/mastodon/accounts.scss index 894332acb5..3f70a7d234 100644 --- a/app/javascript/styles/mastodon/accounts.scss +++ b/app/javascript/styles/mastodon/accounts.scss @@ -66,7 +66,7 @@ margin-inline-start: 15px; text-align: start; - i[data-hidden] { + svg[data-hidden] { display: none; } diff --git a/app/views/application/_card.html.haml b/app/views/application/_card.html.haml index 1b3dd889c1..ae74f1dc63 100644 --- a/app/views/application/_card.html.haml +++ b/app/views/application/_card.html.haml @@ -15,4 +15,4 @@ %strong.emojify.p-name= display_name(account, custom_emojify: true) %span = acct(account) - = fa_icon('lock', { data: ({ hidden: true } unless account.locked?) }) + = material_symbol('lock', { data: ({ hidden: true } unless account.locked?) }) diff --git a/app/views/auth/registrations/_account_warning.html.haml b/app/views/auth/registrations/_account_warning.html.haml index c51179b49d..d558e1d9c9 100644 --- a/app/views/auth/registrations/_account_warning.html.haml +++ b/app/views/auth/registrations/_account_warning.html.haml @@ -2,7 +2,7 @@ .strike-entry__header .strike-entry__avatar .indicator-icon{ class: account_warning.overruled? ? 'success' : 'failure' } - = fa_icon 'warning' + = material_symbol 'warning' .strike-entry__content .strike-entry__title = t 'disputes.strikes.title', diff --git a/app/views/auth/registrations/_session.html.haml b/app/views/auth/registrations/_session.html.haml index 631ae04601..92e5147593 100644 --- a/app/views/auth/registrations/_session.html.haml +++ b/app/views/auth/registrations/_session.html.haml @@ -1,7 +1,7 @@ %tr %td %span{ title: session.user_agent }< - = fa_icon "#{session_device_icon(session)} fw", 'aria-label': session_device_icon(session) + = material_symbol session_device_icon(session), 'aria-label': session_device_icon(session)   = t 'sessions.description', browser: t("sessions.browsers.#{session.browser}", default: session.browser.to_s), diff --git a/app/views/disputes/strikes/show.html.haml b/app/views/disputes/strikes/show.html.haml index 5f72138821..2bfecebbff 100644 --- a/app/views/disputes/strikes/show.html.haml +++ b/app/views/disputes/strikes/show.html.haml @@ -9,13 +9,13 @@ - if @strike.overruled? %p.hint %span.positive-hint - = fa_icon 'check' + = material_symbol 'check'   = t 'disputes.strikes.appeal_approved' - elsif @appeal.persisted? && @appeal.rejected? %p.hint %span.negative-hint - = fa_icon 'times' + = material_symbol 'close'   = t 'disputes.strikes.appeal_rejected' diff --git a/app/views/filters/_filter.html.haml b/app/views/filters/_filter.html.haml index 9d82a979fe..a544ac3a75 100644 --- a/app/views/filters/_filter.html.haml +++ b/app/views/filters/_filter.html.haml @@ -14,7 +14,7 @@ - unless filter.keywords.empty? %li.permissions-list__item .permissions-list__item__icon - = fa_icon('paragraph') + = material_symbol('format_paragraph') .permissions-list__item__text .permissions-list__item__text__title = t('filters.index.keywords', count: filter.keywords.size) @@ -25,7 +25,7 @@ - unless filter.statuses.empty? %li.permissions-list__item .permissions-list__item__icon - = fa_icon('comment') + = material_symbol('chat') .permissions-list__item__text .permissions-list__item__text__title = t('filters.index.statuses', count: filter.statuses.size) diff --git a/app/views/filters/_filter_fields.html.haml b/app/views/filters/_filter_fields.html.haml index 0f4049ffb6..797c969b24 100644 --- a/app/views/filters/_filter_fields.html.haml +++ b/app/views/filters/_filter_fields.html.haml @@ -58,4 +58,4 @@ %tr %td{ colspan: 3 } = link_to_add_association f, :keywords, class: 'table-action-link', partial: 'keyword_fields', 'data-association-insertion-node': '.keywords-table tbody', 'data-association-insertion-method': 'append' do - = safe_join([fa_icon('plus'), t('filters.edit.add_keyword')]) + = safe_join([material_symbol('add'), t('filters.edit.add_keyword')]) diff --git a/app/views/filters/_keyword_fields.html.haml b/app/views/filters/_keyword_fields.html.haml index eedd514ef5..136ab1653d 100644 --- a/app/views/filters/_keyword_fields.html.haml +++ b/app/views/filters/_keyword_fields.html.haml @@ -5,4 +5,4 @@ %td = f.hidden_field :id if f.object&.persisted? # Required so Rails doesn't put the field outside of the = link_to_remove_association(f, class: 'table-action-link') do - = safe_join([fa_icon('times'), t('filters.index.delete')]) + = safe_join([material_symbol('close'), t('filters.index.delete')]) diff --git a/app/views/invites/_invite.html.haml b/app/views/invites/_invite.html.haml index d332dc5a4d..94e1a71125 100644 --- a/app/views/invites/_invite.html.haml +++ b/app/views/invites/_invite.html.haml @@ -7,7 +7,7 @@ - if invite.valid_for_use? %td - = fa_icon 'user fw' + = material_symbol 'person' = invite.uses = " / #{invite.max_uses}" unless invite.max_uses.nil? %td diff --git a/app/views/kaminari/_next_page.html.haml b/app/views/kaminari/_next_page.html.haml index c44aea1f11..5f27f4c8ee 100644 --- a/app/views/kaminari/_next_page.html.haml +++ b/app/views/kaminari/_next_page.html.haml @@ -8,4 +8,4 @@ remote: data-remote %span.next - = link_to_unless current_page.last?, safe_join([t('pagination.next'), fa_icon('chevron-right')], ' '), url, rel: 'next', remote: remote + = link_to_unless current_page.last?, safe_join([t('pagination.next'), material_symbol('chevron_right')], ' '), url, rel: 'next', remote: remote diff --git a/app/views/kaminari/_prev_page.html.haml b/app/views/kaminari/_prev_page.html.haml index 284d6223b8..c5584f6a81 100644 --- a/app/views/kaminari/_prev_page.html.haml +++ b/app/views/kaminari/_prev_page.html.haml @@ -7,4 +7,4 @@ per_page: number of items to fetch per page remote: data-remote %span.prev - = link_to_unless current_page.first?, safe_join([fa_icon('chevron-left'), t('pagination.prev')], ' '), url, rel: 'prev', remote: remote + = link_to_unless current_page.first?, safe_join([material_symbol('chevron_left'), t('pagination.prev')], ' '), url, rel: 'prev', remote: remote diff --git a/app/views/oauth/authorizations/new.html.haml b/app/views/oauth/authorizations/new.html.haml index d4563b2f01..ca9d12a676 100644 --- a/app/views/oauth/authorizations/new.html.haml +++ b/app/views/oauth/authorizations/new.html.haml @@ -13,7 +13,7 @@ - grouped_scopes(@pre_auth.scopes).each do |scope| %li.permissions-list__item .permissions-list__item__icon - = fa_icon('check') + = material_symbol('check') .permissions-list__item__text .permissions-list__item__text__title = t(scope.key, scope: [:doorkeeper, :grouped_scopes, :title]) diff --git a/app/views/oauth/authorized_applications/index.html.haml b/app/views/oauth/authorized_applications/index.html.haml index 009bbf8d85..b6819bbd72 100644 --- a/app/views/oauth/authorized_applications/index.html.haml +++ b/app/views/oauth/authorized_applications/index.html.haml @@ -36,7 +36,7 @@ - grouped_scopes(application.scopes).each do |scope| %li.permissions-list__item .permissions-list__item__icon - = fa_icon('check') + = material_symbol('check') .permissions-list__item__text .permissions-list__item__text__title = t(scope.key, scope: [:doorkeeper, :grouped_scopes, :title]) diff --git a/app/views/relationships/show.html.haml b/app/views/relationships/show.html.haml index 6a866b13f8..7478b8c5ce 100644 --- a/app/views/relationships/show.html.haml +++ b/app/views/relationships/show.html.haml @@ -42,13 +42,13 @@ %label.batch-table__toolbar__select.batch-checkbox-all = check_box_tag :batch_checkbox_all, nil, false .batch-table__toolbar__actions - = f.button safe_join([fa_icon('user-plus'), t('relationships.follow_selected_followers')]), name: :follow, class: 'table-action-link', type: :submit, data: { confirm: t('relationships.confirm_follow_selected_followers') } if followed_by_relationship? && !mutual_relationship? + = f.button safe_join([material_symbol('person_add'), t('relationships.follow_selected_followers')]), name: :follow, class: 'table-action-link', type: :submit, data: { confirm: t('relationships.confirm_follow_selected_followers') } if followed_by_relationship? && !mutual_relationship? - = f.button safe_join([fa_icon('user-times'), t('relationships.remove_selected_follows')]), name: :unfollow, class: 'table-action-link', type: :submit, data: { confirm: t('relationships.confirm_remove_selected_follows') } unless followed_by_relationship? + = f.button safe_join([material_symbol('person_remove'), t('relationships.remove_selected_follows')]), name: :unfollow, class: 'table-action-link', type: :submit, data: { confirm: t('relationships.confirm_remove_selected_follows') } unless followed_by_relationship? - = f.button safe_join([fa_icon('trash'), t('relationships.remove_selected_followers')]), name: :remove_from_followers, class: 'table-action-link', type: :submit, data: { confirm: t('relationships.confirm_remove_selected_followers') } unless following_relationship? + = f.button safe_join([material_symbol('delete'), t('relationships.remove_selected_followers')]), name: :remove_from_followers, class: 'table-action-link', type: :submit, data: { confirm: t('relationships.confirm_remove_selected_followers') } unless following_relationship? - = f.button safe_join([fa_icon('trash'), t('relationships.remove_selected_domains')]), name: :remove_domains_from_followers, class: 'table-action-link', type: :submit, data: { confirm: t('admin.reports.are_you_sure') } if followed_by_relationship? + = f.button safe_join([material_symbol('delete'), t('relationships.remove_selected_domains')]), name: :remove_domains_from_followers, class: 'table-action-link', type: :submit, data: { confirm: t('admin.reports.are_you_sure') } if followed_by_relationship? .batch-table__body - if @accounts.empty? = nothing_here 'nothing-here--under-tabs' diff --git a/app/views/statuses/_detailed_status.html.haml b/app/views/statuses/_detailed_status.html.haml index c55dff5d96..6cd240bbbc 100644 --- a/app/views/statuses/_detailed_status.html.haml +++ b/app/views/statuses/_detailed_status.html.haml @@ -11,7 +11,7 @@ %strong.display-name__html.p-name.emojify= display_name(status.account, custom_emojify: true, autoplay: prefers_autoplay?) %span.display-name__account = acct(status.account) - = fa_icon('lock') if status.account.locked? + = material_symbol('lock') if status.account.locked? = account_action_button(status.account) @@ -58,20 +58,20 @@ · %span.detailed-status__link - if status.in_reply_to_id.nil? - = fa_icon('reply') + = material_symbol('reply') - else - = fa_icon('reply-all') + = material_symbol('reply_all') %span.detailed-status__reblogs>= friendly_number_to_human status.replies_count   · - if status.public_visibility? || status.unlisted_visibility? %span.detailed-status__link - = fa_icon('retweet') + = material_symbol('repeat') %span.detailed-status__reblogs>= friendly_number_to_human status.reblogs_count   · %span.detailed-status__link - = fa_icon('star') + = material_symbol('star') %span.detailed-status__favorites>= friendly_number_to_human status.favourites_count   diff --git a/app/views/statuses/_simple_status.html.haml b/app/views/statuses/_simple_status.html.haml index 93effc4524..ee7900fbfa 100644 --- a/app/views/statuses/_simple_status.html.haml +++ b/app/views/statuses/_simple_status.html.haml @@ -26,7 +26,7 @@   %span.display-name__account = acct(status.account) - = fa_icon('lock') if status.account.locked? + = material_symbol('lock') if status.account.locked? .status__content.emojify{ data: ({ spoiler: current_account&.user&.setting_expand_spoilers ? 'expanded' : 'folded' } if status.spoiler_text?) }< - if status.spoiler_text? %p< @@ -55,16 +55,16 @@ .status__action-bar %span.status__action-bar-button.icon-button.icon-button--with-counter - if status.in_reply_to_id.nil? - = fa_icon 'reply fw' + = material_symbol 'reply' - else - = fa_icon 'reply-all fw' + = material_symbol 'reply_all' %span.icon-button__counter= obscured_counter status.replies_count %span.status__action-bar-button.icon-button - if status.distributable? - = fa_icon 'retweet fw' + = material_symbol 'repeat' - elsif status.private_visibility? || status.limited_visibility? - = fa_icon 'lock fw' + = material_symbol 'lock' - else - = fa_icon 'at fw' + = material_symbol 'alternate_email' %span.status__action-bar-button.icon-button - = fa_icon 'star fw' + = material_symbol 'star' diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb index 463a90b698..95e6976169 100644 --- a/spec/helpers/application_helper_spec.rb +++ b/spec/helpers/application_helper_spec.rb @@ -59,6 +59,15 @@ describe ApplicationHelper do end end + describe '#material_symbol' do + it 'returns an svg with the icon and options' do + expect(helper.material_symbol('lock', class: :test, data: { hidden: true })) + .to match('') + .and match('class="icon material-lock test"') + .and match('data-hidden="true"') + end + end + describe 'open_registrations?' do it 'returns true when open for registrations' do allow(Setting).to receive(:[]).with('registrations_mode').and_return('open') diff --git a/spec/helpers/settings_helper_spec.rb b/spec/helpers/settings_helper_spec.rb index cba5c6ee89..ca447d8ce1 100644 --- a/spec/helpers/settings_helper_spec.rb +++ b/spec/helpers/settings_helper_spec.rb @@ -10,7 +10,7 @@ describe SettingsHelper do it 'detects the device and returns a descriptive string' do result = helper.session_device_icon(session) - expect(result).to eq('mobile') + expect(result).to eq('smartphone') end end @@ -30,7 +30,7 @@ describe SettingsHelper do it 'detects the device and returns a descriptive string' do result = helper.session_device_icon(session) - expect(result).to eq('desktop') + expect(result).to eq('desktop_mac') end end end From 711e1fce0a6f0b883125614aade04d78bb4217ce Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 20 Aug 2024 15:54:08 +0200 Subject: [PATCH 24/77] Fix pagination parameters in `GET /api/v2_alpha/notificatins` (#31509) --- app/models/notification.rb | 8 +++--- .../api/v2_alpha/notifications_spec.rb | 28 +++++++++++++++---- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/app/models/notification.rb b/app/models/notification.rb index f1605f0347..ae7c782bed 100644 --- a/app/models/notification.rb +++ b/app/models/notification.rb @@ -180,8 +180,8 @@ class Notification < ApplicationRecord # Notifications that have no `group_key` each count as a separate group. def paginate_groups_by_max_id(limit, max_id: nil, since_id: nil) query = reorder(id: :desc) - query = query.where(id: ...max_id) if max_id.present? - query = query.where(id: (since_id + 1)...) if since_id.present? + query = query.where(id: ...(max_id.to_i)) if max_id.present? + query = query.where(id: (since_id.to_i + 1)...) if since_id.present? query.paginate_groups(limit, :desc) end @@ -190,8 +190,8 @@ class Notification < ApplicationRecord # Results will be in ascending order by id. def paginate_groups_by_min_id(limit, max_id: nil, min_id: nil) query = reorder(id: :asc) - query = query.where(id: (min_id + 1)...) if min_id.present? - query = query.where(id: ...max_id) if max_id.present? + query = query.where(id: (min_id.to_i + 1)...) if min_id.present? + query = query.where(id: ...(max_id.to_i)) if max_id.present? query.paginate_groups(limit, :asc) end diff --git a/spec/requests/api/v2_alpha/notifications_spec.rb b/spec/requests/api/v2_alpha/notifications_spec.rb index 94bc7b0ee3..a613158aa5 100644 --- a/spec/requests/api/v2_alpha/notifications_spec.rb +++ b/spec/requests/api/v2_alpha/notifications_spec.rb @@ -97,8 +97,7 @@ RSpec.describe 'Notifications' do before do first_status = PostStatusService.new.call(user.account, text: 'Test') ReblogService.new.call(bob.account, first_status) - mentioning_status = PostStatusService.new.call(bob.account, text: 'Hello @alice') - mentioning_status.mentions.first + PostStatusService.new.call(bob.account, text: 'Hello @alice') FavouriteService.new.call(bob.account, first_status) FavouriteService.new.call(tom.account, first_status) FollowService.new.call(bob.account, user.account) @@ -141,18 +140,37 @@ RSpec.describe 'Notifications' do context 'with limit param' do let(:params) { { limit: 3 } } + let(:notifications) { user.account.notifications.reorder(id: :desc) } it 'returns the requested number of notifications paginated', :aggregate_failures do subject - notifications = user.account.notifications - expect(body_as_json[:notification_groups].size) .to eq(params[:limit]) expect(response) .to include_pagination_headers( - prev: api_v2_alpha_notifications_url(limit: params[:limit], min_id: notifications.last.id), + prev: api_v2_alpha_notifications_url(limit: params[:limit], min_id: notifications.first.id), + # TODO: one downside of the current approach is that we return the first ID matching the group, + # not the last that has been skipped, so pagination is very likely to give overlap + next: api_v2_alpha_notifications_url(limit: params[:limit], max_id: notifications[3].id) + ) + end + end + + context 'with since_id param' do + let(:params) { { since_id: notifications[2].id } } + let(:notifications) { user.account.notifications.reorder(id: :desc) } + + it 'returns the requested number of notifications paginated', :aggregate_failures do + subject + + expect(body_as_json[:notification_groups].size) + .to eq(2) + + expect(response) + .to include_pagination_headers( + prev: api_v2_alpha_notifications_url(limit: params[:limit], min_id: notifications.first.id), # TODO: one downside of the current approach is that we return the first ID matching the group, # not the last that has been skipped, so pagination is very likely to give overlap next: api_v2_alpha_notifications_url(limit: params[:limit], max_id: notifications[1].id) From 05b438005101dff2321bc645a5c7101fccdf342f Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 20 Aug 2024 16:03:09 +0200 Subject: [PATCH 25/77] Fix margin in follow notification in web UI (#31508) --- .../styles/mastodon/components.scss | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 97abf77d10..4c47a8db6c 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -762,16 +762,6 @@ body > [data-popper-placement] { gap: 12px; flex-wrap: wrap; - .button { - display: block; // Otherwise text-ellipsis doesn't work - font-size: 14px; - line-height: normal; - font-weight: 700; - flex: 1 1 auto; - padding: 5px 12px; - border-radius: 4px; - } - .icon-button { box-sizing: content-box; color: $highlight-text-color; @@ -10530,8 +10520,10 @@ noscript { } &__additional-content { - color: $darker-text-color; + color: $dark-text-color; margin-top: -8px; // to offset the parent's `gap` property + font-size: 15px; + line-height: 22px; } } @@ -10585,6 +10577,19 @@ noscript { } } +.notification-group__actions, +.compose-form__actions { + .button { + display: block; // Otherwise text-ellipsis doesn't work + font-size: 14px; + line-height: normal; + font-weight: 700; + flex: 1 1 auto; + padding: 5px 12px; + border-radius: 4px; + } +} + .notification-ungrouped { padding: 16px 24px; border-bottom: 1px solid var(--background-border-color); From 6c26fb0ed63f080627ede26b73ed3f4f8e0e5220 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 20 Aug 2024 16:36:14 +0200 Subject: [PATCH 26/77] Update dependency core-js to v3.38.1 (#31507) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 47cd777f43..5f116021a0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6389,9 +6389,9 @@ __metadata: linkType: hard "core-js@npm:^3.30.2": - version: 3.38.0 - resolution: "core-js@npm:3.38.0" - checksum: 10c0/3218ae19bfe0c6560663012cbd3e7f3dc1b36d50fc71e8c365f3b119185e8a35ac4e8bb9698ae510b3c201ef93f40bdc29f9215716ccf31aca28f77969bb4ed0 + version: 3.38.1 + resolution: "core-js@npm:3.38.1" + checksum: 10c0/7df063b6f13a54e46515817ac3e235c6c598a4d3de65cd188a061fc250642be313b895fb9fb2f36e1e31890a1bb4ef61d82666a340413f540b7ce3c65689739b languageName: node linkType: hard From 4016fd512898e9226a40b1973a742cb1e827ae3b Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Tue, 20 Aug 2024 17:56:44 +0200 Subject: [PATCH 27/77] Update CSS color variables to match our latest design system (#31510) --- app/javascript/styles/contrast/variables.scss | 8 ++--- .../styles/mastodon-light/variables.scss | 34 +++++++++---------- app/javascript/styles/mastodon/variables.scss | 12 +++---- app/lib/themes.rb | 2 +- 4 files changed, 28 insertions(+), 28 deletions(-) diff --git a/app/javascript/styles/contrast/variables.scss b/app/javascript/styles/contrast/variables.scss index e38d24b271..766591ba40 100644 --- a/app/javascript/styles/contrast/variables.scss +++ b/app/javascript/styles/contrast/variables.scss @@ -1,10 +1,10 @@ // Dependent colors $black: #000000; -$classic-base-color: #282c37; -$classic-primary-color: #9baec8; -$classic-secondary-color: #d9e1e8; -$classic-highlight-color: #6364ff; +$classic-base-color: hsl(240deg, 16%, 19%); +$classic-primary-color: hsl(240deg, 29%, 70%); +$classic-secondary-color: hsl(255deg, 25%, 88%); +$classic-highlight-color: hsl(240deg, 100%, 69%); $ui-base-color: $classic-base-color !default; $ui-primary-color: $classic-primary-color !default; diff --git a/app/javascript/styles/mastodon-light/variables.scss b/app/javascript/styles/mastodon-light/variables.scss index 39809b437f..76ede26233 100644 --- a/app/javascript/styles/mastodon-light/variables.scss +++ b/app/javascript/styles/mastodon-light/variables.scss @@ -2,25 +2,25 @@ $black: #000000; $white: #ffffff; -$classic-base-color: #282c37; -$classic-primary-color: #9baec8; -$classic-secondary-color: #d9e1e8; -$classic-highlight-color: #6364ff; +$classic-base-color: hsl(240deg, 16%, 19%); +$classic-primary-color: hsl(240deg, 29%, 70%); +$classic-secondary-color: hsl(255deg, 25%, 88%); +$classic-highlight-color: hsl(240deg, 100%, 69%); -$blurple-600: #563acc; // Iris -$blurple-500: #6364ff; // Brand purple -$blurple-300: #858afa; // Faded Blue -$grey-600: #4e4c5a; // Trout -$grey-100: #dadaf3; // Topaz +$blurple-600: hsl(252deg, 59%, 51%); // Iris +$blurple-500: hsl(240deg, 100%, 69%); // Brand purple +$blurple-300: hsl(237deg, 92%, 75%); // Faded Blue +$grey-600: hsl(240deg, 8%, 33%); // Trout +$grey-100: hsl(240deg, 51%, 90%); // Topaz // Differences -$success-green: lighten(#3c754d, 8%); +$success-green: lighten(hsl(138deg, 32%, 35%), 8%); $base-overlay-background: $white !default; $valid-value-color: $success-green !default; $ui-base-color: $classic-secondary-color !default; -$ui-base-lighter-color: #b0c0cf; +$ui-base-lighter-color: hsl(250deg, 24%, 75%); $ui-primary-color: $classic-primary-color !default; $ui-secondary-color: $classic-base-color !default; $ui-highlight-color: $classic-highlight-color !default; @@ -35,12 +35,12 @@ $ui-button-tertiary-border-color: $blurple-500 !default; $primary-text-color: $black !default; $darker-text-color: $classic-base-color !default; $highlight-text-color: $ui-highlight-color !default; -$dark-text-color: #444b5d; -$action-button-color: #606984; +$dark-text-color: hsl(240deg, 16%, 32%); +$action-button-color: hsl(240deg, 16%, 45%); $inverted-text-color: $black !default; $lighter-text-color: $classic-base-color !default; -$light-text-color: #444b5d; +$light-text-color: hsl(240deg, 16%, 32%); // Newly added colors $account-background-color: $white !default; @@ -57,11 +57,11 @@ $account-background-color: $white !default; $emojis-requiring-inversion: 'chains'; body { - --dropdown-border-color: #d9e1e8; + --dropdown-border-color: hsl(240deg, 25%, 88%); --dropdown-background-color: #fff; - --modal-border-color: #d9e1e8; + --modal-border-color: hsl(240deg, 25%, 88%); --modal-background-color: var(--background-color-tint); - --background-border-color: #d9e1e8; + --background-border-color: hsl(240deg, 25%, 88%); --background-color: #fff; --background-color-tint: rgba(255, 255, 255, 80%); --background-filter: blur(10px); diff --git a/app/javascript/styles/mastodon/variables.scss b/app/javascript/styles/mastodon/variables.scss index c8271e0dcd..c477e7a750 100644 --- a/app/javascript/styles/mastodon/variables.scss +++ b/app/javascript/styles/mastodon/variables.scss @@ -7,8 +7,8 @@ $blurple-600: #563acc; // Iris $blurple-500: #6364ff; // Brand purple $blurple-400: #7477fd; // Medium slate blue $blurple-300: #858afa; // Faded Blue -$grey-600: #4e4c5a; // Trout -$grey-100: #dadaf3; // Topaz +$grey-600: hsl(240deg, 8%, 33%); // Trout +$grey-100: hsl(240deg, 51%, 90%); // Topaz $success-green: #79bd9a !default; // Padua $error-red: $red-500 !default; // Cerise @@ -18,10 +18,10 @@ $gold-star: #ca8f04 !default; // Dark Goldenrod $red-bookmark: $warning-red; // Values from the classic Mastodon UI -$classic-base-color: #282c37; // Midnight Express -$classic-primary-color: #9baec8; // Echo Blue -$classic-secondary-color: #d9e1e8; // Pattens Blue -$classic-highlight-color: #6364ff; // Brand purple +$classic-base-color: hsl(240deg, 16%, 19%); +$classic-primary-color: hsl(240deg, 29%, 70%); +$classic-secondary-color: hsl(255deg, 25%, 88%); +$classic-highlight-color: $blurple-500; // Variables for defaults in UI $base-shadow-color: $black !default; diff --git a/app/lib/themes.rb b/app/lib/themes.rb index 183258d62f..8b68c92e45 100644 --- a/app/lib/themes.rb +++ b/app/lib/themes.rb @@ -7,7 +7,7 @@ class Themes include Singleton THEME_COLORS = { - dark: '#191b22', + dark: '#181820', light: '#ffffff', }.freeze From 4c4bcad866f513f69d6ea74e5acfdf3fc5f469ff Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 20 Aug 2024 11:59:47 -0400 Subject: [PATCH 28/77] Remove `font-awesome` npm package (#31512) --- app/javascript/mastodon/common.js | 1 - app/views/layouts/application.html.haml | 1 - app/views/layouts/embedded.html.haml | 1 - app/views/layouts/error.html.haml | 1 - package.json | 1 - yarn.lock | 8 -------- 6 files changed, 13 deletions(-) diff --git a/app/javascript/mastodon/common.js b/app/javascript/mastodon/common.js index 511568aa0f..28857de534 100644 --- a/app/javascript/mastodon/common.js +++ b/app/javascript/mastodon/common.js @@ -1,5 +1,4 @@ import Rails from '@rails/ujs'; -import 'font-awesome/css/font-awesome.css'; export function start() { require.context('../images/', true, /\.(jpg|png|svg)$/); diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index 0c0512e812..a6b34c8a36 100755 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -25,7 +25,6 @@ %title= html_title - = stylesheet_pack_tag 'common', media: 'all', crossorigin: 'anonymous' = theme_style_tags current_theme -# Needed for the wicg-inert polyfill. It needs to be on it's own