From aca691726b036af0d180ef2c31d7fa607c1505c3 Mon Sep 17 00:00:00 2001 From: Paolo Melchiorre Date: Fri, 23 Feb 2024 23:10:46 +0100 Subject: [PATCH 001/263] Fix #21492 Add missing WebP hint in avatar/header localizations (#22395) --- config/locales/simple_form.en.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index 0b718c5b65..7ece81290f 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -39,14 +39,14 @@ en: text: You can only appeal a strike once defaults: autofollow: People who sign up through the invite will automatically follow you - avatar: PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px + avatar: WEBP, PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px bot: Signal to others that the account mainly performs automated actions and might not be monitored context: One or multiple contexts where the filter should apply current_password: For security purposes please enter the password of the current account current_username: To confirm, please enter the username of the current account digest: Only sent after a long period of inactivity and only if you have received any personal messages in your absence email: You will be sent a confirmation e-mail - header: PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px + header: WEBP, PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px inbox_url: Copy the URL from the frontpage of the relay you want to use irreversible: Filtered posts will disappear irreversibly, even if filter is later removed locale: The language of the user interface, e-mails and push notifications From bbf6cb66f63c23daea725cb2b444a7c9f6c46899 Mon Sep 17 00:00:00 2001 From: Roni Laukkarinen Date: Mon, 26 Feb 2024 02:57:13 +0200 Subject: [PATCH 002/263] Improve alt text form accessibility with long texts (#27095) --- app/javascript/styles/mastodon/components.scss | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 2e5db497db..46fda2033d 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -5965,6 +5965,7 @@ a.status-card { .report-modal__comment { box-sizing: border-box; width: 50%; + min-width: 50%; @media screen and (width <= 480px) { width: 100%; @@ -6033,6 +6034,14 @@ a.status-card { min-height: 100px; max-height: 50vh; border: 0; + + @media screen and (height <= 600px) { + max-height: 20vh; + } + + @media screen and (max-width: $no-columns-breakpoint) { + max-height: 20vh; + } } .setting-toggle { From 1cb74eeec00b413d326308930c48280b4f8325f4 Mon Sep 17 00:00:00 2001 From: Roni Laukkarinen Date: Mon, 26 Feb 2024 02:57:48 +0200 Subject: [PATCH 003/263] Fix search icon position on mobile (#29384) --- app/javascript/styles/mastodon/components.scss | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 46fda2033d..93f2c0a48b 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -5195,7 +5195,6 @@ a.status-card { .icon { position: absolute; top: 12px + 2px; - inset-inline-start: 16px - 2px; display: inline-block; opacity: 0; transition: all 100ms linear; @@ -5210,6 +5209,10 @@ a.status-card { pointer-events: auto; opacity: 1; } + + @media screen and (min-width: $no-gap-breakpoint) { + inset-inline-start: 16px - 2px; + } } .icon-search { From 8fd8b30c24ebb2f91292430bcf73f15884622195 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 26 Feb 2024 13:41:34 +0100 Subject: [PATCH 004/263] Update dependency cssnano to v6.0.5 (#29385) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 192 +++++++++++++++++++++++++++--------------------------- 1 file changed, 96 insertions(+), 96 deletions(-) diff --git a/yarn.lock b/yarn.lock index 5834f5566d..c85dc452bb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5194,17 +5194,17 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.0.0, browserslist@npm:^4.22.2": - version: 4.22.2 - resolution: "browserslist@npm:4.22.2" +"browserslist@npm:^4.0.0, browserslist@npm:^4.22.2, browserslist@npm:^4.23.0": + version: 4.23.0 + resolution: "browserslist@npm:4.23.0" dependencies: - caniuse-lite: "npm:^1.0.30001565" - electron-to-chromium: "npm:^1.4.601" + caniuse-lite: "npm:^1.0.30001587" + electron-to-chromium: "npm:^1.4.668" node-releases: "npm:^2.0.14" update-browserslist-db: "npm:^1.0.13" bin: browserslist: cli.js - checksum: 10c0/2a331aab90503130043ca41dd5d281fa1e89d5e076d07a2d75e76bf4d693bd56e73d5abcd8c4f39119da6328d450578c216cf1cd5c99b82d8a90a2ae6271b465 + checksum: 10c0/8e9cc154529062128d02a7af4d8adeead83ca1df8cd9ee65a88e2161039f3d68a4d40fea7353cab6bae4c16182dec2fdd9a1cf7dc2a2935498cee1af0e998943 languageName: node linkType: hard @@ -5420,10 +5420,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001565, caniuse-lite@npm:^1.0.30001578": - version: 1.0.30001578 - resolution: "caniuse-lite@npm:1.0.30001578" - checksum: 10c0/c3bd9c08a945cee4f0cc284a217ebe9c2613e04d5aef4b48f1871a779b1875c34286469eb8d7d94bd028b5a354613e676ad503b6bf8db20a2f154574bd5fde48 +"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001578, caniuse-lite@npm:^1.0.30001587": + version: 1.0.30001589 + resolution: "caniuse-lite@npm:1.0.30001589" + checksum: 10c0/20debfb949413f603011bc7dacaf050010778bc4f8632c86fafd1bd0c43180c95ae7c31f6c82348f6309e5e221934e327c3607a216e3f09640284acf78cd6d4d languageName: node linkType: hard @@ -5727,7 +5727,7 @@ __metadata: languageName: node linkType: hard -"colord@npm:^2.9.1, colord@npm:^2.9.3": +"colord@npm:^2.9.3": version: 2.9.3 resolution: "colord@npm:2.9.3" checksum: 10c0/9699e956894d8996b28c686afe8988720785f476f59335c80ce852ded76ab3ebe252703aec53d9bef54f6219aea6b960fb3d9a8300058a1d0c0d4026460cd110 @@ -6248,24 +6248,24 @@ __metadata: languageName: node linkType: hard -"cssnano-preset-default@npm:^6.0.4": - version: 6.0.4 - resolution: "cssnano-preset-default@npm:6.0.4" +"cssnano-preset-default@npm:^6.0.5": + version: 6.0.5 + resolution: "cssnano-preset-default@npm:6.0.5" dependencies: css-declaration-sorter: "npm:^7.1.1" cssnano-utils: "npm:^4.0.1" postcss-calc: "npm:^9.0.1" - postcss-colormin: "npm:^6.0.2" - postcss-convert-values: "npm:^6.0.3" + postcss-colormin: "npm:^6.0.3" + postcss-convert-values: "npm:^6.0.4" postcss-discard-comments: "npm:^6.0.1" postcss-discard-duplicates: "npm:^6.0.2" postcss-discard-empty: "npm:^6.0.2" postcss-discard-overridden: "npm:^6.0.1" - postcss-merge-longhand: "npm:^6.0.2" - postcss-merge-rules: "npm:^6.0.3" - postcss-minify-font-values: "npm:^6.0.1" - postcss-minify-gradients: "npm:^6.0.1" - postcss-minify-params: "npm:^6.0.2" + postcss-merge-longhand: "npm:^6.0.3" + postcss-merge-rules: "npm:^6.0.4" + postcss-minify-font-values: "npm:^6.0.2" + postcss-minify-gradients: "npm:^6.0.2" + postcss-minify-params: "npm:^6.0.3" postcss-minify-selectors: "npm:^6.0.2" postcss-normalize-charset: "npm:^6.0.1" postcss-normalize-display-values: "npm:^6.0.1" @@ -6273,17 +6273,17 @@ __metadata: postcss-normalize-repeat-style: "npm:^6.0.1" postcss-normalize-string: "npm:^6.0.1" postcss-normalize-timing-functions: "npm:^6.0.1" - postcss-normalize-unicode: "npm:^6.0.2" + postcss-normalize-unicode: "npm:^6.0.3" postcss-normalize-url: "npm:^6.0.1" postcss-normalize-whitespace: "npm:^6.0.1" postcss-ordered-values: "npm:^6.0.1" - postcss-reduce-initial: "npm:^6.0.2" + postcss-reduce-initial: "npm:^6.0.3" postcss-reduce-transforms: "npm:^6.0.1" postcss-svgo: "npm:^6.0.2" postcss-unique-selectors: "npm:^6.0.2" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/8a1569756c2189d9db91b2bbd7bc44b39ec6c0bac8cb1a34ab37801b40626b372c2341e696f3a4dfe03ee0490f033299b5e5f9511e2d3572b9b5a2edb7a76e3b + checksum: 10c0/b51072bf808ad7af0e7d38eb2490fc9dd27bfa95c0de804f7b5f242a283cedd6446ef55936843e4c7c9856540e225e322a794e70b47ae515b894e84b629a58ea languageName: node linkType: hard @@ -6297,14 +6297,14 @@ __metadata: linkType: hard "cssnano@npm:^6.0.1": - version: 6.0.4 - resolution: "cssnano@npm:6.0.4" + version: 6.0.5 + resolution: "cssnano@npm:6.0.5" dependencies: - cssnano-preset-default: "npm:^6.0.4" + cssnano-preset-default: "npm:^6.0.5" lilconfig: "npm:^3.1.1" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/734b8d1a925288a707fa73087b7ae340a93c59a1838ac897f470104bbebf8aa4fb2a24e190e50a4eea592b595bca0a2f25e8aedcf237ea1675c8d1e636f587a5 + checksum: 10c0/f802b563bf4a3a973d91e0327803536d56c4667138587d84f6341f68862d7514bceb2f1258d7bbf66b2fdedf1e9c1b7fd0b4848bb0069296ecbebbdc70f2ccca languageName: node linkType: hard @@ -6941,10 +6941,10 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.4.601": - version: 1.4.609 - resolution: "electron-to-chromium@npm:1.4.609" - checksum: 10c0/9675a79388acbaff5953a4c61589af7da93e0d1f9d6a3b284c7630f10126eb0998557b07448514214d5a3d19025310039b55f405ab701b1253130fc94907f743 +"electron-to-chromium@npm:^1.4.668": + version: 1.4.681 + resolution: "electron-to-chromium@npm:1.4.681" + checksum: 10c0/5b2558dfb8bb82c20fb5fa1d9bbe06a3add47431dc3e1e4815e997be6ad387787047d9e534ed96839a9e7012520a5281c865158b09db41d10c029af003f05f94 languageName: node linkType: hard @@ -12799,29 +12799,29 @@ __metadata: languageName: node linkType: hard -"postcss-colormin@npm:^6.0.2": - version: 6.0.2 - resolution: "postcss-colormin@npm:6.0.2" +"postcss-colormin@npm:^6.0.3": + version: 6.0.3 + resolution: "postcss-colormin@npm:6.0.3" dependencies: - browserslist: "npm:^4.22.2" + browserslist: "npm:^4.23.0" caniuse-api: "npm:^3.0.0" - colord: "npm:^2.9.1" + colord: "npm:^2.9.3" postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/229681f9b89ba0909b4c69563837b0c32cc3d1c17ed1b00c33d4abfb0a0ef455124968e4885b5f92c64482e92074cd1958018ec111ed5d118f1e24baeda19c14 + checksum: 10c0/beddf9fd1bda3f456e1235829297341de34ca40f9a2e16f23930e13d9df6b6186ca3717817da0adab266bf5e8fcde7bd056ab54187f959eb53d2bfbde7f441e6 languageName: node linkType: hard -"postcss-convert-values@npm:^6.0.3": - version: 6.0.3 - resolution: "postcss-convert-values@npm:6.0.3" +"postcss-convert-values@npm:^6.0.4": + version: 6.0.4 + resolution: "postcss-convert-values@npm:6.0.4" dependencies: - browserslist: "npm:^4.22.2" + browserslist: "npm:^4.23.0" postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/614a24d4bc9142f277ed12eefe556eae6ad8292092953c8ebfcf518ef52e8de5dd337a9e915b64e712b8b95175ca0fd8d1b1e9e806d25a8e4f01c75d784f3118 + checksum: 10c0/c267ae8f2dbfc7fff5e46cd984bb6191405fe76f1eee04fd10a69fe10065ad7c3b62fa36e4bef3fa3a730284cd7295cb66968afb6cdaad0571a57cfcb25248fc languageName: node linkType: hard @@ -12884,66 +12884,66 @@ __metadata: languageName: node linkType: hard -"postcss-merge-longhand@npm:^6.0.2": - version: 6.0.2 - resolution: "postcss-merge-longhand@npm:6.0.2" +"postcss-merge-longhand@npm:^6.0.3": + version: 6.0.3 + resolution: "postcss-merge-longhand@npm:6.0.3" dependencies: postcss-value-parser: "npm:^4.2.0" - stylehacks: "npm:^6.0.2" + stylehacks: "npm:^6.0.3" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/2b3fae51bffc5962258d638bc7f415237593b515f369233e023f0eae5b13116297463c04b8c47a7b7af51cba5faaa7f517b653f6123e51935d670d4d4de5a26d + checksum: 10c0/a71758832e198af58a3d1c5013731c8dcd646611bd6ce099a5cbcef4dc2fd7c574e2f28f80bfe67887b046abfacca94bbeb2982bef3b087e9b52bd4acd3d8a38 languageName: node linkType: hard -"postcss-merge-rules@npm:^6.0.3": - version: 6.0.3 - resolution: "postcss-merge-rules@npm:6.0.3" +"postcss-merge-rules@npm:^6.0.4": + version: 6.0.4 + resolution: "postcss-merge-rules@npm:6.0.4" dependencies: - browserslist: "npm:^4.22.2" + browserslist: "npm:^4.23.0" caniuse-api: "npm:^3.0.0" cssnano-utils: "npm:^4.0.1" postcss-selector-parser: "npm:^6.0.15" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/c8355db11aa60bedcb1e6535fcd70f6ecec2dadd5c2975d3accf0eedbc92af782ac1f5e91a53866816ce332e4cbf1b94749a9425067935be066bc0c974e30fee + checksum: 10c0/57a16817c099dfc644bf2619831208bafcfd91225cccc8f6d2913241fe4a7225b3dc565bc92402902b4271771ad5d56358afd8eb7f709827a6576177e0bf9433 languageName: node linkType: hard -"postcss-minify-font-values@npm:^6.0.1": - version: 6.0.1 - resolution: "postcss-minify-font-values@npm:6.0.1" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.4.31 - checksum: 10c0/15af236245a6d27f1c83c943ef90d144ca043894bbd86f134506a984811a936a06824739984824965c7c3fd5a0ff4ed299f26a33f3b628662aa4fb40d7536fd0 - languageName: node - linkType: hard - -"postcss-minify-gradients@npm:^6.0.1": - version: 6.0.1 - resolution: "postcss-minify-gradients@npm:6.0.1" - dependencies: - colord: "npm:^2.9.1" - cssnano-utils: "npm:^4.0.1" - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.4.31 - checksum: 10c0/e700c3f6dc425072ff739fb18bb71c970599e0d909b326f4a5c84e91cf24c4f1ee78e4d161bd4cdf6e25b7d78f1ad082bb885afdd2a150f9b281520fc6359d5c - languageName: node - linkType: hard - -"postcss-minify-params@npm:^6.0.2": +"postcss-minify-font-values@npm:^6.0.2": version: 6.0.2 - resolution: "postcss-minify-params@npm:6.0.2" + resolution: "postcss-minify-font-values@npm:6.0.2" dependencies: - browserslist: "npm:^4.22.2" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/6a9407441531efd83683d529c9632c5c4ac7d971716dffa708b3775f36382ca9a960372793c4f9df68aaae513213a53400860d9a6bd233da6f68f8fc985efe72 + languageName: node + linkType: hard + +"postcss-minify-gradients@npm:^6.0.2": + version: 6.0.2 + resolution: "postcss-minify-gradients@npm:6.0.2" + dependencies: + colord: "npm:^2.9.3" cssnano-utils: "npm:^4.0.1" postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/6638460d2be4a2eca8adee8409b70d6c6a19aff8cf93fda1b45c9da627b258b6baaa6acb48f51d26cd287704a235f9c9ae2e4744335b1fd47e163177c33896df + checksum: 10c0/7a72edf3fe0028010d85af77d8c6bfa6147785bc9b3758efb0d09b51a8254ce3f8bc3f67220af6f204bb175e95b9e8355baf29b9c32b1df590506bca835b02f4 + languageName: node + linkType: hard + +"postcss-minify-params@npm:^6.0.3": + version: 6.0.3 + resolution: "postcss-minify-params@npm:6.0.3" + dependencies: + browserslist: "npm:^4.23.0" + cssnano-utils: "npm:^4.0.1" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/65a8bc0f75e7dc8a292797209ec0b1adef52923daf181ad34a7e83cbc974e2192e0e35ce0f35dbcb0177828991f92da8e239564f56588482d99c04a3e0755266 languageName: node linkType: hard @@ -13066,15 +13066,15 @@ __metadata: languageName: node linkType: hard -"postcss-normalize-unicode@npm:^6.0.2": - version: 6.0.2 - resolution: "postcss-normalize-unicode@npm:6.0.2" +"postcss-normalize-unicode@npm:^6.0.3": + version: 6.0.3 + resolution: "postcss-normalize-unicode@npm:6.0.3" dependencies: - browserslist: "npm:^4.22.2" + browserslist: "npm:^4.23.0" postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/ea696194f65ad31de2a9c022f1946a07c298f04070706d88a20061845e1e052e645c74b5bc785595814db87d14e435f85e968a44855dedc207d8c0b5d43b1aee + checksum: 10c0/9a79ff4fcdfc876e12fa595271f2fca655a5022fd63a202387fa9be1f6705a6e34395d555de8878ffed8b0305281ff452e26045bdc710e161f4103380b1d05d8 languageName: node linkType: hard @@ -13112,15 +13112,15 @@ __metadata: languageName: node linkType: hard -"postcss-reduce-initial@npm:^6.0.2": - version: 6.0.2 - resolution: "postcss-reduce-initial@npm:6.0.2" +"postcss-reduce-initial@npm:^6.0.3": + version: 6.0.3 + resolution: "postcss-reduce-initial@npm:6.0.3" dependencies: - browserslist: "npm:^4.22.2" + browserslist: "npm:^4.23.0" caniuse-api: "npm:^3.0.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/d35ad6f9725cdceb390a97a461e8594df7fbed4c55497c90d07c42f8343bf80139e720eaebc580bf480bf10e92959490aa308af66d8802ba71c327bdf08c93a1 + checksum: 10c0/824813d56f1f0d502b35781de5dd3caa5af71c9652710c95266ef8602a36cd9ea757033fb7206562d0a03e21f7a4198c09538dbf8c7548d014631a64bdcbb406 languageName: node linkType: hard @@ -15704,15 +15704,15 @@ __metadata: languageName: node linkType: hard -"stylehacks@npm:^6.0.2": - version: 6.0.2 - resolution: "stylehacks@npm:6.0.2" +"stylehacks@npm:^6.0.3": + version: 6.0.3 + resolution: "stylehacks@npm:6.0.3" dependencies: - browserslist: "npm:^4.22.2" + browserslist: "npm:^4.23.0" postcss-selector-parser: "npm:^6.0.15" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/658cac8b28edcb94d1db67808ab3aaa511cb1b9293594fc95607ee42ac4f57e742d9a1fa3ff5d5849db692971dc2a310e9ac1ed0bd4ea4bc48c80f5a6ef823fc + checksum: 10c0/780c147a695d77794f60e993824f3c67f1cde04905163e5a1b50ba8a1715ddda789cfdf86d46711713afe4a38252d5e3f6d79b103dc29d3b6f3749c24749de1d languageName: node linkType: hard From 1ad3cffaea00ef4e6f9fd12a9e97891e86dcc337 Mon Sep 17 00:00:00 2001 From: Jason Punyon Date: Mon, 26 Feb 2024 07:42:09 -0500 Subject: [PATCH 005/263] Missed a .to_date (#29390) --- app/views/relationships/_account.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/relationships/_account.html.haml b/app/views/relationships/_account.html.haml index 43a3d64bc8..23afcf7495 100644 --- a/app/views/relationships/_account.html.haml +++ b/app/views/relationships/_account.html.haml @@ -16,7 +16,7 @@ %small= t('accounts.followers', count: account.followers_count).downcase %td.accounts-table__count - if account.last_status_at.present? - %time.time-ago{ datetime: account.last_status_at.to_date.iso8601, title: l(account.last_status_at.to_date) }= l account.last_status_at + %time.time-ago{ datetime: account.last_status_at.to_date.iso8601, title: l(account.last_status_at.to_date) }= l account.last_status_at.to_date - else \- %small= t('accounts.last_active') From e57d321097d0373001ad627646de989d26bd848f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 26 Feb 2024 13:51:37 +0100 Subject: [PATCH 006/263] Update dependency httplog to v1.6.3 (#29399) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 734ed6ec8a..090697e709 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -333,7 +333,7 @@ GEM http-form_data (2.3.0) http_accept_language (2.1.1) httpclient (2.8.3) - httplog (1.6.2) + httplog (1.6.3) rack (>= 2.0) rainbow (>= 2.0.0) i18n (1.14.1) From b829d261ba201bac309aa23d5f1c8bd29e9c0e3d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 26 Feb 2024 13:52:03 +0100 Subject: [PATCH 007/263] Update DefinitelyTyped types (non-major) (#29404) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index c85dc452bb..943c488714 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3282,13 +3282,13 @@ __metadata: linkType: hard "@types/pg@npm:^8.6.6": - version: 8.11.0 - resolution: "@types/pg@npm:8.11.0" + version: 8.11.1 + resolution: "@types/pg@npm:8.11.1" dependencies: "@types/node": "npm:*" pg-protocol: "npm:*" pg-types: "npm:^4.0.1" - checksum: 10c0/df2c2ac11fa5e8863a98aadce9a9168af5cfc38a226a228d8b1be513ef48d33ceb9bfaa64ef685a87e0611a4f8d94f2e0736bb2812fa00ed264f76679b86945d + checksum: 10c0/7563075e037c8f7579cfb55e60e0891b742537ac50dc1d802051185513f850725fb05a635418ff26602c7cb6f176f6677a0099d586d51b72c651bb741b05b6e7 languageName: node linkType: hard @@ -3472,13 +3472,13 @@ __metadata: linkType: hard "@types/react@npm:*, @types/react@npm:16 || 17 || 18, @types/react@npm:>=16.9.11, @types/react@npm:^18.2.7": - version: 18.2.57 - resolution: "@types/react@npm:18.2.57" + version: 18.2.58 + resolution: "@types/react@npm:18.2.58" dependencies: "@types/prop-types": "npm:*" "@types/scheduler": "npm:*" csstype: "npm:^3.0.2" - checksum: 10c0/d5ed2f04c069c591e41ef1bea5b70f89dc7a4edff2254c4df801ddaa21b43b2aa70c106c049b9b6736f98f5afe66576d0e75a9e47c7044f2660b1744ff64f535 + checksum: 10c0/80145b707b780d682092b51d520f58a0171c4067ff36cf488d3346d92b715b27fd334acd0fabb8eb21a4eb6c4061f1535e8bfa6642a7f4025e63ebec868fb6d1 languageName: node linkType: hard From 98e3dc2578f4fee6cc8e08a714cfc273d7556ba4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 26 Feb 2024 14:03:06 +0100 Subject: [PATCH 008/263] New Crowdin Translations (automated) (#29382) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/fr-CA.json | 11 ++++ app/javascript/mastodon/locales/fr.json | 11 ++++ app/javascript/mastodon/locales/ie.json | 6 ++ app/javascript/mastodon/locales/kab.json | 29 ++++++++-- app/javascript/mastodon/locales/ko.json | 2 +- app/javascript/mastodon/locales/sk.json | 1 + app/javascript/mastodon/locales/tai.json | 36 ++++++------ app/javascript/mastodon/locales/th.json | 10 ++-- app/javascript/mastodon/locales/tr.json | 4 +- config/locales/activerecord.el.yml | 4 ++ config/locales/be.yml | 5 ++ config/locales/ca.yml | 4 +- config/locales/da.yml | 4 +- config/locales/devise.pt-BR.yml | 1 + config/locales/doorkeeper.th.yml | 14 ++--- config/locales/el.yml | 13 +++++ config/locales/es.yml | 2 +- config/locales/eu.yml | 2 + config/locales/fi.yml | 5 ++ config/locales/fo.yml | 2 + config/locales/he.yml | 2 + config/locales/hu.yml | 4 +- config/locales/ie.yml | 5 ++ config/locales/kab.yml | 6 +- config/locales/ko.yml | 5 ++ config/locales/lad.yml | 5 ++ config/locales/lt.yml | 5 ++ config/locales/pt-BR.yml | 1 + config/locales/pt-PT.yml | 3 + config/locales/simple_form.an.yml | 2 - config/locales/simple_form.ar.yml | 2 - config/locales/simple_form.ast.yml | 2 - config/locales/simple_form.be.yml | 4 +- config/locales/simple_form.bg.yml | 6 +- config/locales/simple_form.br.yml | 4 +- config/locales/simple_form.ckb.yml | 2 - config/locales/simple_form.co.yml | 2 - config/locales/simple_form.cs.yml | 4 +- config/locales/simple_form.cy.yml | 2 - config/locales/simple_form.da.yml | 4 +- config/locales/simple_form.de.yml | 4 +- config/locales/simple_form.el.yml | 2 - config/locales/simple_form.en-GB.yml | 2 - config/locales/simple_form.eo.yml | 2 - config/locales/simple_form.es-AR.yml | 4 +- config/locales/simple_form.es-MX.yml | 4 +- config/locales/simple_form.es.yml | 16 +++--- config/locales/simple_form.et.yml | 2 - config/locales/simple_form.eu.yml | 4 +- config/locales/simple_form.fa.yml | 2 - config/locales/simple_form.fo.yml | 4 +- config/locales/simple_form.fr-CA.yml | 4 +- config/locales/simple_form.fr.yml | 4 +- config/locales/simple_form.fy.yml | 2 - config/locales/simple_form.gd.yml | 2 - config/locales/simple_form.gl.yml | 4 +- config/locales/simple_form.he.yml | 4 +- config/locales/simple_form.hr.yml | 2 - config/locales/simple_form.hu.yml | 4 +- config/locales/simple_form.hy.yml | 2 - config/locales/simple_form.id.yml | 2 - config/locales/simple_form.ie.yml | 4 +- config/locales/simple_form.io.yml | 2 - config/locales/simple_form.is.yml | 2 - config/locales/simple_form.it.yml | 4 +- config/locales/simple_form.ja.yml | 2 - config/locales/simple_form.ka.yml | 2 - config/locales/simple_form.ko.yml | 4 +- config/locales/simple_form.ku.yml | 2 - config/locales/simple_form.lad.yml | 4 +- config/locales/simple_form.lt.yml | 4 +- config/locales/simple_form.lv.yml | 2 - config/locales/simple_form.ms.yml | 2 - config/locales/simple_form.my.yml | 2 - config/locales/simple_form.nl.yml | 4 +- config/locales/simple_form.nn.yml | 2 - config/locales/simple_form.no.yml | 2 - config/locales/simple_form.oc.yml | 2 - config/locales/simple_form.pl.yml | 4 +- config/locales/simple_form.pt-BR.yml | 2 - config/locales/simple_form.pt-PT.yml | 4 +- config/locales/simple_form.ro.yml | 2 - config/locales/simple_form.ru.yml | 2 - config/locales/simple_form.sc.yml | 2 - config/locales/simple_form.sco.yml | 2 - config/locales/simple_form.si.yml | 2 - config/locales/simple_form.sk.yml | 4 +- config/locales/simple_form.sl.yml | 4 +- config/locales/simple_form.sq.yml | 4 +- config/locales/simple_form.sr-Latn.yml | 2 - config/locales/simple_form.sr.yml | 2 - config/locales/simple_form.sv.yml | 2 - config/locales/simple_form.ta.yml | 1 - config/locales/simple_form.th.yml | 12 ++-- config/locales/simple_form.tr.yml | 4 +- config/locales/simple_form.uk.yml | 4 +- config/locales/simple_form.vi.yml | 2 - config/locales/simple_form.zh-CN.yml | 4 +- config/locales/simple_form.zh-HK.yml | 2 - config/locales/simple_form.zh-TW.yml | 4 +- config/locales/sq.yml | 2 + config/locales/th.yml | 65 ++++++++++++---------- config/locales/tr.yml | 2 +- 103 files changed, 268 insertions(+), 230 deletions(-) diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json index 49db30d75e..fc969b02f4 100644 --- a/app/javascript/mastodon/locales/fr-CA.json +++ b/app/javascript/mastodon/locales/fr-CA.json @@ -277,6 +277,17 @@ "follow_request.authorize": "Autoriser", "follow_request.reject": "Rejeter", "follow_requests.unlocked_explanation": "Même si votre compte n’est pas privé, l’équipe de {domain} a pensé que vous pourriez vouloir peut-être consulter manuellement les demandes d'abonnement de ces comptes.", + "follow_suggestions.curated_suggestion": "Choix du staff", + "follow_suggestions.dismiss": "Ne plus afficher", + "follow_suggestions.hints.featured": "Ce profil a été sélectionné par l'équipe de {domain}.", + "follow_suggestions.hints.friends_of_friends": "Ce profil est populaire parmi les personnes que vous suivez.", + "follow_suggestions.hints.most_followed": "Ce profil est l'un des plus suivis sur {domain}.", + "follow_suggestions.hints.most_interactions": "Ce profil a récemment fait l'objet d'une grande attention sur {domain}.", + "follow_suggestions.hints.similar_to_recently_followed": "Ce profil est similaire aux profils que vous avez suivis le plus récemment.", + "follow_suggestions.personalized_suggestion": "Suggestion personnalisée", + "follow_suggestions.popular_suggestion": "Suggestion populaire", + "follow_suggestions.view_all": "Tout afficher", + "follow_suggestions.who_to_follow": "Qui suivre", "followed_tags": "Hashtags suivis", "footer.about": "À propos", "footer.directory": "Annuaire des profils", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 1f657c8185..8396679d06 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -277,6 +277,17 @@ "follow_request.authorize": "Accepter", "follow_request.reject": "Rejeter", "follow_requests.unlocked_explanation": "Même si votre compte n’est pas privé, l’équipe de {domain} a pensé que vous pourriez vouloir consulter manuellement les demandes de suivi de ces comptes.", + "follow_suggestions.curated_suggestion": "Choix du staff", + "follow_suggestions.dismiss": "Ne plus afficher", + "follow_suggestions.hints.featured": "Ce profil a été sélectionné par l'équipe de {domain}.", + "follow_suggestions.hints.friends_of_friends": "Ce profil est populaire parmi les personnes que vous suivez.", + "follow_suggestions.hints.most_followed": "Ce profil est l'un des plus suivis sur {domain}.", + "follow_suggestions.hints.most_interactions": "Ce profil a récemment fait l'objet d'une grande attention sur {domain}.", + "follow_suggestions.hints.similar_to_recently_followed": "Ce profil est similaire aux profils que vous avez suivis le plus récemment.", + "follow_suggestions.personalized_suggestion": "Suggestion personnalisée", + "follow_suggestions.popular_suggestion": "Suggestion populaire", + "follow_suggestions.view_all": "Tout afficher", + "follow_suggestions.who_to_follow": "Qui suivre", "followed_tags": "Hashtags suivis", "footer.about": "À propos", "footer.directory": "Annuaire des profils", diff --git a/app/javascript/mastodon/locales/ie.json b/app/javascript/mastodon/locales/ie.json index c28a348dc7..7bd938c1bf 100644 --- a/app/javascript/mastodon/locales/ie.json +++ b/app/javascript/mastodon/locales/ie.json @@ -277,7 +277,13 @@ "follow_request.authorize": "Autorisar", "follow_request.reject": "Rejecter", "follow_requests.unlocked_explanation": "Benque tu conto ne es cludet, li administratores de {domain} pensat que tu fórsan vell voler tractar seque-petitiones de tis-ci contos manualmen.", + "follow_suggestions.curated_suggestion": "Selection del employates", "follow_suggestions.dismiss": "Ne monstrar plu", + "follow_suggestions.hints.featured": "Ti-ci profil ha esset selectet directmen del equip de {domain}.", + "follow_suggestions.hints.friends_of_friends": "Ti-ci profil es populari ínter tis qui tu seque.", + "follow_suggestions.hints.most_followed": "Ti-ci profil es un del max sequet sur {domain}.", + "follow_suggestions.hints.most_interactions": "Ti-ci profil ha recivet mult atention recentmen sur {domain}.", + "follow_suggestions.hints.similar_to_recently_followed": "Ti-ci profil es simil al profiles queles tu ha recentmen sequet.", "follow_suggestions.personalized_suggestion": "Personalisat suggestion", "follow_suggestions.popular_suggestion": "Populari suggestion", "follow_suggestions.view_all": "Vider omnicos", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index 45c6fb321d..c45543a803 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -22,6 +22,7 @@ "account.followers": "Imeḍfaren", "account.followers.empty": "Ar tura, ulac yiwen i yeṭṭafaṛen amseqdac-agi.", "account.followers_counter": "{count, plural, one {{count} n umeḍfar} other {{count} n imeḍfaren}}", + "account.following": "Yeṭṭafaṛ", "account.following_counter": "{count, plural, one {{counter} yettwaḍfaren} other {{counter} yettwaḍfaren}}", "account.follows.empty": "Ar tura, amseqdac-agi ur yeṭṭafaṛ yiwen.", "account.go_to_profile": "Ddu ɣer umaɣnu", @@ -39,6 +40,7 @@ "account.posts_with_replies": "Tisuffaɣ d tririyin", "account.report": "Cetki ɣef @{name}", "account.requested": "Di laɛḍil ad yettwaqbel. Ssit i wakken ad yefsex usuter n uḍfar", + "account.requested_follow": "{name} yessuter ad k-yeḍfer", "account.share": "Bḍu amaɣnu n @{name}", "account.show_reblogs": "Ssken-d inebḍa n @{name}", "account.statuses_counter": "{count, plural, one {{counter} n tsuffeɣt} other {{counter} n tsuffaɣ}}", @@ -57,7 +59,7 @@ "alert.unexpected.title": "Ayhuh!", "announcement.announcement": "Ulɣu", "audio.hide": "Ffer amesli", - "boost_modal.combo": "Tzemreḍ ad tetekkiḍ ɣef {combo} akken ad tessurfeḍ aya tikelt-nniḍen", + "boost_modal.combo": "Tzemreḍ ad tsiteḍ ɣef {combo} akken ad tzegleḍ aya tikelt i d-iteddun", "bundle_column_error.copy_stacktrace": "Nɣel tuccḍa n uneqqis", "bundle_column_error.error.title": "Uh, ala !", "bundle_column_error.network.title": "Tuccḍa deg uẓeṭṭa", @@ -73,7 +75,8 @@ "column.blocks": "Imiḍanen yettusḥebsen", "column.bookmarks": "Ticraḍ", "column.community": "Tasuddemt tadigant", - "column.directory": "Inig deg imaɣnuten", + "column.direct": "Tabdarin tusligin", + "column.directory": "Inig deg imeɣna", "column.domain_blocks": "Taɣulin yeffren", "column.favourites": "Imenyafen", "column.follow_requests": "Isuturen n teḍfeṛt", @@ -105,6 +108,7 @@ "compose_form.lock_disclaimer.lock": "yettwacekkel", "compose_form.placeholder": "D acu i itezzin deg wallaɣ?", "compose_form.poll.duration": "Tanzagt n tefrant", + "compose_form.poll.multiple": "Aṭas n ufran", "compose_form.poll.option_placeholder": "Taxtiṛt {number}", "compose_form.poll.single": "Fren yiwen", "compose_form.publish": "Suffeɣ", @@ -187,17 +191,20 @@ "explore.trending_links": "Isallen", "explore.trending_statuses": "Tisuffaɣ", "explore.trending_tags": "Ihacṭagen", + "filter_modal.added.review_and_configure_title": "Iɣewwaṛen n imzizdig", "filter_modal.added.settings_link": "asebter n yiɣewwaṛen", "filter_modal.select_filter.prompt_new": "Taggayt tamaynutt : {name}", "filter_modal.select_filter.search": "Nadi neɣ snulfu-d", "firehose.all": "Akk", "firehose.local": "Deg uqeddac-ayi", + "firehose.remote": "Iqeddacen nniḍen", "follow_request.authorize": "Ssireg", "follow_request.reject": "Agi", + "follow_suggestions.dismiss": "Ur ttɛawad ara ad t-id-sekneṭ", "follow_suggestions.who_to_follow": "Menhu ara ḍefṛeḍ", "followed_tags": "Ihacṭagen yettwaḍfaren", "footer.about": "Ɣef", - "footer.directory": "Akaram n imaɣnuten", + "footer.directory": "Akaram n imeɣna", "footer.get_app": "Awi-d asnas", "footer.invite": "Ɛreḍ-d kra n yimdanen", "footer.keyboard_shortcuts": "Inegzumen n unasiw", @@ -221,9 +228,12 @@ "home.column_settings.show_reblogs": "Ssken-d beṭṭu", "home.column_settings.show_replies": "Ssken-d tiririyin", "home.hide_announcements": "Ffer ulɣuyen", + "home.pending_critical_update.body": "Ma ulac aɣilif, leqqem aqeddac-ik Mastodon akken kan tzemreḍ !", "home.show_announcements": "Ssken-d ulɣuyen", "interaction_modal.no_account_yet": "Ulac-ik·ikem deg Maṣṭudun?", + "interaction_modal.on_another_server": "Deg uqeddac nniḍen", "interaction_modal.on_this_server": "Deg uqeddac-ayi", + "interaction_modal.sign_in": "Ur tekcimeḍ ara ɣer uqeddac-a. Anda yella umiḍan-ik·im ?", "interaction_modal.title.follow": "Ḍfer {name}", "intervals.full.days": "{number, plural, one {# n wass} other {# n wussan}}", "intervals.full.hours": "{number, plural, one {# n usarag} other {# n yesragen}}", @@ -351,12 +361,15 @@ "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!", "onboarding.follows.title": "Popular on Mastodon", "onboarding.profile.display_name": "Isem ara d-yettwaskanen", + "onboarding.share.message": "Nekk d {username} deg #Mastodon! Ḍfer iyi-d sya {url}", "onboarding.share.title": "Bḍu amaɣnu-inek·inem", "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:", "onboarding.start.skip": "Want to skip right ahead?", + "onboarding.start.title": "Tseggmeḍ-tt !", "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.", "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}", "onboarding.steps.publish_status.body": "Say hello to the world.", + "onboarding.steps.publish_status.title": "Aru tasuffeɣt-inek·inem tamezwarutt", "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.", "onboarding.steps.setup_profile.title": "Customize your profile", "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!", @@ -371,7 +384,10 @@ "poll_button.add_poll": "Rnu asenqed", "poll_button.remove_poll": "Kkes asenqed", "privacy.change": "Seggem tabaḍnit n yizen", + "privacy.direct.long": "Wid akk i d-yettwabdaren deg tuffeɣt", + "privacy.private.long": "Ala wid i k-yeṭṭafaṛen", "privacy.private.short": "Imeḍfaren", + "privacy.public.long": "Kra n win yellan deg Masṭudun neɣ berra-s", "privacy.public.short": "Azayez", "privacy_policy.title": "Tasertit tabaḍnit", "refresh": "Smiren", @@ -404,9 +420,14 @@ "report_notification.categories.other": "Ayen nniḍen", "report_notification.categories.spam": "Aspam", "report_notification.open": "Ldi aneqqis", + "search.no_recent_searches": "Ulac inadiyen ineggura", "search.placeholder": "Nadi", "search.search_or_paste": "Nadi neɣ senṭeḍ URL", + "search_popout.language_code": "Tangalt ISO n tutlayt", + "search_popout.options": "Iwellihen n unadi", + "search_popout.recent": "Inadiyen ineggura", "search_popout.user": "amseqdac", + "search_results.accounts": "Imeɣna", "search_results.all": "Akk", "search_results.hashtags": "Ihacṭagen", "search_results.see_all": "Wali-ten akk", @@ -471,7 +492,7 @@ "timeline_hint.resources.followers": "Imeḍfaṛen", "timeline_hint.resources.follows": "T·Yeṭafaṛ", "timeline_hint.resources.statuses": "Tisuffaɣ tiqdimin", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {# days}}", + "trends.counter_by_accounts": "{count, plural, one {{counter} n wemdan} other {{counter} n medden}} deg {days, plural, one {ass} other {{days} n wussan}} iɛeddan", "trends.trending_now": "Ayen mucaɛen tura", "ui.beforeunload": "Arewway-ik·im ad iruḥ ma yella tefeɣ-d deg Maṣṭudun.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index d469af5d50..36290cbb95 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -536,7 +536,7 @@ "privacy.public.long": "마스토돈 내외 모두", "privacy.public.short": "공개", "privacy.unlisted.additional": "공개와 똑같지만 게시물이 실시간 피드나 해시태그, 둘러보기, (계정 설정에서 허용했더라도) 마스토돈 검색에서 제외됩니다.", - "privacy.unlisted.long": "더 적은 알고리즘 팡파레", + "privacy.unlisted.long": "더 적은 알고리즘 팡파르", "privacy.unlisted.short": "조용한 공개", "privacy_policy.last_updated": "{date}에 마지막으로 업데이트됨", "privacy_policy.title": "개인정보처리방침", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index af975069b8..37c0dd1383 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -277,6 +277,7 @@ "follow_request.authorize": "Povoľ prístup", "follow_request.reject": "Odmietni", "follow_requests.unlocked_explanation": "Síce Váš učet nie je uzamknutý, ale {domain} tím si myslel že môžete chcieť skontrolovať žiadosti o sledovanie z týchto účtov manuálne.", + "follow_suggestions.curated_suggestion": "Staff pick", "follow_suggestions.dismiss": "Znovu nezobrazuj", "follow_suggestions.personalized_suggestion": "Prispôsobené odporúčania", "follow_suggestions.popular_suggestion": "Populárne návrhy", diff --git a/app/javascript/mastodon/locales/tai.json b/app/javascript/mastodon/locales/tai.json index b1a242c751..fe6b8fe650 100644 --- a/app/javascript/mastodon/locales/tai.json +++ b/app/javascript/mastodon/locales/tai.json @@ -2,25 +2,25 @@ "about.blocks": "Siū kuán-tsè ê su-hāu-khì", "about.contact": "Liân-lo̍k:", "about.disclaimer": "Ling-khí-tshiūnn sī tsi̍t-ê khai-guân nńg-thé,i ê siong-phiau sī Mastodon gGmbH.", - "account.badges.bot": "Bot", - "account.cancel_follow_request": "Withdraw follow request", + "account.badges.bot": "Tsū-tōng-ê", + "account.cancel_follow_request": "Mài-koh tui-tsong", "account.media": "Mûi-thé", "account.mention": "Thê-khí @{name}", - "account.posts": "Toots", - "account.posts_with_replies": "Toots and replies", - "account.requested": "Awaiting approval", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", - "account_note.placeholder": "Click to add a note", - "column.pins": "Pinned toot", - "community.column_settings.media_only": "Media only", - "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.publish_form": "Publish", - "compose_form.spoiler.marked": "Text is hidden behind warning", - "compose_form.spoiler.unmarked": "Text is not hidden", - "confirmations.delete.message": "Are you sure you want to delete this status?", - "confirmations.domain_block.confirm": "Hide entire domain", + "account.posts": "Huah-siann", + "account.posts_with_replies": "Huah-siann kah huê-ìng", + "account.requested": "Tán-thāi phue-tsún", + "account.statuses_counter": "{count, plural, one {{counter} Huah-siann} other {{counter} Huah-siann}}", + "account_note.placeholder": "Tiám tsi̍t-ē ka-thiam pī-tsù", + "column.pins": "Tah thâu-tsîng ê huah-siann", + "community.column_settings.media_only": "Kan-na muî-thé", + "compose_form.encryption_warning": "Tī Mastodon tah huah-siann m̄-sī tuan-tuì-tuan ka-pì ê. M̄-thang tī Mastodon hun-hióng jīm-hô bín-kám ê tsū-sìn.", + "compose_form.hashtag_warning": "Tsit-ê huah-siann in-uī m̄-sī kong-khai ê, sóo-í buē tī jīm-hô tsú-tê piau-tshiam hián-sī. Kan-na kong-khai ê huah-siann ē-tàng hōo tsú-tê piau-tshiam tshâ-tshuē.", + "compose_form.placeholder": "Lí teh siūnn siánn?", + "compose_form.publish_form": "Huah--tshut-khì", + "compose_form.spoiler.marked": "Î-tû luē-iông kíng-kò", + "compose_form.spoiler.unmarked": "Tsing-ka luē-iông kíng-kò", + "confirmations.delete.message": "Lí kám bueh thâi-tiāu tsi̍t-ē huah-siann?", + "confirmations.domain_block.confirm": "Hong-só tsíng-kò bāng-hi̍k", "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.", "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.", "embed.instructions": "Embed this status on your website by copying the code below.", @@ -46,7 +46,7 @@ "keyboard_shortcuts.muted": "to open muted users list", "keyboard_shortcuts.my_profile": "to open your profile", "keyboard_shortcuts.notifications": "to open notifications column", - "keyboard_shortcuts.open_media": "to open media", + "keyboard_shortcuts.open_media": "Khui muî-thé", "keyboard_shortcuts.pinned": "to open pinned toots list", "keyboard_shortcuts.profile": "to open author's profile", "keyboard_shortcuts.reply": "to reply", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 7aa54ae8ce..0865b18542 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": "เหตุผลไม่พร้อมใช้งาน", @@ -380,7 +380,7 @@ "lightbox.next": "ถัดไป", "lightbox.previous": "ก่อนหน้า", "limited_account_hint.action": "แสดงโปรไฟล์ต่อไป", - "limited_account_hint.title": "มีการซ่อนโปรไฟล์นี้โดยผู้ควบคุมของ {domain}", + "limited_account_hint.title": "มีการซ่อนโปรไฟล์นี้โดยผู้กลั่นกรองของ {domain}", "link_preview.author": "โดย {name}", "lists.account.add": "เพิ่มไปยังรายการ", "lists.account.remove": "เอาออกจากรายการ", @@ -637,9 +637,9 @@ "sign_in_banner.sign_in": "เข้าสู่ระบบ", "sign_in_banner.sso_redirect": "เข้าสู่ระบบหรือลงทะเบียน", "sign_in_banner.text": "เข้าสู่ระบบเพื่อติดตามโปรไฟล์หรือแฮชแท็ก ชื่นชอบ แชร์ และตอบกลับโพสต์ คุณยังสามารถโต้ตอบจากบัญชีของคุณในเซิร์ฟเวอร์อื่น", - "status.admin_account": "เปิดส่วนติดต่อการควบคุมสำหรับ @{name}", - "status.admin_domain": "เปิดส่วนติดต่อการควบคุมสำหรับ {domain}", - "status.admin_status": "เปิดโพสต์นี้ในส่วนติดต่อการควบคุม", + "status.admin_account": "เปิดส่วนติดต่อการกลั่นกรองสำหรับ @{name}", + "status.admin_domain": "เปิดส่วนติดต่อการกลั่นกรองสำหรับ {domain}", + "status.admin_status": "เปิดโพสต์นี้ในส่วนติดต่อการกลั่นกรอง", "status.block": "ปิดกั้น @{name}", "status.bookmark": "เพิ่มที่คั่นหน้า", "status.cancel_reblog_private": "เลิกดัน", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index fa728a6821..02c9159be5 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -214,7 +214,7 @@ "emoji_button.food": "Yiyecek ve İçecek", "emoji_button.label": "İfade ekle", "emoji_button.nature": "Doğa", - "emoji_button.not_found": "İfade yok!! (╯°□°)╯︵ ┻━┻", + "emoji_button.not_found": "Eşleşen emoji yok", "emoji_button.objects": "Nesneler", "emoji_button.people": "Kullanıcılar", "emoji_button.recent": "Sık kullanılan", @@ -348,7 +348,7 @@ "keyboard_shortcuts.description": "Açıklama", "keyboard_shortcuts.direct": "özel değinmeler sütununu açmak için", "keyboard_shortcuts.down": "Listede aşağıya inmek için", - "keyboard_shortcuts.enter": "gönderiyi aç", + "keyboard_shortcuts.enter": "Gönderiyi açınız", "keyboard_shortcuts.favourite": "Gönderiyi favorilerine ekle", "keyboard_shortcuts.favourites": "Gözde listeni aç", "keyboard_shortcuts.federated": "Federe akışı aç", diff --git a/config/locales/activerecord.el.yml b/config/locales/activerecord.el.yml index 4eae3b6a00..01e9a75f98 100644 --- a/config/locales/activerecord.el.yml +++ b/config/locales/activerecord.el.yml @@ -53,3 +53,7 @@ el: position: elevated: δεν μπορεί να είναι μεγαλύτερο από τον τρέχοντα ρόλο σας own_role: δεν μπορεί να αλλάξει με τον τρέχοντα ρόλο σας + webhook: + attributes: + events: + invalid_permissions: δεν μπορείτε να συμπεριλάβετε συμβάντα για τα οποία δεν έχετε τα δικαιώματα diff --git a/config/locales/be.yml b/config/locales/be.yml index 9bfc46e2a7..13cbcd8ffc 100644 --- a/config/locales/be.yml +++ b/config/locales/be.yml @@ -795,6 +795,7 @@ be: disabled: Нікому users: Лакальным карыстальнікам, якія ўвайшлі registrations: + moderation_recommandation: Пераканайцеся, што ў вас ёсць адэкватная і аператыўная каманда мадэратараў, перш чым адчыняць рэгістрацыю для ўсіх жадаючых! preamble: Кантралюйце, хто можа ствараць уліковы запіс на вашым серверы. title: Рэгістрацыя registrations_mode: @@ -802,6 +803,7 @@ be: approved: Для рэгістрацыі патрабуецца пацвярджэнне none: Нікому не магчыма зарэгістравацца open: Любому магчыма зарэгістравацца + warning_hint: Мы рэкамендуем выкарыстоўваць рэжым "для рэгістрацыі патрабуецца пацвярджэнне", калі вы не ўпэўненыя, што ваша каманда мадэратараў зможа своечасова спраўляцца са спамам і шкоднымі рэгістрацыямі. security: authorized_fetch: Патрабаваць аўтэнтыфікацыю ад федэратыўных сервераў authorized_fetch_hint: Патрабаванне аўтэнтыфікацыі ад федэратыўных сервераў дазваляе больш строга выконваць блакіроўкі як на ўзроўні карыстача, так і на ўзроўні сервера. Аднак пры гэтым зніжаецца прадукцыйнасць, памяншаецца ахоп вашых адказаў на допісы і могуць узнікнуць праблемы сумяшчальнасці з некаторымі федэратыўнымі сэрвісамі. Акрамя таго, гэта не перашкодзіць атрымліваць вашыя публічныя допісы і ўліковыя запісы. @@ -1002,6 +1004,9 @@ be: title: Вэбхукі webhook: Вэбхук admin_mailer: + auto_close_registrations: + body: У сувязі з адсутнасцю актыўнасці мадэратараў у апошні час, рэгістрацыя на %{instance} была аўтаматычна пераведзена ў рэжым, які патрабуе ручной праверкі, каб прадухіліць выкарыстанне %{instance} у якасці платформы для патэнцыйных зламыснікаў. Вы можаце ў любы момант пераключыць яго назад ў рэжым "вольная рэгістрацыя". + subject: Рэгістрацыі для %{instance} былі аўтаматычна пераведзены ў рэжым "патрабуецца пацвярджэнне" new_appeal: actions: delete_statuses: выдаліць іх допісы diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 2f316984b5..4b5ec815ca 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -969,8 +969,8 @@ ca: webhook: Webhook admin_mailer: auto_close_registrations: - body: A causa de la manca d'activitat recent dels moderadors, les altes a %{instance} han passat automàticament a necessitar una revisió manual, per tal d'evitar que %{instance} es faci servir com a plataforma de potencials mals actuants. Podeu revertir-ho a altes obertes en qualsevol moment. - subject: Les altes a %{instance} han passat automàticament a necessitar aprovació + body: A causa de la manca d'activitat recent dels moderadors, s'ha passat el procés d'alta de %{instance} al mode de revisió manual, a fi d'evitar que malfactors l'utilitzin com a plataforma. Podeu obrir el procés de registre en qualsevol moment. + subject: S'ha passat el procés d'alta de %{instance} al mode de validació manual new_appeal: actions: delete_statuses: eliminar els seus tuts diff --git a/config/locales/da.yml b/config/locales/da.yml index 43f4b64eef..5ceaad9705 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -500,7 +500,7 @@ da: instance_accounts_dimension: Mest fulgte konti instance_accounts_measure: gemte konti instance_followers_measure: vores følgere dér - instance_follows_measure: deres følgere dér + instance_follows_measure: deres følgere her instance_languages_dimension: Topsprog instance_media_attachments_measure: gemte medievedhæftninger instance_reports_measure: anmeldelser af dem @@ -1445,7 +1445,7 @@ da: before: 'Inder der fortsættes, læs venligst disse notater omhyggeligt:' cooldown: Efter flytningen er der en venteperiode, hvor kontoen ikke kan flyttes igen disabled_account: Efterfølgende er din nuværende konto ikke fuldt funktionsdygtig, der er dog adgang til dataeksport samt genaktivering. - followers: Denne handling vil flytte alle følgere fra den aktuelle konto til den nye ditto + followers: Denne handling vil flytte alle følgere fra den aktuelle konto til den nye konto only_redirect_html: Alternativt kan du oprette en omdirigering for din profil alene. other_data: Ingen øvrige data flyttes automatisk redirect: Din nuværende kontoprofil opdateres med en omdirigeringsnotits og ekskluderes fra søgninger diff --git a/config/locales/devise.pt-BR.yml b/config/locales/devise.pt-BR.yml index 8b53f96514..e79a83c431 100644 --- a/config/locales/devise.pt-BR.yml +++ b/config/locales/devise.pt-BR.yml @@ -12,6 +12,7 @@ pt-BR: last_attempt: Você tem mais uma tentativa antes de sua conta ser bloqueada. locked: Sua conta está bloqueada. not_found_in_database: "%{authentication_keys} ou senha inválida." + omniauth_user_creation_failure: Erro ao criar uma conta para esta identidade. pending: Sua conta está sendo revisada. timeout: Sua sessão expirou. Por favor, entre novamente para continuar. unauthenticated: Você precisa entrar ou criar uma conta antes de continuar. diff --git a/config/locales/doorkeeper.th.yml b/config/locales/doorkeeper.th.yml index 3c2c75565b..067e065588 100644 --- a/config/locales/doorkeeper.th.yml +++ b/config/locales/doorkeeper.th.yml @@ -156,13 +156,13 @@ th: admin:read:ip_blocks: อ่านข้อมูลที่ละเอียดอ่อนของการปิดกั้น IP ทั้งหมด admin:read:reports: อ่านข้อมูลที่ละเอียดอ่อนของรายงานและบัญชีที่ได้รับการรายงานทั้งหมด admin:write: ปรับเปลี่ยนข้อมูลทั้งหมดในเซิร์ฟเวอร์ - admin:write:accounts: ทำการกระทำการควบคุมบัญชี - admin:write:canonical_email_blocks: ทำการกระทำการควบคุมการปิดกั้นอีเมลมาตรฐาน - admin:write:domain_allows: ทำการกระทำการควบคุมการอนุญาตโดเมน - admin:write:domain_blocks: ทำการกระทำการควบคุมการปิดกั้นโดเมน - admin:write:email_domain_blocks: ทำการกระทำการควบคุมการปิดกั้นโดเมนอีเมล - admin:write:ip_blocks: ทำการกระทำการควบคุมการปิดกั้น IP - admin:write:reports: ทำการกระทำการควบคุมรายงาน + admin:write:accounts: ทำการกระทำการกลั่นกรองต่อบัญชี + admin:write:canonical_email_blocks: ทำการกระทำการกลั่นกรองต่อการปิดกั้นอีเมลมาตรฐาน + admin:write:domain_allows: ทำการกระทำการกลั่นกรองต่อการอนุญาตโดเมน + admin:write:domain_blocks: ทำการกระทำการกลั่นกรองต่อการปิดกั้นโดเมน + admin:write:email_domain_blocks: ทำการกระทำการกลั่นกรองต่อการปิดกั้นโดเมนอีเมล + admin:write:ip_blocks: ทำการกระทำการกลั่นกรองต่อการปิดกั้น IP + admin:write:reports: ทำการกระทำการกลั่นกรองต่อรายงาน crypto: ใช้การเข้ารหัสแบบต้นทางถึงปลายทาง follow: ปรับเปลี่ยนความสัมพันธ์ของบัญชี push: รับการแจ้งเตือนแบบผลักของคุณ diff --git a/config/locales/el.yml b/config/locales/el.yml index 8b632a358b..16c042f185 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -309,6 +309,7 @@ el: unpublish: Αναίρεση δημοσίευσης unpublished_msg: Επιτυχής ακύρωση δημοσίευσης ανακοίνωσης! updated_msg: Επιτυχής ενημέρωση ανακοίνωσης! + critical_update_pending: Κρίσιμη ενημέρωση σε αναμονή custom_emojis: assign_category: Ανάθεση κατηγορίας by_domain: Τομέας @@ -382,6 +383,15 @@ el: undo: Αφαίρεση συναλλαγής με τον τομέα domain_blocks: add_new: Προσθήκη νέου αποκλεισμού τομέα + confirm_suspension: + cancel: Άκυρο + confirm: Αναστολή + permanent_action: Η κατάργηση της αναστολής δε θα αποκαταστήσει καθόλου δεδομένα ή σχέση. + preamble_html: Πρόκειται να αναστείλετε το %{domain} και τους υποτομείς του. + remove_all_data: Αυτό θα αφαιρέσει όλο το περιεχόμενο, τα μέσα και τα δεδομένα προφίλ για τους λογαριασμούς αυτού του τομέα από το διακομιστή σας. + stop_communication: Ο διακομιστής σας θα σταματήσει να επικοινωνεί με αυτούς τους διακομιστές. + title: Επιβεβαίωση αποκλεισμού τομέα για %{domain} + undo_relationships: Αυτό θα αναιρέσει οποιαδήποτε σχέση ακολουθίας μεταξύ των λογαριασμών αυτών των διακομιστών και των δικών σας. created_msg: Ο αποκλεισμός τομέα είναι υπό επεξεργασία destroyed_msg: Ο αποκλεισμός τομέα αναιρέθηκε domain: Τομέας @@ -415,6 +425,7 @@ el: view: Εμφάνιση αποκλεισμού τομέα email_domain_blocks: add_new: Προσθήκη νέου + allow_registrations_with_approval: Να επιτρέπονται εγγραφές με έγκριση attempts_over_week: one: "%{count} προσπάθεια την τελευταία εβδομάδα" other: "%{count} προσπάθειες εγγραφής την τελευταία εβδομάδα" @@ -524,6 +535,7 @@ el: total_reported: Αναφορές προς εκείνους total_storage: Συνημμένα πολυμέσα totals_time_period_hint_html: Τα σύνολα που εμφανίζονται παρακάτω περιλαμβάνουν στοιχεία από την αρχή. + unknown_instance: Προς το παρόν δεν υπάρχει καμία εγγραφή αυτού του τομέα σε αυτόν το διακομιστή. invites: deactivate_all: Απενεργοποίηση όλων filter: @@ -600,6 +612,7 @@ el: created_at: Αναφέρθηκε delete_and_resolve: Διαγραφή αναρτήσεων forwarded: Προωθημένα + forwarded_replies_explanation: Αυτή η αναφορά είναι από απομακρυσμένο χρήστη και για απομακρυσμένο περιεχόμενο. Σας έχει διαβιβαστεί, επειδή το αναφερόμενο περιεχόμενο απαντά σε έναν από τους χρήστες σας. forwarded_to: Προώθημένα προς %{domain} mark_as_resolved: Σημείωση ως επιλυμένο mark_as_sensitive: Σήμανση ως ευαίσθητο diff --git a/config/locales/es.yml b/config/locales/es.yml index f5f65d9b1f..e5ccee5ee3 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -1847,7 +1847,7 @@ es: edit_profile_step: Puedes personalizar tu perfil subiendo una foto de perfil, cambiando tu nombre de usuario y mucho más. Puedes optar por revisar a los nuevos seguidores antes de que puedan seguirte. explanation: Aquí hay algunos consejos para empezar final_action: Empezar a publicar - final_step: "¡Empieza a publicar! Incluso sin seguidores, tus publicaciones públicas pueden ser vistas por otros, por ejemplo en la línea de tiempo local o en etiquetas. Tal vez quieras presentarte con la etiqueta de #introducciones." + final_step: "¡Empieza a publicar! Incluso sin seguidores, tus publicaciones públicas pueden ser vistas por otros, por ejemplo en la línea de tiempo local o en etiquetas. Tal vez quieras presentarte con la etiqueta de #presentación." full_handle: Su sobrenombre completo full_handle_hint: Esto es lo que le dirías a tus amigos para que ellos puedan enviarte mensajes o seguirte desde otra instancia. subject: Bienvenido a Mastodon diff --git a/config/locales/eu.yml b/config/locales/eu.yml index 768a84b7c1..6c625d08bd 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -769,6 +769,7 @@ eu: disabled: Inori ez users: Saioa hasita duten erabiltzaile lokalei registrations: + moderation_recommandation: Mesedez, ziurtatu moderazio-talde egokia eta erreaktiboa duzula erregistroak guztiei ireki aurretik! preamble: Kontrolatu nork sortu dezakeen kontua zerbitzarian. title: Izen emateak registrations_mode: @@ -776,6 +777,7 @@ eu: approved: Izena emateko onarpena behar da none: Ezin du inork izena eman open: Edonork eman dezake izena + warning_hint: "“Izena emateko onarpena behar da” erabiltzea gomendatzen dugu, baldin eta ez badakizu ziur zure moderazio-taldeak spama eta erregistro maltzurrak arrazoizko denboran erantzun ditzakeela." security: authorized_fetch: Eskatu autentifikazioa federatutako zerbitzarietatik authorized_fetch_hint: Zerbitzari federatuen autentifikazioa eskatzeak erabiltzaile-mailako zein zerbitzari-mailako blokeak zorrotzago betearaztea ahalbidetzen du. Hala ere, horrek errendimendu galera dakar, zure erantzunen irismena murrizten du eta baliteke federatutako zerbitzu batzuekin bateragarritasun-arazoak sortu ahal izatea. Horrez gain, horrek ez du eragotziko aktore dedikatuek zure mezu eta kontu publikoak eskuratzea. diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 15f448bc91..ad6d6e9c07 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -767,6 +767,7 @@ fi: disabled: Ei kenellekkään users: Kirjautuneille paikallisille käyttäjille registrations: + moderation_recommandation: Varmista, että sinulla on riittävä ja toimintavalmis joukko moderaattoreita ennen kuin avaat rekisteröitymiset kaikille! preamble: Määritä, kuka voi luoda tilin palvelimellesi. title: Rekisteröityminen registrations_mode: @@ -774,6 +775,7 @@ fi: approved: Rekisteröinti vaatii hyväksynnän none: Kukaan ei voi rekisteröityä open: Kaikki voivat rekisteröityä + warning_hint: Suosittelemme käyttämään asetusta “Rekisteröinti vaatii hyväksynnän” ellet ole varma siitä, että moderaattorit ovat valmiina käsittelemään roskapostia ja haittarekisteröitymisiä oikea-aikaisesti. security: authorized_fetch: Vaadi todennus liittoutuvilta palvelimilta authorized_fetch_hint: Todennuksen vaatiminen liittoutuvilta palvelimilta mahdollistaa sekä käyttäjä- että palvelintason estojen tiukemman valvonnan. Tämä tapahtuu kuitenkin suorituskyvyn kustannuksella, vähentää vastauksiesi tavoittavuutta ja voi aiheuttaa yhteensopivuusongelmia joidenkin liittoutuvien palvelujen kanssa. Tämä ei myöskään estä omistautuneita toimijoita hakemasta julkisia julkaisujasi ja tilejäsi. @@ -966,6 +968,9 @@ fi: title: Webhookit webhook: Webhook admin_mailer: + auto_close_registrations: + body: Viimeaikaisen moderaattoritoiminnan puutteen vuoksi %{instance} rekisteröinnit on vaihdettu automaattisesti manuaaliseen tarkasteluun, jotta %{instance} ei käytetä mahdollisien huonojen toimijoiden alustana. Voit vaihtaa sen takaisin avaamalla rekisteröinnit milloin tahansa. + subject: Rekisteröinnit %{instance} on automaattisesti vaihdettu vaatimaan hyväksyntää new_appeal: actions: delete_statuses: poistaa hänen julkaisunsa diff --git a/config/locales/fo.yml b/config/locales/fo.yml index 0e59783a06..555b82a79d 100644 --- a/config/locales/fo.yml +++ b/config/locales/fo.yml @@ -767,6 +767,7 @@ fo: disabled: Til ongan users: Fyri lokalum brúkarum, sum eru ritaðir inn registrations: + moderation_recommandation: Vinarliga tryggja tær, at tú hevur eitt nøktandi og klárt umsjónartoymi, áðreen tú letur upp fyri skrásetingum frá øllum! preamble: Stýr, hvør kann stovna eina kontu á tínum ambætara. title: Skrásetingar registrations_mode: @@ -774,6 +775,7 @@ fo: approved: Góðkenning kravd fyri tilmelding none: Eingin kann tilmelda seg open: Øll kunnu tilmelda seg + warning_hint: Vit mæla til at brúka "Góðkenning kravd fyri tilmelding" uttan so at tú er fullvís/ur í, at umsjónartoymið hjá tær kann handfara ruskpost og óndsinnaðar skrásetingar so hvørt. security: authorized_fetch: Krev samgildi frá sameindum ambætarum authorized_fetch_hint: At krevja samgildi frá sameindum ambætarum ger strangari útinning av blokkum bæði á brúkara- og ambætara-stigi møguliga. Tó so, kostnaðurin er ein avriksstraffur, minkar um hvussu langt svarini hjá tær røkka og kann viðføra sambæristruplleikar við summar sameindar tænastur. Harafturat forðar hetta ikki teimum, ið miðvíst leggja seg eftir at heinta tínar almennu postar og kontur. diff --git a/config/locales/he.yml b/config/locales/he.yml index fc57f9fd58..b5a98dd24d 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -795,6 +795,7 @@ he: disabled: לאף אחד users: למשתמשים מקומיים מחוברים registrations: + moderation_recommandation: יש לוודא שלאתר יש צוות מנחות ומנחי שיחה מספק ושירותי בטרם תבחרו לפתוח הרשמה לכולם! preamble: שליטה בהרשאות יצירת חשבון בשרת שלך. title: הרשמות registrations_mode: @@ -802,6 +803,7 @@ he: approved: נדרש אישור הרשמה none: אף אחד לא יכול להרשם open: כל אחד יכול להרשם + warning_hint: אנו ממליצים להפעיל דרישה לאישור ידני של הרשמה אלא אם אתם מאמינים שצוות הנחיית השיחות שלכם יוכל להסתדר בזריזות עם מפיצי תכנים פוגעניים או פרסומיים על בסיס קבוע. security: authorized_fetch: לדרוש הזדהות מול שרתים בפדרציה authorized_fetch_hint: הדרישה להזדהות מול שרתים בפדרציה מאפשרת חסימה יותר יעילה ברמת המשתמש וברמת שרת. עם זאת, הדרישה באה עם מחיר של נפילת ביצועים, מקטינה את מעגל התפוצה של התשובות שלך, ועשויה ליצור אי תאימות מול שירותים אחרים בפדרציה. בנוסף, זה לא ימנע מצדדים החלטיים לקבל גישת קריאה להודעות ופרופילים ציבוריים. diff --git a/config/locales/hu.yml b/config/locales/hu.yml index b902d0e6c2..456636d4c5 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -767,7 +767,7 @@ hu: disabled: Senkinek users: Bejelentkezett helyi felhasználóknak registrations: - moderation_recommandation: Győződjünk meg arról, hogy megfelelő és reaktív moderátor csapatunk van, mielőtt mindenki számára megnyitjuk a regisztrációt! + moderation_recommandation: Győződj meg arról, hogy megfelelő és gyors reagálású moderátor csapatod van, mielőtt mindenki számára megnyitod a regisztrációt! preamble: Szabályozd, hogy ki hozhat létre fiókot a kiszolgálón. title: Regisztrációk registrations_mode: @@ -775,7 +775,7 @@ hu: approved: A regisztráció engedélyhez kötött none: Senki sem regisztrálhat open: Bárki regisztrálhat - warning_hint: Célszerű a "Jóváhagyás szükséges a regisztrációhoz” lehetőség használata, hkivéve, ha biztos vagyunk abban, hogy a moderátor csapat időben tudja kezelni a szemetet és a rosszindulatú regisztrációkat. + warning_hint: Javasoljuk a "Jóváhagyás szükséges a regisztrációhoz” lehetőség használatát, hacsak nem vagy biztos abban, hogy a moderátor csapatod időben tudja kezelni a szemetet és a rosszindulatú regisztrációkat. security: authorized_fetch: Hitelesítés szükséges a föderációs kiszolgálóktól authorized_fetch_hint: A föderációs szerverek hitelesítésének szükségessége lehetővé teszi mind a felhasználói mind a szerver szintű blokkok szigorúbb végrehajtását. Ez azonban a teljesítménybüntetés árán jár, csökkenti a válaszok elérhetőségét és kompatibilitási problémákat vethet fel egyes föderációs szolgáltatásokkal. Emellett ez nem akadályozza meg a dedikált szereplőket abban, hogy nyilvános bejegyzéseiket és fiókjaikat letöltsék. diff --git a/config/locales/ie.yml b/config/locales/ie.yml index 7ab7f953be..4b84d53bd5 100644 --- a/config/locales/ie.yml +++ b/config/locales/ie.yml @@ -767,6 +767,7 @@ ie: disabled: A necun users: A local usatores qui ha initiat session registrations: + moderation_recommandation: Ples assecurar que tu have un equip de moderation quel es adequat e reactiv ante que tu aperte registrationes a omnes! preamble: Decider qui posse crear un conto che vor servitor. title: Registrationes registrations_mode: @@ -774,6 +775,7 @@ ie: approved: Aprobation besonat por adhesion none: Nequi posse registrar se open: Quicunc posse registrar se + warning_hint: Noi recomanda usar "Aprobation besonat por inscrir" si tu ne es confident que tui equip de moderation posse gerer spam e maliciosi registrationes in un curt témpor. security: authorized_fetch: Postular autentication de federat servitores authorized_fetch_hint: Postular autentication de federat servitores possibilisa plu strict infortiament de ambi usatori e servitori bloccas. Támen, ti fórsan va limitar li potentie de vor servitor, reducter li atingement de vor responses, e possibilmen introducter problemas de compatibilitá con quelc federat servicies. Additionalmen, ti ne va preventer dedicat actores de accesser vor public postas e contos. @@ -966,6 +968,9 @@ ie: title: Webcrocs webhook: Webcroc admin_mailer: + auto_close_registrations: + body: Pro un manca de recent activitá moderatori, registrationes sur %{instance} ha esset automaticmen changeat al mode quel besona un manual recension, por que %{instance} ne mey esser usat quam un platform por malfatores. Tu posse rechangear a apert registrationes quandecunc. + subject: Registrationes por %{instance} ha esset automaticmen changeat al mode quel besona aprobation new_appeal: actions: delete_statuses: deleter su postas diff --git a/config/locales/kab.yml b/config/locales/kab.yml index f50a357608..a24d8994fd 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -11,7 +11,7 @@ kab: followers: one: Umeḍfaṛ other: Imeḍfaṛen - following: Yeṭafaṛ + following: Yeṭṭafaṛ last_active: armud aneggaru nothing_here: Ulac kra da! posts: @@ -542,7 +542,7 @@ kab: add_new: Rnu amaynut filters: contexts: - account: Imuɣna + account: Imeɣna notifications: Ilɣa thread: Idiwenniyen edit: @@ -654,7 +654,7 @@ kab: relationships: activity: Armud n umiḍan followers: Imeḍfaṛen - following: Yeṭafaṛ + following: Yeṭṭafaṛ invited: Yettwancad last_active: Armud aneggaru most_recent: Melmi kan diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 2e354828bd..851c3c74b8 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -755,6 +755,7 @@ ko: disabled: 아무에게도 안 함 users: 로그인 한 사용자에게 registrations: + moderation_recommandation: 모두에게 가입을 열기 전에 적절하고 반응이 빠른 중재 팀을 데리고 있는지 확인해 주세요! preamble: 누가 이 서버에 계정을 만들 수 있는지 제어합니다. title: 가입 registrations_mode: @@ -762,6 +763,7 @@ ko: approved: 가입하려면 승인이 필요함 none: 아무도 가입 할 수 없음 open: 누구나 가입 할 수 있음 + warning_hint: 당신의 중재 팀이 스팸이나 악의적인 가입을 시기적절하게 처리할 수 있다고 자신할 수 없다면 "가입이 승인을 요구하도록" 설정하는 것을 추천합니다. security: authorized_fetch: 연합된 서버들에게서 인증 필수 authorized_fetch_hint: 연합된 서버들에게서 인증을 요구하는 것은 사용자 레벨과 서버 레벨의 차단을 좀 더 확실하게 해줍니다. 한편으로는 성능적인 페널티, 답글의 전달 범위 감소, 몇몇 연합된 서비스들과의 호환성 문제가 있을 가능성이 있습니다. 추가적으로 이 기능은 전용 액터가 공개된 게시물이나 계정을 페치하는 것은 막지 않습니다. @@ -950,6 +952,9 @@ ko: title: 웹훅 webhook: 웹훅 admin_mailer: + auto_close_registrations: + body: 최근 모더레이터 활동 부족으로, %{instance}가 안좋은 일에 사용되는 것을 방지하기 위해 %{instance}의 가입이 수동 심사를 요구하도록 자동으로 변경되었습니다. 언제든지 가입을 다시 열 수 있습니다. + subject: "%{instance}의 가입이 승인을 필요로 하도록 자동으로 변경되었습니다" new_appeal: actions: delete_statuses: 게시물을 삭제하는 것 diff --git a/config/locales/lad.yml b/config/locales/lad.yml index 77501e3b32..d75d0d44c9 100644 --- a/config/locales/lad.yml +++ b/config/locales/lad.yml @@ -767,6 +767,7 @@ lad: disabled: A dinguno users: Para los utilizadores lokales ke entrado en su kuento registrations: + moderation_recommandation: Por favor, asigurate ke tyenes una taifa de moderasyon adekuada i reaktiva antes de avrir los enrejistramyentos a todos! preamble: Kontrola ken puede kriyar un kuento en tu sirvidor. title: Enrejistramientos registrations_mode: @@ -774,6 +775,7 @@ lad: approved: Se rekiere achetasion para enrejistrarse none: Permete a los utilizadores trokar la konfigurasyon del sitio open: Kualkiera puede enrejistrarse + warning_hint: Rekomendamos el uzo de "Se rekiere achetasion para enrejistrarse" a manko ke estes siguro ke tu taifa de moderasyon puede moderar el spam i los enrejistramyentos malisiozos en un tyempo razonavle. security: authorized_fetch: Rekere autentifikasyon de sirvidores federados authorized_fetch_hint: Rekerir autentifikasyon de sirvidores federados permite un forsamyento mas estrikto de los blokos a nivel de utilizador i a nivel de sirvidor. Malgrado esto, el koste de esto es una penalizasyon de efisyensya, reduksyon del alkanse de tus repuestas i puede introduzir problemas de kompatibilita kon algunos sirvisyos federados. Ademas, esto no impidira ke aktores dedikados obtengan tus kuentos publikos i publikasyones publikas. @@ -966,6 +968,9 @@ lad: title: Webhooks webhook: Webhook admin_mailer: + auto_close_registrations: + body: Por la falta de moderadores aktivos, los enrejistramyentos en %{instance} tyenen sido trokados otomatikamente para rekerir revizyon manuala, para ke %{instance} no se utilize potensyalmente komo platforma por malos aktores. Puedes trokarlo de muevo para avrir los enrejistramyentos en kualseker momento. + subject: Enrejistramyentos de %{instance} fueron otomatikamente trokados i agora nesesitan aprovasyon new_appeal: actions: delete_statuses: para supremir sus mesajes diff --git a/config/locales/lt.yml b/config/locales/lt.yml index f00cc97fbb..590062f3d9 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -281,6 +281,8 @@ lt: desc_html: Tai priklauso nuo hCaptcha išorinių skriptų, kurie gali kelti susirūpinimą dėl saugumo ir privatumo. Be to, dėl to registracijos procesas kai kuriems žmonėms (ypač neįgaliesiems) gali būti gerokai sunkiau prieinami. Dėl šių priežasčių apsvarstyk alternatyvias priemones, pavyzdžiui, patvirtinimu arba kvietimu grindžiamą registraciją. domain_blocks: all: Visiems + registrations: + moderation_recommandation: Prieš atidarant registraciją visiems, įsitikink, kad turi tinkamą ir reaguojančią prižiūrėjimo komandą! software_updates: description: Rekomenduojama nuolat atnaujinti Mastodon diegyklę, kad galėtum naudotis naujausiais pataisymais ir funkcijomis. Be to, kartais labai svarbu laiku naujinti Mastodon, kad būtų išvengta saugumo problemų. Dėl šių priežasčių Mastodon kas 30 minučių tikrina, ar yra atnaujinimų, ir praneša tau apie tai pagal tavo el. pašto pranešimų parinktis. statuses: @@ -304,6 +306,9 @@ lt: edit_preset: Keisti įspėjimo nustatymus title: Valdyti įspėjimo nustatymus admin_mailer: + auto_close_registrations: + body: Dėl pastarojo meto peržiūrėtojų aktyvumo trūkumo %{instance} registracija buvo automatiškai pakeista į reikalaujančią rankinės būdo peržiūros, kad %{instance} nebūtų naudojama kaip platforma potencialiems blogiems veikėjams. Bet kuriuo metu gali ją vėl perjungti į atvirą registraciją. + subject: "%{instance} registracijos automatiškai pakeistos į reikalaujančias patvirtinimo" new_report: body: "%{reporter} parašė skundą apie %{target}" body_remote: Kažkas iš %{domain} parašė skundą apie %{target} diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 79396d627f..ea91fd7dfe 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -767,6 +767,7 @@ pt-BR: disabled: Para ninguém users: Para usuários locais logados registrations: + moderation_recommandation: Por favor, certifique-se de ter uma equipe de moderação adequada e reativa antes de abrir as inscrições para todos! preamble: Controle quem pode criar uma conta no seu servidor. title: Inscrições registrations_mode: diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index 0ebb032ff9..3007fd2df1 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -968,6 +968,9 @@ pt-PT: title: Webhooks webhook: Webhook admin_mailer: + auto_close_registrations: + body: Devido à falta de atividade recente dos moderadores, as inscrições em %{instance} foram automaticamente alteradas para requererem revisão manual, para evitar que %{instance} seja utilizada como plataforma para potenciais maus atores. Pode voltar a alterar para inscrições abertas em qualquer altura. + subject: As incrições em %{instance} foram automaticamente alteradas para requererem aprovação new_appeal: actions: delete_statuses: para eliminar as suas publicações diff --git a/config/locales/simple_form.an.yml b/config/locales/simple_form.an.yml index f354e5ba82..6ec8380f2a 100644 --- a/config/locales/simple_form.an.yml +++ b/config/locales/simple_form.an.yml @@ -31,14 +31,12 @@ an: text: Nomás puetz apelar una amonestación una vegada defaults: autofollow: Los usuarios que se rechistren per medio d'a invitación te seguirán automaticament - avatar: PNG, GIF u JPG. Maximo %{size}. Será escalau a %{dimensions}px bot: Esta cuenta executa prencipalment accions automatizadas y podría no estar monitorizada context: Un u multiples contextos en os quals ha d'aplicar-se lo filtro current_password: Per razons de seguranza per favor ingrese la clau d'a cuenta actual current_username: Pa confirmar, per favor ingrese lo nombre d'usuario d'a cuenta actual digest: Solo ninviau dimpués d'un largo periodo d'inactividat y nomás si has recibiu mensaches personals entre la tuya ausencia email: Se le ninviará un correu de confirmación - header: PNG, GIF u JPG. Maximo %{size}. Será escalau a %{dimensions}px inbox_url: Copia la URL d'a pachina prencipal d'o relés que quiers utilizar irreversible: Las publicacions filtradas desapareixerán irreversiblement, mesmo si este filtro ye eliminau mas abance locale: L'idioma d'a interficie d'usuario, correus y notificacions push diff --git a/config/locales/simple_form.ar.yml b/config/locales/simple_form.ar.yml index 92e181a8ed..896fcbf3fa 100644 --- a/config/locales/simple_form.ar.yml +++ b/config/locales/simple_form.ar.yml @@ -39,14 +39,12 @@ ar: text: يمكنك الطعن في عقوبة مرة واحدة فقط defaults: autofollow: سوف يتابعك تلقائيًا الأشخاص الذين يقومون بالتسجيل من خلال الدعوة - avatar: ملف PNG أو GIF أو JPG. حجمه على أقصى تصدير %{size}. سيتم تصغيره إلى %{dimensions}px bot: يقوم هذا الحساب أساسا بإجراءات آلية وقد لا يتم مراقبته context: واحد أو أكثر من السياقات التي يجب أن ينطبق عليها عامل التصفية current_password: لأسباب أمنية ، يرجى إدخال الكلمة السرية الخاصة بالحساب الحالي current_username: يرجى إدخال اسم المستخدم الخاص بالحساب الحالي قصد التأكيد digest: تُرسَل إليك بعد مُضيّ مدة مِن خمول نشاطك و فقط إذا ما تلقيت رسائل شخصية مباشِرة أثناء فترة غيابك مِن الشبكة email: سوف تتلقى رسالة إلكترونية للتأكيد - header: ملف PNG أو GIF أو JPG. حجمه على أقصى تصدير %{size}. سيتم تصغيره إلى %{dimensions}px inbox_url: نسخ العنوان الذي تريد استخدامه مِن صفحة الاستقبال للمُرحَّل irreversible: المنشورات التي تم تصفيتها ستختفي لا محالة حتى و إن تمت إزالة عامِل التصفية لاحقًا locale: لغة واجهة المستخدم و الرسائل الإلكترونية و الإشعارات diff --git a/config/locales/simple_form.ast.yml b/config/locales/simple_form.ast.yml index 9b560b67eb..e396962567 100644 --- a/config/locales/simple_form.ast.yml +++ b/config/locales/simple_form.ast.yml @@ -18,10 +18,8 @@ ast: text: Pues usar la sintaxis de los artículos. Ten en cuenta l'espaciu que l'anunciu va ocupar na pantalla del usuariu/a defaults: autofollow: Les persones que se rexistren pente la invitación van siguite automáticamente - avatar: Ficheros PNG, GIF o JPG de %{size} como muncho. La semeya va redimensionase a %{dimensions} px bot: Avisa a otres persones de qu'esta cuenta fai principalmente aiciones automatizaes ya de que ye posible que nun tean supervisaes digest: Namás s'unvia dempués d'un periodu llongu d'inactividá ya namás si recibiesti dalgún mensaxe personal demientres la to ausencia - header: Ficheros PNG, GIF o JPG de %{size} como muncho. La semeya va redimensionase a %{dimensions} px irreversible: Los artículos peñeraos desapaecen de forma irreversible, magar que la peñera se quite dempués locale: La llingua de la interfaz, los mensaxes per corréu electrónicu ya los avisos push password: Usa polo menos 8 caráuteres diff --git a/config/locales/simple_form.be.yml b/config/locales/simple_form.be.yml index 7ad87cdd9f..e72d16a187 100644 --- a/config/locales/simple_form.be.yml +++ b/config/locales/simple_form.be.yml @@ -39,14 +39,14 @@ be: text: Вы можаце абскардзіць рашэнне толькі адзін раз defaults: autofollow: Людзі, якія зарэгістраваліся праз запрашэнне, аўтаматычна падпішуцца на вас - avatar: PNG, GIF ці JPG. Не больш за %{size}. Будзе сціснуты да памеру %{dimensions}} пікселяў + avatar: WEBP, PNG, GIF ці JPG. Не больш за %{size}. Будзе сціснуты да памеру %{dimensions}} пікселяў bot: Паведаміць іншым, што гэты ўліковы запіс у асноўным выконвае аўтаматычныя дзеянні і можа не кантралявацца context: Адзін ці некалькі кантэкстаў, да якіх трэба прымяніць фільтр current_password: У мэтах бяспекі, калі ласка, увядзіце пароль бягучага ўліковага запісу current_username: Каб пацвердзіць, увядзіце, калі ласка імя карыстальніка бягучага ўліковага запісу digest: Будзе даслана толькі пасля доўгага перыяду неактыўнасці і толькі калі вы атрымалі асабістыя паведамленні падчас вашай адсутнасці email: Пацвярджэнне будзе выслана па электроннай пошце - header: PNG, GIF ці JPG. Не больш за %{size}. Будзе сціснуты да памеру %{dimensions}} пікселяў + header: WEBP, PNG, GIF ці JPG. Не больш за %{size}. Будзе сціснуты да памеру %{dimensions}} пікселяў inbox_url: Капіраваць URL са старонкі рэтранслятара, якім вы хочаце карыстацца irreversible: Адфільтраваныя пасты прападуць незваротна, нават калі фільтр потым будзе выдалены locale: Мова карыстальніцкага інтэрфейсу, электронных паведамленняў і апавяшчэнняў diff --git a/config/locales/simple_form.bg.yml b/config/locales/simple_form.bg.yml index a4637a6810..831e1a2f8c 100644 --- a/config/locales/simple_form.bg.yml +++ b/config/locales/simple_form.bg.yml @@ -9,7 +9,7 @@ bg: indexable: Вашите обществени публикации може да се появят в резултатите от търсене в Mastodon. Взаимодействалите с публикациите ви може да ги търсят независимо. note: 'Може да @споменавате други хора или #хаштагове.' show_collections: Хората ще може да разглеждат през вашите последвания и последователи. Хората, които сте следвали, ще видят, че ги следвате независимо от това. - unlocked: Хората ще може да ви следват без да се изисква одобрение. Размаркирайте, ако искате да преглеждате заявките за последване и изберете дали да приемете или отхвърлите новите последователи. + unlocked: Хората ще могат да ви последват без изискване на одобрение. Размаркирайте, ако искате да преглеждате заявките за последване и изберете дали да приемете или отхвърлите новите последователи. account_alias: acct: Посочете потребителско_име@домейн на акаунта си, от който искате да се преместите account_migration: @@ -39,14 +39,14 @@ bg: text: Може да възразите срещу провинение само веднъж defaults: autofollow: Хората, които се регистрират чрез поканата, автоматично ще ви последват - avatar: PNG, GIF или JPG. До най-много %{size}. Ще се смали до %{dimensions} пиксела + avatar: WEBP, PNG, GIF или JPG. До най-много %{size}. Ще се смали до %{dimensions} пиксела bot: Сигнализиране до другите, че акаунтът изпълнява предимно автоматизирани деяния и може да не се наблюдава context: Един или повече контексти, към които да се приложи филтърът current_password: От съображения за сигурност, въведете паролата на текущия акаунт current_username: Въведете потребителското име на текущия профил, за да потвърдите digest: Изпраща се само след дълъг период на бездействие и само ако сте получили лични съобщения във ваше отсъствие email: Ще ви се изпрати имейл за потвърждение - header: PNG, GIF или JPG. До най-много %{size}. Ще се смали до %{dimensions} пиксела + header: WEBP, PNG, GIF или JPG. До най-много %{size}. Ще се смали до %{dimensions} пиксела inbox_url: Копирайте URL адреса от заглавната страница на предаващия сървър, който искате да използвате irreversible: Филтрираните публикации ще изчезнат безвъзвратно, дори филтърът да бъде премахнат по-късно locale: Езикът на потребителския интерфейс, известиятата по имейл и насочените известия diff --git a/config/locales/simple_form.br.yml b/config/locales/simple_form.br.yml index 98a7e7e641..529e3224e6 100644 --- a/config/locales/simple_form.br.yml +++ b/config/locales/simple_form.br.yml @@ -3,8 +3,8 @@ br: simple_form: hints: defaults: - avatar: PNG, GIF pe JPG. Brasoc'h eget %{size}. A vo izelaet betek %{dimensions}px - header: PNG, GIF pe JPG. Brasoc'h eget %{size}. A vo izelaet betek %{dimensions}px + avatar: WEBP, PNG, GIF pe JPG. Bihanoc'h eget %{size}. A vo izelaet betek %{dimensions}px + header: WEBP, PNG, GIF pe JPG. Bihanoc'h eget %{size}. A vo izelaet betek %{dimensions}px password: Implijit 8 lizherennoù d'an neubeutañ setting_default_sensitive: Ar mediaoù kizidik a zo kuzhet dre ziouer ha gallout a reont bezañ diguzhet dre ur c'hlik setting_display_media_default: Kuzhat mediaoù aroueziet evel kizidik diff --git a/config/locales/simple_form.ckb.yml b/config/locales/simple_form.ckb.yml index a6110e2034..3c1d8315e3 100644 --- a/config/locales/simple_form.ckb.yml +++ b/config/locales/simple_form.ckb.yml @@ -25,14 +25,12 @@ ckb: text: دەتوانیت ڕستەسازی توت بەکار بێنیت. تکایە بیر لەو بۆشاییە بکەوە کە بانگەوازەکە لەسەر شاشەی بەکارهێنەرەکە دەست نیشان دەکات defaults: autofollow: ئەو کەسانەی کە لە ڕێگەی بانگهێشتکردنەوە تۆمار دەکرێن بە خۆکارانە شوێنت دەکەون - avatar: PNG, GIF یان JPG. لە زۆربەی %{size}. دەبێتە ئەندازەیەکی کەمکراوە بۆ %{dimensions}px bot: ئەم هەژمارە بەشێوەیەکی سەرەکی کردارە خۆکارانە ئەنجام دەدات و لەوانەیە چاودێری نەکرێت context: یەک یان چەند دەقێک کە پالافتنەکە جێبەجێ بکات current_password: بۆ مەبەستی پاراستن تکایە تێپەروشەی هەژمارەی ئێستاکەت بنووسە current_username: بۆ دڵنیابوون، تکایە ناوی بەکارهێنەری ئەم هەژمارەیە بنووسە digest: تەنیا دوای ماوەیەکی زۆر لە بێ چالاکیدەنێردرێت و تەنیا ئەگەر نامەیەکی کەسیت بۆ نووسرابێت email: ئیمەیڵێکی پشتڕاستکردنەوەت بۆ دەنێردرێت - header: PNG, GIF یان JPG. لە زۆربەی %{size}. دەبێتە ئەندازەیەکی کەمکراوە بۆ %{dimensions}پیکسێڵ inbox_url: نیشانەی پەڕەی سەرەکی ئەو رێڵە کە هەرەکتە بەکاریببەیت ڕوونووس دەکات irreversible: توتە فلتەرکراوەکە بە شێوەیەکی نەگەڕاو فرەدەدرێن، تەنانەت ئەگەر فلتەردواتر لاببرێت locale: زمانی ڕووکاری بەکارهێنەر، ئیمەیلەکان و ئاگانامەکان diff --git a/config/locales/simple_form.co.yml b/config/locales/simple_form.co.yml index fd6f595e91..dfec033469 100644 --- a/config/locales/simple_form.co.yml +++ b/config/locales/simple_form.co.yml @@ -23,14 +23,12 @@ co: text: Pudete utilizà a sintassa di i statuti. Pensate à a piazza chì l'annunziu hà da piglià nant'à u screnu di l'utilizatore defaults: autofollow: Quelli·e chì s'arregistranu cù l'invitazione saranu autumaticamente abbunati·e à voi - avatar: Furmatu PNG, GIF o JPG. %{size} o menu. Sarà ridottu à %{dimensions}px bot: Stu contu hè autumatizatu è ùn hè forse micca survegliatu context: Cuntestu·i induve u filtru deve esse applicatu current_password: Per ragione di sicurità, entrate a chjave d'accessu di stu contu current_username: Per cunfirmà, entrate u cugnome di questu contu digest: Solu mandatu dopu à una longa perioda d’inattività, è solu s’elli ci sò novi missaghji diretti email: Avete da riceve un'e-mail di cunfirmazione - header: Furmatu PNG, GIF o JPG. %{size} o menu. Sarà ridottu à %{dimensions}px inbox_url: Cupiate l'URL di a pagina d'accolta di u ripetitore chì vulete utilizà irreversible: I statuti filtrati saranu sguassati di manera irreversibile, ancu s'ellu hè toltu u filtru locale: A lingua di l'interfaccia utilizatore, di l'e-mail è di e nutificazione push diff --git a/config/locales/simple_form.cs.yml b/config/locales/simple_form.cs.yml index 9da377ae9c..ca8cc49a98 100644 --- a/config/locales/simple_form.cs.yml +++ b/config/locales/simple_form.cs.yml @@ -39,14 +39,14 @@ cs: text: Proti prohřešku se můžete odvolat jen jednou defaults: autofollow: Lidé, kteří se zaregistrují skrz pozvánky, vás budou automaticky sledovat - avatar: PNG, GIF či JPG. Maximálně %{size}. Bude zmenšen na %{dimensions} px + avatar: WEBP, PNG, GIF či JPG. Maximálně %{size}. Bude zmenšen na %{dimensions} px bot: Signalizovat ostatním, že účet převážně vykonává automatizované akce a nemusí být monitorován context: Jeden či více kontextů, ve kterých má být filtr uplatněn current_password: Z bezpečnostních důvodů prosím zadejte heslo současného účtu current_username: Potvrďte prosím tuto akci zadáním uživatelského jména aktuálního účtu digest: Odesíláno pouze po dlouhé době nečinnosti a pouze, pokud jste během své nepřítomnosti obdrželi osobní zprávy email: Bude vám poslán potvrzovací e-mail - header: PNG, GIF či JPG. Maximálně %{size}. Bude zmenšen na %{dimensions} px + header: WEBP, PNG, GIF či JPG. Maximálně %{size}. Bude zmenšen na %{dimensions} px inbox_url: Zkopírujte URL z hlavní stránky mostu, který chcete použít irreversible: Filtrované příspěvky nenávratně zmizí, i pokud bude filtr později odstraněn locale: Jazyk uživatelského rozhraní, e-mailů a push notifikací diff --git a/config/locales/simple_form.cy.yml b/config/locales/simple_form.cy.yml index ddc1b1b935..3bba0d71cb 100644 --- a/config/locales/simple_form.cy.yml +++ b/config/locales/simple_form.cy.yml @@ -39,14 +39,12 @@ cy: text: Dim ond unwaith y gallwch apelio yn erbyn rhybudd defaults: autofollow: Bydd pobl sy'n cofrestru drwy'r gwahoddiad yn eich dilyn yn awtomatig - avatar: PNG, GIF neu JPG. %{size} yn uchafswm. Bydd yn cael ei israddio i %{dimensions}px bot: Mae'r cyfrif hwn yn perfformio gweithredoedd awtomatig yn bennaf ac mae'n bosib nad yw'n cael ei fonitro context: Un neu fwy cyd-destun lle dylai'r hidlydd weithio current_password: At ddibenion diogelwch, nodwch gyfrinair y cyfrif cyfredol current_username: I gadarnhau, nodwch enw defnyddiwr y cyfrif cyfredol digest: Ond yn cael eu hanfon ar ôl cyfnod hir o anweithgarwch ac ond os ydych wedi derbyn unrhyw negeseuon personol yn eich absenoldeb email: Byddwch yn derbyn e-bost cadarnhau - header: PNG, GIF neu JPG. %{size} ar y mwyaf. Bydd yn cael ei israddio i %{dimensions}px inbox_url: Copïwch yr URL o dudalen flaen y relái yr ydych am ei ddefnyddio irreversible: Bydd postiadau wedi'u hidlo'n diflannu'n ddiwrthdro, hyd yn oed os caiff yr hidlydd ei dynnu'n ddiweddarach locale: Iaith y rhyngwyneb, e-byst a hysbysiadau gwthiadwy diff --git a/config/locales/simple_form.da.yml b/config/locales/simple_form.da.yml index 0d86b2bc8d..fde0bcc248 100644 --- a/config/locales/simple_form.da.yml +++ b/config/locales/simple_form.da.yml @@ -39,14 +39,14 @@ da: text: En advarsel kan kun appelleres én gang defaults: autofollow: Personer tilmeldt via invitationen vil automatisk blive følgere - avatar: PNG, GIF eller JPG. Maks. %{size}. Auto-nedskaleres til %{dimensions}px + avatar: WEBP, PNG, GIF eller JPG. Maks. %{size}. Nedskaleres til %{dimensions}px bot: Signalér til andre, at denne konto primært udfører automatiserede handlinger og muligvis ikke monitoreres context: En eller flere kontekster, hvor filteret skal anvendes current_password: Angiv af sikkerhedsårsager adgangskoden til den aktuelle konto current_username: For at bekræfte, angiv brugernavnet for den aktuelle konto digest: Sendes kun efter en lang inaktivitetsperiode, og kun hvis du har modtaget personlige beskeder under fraværet email: En bekræftelses-e-mail fremsendes - header: PNG, GIF eller JPG. Maks. %{size}. Auto-nedskaleres til %{dimensions}px + header: WEBP, PNG, GIF eller JPG. Maks. %{size}. Nedskaleres til %{dimensions}px inbox_url: Kopiér URL'en fra forsiden af den videreformidler, der skal anvendes irreversible: Filtrerede indlæg forsvinder permanent, selv hvis filteret senere fjernes locale: Sprog til brug for brugerflade, e-mails og push-notifikationer diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml index fcf92e29f4..b8fec42d66 100644 --- a/config/locales/simple_form.de.yml +++ b/config/locales/simple_form.de.yml @@ -39,14 +39,14 @@ de: text: Du kannst nur einmal Einspruch gegen eine Maßnahme einlegen defaults: autofollow: Personen, die sich über deine Einladung registrieren, folgen automatisch deinem Profil - avatar: PNG, GIF oder JPG. Höchstens %{size} groß. Wird auf %{dimensions} px verkleinert + avatar: WEBP, PNG, GIF oder JPG. Höchstens %{size} groß. Wird auf %{dimensions} px verkleinert bot: Signalisiert, dass dieses Konto hauptsächlich automatisierte Aktionen durchführt und möglicherweise nicht persönlich betreut wird context: Orte, an denen der Filter aktiv sein soll current_password: Gib aus Sicherheitsgründen bitte das Passwort des aktuellen Kontos ein current_username: Um das zu bestätigen, gib den Profilnamen des aktuellen Kontos ein digest: Wenn du eine längere Zeit inaktiv bist oder du während deiner Abwesenheit in einer privaten Nachricht erwähnt worden bist email: Du wirst eine E-Mail zur Verifizierung dieser E-Mail-Adresse erhalten - header: PNG, GIF oder JPG. Höchstens %{size} groß. Wird auf %{dimensions} px verkleinert + header: WEBP, PNG, GIF oder JPG. Höchstens %{size} groß. Wird auf %{dimensions} px verkleinert inbox_url: Kopiere die URL von der Startseite des gewünschten Relays irreversible: Bereinigte Beiträge verschwinden unwiderruflich für dich, auch dann, wenn dieser Filter zu einem späteren wieder entfernt wird locale: Die Sprache der Bedienoberfläche, E-Mails und Push-Benachrichtigungen diff --git a/config/locales/simple_form.el.yml b/config/locales/simple_form.el.yml index dc140a199f..4ffc496d02 100644 --- a/config/locales/simple_form.el.yml +++ b/config/locales/simple_form.el.yml @@ -31,14 +31,12 @@ el: text: Μπορείς να κάνετε έφεση σε ένα παράπτωμα μόνο μία φορά defaults: autofollow: Όσοι εγγραφούν μέσω της πρόσκλησης θα σε ακολουθούν αυτόματα - avatar: PNG, GIF ή JPG. Έως %{size}. Θα περιοριστεί σε διάσταση %{dimensions}px bot: Ο λογαριασμός αυτός εκτελεί κυρίως αυτοματοποιημένες ενέργειες και ίσως να μην παρακολουθείται context: Ένα ή περισσότερα πλαίσια στα οποία μπορεί να εφαρμόζεται αυτό το φίλτρο current_password: Για λόγους ασφαλείας παρακαλώ γράψε τον κωδικό του τρέχοντος λογαριασμού current_username: Για επιβεβαίωση, παρακαλώ γράψε το όνομα χρήστη του τρέχοντος λογαριασμού digest: Αποστέλλεται μόνο μετά από μακρά περίοδο αδράνειας και μόνο αν έχεις λάβει προσωπικά μηνύματα κατά την απουσία σου email: Θα σου σταλεί email επιβεβαίωσης - header: PNG, GIF ή JPG. Έως %{size}. Θα περιοριστεί σε διάσταση %{dimensions}px inbox_url: Αντέγραψε το URL της αρχικής σελίδας του ανταποκριτή που θέλεις να χρησιμοποιήσεις irreversible: Οι φιλτραρισμένες αναρτήσεις θα εξαφανιστούν αμετάκλητα, ακόμα και αν το φίλτρο αργότερα αφαιρεθεί locale: Η γλώσσα χρήσης, των email και των ειδοποιήσεων push diff --git a/config/locales/simple_form.en-GB.yml b/config/locales/simple_form.en-GB.yml index f0c18d1128..2ac4508b05 100644 --- a/config/locales/simple_form.en-GB.yml +++ b/config/locales/simple_form.en-GB.yml @@ -39,14 +39,12 @@ en-GB: text: You can only appeal a strike once defaults: autofollow: People who sign up through the invite will automatically follow you - avatar: PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px bot: Signal to others that the account mainly performs automated actions and might not be monitored context: One or multiple contexts where the filter should apply current_password: For security purposes please enter the password of the current account current_username: To confirm, please enter the username of the current account digest: Only sent after a long period of inactivity and only if you have received any personal messages in your absence email: You will be sent a confirmation e-mail - header: PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px inbox_url: Copy the URL from the frontpage of the relay you want to use irreversible: Filtered posts will disappear irreversibly, even if filter is later removed locale: The language of the user interface, e-mails and push notifications diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml index d25412561b..ef4641d3e7 100644 --- a/config/locales/simple_form.eo.yml +++ b/config/locales/simple_form.eo.yml @@ -39,14 +39,12 @@ eo: text: Oni povas apelaci strikin nur unufoje defaults: autofollow: Homoj, kiuj registriĝos per la invito aŭtomate sekvos vin - avatar: Formato PNG, GIF aŭ JPG. Ĝis %{size}. Estos malgrandigita al %{dimensions}px bot: Tiu konto ĉefe faras aŭtomatajn agojn, kaj povas esti ne kontrolata context: Unu ol pluraj kuntekstoj kie la filtrilo devus agi current_password: Pro sekuraj kialoj, bonvolu enigi la pasvorton de la nuna konto current_username: Por konfirmi, bonvolu enigi la uzantnomon de la nuna konto digest: Sendita nur post longa tempo de neaktiveco, kaj nur se vi ricevis personan mesaĝon en via foresto email: Vi ricevos konfirman retpoŝton - header: Formato PNG, GIF aŭ JPG. Ĝis %{size}. Estos malgrandigita al %{dimensions}px inbox_url: Kopiu la URL de la ĉefpaĝo de la ripetilo, kiun vi volas uzi irreversible: La filtritaj mesaĝoj malaperos por eterne, eĉ se la filtrilo poste estas forigita locale: La lingvo de la fasado, retpoŝtaĵoj, kaj sciigoj diff --git a/config/locales/simple_form.es-AR.yml b/config/locales/simple_form.es-AR.yml index 9b52ece34e..a074091313 100644 --- a/config/locales/simple_form.es-AR.yml +++ b/config/locales/simple_form.es-AR.yml @@ -39,14 +39,14 @@ es-AR: text: Sólo podés apelar un incumplimiento una vez defaults: autofollow: Los usuarios que se registren mediante la invitación te seguirán automáticamente - avatar: 'PNG, GIF o JPG. Máximo: %{size}. Será subescalado a %{dimensions} píxeles.' + avatar: WEBP, PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px bot: Esta cuenta ejecuta principalmente acciones automatizadas y podría no ser monitorizada context: Uno o múltiples contextos en los que debe aplicarse el filtro current_password: Por razones de seguridad, por favor, ingresá la contraseña de la cuenta actual current_username: Para confirmar, por favor, ingresá el nombre de usuario de la cuenta actual digest: Sólo enviado tras un largo periodo de inactividad, y sólo si recibiste mensajes personales en tu ausencia email: Se te enviará un correo electrónico de confirmación - header: 'PNG, GIF o JPG. Máximo: %{size}. Será subescalado a %{dimensions} píxeles.' + header: WEBP, PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px inbox_url: Copiá la dirección web desde la página principal del relé que querés usar irreversible: Los mensajes filtrados desaparecerán irreversiblemente, incluso si este filtro es eliminado después locale: El idioma de la interface de usuario, correos electrónicos y notificaciones push diff --git a/config/locales/simple_form.es-MX.yml b/config/locales/simple_form.es-MX.yml index 932ed6c59a..d8f1cf95a0 100644 --- a/config/locales/simple_form.es-MX.yml +++ b/config/locales/simple_form.es-MX.yml @@ -39,14 +39,14 @@ es-MX: text: Sólo puede apelar una amonestación a la vez defaults: autofollow: Los usuarios que se registren mediante la invitación te seguirán automáticamente - avatar: PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px + avatar: WEBP, PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px bot: Esta cuenta ejecuta principalmente acciones automatizadas y podría no ser monitorizada context: Uno o múltiples contextos en los que debe aplicarse el filtro current_password: Por razones de seguridad por favor ingrese la contraseña de la cuenta actual current_username: Para confirmar, por favor ingrese el nombre de usuario de la cuenta actual digest: Solo enviado tras un largo periodo de inactividad y solo si has recibido mensajes personales durante tu ausencia email: Se le enviará un correo de confirmación - header: PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px + header: WEBP, PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px inbox_url: Copia la URL de la página principal del relés que quieres utilizar irreversible: Los toots filtrados desaparecerán irreversiblemente, incluso si este filtro es eliminado más adelante locale: El idioma de la interfaz de usuario, correos y notificaciones push diff --git a/config/locales/simple_form.es.yml b/config/locales/simple_form.es.yml index 997f09bf08..fee260aa89 100644 --- a/config/locales/simple_form.es.yml +++ b/config/locales/simple_form.es.yml @@ -11,9 +11,9 @@ es: show_collections: Las personas podrán navegar a través de tus seguidos y seguidores. Esto no impide que las personas que sigues sepan que las estás siguiendo. unlocked: Las personas podrán seguirte sin pedir aprobación. Desmarca si deseas revisar las solicitudes de seguimiento y aceptar o rechazar nuevos seguidores. account_alias: - acct: Especifique su nombre de usuario@dominio de la cuenta de donde se desea migrar + acct: Especifica el nombre_de_usuario@dominio de la cuenta desde donde deseas migrar account_migration: - acct: Especifique el nombre de usuario@dominio de la cuenta de la cual se desea migrar + acct: Especifica el nombre_de_usuario@dominio de la cuenta hacia la que quieres migrar account_warning_preset: text: Puede usar sintaxis de publicaciones, como URLs, hashtags y menciones title: Opcional. No es visible para el destinatario @@ -21,14 +21,14 @@ es: include_statuses: El usuario verá qué publicaciones han causado la acción de moderación o advertencia send_email_notification: El usuario recibirá una explicación de lo que ha sucedido con su cuenta text_html: Opcional. Puede usar sintaxis de publicaciones. Puede añadir configuraciones predefinidas de advertencia para ahorrar tiempo - type_html: Elige lo qué vas a hacer con %{acct} + type_html: Elige lo que vas a hacer con %{acct} types: disable: Evita que el usuario utilice su cuenta, pero no elimina ni oculta sus contenidos. - none: Utilizar esto para enviar una advertencia al usuario, sin poner en marcha ninguna otra acción. + none: Utiliza esto para enviar una advertencia al usuario, sin ejecutar ninguna otra acción. sensitive: Forzar que todos los archivos multimedia de este usuario sean marcados como sensibles. silence: Evita que el usuario pueda publicar con visibilidad pública, y oculta sus mensajes y notificaciones a personas que no lo siguen. Cierra todos los informes contra esta cuenta. suspend: Evita cualquier interacción desde o hacia esta cuenta y elimina su contenido. Reversible en 30 días. Cierra todos los informes contra esta cuenta. - warning_preset_id: Opcional. Aún puede añadir texto personalizado al final de la configuración predefinida + warning_preset_id: Opcional. Aún puedes añadir texto personalizado al final de la configuración predefinida announcement: all_day: Cuando está seleccionado solo se mostrarán las fechas del rango de tiempo ends_at: Opcional. El anuncio desaparecerá automáticamente en este momento @@ -36,17 +36,17 @@ es: starts_at: Opcional. En caso de que su anuncio esté vinculado a un intervalo de tiempo específico text: Puedes usar la sintaxis de publicaciones. Por favor ten en cuenta el espacio que ocupará el anuncio en la pantalla del usuario appeal: - text: Sólo puedes apelar una amonestación una vez + text: Solo puedes apelar la amonestación una vez defaults: autofollow: Los usuarios que se registren mediante la invitación te seguirán automáticamente - avatar: PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px + avatar: WEBP, PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px bot: Esta cuenta ejecuta principalmente acciones automatizadas y podría no ser monitorizada context: Uno o múltiples contextos en los que debe aplicarse el filtro current_password: Por razones de seguridad por favor ingrese la contraseña de la cuenta actual current_username: Para confirmar, por favor ingrese el nombre de usuario de la cuenta actual digest: Solo enviado tras un largo periodo de inactividad y solo si has recibido mensajes personales durante tu ausencia email: Se le enviará un correo de confirmación - header: PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px + header: WEBP, PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px inbox_url: Copia la URL de la página principal del relés que quieres utilizar irreversible: Las publicaciones filtradas desaparecerán irreversiblemente, incluso si este filtro es eliminado más adelante locale: El idioma de la interfaz de usuario, correos y notificaciones push diff --git a/config/locales/simple_form.et.yml b/config/locales/simple_form.et.yml index 501e1f333e..15cf403cf2 100644 --- a/config/locales/simple_form.et.yml +++ b/config/locales/simple_form.et.yml @@ -39,14 +39,12 @@ et: text: Otsust on võimalik vaidlustada vaid 1 kord defaults: autofollow: Inimesed, kes loovad konto selle kutse läbi, automaatselt jälgivad sind - avatar: PNG, GIF või JPG. Kõige rohkem %{size}. Vähendatakse %{dimensions} pikslini bot: Teavita teisi, et see konto teeb enamjaolt automatiseeritud tegevusi ja ei pruugi olla järelvalve all context: Üks või mitu konteksti, mille vastu see filter peaks rakenduma current_password: Sisesta turvalisuse huvides oma siinse konto salasõna current_username: Kinnitamiseks palun sisesta oma konto kasutajanimi digest: Saadetakse ainult pärast pikka tegevusetuse perioodi ja ainult siis, kui on saadetud otsesõnumeid email: Sulle saadetakse e-posti teel kinnituskiri - header: PNG, GIF või JPG. Kõige rohkem %{size}. Vähendatakse %{dimensions} pikslini inbox_url: Kopeeri soovitud vahendaja avalehe URL irreversible: Filtreeritud postitused kaovad taastamatult, isegi kui filter on hiljem eemaldatud locale: Kasutajaliidese, e-kirjade ja tõuketeadete keel diff --git a/config/locales/simple_form.eu.yml b/config/locales/simple_form.eu.yml index ffd3081c93..b417b45fa9 100644 --- a/config/locales/simple_form.eu.yml +++ b/config/locales/simple_form.eu.yml @@ -39,14 +39,14 @@ eu: text: Neurri bati apelazioa behin bakarrik jarri diezaiokezu defaults: autofollow: Gonbidapena erabiliz izena ematen dutenek automatikoki jarraituko dizute - avatar: PNG, GIF edo JPG. Gehienez %{size}. %{dimensions}px neurrira eskalatuko da + avatar: WEBP, GIF edo JPG. Gehienez %{size}. %{dimensions}px neurrira eskalatuko da bot: Kontu honek nagusiki automatizatutako ekintzak burutzen ditu eta agian ez du inork monitorizatzen context: Iragazkia aplikatzeko testuinguru bat edo batzuk current_password: Segurtasunagatik sartu uneko kontuaren pasahitza current_username: Berresteko sartu uneko kontuaren erabiltzaile-izena digest: Jarduerarik gabeko epe luze bat eta gero mezu pertsonalen bat jaso baduzu soilik email: Baieztapen e-mail bat bidaliko zaizu - header: PNG, GIF edo JPG. Gehienez %{size}. %{dimensions}px eskalara txikituko da + header: WEBP, GIF edo JPG. Gehienez %{size}. %{dimensions}px neurrira eskalatuko da inbox_url: Kopiatu erabili nahi duzun errelearen hasiera orriaren URLa irreversible: Iragazitako tootak betirako galduko dira, geroago iragazkia kentzen baduzu ere locale: Erabiltzaile-interfazea, e-mail mezuen eta jakinarazpenen hizkuntza diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml index 23fbc43b07..a312e5aa1c 100644 --- a/config/locales/simple_form.fa.yml +++ b/config/locales/simple_form.fa.yml @@ -39,14 +39,12 @@ fa: text: فقط یک بار می‌توانید برای اخطار درخواست تجدیدنظر کنید defaults: autofollow: کسانی که از راه دعوت‌نامه عضو می‌شوند به طور خودکار پیگیر شما خواهند شد - avatar: یکی از قالب‌های PNG یا GIF یا JPG. بیشترین اندازه %{size}. تصویر به اندازهٔ %{dimensions} پیکسل تبدیل خواهد شد bot: این حساب بیشتر به طور خودکار فعالیت می‌کند و نظارت پیوسته‌ای روی آن وجود ندارد context: یک یا چند زمینه که پالایه باید در آن‌ها اعمال شود current_password: به دلایل امنیتی لطفاً گذرواژه این حساب را وارد کنید current_username: برای تأیید، لطفاً نام کاربری حساب فعلی را وارد کنید digest: تنها وقتی فرستاده می‌شود که مدتی طولانی فعالیتی نداشته باشید و در این مدت برای شما پیغام خصوصی‌ای نوشته شده باشد email: به شما ایمیل تأییدی فرستاده خواهد شد - header: یکی از قالب‌های PNG یا GIF یا JPG. بیشترین اندازه %{size}. تصویر به اندازهٔ %{dimensions} پیکسل تبدیل خواهد شد inbox_url: نشانی صفحهٔ اصلی رله‌ای را که می‌خواهید به کار ببرید کپی کنید irreversible: فرسته‌های پالوده به طور برگشت‌ناپذیری ناپدید می‌شوند، حتا اگر بعدها پالایه برداشته شود locale: زبان واسط کاربری، رایانامه‌ها و آگاهی‌های ارسالی diff --git a/config/locales/simple_form.fo.yml b/config/locales/simple_form.fo.yml index e4d87e1786..003eede25b 100644 --- a/config/locales/simple_form.fo.yml +++ b/config/locales/simple_form.fo.yml @@ -39,14 +39,14 @@ fo: text: Tú kanst bara kæra eina atsókn eina ferð defaults: autofollow: Fólk, sum tilmelda seg gjøgnum innbjóðingina, fylgja tær sjálvvirkandi - avatar: PNG, GIF ella JPG. Ikki størri enn %{size}. Verður minkað til %{dimensions}px + avatar: WEBP, PNG, GIF ella JPG. Í mesta lagi %{size}. Verður minkað til %{dimensions}px bot: Tekin til onnur, at kontan í høvuðsheitum ger sjálvvirkandi atgerðir og møguliga ikki verður yvirvakað context: Ein ella fleiri kontekstir, har sum filtrið skal brúkast current_password: Av trygdarávum vinarliga les inn loyniorðið hjá verandi kontu current_username: Fyri at vátta, vinarliga les inn brúkaranavnið á verandi kontu digest: Einans sent eftir eitt langt tíðarskeið við óvirkni og einans um tú hevur móttikið persónlig boð meðan tú var burtur email: Tú fær sendandi ein váttanarteldupost - header: PNG, GIF ella JPG. Ikki størri enn %{size}. Verður minkað til %{dimensions}px + header: WEBP, PNG, GIF ella JPG. Í mesta lagi %{size}. Verður minkað til %{dimensions}px inbox_url: Avrita URL'in frá forsíðuni hjá reiðlagnum, sum tú vilt brúka irreversible: Filtreraðir postar blíva burtur med alla, eisini sjálvt um filtrið seinni verður strikað locale: Málið, sum verður brúkt í brúkaramarkamótinum, teldupostum og skumpiboðum diff --git a/config/locales/simple_form.fr-CA.yml b/config/locales/simple_form.fr-CA.yml index f5a2a428e9..a4e57841e6 100644 --- a/config/locales/simple_form.fr-CA.yml +++ b/config/locales/simple_form.fr-CA.yml @@ -39,14 +39,14 @@ fr-CA: text: Vous ne pouvez faire appel d'une sanction qu'une seule fois defaults: autofollow: Les personnes qui s’inscrivent grâce à l’invitation vous suivront automatiquement - avatar: Au format PNG, GIF ou JPG. %{size} maximum. Sera réduit à %{dimensions}px + avatar: WEBP, PNG, GIF ou JPG. Au plus %{size}. Sera réduit à %{dimensions}px bot: Signale aux autres que ce compte exécute principalement des actions automatisées et pourrait ne pas être surveillé context: Un ou plusieurs contextes où le filtre devrait s’appliquer current_password: Par mesure de sécurité, veuillez saisir le mot de passe de ce compte current_username: Pour confirmer, veuillez saisir le nom d'utilisateur de ce compte digest: Uniquement envoyé après une longue période d’inactivité en cas de messages personnels reçus pendant votre absence email: Vous recevrez un courriel de confirmation - header: Au format PNG, GIF ou JPG. %{size} maximum. Sera réduit à %{dimensions}px + header: WEBP, PNG, GIF ou JPG. Au plus %{size}. Sera réduit à %{dimensions}px inbox_url: Copiez l’URL depuis la page d’accueil du relai que vous souhaitez utiliser irreversible: Les messages filtrés disparaîtront irrévocablement, même si le filtre est supprimé plus tard locale: La langue de l’interface, des courriels et des notifications diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml index 5a74facb7a..bd1dc6885f 100644 --- a/config/locales/simple_form.fr.yml +++ b/config/locales/simple_form.fr.yml @@ -39,14 +39,14 @@ fr: text: Vous ne pouvez faire appel d'une sanction qu'une seule fois defaults: autofollow: Les personnes qui s’inscrivent grâce à l’invitation vous suivront automatiquement - avatar: Au format PNG, GIF ou JPG. %{size} maximum. Sera réduit à %{dimensions}px + avatar: WEBP, PNG, GIF ou JPG. Au plus %{size}. Sera réduit à %{dimensions}px bot: Signale aux autres que ce compte exécute principalement des actions automatisées et pourrait ne pas être surveillé context: Un ou plusieurs contextes où le filtre devrait s’appliquer current_password: Par mesure de sécurité, veuillez saisir le mot de passe de ce compte current_username: Pour confirmer, veuillez saisir l’identifiant de ce compte digest: Uniquement envoyé après une longue période d’inactivité en cas de messages personnels reçus pendant votre absence email: Vous recevrez un courriel de confirmation - header: Au format PNG, GIF ou JPG. %{size} maximum. Sera réduit à %{dimensions}px + header: WEBP, PNG, GIF ou JPG. Au plus %{size}. Sera réduit à %{dimensions}px inbox_url: Copiez l’URL depuis la page d’accueil du relais que vous souhaitez utiliser irreversible: Les messages filtrés disparaîtront irrévocablement, même si le filtre est supprimé plus tard locale: La langue de l’interface, des courriels et des notifications diff --git a/config/locales/simple_form.fy.yml b/config/locales/simple_form.fy.yml index f506b79252..8cedc3b1d5 100644 --- a/config/locales/simple_form.fy.yml +++ b/config/locales/simple_form.fy.yml @@ -39,14 +39,12 @@ fy: text: Jo kinne mar ien kear beswier yntsjinje tsjin in fêststelde oertrêding defaults: autofollow: Minsken dy’t harren fia de útnûging registrearre hawwe, folgje jo automatysk - avatar: PNG, GIF of JPG. Maksimaal %{size}. Wurdt weromskeald nei %{dimensions}px bot: Sinjaal nei oare brûkers ta dat dizze account yn haadsaak automatisearre berjochten stjoert en mooglik net kontrolearre wurdt context: Ien of meardere lokaasjes wêr’t it filter aktyf wêze moat current_password: Fier foar feilichheidsredenen it wachtwurd fan jo aktuele account yn current_username: Fier ta befêstiging de brûkersnamme fan jo aktuele account yn digest: Wurdt allinnich nei in lange perioade fan ynaktiviteit ferstjoerd en allinnich wannear’t jo wylst jo ôfwêzigens persoanlike berjochten ûntfongen hawwe email: Jo krije in befêstigings-e-mailberjocht - header: PNG, GIF of JPG. Maksimaal %{size}. Wurdt weromskeald nei %{dimensions}px inbox_url: Kopiearje de URL fan de foarside fan de relayserver dy’t jo brûke wolle irreversible: Filtere berjochten ferdwine definityf, sels as it filter letter fuortsmiten wurdt locale: De taal fan de brûkersomjouwing, e-mailberjochten en pushmeldingen diff --git a/config/locales/simple_form.gd.yml b/config/locales/simple_form.gd.yml index a38dd43ad6..7941ac334d 100644 --- a/config/locales/simple_form.gd.yml +++ b/config/locales/simple_form.gd.yml @@ -39,14 +39,12 @@ gd: text: Chan urrainn dhut ath-thagradh a dhèanamh air rabhadh ach aon turas defaults: autofollow: Leanaidh na daoine a chlàraicheas leis a cuireadh thu gu fèin-obrachail - avatar: PNG, GIF or JPG. %{size} air a char as motha. Thèid a sgèileadh sìos gu %{dimensions}px bot: Comharraich do chàch gu bheil an cunntas seo ri gnìomhan fèin-obrachail gu h-àraidh is dh’fhaoidte nach doir duine sam bith sùil air idir context: Na co-theacsaichean air am bi a’ chriathrag an sàs current_password: A chùm tèarainteachd, cuir a-steach facal-faire a’ chunntais làithrich current_username: Airson seo a dhearbhadh, cuir a-steach ainm-cleachdaiche a’ chunntais làithrich digest: Cha dèid seo a chur ach nuair a bhios tu air ùine mhòr gun ghnìomh a ghabhail agus ma fhuair thu teachdaireachd phearsanta fhad ’s a bha thu air falbh email: Thèid post-d dearbhaidh a chur thugad - header: PNG, GIF or JPG. %{size} air a char as motha. Thèid a sgèileadh sìos gu %{dimensions}px inbox_url: Dèan lethbhreac dhen URL o phrìomh-dhuilleag an ath-sheachadain a bu mhiann leat cleachdadh irreversible: Thèid postaichean criathraichte à sealladh gu buan fiù ’s ma bheir thu a’ chriathrag air falbh às dèidh làimhe locale: Cànan eadar-aghaidh a’ chleachdaiche, nam post-d ’s nam brathan putaidh diff --git a/config/locales/simple_form.gl.yml b/config/locales/simple_form.gl.yml index 7bafca6b71..719da8eefa 100644 --- a/config/locales/simple_form.gl.yml +++ b/config/locales/simple_form.gl.yml @@ -39,14 +39,14 @@ gl: text: Só podes apelar a decisión unha vez defaults: autofollow: As persoas que se conectaron a través dun convite seguirante automáticamente - avatar: PNG, GIF ou JPG. Máximo %{size}. Será reducida a %{dimensions}px + avatar: WEBP, PNG, GIF ou JPG. Máximo %{size}. Será reducida a %{dimensions}px bot: Advirte ás usuarias de que esta conta realiza principalmente accións automatizadas e podería non estar monitorizada context: Un ou varios contextos onde se debería aplicar o filtro current_password: Por razóns de seguridade, introduce o contrasinal da conta actual current_username: Para confirmar, introduce o nome de usuaria da conta actual digest: Enviar só tras un longo período de inactividade e só se recibiches algunha mensaxe directa na tua ausencia email: Ímosche enviar un correo de confirmación - header: PNG, GIF ou JPG. Máximo %{size}. Será reducida a %{dimensions}px + header: WEBP, PNG, GIF ou JPG. Máximo %{size}. Será reducida a %{dimensions}px inbox_url: Copiar o URL desde a páxina de inicio do repetidor que queres utilizar irreversible: As publicacións filtradas desaparecerán de xeito irreversible, incluso se despois se elimina o filtro locale: O idioma da interface de usuaria, correos e notificacións diff --git a/config/locales/simple_form.he.yml b/config/locales/simple_form.he.yml index 0a8a57c347..3d7512c5f5 100644 --- a/config/locales/simple_form.he.yml +++ b/config/locales/simple_form.he.yml @@ -39,14 +39,14 @@ he: text: ניתן לערער על עברה רק פעם אחת defaults: autofollow: אנשים שיצטרפו בעזרת ההזמנה יעקבו אחריך באופן אוטומטי - avatar: PNG, GIF או JPG. מקסימום %{size}. גודל התמונה יוקטן ל-%{dimensions}px + avatar: WEBP, PNG, GIF או JPG. גודל מירבי %{size}. גודל התמונה יוקטן ל־%{dimensions} פיקסלים bot: איתות לאחרים שהחשבון מבצע בעיקר פעולות אוטומטיות ועשוי לא להיות מנוטר context: הקשר אחד או יותר בהם יופעל המסנן current_password: מסיבות אבטחה נא להזין את הסיסמא של החשבון הנוכחי current_username: על מנת לאשר, נא להכניס את שם המשתמש של החשבון הנוכחי digest: נשלח לאחר תקופה ארוכה של אי-פעילות עם סיכום איזכורים שקיבלת בהעדרך email: דוא"ל אישור יישלח אליך - header: PNG, GIF או JPG. מקסימום %{size}. גודל התמונה יוקטן %{dimensions}px + header: WEBP, PNG, GIF או JPG. גודל מירבי %{size}. גודל התמונה יוקטן ל־%{dimensions} פיקסלים inbox_url: נא להעתיק את הקישורית מדף הבית של הממסר בו תרצה/י להשתמש irreversible: הודעות מסוננות יעלמו באופן בלתי הפיך, אפילו אם מאוחר יותר יוסר המסנן locale: שפת ממשק המשתמש, הדוא"ל וההתראות בדחיפה diff --git a/config/locales/simple_form.hr.yml b/config/locales/simple_form.hr.yml index 3db4fd3b4a..ea40543c51 100644 --- a/config/locales/simple_form.hr.yml +++ b/config/locales/simple_form.hr.yml @@ -8,8 +8,6 @@ hr: title: Proizvoljno. Nije vidljivo primatelju defaults: autofollow: Ljudi koji se registriraju kroz pozivnicu će te automatski slijediti - avatar: PNG, GIF ili JPG. Najviše %{size}. Bit će smanjeno na %{dimensions}px - header: PNG, GIF ili JPG. Najviše %{size}. Bit će smanjeno na %{dimensions}px password: Mora biti najmanje 8 znakova setting_display_media_default: Sakrij medijski sadržaj označen kao osjetljiv setting_display_media_hide_all: Uvijek sakrij medijski sadržaj diff --git a/config/locales/simple_form.hu.yml b/config/locales/simple_form.hu.yml index 6e11f7fb93..573809c73a 100644 --- a/config/locales/simple_form.hu.yml +++ b/config/locales/simple_form.hu.yml @@ -39,14 +39,14 @@ hu: text: Egy vétséget csak egyszer fellebbezhetsz meg defaults: autofollow: Akik meghívón keresztül regisztrálnak, automatikusan követni fognak téged - avatar: PNG, GIF vagy JPG. Maximum %{size}. Átméretezzük %{dimensions} pixelre + avatar: WEBP, PNG, GIF vagy JPG. Legfeljebb %{size}. Át lesz méretezve %{dimensions} képpontosra. bot: Ez a fiók automatikus műveleteket végez és valószínűleg nem figyeljük context: Kontextusok, ahol a szűrőnek működnie kell current_password: Biztonsági okok miatt kérlek, írd be a jelenlegi fiók jelszavát current_username: A jóváhagyáshoz írd be a jelenlegi fiók felhasználói nevét digest: Csak hosszú távollét esetén küldődik és csak ha személyes üzenetet kaptál távollétedben email: Kapsz egy megerősítő e-mailt - header: PNG, GIF vagy JPG. Maximum %{size}. Átméretezzük %{dimensions} pixelre + header: WEBP, PNG, GIF vagy JPG. Legfeljebb %{size}. Át lesz méretezve %{dimensions} képpontosra. inbox_url: Másold ki a használandó relé szerver kezdőoldalának URL-jét irreversible: A kiszűrt bejegyzések visszafordíthatatlanul eltűnnek, a szűrő későbbi törlése esetén is locale: A felhasználói felület, e-mailek, push üzenetek nyelve diff --git a/config/locales/simple_form.hy.yml b/config/locales/simple_form.hy.yml index 9dbcd1301e..0525f2d6fc 100644 --- a/config/locales/simple_form.hy.yml +++ b/config/locales/simple_form.hy.yml @@ -23,14 +23,12 @@ hy: text: Կարող ես օգտագործել գրառման առանձնայատկութիւնը։ Խնդրում ենք, լինել խելամիտ յայտարարութեան տարածքն օգտագործելիս, այն յայտնուելու է օգտատիրոջ էկրանին defaults: autofollow: Հրաւէրի միջոցով գրանցուող մարդիկ կը հետեւեն քեզ - avatar: PNG, GIF կամ JPG։ Առաւելագոյնը՝ %{size}։ Կը փոքրացուի մինչեւ %{dimensions} bot: Այս հաշիւը հիմնականում կատարում է աւտօմատացուած գործողութւնները եւ գուցէ չի վերայսկուում context: Մէկ կամ մի քանի կոնտեքստներ, որտեղ պէտք է կիրառուի զտիչ current_password: Անվտանգութեան նկատառումներից ելնելով, խնդրում ենք մուտքագրել տուել հաշուի ծածկագիրը current_username: Հաստատելու համար խնդրում ենք մուտքագրել տուել հաշուի օգտանունը digest: Ուղարկուում է պասիւութեան երկար շրջանից յետոյ եւ միայն այն դէպքում, երբ բացակայութեանդ ժամանակ որեւէ անձնական հաղորդագրութիւն ես ստացել email: Քեզ ուղարկուել է հաստատման իմակ - header: PNG, GIF կամ JPG։ Առաւելագոյնը՝ %{size}։ Կը փոքրացուի մինչեւ %{dimensions} inbox_url: Պատճէնիր URL այն շերտի դիմերեսից, որը ցանկանում ես օգտագործել irreversible: Զտուած գրառումները կորչելու են անդառնալիօրէն, նոյնիսկ եթէ զտիչը յետոյ հեռացնես locale: Ինտերֆեյսի լեզուն, էլ. նամակները եւ push ծանուցումները diff --git a/config/locales/simple_form.id.yml b/config/locales/simple_form.id.yml index 51046ce9d4..8b9e74406a 100644 --- a/config/locales/simple_form.id.yml +++ b/config/locales/simple_form.id.yml @@ -29,14 +29,12 @@ id: text: Anda hanya dapat mengajukan banding peringatan sekali defaults: autofollow: Orang yang ingin mendaftar lewat undangan, otomatis mengikuti Anda - avatar: PNG, GIF atau JPG. Maksimal %{size}. Ukuran dikecilkan menjadi %{dimensions}px bot: Akun ini melakukan aksi otomatis dan mungkin tak termonitor context: Satu atau lebih konteks tempat saringan perlu diterapkan current_password: Untuk tujuan keamanan mohon masukkan kata sandi akun ini current_username: Untuk konfirmasi, mohon masukkan nama pengguna akun ini digest: Hanya kirim setelah lama tidak aktif dan hanya jika Anda menerima pesan personal atas absensi Anda email: Anda akan dikirimi email konfirmasi - header: PNG, GIF atau JPG. Maksimal %{size}. Ukuran dikecilkan menjadi %{dimensions}px inbox_url: Salin URL dari halaman depan relai yang ingin Anda pakai irreversible: Toot tersaring akan hilang permanen bahkan jika saringan dihapus kemudian locale: Bahasa antar muka pengguna, email, dan notifikasi dorong diff --git a/config/locales/simple_form.ie.yml b/config/locales/simple_form.ie.yml index dfd0836412..3cf5c33f2c 100644 --- a/config/locales/simple_form.ie.yml +++ b/config/locales/simple_form.ie.yml @@ -39,14 +39,14 @@ ie: text: Tu posse apellar un admoniment solmen un vez defaults: autofollow: Persones qui adherer per li invitation va sequer te automaticmen - avatar: PNG, GIF o JPEG. Admaxim %{size}. Li grandore va esser contraet a %{dimensions}px + avatar: WEBP, PNG, GIF o JPG, con un maximum de %{size}. Va esser diminuet a %{dimensions}px bot: Dir a altres que li conto primarimen far automatic actiones e que fórsan null homan vigila it context: Un o multiplic contextus u li filtre deve aplicar current_password: Por securital rasones, ples introducter li passa-parol del actual conto current_username: Por confirmar, ples inmetter li usator-nómine del actual conto digest: Misset solmen pos un long periode de ínactivitá e solmen si tu ha recivet quelcunc missages personal in tui inbuxe email: On va misser te un email de confirmation - header: PNG, GIF o JPEG. Admaxim %{size}. Li grandore va esser contraet a %{dimensions}px + header: WEBP, PNG, GIF o JPG, con un maximum de %{size}. Va esser diminuet a %{dimensions}px inbox_url: Copiar li URL del initial págine del relé quel tu vole usar irreversible: Filtrat postas va desaparir ínreversibilmen, mem si li filtre es removet plu tard locale: Li lingue del usator-interfacie, emails e notificationes push diff --git a/config/locales/simple_form.io.yml b/config/locales/simple_form.io.yml index eef2014d19..57a2aeb64d 100644 --- a/config/locales/simple_form.io.yml +++ b/config/locales/simple_form.io.yml @@ -39,14 +39,12 @@ io: text: Vu povas nur apelar striko unafoye defaults: autofollow: Personi quo registresesas tra invito automatika sequos vu - avatar: En la formato PNG, GIF o JPG. Til %{size}. Esos mikrigita a %{dimensions}px bot: Signalez a altra personi ke la konto precipue havas automatikigita agi e forsan ne surveyesas context: Situeso kande filtrilo debas aplikesar current_password: Por sekuresorezoni, pozez pasvorto di ca konto current_username: Por konfirmar, pozez uzantonomo di ca konto digest: Nur sendesas pos longa neaktiveso e nur se vu ganis irga mesaji dum ke vu esas neprezenta email: Vu sendesos konfirmretposto - header: En la formato PNG, GIF o JPG. Til %{size}. Esos mikrigita a %{dimensions}px inbox_url: Kopiez URL de frontpagino de relayo quon vu volas uzar irreversible: Filtrita posti neinversigeble desaparos, mem se filtro efacesas pose locale: Linguo di uzantointervizajo, retposti e pulsavizi diff --git a/config/locales/simple_form.is.yml b/config/locales/simple_form.is.yml index 87190693f6..0e9c50eff6 100644 --- a/config/locales/simple_form.is.yml +++ b/config/locales/simple_form.is.yml @@ -39,14 +39,12 @@ is: text: Þú getur aðeins áfrýjað refsingu einu sinni defaults: autofollow: Fólk sem skráir sig í gegnum boðið mun sjálfkrafa fylgjast með þér - avatar: PNG, GIF eða JPG. Mest %{size}. Verður smækkað í %{dimensions}px bot: Þessi aðgangur er aðallega til að framkvæma sjálfvirkar aðgerðir og gæti verið án þess að hann sé vaktaður reglulega context: Eitt eða fleiri samhengi þar sem sían ætti að gilda current_password: Í öryggisskyni skaltu setja inn lykilorðið fyrir þennan notandaaðgang current_username: Til að staðfesta skaltu setja inn notandanafnið fyrir þennan notandaaðgang digest: Er aðeins sent eftir lengri tímabil án virkni og þá aðeins ef þú hefur fengið persónuleg skilaboð á meðan þú hefur ekki verið á línunni email: Þú munt fá sendan staðfestingarpóst - header: PNG, GIF eða JPG. Mest %{size}. Verður smækkað í %{dimensions}px inbox_url: Afritaðu slóðina af forsíðu endurvarpans sem þú vilt nota irreversible: Síaðar færslur munu hverfa óendurkræft, jafnvel þó sían sé seinna fjarlægð locale: Tungumál notandaviðmótsins, tölvupósts og ýti-tilkynninga diff --git a/config/locales/simple_form.it.yml b/config/locales/simple_form.it.yml index 731379835a..244cf7c44a 100644 --- a/config/locales/simple_form.it.yml +++ b/config/locales/simple_form.it.yml @@ -39,14 +39,14 @@ it: text: Puoi appellarti solo una volta defaults: autofollow: Le persone che si iscrivono attraverso l'invito ti seguiranno automaticamente - avatar: PNG, GIF o JPG. Al massimo %{size}. Verranno scalate a %{dimensions}px + avatar: WEBP, PNG, GIF o JPG. Al massimo %{size}. Verranno scalate a %{dimensions}px bot: Questo account esegue principalmente operazioni automatiche e potrebbe non essere tenuto sotto controllo da una persona context: Uno o più contesti nei quali il filtro dovrebbe essere applicato current_password: Per motivi di sicurezza inserisci la password dell'account attuale current_username: Per confermare, inserisci il nome utente dell'account attuale digest: Inviata solo dopo un lungo periodo di inattività e solo se hai ricevuto qualche messaggio personale in tua assenza email: Ti manderemo una email di conferma - header: PNG, GIF o JPG. Al massimo %{size}. Verranno scalate a %{dimensions}px + header: WEBP, PNG, GIF o JPG. Al massimo %{size}. Verranno scalate a %{dimensions}px inbox_url: Copia la URL dalla pagina iniziale del ripetitore che vuoi usare irreversible: I post filtrati scompariranno in modo irreversibile, anche se il filtro viene eliminato locale: La lingua dell'interfaccia utente, di email e notifiche push diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml index e9fb3da9fa..eae1ea2179 100644 --- a/config/locales/simple_form.ja.yml +++ b/config/locales/simple_form.ja.yml @@ -39,14 +39,12 @@ ja: text: 一度だけ異議を申し立てることができます defaults: autofollow: 招待から登録した人が自動的にあなたをフォローするようになります - avatar: "%{size}までのPNG、GIF、JPGが利用可能です。%{dimensions}pxまで縮小されます" bot: このアカウントは主に自動で動作し、人が見ていない可能性があります context: フィルターを適用する対象 (複数選択可) current_password: 現在のアカウントのパスワードを入力してください current_username: 確認のため、現在のアカウントのユーザー名を入力してください digest: 長期間使用していない場合と不在時に返信を受けた場合のみ送信されます email: 確認のメールが送信されます - header: "%{size}までのPNG、GIF、JPGが利用可能です。 %{dimensions}pxまで縮小されます" inbox_url: 使用したいリレーサーバーのトップページからURLをコピーします irreversible: フィルターが後で削除されても、除外された投稿は元に戻せなくなります locale: ユーザーインターフェース、メールやプッシュ通知の言語 diff --git a/config/locales/simple_form.ka.yml b/config/locales/simple_form.ka.yml index e5d874c5a5..48f028c575 100644 --- a/config/locales/simple_form.ka.yml +++ b/config/locales/simple_form.ka.yml @@ -4,11 +4,9 @@ ka: hints: defaults: autofollow: ადამიანები რომლებიც დარეგისტრირდებიან მოწვევით, ავტომატურად გამოგყვებიან - avatar: პნგ, გიფ ან ჯპგ. მაქს. %{size}. ზომა დაპატარავდება %{dimensions}პიქს.-ზე bot: ეს ანგარიში უმთავრესად ასრულებს ავტომატურ მოქმედებებს და შესაძლოა არ იყოს მონიტორინგის ქვეშ context: ერთ ან მრავალი კონტექსტი სადაც ფილტრი უნდა შესრულდეს digest: იგზავნება მხოლოდ ხანგრძლივი უაქტივობის პერიოდის შემდეგ და არყოფნისას თუ მიიღეთ ერთი წერილი მაინც - header: პნგ, გიფ ან ჯპგ. მაქს. %{size}. ზომა დაპატარავდება %{dimensions}პიქს.-ზე inbox_url: ურლ დააკოირეთ გამოყენებისთვის სასურველი რილეის წინა გვერდიდან irreversible: გაფილტრული ტუტები გაუქმდება აღუდგენლად, იმ შემთხვევაშიც კი თუ ფილტრი სამომავლოდ გაუქმდება locale: მომხმარებლის ინტერფეისის, ელ-ფოსტის წერილების და ფუშ შეტყობინებების ენა diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml index 4da58e6c64..1dee6f1431 100644 --- a/config/locales/simple_form.ko.yml +++ b/config/locales/simple_form.ko.yml @@ -39,14 +39,14 @@ ko: text: 처벌에 대해 단 한 번만 이의제기를 할 수 있습니다 defaults: autofollow: 이 초대로 가입한 사람은 나를 팔로우하게 됩니다. - avatar: PNG, GIF 혹은 JPG. 최대 %{size}. %{dimensions}px로 축소 됨 + avatar: WEBP, PNG, GIF 혹은 JPG. 최대 %{size}. %{dimensions}px로 축소됨 bot: 이 계정이 대부분 자동으로 작업을 수행하고 잘 확인하지 않는다는 것을 알립니다. context: 필터를 적용 할 한 개 이상의 컨텍스트 current_password: 보안을 위해 현재 계정의 암호를 입력해주세요 current_username: 확인을 위해, 현재 계정의 사용자명을 입력해주세요 digest: 오랫동안 활동하지 않았을 때 받은 멘션들에 대한 요약 받기 email: 확인용 이메일을 보냈습니다. - header: PNG, GIF 혹은 JPG. 최대 %{size}. %{dimensions}px로 축소 됨 + header: WEBP, PNG, GIF 혹은 JPG. 최대 %{size}. %{dimensions}px로 축소됨 inbox_url: 사용 할 릴레이 서버의 프론트페이지에서 URL을 복사합니다 irreversible: 필터링 된 게시물은 나중에 필터가 사라지더라도 돌아오지 않게 됩니다 locale: 사용자 인터페이스, 이메일, 푸시 알림 언어 diff --git a/config/locales/simple_form.ku.yml b/config/locales/simple_form.ku.yml index fb7a45c34b..aa8501bf24 100644 --- a/config/locales/simple_form.ku.yml +++ b/config/locales/simple_form.ku.yml @@ -29,14 +29,12 @@ ku: text: Tu dikarî tenê carekê îtîraza binpêkirinê bikî defaults: autofollow: Mirovên ku bi riya vexwendinê xwe tomar kirine ew ên bi xweberî te bişopînin - avatar: PNG, GIF an jî JPG. Herî zêde %{size} dê ber bi %{dimensions}px ve were kêmkirin bot: Ji yên din re nîşan bike ku ajimêr bi piranî kiryarên xweberî dike û dibe ku neyê çavdêrî kirin context: Yek an jî zêdetir girêdan divê parzûn were sepandin current_password: Ji bo ewlehiyê ji kerema xwe borînpeyva ajimêrê xwe têxe current_username: Ji bo piştrastkirinê, ji kerema xwe navê bikarhêner ya ajimêrê niha binvîse digest: Tenê piştî demek dirêj neçalakiyê de û tenê di nebûna te da peyamên teybetî standî be tê şandin email: Ji te re e-name ya pejirandinê were - header: PNG, GIF an jî JPG. Herî zêde %{size} ber bi %{dimensions}px ve were kêmkirin inbox_url: Girêdanê ji rûpela pêşîn a guhêrkera ku tu dixwazî bi kar bînî jê bigire irreversible: Şandiyên parzûnkirî êdî bê veger wenda bibe, heger parzûn paşê were rakirin jî nabe locale: Zimanê navrûyê bikarhêner, agahdarîyên e-name û pêl kirin diff --git a/config/locales/simple_form.lad.yml b/config/locales/simple_form.lad.yml index afa26b7873..f9ee9a4b9a 100644 --- a/config/locales/simple_form.lad.yml +++ b/config/locales/simple_form.lad.yml @@ -39,14 +39,14 @@ lad: text: Solo puedes apelar un amonestamiento una vez defaults: autofollow: Los utilizadores ke se enrejistren por la envitasyon te segiran otomatikamente - avatar: PNG, GIF o JPG. Maksimo %{size}. Sera eskalado a %{dimensions}px + avatar: WEBP, PNG, GIF o JPG. Maksimo %{size}. Sera eskalado a %{dimensions}px bot: Indika ke este kuento egzekuta prinsipalmente aksyones otomatizadas i podria no ser monitorizada context: Uno o multiples kontekstos en los ke deve aplikarse el filtro current_password: Por razones de sigurita por favor ingresa el kod del kuento aktual current_username: Para konfirmar, por favor ingresa el nombre de utilizador del kuento aktual digest: Solo embiado dempues de un eluengo periodo de inaktivita i solo si tienes recibido mesajes personales durante tu ausensya email: Se te embiara konfirmasyon por posta elektronika - header: PNG, GIF o JPG. Maksimo %{size}. Sera eskalado a %{dimensions}px + header: WEBP, PNG, GIF o JPG. Maksimo %{size}. Sera eskalado a %{dimensions}px inbox_url: Kopia el URL de la pajina prinsipala del relevo ke keres utilizar irreversible: Las publikasyones filtradas dezapareseran irreversivlemente, inkluzo si este filtro es supremido mas adelante locale: La lingua de la enterfaz de utilizador, posta i avizos arrepushados diff --git a/config/locales/simple_form.lt.yml b/config/locales/simple_form.lt.yml index 6eb90340dc..53b8d672de 100644 --- a/config/locales/simple_form.lt.yml +++ b/config/locales/simple_form.lt.yml @@ -39,14 +39,14 @@ lt: text: Gali pateikti apeliaciją dėl streiko tik vieną kartą defaults: autofollow: Žmonės, kurie užsiregistruos per kvietimą, automatiškai seks tave - avatar: PNG, GIF arba JPG. Ne daugiau kaip %{size}. Bus sumažintas iki %{dimensions} tšk. + avatar: WEBP, PNG, GIF arba JPG. Ne daugiau kaip %{size}. Bus sumažintas iki %{dimensions} tšk. bot: Signalizuoti kitiems, kad paskyroje daugiausia atliekami automatiniai veiksmai ir kad ji gali būti nestebima context: Vienas arba keli kontekstai, kuriems turėtų būti taikomas filtras current_password: Saugumo sumetimais įvesk dabartinės paskyros slaptažodį current_username: Kad patvirtintum, įvesk dabartinės paskyros naudotojo vardą digest: Siunčiama tik po ilgo neaktyvumo laikotarpio ir tik tuo atveju, jei negavai jokių asmeninių žinučių email: Tau bus išsiųstas patvirtinimo el. laiškas - header: PNG, GIF arba JPG. Ne daugiau kaip %{size}. Bus sumažintas iki %{dimensions} tšk. + header: WEBP, PNG, GIF arba JPG. Ne daugiau kaip %{size}. Bus sumažintas iki %{dimensions} tšk. inbox_url: Nukopijuok URL adresą iš pradinio puslapio perdavėjo, kurį nori naudoti irreversible: Filtruoti įrašai išnyks negrįžtamai, net jei vėliau filtras bus pašalintas locale: Naudotojo sąsajos kalba, el. laiškai ir stumiamieji pranešimai diff --git a/config/locales/simple_form.lv.yml b/config/locales/simple_form.lv.yml index bf831c946f..5d23a70100 100644 --- a/config/locales/simple_form.lv.yml +++ b/config/locales/simple_form.lv.yml @@ -39,14 +39,12 @@ lv: text: Brīdinājumu var pārsūdzēt tikai vienu reizi defaults: autofollow: Cilvēki, kuri reģistrējas, izmantojot uzaicinājumu, automātiski sekos tev - avatar: PNG, GIF vai JPG. Ne vairāk kā %{size}. Tiks samazināts līdz %{dimensions} px bot: Paziņo citiem, ka kontā galvenokārt tiek veiktas automatizētas darbības un tas var netikt uzraudzīts context: Viens vai vairāki konteksti, kur jāpiemēro filtrs current_password: Drošības nolūkos, lūdzu, ievadi pašreizējā konta paroli current_username: Lai apstiprinātu, lūdzu, ievadi pašreizējā konta paroli digest: Sūta tikai pēc ilgstošas neaktivitātes un tikai tad, ja savas prombūtnes laikā neesi saņēmis personiskas ziņas email: Tev tiks nosūtīts apstiprinājuma e-pasts - header: PNG, GIF vai JPG. Ne vairāk kā %{size}. Tiks samazināts līdz %{dimensions}px inbox_url: Nokopē URL no tā releja sākumlapas, kuru vēlies izmantot irreversible: Filtrētās ziņas neatgriezeniski pazudīs, pat ja filtrs vēlāk tiks noņemts locale: Lietotāja saskarnes, e-pasta ziņojumu un push paziņojumu valoda diff --git a/config/locales/simple_form.ms.yml b/config/locales/simple_form.ms.yml index 79929cec5d..9e9931cc3e 100644 --- a/config/locales/simple_form.ms.yml +++ b/config/locales/simple_form.ms.yml @@ -39,14 +39,12 @@ ms: text: Anda boleh membuat rayuan terhadap pelanggaran sekali sahaja defaults: autofollow: Orang yang mendaftar melalui undangan akan mengikuti anda secara automatik - avatar: PNG, GIF atau JPG. Kebanyakannya %{size}. Saiz akan dikecilkan kepada %{dimensions}px bot: Memberi isyarat kepada orang lain bahawa akaun itu kebanyakannya melakukan tindakan automatik dan mungkin tidak dipantau context: Satu atau berbilang konteks di mana penapis harus digunakan current_password: Untuk tujuan keselamatan sila masukkan kata laluan akaun semasa current_username: Untuk mengesahkan, sila masukkan nama pengguna akaun semasa digest: Hanya dihantar selepas tempoh yang lama tidak aktif dan hanya jika anda telah menerima sebarang mesej peribadi semasa ketiadaan anda email: Anda akan dihantar e-mel pengesahan - header: PNG, GIF atau JPG. Paling banyak %{size}. Akan diturunkan skala kepada %{dimensions}px inbox_url: Salin URL dari muka depan geganti yang anda mahu gunakan irreversible: Siaran yang ditapis akan hilang secara tidak dapat dipulihkan, walaupun penapis dialih keluar kemudian locale: Bahasa untuk antara muka pengguna, e-mel dan pemberitahuan segera diff --git a/config/locales/simple_form.my.yml b/config/locales/simple_form.my.yml index 80b234c17c..4f8a39782a 100644 --- a/config/locales/simple_form.my.yml +++ b/config/locales/simple_form.my.yml @@ -39,14 +39,12 @@ my: text: လုပ်ဆောင်ချက်တစ်ကြိမ်သာ အသုံးပြုနိုင်သည် defaults: autofollow: ဖိတ်ကြားချက်မှတစ်ဆင့် အကောင့်ဖွင့်သူများမှာ သင့်ကို အလိုအလျောက်စောင့်ကြည့်မည်ဖြစ်ပါသည် - avatar: PNG၊ GIF သို့မဟုတ် JPG။ အများဆုံး %{size}။ %{dimensions}px သို့ လျှော့ချပါမည်။ bot: အကောင့်သည် အဓိကအားဖြင့် အလိုအလျောက် လုပ်ဆောင်ချက်များ ဆောင်ရွက်နိုင်ပြီး စောင့်ကြည့်ခြင်းမပြုနိုင်ကြောင်း အခြားသူများအား အသိပေးပါ context: စစ်ထုတ်သင့်သည့် အကြောင်းအရာ တစ်ခု သို့မဟုတ် များစွာ current_password: လုံခြုံရေးအတွက် ကျေးဇူးပြုပြီး လက်ရှိအကောင့်၏ စကားဝှက်ကို ထည့်ပါ current_username: အတည်ပြုရန်အတွက် လက်ရှိအကောင့်၏ အသုံးပြုသူအမည်ကို ရိုက်ထည့်ပါ digest: အချိန်အတော်ကြာ အသုံးမပြုသည့်သည့်နောက်တွင်သာ ပေးပို့ပြီး အသုံးမပြုသည့်ကာလအတွင်း ကိုယ်ရေးကိုယ်တာစာများသာ လက်ခံရန် email: သင့်ထံ အတည်ပြုချက်အီးမေးလ်တစ်စောင် ပေးပို့ပါမည် - header: PNG၊ GIF သို့မဟုတ် JPG။ အများဆုံး %{size}။ %{dimensions}px သို့ လျှော့ချပါမည် inbox_url: သင်အသုံးပြုလိုသော relay ၏ ရှေ့စာမျက်နှာမှ URL ကို ကူးယူပါ irreversible: စစ်ထုတ်ခြင်းကိုဖယ်ရှားလိုက်ပါက စစ်ထုတ်ထားသော ပို့စ်များမှာ ပျောက်ကွယ်သွားပါမည် locale: အသုံးပြုသူမှ လက်ရှိသုံးနေသည့်ဘာသာစကား၊ အီးမေးလ်များနှင့် ရရှိစေရန်ပေးပို့သည့် အသိပေးချက်များ diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml index f7e917ac3c..18a469b55e 100644 --- a/config/locales/simple_form.nl.yml +++ b/config/locales/simple_form.nl.yml @@ -39,14 +39,14 @@ nl: text: Je kunt maar eenmalig bezwaar indienen tegen een vastgestelde overtreding defaults: autofollow: Mensen die zich via de uitnodiging hebben geregistreerd, volgen jou automatisch - avatar: PNG, GIF of JPG. Maximaal %{size}. Wordt teruggeschaald naar %{dimensions}px + avatar: WEBP, PNG, GIF of JPG. Hoogstens %{size}. Wordt verkleind naar %{dimensions}px bot: Signaal aan anderen dat het account voornamelijk geautomatiseerde acties uitvoert en mogelijk niet wordt gecontroleerd context: Een of meerdere locaties waar de filter actief moet zijn current_password: Voer voor veiligheidsredenen het wachtwoord van je huidige account in current_username: Voer ter bevestiging de gebruikersnaam van je huidige account in digest: Wordt alleen na een lange periode van inactiviteit verzonden en alleen wanneer je tijdens jouw afwezigheid persoonlijke berichten hebt ontvangen email: Je krijgt een bevestigingsmail - header: PNG, GIF of JPG. Maximaal %{size}. Wordt teruggeschaald naar %{dimensions}px + header: WEBP, PNG, GIF of JPG. Hoogstens %{size}. Wordt verkleind naar %{dimensions}px inbox_url: Kopieer de URL van de voorpagina van de relayserver die je wil gebruiken irreversible: Gefilterde berichten verdwijnen onomkeerbaar, zelfs als de filter later wordt verwijderd locale: De taal van de gebruikersomgeving, e-mails en pushmeldingen diff --git a/config/locales/simple_form.nn.yml b/config/locales/simple_form.nn.yml index 266ef1fcce..1991cb2dbb 100644 --- a/config/locales/simple_form.nn.yml +++ b/config/locales/simple_form.nn.yml @@ -39,14 +39,12 @@ nn: text: Ei åtvaring kan kun ankast ein gong defaults: autofollow: Folk som lagar ein konto gjennom innbydinga fylgjer deg automatisk - avatar: PNG, GIF eller JPG. Maksimalt %{size}. Minkast til %{dimensions}px bot: Denne kontoen utfører i hovedsak automatiserte handlinger og blir kanskje ikke holdt øye med context: En eller flere sammenhenger der filteret skal gjelde current_password: For sikkerhetsgrunner, vennligst oppgi passordet til den nåværende bruker current_username: Skriv inn brukarnamnet til den noverande kontoen for å stadfesta digest: Kun sendt etter en lang periode med inaktivitet og bare dersom du har mottatt noen personlige meldinger mens du var borte email: Du får snart ein stadfestings-e-post - header: PNG, GIF eller JPG. Maksimalt %{size}. Minkast til %{dimensions}px inbox_url: Kopier URLen fra forsiden til overgangen du vil bruke irreversible: Filtrerte tut vil verta borte for evig, sjølv om filteret vert fjerna seinare locale: Språket til brukargrensesnittet, e-postar og push-varsel diff --git a/config/locales/simple_form.no.yml b/config/locales/simple_form.no.yml index 7651792212..6c47a9deee 100644 --- a/config/locales/simple_form.no.yml +++ b/config/locales/simple_form.no.yml @@ -39,14 +39,12 @@ text: Du kan kun anke en advarsel en gang defaults: autofollow: Folk som lager en konto gjennom invitasjonen, vil automatisk følge deg - avatar: PNG, GIF eller JPG. Maksimalt %{size}. Vil bli nedskalert til %{dimensions}px bot: Denne kontoen utfører i hovedsak automatiserte handlinger og blir kanskje ikke holdt øye med context: En eller flere sammenhenger der filteret skal gjelde current_password: For sikkerhetsgrunner, vennligst oppgi passordet til den nåværende bruker current_username: For å bekrefte, vennligst skriv inn brukernavnet til den nåværende kontoen digest: Kun sendt etter en lang periode med inaktivitet og bare dersom du har mottatt noen personlige meldinger mens du var borte email: Du vil bli tilsendt en bekreftelses-E-post - header: PNG, GIF eller JPG. Maksimalt %{size}. Vil bli nedskalert til %{dimensions}px inbox_url: Kopier URLen fra forsiden til overgangen du vil bruke irreversible: Filtrerte innlegg vil ugjenkallelig forsvinne, selv om filteret senere blir fjernet locale: Språket til brukergrensesnittet, e-mailer og push-varsler diff --git a/config/locales/simple_form.oc.yml b/config/locales/simple_form.oc.yml index 7159eed322..ba9c260e47 100644 --- a/config/locales/simple_form.oc.yml +++ b/config/locales/simple_form.oc.yml @@ -25,14 +25,12 @@ oc: text: Podètz utilizar la sintaxi dels tuts. Gardatz al cap qu’aquesta anóncia ocuparà la fenèstra de l’utilizaire defaults: autofollow: Lo mond que se marcan gràcia a l’invitacion vos segràn automaticament - avatar: PNG, GIF o JPG. Maximum %{size}. Serà retalhat en %{dimensions}px bot: Avisar lo mond qu’aqueste compte es pas d’una persona context: Un o mai de contèxtes ont lo filtre deuriá s’aplicar current_password: Per de rasons de seguretat volgatz picar lo senhal del compte actual current_username: Per confirmar, volgatz picar lo nom d’utilizaire del compte actual digest: Solament enviat aprèp un long moment d’inactivitat e solament s’avètz recebut de messatges personals pendent vòstra abséncia email: Vos mandarem un corrièl de confirmacion - header: PNG, GIF o JPG. Maximum %{size}. Serà retalhada en %{dimensions}px inbox_url: Copiatz l’URL de la pagina màger del relai que volètz utilizar irreversible: Los tuts filtrats desapareisseràn irreversiblament, encara que lo filtre siá suprimit mai tard locale: La lenga de l’interfàcia d’utilizacion, los messatges e las notificacions diff --git a/config/locales/simple_form.pl.yml b/config/locales/simple_form.pl.yml index a55a93556f..4a8208202f 100644 --- a/config/locales/simple_form.pl.yml +++ b/config/locales/simple_form.pl.yml @@ -39,14 +39,14 @@ pl: text: Możesz wysłać odwołanie do ostrzeżenia tylko raz defaults: autofollow: Osoby, które zarejestrują się z Twojego zaproszenia automatycznie zaczną Cię obserwować - avatar: PNG, GIF lub JPG. Maksymalnie %{size}. Zostanie zmniejszony do %{dimensions}px + avatar: WEBP, PNG, GIF lub JPG. Maksymalnie %{size}. Zostanie zmniejszony do %{dimensions}px bot: To konto wykonuje głównie zautomatyzowane działania i może nie być monitorowane context: Jedno lub wiele miejsc, w których filtr zostanie zastosowany current_password: Ze względów bezpieczeństwa wprowadź hasło obecnego konta current_username: Aby potwierdzić, wprowadź nazwę użytkownika obecnego konta digest: Wysyłane tylko po długiej nieaktywności, jeżeli w tym czasie otrzymaleś jakąś wiadomość bezpośrednią email: Otrzymasz e-mail potwierdzający - header: PNG, GIF lub JPG. Maksymalnie %{size}. Zostanie zmniejszony do %{dimensions}px + header: WEBP, PNG, GIF lub JPG. Maksymalnie %{size}. Zostanie zmniejszony do %{dimensions}px inbox_url: Skopiuj adres ze strony głównej przekaźnika, którego chcesz użyć irreversible: Filtrowane wpisy znikną bezpowrotnie, nawet gdy filtr zostanie usunięty locale: Język interfejsu, wiadomości e-mail i powiadomieniach push diff --git a/config/locales/simple_form.pt-BR.yml b/config/locales/simple_form.pt-BR.yml index 1c303c0dae..3a4e99a0d1 100644 --- a/config/locales/simple_form.pt-BR.yml +++ b/config/locales/simple_form.pt-BR.yml @@ -39,14 +39,12 @@ pt-BR: text: Você só pode solicitar uma revisão uma vez defaults: autofollow: Pessoas que criarem conta através de seu convite te seguirão automaticamente - avatar: PNG, GIF or JPG. Arquivos de até %{size}. Serão redimensionados para %{dimensions}px bot: Essa conta executa principalmente ações automatizadas e pode não ser monitorada context: Um ou mais contextos onde o filtro deve atuar current_password: Para fins de segurança, digite a senha da conta atual current_username: Para confirmar, digite o nome de usuário da conta atual digest: Enviado apenas após um longo período de inatividade com um resumo das menções recebidas durante ausência email: Você receberá um e-mail de confirmação - header: PNG, GIF ou JPG de até %{size}. Serão redimensionados para %{dimensions}px inbox_url: Copie o link da página inicial do repetidor que você deseja usar irreversible: As publicações filtradas desaparecerão irreversivelmente, mesmo se o filtro for removido depois locale: O idioma da interface do usuário, e-mails e notificações diff --git a/config/locales/simple_form.pt-PT.yml b/config/locales/simple_form.pt-PT.yml index 691ecec3a0..9c54e72140 100644 --- a/config/locales/simple_form.pt-PT.yml +++ b/config/locales/simple_form.pt-PT.yml @@ -39,14 +39,14 @@ pt-PT: text: Só pode recorrer uma única vez de uma reprimenda defaults: autofollow: As pessoas que aderirem através do convite segui-lo-ão automaticamente - avatar: PNG, GIF ou JPG. Ficheiros no máximo de %{size}. Serão reduzidos para %{dimensions}px + avatar: WEBP, PNG, GIF ou JPG. No máximo %{size}. Será reduzido para %{dimensions}px bot: Esta conta executa essencialmente ações automatizadas e pode não ser monitorizada context: Um ou diversos contextos nos quais o filtro deve ser aplicado current_password: Para fins de segurança, queira inserir a palavra-passe da conta atual current_username: Para confirmar, queira inserir o nome de utilizador da conta atual digest: Enviado após um longo período de inatividade e apenas se foste mencionado na tua ausência email: Será enviado um e-mail de confirmação - header: PNG, GIF ou JPG. Ficheiros no máximo de %{size}. Serão reduzidos para %{dimensions}px + header: WEBP, PNG, GIF ou JPG. No máximo %{size}. Será reduzido para %{dimensions}px inbox_url: Copie o URL da página inicial do repetidor que quer usar irreversible: Publicações filtradas irão desaparecer irremediavelmente, mesmo que o filtro seja removido posteriormente locale: O idioma da interface de utilizador, e-mails e notificações push diff --git a/config/locales/simple_form.ro.yml b/config/locales/simple_form.ro.yml index cade572f38..5593022708 100644 --- a/config/locales/simple_form.ro.yml +++ b/config/locales/simple_form.ro.yml @@ -23,14 +23,12 @@ ro: text: Poți folosi sintaxa de postare. Te rugăm să fii atent la spațiul pe care anunțul îl va ocupa pe ecranul utilizatorului defaults: autofollow: Persoanele care se înregistrează datorită invitației tale te vor urmări automat - avatar: PNG, GIF sau JPG. Cel mult %{size}. Va fi redimensionată la %{dimensions}px bot: Acest cont performează în cea mai mare parte acțiuni automate și nu poate fi monitorizat context: Contextele în care filtrul trebuie aplicat current_password: În scopuri de securitate, vă rugăm să introduceţi parola contului curent current_username: Pentru a confirma, vă rugăm să introduceţi numele de utilizator al contului curent digest: Este trimis doar după o lungă perioadă de inactivitate și numai dacă primești mesaje personale în perioada de absență email: Vei primi un e-mail de confirmare - header: PNG, GIF sau JPG. Cel mult %{size}. Vor fi redimensionate la %{dimensions}px inbox_url: Copiază adresa URL de pe prima pagină a reului pe care vrei să îl utilizezi irreversible: Postările sortate vor dispărea ireversibil, chiar dacă filtrul este ulterior șters locale: Limba interfaței de utilizator, e-mailurile si notificările push diff --git a/config/locales/simple_form.ru.yml b/config/locales/simple_form.ru.yml index 2d82a66358..192a2f96df 100644 --- a/config/locales/simple_form.ru.yml +++ b/config/locales/simple_form.ru.yml @@ -39,14 +39,12 @@ ru: text: Вы можете обжаловать замечание только один раз defaults: autofollow: Люди, пришедшие по этому приглашению, автоматически будут подписаны на вас. - avatar: Поддерживается PNG, GIF и JPG. Максимальный размер — %{size}. Будет уменьшен до %{dimensions}px. bot: Отметьте, если с этой учётной записи выполняются автоматизированные действия и она может не просматриваться владельцем. context: Один или несколько контекстов, к которым должны быть применены фильтры current_password: В целях безопасности введите пароль текущей учётной записи current_username: Для подтверждения, пожалуйста, введите имя пользователя текущей учётной записи digest: Если вы долго не заглядывали, отправим вам дайджест событий, которые происходили в период вашего отсутствия. email: Вам будет отправлено электронное письмо с подтверждением. - header: Поддерживается PNG, GIF и JPG. Максимальный размер — %{size}. Будет уменьшена до %{dimensions}px. inbox_url: Копировать URL с главной страницы ретранслятора, который вы хотите использовать irreversible: Отфильтрованные посты будут утеряны навсегда, даже если в будущем фильтр будет убран locale: Язык интерфейса, e-mail писем и push-уведомлений diff --git a/config/locales/simple_form.sc.yml b/config/locales/simple_form.sc.yml index 5f5d633079..792619e6c7 100644 --- a/config/locales/simple_form.sc.yml +++ b/config/locales/simple_form.sc.yml @@ -27,14 +27,12 @@ sc: text: Podes impreare sintassi in is tuts. Dae cara a su tretu chi s'annùntziu at a pigare in s'ischermu de s'utente defaults: autofollow: Is persones chi s'ant a registrare pro mèdiu de s'invitu t'ant a sighire in manera automàtica - avatar: PNG, GIF o JPG. Màssimu %{size}. Ant a èssere iscaladas a %{dimensions}px bot: Sinnala a àtere chi custu contu faghet pro su prus atziones automatizadas e diat pòdere no èssere monitoradu context: Unu o prus cuntestos in ue su filtru si diat dèpere aplicare current_password: Pro chistiones de seguresa inserta sa crae de intrada de su contu atuale current_username: Pro cunfirmare inserta su nòmine utente de su contu atuale digest: Imbiadu isceti a pustis de unu perìodu longu de inatividade, e isceti si as retzidu calicunu messàgiu personale cando non bi fias email: As a retzire unu messàgiu eletrònicu de cunfirma - header: PNG, GIF o JPG. Màssimu %{size}. Ant a èssere iscaladas a %{dimensions}px inbox_url: Còpia s'URL dae sa pàgina printzipale de su ripetidore chi boles impreare irreversible: Is tuts filtrados ant a isparèssere in manera irreversìbile, fintzas si prus a tardu s'at a bogare su filtru locale: S'idioma de s'interfache de s'utente, de is messàgios de posta eletrònica e de is notìficas push diff --git a/config/locales/simple_form.sco.yml b/config/locales/simple_form.sco.yml index 85fa66ddc9..7eeaca375a 100644 --- a/config/locales/simple_form.sco.yml +++ b/config/locales/simple_form.sco.yml @@ -29,14 +29,12 @@ sco: text: Ye kin ainly appeal a strike the wance defaults: autofollow: Fowk thit signs up throu the invite wull follae ye automatic - avatar: PNG, GIF or JPG. At maist %{size}. Wull get doonscaled tae %{dimensions}px bot: Signal tae ithers thit the accoont maistly performs automatit actions an mibbie wullnae be monitort context: Ae or mair contexts whaur the filter shuid apply current_password: Fir security purposes please pit in the passwird o the current accoont current_username: Fir tae confirm, please pit in the uisernemm o the current accoont digest: Ainly sent efter a lang whilie o inactivity an ainly if ye'v gotten onie personal messages whilst ye wis awa email: Ye'll be sent a confirmation email - header: PNG, GIF or JPG. At maist %{size}. Wull get doonscaled tae %{dimensions}px inbox_url: Copy the URL fae the frontpage o the relay thit ye'r wantin tae uise irreversible: Filtert posts wull dizappear irreversibly, even if filter is taen aff efter locale: The leid o the uiser interface, emails an push notes diff --git a/config/locales/simple_form.si.yml b/config/locales/simple_form.si.yml index ededa85bcc..eb41d263bc 100644 --- a/config/locales/simple_form.si.yml +++ b/config/locales/simple_form.si.yml @@ -27,14 +27,12 @@ si: text: ඔබට වර්ජනයකට අභියාචනා කළ හැක්කේ එක් වරක් පමණි defaults: autofollow: ආරාධනාව හරහා ලියාපදිංචි වන පුද්ගලයින් ස්වයංක්‍රීයව ඔබව අනුගමනය කරනු ඇත - avatar: PNG, GIF හෝ JPG. වැඩිම %{size}. %{dimensions}px දක්වා අඩු කරනු ඇත bot: ගිණුම ප්‍රධාන වශයෙන් ස්වයංක්‍රීය ක්‍රියා සිදු කරන බවත් නිරීක්ෂණය නොකළ හැකි බවත් අන් අයට සංඥා කරන්න context: පෙරහන යෙදිය යුතු සන්දර්භ එකක් හෝ කිහිපයක් current_password: ආරක්ෂක අරමුණු සඳහා කරුණාකර ජංගම ගිණුමේ මුරපදය ඇතුළත් කරන්න current_username: තහවුරු කිරීමට, කරුණාකර වත්මන් ගිණුමේ පරිශීලක නාමය ඇතුළත් කරන්න digest: දිගු කාලයක් අක්‍රියව සිටීමෙන් පසුව පමණක් යවන ලද අතර ඔබ නොමැති විට ඔබට කිසියම් පුද්ගලික පණිවිඩයක් ලැබී ඇත්නම් පමණි email: ඔබට තහවුරු කිරීමේ විද්‍යුත් තැපෑලක් එවනු ලැබේ - header: PNG, GIF හෝ JPG. වැඩිම %{size}. %{dimensions}px දක්වා අඩු කරනු ඇත inbox_url: ඔබට භාවිතා කිරීමට අවශ්‍ය රිලේ හි මුල් පිටුවෙන් URL එක පිටපත් කරන්න irreversible: පෙරහන පසුව ඉවත් කළ ද, පෙරූ ලිපි අප්‍රතිවර්ත්‍යව අතුරුදහන් වනු ඇත locale: වි-තැපැල්, තල්ලු දැනුම්දීම් සහ පරිශ්‍රීලක අතුරුමුහුණතේ භාෂාව diff --git a/config/locales/simple_form.sk.yml b/config/locales/simple_form.sk.yml index 614812a3a9..71bd25d6df 100644 --- a/config/locales/simple_form.sk.yml +++ b/config/locales/simple_form.sk.yml @@ -16,14 +16,14 @@ sk: warning_preset_id: Voliteľné. Stále môžeš vložiť vlastný text na samý koniec predlohy defaults: autofollow: Ľudia ktorí sa zaregistrujú prostredníctvom pozvánky, ťa budú inheď následovať - avatar: PNG, GIF alebo JPG. Maximálne %{size}. Bude zmenšený na %{dimensions}px + avatar: WEBP, PNG, GIF, alebo JPG. Najviac %{size}. Bude zmenšený na %{dimensions}px bot: Tento účet vykonáva hlavne automatizované akcie, a je pravdepodobne nespravovaný context: Jedno, alebo viac kritérií, v ktorých má byť filtrovanie uplatnené current_password: Z bezpečtnostných dôvodov prosím zadaj heslo súčasného účtu current_username: Pre potvrdenie prosím zadaj prezývku súčasného účtu digest: Odoslané iba v prípade dlhodobej neprítomnosti, a len ak si obdržal/a nejaké osobné správy kým si bol/a preč email: Bude ti odoslaný potvrdzujúci email - header: PNG, GIF, alebo JPG. Maximálne %{size}. Bude zmenšený na %{dimensions}px + header: WEBP, PNG, GIF, alebo JPG. Najviac %{size}. Bude zmenšený na %{dimensions}px inbox_url: Skopíruj adresu z hlavnej stránky mostíka, ktorý chceš používať irreversible: Vytriedené príspevky zmiznú nenávratne, aj keď triedenie neskôr zrušíš locale: Jazyk užívateľského rozhrania, emailových, a nástenkových oboznámení diff --git a/config/locales/simple_form.sl.yml b/config/locales/simple_form.sl.yml index ef345f78c3..1e56894384 100644 --- a/config/locales/simple_form.sl.yml +++ b/config/locales/simple_form.sl.yml @@ -39,14 +39,14 @@ sl: text: Na ukrep se lahko pritožite le enkrat defaults: autofollow: Osebe, ki se prijavijo prek povabila, vas bodo samodejno sledile - avatar: PNG, GIF ali JPG. Največ %{size}. Zmanjšana bo na %{dimensions}px + avatar: WEBP, PNG, GIF ali JPG. Največ %{size}. Zmanjšana bo na %{dimensions} sl. točk bot: Ta račun v glavnem opravlja samodejna dejanja in morda ni pod nadzorom context: En ali več kontekstov, kjer naj se uporabi filter current_password: Iz varnostnih razlogov vnesite geslo trenutnega računa current_username: Za potrditev vnesite uporabniško ime trenutnega računa digest: Pošlje se le po dolgem obdobju nedejavnosti in samo, če ste prejeli osebna sporočila v vaši odsotnosti email: Poslali vam bomo potrditveno e-pošto - header: PNG, GIF ali JPG. Največ %{size}. Zmanjšana bo na %{dimensions}px + header: WEBP, PNG, GIF ali JPG. Največ %{size}. Zmanjšana bo na %{dimensions} sl. točk inbox_url: Kopirajte URL naslov s prve strani releja, ki ga želite uporabiti irreversible: Filtrirane objave bodo nepovratno izginile, tudi če je filter kasneje odstranjen locale: Jezik uporabniškega vmesnika, e-poštnih sporočil in potisnih obvestil diff --git a/config/locales/simple_form.sq.yml b/config/locales/simple_form.sq.yml index dc07478070..b8404766f3 100644 --- a/config/locales/simple_form.sq.yml +++ b/config/locales/simple_form.sq.yml @@ -39,14 +39,14 @@ sq: text: Një paralajmërim mund ta apeloni vetëm një herë defaults: autofollow: Personat që regjistrohen përmes ftesës do t’ju ndjekin vetvetiu - avatar: PNG, GIF ose JPG. Maksimumi %{size}. Do të zvogëlohen në %{dimensions}px + avatar: WEBP, PNG, GIF ose JPG. E shumta %{size}. Do të zvogëlohet në %{dimensions}px bot: Kjo llogari kryesisht bën veprime të automatizuara dhe mund të mos mbikëqyret dot context: Një ose disa kontekste kur duhet të zbatohet filtri current_password: Për qëllime sigurie, ju lutemi, jepni fjalëkalimin e llogarisë së tanishme current_username: Që ta ripohoni, ju lutemi, jepni emrin e përdoruesit të llogarisë së tanishme digest: I dërguar vetëm pas një periudhe të gjatë pasiviteti dhe vetëm nëse keni marrë ndonjë mesazh personal gjatë mungesës tuaj email: Do t’ju dërgohet një email ripohimi - header: PNG, GIF ose JPG. E shumta %{size}. Do të ripërmasohet në %{dimensions}px + header: WEBP, PNG, GIF ose JPG. E shumta %{size}. Do të zvogëlohet në %{dimensions}px inbox_url: Kopjoni URL-në prej faqes ballore të relesë që doni të përdorni irreversible: Mesazhet e filtruar do të zhduken në mënyrë të pakthyeshme, edhe nëse filtri hiqet më vonë locale: Gjuha e ndërfaqes së përdoruesit, email-eve dhe njoftimeve push diff --git a/config/locales/simple_form.sr-Latn.yml b/config/locales/simple_form.sr-Latn.yml index 6e6b6ce8b8..62e12201ae 100644 --- a/config/locales/simple_form.sr-Latn.yml +++ b/config/locales/simple_form.sr-Latn.yml @@ -39,14 +39,12 @@ sr-Latn: text: Možete podneti samo jednu žalbu na upisan prestup defaults: autofollow: Osobe koje se prijave kroz pozivnice će vas automatski zapratiti - avatar: PNG, GIF ili JPG. Najviše %{size}. Biće smanjeno na %{dimensions}px bot: Daje drugima do znanja da ovaj nalog uglavnom vrši automatizovane radnje i možda se ne nadgleda context: Jedan ili više konteksta u kojima treba da se primeni filter current_password: Iz bezbednosnih razloga molimo Vas unesite lozinku trenutnog naloga current_username: Da biste potvrdili, Molimo Vas unesite korisničko ime trenutno aktivnog naloga digest: Šalje se samo posle dužeg perioda neaktivnosti i samo u slučaju da ste primili jednu ili više ličnih poruka tokom Vašeg odsustva email: Biće Vam poslat mejl sa potvrdom - header: PNG, GIF ili JPG. Najviše %{size}. Biće smanjeno na %{dimensions}px inbox_url: Kopirajte URL sa naslovne strane releja koji želite koristiti irreversible: Filtrirane obajve će nestati nepovratno, čak i ako je filter kasnije uklonjen locale: Jezik korisničkog okruženja, e-pošte i mobilnih obaveštenja diff --git a/config/locales/simple_form.sr.yml b/config/locales/simple_form.sr.yml index 71fbe299ec..10434be1e4 100644 --- a/config/locales/simple_form.sr.yml +++ b/config/locales/simple_form.sr.yml @@ -39,14 +39,12 @@ sr: text: Можете поднети само једну жалбу на уписан преступ defaults: autofollow: Особе које се пријаве кроз позивнице ће вас аутоматски запратити - avatar: PNG, GIF или JPG. Највише %{size}. Биће смањено на %{dimensions}px bot: Даје другима до знања да овај налог углавном врши аутоматизоване радње и можда се не надгледа context: Један или више контекста у којима треба да се примени филтер current_password: Из безбедносних разлога молимо Вас унесите лозинку тренутног налога current_username: Да бисте потврдили, Молимо Вас унесите корисничко име тренутно активног налога digest: Шаље се само после дужег периода неактивности и само у случају да сте примили једну или више личних порука током Вашег одсуства email: Биће Вам послат мејл са потврдом - header: PNG, GIF или JPG. Највише %{size}. Биће смањено на %{dimensions}px inbox_url: Копирајте URL са насловне стране релеја који желите користити irreversible: Филтриранe обајве ће нестати неповратно, чак и ако је филтер касније уклоњен locale: Језик корисничког окружења, е-поште и мобилних обавештења diff --git a/config/locales/simple_form.sv.yml b/config/locales/simple_form.sv.yml index b01436b415..fcf3788027 100644 --- a/config/locales/simple_form.sv.yml +++ b/config/locales/simple_form.sv.yml @@ -39,14 +39,12 @@ sv: text: Du kan endast överklaga en varning en gång defaults: autofollow: Användarkonton som skapas genom din inbjudan kommer automatiskt följa dig - avatar: PNG, GIF eller JPG. Högst %{size}. Kommer att skalas ner till %{dimensions}px bot: Detta konto utför huvudsakligen automatiserade åtgärder och kanske inte övervakas context: Ett eller fler sammanhang där filtret ska tillämpas current_password: Av säkerhetsskäl krävs lösenordet till det nuvarande kontot current_username: Ange det nuvarande kontots användarnamn för att bekräfta digest: Skickas endast efter en lång period av inaktivitet och endast om du har fått några personliga meddelanden i din frånvaro email: Du kommer att få ett bekräftelsemeddelande via e-post - header: PNG, GIF eller JPG. Högst %{size}. Kommer att skalas ner till %{dimensions}px inbox_url: Kopiera webbadressen från hemsidan av det ombud du vill använda irreversible: Filtrerade inlägg kommer att försvinna oåterkalleligt, även om filter tas bort senare locale: Språket för användargränssnittet, e-postmeddelanden och push-aviseringar diff --git a/config/locales/simple_form.ta.yml b/config/locales/simple_form.ta.yml index a3819e5eb5..fcf031f90e 100644 --- a/config/locales/simple_form.ta.yml +++ b/config/locales/simple_form.ta.yml @@ -17,7 +17,6 @@ ta: starts_at: கட்டாயமில்லை. உங்கள் அறிவிப்பு ஒரு குறிப்பிட்ட நேரத்தில் வெளியாக வேண்டுமெனில் மட்டும் defaults: autofollow: அழைப்பின் வாயிலாக புதிய கணக்கை துவங்குவோர் தாமாகவே உங்களை பின்தொடர்வர் - avatar: PNG, GIF or JPG. அதிகபட்சம் %{size}, %{dimensions}px க்கு குறைக்கப்படும் bot: இந்த கணக்கு முக்கியமாக தானியங்கு செயல்களைச் செய்கிறது மற்றும் கண்காணிக்கப்படாமல் போகலாம் current_password: பாதுகாப்பு காரணங்களுக்காக, தங்களின் தற்போதைய கணக்கின் கடவுச்சொல்லை உள்ளீடு செய்க current_username: உறுதிசெய்ய, தற்போதைய கணக்கின் பயனர் பெயரை உள்ளிடுக diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml index c388001888..259bb00099 100644 --- a/config/locales/simple_form.th.yml +++ b/config/locales/simple_form.th.yml @@ -18,7 +18,7 @@ th: text: คุณสามารถใช้ไวยากรณ์โพสต์ เช่น URL, แฮชแท็ก และการกล่าวถึง title: ไม่จำเป็น ไม่ปรากฏแก่ผู้รับ admin_account_action: - include_statuses: ผู้ใช้จะเห็นว่าโพสต์ใดก่อให้เกิดการกระทำการควบคุมหรือคำเตือน + include_statuses: ผู้ใช้จะเห็นว่าโพสต์ใดก่อให้เกิดการกระทำการกลั่นกรองหรือคำเตือน send_email_notification: ผู้ใช้จะได้รับคำอธิบายว่าเกิดอะไรขึ้นกับบัญชีของเขา text_html: ไม่จำเป็น คุณสามารถใช้ไวยากรณ์โพสต์ คุณสามารถ เพิ่มคำเตือนที่ตั้งไว้ล่วงหน้า เพื่อประหยัดเวลา type_html: เลือกสิ่งที่จะทำกับ %{acct} @@ -39,14 +39,14 @@ th: text: คุณสามารถอุทธรณ์การดำเนินการได้เพียงครั้งเดียวเท่านั้น defaults: autofollow: ผู้คนที่ลงทะเบียนผ่านคำเชิญจะติดตามคุณโดยอัตโนมัติ - avatar: PNG, GIF หรือ JPG สูงสุด %{size} จะได้รับการย่อขนาดเป็น %{dimensions}px + avatar: WEBP, PNG, GIF หรือ JPG สูงสุด %{size} จะได้รับการย่อขนาดเป็น %{dimensions}px bot: ส่งสัญญาณให้ผู้อื่นว่าบัญชีทำการกระทำแบบอัตโนมัติเป็นหลักและอาจไม่ได้รับการสังเกตการณ์ context: หนึ่งหรือหลายบริบทที่ตัวกรองควรนำไปใช้ current_password: เพื่อวัตถุประสงค์ด้านความปลอดภัย โปรดป้อนรหัสผ่านของบัญชีปัจจุบัน current_username: เพื่อยืนยัน โปรดป้อนชื่อผู้ใช้ของบัญชีปัจจุบัน digest: ส่งเฉพาะหลังจากไม่มีการใช้งานเป็นเวลานานและในกรณีที่คุณได้รับข้อความส่วนบุคคลใด ๆ เมื่อคุณไม่อยู่เท่านั้น email: คุณจะได้รับอีเมลการยืนยัน - header: PNG, GIF หรือ JPG สูงสุด %{size} จะได้รับการย่อขนาดเป็น %{dimensions}px + header: WEBP, PNG, GIF หรือ JPG สูงสุด %{size} จะได้รับการย่อขนาดเป็น %{dimensions}px inbox_url: คัดลอก URL จากหน้าแรกของรีเลย์ที่คุณต้องการใช้ irreversible: โพสต์ที่กรองอยู่จะหายไปอย่างถาวร แม้ว่าจะเอาตัวกรองออกในภายหลังก็ตาม locale: ภาษาของส่วนติดต่อผู้ใช้, อีเมล และการแจ้งเตือนแบบผลัก @@ -86,7 +86,7 @@ th: media_cache_retention_period: จะลบไฟล์สื่อที่ดาวน์โหลดหลังจากจำนวนวันที่ระบุเมื่อตั้งเป็นค่าบวก และดาวน์โหลดใหม่ตามความต้องการ peers_api_enabled: รายการชื่อโดเมนที่เซิร์ฟเวอร์นี้พบในจักรวาลสหพันธ์ ไม่มีข้อมูลรวมอยู่ที่นี่เกี่ยวกับว่าคุณติดต่อกับเซิร์ฟเวอร์ที่กำหนดหรือไม่ เพียงแค่ว่าเซิร์ฟเวอร์ของคุณทราบเกี่ยวกับเซิร์ฟเวอร์ที่กำหนด มีการใช้สิ่งนี้โดยบริการที่เก็บรวบรวมสถิติในการติดต่อกับภายนอกในความหมายทั่วไป profile_directory: ไดเรกทอรีโปรไฟล์แสดงรายการผู้ใช้ทั้งหมดที่ได้เลือกรับให้สามารถค้นพบได้ - require_invite_text: เมื่อการลงทะเบียนต้องมีการอนุมัติด้วยตนเอง ทำให้การป้อนข้อความ “ทำไมคุณจึงต้องการเข้าร่วม?” บังคับแทนที่จะไม่จำเป็น + require_invite_text: เมื่อการลงทะเบียนต้องการการอนุมัติด้วยตนเอง ทำให้การป้อนข้อความ “ทำไมคุณจึงต้องการเข้าร่วม?” บังคับแทนที่จะไม่จำเป็น site_contact_email: วิธีที่ผู้คนสามารถเข้าถึงคุณสำหรับการสอบถามด้านกฎหมายหรือการสนับสนุน site_contact_username: วิธีที่ผู้คนสามารถเข้าถึงคุณใน Mastodon site_extended_description: ข้อมูลเพิ่มเติมใด ๆ ที่อาจเป็นประโยชน์กับผู้เยี่ยมชมและผู้ใช้ของคุณ สามารถจัดโครงสร้างด้วยไวยากรณ์ Markdown @@ -113,7 +113,7 @@ th: severities: no_access: ปิดกั้นการเข้าถึงทรัพยากรทั้งหมด sign_up_block: จะไม่สามารถทำการลงทะเบียนใหม่ - sign_up_requires_approval: การลงทะเบียนใหม่จะต้องมีการอนุมัติของคุณ + sign_up_requires_approval: การลงทะเบียนใหม่จะต้องการการอนุมัติของคุณ severity: เลือกสิ่งที่จะเกิดขึ้นกับคำขอจาก IP นี้ rule: text: อธิบายกฎหรือข้อกำหนดสำหรับผู้ใช้ในเซิร์ฟเวอร์นี้ พยายามทำให้กฎหรือข้อกำหนดสั้นและเรียบง่าย @@ -282,7 +282,7 @@ th: sign_up_requires_approval: จำกัดการลงทะเบียน severity: กฎ notification_emails: - appeal: ใครสักคนอุทธรณ์การตัดสินใจของผู้ควบคุม + appeal: ใครสักคนอุทธรณ์การตัดสินใจของผู้กลั่นกรอง digest: ส่งอีเมลสรุป favourite: ใครสักคนได้ชื่นชอบโพสต์ของคุณ follow: ใครสักคนได้ติดตามคุณ diff --git a/config/locales/simple_form.tr.yml b/config/locales/simple_form.tr.yml index 3053c04431..cc644d4df4 100644 --- a/config/locales/simple_form.tr.yml +++ b/config/locales/simple_form.tr.yml @@ -39,14 +39,14 @@ tr: text: Bir eyleme yalnızca bir kere itiraz edebilirsiniz defaults: autofollow: Davetiyeyle kaydolan kişiler sizi otomatik olarak takip eder - avatar: En fazla %{size} olacak şekilde PNG, GIF veya JPG formatında yükleyiniz. %{dimensions}px büyüklüğüne indirgenecektir + avatar: En fazla %{size} olacak şekilde WEBP, PNG, GIF veya JPG formatında yükleyiniz. %{dimensions}px boyutuna küçültülecektir bot: Bu hesap temelde otomatik eylemler gerçekleştirir ve izlenmeyebilir context: Filtrenin geçerli olması gereken bir veya daha fazla içerik current_password: Güvenlik nedeniyle lütfen şu anki hesabın parolasını girin current_username: Onaylamak için lütfen şu anki hesabın kullanıcı adını girin digest: Sadece uzun bir süre hareketsiz kaldıktan sonra ve yalnızca yokluğunuzda herhangi bir kişisel mesaj aldıysanız gönderilir email: Onay e-postası gönderilir - header: PNG, GIF ya da JPG. En fazla %{size}. %{dimensions}px boyutuna küçültülecek + header: WEBP, PNG, GIF veya JPG. En fazla %{size}. %{dimensions}px boyutuna küçültülecektir inbox_url: Kullanmak istediğiniz aktarıcının ön sayfasından URL'yi kopyalayın irreversible: Süzgeçlenmiş gönderiler, filtre daha sonra kaldırılsa bile, geri dönüşümsüz biçimde kaybolur locale: Kullanıcı arayüzünün dili, e-postalar ve push bildirimleri diff --git a/config/locales/simple_form.uk.yml b/config/locales/simple_form.uk.yml index aa64ecfdb7..a85684a0f9 100644 --- a/config/locales/simple_form.uk.yml +++ b/config/locales/simple_form.uk.yml @@ -39,14 +39,14 @@ uk: text: Ви можете оскаржити рішення лише один раз defaults: autofollow: Люди, що зареєструвалися за вашим запрошенням, автоматично підпишуться на вас - avatar: PNG, GIF, або JPG. Максимум - %{size}. Буде зменшено до %{dimensions}px + avatar: WEBP, PNG, GIF, або JPG. Максимальний розмір - %{size}. Буде зменшено до %{dimensions}px bot: Цей обліковий запис виконує переважно автоматичні дії та може не відстежуватися context: Один або кілька контекстів, до яких повинні бути застосовані фільтри current_password: Для цілей безпеки, будь ласка, введіть пароль поточного облікового запису current_username: Для підтвердження, будь ласка, введіть ім'я користувача поточного облікового запису digest: Буде послано тільки після довгого періоду неактивності, та тільки якщо ви отримаєте персональне повідомлення у цей період email: Вам надійде електронний лист з підтвердженням - header: PNG, GIF, або JPG. Максимум - %{size}. Буде зменшено до %{dimensions}px + header: WEBP, PNG, GIF, або JPG. Максимальний розмір - %{size}. Буде зменшено до %{dimensions}px inbox_url: Скопіюйте інтернет-адресу з титульної сторінки ретранслятора irreversible: Відфільтровані дописи зникнуть назавжди, навіть якщо фільтр потім буде вилучено locale: Мова інтерфейсу, електронних листів та push-сповіщень diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml index 8943527b16..817883941c 100644 --- a/config/locales/simple_form.vi.yml +++ b/config/locales/simple_form.vi.yml @@ -39,14 +39,12 @@ vi: text: Bạn chỉ có thể khiếu nại mỗi lần một cảnh cáo defaults: autofollow: Những người đăng ký sẽ tự động theo dõi bạn - avatar: PNG, GIF hoặc JPG, tối đa %{size}. Sẽ bị nén xuống %{dimensions}px bot: Tài khoản này tự động thực hiện các hành động và không được quản lý bởi người thật context: Chọn một hoặc nhiều nơi mà bộ lọc sẽ áp dụng current_password: Vì mục đích bảo mật, vui lòng nhập mật khẩu của tài khoản hiện tại current_username: Để xác nhận, vui lòng nhập tên người dùng của tài khoản hiện tại digest: Chỉ gửi sau một thời gian dài không hoạt động hoặc khi bạn nhận được tin nhắn (trong thời gian vắng mặt) email: Bạn sẽ được gửi một email xác minh - header: PNG, GIF hoặc JPG, tối đa %{size}. Sẽ bị nén xuống %{dimensions}px inbox_url: Sao chép URL của máy chủ mà bạn muốn dùng irreversible: Các tút đã lọc sẽ không thể phục hồi, kể cả sau khi xóa bộ lọc locale: Ngôn ngữ của giao diện, email và thông báo đẩy diff --git a/config/locales/simple_form.zh-CN.yml b/config/locales/simple_form.zh-CN.yml index 7a56fa2559..d0ca529a4d 100644 --- a/config/locales/simple_form.zh-CN.yml +++ b/config/locales/simple_form.zh-CN.yml @@ -39,14 +39,14 @@ zh-CN: text: 你仅能对单次处罚提交一次申诉 defaults: autofollow: 通过邀请链接注册的用户将会自动关注你 - avatar: 文件大小限制 %{size},只支持 PNG、GIF 或 JPG 格式。图片分辨率将会压缩至 %{dimensions}px + avatar: 支持WEBP、PNG、GIF 或 JPG。最大 %{size}。将缩小到 %{dimensions}px bot: 来自这个账户的绝大多数操作都是自动进行的,并且可能无人监控 context: 过滤器的应用环境 current_password: 为了安全起见,请输入当前账号的密码 current_username: 请输入当前账号的用户名以确认 digest: 仅在你长时间未登录,且收到了私信时发送 email: 我们会向你发送一封确认邮件 - header: 文件大小限制 %{size},只支持 PNG、GIF 或 JPG 格式。图片分辨率将会压缩至 %{dimensions}px + header: 支持WEBP、PNG、GIF 或 JPG。最大 %{size}。将缩小到 %{dimensions}px inbox_url: 从你想要使用的中继站的主页上复制 URL irreversible: 已过滤的嘟文会不可逆转地消失,即便移除过滤器之后也一样 locale: 用户界面、电子邮件和推送通知中使用的语言 diff --git a/config/locales/simple_form.zh-HK.yml b/config/locales/simple_form.zh-HK.yml index ad963b32b6..6fa052082e 100644 --- a/config/locales/simple_form.zh-HK.yml +++ b/config/locales/simple_form.zh-HK.yml @@ -39,14 +39,12 @@ zh-HK: text: 你每次只能提出一次申訴 defaults: autofollow: 通過邀請網址註冊的用戶將會自動關注你 - avatar: 支援 PNG, GIF 或 JPG 圖片,檔案最大為 %{size},會縮裁成 %{dimensions}px bot: 這個帳號是機械人,所做的事情可能沒有經人為監察 context: 過濾器應該套用的一項或多項條件 current_password: 基於保安緣故,請輸入目前帳號的密碼 current_username: 請輸入目前帳戶的使用者名稱以確認 digest: 僅在你長時間未登錄,且收到了私信時發送 email: 你將收到一封確認電郵 - header: 支援 PNG, GIF 或 JPG 圖片,檔案最大為 %{size},會縮裁成 %{dimensions}px inbox_url: 在你想要使用的中繼站首頁,複製它的網址 irreversible: 文章過濾是不可還原的,即使日後過濾器被移除,也無法重新看到被它濾走的文章 locale: 使用者介面、電郵和通知的語言 diff --git a/config/locales/simple_form.zh-TW.yml b/config/locales/simple_form.zh-TW.yml index 696fd5fed9..c83a7be75a 100644 --- a/config/locales/simple_form.zh-TW.yml +++ b/config/locales/simple_form.zh-TW.yml @@ -39,14 +39,14 @@ zh-TW: text: 您只能對警示提出一次申訴 defaults: autofollow: 通過邀請網址註冊的使用者將自動跟隨您 - avatar: 支援 PNG、GIF 或 JPG 圖片格式,檔案最大為 %{size},會等比例縮減至 %{dimensions} 像素 + avatar: 支援 WEBP、PNG、GIF 或 JPG 圖片格式,檔案最大為 %{size}。將等比例縮減至 %{dimensions} 像素 bot: 此帳號主要執行自動化操作且可能未受人為監控 context: 此過濾器應套用於以下一項或多項情境 current_password: 因安全因素,請輸入目前帳號的密碼 current_username: 請輸入目前帳號的使用者名稱以確認 digest: 僅於您長時間未登入且於未登入期間收到私訊時傳送 email: 您將收到一封確認電子郵件 - header: 支援 PNG、GIF 或 JPG 圖片格式,檔案最大為 %{size},會等比例縮減至 %{dimensions} 像素 + header: 支援 WEBP、PNG、GIF 或 JPG 圖片格式,檔案最大為 %{size}。將等比例縮減至 %{dimensions} 像素 inbox_url: 從您想要使用的中繼首頁複製網址 irreversible: 已過濾的嘟文將會不可逆地消失,即便之後移除過濾器也一樣 locale: 使用者介面、電子郵件與推播通知的語言 diff --git a/config/locales/sq.yml b/config/locales/sq.yml index da82dda9cb..3ad76e2429 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -764,6 +764,7 @@ sq: disabled: Për askënd users: Për përdorues vendorë që kanë bërë hyrjen registrations: + moderation_recommandation: Ju lutemi, sigurohuni si keni një ekip adekuat dhe reagues moderimi, përpara se të hapni regjistrimet për këdo! preamble: Kontrolloni cilët mund të krijojnë llogari në shërbyesin tuaj. title: Regjistrime registrations_mode: @@ -771,6 +772,7 @@ sq: approved: Për regjistrim, lypset miratimi none: S’mund të regjistrohet ndokush open: Mund të regjistrohet gjithkush + warning_hint: Rekomandojmë përdorimin e “Për regjistrim lypset miratim”. veç nëse jeni i bindur se ekipi juaj i moderimit mund të trajtojë në kohë mesazhe të padëshiruar dhe regjistrime dashakeqe. security: authorized_fetch: Kërko doemos mirëfilltësim prej shërbyes të federuar authorized_fetch_hint: Kërkimi doemos i kryerjes së mirëfilltësimit për shërbyes të federuar aktivizon detyrim më strikt të bllokimeve si në shkallë përdoruesi, ashtu edhe në shkallë shërbyesi. Por kjo vjen me koston e një keqësimi të funksionimit, redukton përhapjen e përgjigjeve tuaja dhe mund të sjellë probleme përputhshmërie me disa shërbime të federuara. Veç kësaj, kjo s’do t’ua pengojë, aktorëve vënë kësaj, të sjellin postimet dhe llogaritë tuaja publike. diff --git a/config/locales/th.yml b/config/locales/th.yml index b76f6992ad..e117c29b4a 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -23,11 +23,11 @@ th: admin: account_actions: action: ทำการกระทำ - title: ทำการกระทำการควบคุม %{acct} + title: ทำการกระทำการกลั่นกรองต่อ %{acct} account_moderation_notes: create: เขียนหมายเหตุ - created_msg: สร้างหมายเหตุการควบคุมสำเร็จ! - destroyed_msg: ทำลายหมายเหตุการควบคุมสำเร็จ! + created_msg: สร้างหมายเหตุการกลั่นกรองสำเร็จ! + destroyed_msg: ทำลายหมายเหตุการกลั่นกรองสำเร็จ! accounts: add_email_domain_block: ปิดกั้นโดเมนอีเมล approve: อนุมัติ @@ -93,8 +93,8 @@ th: pending: รอดำเนินการ silenced: จำกัดอยู่ suspended: ระงับอยู่ - title: การควบคุม - moderation_notes: หมายเหตุการควบคุม + title: การกลั่นกรอง + moderation_notes: หมายเหตุการกลั่นกรอง most_recent_activity: กิจกรรมล่าสุด most_recent_ip: IP ล่าสุด no_account_selected: ไม่มีการเปลี่ยนแปลงบัญชีเนื่องจากไม่มีการเลือก @@ -226,7 +226,7 @@ th: update_status: อัปเดตโพสต์ update_user_role: อัปเดตบทบาท actions: - approve_appeal_html: "%{name} ได้อนุมัติการอุทธรณ์การตัดสินใจในการควบคุมจาก %{target}" + approve_appeal_html: "%{name} ได้อนุมัติการอุทธรณ์การตัดสินใจในการกลั่นกรองจาก %{target}" approve_user_html: "%{name} ได้อนุมัติการลงทะเบียนจาก %{target}" assigned_to_self_report_html: "%{name} ได้มอบหมายรายงาน %{target} ให้กับตนเอง" change_email_user_html: "%{name} ได้เปลี่ยนที่อยู่อีเมลของผู้ใช้ %{target}" @@ -263,7 +263,7 @@ th: enable_user_html: "%{name} ได้เปิดใช้งานการเข้าสู่ระบบสำหรับผู้ใช้ %{target}" memorialize_account_html: "%{name} ได้เปลี่ยนบัญชีของ %{target} เป็นหน้าอนุสรณ์" promote_user_html: "%{name} ได้เลื่อนขั้นผู้ใช้ %{target}" - reject_appeal_html: "%{name} ได้ปฏิเสธการอุทธรณ์การตัดสินใจในการควบคุมจาก %{target}" + reject_appeal_html: "%{name} ได้ปฏิเสธการอุทธรณ์การตัดสินใจในการกลั่นกรองจาก %{target}" reject_user_html: "%{name} ได้ปฏิเสธการลงทะเบียนจาก %{target}" remove_avatar_user_html: "%{name} ได้เอาภาพประจำตัวของ %{target} ออก" reopen_report_html: "%{name} ได้เปิดรายงาน %{target} ใหม่" @@ -395,7 +395,7 @@ th: import: นำเข้า new: create: สร้างการปิดกั้น - hint: การปิดกั้นโดเมนจะไม่ป้องกันการสร้างรายการบัญชีในฐานข้อมูล แต่จะนำไปใช้วิธีการควบคุมที่เฉพาะเจาะจงกับบัญชีเหล่านั้นย้อนหลังและโดยอัตโนมัติ + hint: การปิดกั้นโดเมนจะไม่ป้องกันการสร้างรายการบัญชีในฐานข้อมูล แต่จะนำไปใช้วิธีการกลั่นกรองที่เฉพาะเจาะจงกับบัญชีเหล่านั้นย้อนหลังและโดยอัตโนมัติ severity: desc_html: "จำกัด จะทำให้โพสต์จากบัญชีที่โดเมนนี้ไม่ปรากฏแก่ใครก็ตามที่ไม่ได้กำลังติดตามเขา ระงับ จะเอาข้อมูลเนื้อหา, สื่อ และโปรไฟล์ทั้งหมดสำหรับบัญชีของโดเมนนี้ออกจากเซิร์ฟเวอร์ของคุณ ใช้ ไม่มี หากคุณแค่ต้องการปฏิเสธไฟล์สื่อ" noop: ไม่มี @@ -407,7 +407,7 @@ th: obfuscate: ทำให้ชื่อโดเมนคลุมเครือ obfuscate_hint: ทำให้ชื่อโดเมนในรายการคลุมเครือบางส่วนหากมีการเปิดใช้งานการประกาศรายการการจำกัดโดเมน private_comment: ความคิดเห็นส่วนตัว - private_comment_hint: ความคิดเห็นเกี่ยวกับการจำกัดโดเมนนี้สำหรับการใช้งานภายในโดยผู้ควบคุม + private_comment_hint: ความคิดเห็นเกี่ยวกับการจำกัดโดเมนนี้สำหรับการใช้งานภายในโดยผู้กลั่นกรอง public_comment: ความคิดเห็นสาธารณะ public_comment_hint: ความคิดเห็นเกี่ยวกับการจำกัดโดเมนนี้สำหรับสาธารณชนทั่วไป หากมีการเปิดใช้งานการประกาศรายการการจำกัดโดเมน reject_media: ปฏิเสธไฟล์สื่อ @@ -512,7 +512,7 @@ th: moderation: all: ทั้งหมด limited: จำกัดอยู่ - title: การควบคุม + title: การกลั่นกรอง private_comment: ความคิดเห็นส่วนตัว public_comment: ความคิดเห็นสาธารณะ purge: ล้างข้อมูล @@ -587,7 +587,7 @@ th: add_to_report: เพิ่มข้อมูลเพิ่มเติมไปยังรายงาน are_you_sure: คุณแน่ใจหรือไม่? assign_to_self: มอบหมายให้ฉัน - assigned: ผู้ควบคุมที่ได้รับมอบหมาย + assigned: ผู้กลั่นกรองที่ได้รับมอบหมาย by_target_domain: โดเมนของบัญชีที่ได้รับการรายงาน cancel: ยกเลิก category: หมวดหมู่ @@ -596,7 +596,7 @@ th: none: ไม่มี comment_description_html: 'เพื่อให้ข้อมูลเพิ่มเติม %{name} ได้เขียน:' confirm: ยืนยัน - confirm_action: ยืนยันการกระทำการควบคุมต่อ @%{acct} + confirm_action: ยืนยันการกระทำการกลั่นกรองต่อ @%{acct} created_at: รายงานเมื่อ delete_and_resolve: ลบโพสต์ forwarded: ส่งต่อแล้ว @@ -613,7 +613,7 @@ th: delete: ลบ placeholder: อธิบายว่ามีการใช้การกระทำใด หรือการอัปเดตที่เกี่ยวข้องอื่นใด... title: หมายเหตุ - notes_description_html: ดูและฝากหมายเหตุถึงผู้ควบคุมอื่น ๆ และตัวคุณเองในอนาคต + notes_description_html: ดูและฝากหมายเหตุถึงผู้กลั่นกรองอื่น ๆ และตัวคุณเองในอนาคต processed_msg: 'ประมวลผลรายงาน #%{id} สำเร็จ' quick_actions_description_html: 'ดำเนินการอย่างรวดเร็วหรือเลื่อนลงเพื่อดูเนื้อหาที่รายงาน:' remote_user_placeholder: ผู้ใช้ระยะไกลจาก %{instance} @@ -644,7 +644,7 @@ th: preview_preamble_html: "@%{acct} จะได้รับคำเตือนโดยมีเนื้อหาดังต่อไปนี้:" record_strike_html: บันทึกการดำเนินการต่อ @%{acct} เพื่อช่วยให้คุณเลื่อนระดับการละเมิดในอนาคตจากบัญชีนี้ send_email_html: ส่งอีเมลคำเตือนถึง @%{acct} - warning_placeholder: การให้เหตุผลเพิ่มเติมที่ไม่จำเป็นสำหรับการกระทำการควบคุม + warning_placeholder: การให้เหตุผลเพิ่มเติมที่ไม่จำเป็นสำหรับการกระทำการกลั่นกรอง target_origin: จุดเริ่มต้นของบัญชีที่ได้รับการรายงาน title: รายงาน unassign: เลิกมอบหมาย @@ -660,7 +660,7 @@ th: administration: การดูแล devops: DevOps invites: คำเชิญ - moderation: การควบคุม + moderation: การกลั่นกรอง special: พิเศษ delete: ลบ description_html: ด้วย บทบาทผู้ใช้ คุณสามารถปรับแต่งว่าฟังก์ชันและพื้นที่ใดของ Mastodon ที่ผู้ใช้ของคุณสามารถเข้าถึง @@ -679,7 +679,7 @@ th: manage_announcements: จัดการประกาศ manage_announcements_description: อนุญาตให้ผู้ใช้จัดการประกาศในเซิร์ฟเวอร์ manage_appeals: จัดการการอุทธรณ์ - manage_appeals_description: อนุญาตให้ผู้ใช้ตรวจทานการอุทธรณ์ต่อการกระทำการควบคุม + manage_appeals_description: อนุญาตให้ผู้ใช้ตรวจทานการอุทธรณ์ต่อการกระทำการกลั่นกรอง manage_blocks: จัดการการปิดกั้น manage_blocks_description: อนุญาตให้ผู้ใช้ปิดกั้นผู้ให้บริการอีเมลและที่อยู่ IP manage_custom_emojis: จัดการอีโมจิที่กำหนดเอง @@ -689,7 +689,7 @@ th: manage_invites: จัดการคำเชิญ manage_invites_description: อนุญาตให้ผู้ใช้เรียกดูและปิดใช้งานลิงก์เชิญ manage_reports: จัดการรายงาน - manage_reports_description: อนุญาตให้ผู้ใช้ตรวจทานรายงานและทำการกระทำการควบคุมต่อรายงานเหล่านั้น + manage_reports_description: อนุญาตให้ผู้ใช้ตรวจทานรายงานและทำการกระทำการกลั่นกรองต่อรายงานเหล่านั้น manage_roles: จัดการบทบาท manage_roles_description: อนุญาตให้ผู้ใช้จัดการและกำหนดบทบาทที่ต่ำกว่าบทบาทของเขา manage_rules: จัดการกฎ @@ -701,7 +701,7 @@ th: manage_user_access: จัดการการเข้าถึงของผู้ใช้ manage_user_access_description: อนุญาตให้ผู้ใช้ปิดใช้งานการรับรองความถูกต้องด้วยสองปัจจัยของผู้ใช้อื่น เปลี่ยนที่อยู่อีเมลของเขา และตั้งรหัสผ่านของเขาใหม่ manage_users: จัดการผู้ใช้ - manage_users_description: อนุญาตให้ผู้ใช้ดูรายละเอียดของผู้ใช้อื่น ๆ และทำการกระทำการควบคุมต่อผู้ใช้เหล่านั้น + manage_users_description: อนุญาตให้ผู้ใช้ดูรายละเอียดของผู้ใช้อื่น ๆ และทำการกระทำการกลั่นกรองต่อผู้ใช้เหล่านั้น manage_webhooks: จัดการเว็บฮุค manage_webhooks_description: อนุญาตให้ผู้ใช้ตั้งค่าเว็บฮุคสำหรับเหตุการณ์การดูแล view_audit_log: ดูรายการบันทึกการตรวจสอบ @@ -721,7 +721,7 @@ th: settings: about: manage_rules: จัดการกฎของเซิร์ฟเวอร์ - preamble: ให้ข้อมูลเชิงลึกเกี่ยวกับวิธีที่เซิร์ฟเวอร์ได้รับการดำเนินงาน ควบคุม ได้รับทุน + preamble: ให้ข้อมูลเชิงลึกเกี่ยวกับวิธีที่เซิร์ฟเวอร์ได้รับการดำเนินงาน กลั่นกรอง ได้รับทุน rules_hint: มีพื้นที่เฉพาะสำหรับกฎที่คาดหวังให้ผู้ใช้ของคุณปฏิบัติตาม title: เกี่ยวกับ appearance: @@ -753,6 +753,7 @@ th: disabled: ให้กับไม่มีใคร users: ให้กับผู้ใช้ในเซิร์ฟเวอร์ที่เข้าสู่ระบบ registrations: + moderation_recommandation: โปรดตรวจสอบให้แน่ใจว่าคุณมีทีมการกลั่นกรองที่เพียงพอและมีปฏิกิริยาตอบสนองก่อนที่คุณจะเปิดการลงทะเบียนให้กับทุกคน! preamble: ควบคุมผู้ที่สามารถสร้างบัญชีในเซิร์ฟเวอร์ของคุณ title: การลงทะเบียน registrations_mode: @@ -760,6 +761,7 @@ th: approved: ต้องการการอนุมัติสำหรับการลงทะเบียน none: ไม่มีใครสามารถลงทะเบียน open: ใครก็ตามสามารถลงทะเบียน + warning_hint: เราแนะนำให้ใช้ “ต้องการการอนุมัติสำหรับการลงทะเบียน” เว้นแต่คุณมั่นใจว่าทีมการกลั่นกรองของคุณสามารถจัดการกับสแปมและการลงทะเบียนที่เป็นอันตรายได้อย่างทันท่วงที security: authorized_fetch: ต้องมีการรับรองความถูกต้องจากเซิร์ฟเวอร์ที่ติดต่อกับภายนอก authorized_fetch_hint: การต้องการการรับรองความถูกต้องจากเซิร์ฟเวอร์ที่ติดต่อกับภายนอกทำให้การบังคับใช้การปิดกั้นทั้งระดับผู้ใช้และระดับเซิร์ฟเวอร์เข้มงวดขึ้น อย่างไรก็ตาม สิ่งนี้มาพร้อมกับต้นทุนที่ต้องแลกด้วยผลเสียด้านประสิทธิภาพ ลดการเข้าถึงการตอบกลับของคุณ และอาจก่อให้เกิดปัญหาความเข้ากันได้กับบริการที่ติดต่อกับภายนอกบางอย่าง นอกจากนี้ สิ่งนี้จะไม่ป้องกันตัวดำเนินการเฉพาะจากการดึงข้อมูลโพสต์และบัญชีสาธารณะของคุณ @@ -771,7 +773,7 @@ th: destroyed_msg: ลบการอัปโหลดไซต์สำเร็จ! software_updates: critical_update: สำคัญ — โปรดอัปเดตอย่างรวดเร็ว - description: ขอแนะนำให้ทำให้การติดตั้ง Mastodon ของคุณทันสมัยอยู่เสมอเพื่อรับประโยชน์จากการแก้ไขและคุณลักษณะล่าสุด ยิ่งไปกว่านั้น บางครั้งก็เป็นสิ่งสำคัญที่จะอัปเดต Mastodon ในเวลาที่เหมาะสมเพื่อหลีกเลี่ยงปัญหาความปลอดภัย ด้วยเหตุผลเหล่านี้ Mastodon จึงตรวจสอบการอัปเดตทุก 30 นาที และจะแจ้งเตือนคุณตามการกำหนดลักษณะการแจ้งเตือนอีเมลของคุณ + description: ขอแนะนำให้ทำให้การติดตั้ง Mastodon ของคุณทันสมัยอยู่เสมอเพื่อรับประโยชน์จากการแก้ไขและคุณลักษณะล่าสุด ยิ่งไปกว่านั้น บางครั้งก็เป็นสิ่งสำคัญที่จะอัปเดต Mastodon อย่างทันท่วงทีเพื่อหลีกเลี่ยงปัญหาความปลอดภัย ด้วยเหตุผลเหล่านี้ Mastodon จึงตรวจสอบการอัปเดตทุก 30 นาที และจะแจ้งเตือนคุณตามการกำหนดลักษณะการแจ้งเตือนอีเมลของคุณ documentation_link: เรียนรู้เพิ่มเติม release_notes: บันทึกประจำรุ่น title: การอัปเดตที่พร้อมใช้งาน @@ -948,6 +950,9 @@ th: title: เว็บฮุค webhook: เว็บฮุค admin_mailer: + auto_close_registrations: + body: เนื่องจากการขาดกิจกรรมของผู้กลั่นกรองล่าสุด จึงมีการสลับการลงทะเบียนใน %{instance} เป็นการต้องการการตรวจทานด้วยตนเองโดยอัตโนมัติ เพื่อป้องกันไม่ให้มีการใช้ %{instance} เป็นแพลตฟอร์มสำหรับผู้ไม่ประสงค์ดี คุณสามารถสลับการลงทะเบียนกลับเป็นการลงทะเบียนแบบเปิดเมื่อใดก็ได้ + subject: มีการสลับการลงทะเบียนสำหรับ %{instance} เป็นการต้องการการอนุมัติโดยอัตโนมัติ new_appeal: actions: delete_statuses: เพื่อลบโพสต์ของเขา @@ -957,9 +962,9 @@ th: sensitive: เพื่อทำเครื่องหมายบัญชีของเขาว่าละเอียดอ่อน silence: เพื่อจำกัดบัญชีของเขา suspend: เพื่อระงับบัญชีของเขา - body: "%{target} กำลังอุทธรณ์การตัดสินใจในการควบคุมโดย %{action_taken_by} จาก %{date} ซึ่งเป็น %{type} เขาเขียนว่า:" - next_steps: คุณสามารถอนุมัติการอุทธรณ์เพื่อเลิกทำการตัดสินใจในการควบคุม หรือเพิกเฉยต่อการอุทธรณ์ - subject: "%{username} กำลังอุทธรณ์การตัดสินใจในการควบคุมใน %{instance}" + body: "%{target} กำลังอุทธรณ์การตัดสินใจในการกลั่นกรองโดย %{action_taken_by} จาก %{date} ซึ่งก็คือ %{type} เขาเขียนว่า:" + next_steps: คุณสามารถอนุมัติการอุทธรณ์เพื่อเลิกทำการตัดสินใจในการกลั่นกรอง หรือเพิกเฉยต่อการอุทธรณ์ + subject: "%{username} กำลังอุทธรณ์การตัดสินใจในการกลั่นกรองใน %{instance}" new_critical_software_updates: body: มีการปล่อยรุ่น Mastodon สำคัญใหม่ คุณอาจต้องการอัปเดตโดยเร็วที่สุดเท่าที่จะเป็นไปได้! subject: การอัปเดต Mastodon สำคัญพร้อมใช้งานสำหรับ %{instance}! @@ -1067,8 +1072,8 @@ th: accept: ยอมรับ back: ย้อนกลับ invited_by: 'คุณสามารถเข้าร่วม %{domain} ได้ด้วยคำเชิญที่คุณได้รับจาก:' - preamble: มีการตั้งและบังคับใช้กฎโดยผู้ควบคุมของ %{domain} - preamble_invited: ก่อนที่คุณจะดำเนินการต่อ โปรดพิจารณากฎพื้นฐานที่ตั้งโดยผู้ควบคุมของ %{domain} + preamble: มีการตั้งและบังคับใช้กฎโดยผู้กลั่นกรองของ %{domain} + preamble_invited: ก่อนที่คุณจะดำเนินการต่อ โปรดพิจารณากฎพื้นฐานที่ตั้งโดยผู้กลั่นกรองของ %{domain} title: กฎพื้นฐานบางประการ title_invited: คุณได้รับการเชิญ security: ความปลอดภัย @@ -1083,7 +1088,7 @@ th: preamble_html: เข้าสู่ระบบด้วยข้อมูลประจำตัว %{domain} ของคุณ หากบัญชีของคุณได้รับการโฮสต์ในเซิร์ฟเวอร์อื่น คุณจะไม่สามารถเข้าสู่ระบบได้ที่นี่ title: เข้าสู่ระบบ %{domain} sign_up: - manual_review: การลงทะเบียนใน %{domain} จะผ่านการตรวจทานด้วยตนเองโดยผู้ควบคุมของเรา เพื่อช่วยให้เราประมวลผลการลงทะเบียนของคุณ เขียนสักนิดเกี่ยวกับตัวคุณเองและเหตุผลที่คุณต้องการบัญชีใน %{domain} + manual_review: การลงทะเบียนใน %{domain} จะผ่านการตรวจทานด้วยตนเองโดยผู้กลั่นกรองของเรา เพื่อช่วยให้เราประมวลผลการลงทะเบียนของคุณ เขียนสักนิดเกี่ยวกับตัวคุณเองและเหตุผลที่คุณต้องการบัญชีใน %{domain} preamble: ด้วยบัญชีในเซิร์ฟเวอร์ Mastodon นี้ คุณจะสามารถติดตามบุคคลอื่นใดในเครือข่าย โดยไม่คำนึงถึงที่ซึ่งบัญชีของเขาได้รับการโฮสต์ title: มาตั้งค่าของคุณใน %{domain} กันเลย status: @@ -1419,7 +1424,7 @@ th: other_data: จะไม่ย้ายข้อมูลอื่น ๆ โดยอัตโนมัติ redirect: จะอัปเดตโปรไฟล์ของบัญชีปัจจุบันของคุณด้วยข้อสังเกตการเปลี่ยนเส้นทางและจะไม่รวมอยู่ในการค้นหา moderation: - title: การควบคุม + title: การกลั่นกรอง move_handler: carry_blocks_over_text: ผู้ใช้นี้ได้ย้ายจาก %{acct} ซึ่งคุณได้ปิดกั้น carry_mutes_over_text: ผู้ใช้นี้ได้ย้ายจาก %{acct} ซึ่งคุณได้ซ่อน @@ -1627,7 +1632,7 @@ th: profile: โปรไฟล์สาธารณะ relationships: การติดตามและผู้ติดตาม statuses_cleanup: การลบโพสต์แบบอัตโนมัติ - strikes: การดำเนินการการควบคุม + strikes: การดำเนินการการกลั่นกรอง two_factor_authentication: การรับรองความถูกต้องด้วยสองปัจจัย webauthn_authentication: กุญแจความปลอดภัย statuses: @@ -1781,9 +1786,9 @@ th: spam: สแปม violation: เนื้อหาละเมิดหลักเกณฑ์ชุมชนดังต่อไปนี้ explanation: - delete_statuses: มีการพบว่าโพสต์บางส่วนของคุณละเมิดหลักเกณฑ์ชุมชนจำนวนหนึ่งหรือมากกว่าและได้รับการเอาออกโดยผู้ควบคุมของ %{instance} ในเวลาต่อมา + delete_statuses: มีการพบว่าโพสต์บางส่วนของคุณละเมิดหลักเกณฑ์ชุมชนจำนวนหนึ่งหรือมากกว่าและได้รับการเอาออกโดยผู้กลั่นกรองของ %{instance} ในเวลาต่อมา disable: คุณไม่สามารถใช้บัญชีของคุณได้อีกต่อไป แต่โปรไฟล์และข้อมูลอื่น ๆ ของคุณยังคงอยู่ในสภาพเดิม คุณสามารถขอข้อมูลสำรองของข้อมูลของคุณ เปลี่ยนการตั้งค่าบัญชี หรือลบบัญชีของคุณ - mark_statuses_as_sensitive: ทำเครื่องหมายโพสต์บางส่วนของคุณว่าละเอียดอ่อนโดยผู้ควบคุมของ %{instance} แล้ว นี่หมายความว่าผู้คนจะต้องแตะสื่อในโพสต์ก่อนที่จะแสดงตัวอย่าง คุณสามารถทำเครื่องหมายสื่อว่าละเอียดอ่อนด้วยตัวคุณเองเมื่อโพสต์ในอนาคต + mark_statuses_as_sensitive: ทำเครื่องหมายโพสต์บางส่วนของคุณว่าละเอียดอ่อนโดยผู้กลั่นกรองของ %{instance} แล้ว นี่หมายความว่าผู้คนจะต้องแตะสื่อในโพสต์ก่อนที่จะแสดงตัวอย่าง คุณสามารถทำเครื่องหมายสื่อว่าละเอียดอ่อนด้วยตัวคุณเองเมื่อโพสต์ในอนาคต sensitive: จากนี้ไป จะทำเครื่องหมายไฟล์สื่อที่อัปโหลดทั้งหมดของคุณว่าละเอียดอ่อนและซ่อนอยู่หลังการคลิกไปยังคำเตือน silence: คุณยังคงสามารถใช้บัญชีของคุณแต่เฉพาะผู้คนที่กำลังติดตามคุณอยู่แล้วเท่านั้นที่จะเห็นโพสต์ของคุณในเซิร์ฟเวอร์นี้ และอาจไม่รวมคุณอยู่ในคุณลักษณะการค้นพบต่าง ๆ อย่างไรก็ตาม ผู้อื่นอาจยังติดตามคุณด้วยตนเอง suspend: คุณไม่สามารถใช้บัญชีของคุณได้อีกต่อไป และจะไม่สามารถเข้าถึงโปรไฟล์และข้อมูลอื่น ๆ ของคุณได้อีกต่อไป คุณยังคงสามารถเข้าสู่ระบบเพื่อขอข้อมูลสำรองของข้อมูลของคุณจนกว่าจะเอาข้อมูลออกอย่างสมบูรณ์ในเวลาประมาณ 30 วัน แต่เราจะเก็บรักษาข้อมูลพื้นฐานบางอย่างไว้เพื่อป้องกันไม่ให้คุณหลบเลี่ยงการระงับ diff --git a/config/locales/tr.yml b/config/locales/tr.yml index f6e00ba520..4ba9d42758 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -10,7 +10,7 @@ tr: follow: Takip et followers: one: Takipçi - other: Takipçi + other: Takipçiler following: Takip ediliyor instance_actor_flash: Bu hesap, herhangi bir bireysel kullanıcı değil, sunucunun kendisini temsil etmek için kullanılan sanal bir aktördür. Birleştirme amacıyla kullanılmaktadır ve askıya alınmamalıdır. last_active: son etkinlik From 8429d074548c34fc171ccaa802bfbb2bfb6d3d06 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 26 Feb 2024 08:45:39 -0500 Subject: [PATCH 009/263] Add `RankedTrend` concern for trends classes (#29388) --- app/models/concerns/ranked_trend.rb | 29 +++++++++++++++++++++++++++++ app/models/preview_card_trend.rb | 2 ++ app/models/status_trend.rb | 2 ++ app/models/trends/links.rb | 4 ++-- app/models/trends/statuses.rb | 4 ++-- 5 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 app/models/concerns/ranked_trend.rb diff --git a/app/models/concerns/ranked_trend.rb b/app/models/concerns/ranked_trend.rb new file mode 100644 index 0000000000..add36afb0c --- /dev/null +++ b/app/models/concerns/ranked_trend.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +module RankedTrend + extend ActiveSupport::Concern + + included do + scope :by_rank, -> { order(rank: :desc) } + scope :ranked_below, ->(value) { where(rank: ..value) } + end + + class_methods do + def recalculate_ordered_rank + connection + .exec_update(<<~SQL.squish) + UPDATE #{table_name} + SET rank = inner_ordered.calculated_rank + FROM ( + SELECT id, row_number() OVER w AS calculated_rank + FROM #{table_name} + WINDOW w AS ( + PARTITION BY language + ORDER BY score DESC + ) + ) inner_ordered + WHERE #{table_name}.id = inner_ordered.id + SQL + end + end +end diff --git a/app/models/preview_card_trend.rb b/app/models/preview_card_trend.rb index 018400dfa9..da2ea2f8c8 100644 --- a/app/models/preview_card_trend.rb +++ b/app/models/preview_card_trend.rb @@ -12,6 +12,8 @@ # language :string # class PreviewCardTrend < ApplicationRecord + include RankedTrend + belongs_to :preview_card scope :allowed, -> { where(allowed: true) } end diff --git a/app/models/status_trend.rb b/app/models/status_trend.rb index b0f1b6942d..807efec0ff 100644 --- a/app/models/status_trend.rb +++ b/app/models/status_trend.rb @@ -14,6 +14,8 @@ # class StatusTrend < ApplicationRecord + include RankedTrend + belongs_to :status belongs_to :account diff --git a/app/models/trends/links.rb b/app/models/trends/links.rb index b4eae9f702..76e50aa7a2 100644 --- a/app/models/trends/links.rb +++ b/app/models/trends/links.rb @@ -81,12 +81,12 @@ class Trends::Links < Trends::Base # Now that all trends have up-to-date scores, and all the ones below the threshold have # been removed, we can recalculate their positions - PreviewCardTrend.connection.exec_update('UPDATE preview_card_trends SET rank = t0.calculated_rank FROM (SELECT id, row_number() OVER w AS calculated_rank FROM preview_card_trends WINDOW w AS (PARTITION BY language ORDER BY score DESC)) t0 WHERE preview_card_trends.id = t0.id') + PreviewCardTrend.recalculate_ordered_rank end def request_review PreviewCardTrend.pluck('distinct language').flat_map do |language| - score_at_threshold = PreviewCardTrend.where(language: language, allowed: true).order(rank: :desc).where('rank <= ?', options[:review_threshold]).first&.score || 0 + score_at_threshold = PreviewCardTrend.where(language: language, allowed: true).by_rank.ranked_below(options[:review_threshold]).first&.score || 0 preview_card_trends = PreviewCardTrend.where(language: language, allowed: false).joins(:preview_card) preview_card_trends.filter_map do |trend| diff --git a/app/models/trends/statuses.rb b/app/models/trends/statuses.rb index c47fb8427b..9be6eb13a5 100644 --- a/app/models/trends/statuses.rb +++ b/app/models/trends/statuses.rb @@ -74,12 +74,12 @@ class Trends::Statuses < Trends::Base # Now that all trends have up-to-date scores, and all the ones below the threshold have # been removed, we can recalculate their positions - StatusTrend.connection.exec_update('UPDATE status_trends SET rank = t0.calculated_rank FROM (SELECT id, row_number() OVER w AS calculated_rank FROM status_trends WINDOW w AS (PARTITION BY language ORDER BY score DESC)) t0 WHERE status_trends.id = t0.id') + StatusTrend.recalculate_ordered_rank end def request_review StatusTrend.pluck('distinct language').flat_map do |language| - score_at_threshold = StatusTrend.where(language: language, allowed: true).order(rank: :desc).where('rank <= ?', options[:review_threshold]).first&.score || 0 + score_at_threshold = StatusTrend.where(language: language, allowed: true).by_rank.ranked_below(options[:review_threshold]).first&.score || 0 status_trends = StatusTrend.where(language: language, allowed: false).joins(:status).includes(status: :account) status_trends.filter_map do |trend| From 10fdd882886c9154a532ce0789c5ad7d6eae6b5e Mon Sep 17 00:00:00 2001 From: Roni Laukkarinen Date: Mon, 26 Feb 2024 17:28:38 +0200 Subject: [PATCH 010/263] Change new explore compass icon CSS class to explore (#29395) --- app/javascript/mastodon/features/explore/index.jsx | 2 +- app/javascript/mastodon/features/getting_started/index.jsx | 2 +- .../mastodon/features/ui/components/navigation_panel.jsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/javascript/mastodon/features/explore/index.jsx b/app/javascript/mastodon/features/explore/index.jsx index 8cc8a4b009..d77aec7013 100644 --- a/app/javascript/mastodon/features/explore/index.jsx +++ b/app/javascript/mastodon/features/explore/index.jsx @@ -58,7 +58,7 @@ class Explore extends PureComponent { return ( , + , ); } diff --git a/app/javascript/mastodon/features/ui/components/navigation_panel.jsx b/app/javascript/mastodon/features/ui/components/navigation_panel.jsx index 8fa149d0b7..4a56988191 100644 --- a/app/javascript/mastodon/features/ui/components/navigation_panel.jsx +++ b/app/javascript/mastodon/features/ui/components/navigation_panel.jsx @@ -94,7 +94,7 @@ class NavigationPanel extends Component { )} {trendsEnabled ? ( - + ) : ( )} From c7555271a6584d9e7648383641f0c2d9b45ef8fd Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 26 Feb 2024 10:30:58 -0500 Subject: [PATCH 011/263] Remove unused `media-spoiler-*` JS/CSS (#29407) --- app/javascript/packs/admin.jsx | 12 ------------ app/javascript/styles/mastodon/admin.scss | 10 ---------- 2 files changed, 22 deletions(-) diff --git a/app/javascript/packs/admin.jsx b/app/javascript/packs/admin.jsx index 817a5d46bc..343678c184 100644 --- a/app/javascript/packs/admin.jsx +++ b/app/javascript/packs/admin.jsx @@ -94,18 +94,6 @@ Rails.delegate(document, batchCheckboxClassName, 'change', () => { } }); -Rails.delegate(document, '.media-spoiler-show-button', 'click', () => { - [].forEach.call(document.querySelectorAll('button.media-spoiler'), (element) => { - element.click(); - }); -}); - -Rails.delegate(document, '.media-spoiler-hide-button', 'click', () => { - [].forEach.call(document.querySelectorAll('.spoiler-button.spoiler-button--visible button'), (element) => { - element.click(); - }); -}); - Rails.delegate(document, '.filter-subset--with-select select', 'change', ({ target }) => { target.form.submit(); }); diff --git a/app/javascript/styles/mastodon/admin.scss b/app/javascript/styles/mastodon/admin.scss index 3f538d08d6..5625cdd5ec 100644 --- a/app/javascript/styles/mastodon/admin.scss +++ b/app/javascript/styles/mastodon/admin.scss @@ -622,16 +622,6 @@ body, input.button { margin: 0 5px 5px 0; } - - .media-spoiler-toggle-buttons { - margin-inline-start: auto; - - .button { - overflow: visible; - margin: 0 0 5px 5px; - float: right; - } - } } .back-link { From d51c3ac08753912f58391f1240497e83b10e3076 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Fourn=C3=A8s?= Date: Mon, 26 Feb 2024 17:09:40 +0100 Subject: [PATCH 012/263] Add a missing spec to `SessionsController#webauthn_options` (#29277) --- .../auth/sessions_controller_spec.rb | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/spec/controllers/auth/sessions_controller_spec.rb b/spec/controllers/auth/sessions_controller_spec.rb index 7adafc6f14..e78554ec7d 100644 --- a/spec/controllers/auth/sessions_controller_spec.rb +++ b/spec/controllers/auth/sessions_controller_spec.rb @@ -414,15 +414,17 @@ RSpec.describe Auth::SessionsController do end describe 'GET #webauthn_options' do + subject { get :webauthn_options, session: { attempt_user_id: user.id } } + + let!(:user) do + Fabricate(:user, email: 'x@y.com', password: 'abcdefgh', otp_required_for_login: true, otp_secret: User.generate_otp_secret(32)) + end + context 'with WebAuthn and OTP enabled as second factor' do let(:domain) { "#{Rails.configuration.x.use_https ? 'https' : 'http'}://#{Rails.configuration.x.web_domain}" } let(:fake_client) { WebAuthn::FakeClient.new(domain) } - let!(:user) do - Fabricate(:user, email: 'x@y.com', password: 'abcdefgh', otp_required_for_login: true, otp_secret: User.generate_otp_secret(32)) - end - before do user.update(webauthn_id: WebAuthn.generate_user_id) public_key_credential = WebAuthn::Credential.from_create(fake_client.create) @@ -436,9 +438,18 @@ RSpec.describe Auth::SessionsController do end it 'returns http success' do - get :webauthn_options + subject + expect(response).to have_http_status 200 end end + + context 'when WebAuthn not enabled' do + it 'returns http unauthorized' do + subject + + expect(response).to have_http_status 401 + end + end end end From 1540f42522c819879c72a97b8b72ed3019440a39 Mon Sep 17 00:00:00 2001 From: Damien Mathieu <42@dmathieu.com> Date: Mon, 26 Feb 2024 17:09:56 +0100 Subject: [PATCH 013/263] Better tests for auth/registrations#update (#29303) --- .../auth/registrations_controller_spec.rb | 72 ++++++++++++++++++- 1 file changed, 69 insertions(+), 3 deletions(-) diff --git a/spec/controllers/auth/registrations_controller_spec.rb b/spec/controllers/auth/registrations_controller_spec.rb index 0b7f02f590..75ab287652 100644 --- a/spec/controllers/auth/registrations_controller_spec.rb +++ b/spec/controllers/auth/registrations_controller_spec.rb @@ -44,27 +44,93 @@ RSpec.describe Auth::RegistrationsController do end end - describe 'GET #update' do - let(:user) { Fabricate(:user) } + describe 'PUT #update' do + let(:current_password) { 'current password' } + let(:user) { Fabricate(:user, password: current_password) } before do request.env['devise.mapping'] = Devise.mappings[:user] sign_in(user, scope: :user) - post :update end it 'returns http success' do + put :update expect(response).to have_http_status(200) end it 'returns private cache control headers' do + put :update expect(response.headers['Cache-Control']).to include('private, no-store') end + it 'can update the user email' do + expect do + put :update, params: { + user: { + email: 'newemail@example.com', + current_password: current_password, + }, + } + expect(response).to redirect_to(edit_user_registration_path) + end.to change { user.reload.unconfirmed_email }.to('newemail@example.com') + end + + it 'requires the current password to update the email' do + expect do + put :update, params: { + user: { + email: 'newemail@example.com', + current_password: 'something', + }, + } + expect(response).to have_http_status(200) + end.to_not(change { user.reload.unconfirmed_email }) + end + + it 'can update the user password' do + expect do + put :update, params: { + user: { + password: 'new password', + password_confirmation: 'new password', + current_password: current_password, + }, + } + expect(response).to redirect_to(edit_user_registration_path) + end.to(change { user.reload.encrypted_password }) + end + + it 'requires the password confirmation' do + expect do + put :update, params: { + user: { + password: 'new password', + password_confirmation: 'something else', + current_password: current_password, + }, + } + expect(response).to have_http_status(200) + end.to_not(change { user.reload.encrypted_password }) + end + + it 'requires the current password to update the password' do + expect do + put :update, params: { + user: { + password: 'new password', + password_confirmation: 'new password', + current_password: 'something', + }, + } + expect(response).to have_http_status(200) + end.to_not(change { user.reload.encrypted_password }) + end + context 'when suspended' do let(:user) { Fabricate(:user, account_attributes: { username: 'test', suspended_at: Time.now.utc }) } it 'returns http forbidden' do + put :update expect(response).to have_http_status(403) end end From 8156113d58db851d00f8052e66459e6dafb71e82 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 26 Feb 2024 11:27:07 -0500 Subject: [PATCH 014/263] Use `response_vary_headers` method in requests/cache_spec (#29411) --- spec/requests/cache_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/requests/cache_spec.rb b/spec/requests/cache_spec.rb index dbba228740..c56eec16c5 100644 --- a/spec/requests/cache_spec.rb +++ b/spec/requests/cache_spec.rb @@ -184,7 +184,7 @@ describe 'Caching behavior' do get '/users/alice' expect(response).to redirect_to('/@alice') - expect(response.headers['Vary']&.split(',')&.map { |x| x.strip.downcase }).to include('accept') + expect(response_vary_headers).to include('accept') end end From f6903d9ab03f43468125e1998a8afd332c48d56b Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 20 Feb 2024 10:10:44 +0100 Subject: [PATCH 015/263] [Glitch] Change explore icon from hashtag to compass in web UI Port b8b2f20b16d92274fc3e576f493d19347f9421da to glitch-soc Signed-off-by: Claire --- app/javascript/flavours/glitch/features/explore/index.jsx | 4 ++-- .../glitch/features/ui/components/navigation_panel.jsx | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/javascript/flavours/glitch/features/explore/index.jsx b/app/javascript/flavours/glitch/features/explore/index.jsx index 9a18ccb72c..3f204ce0bb 100644 --- a/app/javascript/flavours/glitch/features/explore/index.jsx +++ b/app/javascript/flavours/glitch/features/explore/index.jsx @@ -9,8 +9,8 @@ import { NavLink, Switch, Route } from 'react-router-dom'; import { connect } from 'react-redux'; +import ExploreIcon from '@/material-icons/400-24px/explore.svg?react'; import SearchIcon from '@/material-icons/400-24px/search.svg?react'; -import TagIcon from '@/material-icons/400-24px/tag.svg?react'; import Column from 'flavours/glitch/components/column'; import ColumnHeader from 'flavours/glitch/components/column_header'; import Search from 'flavours/glitch/features/compose/containers/search_container'; @@ -60,7 +60,7 @@ class Explore extends PureComponent { + ) : ( )} From 658911c268a8460440773271a96cfed34bdd896b Mon Sep 17 00:00:00 2001 From: Roni Laukkarinen Date: Mon, 26 Feb 2024 02:57:13 +0200 Subject: [PATCH 016/263] [Glitch] Improve alt text form accessibility with long texts Port bbf6cb66f63c23daea725cb2b444a7c9f6c46899 to glitch-soc Signed-off-by: Claire --- app/javascript/flavours/glitch/styles/components.scss | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app/javascript/flavours/glitch/styles/components.scss b/app/javascript/flavours/glitch/styles/components.scss index 024911139c..4a2e1890c4 100644 --- a/app/javascript/flavours/glitch/styles/components.scss +++ b/app/javascript/flavours/glitch/styles/components.scss @@ -6504,6 +6504,7 @@ a.status-card { .report-modal__comment { box-sizing: border-box; width: 50%; + min-width: 50%; @media screen and (width <= 480px) { width: 100%; @@ -6572,6 +6573,14 @@ a.status-card { min-height: 100px; max-height: 50vh; border: 0; + + @media screen and (height <= 600px) { + max-height: 20vh; + } + + @media screen and (max-width: $no-columns-breakpoint) { + max-height: 20vh; + } } .setting-toggle { From 3fc485927903bfe78f4dd59c62265fc7e74cb6f9 Mon Sep 17 00:00:00 2001 From: Roni Laukkarinen Date: Mon, 26 Feb 2024 02:57:48 +0200 Subject: [PATCH 017/263] [Glitch] Fix search icon position on mobile Port 1cb74eeec00b413d326308930c48280b4f8325f4 to glitch-soc Signed-off-by: Claire --- app/javascript/flavours/glitch/styles/components.scss | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/javascript/flavours/glitch/styles/components.scss b/app/javascript/flavours/glitch/styles/components.scss index 4a2e1890c4..e0c4b3768b 100644 --- a/app/javascript/flavours/glitch/styles/components.scss +++ b/app/javascript/flavours/glitch/styles/components.scss @@ -5720,7 +5720,6 @@ a.status-card { .icon { position: absolute; top: 12px + 2px; - inset-inline-start: 16px - 2px; display: inline-block; opacity: 0; transition: all 100ms linear; @@ -5735,6 +5734,10 @@ a.status-card { pointer-events: auto; opacity: 1; } + + @media screen and (min-width: $no-gap-breakpoint) { + inset-inline-start: 16px - 2px; + } } .icon-search { From 20bc633b0cd53308e51f59f2f0c7ae2a2f756786 Mon Sep 17 00:00:00 2001 From: Roni Laukkarinen Date: Mon, 26 Feb 2024 17:28:38 +0200 Subject: [PATCH 018/263] [Glitch] Change new explore compass icon CSS class to explore Port 10fdd882886c9154a532ce0789c5ad7d6eae6b5e to glitch-soc Signed-off-by: Claire --- app/javascript/flavours/glitch/features/explore/index.jsx | 2 +- .../flavours/glitch/features/getting_started/index.jsx | 2 +- .../flavours/glitch/features/ui/components/navigation_panel.jsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/javascript/flavours/glitch/features/explore/index.jsx b/app/javascript/flavours/glitch/features/explore/index.jsx index 3f204ce0bb..dca2e59c5c 100644 --- a/app/javascript/flavours/glitch/features/explore/index.jsx +++ b/app/javascript/flavours/glitch/features/explore/index.jsx @@ -59,7 +59,7 @@ class Explore extends PureComponent { return ( ); + navItems.push(); } if (signedIn) { diff --git a/app/javascript/flavours/glitch/features/ui/components/navigation_panel.jsx b/app/javascript/flavours/glitch/features/ui/components/navigation_panel.jsx index 4833c5a7c2..a6c91a3d44 100644 --- a/app/javascript/flavours/glitch/features/ui/components/navigation_panel.jsx +++ b/app/javascript/flavours/glitch/features/ui/components/navigation_panel.jsx @@ -91,7 +91,7 @@ class NavigationPanel extends Component { )} {trendsEnabled ? ( - + ) : ( )} From 8a80ad7fc41057689bbeac454af2c40e7dc6e86d Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 26 Feb 2024 10:30:58 -0500 Subject: [PATCH 019/263] [Glitch] Remove unused `media-spoiler-*` JS/CSS Port c7555271a6584d9e7648383641f0c2d9b45ef8fd to glitch-soc Signed-off-by: Claire --- app/javascript/flavours/glitch/styles/admin.scss | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/app/javascript/flavours/glitch/styles/admin.scss b/app/javascript/flavours/glitch/styles/admin.scss index 5963f3ee6e..97ea6d98bb 100644 --- a/app/javascript/flavours/glitch/styles/admin.scss +++ b/app/javascript/flavours/glitch/styles/admin.scss @@ -643,17 +643,6 @@ body, margin-bottom: 5px; margin-inline-end: 5px; } - - .media-spoiler-toggle-buttons { - margin-inline-start: auto; - - .button { - overflow: visible; - margin-bottom: 5px; - margin-inline-start: 5px; - float: right; - } - } } .back-link { From a30cdfd4d4fdde3245174210b9f7c0a0be7bc122 Mon Sep 17 00:00:00 2001 From: zunda Date: Mon, 26 Feb 2024 12:43:07 -1000 Subject: [PATCH 020/263] Specify 410 for code when responding as json while self-destruction (#29420) --- app/controllers/application_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 5f8725f6fc..a046ea19c9 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -178,7 +178,7 @@ class ApplicationController < ActionController::Base respond_to do |format| format.any { render 'errors/self_destruct', layout: 'auth', status: 410, formats: [:html] } - format.json { render json: { error: Rack::Utils::HTTP_STATUS_CODES[410] }, status: code } + format.json { render json: { error: Rack::Utils::HTTP_STATUS_CODES[410] }, status: 410 } end end From 213c87ae595cc1ddcb618516106712b0aae789bd Mon Sep 17 00:00:00 2001 From: Evan Paterakis Date: Tue, 27 Feb 2024 12:46:58 +0200 Subject: [PATCH 021/263] Fix filters title and keywords overflow (#29396) --- app/javascript/styles/mastodon/admin.scss | 1 + app/javascript/styles/mastodon/forms.scss | 1 + 2 files changed, 2 insertions(+) diff --git a/app/javascript/styles/mastodon/admin.scss b/app/javascript/styles/mastodon/admin.scss index 5625cdd5ec..fcd630c23c 100644 --- a/app/javascript/styles/mastodon/admin.scss +++ b/app/javascript/styles/mastodon/admin.scss @@ -1044,6 +1044,7 @@ a.name-tag, display: flex; justify-content: space-between; margin-bottom: 0; + word-break: break-word; } &__permissions { diff --git a/app/javascript/styles/mastodon/forms.scss b/app/javascript/styles/mastodon/forms.scss index 555d43cc1c..3ac5c3df95 100644 --- a/app/javascript/styles/mastodon/forms.scss +++ b/app/javascript/styles/mastodon/forms.scss @@ -1078,6 +1078,7 @@ code { &__type { color: $darker-text-color; + word-break: break-word; } } From 9fa7338b6e5921e184cd23c21df40a08940d03de Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 27 Feb 2024 05:48:38 -0500 Subject: [PATCH 022/263] Use `github` reporter on `haml-lint` runs on CI (#29375) --- .github/workflows/lint-haml.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/lint-haml.yml b/.github/workflows/lint-haml.yml index 8dcab845ee..25615b720d 100644 --- a/.github/workflows/lint-haml.yml +++ b/.github/workflows/lint-haml.yml @@ -36,4 +36,4 @@ jobs: - name: Run haml-lint run: | echo "::add-matcher::.github/workflows/haml-lint-problem-matcher.json" - bundle exec haml-lint + bundle exec haml-lint --reporter github From 90573c3abbc0783c25cb4e3aa8c298e10259cb57 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 27 Feb 2024 12:41:19 +0100 Subject: [PATCH 023/263] Change behavior of privacy dropdown to only change value on validation (#29406) --- .../compose/components/language_dropdown.jsx | 1 + .../compose/components/privacy_dropdown.jsx | 124 +---------------- .../components/privacy_dropdown_menu.jsx | 128 ++++++++++++++++++ 3 files changed, 131 insertions(+), 122 deletions(-) create mode 100644 app/javascript/mastodon/features/compose/components/privacy_dropdown_menu.jsx diff --git a/app/javascript/mastodon/features/compose/components/language_dropdown.jsx b/app/javascript/mastodon/features/compose/components/language_dropdown.jsx index 85057799be..c3bd908a4e 100644 --- a/app/javascript/mastodon/features/compose/components/language_dropdown.jsx +++ b/app/javascript/mastodon/features/compose/components/language_dropdown.jsx @@ -141,6 +141,7 @@ class LanguageDropdownMenu extends PureComponent { case 'Escape': onClose(); break; + case ' ': case 'Enter': this.handleClick(e); break; diff --git a/app/javascript/mastodon/features/compose/components/privacy_dropdown.jsx b/app/javascript/mastodon/features/compose/components/privacy_dropdown.jsx index 82f9027388..071f0a6fab 100644 --- a/app/javascript/mastodon/features/compose/components/privacy_dropdown.jsx +++ b/app/javascript/mastodon/features/compose/components/privacy_dropdown.jsx @@ -5,16 +5,16 @@ import { injectIntl, defineMessages } from 'react-intl'; import classNames from 'classnames'; -import { supportsPassiveEvents } from 'detect-passive-events'; import Overlay from 'react-overlays/Overlay'; import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react'; -import InfoIcon from '@/material-icons/400-24px/info.svg?react'; import LockIcon from '@/material-icons/400-24px/lock.svg?react'; import PublicIcon from '@/material-icons/400-24px/public.svg?react'; import QuietTimeIcon from '@/material-icons/400-24px/quiet_time.svg?react'; import { Icon } from 'mastodon/components/icon'; +import { PrivacyDropdownMenu } from './privacy_dropdown_menu'; + const messages = defineMessages({ public_short: { id: 'privacy.public.short', defaultMessage: 'Public' }, public_long: { id: 'privacy.public.long', defaultMessage: 'Anyone on and off Mastodon' }, @@ -28,126 +28,6 @@ const messages = defineMessages({ unlisted_extra: { id: 'privacy.unlisted.additional', defaultMessage: 'This behaves exactly like public, except the post will not appear in live feeds or hashtags, explore, or Mastodon search, even if you are opted-in account-wide.' }, }); -const listenerOptions = supportsPassiveEvents ? { passive: true, capture: true } : true; - -class PrivacyDropdownMenu extends PureComponent { - - static propTypes = { - style: PropTypes.object, - items: PropTypes.array.isRequired, - value: PropTypes.string.isRequired, - onClose: PropTypes.func.isRequired, - onChange: PropTypes.func.isRequired, - }; - - handleDocumentClick = e => { - if (this.node && !this.node.contains(e.target)) { - this.props.onClose(); - e.stopPropagation(); - } - }; - - handleKeyDown = e => { - const { items } = this.props; - const value = e.currentTarget.getAttribute('data-index'); - const index = items.findIndex(item => { - return (item.value === value); - }); - let element = null; - - switch(e.key) { - case 'Escape': - this.props.onClose(); - break; - case 'Enter': - this.handleClick(e); - break; - case 'ArrowDown': - element = this.node.childNodes[index + 1] || this.node.firstChild; - break; - case 'ArrowUp': - element = this.node.childNodes[index - 1] || this.node.lastChild; - break; - case 'Tab': - if (e.shiftKey) { - element = this.node.childNodes[index - 1] || this.node.lastChild; - } else { - element = this.node.childNodes[index + 1] || this.node.firstChild; - } - break; - case 'Home': - element = this.node.firstChild; - break; - case 'End': - element = this.node.lastChild; - break; - } - - if (element) { - element.focus(); - this.props.onChange(element.getAttribute('data-index')); - e.preventDefault(); - e.stopPropagation(); - } - }; - - handleClick = e => { - const value = e.currentTarget.getAttribute('data-index'); - - e.preventDefault(); - - this.props.onClose(); - this.props.onChange(value); - }; - - componentDidMount () { - document.addEventListener('click', this.handleDocumentClick, { capture: true }); - document.addEventListener('touchend', this.handleDocumentClick, listenerOptions); - if (this.focusedItem) this.focusedItem.focus({ preventScroll: true }); - } - - componentWillUnmount () { - document.removeEventListener('click', this.handleDocumentClick, { capture: true }); - document.removeEventListener('touchend', this.handleDocumentClick, listenerOptions); - } - - setRef = c => { - this.node = c; - }; - - setFocusRef = c => { - this.focusedItem = c; - }; - - render () { - const { style, items, value } = this.props; - - return ( -
- {items.map(item => ( -
-
- -
- -
- {item.text} - {item.meta} -
- - {item.extra && ( -
- -
- )} -
- ))} -
- ); - } - -} - class PrivacyDropdown extends PureComponent { static propTypes = { diff --git a/app/javascript/mastodon/features/compose/components/privacy_dropdown_menu.jsx b/app/javascript/mastodon/features/compose/components/privacy_dropdown_menu.jsx new file mode 100644 index 0000000000..1a5ff1fa80 --- /dev/null +++ b/app/javascript/mastodon/features/compose/components/privacy_dropdown_menu.jsx @@ -0,0 +1,128 @@ +import PropTypes from 'prop-types'; +import { useCallback, useEffect, useRef, useState } from 'react'; + +import classNames from 'classnames'; + +import { supportsPassiveEvents } from 'detect-passive-events'; + +import InfoIcon from '@/material-icons/400-24px/info.svg?react'; +import { Icon } from 'mastodon/components/icon'; + +const listenerOptions = supportsPassiveEvents ? { passive: true, capture: true } : true; + +export const PrivacyDropdownMenu = ({ style, items, value, onClose, onChange }) => { + const nodeRef = useRef(null); + const focusedItemRef = useRef(null); + const [currentValue, setCurrentValue] = useState(value); + + const handleDocumentClick = useCallback((e) => { + if (nodeRef.current && !nodeRef.current.contains(e.target)) { + onClose(); + e.stopPropagation(); + } + }, [nodeRef, onClose]); + + const handleClick = useCallback((e) => { + const value = e.currentTarget.getAttribute('data-index'); + + e.preventDefault(); + + onClose(); + onChange(value); + }, [onClose, onChange]); + + const handleKeyDown = useCallback((e) => { + const value = e.currentTarget.getAttribute('data-index'); + const index = items.findIndex(item => (item.value === value)); + + let element = null; + + switch (e.key) { + case 'Escape': + onClose(); + break; + case ' ': + case 'Enter': + handleClick(e); + break; + case 'ArrowDown': + element = nodeRef.current.childNodes[index + 1] || nodeRef.current.firstChild; + break; + case 'ArrowUp': + element = nodeRef.current.childNodes[index - 1] || nodeRef.current.lastChild; + break; + case 'Tab': + if (e.shiftKey) { + element = nodeRef.current.childNodes[index + 1] || nodeRef.current.firstChild; + } else { + element = nodeRef.current.childNodes[index - 1] || nodeRef.current.lastChild; + } + break; + case 'Home': + element = nodeRef.current.firstChild; + break; + case 'End': + element = nodeRef.current.lastChild; + break; + } + + if (element) { + element.focus(); + setCurrentValue(element.getAttribute('data-index')); + e.preventDefault(); + e.stopPropagation(); + } + }, [nodeRef, items, onClose, handleClick, setCurrentValue]); + + useEffect(() => { + document.addEventListener('click', handleDocumentClick, { capture: true }); + document.addEventListener('touchend', handleDocumentClick, listenerOptions); + focusedItemRef.current?.focus({ preventScroll: true }); + + return () => { + document.removeEventListener('click', handleDocumentClick, { capture: true }); + document.removeEventListener('touchend', handleDocumentClick, listenerOptions); + }; + }, [handleDocumentClick]); + + return ( +
    + {items.map(item => ( +
  • +
    + +
    + +
    + {item.text} + {item.meta} +
    + + {item.extra && ( +
    + +
    + )} +
  • + ))} +
+ ); +}; + +PrivacyDropdownMenu.propTypes = { + style: PropTypes.object, + items: PropTypes.array.isRequired, + value: PropTypes.string.isRequired, + onClose: PropTypes.func.isRequired, + onChange: PropTypes.func.isRequired, +}; From 54e3a82f1d5248ff91a297d6d06de9f86e9cd208 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 27 Feb 2024 12:48:42 +0100 Subject: [PATCH 024/263] Update dependency thor to v1.3.1 (#29421) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 090697e709..076cf915d0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -744,7 +744,7 @@ GEM terrapin (1.0.1) climate_control test-prof (1.3.1) - thor (1.3.0) + thor (1.3.1) tilt (2.3.0) timeout (0.4.1) tpm-key_attestation (0.12.0) From 9e78129e6e45e9485f567a88cb4b3dbc0b25a7d2 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 27 Feb 2024 06:50:21 -0500 Subject: [PATCH 025/263] Use "cacheable response" shared example in more places (#29419) --- spec/controllers/custom_css_controller_spec.rb | 13 +------------ .../instance_actors_controller_spec.rb | 13 ++++--------- spec/controllers/manifests_controller_spec.rb | 13 +------------ spec/controllers/tags_controller_spec.rb | 16 ++-------------- spec/support/examples/cache.rb | 2 +- 5 files changed, 9 insertions(+), 48 deletions(-) diff --git a/spec/controllers/custom_css_controller_spec.rb b/spec/controllers/custom_css_controller_spec.rb index 99d36d21b9..405fa0bcf3 100644 --- a/spec/controllers/custom_css_controller_spec.rb +++ b/spec/controllers/custom_css_controller_spec.rb @@ -14,17 +14,6 @@ describe CustomCssController do expect(response).to have_http_status(200) end - it 'returns public cache control header' do - expect(response.headers['Cache-Control']).to include('public') - end - - it 'does not set cookies' do - expect(response.cookies).to be_empty - expect(response.headers['Set-Cookies']).to be_nil - end - - it 'does not set sessions' do - expect(session).to be_empty - end + it_behaves_like 'cacheable response' end end diff --git a/spec/controllers/instance_actors_controller_spec.rb b/spec/controllers/instance_actors_controller_spec.rb index be1eefa7b2..70aaff9d65 100644 --- a/spec/controllers/instance_actors_controller_spec.rb +++ b/spec/controllers/instance_actors_controller_spec.rb @@ -12,23 +12,18 @@ RSpec.describe InstanceActorsController do get :show, params: { format: format } end - it 'returns http success with correct media type, headers, and session values' do + it 'returns http success with correct media type and body' do expect(response) .to have_http_status(200) .and have_attributes( - media_type: eq('application/activity+json'), - cookies: be_empty + media_type: eq('application/activity+json') ) - expect(response.headers) - .to include('Cache-Control' => include('public')) - .and not_include('Set-Cookies') - - expect(session).to be_empty - expect(body_as_json) .to include(:id, :type, :preferredUsername, :inbox, :publicKey, :inbox, :outbox, :url) end + + it_behaves_like 'cacheable response' end before do diff --git a/spec/controllers/manifests_controller_spec.rb b/spec/controllers/manifests_controller_spec.rb index d0699c438b..9279fae024 100644 --- a/spec/controllers/manifests_controller_spec.rb +++ b/spec/controllers/manifests_controller_spec.rb @@ -14,17 +14,6 @@ describe ManifestsController do expect(response).to have_http_status(200) end - it 'returns public cache control header' do - expect(response.headers['Cache-Control']).to include('public') - end - - it 'does not set cookies' do - expect(response.cookies).to be_empty - expect(response.headers['Set-Cookies']).to be_nil - end - - it 'does not set sessions' do - expect(session).to be_empty - end + it_behaves_like 'cacheable response' end end diff --git a/spec/controllers/tags_controller_spec.rb b/spec/controllers/tags_controller_spec.rb index d41e707d43..2bb0c8de3b 100644 --- a/spec/controllers/tags_controller_spec.rb +++ b/spec/controllers/tags_controller_spec.rb @@ -20,13 +20,7 @@ RSpec.describe TagsController do expect(response).to have_http_status(200) end - it 'returns Vary header' do - expect(response.headers['Vary']).to eq 'Accept, Accept-Language, Cookie' - end - - it 'returns public Cache-Control header' do - expect(response.headers['Cache-Control']).to include 'public' - end + it_behaves_like 'cacheable response', expects_vary: 'Accept, Accept-Language, Cookie' end context 'when requested as JSON' do @@ -36,13 +30,7 @@ RSpec.describe TagsController do expect(response).to have_http_status(200) end - it 'returns Vary header' do - expect(response.headers['Vary']).to eq 'Accept, Accept-Language, Cookie' - end - - it 'returns public Cache-Control header' do - expect(response.headers['Cache-Control']).to include 'public' - end + it_behaves_like 'cacheable response', expects_vary: 'Accept, Accept-Language, Cookie' end end diff --git a/spec/support/examples/cache.rb b/spec/support/examples/cache.rb index afbee66b2d..60e522f426 100644 --- a/spec/support/examples/cache.rb +++ b/spec/support/examples/cache.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true shared_examples 'cacheable response' do |expects_vary: false| - it 'sets correct cache and vary headers and does not set cookies or session' do + it 'sets correct cache and vary headers and does not set cookies or session', :aggregate_failures do expect(response.cookies).to be_empty expect(response.headers['Set-Cookies']).to be_nil From 76d256138e6029d848da7cfdf5b8682832c44033 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 27 Feb 2024 06:52:37 -0500 Subject: [PATCH 026/263] Wrap media attachment size calculation in `COALESCE` (#29415) --- .../admin/metrics/measure/instance_media_attachments_measure.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/lib/admin/metrics/measure/instance_media_attachments_measure.rb b/app/lib/admin/metrics/measure/instance_media_attachments_measure.rb index 2d4b5f56b0..1d2dbbe414 100644 --- a/app/lib/admin/metrics/measure/instance_media_attachments_measure.rb +++ b/app/lib/admin/metrics/measure/instance_media_attachments_measure.rb @@ -50,7 +50,7 @@ class Admin::Metrics::Measure::InstanceMediaAttachmentsMeasure < Admin::Metrics: WHERE date_trunc('day', media_attachments.created_at)::date = axis.period AND #{account_domain_sql(params[:include_subdomains])} ) - SELECT SUM(size) FROM new_media_attachments + SELECT COALESCE(SUM(size), 0) FROM new_media_attachments ) AS value FROM ( SELECT generate_series(date_trunc('day', :start_at::timestamp)::date, date_trunc('day', :end_at::timestamp)::date, interval '1 day') AS period From bc4c5ed91883439e5de9ef034b6875c36f4b4241 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 27 Feb 2024 15:53:53 +0100 Subject: [PATCH 027/263] New Crowdin Translations (automated) (#29423) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/nn.json | 30 ++++++++++++++++--------- config/locales/devise.nn.yml | 19 ++++++++-------- config/locales/nn.yml | 22 +++++++++--------- config/locales/simple_form.nn.yml | 18 ++++++++------- 4 files changed, 51 insertions(+), 38 deletions(-) diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 2118eb5739..3cc537f54f 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -40,7 +40,7 @@ "account.following_counter": "{count, plural, one {Fylgjer {counter}} other {Fylgjer {counter}}}", "account.follows.empty": "Denne brukaren fylgjer ikkje nokon enno.", "account.go_to_profile": "Gå til profil", - "account.hide_reblogs": "Skjul framhevingar frå @{name}", + "account.hide_reblogs": "Gøym framhevingar frå @{name}", "account.in_memoriam": "Til minne om.", "account.joined_short": "Vart med", "account.languages": "Endre språktingingar", @@ -113,7 +113,7 @@ "column.community": "Lokal tidsline", "column.direct": "Private omtaler", "column.directory": "Sjå gjennom profilar", - "column.domain_blocks": "Skjulte domene", + "column.domain_blocks": "Blokkerte domene", "column.favourites": "Favorittar", "column.firehose": "Tidslinjer", "column.follow_requests": "Fylgjeførespurnadar", @@ -124,7 +124,7 @@ "column.pins": "Festa tut", "column.public": "Samla tidsline", "column_back_button.label": "Attende", - "column_header.hide_settings": "Gøym innstillingar", + "column_header.hide_settings": "Gøym innstillingane", "column_header.moveLeft_settings": "Flytt kolonne til venstre", "column_header.moveRight_settings": "Flytt kolonne til høgre", "column_header.pin": "Fest", @@ -171,14 +171,14 @@ "confirmations.delete_list.message": "Er du sikker på at du vil sletta denne lista for alltid?", "confirmations.discard_edit_media.confirm": "Forkast", "confirmations.discard_edit_media.message": "Du har ulagra endringar i mediaskildringa eller førehandsvisinga. Vil du forkasta dei likevel?", - "confirmations.domain_block.confirm": "Skjul alt frå domenet", + "confirmations.domain_block.confirm": "Blokker heile domenet", "confirmations.domain_block.message": "Er du heilt, heilt sikker på at du vil skjula heile {domain}? I dei fleste tilfelle er det godt nok og føretrekt med nokre få målretta blokkeringar eller målbindingar. Du kjem ikkje til å sjå innhald frå domenet i fødererte tidsliner eller i varsla dine. Fylgjarane dine frå domenet vert fjerna.", "confirmations.edit.confirm": "Rediger", "confirmations.edit.message": "Å redigera no vil overskriva den meldinga du er i ferd med å skriva. Er du sikker på at du vil halda fram?", "confirmations.logout.confirm": "Logg ut", "confirmations.logout.message": "Er du sikker på at du vil logga ut?", "confirmations.mute.confirm": "Målbind", - "confirmations.mute.explanation": "Dette vil skjula innlegg som kjem frå og som nemner dei, men vil framleis la dei sjå innlegga dine og fylgje deg.", + "confirmations.mute.explanation": "Dette vil gøyma innlegga deira og innlegg som nemner dei, men dei vil framleis kunna sjå innlegga dine og fylgja deg.", "confirmations.mute.message": "Er du sikker på at du vil målbinda {name}?", "confirmations.redraft.confirm": "Slett & skriv på nytt", "confirmations.redraft.message": "Er du sikker på at du vil sletta denne statusen og skriva han på nytt? Då misser du favorittar og framhevingar, og svar til det opprinnelege innlegget vert foreldrelause.", @@ -230,7 +230,7 @@ "empty_column.bookmarked_statuses": "Du har ikkje lagra noko bokmerke enno. Når du set bokmerke på eit innlegg, dukkar det opp her.", "empty_column.community": "Den lokale tidslina er tom. Skriv noko offentleg å få ballen til å rulle!", "empty_column.direct": "Du har ingen private omtaler enda. Etter du har sendt eller mottatt en, så vil den dukke opp her.", - "empty_column.domain_blocks": "Det er ingen skjulte domene til no.", + "empty_column.domain_blocks": "Det er ingen blokkerte domene enno.", "empty_column.explore_statuses": "Ingenting er i støytet nett no. Prøv igjen seinare!", "empty_column.favourited_statuses": "Du har ingen favoritt-statusar ennå. Når du merkjer ein som favoritt, dukkar han opp her.", "empty_column.favourites": "Ingen har merkt denne statusen som favoritt enno. Når nokon gjer det, dukkar dei opp her.", @@ -277,7 +277,13 @@ "follow_request.authorize": "Autoriser", "follow_request.reject": "Avvis", "follow_requests.unlocked_explanation": "Sjølv om kontoen din ikkje er låst tenkte dei som driv {domain} at du kanskje ville gå gjennom førespurnadar frå desse kontoane manuelt.", + "follow_suggestions.curated_suggestion": "Utvalt av staben", "follow_suggestions.dismiss": "Ikkje vis igjen", + "follow_suggestions.hints.featured": "Denne profilen er handplukka av folka på {domain}.", + "follow_suggestions.hints.friends_of_friends": "Denne profilen er populær hjå dei du fylgjer.", + "follow_suggestions.hints.most_followed": "Mange på {domain} fylgjer denne profilen.", + "follow_suggestions.hints.most_interactions": "Denne profilen har nyss fått mykje merksemd på {domain}.", + "follow_suggestions.hints.similar_to_recently_followed": "Denne profilen liknar på dei andre profilane du har fylgt i det siste.", "follow_suggestions.personalized_suggestion": "Personleg forslag", "follow_suggestions.popular_suggestion": "Populært forslag", "follow_suggestions.view_all": "Vis alle", @@ -395,7 +401,7 @@ "media_gallery.toggle_visible": "{number, plural, one {Skjul bilete} other {Skjul bilete}}", "moved_to_account_banner.text": "Kontoen din, {disabledAccount} er for tida deaktivert fordi du har flytta til {movedToAccount}.", "mute_modal.duration": "Varigheit", - "mute_modal.hide_notifications": "Skjul varsel frå denne brukaren?", + "mute_modal.hide_notifications": "Gøym varsel frå denne brukaren?", "mute_modal.indefinite": "På ubestemt tid", "navigation_bar.about": "Om", "navigation_bar.advanced_interface": "Opne i avansert nettgrensesnitt", @@ -479,7 +485,8 @@ "onboarding.follows.empty": "Me kan ikkje visa deg nokon resultat no. Du kan prøva å søkja eller bla gjennom utforsk-sida for å finna folk å fylgja, eller du kan prøva att seinare.", "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!", "onboarding.follows.title": "Popular on Mastodon", - "onboarding.profile.discoverable": "Gjør min profil synlig", + "onboarding.profile.discoverable": "Gjer profilen min synleg", + "onboarding.profile.discoverable_hint": "Når du vel å gjera profilen din synleg på Mastodon, vil innlegga dine syna i søkjeresultat og populære innlegg, og profilen din kan bli føreslegen for folk med liknande interesser som deg.", "onboarding.profile.display_name": "Synleg namn", "onboarding.profile.display_name_hint": "Det fulle namnet eller kallenamnet ditt…", "onboarding.profile.lead": "Du kan alltid fullføra dette seinare i innstillingane, og der er det endå fleire tilpassingsalternativ.", @@ -528,11 +535,12 @@ "privacy.private.short": "Følgjarar", "privacy.public.long": "Kven som helst på og av Mastodon", "privacy.public.short": "Offentleg", + "privacy.unlisted.additional": "Dette er akkurat som offentleg, bortsett frå at innlegga ikkje dukkar opp i direktestraumar eller merkelappar, i oppdagingar eller Mastodon-søk, sjølv om du har sagt ja til at kontoen skal vera synleg.", "privacy.unlisted.long": "Færre algoritmiske fanfarar", "privacy.unlisted.short": "Stille offentleg", "privacy_policy.last_updated": "Sist oppdatert {date}", "privacy_policy.title": "Personvernsreglar", - "recommended": "Anbefalt", + "recommended": "Tilrådd", "refresh": "Oppdater", "regeneration_indicator.label": "Lastar…", "regeneration_indicator.sublabel": "Heimetidslina di vert førebudd!", @@ -605,7 +613,7 @@ "search.quick_action.status_search": "Innlegg som samsvarer med {x}", "search.search_or_paste": "Søk eller lim inn URL", "search_popout.full_text_search_disabled_message": "Ikkje tilgjengeleg på {domain}.", - "search_popout.full_text_search_logged_out_message": "Bare tilgjengelig når man er logget inn.", + "search_popout.full_text_search_logged_out_message": "Berre tilgjengeleg når du er logga inn.", "search_popout.language_code": "ISO-språkkode", "search_popout.options": "Søkjealternativ", "search_popout.quick_actions": "Hurtighandlinger", @@ -654,7 +662,7 @@ "status.load_more": "Last inn meir", "status.media.open": "Klikk for å opne", "status.media.show": "Klikk for å vise", - "status.media_hidden": "Medium gøymd", + "status.media_hidden": "Mediet er gøymt", "status.mention": "Nemn @{name}", "status.more": "Meir", "status.mute": "Målbind @{name}", diff --git a/config/locales/devise.nn.yml b/config/locales/devise.nn.yml index 96920d42b5..01d6e5a468 100644 --- a/config/locales/devise.nn.yml +++ b/config/locales/devise.nn.yml @@ -12,6 +12,7 @@ nn: last_attempt: Du har eitt forsøk igjen før kontoen din vert låst. locked: Kontoen din er låst. not_found_in_database: Ugyldig %{authentication_keys} eller passord. + omniauth_user_creation_failure: Greidde ikkje laga konto for denne identiteten. pending: Kontoen din er vert gjennomgått enno. timeout: Økta di er utgått. Logg inn omatt for å halde fram. unauthenticated: Du må logge inn eller registere deg før du kan halde fram. @@ -47,19 +48,19 @@ nn: subject: 'Mastodon: Instuksjonar for å endra passord' title: Attstilling av passord two_factor_disabled: - explanation: Innlogging er nå mulig med kun e-postadresse og passord. + explanation: No kan du logga inn med berre epostadresse og passord. subject: 'Mastodon: To-faktor-autentisering deaktivert' - subtitle: To-faktor autentisering for din konto har blitt deaktivert. + subtitle: Tofaktorinnlogging for denne kontoen er skrudd av. title: 2FA deaktivert two_factor_enabled: - explanation: En token generert av den sammenkoblede TOTP-appen vil være påkrevd for innlogging. + explanation: Du treng ein kode frå den tilkopla tofaktor-appen din for å logga inn. subject: 'Mastodon: To-faktor-autentisering aktivert' - subtitle: Tofaktorautentisering er aktivert for din konto. + subtitle: Tofaktorpålogging er skrudd på for kontoen din. title: 2FA aktivert two_factor_recovery_codes_changed: explanation: Dei førre gjenopprettingskodane er ugyldige og nye er genererte. subject: 'Mastodon: To-faktor-gjenopprettingskodar har vorte genererte på nytt' - subtitle: De forrige gjenopprettingskodene er gjort ugyldige og nye er generert. + subtitle: Dei førre innloggingskodane er ikkje gyldige lenger, og nye kodar er laga. title: 2FA-gjenopprettingskodane er endra unlock_instructions: subject: 'Mastodon: Instruksjonar for å opne kontoen igjen' @@ -73,13 +74,13 @@ nn: subject: 'Mastodon: Sikkerheitsnøkkel sletta' title: Ein av sikkerheitsnøklane dine har blitt sletta webauthn_disabled: - explanation: Autentisering med sikkerhetsnøkler er deaktivert for kontoen din. - extra: Innlogging er nå mulig med kun tilgangstoken generert av den sammenkoblede TOTP-appen. + explanation: Innlogging med tryggingsnykjel er skrudd av for kontoen din. + extra: No kan du logga inn med berre kodane som er laga av den tilkopla tofaktor-appen din. subject: 'Mastodon: Autentisering med sikkerheitsnøklar vart skrudd av' title: Sikkerheitsnøklar deaktivert webauthn_enabled: - explanation: Sikkerhetsnøkkelautentisering har blitt aktivert for kontoen din. - extra: Sikkerhetsnøkkelen din kan nå bli brukt for innlogging. + explanation: Innlogging med tryggingsnyklar er skrudd på for kontoen din. + extra: No kan du bruka tryggingsnykjelen din for å logga inn. subject: 'Mastodon: Sikkerheitsnøkkelsautentisering vart skrudd på' title: Sikkerheitsnøklar aktivert omniauth_callbacks: diff --git a/config/locales/nn.yml b/config/locales/nn.yml index b1ae928997..1524b6f7c1 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -31,7 +31,7 @@ nn: created_msg: Moderatormerknad er laga! destroyed_msg: Moderatormerknad er utsletta! accounts: - add_email_domain_block: Gøym e-postdomene + add_email_domain_block: Blokker e-postdomene approve: Godtak approved_msg: Godkjende %{username} sin registreringssøknad are_you_sure: Er du sikker? @@ -767,13 +767,15 @@ nn: disabled: Til ingen users: Til lokale brukarar som er logga inn registrations: + moderation_recommandation: Pass på at du har mange og kjappe redaktørar og moderatorar på laget ditt før du opnar for allmenn registrering! preamble: Kontroller kven som kan oppretta konto på tenaren din. title: Registreringar registrations_mode: modes: - approved: Godkjenning kreves for påmelding + approved: Godkjenning krevst for å registrera seg none: Ingen kan melda seg inn open: Kven som helst kan melda seg inn + warning_hint: Me rår til at du bruker "Godkjenning krevst for å registrera seg" viss du ikkje er sikker på at moderatorane kan handtera søppel og illmeinte registreringar kvikt. security: authorized_fetch: Krev autentisering frå fødererte tenarar authorized_fetch_hint: Krav om autentisering frå fødererte tenarar gjer det mogleg med strengare handheving av blokkering, både på brukar- og tenar-nivå. Likevel, dette har ein kostnad når det gjeld yting, reduserer rekkevidda til svara dine og kan medføra kompabilitetsproblem med enkelte fødererte tenester. Dette vil heller ikkje hindra dei som verkeleg vil i å henta dei offentlege innlegga eller kontoane dine. @@ -1450,7 +1452,7 @@ nn: moderation: title: Moderasjon move_handler: - carry_blocks_over_text: Denne brukaren flytta frå %{acct}, som du gøymde. + carry_blocks_over_text: Denne brukaren flytta frå %{acct}, som du hadde blokkert. carry_mutes_over_text: Denne brukeren flyttet fra %{acct}, som du hadde dempet. copy_account_note_text: 'Denne brukeren flyttet fra %{acct}, her var dine tidligere notater om dem:' navigation: @@ -1537,7 +1539,7 @@ nn: privacy: hint_html: "Tilpass korleis du vil at andre skal finna profilen og innlegga dine. Mastodon har fleire funksjonar du kan ta i bruk for å få kontakt med eit større publikum. Sjå gjerne gjennom innstillingane slik at du er sikker på at dei passar til deg og din bruk." privacy: Personvern - privacy_hint_html: Ha kontroll over kor mykje du vil dela. Folk finn interessante profilar og fine appar ved å sjå gjennom kva andre fylgjer og kva appar dei legg ut innlegg med, men det kan henda du vil gøyma desse opplysingane. + privacy_hint_html: Kontroller kor mykje du vil dela. Folk finn interessante profilar og fine appar ved å sjå gjennom kva andre fylgjer og kva appar dei legg ut innlegg med, men det kan henda du vil gøyma desse opplysingane. reach: Nå andre reach_hint_html: Hald styring med om du vil at andre skal kunna oppdaga og fylgja deg. Vil du at innlegga dine skal stå på Utforsk-sida? Vil du at andre skal sjå deg i tilrådingane for kven dei skal fylgja? Vil du ta imot nye fylgjarar automatisk, eller vil du kontrollera kvar einskild fylgjar? search: Søk @@ -1550,8 +1552,8 @@ nn: limit_reached: Grensen for forskjellige reaksjoner nådd unrecognized_emoji: er ikke en gjenkjent emoji redirects: - prompt: Hvis du stoler på denne lenken, så trykk på den for å fortsette. - title: Du forlater %{instance}. + prompt: Viss du stolar på denne lenka, klikkar du på ho for å halda fram. + title: No forlèt du %{instance}. relationships: activity: Kontoaktivitet confirm_follow_selected_followers: Er du sikker på at du ynskjer å fylgja dei valde fylgjarane? @@ -1781,7 +1783,7 @@ nn: webauthn: Sikkerhetsnøkler user_mailer: appeal_approved: - action: Kontoinnstillinger + action: Kontoinnstillingar explanation: Apellen på prikken mot din kontor på %{strike_date} som du la inn på %{appeal_date} har blitt godkjend. Din konto er nok ein gong i god stand. subject: Din klage fra %{date} er godkjent subtitle: Kontoen din er tilbake i god stand. @@ -1789,11 +1791,11 @@ nn: appeal_rejected: explanation: Klagen på advarselen mot din konto den %{strike_date} som du sendte inn den %{appeal_date} har blitt avvist. subject: Din klage fra %{date} er avvist - subtitle: Anken din har blitt avvist. + subtitle: Klaga di vart avvist. title: Anke avvist backup_ready: - explanation: Du etterspurte en fullstendig sikkerhetskopi av din Mastodon-konto. - extra: Den er nå klar for nedlasting! + explanation: Du ba om ein fullstendig tryggingskopi av Mastodon-kontoen din. + extra: No kan du lasta han ned! subject: Arkivet ditt er klart til å lastes ned title: Nedlasting av arkiv failed_2fa: diff --git a/config/locales/simple_form.nn.yml b/config/locales/simple_form.nn.yml index 1991cb2dbb..98cc372be7 100644 --- a/config/locales/simple_form.nn.yml +++ b/config/locales/simple_form.nn.yml @@ -39,12 +39,14 @@ nn: text: Ei åtvaring kan kun ankast ein gong defaults: autofollow: Folk som lagar ein konto gjennom innbydinga fylgjer deg automatisk + avatar: WEBP, PNG, GIF eller JPG. Maks %{size}. Blir forminska til %{dimensions}pkt bot: Denne kontoen utfører i hovedsak automatiserte handlinger og blir kanskje ikke holdt øye med context: En eller flere sammenhenger der filteret skal gjelde current_password: For sikkerhetsgrunner, vennligst oppgi passordet til den nåværende bruker current_username: Skriv inn brukarnamnet til den noverande kontoen for å stadfesta digest: Kun sendt etter en lang periode med inaktivitet og bare dersom du har mottatt noen personlige meldinger mens du var borte email: Du får snart ein stadfestings-e-post + header: WEBP, PNG, GIF eller JPG. Maks %{size}. Blir forminska til %{dimensions}pkt inbox_url: Kopier URLen fra forsiden til overgangen du vil bruke irreversible: Filtrerte tut vil verta borte for evig, sjølv om filteret vert fjerna seinare locale: Språket til brukargrensesnittet, e-postar og push-varsel @@ -53,8 +55,8 @@ nn: scopes: API-ane som programmet vil få tilgjenge til. Ettersom du vel eit toppnivåomfang tarv du ikkje velja einskilde API-ar. setting_aggregate_reblogs: Ikkje vis nye framhevingar for tut som nyleg har vorte heva fram (Påverkar berre nylege framhevingar) setting_always_send_emails: Vanlegvis vil ikkje e-postvarsel bli sendt når du brukar Mastodon aktivt - setting_default_sensitive: Nærtakande media vert gøymd som standard og kan synast med eit klikk - setting_display_media_default: Gøym media som er merka som nærtakande + setting_default_sensitive: Sensitive media vert gøymde som standard, og du syner dei ved å klikka på dei + setting_display_media_default: Gøym media som er merka som sensitive setting_display_media_hide_all: Alltid skjul alt media setting_display_media_show_all: Vis alltid media setting_use_blurhash: Overgangar er basert på fargane til skjulte grafikkelement, men gjer detaljar utydelege @@ -218,7 +220,7 @@ nn: setting_theme: Sidetema setting_trends: Vis kva som er populært i dag setting_unfollow_modal: Vis stadfesting før du sluttar å fylgja nokon - setting_use_blurhash: Vis fargerike overgangar for gøymt media + setting_use_blurhash: Vis fargerike overgangar for gøymde medium setting_use_pending_items: Saktemodus severity: Alvorsgrad sign_in_token_attempt: Trygdenykel @@ -233,8 +235,8 @@ nn: name: Emneknagg filters: actions: - hide: Gøym totalt - warn: Gøym med ei advarsel + hide: Gøym heilt + warn: Gøym med ei åtvaring form_admin_settings: activity_api_enabled: Legg ut samla statistikk om brukaraktiviteten i APIet backups_retention_period: Arkiveringsperiode for brukararkiv @@ -264,9 +266,9 @@ nn: trends: Aktiver trendar trends_as_landing_page: Bruk trendar som startside interactions: - must_be_follower: Gøym varslingar frå folk som ikkje fylgjer deg - must_be_following: Gøym varslingar frå folk du ikkje fylgjer - must_be_following_dm: Gøym direktemeldinger frå folk du ikkje fylgjer + must_be_follower: Blokker varsel frå folk som ikkje fylgjer deg + must_be_following: Blokker varsel frå folk du ikkje fylgjer + must_be_following_dm: Blokker direktemeldinger frå folk du ikkje fylgjer invite: comment: Kommentar invite_request: From 036f5a05e372b9b1899907195e48001eec079854 Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Tue, 27 Feb 2024 15:59:20 +0100 Subject: [PATCH 028/263] Convert the streaming server to ESM (#29389) Co-authored-by: Claire --- streaming/{.eslintrc.js => .eslintrc.cjs} | 12 ++--- streaming/errors.js | 15 ++---- streaming/index.js | 60 +++++++++++++---------- streaming/logging.js | 23 ++++----- streaming/metrics.js | 6 +-- streaming/package.json | 1 + streaming/tsconfig.json | 6 +-- streaming/utils.js | 20 +++----- 8 files changed, 65 insertions(+), 78 deletions(-) rename streaming/{.eslintrc.js => .eslintrc.cjs} (79%) diff --git a/streaming/.eslintrc.js b/streaming/.eslintrc.cjs similarity index 79% rename from streaming/.eslintrc.js rename to streaming/.eslintrc.cjs index 188ebb512d..e25cff7df0 100644 --- a/streaming/.eslintrc.js +++ b/streaming/.eslintrc.cjs @@ -1,4 +1,8 @@ +/* eslint-disable import/no-commonjs */ + // @ts-check + +// @ts-ignore - This needs to be a CJS file (eslint does not yet support ESM configs), and TS is complaining we use require const { defineConfig } = require('eslint-define-config'); module.exports = defineConfig({ @@ -22,22 +26,18 @@ module.exports = defineConfig({ // to maintain. 'no-delete-var': 'off', - // The streaming server is written in commonjs, not ESM for now: - 'import/no-commonjs': 'off', - // This overrides the base configuration for this rule to pick up // dependencies for the streaming server from the correct package.json file. 'import/no-extraneous-dependencies': [ 'error', { - devDependencies: [ - 'streaming/.eslintrc.js', - ], + devDependencies: ['streaming/.eslintrc.cjs'], optionalDependencies: false, peerDependencies: false, includeTypes: true, packageDir: __dirname, }, ], + 'import/extensions': ['error', 'always'], }, }); diff --git a/streaming/errors.js b/streaming/errors.js index 9a641180ba..6c44d2cb8f 100644 --- a/streaming/errors.js +++ b/streaming/errors.js @@ -5,15 +5,14 @@ * override it in let statements. * @type {string} */ -const UNEXPECTED_ERROR_MESSAGE = 'An unexpected error occurred'; -exports.UNKNOWN_ERROR_MESSAGE = UNEXPECTED_ERROR_MESSAGE; +export const UNEXPECTED_ERROR_MESSAGE = 'An unexpected error occurred'; /** * Extracts the status and message properties from the error object, if * available for public use. The `unknown` is for catch statements * @param {Error | AuthenticationError | RequestError | unknown} err */ -exports.extractStatusAndMessage = function(err) { +export function extractStatusAndMessage(err) { let statusCode = 500; let errorMessage = UNEXPECTED_ERROR_MESSAGE; if (err instanceof AuthenticationError || err instanceof RequestError) { @@ -22,9 +21,9 @@ exports.extractStatusAndMessage = function(err) { } return { statusCode, errorMessage }; -}; +} -class RequestError extends Error { +export class RequestError extends Error { /** * @param {string} message */ @@ -35,9 +34,7 @@ class RequestError extends Error { } } -exports.RequestError = RequestError; - -class AuthenticationError extends Error { +export class AuthenticationError extends Error { /** * @param {string} message */ @@ -47,5 +44,3 @@ class AuthenticationError extends Error { this.status = 401; } } - -exports.AuthenticationError = AuthenticationError; diff --git a/streaming/index.js b/streaming/index.js index 1c312ebd70..fa30260a3a 100644 --- a/streaming/index.js +++ b/streaming/index.js @@ -1,32 +1,36 @@ // @ts-check -const fs = require('fs'); -const http = require('http'); -const path = require('path'); -const url = require('url'); +import fs from 'node:fs'; +import http from 'node:http'; +import path from 'node:path'; +import url from 'node:url'; -const cors = require('cors'); -const dotenv = require('dotenv'); -const express = require('express'); -const { Redis } = require('ioredis'); -const { JSDOM } = require('jsdom'); -const pg = require('pg'); -const dbUrlToConfig = require('pg-connection-string').parse; -const WebSocket = require('ws'); +import cors from 'cors'; +import dotenv from 'dotenv'; +import express from 'express'; +import { Redis } from 'ioredis'; +import { JSDOM } from 'jsdom'; +import pg from 'pg'; +import pgConnectionString from 'pg-connection-string'; +import WebSocket from 'ws'; -const errors = require('./errors'); -const { AuthenticationError, RequestError } = require('./errors'); -const { logger, httpLogger, initializeLogLevel, attachWebsocketHttpLogger, createWebsocketLogger } = require('./logging'); -const { setupMetrics } = require('./metrics'); -const { isTruthy, normalizeHashtag, firstParam } = require("./utils"); +import { AuthenticationError, RequestError, extractStatusAndMessage as extractErrorStatusAndMessage } from './errors.js'; +import { logger, httpLogger, initializeLogLevel, attachWebsocketHttpLogger, createWebsocketLogger } from './logging.js'; +import { setupMetrics } from './metrics.js'; +import { isTruthy, normalizeHashtag, firstParam } from './utils.js'; const environment = process.env.NODE_ENV || 'development'; // Correctly detect and load .env or .env.production file based on environment: const dotenvFile = environment === 'production' ? '.env.production' : '.env'; +const dotenvFilePath = path.resolve( + url.fileURLToPath( + new URL(path.join('..', dotenvFile), import.meta.url) + ) +); dotenv.config({ - path: path.resolve(__dirname, path.join('..', dotenvFile)) + path: dotenvFilePath }); initializeLogLevel(process.env, environment); @@ -143,7 +147,7 @@ const pgConfigFromEnv = (env) => { let baseConfig = {}; if (env.DATABASE_URL) { - const parsedUrl = dbUrlToConfig(env.DATABASE_URL); + const parsedUrl = pgConnectionString.parse(env.DATABASE_URL); // The result of dbUrlToConfig from pg-connection-string is not type // compatible with pg.PoolConfig, since parts of the connection URL may be @@ -326,7 +330,7 @@ const startServer = async () => { // Unfortunately for using the on('upgrade') setup, we need to manually // write a HTTP Response to the Socket to close the connection upgrade // attempt, so the following code is to handle all of that. - const {statusCode, errorMessage } = errors.extractStatusAndMessage(err); + const {statusCode, errorMessage } = extractErrorStatusAndMessage(err); /** @type {Record} */ const headers = { @@ -748,7 +752,7 @@ const startServer = async () => { return; } - const {statusCode, errorMessage } = errors.extractStatusAndMessage(err); + const {statusCode, errorMessage } = extractErrorStatusAndMessage(err); res.writeHead(statusCode, { 'Content-Type': 'application/json' }); res.end(JSON.stringify({ error: errorMessage })); @@ -1155,7 +1159,7 @@ const startServer = async () => { // @ts-ignore streamFrom(channelIds, req, req.log, onSend, onEnd, 'eventsource', options.needsFiltering); }).catch(err => { - const {statusCode, errorMessage } = errors.extractStatusAndMessage(err); + const {statusCode, errorMessage } = extractErrorStatusAndMessage(err); res.log.info({ err }, 'Eventsource subscription error'); @@ -1353,7 +1357,7 @@ const startServer = async () => { stopHeartbeat, }; }).catch(err => { - const {statusCode, errorMessage } = errors.extractStatusAndMessage(err); + const {statusCode, errorMessage } = extractErrorStatusAndMessage(err); logger.error({ err }, 'Websocket subscription error'); @@ -1482,13 +1486,15 @@ const startServer = async () => { // Decrement the metrics for connected clients: connectedClients.labels({ type: 'websocket' }).dec(); - // We need to delete the session object as to ensure it correctly gets + // We need to unassign the session object as to ensure it correctly gets // garbage collected, without doing this we could accidentally hold on to // references to the websocket, the request, and the logger, causing // memory leaks. - // - // @ts-ignore - delete session; + + // This is commented out because `delete` only operated on object properties + // It needs to be replaced by `session = undefined`, but it requires every calls to + // `session` to check for it, thus a significant refactor + // delete session; }); // Note: immediately after the `error` event is emitted, the `close` event diff --git a/streaming/logging.js b/streaming/logging.js index 64ee474875..e1c552c22e 100644 --- a/streaming/logging.js +++ b/streaming/logging.js @@ -1,6 +1,6 @@ -const { pino } = require('pino'); -const { pinoHttp, stdSerializers: pinoHttpSerializers } = require('pino-http'); -const uuid = require('uuid'); +import { pino } from 'pino'; +import { pinoHttp, stdSerializers as pinoHttpSerializers } from 'pino-http'; +import * as uuid from 'uuid'; /** * Generates the Request ID for logging and setting on responses @@ -36,7 +36,7 @@ function sanitizeRequestLog(req) { return log; } -const logger = pino({ +export const logger = pino({ name: "streaming", // Reformat the log level to a string: formatters: { @@ -59,7 +59,7 @@ const logger = pino({ } }); -const httpLogger = pinoHttp({ +export const httpLogger = pinoHttp({ logger, genReqId: generateRequestId, serializers: { @@ -71,7 +71,7 @@ const httpLogger = pinoHttp({ * Attaches a logger to the request object received by http upgrade handlers * @param {http.IncomingMessage} request */ -function attachWebsocketHttpLogger(request) { +export function attachWebsocketHttpLogger(request) { generateRequestId(request); request.log = logger.child({ @@ -84,7 +84,7 @@ function attachWebsocketHttpLogger(request) { * @param {http.IncomingMessage} request * @param {import('./index.js').ResolvedAccount} resolvedAccount */ -function createWebsocketLogger(request, resolvedAccount) { +export function createWebsocketLogger(request, resolvedAccount) { // ensure the request.id is always present. generateRequestId(request); @@ -98,17 +98,12 @@ function createWebsocketLogger(request, resolvedAccount) { }); } -exports.logger = logger; -exports.httpLogger = httpLogger; -exports.attachWebsocketHttpLogger = attachWebsocketHttpLogger; -exports.createWebsocketLogger = createWebsocketLogger; - /** * Initializes the log level based on the environment * @param {Object} env * @param {string} environment */ -exports.initializeLogLevel = function initializeLogLevel(env, environment) { +export function initializeLogLevel(env, environment) { if (env.LOG_LEVEL && Object.keys(logger.levels.values).includes(env.LOG_LEVEL)) { logger.level = env.LOG_LEVEL; } else if (environment === 'development') { @@ -116,4 +111,4 @@ exports.initializeLogLevel = function initializeLogLevel(env, environment) { } else { logger.level = 'info'; } -}; +} diff --git a/streaming/metrics.js b/streaming/metrics.js index d05b4c9b16..a029d778fc 100644 --- a/streaming/metrics.js +++ b/streaming/metrics.js @@ -1,6 +1,6 @@ // @ts-check -const metrics = require('prom-client'); +import metrics from 'prom-client'; /** * @typedef StreamingMetrics @@ -18,7 +18,7 @@ const metrics = require('prom-client'); * @param {import('pg').Pool} pgPool * @returns {StreamingMetrics} */ -function setupMetrics(channels, pgPool) { +export function setupMetrics(channels, pgPool) { // Collect metrics from Node.js metrics.collectDefaultMetrics(); @@ -101,5 +101,3 @@ function setupMetrics(channels, pgPool) { messagesSent, }; } - -exports.setupMetrics = setupMetrics; diff --git a/streaming/package.json b/streaming/package.json index 71f204c0fb..efb692578c 100644 --- a/streaming/package.json +++ b/streaming/package.json @@ -7,6 +7,7 @@ }, "description": "Mastodon's Streaming Server", "private": true, + "type": "module", "repository": { "type": "git", "url": "https://github.com/mastodon/mastodon.git" diff --git a/streaming/tsconfig.json b/streaming/tsconfig.json index a0cf68ef90..ba5bd51ff7 100644 --- a/streaming/tsconfig.json +++ b/streaming/tsconfig.json @@ -2,11 +2,11 @@ "extends": "../tsconfig.json", "compilerOptions": { "target": "esnext", - "module": "CommonJS", - "moduleResolution": "node", + "module": "NodeNext", + "moduleResolution": "NodeNext", "noUnusedParameters": false, "tsBuildInfoFile": "../tmp/cache/streaming/tsconfig.tsbuildinfo", "paths": {}, }, - "include": ["./*.js", "./.eslintrc.js"], + "include": ["./*.js", "./.eslintrc.cjs"], } diff --git a/streaming/utils.js b/streaming/utils.js index 7b87a1d14c..4610bf660d 100644 --- a/streaming/utils.js +++ b/streaming/utils.js @@ -16,11 +16,9 @@ const FALSE_VALUES = [ * @param {any} value * @returns {boolean} */ -const isTruthy = value => - value && !FALSE_VALUES.includes(value); - -exports.isTruthy = isTruthy; - +export function isTruthy(value) { + return value && !FALSE_VALUES.includes(value); +} /** * See app/lib/ascii_folder.rb for the canon definitions @@ -33,7 +31,7 @@ const EQUIVALENT_ASCII_CHARS = 'AAAAAAaaaaaaAaAaAaCcCcCcCcCcDdDdDdEEEEeeeeEeEeEe * @param {string} str * @returns {string} */ -function foldToASCII(str) { +export function foldToASCII(str) { const regex = new RegExp(NON_ASCII_CHARS.split('').join('|'), 'g'); return str.replace(regex, function(match) { @@ -42,28 +40,22 @@ function foldToASCII(str) { }); } -exports.foldToASCII = foldToASCII; - /** * @param {string} str * @returns {string} */ -function normalizeHashtag(str) { +export function normalizeHashtag(str) { return foldToASCII(str.normalize('NFKC').toLowerCase()).replace(/[^\p{L}\p{N}_\u00b7\u200c]/gu, ''); } -exports.normalizeHashtag = normalizeHashtag; - /** * @param {string|string[]} arrayOrString * @returns {string} */ -function firstParam(arrayOrString) { +export function firstParam(arrayOrString) { if (Array.isArray(arrayOrString)) { return arrayOrString[0]; } else { return arrayOrString; } } - -exports.firstParam = firstParam; From 6f7615ba86afda56e1d661442286a1d68467a525 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 27 Feb 2024 16:18:06 +0100 Subject: [PATCH 029/263] Add basic end-to-end test for admin moderation interface (#29424) --- spec/support/stories/profile_stories.rb | 6 +++++ spec/support/streaming_server_manager.rb | 3 +++ spec/system/report_interface_spec.rb | 31 ++++++++++++++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 spec/system/report_interface_spec.rb diff --git a/spec/support/stories/profile_stories.rb b/spec/support/stories/profile_stories.rb index 74342c337d..f5fc9a441f 100644 --- a/spec/support/stories/profile_stories.rb +++ b/spec/support/stories/profile_stories.rb @@ -21,6 +21,12 @@ module ProfileStories click_on I18n.t('auth.login') end + def as_a_logged_in_admin + # This is a bit awkward, but this avoids code duplication. + as_a_logged_in_user + bob.update!(role: UserRole.find_by!(name: 'Admin')) + end + def with_alice_as_local_user @alice_bio = '@alice and @bob are fictional characters commonly used as' \ 'placeholder names in #cryptology, as well as #science and' \ diff --git a/spec/support/streaming_server_manager.rb b/spec/support/streaming_server_manager.rb index 3381918299..b702fc77ce 100644 --- a/spec/support/streaming_server_manager.rb +++ b/spec/support/streaming_server_manager.rb @@ -109,6 +109,9 @@ RSpec.configure do |config| # Also needs to be set per-example here because of the database cleaner. Setting.registrations_mode = 'open' + # Load seeds so we have the default roles otherwise cleared by `DatabaseCleaner` + Rails.application.load_seed + example.run end diff --git a/spec/system/report_interface_spec.rb b/spec/system/report_interface_spec.rb new file mode 100644 index 0000000000..6eba552559 --- /dev/null +++ b/spec/system/report_interface_spec.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe 'report interface', :paperclip_processing do + include ProfileStories + + let(:email) { 'admin@example.com' } + let(:password) { 'password' } + let(:confirmed_at) { Time.zone.now } + let(:finished_onboarding) { true } + + let(:reported_account) { Fabricate(:account) } + let(:reported_status) { Fabricate(:status, account: reported_account) } + let(:media_attachment) { Fabricate(:media_attachment, account: reported_account, status: reported_status, file: attachment_fixture('attachment.jpg')) } + let!(:report) { Fabricate(:report, target_account: reported_account, status_ids: [media_attachment.status.id]) } + + before do + as_a_logged_in_admin + visit admin_report_path(report) + end + + it 'displays the report interface, including the javascript bits' do + # The report category selector React component is properly rendered + expect(page).to have_css('.report-reason-selector') + + # The media React component is properly rendered + page.scroll_to(page.find('.batch-table__row')) + expect(page).to have_css('.spoiler-button__overlay__label') + end +end From 899eac1a92c802c334606a49d538ef37bd47c91a Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Tue, 27 Feb 2024 16:42:05 +0100 Subject: [PATCH 030/263] Use modern ES syntax rather than `.call` (#29368) --- .../mastodon/containers/media_container.jsx | 2 +- .../features/emoji/emoji_compressed.js | 4 ++-- .../mastodon/features/emoji/emoji_utils.js | 10 ++++---- app/javascript/packs/admin.jsx | 24 +++++++++++-------- app/javascript/packs/public.jsx | 14 +++++------ public/embed.js | 4 +++- streaming/index.js | 4 ++-- 7 files changed, 34 insertions(+), 28 deletions(-) diff --git a/app/javascript/mastodon/containers/media_container.jsx b/app/javascript/mastodon/containers/media_container.jsx index fba3c5df78..d18602e3b5 100644 --- a/app/javascript/mastodon/containers/media_container.jsx +++ b/app/javascript/mastodon/containers/media_container.jsx @@ -80,7 +80,7 @@ export default class MediaContainer extends PureComponent { return ( <> - {[].map.call(components, (component, i) => { + {Array.from(components).map((component, i) => { const componentName = component.getAttribute('data-component'); const Component = MEDIA_COMPONENTS[componentName]; const { media, card, poll, hashtag, ...props } = JSON.parse(component.getAttribute('data-props')); diff --git a/app/javascript/mastodon/features/emoji/emoji_compressed.js b/app/javascript/mastodon/features/emoji/emoji_compressed.js index a4863566da..ed8e9bbe30 100644 --- a/app/javascript/mastodon/features/emoji/emoji_compressed.js +++ b/app/javascript/mastodon/features/emoji/emoji_compressed.js @@ -36,7 +36,7 @@ Object.keys(emojiIndex.emojis).forEach(key => { let emoji = emojiIndex.emojis[key]; // Emojis with skin tone modifiers are stored like this - if (Object.prototype.hasOwnProperty.call(emoji, '1')) { + if (Object.hasOwn(emoji, '1')) { emoji = emoji['1']; } @@ -88,7 +88,7 @@ Object.keys(emojiIndex.emojis).forEach(key => { let emoji = emojiIndex.emojis[key]; // Emojis with skin tone modifiers are stored like this - if (Object.prototype.hasOwnProperty.call(emoji, '1')) { + if (Object.hasOwn(emoji, '1')) { emoji = emoji['1']; } diff --git a/app/javascript/mastodon/features/emoji/emoji_utils.js b/app/javascript/mastodon/features/emoji/emoji_utils.js index 83bcc9d82f..c13d250567 100644 --- a/app/javascript/mastodon/features/emoji/emoji_utils.js +++ b/app/javascript/mastodon/features/emoji/emoji_utils.js @@ -135,19 +135,19 @@ function getData(emoji, skin, set) { } } - if (Object.prototype.hasOwnProperty.call(data.short_names, emoji)) { + if (Object.hasOwn(data.short_names, emoji)) { emoji = data.short_names[emoji]; } - if (Object.prototype.hasOwnProperty.call(data.emojis, emoji)) { + if (Object.hasOwn(data.emojis, emoji)) { emojiData = data.emojis[emoji]; } } else if (emoji.id) { - if (Object.prototype.hasOwnProperty.call(data.short_names, emoji.id)) { + if (Object.hasOwn(data.short_names, emoji.id)) { emoji.id = data.short_names[emoji.id]; } - if (Object.prototype.hasOwnProperty.call(data.emojis, emoji.id)) { + if (Object.hasOwn(data.emojis, emoji.id)) { emojiData = data.emojis[emoji.id]; skin = skin || emoji.skin; } @@ -216,7 +216,7 @@ function deepMerge(a, b) { let originalValue = a[key], value = originalValue; - if (Object.prototype.hasOwnProperty.call(b, key)) { + if (Object.hasOwn(b, key)) { value = b[key]; } diff --git a/app/javascript/packs/admin.jsx b/app/javascript/packs/admin.jsx index 343678c184..5f24d6677e 100644 --- a/app/javascript/packs/admin.jsx +++ b/app/javascript/packs/admin.jsx @@ -46,7 +46,7 @@ const hideSelectAll = () => { Rails.delegate(document, '#batch_checkbox_all', 'change', ({ target }) => { const selectAllMatchingElement = document.querySelector('.batch-table__select-all'); - [].forEach.call(document.querySelectorAll(batchCheckboxClassName), (content) => { + document.querySelectorAll(batchCheckboxClassName).forEach((content) => { content.checked = target.checked; }); @@ -81,8 +81,11 @@ Rails.delegate(document, batchCheckboxClassName, 'change', () => { const selectAllMatchingElement = document.querySelector('.batch-table__select-all'); if (checkAllElement) { - checkAllElement.checked = [].every.call(document.querySelectorAll(batchCheckboxClassName), (content) => content.checked); - checkAllElement.indeterminate = !checkAllElement.checked && [].some.call(document.querySelectorAll(batchCheckboxClassName), (content) => content.checked); + const allCheckboxes = Array.from( + document.querySelectorAll(batchCheckboxClassName) + ); + checkAllElement.checked = allCheckboxes.every((content) => content.checked); + checkAllElement.indeterminate = !checkAllElement.checked && allCheckboxes.some((content) => content.checked); if (selectAllMatchingElement) { if (checkAllElement.checked) { @@ -133,11 +136,11 @@ Rails.delegate(document, '#form_admin_settings_enable_bootstrap_timeline_account const onChangeRegistrationMode = (target) => { const enabled = target.value === 'approved'; - [].forEach.call(document.querySelectorAll('.form_admin_settings_registrations_mode .warning-hint'), (warning_hint) => { + document.querySelectorAll('.form_admin_settings_registrations_mode .warning-hint').forEach((warning_hint) => { warning_hint.style.display = target.value === 'open' ? 'inline' : 'none'; }); - [].forEach.call(document.querySelectorAll('#form_admin_settings_require_invite_text'), (input) => { + document.querySelectorAll('#form_admin_settings_require_invite_text').forEach((input) => { input.disabled = !enabled; if (enabled) { let element = input; @@ -183,8 +186,9 @@ ready(() => { const checkAllElement = document.querySelector('#batch_checkbox_all'); if (checkAllElement) { - checkAllElement.checked = [].every.call(document.querySelectorAll(batchCheckboxClassName), (content) => content.checked); - checkAllElement.indeterminate = !checkAllElement.checked && [].some.call(document.querySelectorAll(batchCheckboxClassName), (content) => content.checked); + const allCheckboxes = Array.from(document.querySelectorAll(batchCheckboxClassName)); + checkAllElement.checked = allCheckboxes.every( (content) => content.checked); + checkAllElement.indeterminate = !checkAllElement.checked && allCheckboxes.some((content) => content.checked); } document.querySelector('a#add-instance-button')?.addEventListener('click', (e) => { @@ -197,7 +201,7 @@ ready(() => { } }); - [].forEach.call(document.querySelectorAll('input[type="datetime-local"]'), element => { + document.querySelectorAll('input[type="datetime-local"]').forEach(element => { if (element.value) { element.value = convertUTCDateTimeToLocal(element.value); } @@ -207,7 +211,7 @@ ready(() => { }); Rails.delegate(document, 'form', 'submit', ({ target }) => { - [].forEach.call(target.querySelectorAll('input[type="datetime-local"]'), element => { + target.querySelectorAll('input[type="datetime-local"]').forEach(element => { if (element.value && element.validity.valid) { element.value = convertLocalDatetimeToUTC(element.value); } @@ -219,7 +223,7 @@ ready(() => { setAnnouncementEndsAttributes(announcementStartsAt); } - [].forEach.call(document.querySelectorAll('[data-admin-component]'), element => { + document.querySelectorAll('[data-admin-component]').forEach(element => { const componentName = element.getAttribute('data-admin-component'); const componentProps = JSON.parse(element.getAttribute('data-props')); diff --git a/app/javascript/packs/public.jsx b/app/javascript/packs/public.jsx index 5edc355370..01b57dce39 100644 --- a/app/javascript/packs/public.jsx +++ b/app/javascript/packs/public.jsx @@ -73,11 +73,11 @@ function loaded() { return messageFormat.format(values); }; - [].forEach.call(document.querySelectorAll('.emojify'), (content) => { + document.querySelectorAll('.emojify').forEach((content) => { content.innerHTML = emojify(content.innerHTML); }); - [].forEach.call(document.querySelectorAll('time.formatted'), (content) => { + document.querySelectorAll('time.formatted').forEach((content) => { const datetime = new Date(content.getAttribute('datetime')); const formattedDate = dateTimeFormat.format(datetime); @@ -94,7 +94,7 @@ function loaded() { }; const todayFormat = new IntlMessageFormat(localeData['relative_format.today'] || 'Today at {time}', locale); - [].forEach.call(document.querySelectorAll('time.relative-formatted'), (content) => { + document.querySelectorAll('time.relative-formatted').forEach((content) => { const datetime = new Date(content.getAttribute('datetime')); let formattedContent; @@ -111,7 +111,7 @@ function loaded() { content.textContent = formattedContent; }); - [].forEach.call(document.querySelectorAll('time.time-ago'), (content) => { + document.querySelectorAll('time.time-ago').forEach((content) => { const datetime = new Date(content.getAttribute('datetime')); const now = new Date(); @@ -128,8 +128,8 @@ function loaded() { if (reactComponents.length > 0) { import(/* webpackChunkName: "containers/media_container" */ '../mastodon/containers/media_container') .then(({ default: MediaContainer }) => { - [].forEach.call(reactComponents, (component) => { - [].forEach.call(component.children, (child) => { + reactComponents.forEach((component) => { + Array.from(component.children).forEach((child) => { component.removeChild(child); }); }); @@ -185,7 +185,7 @@ function loaded() { return false; }); - [].forEach.call(document.querySelectorAll('.status__content__spoiler-link'), (spoilerLink) => { + document.querySelectorAll('.status__content__spoiler-link').forEach((spoilerLink) => { const statusEl = spoilerLink.parentNode.parentNode; const message = (statusEl.dataset.spoiler === 'expanded') ? (localeData['status.show_less'] || 'Show less') : (localeData['status.show_more'] || 'Show more'); spoilerLink.textContent = (new IntlMessageFormat(message, locale)).format(); diff --git a/public/embed.js b/public/embed.js index defba403e4..f8e6a22db4 100644 --- a/public/embed.js +++ b/public/embed.js @@ -31,6 +31,8 @@ var iframe = iframes.get(data.id); + if(!iframe) return; + if ('source' in e && iframe.contentWindow !== e.source) { return; } @@ -38,7 +40,7 @@ iframe.height = data.height; }); - [].forEach.call(document.querySelectorAll('iframe.mastodon-embed'), function (iframe) { + document.querySelectorAll('iframe.mastodon-embed').forEach(iframe => { // select unique id for each iframe var id = 0, failCount = 0, idBuffer = new Uint32Array(1); while (id === 0 || iframes.has(id)) { diff --git a/streaming/index.js b/streaming/index.js index fa30260a3a..154ecbc02c 100644 --- a/streaming/index.js +++ b/streaming/index.js @@ -192,7 +192,7 @@ const pgConfigFromEnv = (env) => { if (!baseConfig.password && env.DB_PASS) { baseConfig.password = env.DB_PASS; } - } else if (Object.hasOwnProperty.call(pgConfigs, environment)) { + } else if (Object.hasOwn(pgConfigs, environment)) { baseConfig = pgConfigs[environment]; if (env.DB_SSLMODE) { @@ -912,7 +912,7 @@ const startServer = async () => { // If the payload already contains the `filtered` property, it means // that filtering has been applied on the ruby on rails side, as // such, we don't need to construct or apply the filters in streaming: - if (Object.prototype.hasOwnProperty.call(payload, "filtered")) { + if (Object.hasOwn(payload, "filtered")) { transmit(event, payload); return; } From dc4427dc9ba4d084d96153feb2eef6a32c288e1f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 27 Feb 2024 17:07:43 +0100 Subject: [PATCH 031/263] Update devDependencies (non-major) (#29089) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Renaud Chaput --- .devcontainer/codespaces/devcontainer.json | 18 +++++----- .devcontainer/devcontainer.json | 16 ++++----- app/javascript/mastodon/test_helpers.tsx | 2 +- jsconfig.json | 4 +-- streaming/tsconfig.json | 4 +-- tsconfig.json | 8 ++--- yarn.lock | 40 +++++++++++----------- 7 files changed, 46 insertions(+), 46 deletions(-) diff --git a/.devcontainer/codespaces/devcontainer.json b/.devcontainer/codespaces/devcontainer.json index b32e4026d2..ca9156fdaa 100644 --- a/.devcontainer/codespaces/devcontainer.json +++ b/.devcontainer/codespaces/devcontainer.json @@ -5,7 +5,7 @@ "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}", "features": { - "ghcr.io/devcontainers/features/sshd:1": {}, + "ghcr.io/devcontainers/features/sshd:1": {} }, "runServices": ["app", "db", "redis"], @@ -15,16 +15,16 @@ "portsAttributes": { "3000": { "label": "web", - "onAutoForward": "notify", + "onAutoForward": "notify" }, "4000": { "label": "stream", - "onAutoForward": "silent", - }, + "onAutoForward": "silent" + } }, "otherPortsAttributes": { - "onAutoForward": "silent", + "onAutoForward": "silent" }, "remoteEnv": { @@ -33,7 +33,7 @@ "STREAMING_API_BASE_URL": "https://${localEnv:CODESPACE_NAME}-4000.app.github.dev", "DISABLE_FORGERY_REQUEST_PROTECTION": "true", "ES_ENABLED": "", - "LIBRE_TRANSLATE_ENDPOINT": "", + "LIBRE_TRANSLATE_ENDPOINT": "" }, "onCreateCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}", @@ -43,7 +43,7 @@ "customizations": { "vscode": { "settings": {}, - "extensions": ["EditorConfig.EditorConfig", "webben.browserslist"], - }, - }, + "extensions": ["EditorConfig.EditorConfig", "webben.browserslist"] + } + } } diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index ed71235b3b..fa8d6542c1 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -5,7 +5,7 @@ "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}", "features": { - "ghcr.io/devcontainers/features/sshd:1": {}, + "ghcr.io/devcontainers/features/sshd:1": {} }, "forwardPorts": [3000, 4000], @@ -14,17 +14,17 @@ "3000": { "label": "web", "onAutoForward": "notify", - "requireLocalPort": true, + "requireLocalPort": true }, "4000": { "label": "stream", "onAutoForward": "silent", - "requireLocalPort": true, - }, + "requireLocalPort": true + } }, "otherPortsAttributes": { - "onAutoForward": "silent", + "onAutoForward": "silent" }, "onCreateCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}", @@ -34,7 +34,7 @@ "customizations": { "vscode": { "settings": {}, - "extensions": ["EditorConfig.EditorConfig", "webben.browserslist"], - }, - }, + "extensions": ["EditorConfig.EditorConfig", "webben.browserslist"] + } + } } diff --git a/app/javascript/mastodon/test_helpers.tsx b/app/javascript/mastodon/test_helpers.tsx index 6895895569..69d57b95a0 100644 --- a/app/javascript/mastodon/test_helpers.tsx +++ b/app/javascript/mastodon/test_helpers.tsx @@ -40,7 +40,7 @@ function render( ui: React.ReactElement, { locale = 'en', signedIn = true, ...renderOptions } = {}, ) { - const Wrapper = (props: { children: React.ReactElement }) => { + const Wrapper = (props: { children: React.ReactNode }) => { return ( diff --git a/jsconfig.json b/jsconfig.json index 7b710de83c..d52816a98b 100644 --- a/jsconfig.json +++ b/jsconfig.json @@ -11,7 +11,7 @@ "noEmit": true, "resolveJsonModule": true, "strict": false, - "target": "ES2022", + "target": "ES2022" }, - "exclude": ["**/build/*", "**/node_modules/*", "**/public/*", "**/vendor/*"], + "exclude": ["**/build/*", "**/node_modules/*", "**/public/*", "**/vendor/*"] } diff --git a/streaming/tsconfig.json b/streaming/tsconfig.json index ba5bd51ff7..37e9a7fee0 100644 --- a/streaming/tsconfig.json +++ b/streaming/tsconfig.json @@ -6,7 +6,7 @@ "moduleResolution": "NodeNext", "noUnusedParameters": false, "tsBuildInfoFile": "../tmp/cache/streaming/tsconfig.tsbuildinfo", - "paths": {}, + "paths": {} }, - "include": ["./*.js", "./.eslintrc.cjs"], + "include": ["./*.js", "./.eslintrc.cjs"] } diff --git a/tsconfig.json b/tsconfig.json index dc71fc4a9c..a193ea35f2 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,12 +15,12 @@ "paths": { "mastodon": ["app/javascript/mastodon"], "mastodon/*": ["app/javascript/mastodon/*"], - "@/*": ["app/javascript/*"], - }, + "@/*": ["app/javascript/*"] + } }, "include": [ "app/javascript/mastodon", "app/javascript/packs", - "app/javascript/types", - ], + "app/javascript/types" + ] } diff --git a/yarn.lock b/yarn.lock index 943c488714..442473a092 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2881,8 +2881,8 @@ __metadata: linkType: hard "@testing-library/jest-dom@npm:^6.0.0": - version: 6.4.0 - resolution: "@testing-library/jest-dom@npm:6.4.0" + version: 6.4.2 + resolution: "@testing-library/jest-dom@npm:6.4.2" dependencies: "@adobe/css-tools": "npm:^4.3.2" "@babel/runtime": "npm:^7.9.2" @@ -2909,13 +2909,13 @@ __metadata: optional: true vitest: optional: true - checksum: 10c0/6b7eba9ca388986a721fb12f84adf0f5534bf7ec5851982023a889c4a0afac6e9e91291bdac39e1f59a05adefd7727e30463d98b21c3da32fbfec229ccb11ef1 + checksum: 10c0/e7eba527b34ce30cde94424d2ec685bdfed51daaafb7df9b68b51aec6052e99a50c8bfe654612dacdf857a1eb81d68cf294fc89de558ee3a992bf7a6019fffcc languageName: node linkType: hard "@testing-library/react@npm:^14.0.0": - version: 14.1.2 - resolution: "@testing-library/react@npm:14.1.2" + version: 14.2.1 + resolution: "@testing-library/react@npm:14.2.1" dependencies: "@babel/runtime": "npm:^7.12.5" "@testing-library/dom": "npm:^9.0.0" @@ -2923,7 +2923,7 @@ __metadata: peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: 10c0/b5b0990d3aa0ea8b37c55804e0d5d584fc638a5c7d4df90da9a0fdb00bc981b27b6991468b2dc719982a5d0b0107a41596063ce51ad519eeab47b22bc04d6779 + checksum: 10c0/83b35cf8bf5640f1b63b32223ebc75799dc1a8e034d819120b26838fba0b0ab10bdbe6ad07dd8ae8287365f2b0c52dc9892a6fa11bb24d3e63ad97dfb7f2f296 languageName: node linkType: hard @@ -10903,28 +10903,28 @@ __metadata: linkType: hard "lint-staged@npm:^15.0.0": - version: 15.2.0 - resolution: "lint-staged@npm:15.2.0" + version: 15.2.2 + resolution: "lint-staged@npm:15.2.2" dependencies: chalk: "npm:5.3.0" commander: "npm:11.1.0" debug: "npm:4.3.4" execa: "npm:8.0.1" lilconfig: "npm:3.0.0" - listr2: "npm:8.0.0" + listr2: "npm:8.0.1" micromatch: "npm:4.0.5" pidtree: "npm:0.6.0" string-argv: "npm:0.3.2" yaml: "npm:2.3.4" bin: lint-staged: bin/lint-staged.js - checksum: 10c0/4a1ff25dd06dbd4346fd244c9a0ebb936532ba18c0caedeb895c2e232f3c6c5fd08f6667624716660bc29e3e0f9f0440a9175114394616e991ebd5fab4b1f092 + checksum: 10c0/a1ba6c7ee53e30a0f6ea9a351d95d3d0d2be916a41b561e22907e9ea513eb18cb3dbe65bff3ec13fad15777999efe56b2e2a95427e31d12a9b7e7948c3630ee2 languageName: node linkType: hard -"listr2@npm:8.0.0": - version: 8.0.0 - resolution: "listr2@npm:8.0.0" +"listr2@npm:8.0.1": + version: 8.0.1 + resolution: "listr2@npm:8.0.1" dependencies: cli-truncate: "npm:^4.0.0" colorette: "npm:^2.0.20" @@ -10932,7 +10932,7 @@ __metadata: log-update: "npm:^6.0.0" rfdc: "npm:^1.3.0" wrap-ansi: "npm:^9.0.0" - checksum: 10c0/6e356df9127c68b69186c927c993645223557e941a76b0bb210e35786aedc53f577df437251db804606ff37ac509c5d945289a84b3daee7fadf2e3dcb889ecc9 + checksum: 10c0/b565d6ceb3a4c2dbe0c1735c0fd907afd0d6f89de21aced8e05187b2d88ca2f8f9ebc5d743885396a00f05f13146f6be744d098a56ce0402cf1cd131485a7ff1 languageName: node linkType: hard @@ -13295,11 +13295,11 @@ __metadata: linkType: hard "prettier@npm:^3.0.0": - version: 3.2.4 - resolution: "prettier@npm:3.2.4" + version: 3.2.5 + resolution: "prettier@npm:3.2.5" bin: prettier: bin/prettier.cjs - checksum: 10c0/88dfeb78ac6096522c9a5b81f1413d875f568420d9bb6a5e5103527912519b993f2bcdcac311fcff5718d5869671d44e4f85827d3626f3a6ce32b9abc65d88e0 + checksum: 10c0/ea327f37a7d46f2324a34ad35292af2ad4c4c3c3355da07313339d7e554320f66f65f91e856add8530157a733c6c4a897dc41b577056be5c24c40f739f5ee8c6 languageName: node linkType: hard @@ -15785,8 +15785,8 @@ __metadata: linkType: hard "stylelint@npm:^16.0.2": - version: 16.2.0 - resolution: "stylelint@npm:16.2.0" + version: 16.2.1 + resolution: "stylelint@npm:16.2.1" dependencies: "@csstools/css-parser-algorithms": "npm:^2.5.0" "@csstools/css-tokenizer": "npm:^2.2.3" @@ -15828,7 +15828,7 @@ __metadata: write-file-atomic: "npm:^5.0.1" bin: stylelint: bin/stylelint.mjs - checksum: 10c0/6fdf0451833c11b18c9aa502f687febd6881a912ac94f39d509b894b0f74ccb636f3dac2991c69cc82dc6190731cc2fa48e307fed477d2a0fce57067cd22b572 + checksum: 10c0/eeaba06885e542c832e5cffc07b2d0dabdc5a72e6ad4d6cb3d01dcc260c29a712b0b935cbd40e059abd68a100e0563fbc617fc4c9bef3b14ecaf6eea651d9d9d languageName: node linkType: hard From 3b3144740805c1b404934c0f196d6cddc14dac0b Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Tue, 27 Feb 2024 17:09:27 +0100 Subject: [PATCH 032/263] Rework Prettier invocation (#28851) --- .eslintrc.js | 4 +- .github/workflows/format-check.yml | 18 ++ .github/workflows/lint-css.yml | 2 +- .github/workflows/lint-json.yml | 38 ---- .github/workflows/lint-md.yml | 38 ---- .github/workflows/lint-yml.yml | 40 ----- .prettierignore | 8 + package.json | 20 +-- yarn.lock | 267 ++++------------------------- 9 files changed, 74 insertions(+), 361 deletions(-) create mode 100644 .github/workflows/format-check.yml delete mode 100644 .github/workflows/lint-json.yml delete mode 100644 .github/workflows/lint-md.yml delete mode 100644 .github/workflows/lint-yml.yml diff --git a/.eslintrc.js b/.eslintrc.js index ebe07f6e79..bd818c3ce4 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -338,7 +338,6 @@ module.exports = defineConfig({ 'plugin:import/typescript', 'plugin:promise/recommended', 'plugin:jsdoc/recommended-typescript', - 'plugin:prettier/recommended', ], parserOptions: { @@ -347,6 +346,9 @@ module.exports = defineConfig({ }, rules: { + // Disable formatting rules that have been enabled in the base config + 'indent': 'off', + 'import/consistent-type-specifier-style': ['error', 'prefer-top-level'], '@typescript-eslint/consistent-type-definitions': ['warn', 'interface'], diff --git a/.github/workflows/format-check.yml b/.github/workflows/format-check.yml new file mode 100644 index 0000000000..2d483b5022 --- /dev/null +++ b/.github/workflows/format-check.yml @@ -0,0 +1,18 @@ +name: Check formatting +on: + push: + pull_request: + +jobs: + lint: + runs-on: ubuntu-latest + + steps: + - name: Clone repository + uses: actions/checkout@v4 + + - name: Set up Javascript environment + uses: ./.github/actions/setup-javascript + + - name: Check formatting with Prettier + run: yarn format:check diff --git a/.github/workflows/lint-css.yml b/.github/workflows/lint-css.yml index 7229bec582..e5f4874877 100644 --- a/.github/workflows/lint-css.yml +++ b/.github/workflows/lint-css.yml @@ -43,4 +43,4 @@ jobs: - run: echo "::add-matcher::.github/stylelint-matcher.json" - name: Stylelint - run: yarn lint:sass + run: yarn lint:css diff --git a/.github/workflows/lint-json.yml b/.github/workflows/lint-json.yml deleted file mode 100644 index 7796bf92c4..0000000000 --- a/.github/workflows/lint-json.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: JSON Linting -on: - push: - branches-ignore: - - 'dependabot/**' - - 'renovate/**' - paths: - - 'package.json' - - 'yarn.lock' - - '.nvmrc' - - '.prettier*' - - '**/*.json' - - '.github/workflows/lint-json.yml' - - '!app/javascript/mastodon/locales/*.json' - - pull_request: - paths: - - 'package.json' - - 'yarn.lock' - - '.nvmrc' - - '.prettier*' - - '**/*.json' - - '.github/workflows/lint-json.yml' - - '!app/javascript/mastodon/locales/*.json' - -jobs: - lint: - runs-on: ubuntu-latest - - steps: - - name: Clone repository - uses: actions/checkout@v4 - - - name: Set up Javascript environment - uses: ./.github/actions/setup-javascript - - - name: Prettier - run: yarn lint:json diff --git a/.github/workflows/lint-md.yml b/.github/workflows/lint-md.yml deleted file mode 100644 index 51c59937a3..0000000000 --- a/.github/workflows/lint-md.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: Markdown Linting -on: - push: - branches-ignore: - - 'dependabot/**' - - 'renovate/**' - paths: - - '.github/workflows/lint-md.yml' - - '.nvmrc' - - '.prettier*' - - '**/*.md' - - '!AUTHORS.md' - - 'package.json' - - 'yarn.lock' - - pull_request: - paths: - - '.github/workflows/lint-md.yml' - - '.nvmrc' - - '.prettier*' - - '**/*.md' - - '!AUTHORS.md' - - 'package.json' - - 'yarn.lock' - -jobs: - lint: - runs-on: ubuntu-latest - - steps: - - name: Clone repository - uses: actions/checkout@v4 - - - name: Set up Javascript environment - uses: ./.github/actions/setup-javascript - - - name: Prettier - run: yarn lint:md diff --git a/.github/workflows/lint-yml.yml b/.github/workflows/lint-yml.yml deleted file mode 100644 index 908bdef5cc..0000000000 --- a/.github/workflows/lint-yml.yml +++ /dev/null @@ -1,40 +0,0 @@ -name: YML Linting -on: - push: - branches-ignore: - - 'dependabot/**' - - 'renovate/**' - paths: - - 'package.json' - - 'yarn.lock' - - '.nvmrc' - - '.prettier*' - - '**/*.yaml' - - '**/*.yml' - - '.github/workflows/lint-yml.yml' - - '!config/locales/*.yml' - - pull_request: - paths: - - 'package.json' - - 'yarn.lock' - - '.nvmrc' - - '.prettier*' - - '**/*.yaml' - - '**/*.yml' - - '.github/workflows/lint-yml.yml' - - '!config/locales/*.yml' - -jobs: - lint: - runs-on: ubuntu-latest - - steps: - - name: Clone repository - uses: actions/checkout@v4 - - - name: Set up Javascript environment - uses: ./.github/actions/setup-javascript - - - name: Prettier - run: yarn lint:yml diff --git a/.prettierignore b/.prettierignore index 51850b2b28..6b2f0c1889 100644 --- a/.prettierignore +++ b/.prettierignore @@ -54,6 +54,13 @@ # Ignore Docker option files docker-compose.override.yml +# Ignore public +/public/assets +/public/emoji +/public/packs +/public/packs-test +/public/system + # Ignore emoji map file /app/javascript/mastodon/features/emoji/emoji_map.json @@ -74,4 +81,5 @@ app/javascript/styles/mastodon/reset.scss # Ignore the generated AUTHORS.md AUTHORS.md +# Process a few selected JS files !lint-staged.config.js diff --git a/package.json b/package.json index af83867fe8..4f17b427ee 100644 --- a/package.json +++ b/package.json @@ -12,20 +12,16 @@ "scripts": { "build:development": "cross-env RAILS_ENV=development NODE_ENV=development ./bin/webpack", "build:production": "cross-env RAILS_ENV=production NODE_ENV=production ./bin/webpack", - "fix:js": "yarn lint:js --fix", - "fix:json": "prettier --write \"**/*.{json,json5}\"", - "fix:md": "prettier --write \"**/*.md\"", - "fix:sass": "stylelint --fix \"**/*.{css,scss}\" && prettier --write \"**/*.{css,scss}\"", - "fix:yml": "prettier --write \"**/*.{yaml,yml}\"", - "fix": "yarn fix:js && yarn fix:json && yarn fix:sass && yarn fix:yml", + "fix:js": "eslint . --ext=.js,.jsx,.ts,.tsx --cache --report-unused-disable-directives --fix", + "fix:css": "stylelint --fix \"**/*.{css,scss}\"", + "fix": "yarn fix:js && yarn fix:css", + "format": "prettier --write --log-level warn .", + "format:check": "prettier --check --ignore-unknown .", "i18n:extract": "formatjs extract 'app/javascript/**/*.{js,jsx,ts,tsx}' '--ignore=**/*.d.ts' --out-file app/javascript/mastodon/locales/en.json --format config/formatjs-formatter.js", "jest": "cross-env NODE_ENV=test jest", "lint:js": "eslint . --ext=.js,.jsx,.ts,.tsx --cache --report-unused-disable-directives", - "lint:json": "prettier --check \"**/*.{json,json5}\"", - "lint:md": "prettier --check \"**/*.md\"", - "lint:sass": "stylelint \"**/*.{css,scss}\" && prettier --check \"**/*.{css,scss}\"", - "lint:yml": "prettier --check \"**/*.{yaml,yml}\"", - "lint": "yarn lint:js && yarn lint:json && yarn lint:sass && yarn lint:yml", + "lint:css": "stylelint \"**/*.{css,scss}\"", + "lint": "yarn lint:js && yarn lint:css", "postversion": "git push --tags", "prepare": "husky", "start": "node ./streaming/index.js", @@ -177,14 +173,12 @@ "@typescript-eslint/parser": "^7.0.0", "babel-jest": "^29.5.0", "eslint": "^8.41.0", - "eslint-config-prettier": "^9.0.0", "eslint-define-config": "^2.0.0", "eslint-import-resolver-typescript": "^3.5.5", "eslint-plugin-formatjs": "^4.10.1", "eslint-plugin-import": "~2.29.0", "eslint-plugin-jsdoc": "^48.0.0", "eslint-plugin-jsx-a11y": "~6.8.0", - "eslint-plugin-prettier": "^5.0.0", "eslint-plugin-promise": "~6.1.1", "eslint-plugin-react": "^7.33.2", "eslint-plugin-react-hooks": "^4.6.0", diff --git a/yarn.lock b/yarn.lock index 442473a092..dda4ed326e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -42,7 +42,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.23.5": +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.22.13, @babel/code-frame@npm:^7.23.5": version: 7.23.5 resolution: "@babel/code-frame@npm:7.23.5" dependencies: @@ -373,6 +373,15 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.22.15": + version: 7.23.6 + resolution: "@babel/parser@npm:7.23.6" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/6f76cd5ccae1fa9bcab3525b0865c6222e9c1d22f87abc69f28c5c7b2c8816a13361f5bd06bddbd5faf903f7320a8feba02545c981468acec45d12a03db7755e + languageName: node + linkType: hard + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.23.3" @@ -1491,7 +1500,18 @@ __metadata: languageName: node linkType: hard -"@babel/template@npm:^7.22.15, @babel/template@npm:^7.23.9, @babel/template@npm:^7.3.3": +"@babel/template@npm:^7.22.15, @babel/template@npm:^7.3.3": + version: 7.22.15 + resolution: "@babel/template@npm:7.22.15" + dependencies: + "@babel/code-frame": "npm:^7.22.13" + "@babel/parser": "npm:^7.22.15" + "@babel/types": "npm:^7.22.15" + checksum: 10c0/9312edd37cf1311d738907003f2aa321a88a42ba223c69209abe4d7111db019d321805504f606c7fd75f21c6cf9d24d0a8223104cd21ebd207e241b6c551f454 + languageName: node + linkType: hard + +"@babel/template@npm:^7.23.9": version: 7.23.9 resolution: "@babel/template@npm:7.23.9" dependencies: @@ -1520,7 +1540,18 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-beta.49, @babel/types@npm:^7.12.11, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.10, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.6, @babel/types@npm:^7.23.9, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-beta.49, @babel/types@npm:^7.12.11, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.10, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.6, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": + version: 7.23.6 + resolution: "@babel/types@npm:7.23.6" + dependencies: + "@babel/helper-string-parser": "npm:^7.23.4" + "@babel/helper-validator-identifier": "npm:^7.22.20" + to-fast-properties: "npm:^2.0.0" + checksum: 10c0/42cefce8a68bd09bb5828b4764aa5586c53c60128ac2ac012e23858e1c179347a4aac9c66fc577994fbf57595227611c5ec8270bf0cfc94ff033bbfac0550b70 + languageName: node + linkType: hard + +"@babel/types@npm:^7.23.9": version: 7.23.9 resolution: "@babel/types@npm:7.23.9" dependencies: @@ -2360,14 +2391,12 @@ __metadata: emoji-mart: "npm:emoji-mart-lazyload@latest" escape-html: "npm:^1.0.3" eslint: "npm:^8.41.0" - eslint-config-prettier: "npm:^9.0.0" eslint-define-config: "npm:^2.0.0" eslint-import-resolver-typescript: "npm:^3.5.5" eslint-plugin-formatjs: "npm:^4.10.1" eslint-plugin-import: "npm:~2.29.0" eslint-plugin-jsdoc: "npm:^48.0.0" eslint-plugin-jsx-a11y: "npm:~6.8.0" - eslint-plugin-prettier: "npm:^5.0.0" eslint-plugin-promise: "npm:~6.1.1" eslint-plugin-react: "npm:^7.33.2" eslint-plugin-react-hooks: "npm:^4.6.0" @@ -2572,20 +2601,6 @@ __metadata: languageName: node linkType: hard -"@pkgr/utils@npm:^2.4.2": - version: 2.4.2 - resolution: "@pkgr/utils@npm:2.4.2" - dependencies: - cross-spawn: "npm:^7.0.3" - fast-glob: "npm:^3.3.0" - is-glob: "npm:^4.0.3" - open: "npm:^9.1.0" - picocolors: "npm:^1.0.0" - tslib: "npm:^2.6.0" - checksum: 10c0/7c3e68f6405a1d4c51f418d8d580e71d7bade2683d5db07e8413d8e57f7e389047eda44a2341f77a1b3085895fca7676a9d45e8812a58312524f8c4c65d501be - languageName: node - linkType: hard - "@polka/url@npm:^1.0.0-next.20": version: 1.0.0-next.21 resolution: "@polka/url@npm:1.0.0-next.21" @@ -4939,13 +4954,6 @@ __metadata: languageName: node linkType: hard -"big-integer@npm:^1.6.44": - version: 1.6.51 - resolution: "big-integer@npm:1.6.51" - checksum: 10c0/c8139662d57f8833a44802f4b65be911679c569535ea73c5cfd3c1c8994eaead1b84b6f63e1db63833e4d4cacb6b6a9e5522178113dfdc8e4c81ed8436f1e8cc - languageName: node - linkType: hard - "big.js@npm:^5.2.2": version: 5.2.2 resolution: "big.js@npm:5.2.2" @@ -5059,15 +5067,6 @@ __metadata: languageName: node linkType: hard -"bplist-parser@npm:^0.2.0": - version: 0.2.0 - resolution: "bplist-parser@npm:0.2.0" - dependencies: - big-integer: "npm:^1.6.44" - checksum: 10c0/ce79c69e0f6efe506281e7c84e3712f7d12978991675b6e3a58a295b16f13ca81aa9b845c335614a545e0af728c8311b6aa3142af76ba1cb616af9bbac5c4a9f - languageName: node - linkType: hard - "brace-expansion@npm:^1.1.7": version: 1.1.11 resolution: "brace-expansion@npm:1.1.11" @@ -5290,15 +5289,6 @@ __metadata: languageName: node linkType: hard -"bundle-name@npm:^3.0.0": - version: 3.0.0 - resolution: "bundle-name@npm:3.0.0" - dependencies: - run-applescript: "npm:^5.0.0" - checksum: 10c0/57bc7f8b025d83961b04db2f1eff6a87f2363c2891f3542a4b82471ff8ebb5d484af48e9784fcdb28ef1d48bb01f03d891966dc3ef58758e46ea32d750ce40f8 - languageName: node - linkType: hard - "bytes@npm:3.0.0": version: 3.0.0 resolution: "bytes@npm:3.0.0" @@ -6524,28 +6514,6 @@ __metadata: languageName: node linkType: hard -"default-browser-id@npm:^3.0.0": - version: 3.0.0 - resolution: "default-browser-id@npm:3.0.0" - dependencies: - bplist-parser: "npm:^0.2.0" - untildify: "npm:^4.0.0" - checksum: 10c0/8db3ab882eb3e1e8b59d84c8641320e6c66d8eeb17eb4bb848b7dd549b1e6fd313988e4a13542e95fbaeff03f6e9dedc5ad191ad4df7996187753eb0d45c00b7 - languageName: node - linkType: hard - -"default-browser@npm:^4.0.0": - version: 4.0.0 - resolution: "default-browser@npm:4.0.0" - dependencies: - bundle-name: "npm:^3.0.0" - default-browser-id: "npm:^3.0.0" - execa: "npm:^7.1.1" - titleize: "npm:^3.0.0" - checksum: 10c0/7c8848badc139ecf9d878e562bc4e7ab4301e51ba120b24d8dcb14739c30152115cc612065ac3ab73c02aace4afa29db5a044257b2f0cf234f16e3a58f6c925e - languageName: node - linkType: hard - "default-gateway@npm:^4.2.0": version: 4.2.0 resolution: "default-gateway@npm:4.2.0" @@ -6567,13 +6535,6 @@ __metadata: languageName: node linkType: hard -"define-lazy-prop@npm:^3.0.0": - version: 3.0.0 - resolution: "define-lazy-prop@npm:3.0.0" - checksum: 10c0/5ab0b2bf3fa58b3a443140bbd4cd3db1f91b985cc8a246d330b9ac3fc0b6a325a6d82bddc0b055123d745b3f9931afeea74a5ec545439a1630b9c8512b0eeb49 - languageName: node - linkType: hard - "define-properties@npm:^1.1.3, define-properties@npm:^1.1.4, define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": version: 1.2.1 resolution: "define-properties@npm:1.2.1" @@ -7298,17 +7259,6 @@ __metadata: languageName: node linkType: hard -"eslint-config-prettier@npm:^9.0.0": - version: 9.1.0 - resolution: "eslint-config-prettier@npm:9.1.0" - peerDependencies: - eslint: ">=7.0.0" - bin: - eslint-config-prettier: bin/cli.js - checksum: 10c0/6d332694b36bc9ac6fdb18d3ca2f6ac42afa2ad61f0493e89226950a7091e38981b66bac2b47ba39d15b73fff2cd32c78b850a9cf9eed9ca9a96bfb2f3a2f10d - languageName: node - linkType: hard - "eslint-define-config@npm:^2.0.0": version: 2.1.0 resolution: "eslint-define-config@npm:2.1.0" @@ -7450,26 +7400,6 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-prettier@npm:^5.0.0": - version: 5.1.3 - resolution: "eslint-plugin-prettier@npm:5.1.3" - dependencies: - prettier-linter-helpers: "npm:^1.0.0" - synckit: "npm:^0.8.6" - peerDependencies: - "@types/eslint": ">=8.0.0" - eslint: ">=8.0.0" - eslint-config-prettier: "*" - prettier: ">=3.0.0" - peerDependenciesMeta: - "@types/eslint": - optional: true - eslint-config-prettier: - optional: true - checksum: 10c0/f45d5fc1fcfec6b0cf038a7a65ddd10a25df4fe3f9e1f6b7f0d5100e66f046a26a2492e69ee765dddf461b93c114cf2e1eb18d4970aafa6f385448985c136e09 - languageName: node - linkType: hard - "eslint-plugin-promise@npm:~6.1.1": version: 6.1.1 resolution: "eslint-plugin-promise@npm:6.1.1" @@ -7758,23 +7688,6 @@ __metadata: languageName: node linkType: hard -"execa@npm:^7.1.1": - version: 7.2.0 - resolution: "execa@npm:7.2.0" - dependencies: - cross-spawn: "npm:^7.0.3" - get-stream: "npm:^6.0.1" - human-signals: "npm:^4.3.0" - is-stream: "npm:^3.0.0" - merge-stream: "npm:^2.0.0" - npm-run-path: "npm:^5.1.0" - onetime: "npm:^6.0.0" - signal-exit: "npm:^3.0.7" - strip-final-newline: "npm:^3.0.0" - checksum: 10c0/098cd6a1bc26d509e5402c43f4971736450b84d058391820c6f237aeec6436963e006fd8423c9722f148c53da86aa50045929c7278b5522197dff802d10f9885 - languageName: node - linkType: hard - "exit@npm:^0.1.2": version: 0.1.2 resolution: "exit@npm:0.1.2" @@ -7914,14 +7827,7 @@ __metadata: languageName: node linkType: hard -"fast-diff@npm:^1.1.2": - version: 1.3.0 - resolution: "fast-diff@npm:1.3.0" - checksum: 10c0/5c19af237edb5d5effda008c891a18a585f74bf12953be57923f17a3a4d0979565fc64dbc73b9e20926b9d895f5b690c618cbb969af0cf022e3222471220ad29 - languageName: node - linkType: hard - -"fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.0, fast-glob@npm:^3.3.1, fast-glob@npm:^3.3.2": +"fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.1, fast-glob@npm:^3.3.2": version: 3.3.2 resolution: "fast-glob@npm:3.3.2" dependencies: @@ -8432,7 +8338,7 @@ __metadata: languageName: node linkType: hard -"get-stream@npm:^6.0.0, get-stream@npm:^6.0.1": +"get-stream@npm:^6.0.0": version: 6.0.1 resolution: "get-stream@npm:6.0.1" checksum: 10c0/49825d57d3fd6964228e6200a58169464b8e8970489b3acdc24906c782fb7f01f9f56f8e6653c4a50713771d6658f7cfe051e5eb8c12e334138c9c918b296341 @@ -9032,13 +8938,6 @@ __metadata: languageName: node linkType: hard -"human-signals@npm:^4.3.0": - version: 4.3.1 - resolution: "human-signals@npm:4.3.1" - checksum: 10c0/40498b33fe139f5cc4ef5d2f95eb1803d6318ac1b1c63eaf14eeed5484d26332c828de4a5a05676b6c83d7b9e57727c59addb4b1dea19cb8d71e83689e5b336c - languageName: node - linkType: hard - "human-signals@npm:^5.0.0": version: 5.0.0 resolution: "human-signals@npm:5.0.0" @@ -9512,24 +9411,6 @@ __metadata: languageName: node linkType: hard -"is-docker@npm:^2.0.0": - version: 2.2.1 - resolution: "is-docker@npm:2.2.1" - bin: - is-docker: cli.js - checksum: 10c0/e828365958d155f90c409cdbe958f64051d99e8aedc2c8c4cd7c89dcf35329daed42f7b99346f7828df013e27deb8f721cf9408ba878c76eb9e8290235fbcdcc - languageName: node - linkType: hard - -"is-docker@npm:^3.0.0": - version: 3.0.0 - resolution: "is-docker@npm:3.0.0" - bin: - is-docker: cli.js - checksum: 10c0/d2c4f8e6d3e34df75a5defd44991b6068afad4835bb783b902fa12d13ebdb8f41b2a199dcb0b5ed2cb78bfee9e4c0bbdb69c2d9646f4106464674d3e697a5856 - languageName: node - linkType: hard - "is-electron@npm:^2.2.0": version: 2.2.2 resolution: "is-electron@npm:2.2.2" @@ -9633,17 +9514,6 @@ __metadata: languageName: node linkType: hard -"is-inside-container@npm:^1.0.0": - version: 1.0.0 - resolution: "is-inside-container@npm:1.0.0" - dependencies: - is-docker: "npm:^3.0.0" - bin: - is-inside-container: cli.js - checksum: 10c0/a8efb0e84f6197e6ff5c64c52890fa9acb49b7b74fed4da7c95383965da6f0fa592b4dbd5e38a79f87fc108196937acdbcd758fcefc9b140e479b39ce1fcd1cd - languageName: node - linkType: hard - "is-lambda@npm:^1.0.1": version: 1.0.1 resolution: "is-lambda@npm:1.0.1" @@ -9887,15 +9757,6 @@ __metadata: languageName: node linkType: hard -"is-wsl@npm:^2.2.0": - version: 2.2.0 - resolution: "is-wsl@npm:2.2.0" - dependencies: - is-docker: "npm:^2.0.0" - checksum: 10c0/a6fa2d370d21be487c0165c7a440d567274fbba1a817f2f0bfa41cc5e3af25041d84267baa22df66696956038a43973e72fca117918c91431920bdef490fa25e - languageName: node - linkType: hard - "isarray@npm:0.0.1": version: 0.0.1 resolution: "isarray@npm:0.0.1" @@ -12146,18 +12007,6 @@ __metadata: languageName: node linkType: hard -"open@npm:^9.1.0": - version: 9.1.0 - resolution: "open@npm:9.1.0" - dependencies: - default-browser: "npm:^4.0.0" - define-lazy-prop: "npm:^3.0.0" - is-inside-container: "npm:^1.0.0" - is-wsl: "npm:^2.2.0" - checksum: 10c0/8073ec0dd8994a7a7d9bac208bd17d093993a65ce10f2eb9b62b6d3a91c9366ae903938a237c275493c130171d339f6dcbdd2a2de7e32953452c0867b97825af - languageName: node - linkType: hard - "opencollective-postinstall@npm:^2.0.2": version: 2.0.3 resolution: "opencollective-postinstall@npm:2.0.3" @@ -13285,15 +13134,6 @@ __metadata: languageName: node linkType: hard -"prettier-linter-helpers@npm:^1.0.0": - version: 1.0.0 - resolution: "prettier-linter-helpers@npm:1.0.0" - dependencies: - fast-diff: "npm:^1.1.2" - checksum: 10c0/81e0027d731b7b3697ccd2129470ed9913ecb111e4ec175a12f0fcfab0096516373bf0af2fef132af50cafb0a905b74ff57996d615f59512bb9ac7378fcc64ab - languageName: node - linkType: hard - "prettier@npm:^3.0.0": version: 3.2.5 resolution: "prettier@npm:3.2.5" @@ -14553,15 +14393,6 @@ __metadata: languageName: node linkType: hard -"run-applescript@npm:^5.0.0": - version: 5.0.0 - resolution: "run-applescript@npm:5.0.0" - dependencies: - execa: "npm:^5.0.0" - checksum: 10c0/f9977db5770929f3f0db434b8e6aa266498c70dec913c84320c0a06add510cf44e3a048c44da088abee312006f9cbf572fd065cdc8f15d7682afda8755f4114c - languageName: node - linkType: hard - "run-parallel@npm:^1.1.9": version: 1.2.0 resolution: "run-parallel@npm:1.2.0" @@ -15960,16 +15791,6 @@ __metadata: languageName: node linkType: hard -"synckit@npm:^0.8.6": - version: 0.8.6 - resolution: "synckit@npm:0.8.6" - dependencies: - "@pkgr/utils": "npm:^2.4.2" - tslib: "npm:^2.6.2" - checksum: 10c0/200528062e3915a0190a4c6b1e01436fcfdf812e2e8d977746746f3998bb4182d758af760e51b06a64f8323e705735aff7b4b3efc4a0ab5f75eaccc044a8cfcc - languageName: node - linkType: hard - "table@npm:^6.8.1": version: 6.8.1 resolution: "table@npm:6.8.1" @@ -16164,13 +15985,6 @@ __metadata: languageName: node linkType: hard -"titleize@npm:^3.0.0": - version: 3.0.0 - resolution: "titleize@npm:3.0.0" - checksum: 10c0/5ae6084ba299b5782f95e3fe85ea9f0fa4d74b8ae722b6b3208157e975589fbb27733aeba4e5080fa9314a856044ef52caa61b87caea4b1baade951a55c06336 - languageName: node - linkType: hard - "tmpl@npm:1.0.5": version: 1.0.5 resolution: "tmpl@npm:1.0.5" @@ -16313,7 +16127,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:2.6.2, tslib@npm:^2.4.0, tslib@npm:^2.6.0, tslib@npm:^2.6.2": +"tslib@npm:2.6.2, tslib@npm:^2.4.0": version: 2.6.2 resolution: "tslib@npm:2.6.2" checksum: 10c0/e03a8a4271152c8b26604ed45535954c0a45296e32445b4b87f8a5abdb2421f40b59b4ca437c4346af0f28179780d604094eb64546bee2019d903d01c6c19bdb @@ -16635,13 +16449,6 @@ __metadata: languageName: node linkType: hard -"untildify@npm:^4.0.0": - version: 4.0.0 - resolution: "untildify@npm:4.0.0" - checksum: 10c0/d758e624c707d49f76f7511d75d09a8eda7f2020d231ec52b67ff4896bcf7013be3f9522d8375f57e586e9a2e827f5641c7e06ee46ab9c435fc2b2b2e9de517a - languageName: node - linkType: hard - "upath@npm:^1.1.1, upath@npm:^1.2.0": version: 1.2.0 resolution: "upath@npm:1.2.0" From ea8e7f3e9d994189bfa3f2e3486fffad9c22adb1 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 27 Feb 2024 11:25:12 -0500 Subject: [PATCH 033/263] Align `TagServersMeasure` query style with other classes (#29414) --- app/lib/admin/metrics/measure/tag_servers_measure.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/lib/admin/metrics/measure/tag_servers_measure.rb b/app/lib/admin/metrics/measure/tag_servers_measure.rb index e6378b8021..6eb46bca45 100644 --- a/app/lib/admin/metrics/measure/tag_servers_measure.rb +++ b/app/lib/admin/metrics/measure/tag_servers_measure.rb @@ -34,10 +34,10 @@ class Admin::Metrics::Measure::TagServersMeasure < Admin::Metrics::Measure::Base INNER JOIN accounts ON statuses.account_id = accounts.id WHERE statuses_tags.tag_id = :tag_id AND statuses.id BETWEEN :earliest_status_id AND :latest_status_id - AND date_trunc('day', statuses.created_at)::date = axis.day + AND date_trunc('day', statuses.created_at)::date = axis.period ) FROM ( - SELECT generate_series(date_trunc('day', :start_at::timestamp)::date, date_trunc('day', :end_at::timestamp)::date, ('1 day')::interval) AS day + SELECT generate_series(date_trunc('day', :start_at::timestamp)::date, date_trunc('day', :end_at::timestamp)::date, interval '1 day') AS period ) as axis SQL end From 8f3c91fc3c8ff4b150b171c7b3287a8b65e6dd07 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 27 Feb 2024 11:25:58 -0500 Subject: [PATCH 034/263] Add `change` block expectation to `admin/invites#deactivate_all` spec (#29412) --- spec/controllers/admin/invites_controller_spec.rb | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/spec/controllers/admin/invites_controller_spec.rb b/spec/controllers/admin/invites_controller_spec.rb index c8f566f68b..71748cbbec 100644 --- a/spec/controllers/admin/invites_controller_spec.rb +++ b/spec/controllers/admin/invites_controller_spec.rb @@ -44,14 +44,13 @@ describe Admin::InvitesController do end describe 'POST #deactivate_all' do + before { Fabricate(:invite, expires_at: nil) } + it 'expires all invites, then redirects to admin_invites_path' do - invites = Fabricate.times(1, :invite, expires_at: nil) - - post :deactivate_all - - invites.each do |invite| - expect(invite.reload).to be_expired - end + expect { post :deactivate_all } + .to change { Invite.exists?(expires_at: nil) } + .from(true) + .to(false) expect(response).to redirect_to admin_invites_path end From 1b219e709bced7fff87a39f602b159fb6c21b133 Mon Sep 17 00:00:00 2001 From: Evan Paterakis Date: Tue, 27 Feb 2024 12:46:58 +0200 Subject: [PATCH 035/263] [Glitch] Fix filters title and keywords overflow Port 213c87ae595cc1ddcb618516106712b0aae789bd to glitch-soc Signed-off-by: Claire --- app/javascript/flavours/glitch/styles/admin.scss | 1 + app/javascript/flavours/glitch/styles/forms.scss | 1 + 2 files changed, 2 insertions(+) diff --git a/app/javascript/flavours/glitch/styles/admin.scss b/app/javascript/flavours/glitch/styles/admin.scss index 97ea6d98bb..491b116a50 100644 --- a/app/javascript/flavours/glitch/styles/admin.scss +++ b/app/javascript/flavours/glitch/styles/admin.scss @@ -1065,6 +1065,7 @@ a.name-tag, display: flex; justify-content: space-between; margin-bottom: 0; + word-break: break-word; } &__permissions { diff --git a/app/javascript/flavours/glitch/styles/forms.scss b/app/javascript/flavours/glitch/styles/forms.scss index 33390f4992..5b7247734f 100644 --- a/app/javascript/flavours/glitch/styles/forms.scss +++ b/app/javascript/flavours/glitch/styles/forms.scss @@ -1080,6 +1080,7 @@ code { &__type { color: $darker-text-color; + word-break: break-word; } } From 916d78373d84eb3db47ed11f6e6edf78ae918688 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 27 Feb 2024 12:41:19 +0100 Subject: [PATCH 036/263] [Glitch] Change behavior of privacy dropdown to only change value on validation Port 90573c3abbc0783c25cb4e3aa8c298e10259cb57 to glitch-soc Signed-off-by: Claire --- .../compose/components/language_dropdown.jsx | 1 + .../compose/components/privacy_dropdown.jsx | 124 +---------------- .../components/privacy_dropdown_menu.jsx | 128 ++++++++++++++++++ 3 files changed, 131 insertions(+), 122 deletions(-) create mode 100644 app/javascript/flavours/glitch/features/compose/components/privacy_dropdown_menu.jsx diff --git a/app/javascript/flavours/glitch/features/compose/components/language_dropdown.jsx b/app/javascript/flavours/glitch/features/compose/components/language_dropdown.jsx index db1ce9cece..8edf75203f 100644 --- a/app/javascript/flavours/glitch/features/compose/components/language_dropdown.jsx +++ b/app/javascript/flavours/glitch/features/compose/components/language_dropdown.jsx @@ -141,6 +141,7 @@ class LanguageDropdownMenu extends PureComponent { case 'Escape': onClose(); break; + case ' ': case 'Enter': this.handleClick(e); break; diff --git a/app/javascript/flavours/glitch/features/compose/components/privacy_dropdown.jsx b/app/javascript/flavours/glitch/features/compose/components/privacy_dropdown.jsx index 8a49f71511..c99f18545b 100644 --- a/app/javascript/flavours/glitch/features/compose/components/privacy_dropdown.jsx +++ b/app/javascript/flavours/glitch/features/compose/components/privacy_dropdown.jsx @@ -5,16 +5,16 @@ import { injectIntl, defineMessages } from 'react-intl'; import classNames from 'classnames'; -import { supportsPassiveEvents } from 'detect-passive-events'; import Overlay from 'react-overlays/Overlay'; import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react'; -import InfoIcon from '@/material-icons/400-24px/info.svg?react'; import LockIcon from '@/material-icons/400-24px/lock.svg?react'; import PublicIcon from '@/material-icons/400-24px/public.svg?react'; import QuietTimeIcon from '@/material-icons/400-24px/quiet_time.svg?react'; import { Icon } from 'flavours/glitch/components/icon'; +import { PrivacyDropdownMenu } from './privacy_dropdown_menu'; + const messages = defineMessages({ public_short: { id: 'privacy.public.short', defaultMessage: 'Public' }, public_long: { id: 'privacy.public.long', defaultMessage: 'Anyone on and off Mastodon' }, @@ -28,126 +28,6 @@ const messages = defineMessages({ unlisted_extra: { id: 'privacy.unlisted.additional', defaultMessage: 'This behaves exactly like public, except the post will not appear in live feeds or hashtags, explore, or Mastodon search, even if you are opted-in account-wide.' }, }); -const listenerOptions = supportsPassiveEvents ? { passive: true, capture: true } : true; - -class PrivacyDropdownMenu extends PureComponent { - - static propTypes = { - style: PropTypes.object, - items: PropTypes.array.isRequired, - value: PropTypes.string.isRequired, - onClose: PropTypes.func.isRequired, - onChange: PropTypes.func.isRequired, - }; - - handleDocumentClick = e => { - if (this.node && !this.node.contains(e.target)) { - this.props.onClose(); - e.stopPropagation(); - } - }; - - handleKeyDown = e => { - const { items } = this.props; - const value = e.currentTarget.getAttribute('data-index'); - const index = items.findIndex(item => { - return (item.value === value); - }); - let element = null; - - switch(e.key) { - case 'Escape': - this.props.onClose(); - break; - case 'Enter': - this.handleClick(e); - break; - case 'ArrowDown': - element = this.node.childNodes[index + 1] || this.node.firstChild; - break; - case 'ArrowUp': - element = this.node.childNodes[index - 1] || this.node.lastChild; - break; - case 'Tab': - if (e.shiftKey) { - element = this.node.childNodes[index - 1] || this.node.lastChild; - } else { - element = this.node.childNodes[index + 1] || this.node.firstChild; - } - break; - case 'Home': - element = this.node.firstChild; - break; - case 'End': - element = this.node.lastChild; - break; - } - - if (element) { - element.focus(); - this.props.onChange(element.getAttribute('data-index')); - e.preventDefault(); - e.stopPropagation(); - } - }; - - handleClick = e => { - const value = e.currentTarget.getAttribute('data-index'); - - e.preventDefault(); - - this.props.onClose(); - this.props.onChange(value); - }; - - componentDidMount () { - document.addEventListener('click', this.handleDocumentClick, { capture: true }); - document.addEventListener('touchend', this.handleDocumentClick, listenerOptions); - if (this.focusedItem) this.focusedItem.focus({ preventScroll: true }); - } - - componentWillUnmount () { - document.removeEventListener('click', this.handleDocumentClick, { capture: true }); - document.removeEventListener('touchend', this.handleDocumentClick, listenerOptions); - } - - setRef = c => { - this.node = c; - }; - - setFocusRef = c => { - this.focusedItem = c; - }; - - render () { - const { style, items, value } = this.props; - - return ( -
- {items.map(item => ( -
-
- -
- -
- {item.text} - {item.meta} -
- - {item.extra && ( -
- -
- )} -
- ))} -
- ); - } - -} - class PrivacyDropdown extends PureComponent { static propTypes = { diff --git a/app/javascript/flavours/glitch/features/compose/components/privacy_dropdown_menu.jsx b/app/javascript/flavours/glitch/features/compose/components/privacy_dropdown_menu.jsx new file mode 100644 index 0000000000..03a0b76d23 --- /dev/null +++ b/app/javascript/flavours/glitch/features/compose/components/privacy_dropdown_menu.jsx @@ -0,0 +1,128 @@ +import PropTypes from 'prop-types'; +import { useCallback, useEffect, useRef, useState } from 'react'; + +import classNames from 'classnames'; + +import { supportsPassiveEvents } from 'detect-passive-events'; + +import InfoIcon from '@/material-icons/400-24px/info.svg?react'; +import { Icon } from 'flavours/glitch/components/icon'; + +const listenerOptions = supportsPassiveEvents ? { passive: true, capture: true } : true; + +export const PrivacyDropdownMenu = ({ style, items, value, onClose, onChange }) => { + const nodeRef = useRef(null); + const focusedItemRef = useRef(null); + const [currentValue, setCurrentValue] = useState(value); + + const handleDocumentClick = useCallback((e) => { + if (nodeRef.current && !nodeRef.current.contains(e.target)) { + onClose(); + e.stopPropagation(); + } + }, [nodeRef, onClose]); + + const handleClick = useCallback((e) => { + const value = e.currentTarget.getAttribute('data-index'); + + e.preventDefault(); + + onClose(); + onChange(value); + }, [onClose, onChange]); + + const handleKeyDown = useCallback((e) => { + const value = e.currentTarget.getAttribute('data-index'); + const index = items.findIndex(item => (item.value === value)); + + let element = null; + + switch (e.key) { + case 'Escape': + onClose(); + break; + case ' ': + case 'Enter': + handleClick(e); + break; + case 'ArrowDown': + element = nodeRef.current.childNodes[index + 1] || nodeRef.current.firstChild; + break; + case 'ArrowUp': + element = nodeRef.current.childNodes[index - 1] || nodeRef.current.lastChild; + break; + case 'Tab': + if (e.shiftKey) { + element = nodeRef.current.childNodes[index + 1] || nodeRef.current.firstChild; + } else { + element = nodeRef.current.childNodes[index - 1] || nodeRef.current.lastChild; + } + break; + case 'Home': + element = nodeRef.current.firstChild; + break; + case 'End': + element = nodeRef.current.lastChild; + break; + } + + if (element) { + element.focus(); + setCurrentValue(element.getAttribute('data-index')); + e.preventDefault(); + e.stopPropagation(); + } + }, [nodeRef, items, onClose, handleClick, setCurrentValue]); + + useEffect(() => { + document.addEventListener('click', handleDocumentClick, { capture: true }); + document.addEventListener('touchend', handleDocumentClick, listenerOptions); + focusedItemRef.current?.focus({ preventScroll: true }); + + return () => { + document.removeEventListener('click', handleDocumentClick, { capture: true }); + document.removeEventListener('touchend', handleDocumentClick, listenerOptions); + }; + }, [handleDocumentClick]); + + return ( +
    + {items.map(item => ( +
  • +
    + +
    + +
    + {item.text} + {item.meta} +
    + + {item.extra && ( +
    + +
    + )} +
  • + ))} +
+ ); +}; + +PrivacyDropdownMenu.propTypes = { + style: PropTypes.object, + items: PropTypes.array.isRequired, + value: PropTypes.string.isRequired, + onClose: PropTypes.func.isRequired, + onChange: PropTypes.func.isRequired, +}; From e8155319c7366f482081a750cd05e01b5a5277ea Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 27 Feb 2024 19:26:26 +0100 Subject: [PATCH 037/263] Take advantage of upstream's refactor and reduce code duplication --- .../components/dropdown_icon_button.jsx | 4 +- .../compose/components/dropdown_menu.jsx | 125 ------------------ 2 files changed, 2 insertions(+), 127 deletions(-) delete mode 100644 app/javascript/flavours/glitch/features/compose/components/dropdown_menu.jsx diff --git a/app/javascript/flavours/glitch/features/compose/components/dropdown_icon_button.jsx b/app/javascript/flavours/glitch/features/compose/components/dropdown_icon_button.jsx index 0ced5a04ad..9774d4260e 100644 --- a/app/javascript/flavours/glitch/features/compose/components/dropdown_icon_button.jsx +++ b/app/javascript/flavours/glitch/features/compose/components/dropdown_icon_button.jsx @@ -5,7 +5,7 @@ import Overlay from 'react-overlays/Overlay'; import { IconButton } from 'flavours/glitch/components/icon_button'; -import DropdownMenu from './dropdown_menu'; +import { PrivacyDropdownMenu } from './privacy_dropdown_menu'; export const DropdownIconButton = ({ value, disabled, icon, onChange, iconComponent, title, options }) => { const containerRef = useRef(null); @@ -53,7 +53,7 @@ export const DropdownIconButton = ({ value, disabled, icon, onChange, iconCompon {({ props, placement }) => (
- { - if (this.node && !this.node.contains(e.target)) { - this.props.onClose(); - e.stopPropagation(); - } - }; - - handleKeyDown = e => { - const { items } = this.props; - const value = e.currentTarget.getAttribute('data-index'); - const index = items.findIndex(item => { - return (item.value === value); - }); - let element = null; - - switch(e.key) { - case 'Escape': - this.props.onClose(); - break; - case 'Enter': - this.handleClick(e); - break; - case 'ArrowDown': - element = this.node.childNodes[index + 1] || this.node.firstChild; - break; - case 'ArrowUp': - element = this.node.childNodes[index - 1] || this.node.lastChild; - break; - case 'Tab': - if (e.shiftKey) { - element = this.node.childNodes[index - 1] || this.node.lastChild; - } else { - element = this.node.childNodes[index + 1] || this.node.firstChild; - } - break; - case 'Home': - element = this.node.firstChild; - break; - case 'End': - element = this.node.lastChild; - break; - } - - if (element) { - element.focus(); - this.props.onChange(element.getAttribute('data-index')); - e.preventDefault(); - e.stopPropagation(); - } - }; - - handleClick = e => { - const value = e.currentTarget.getAttribute('data-index'); - - e.preventDefault(); - - this.props.onClose(); - this.props.onChange(value); - }; - - componentDidMount () { - document.addEventListener('click', this.handleDocumentClick, { capture: true }); - document.addEventListener('touchend', this.handleDocumentClick, listenerOptions); - if (this.focusedItem) this.focusedItem.focus({ preventScroll: true }); - } - - componentWillUnmount () { - document.removeEventListener('click', this.handleDocumentClick, { capture: true }); - document.removeEventListener('touchend', this.handleDocumentClick, listenerOptions); - } - - setRef = c => { - this.node = c; - }; - - setFocusRef = c => { - this.focusedItem = c; - }; - - render () { - const { style, items, value } = this.props; - - return ( -
- {items.map(item => ( -
-
- -
- -
- {item.text} - {item.meta} -
-
- ))} -
- ); - } - -} - -export default DropdownMenu; From c19787f3f4c42c35060705041a64905738acf597 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 27 Feb 2024 21:27:51 +0100 Subject: [PATCH 038/263] Add doodle feature back (#2652) --- .../compose/components/upload_button.jsx | 45 +++++++++++++++---- .../containers/upload_button_container.js | 7 +++ .../flavours/glitch/locales/en.json | 1 + 3 files changed, 44 insertions(+), 9 deletions(-) diff --git a/app/javascript/flavours/glitch/features/compose/components/upload_button.jsx b/app/javascript/flavours/glitch/features/compose/components/upload_button.jsx index caa6784cb9..ed2cbb04f2 100644 --- a/app/javascript/flavours/glitch/features/compose/components/upload_button.jsx +++ b/app/javascript/flavours/glitch/features/compose/components/upload_button.jsx @@ -7,10 +7,14 @@ import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; import PhotoLibraryIcon from '@/material-icons/400-20px/photo_library.svg?react'; -import { IconButton } from 'flavours/glitch/components/icon_button'; +import BrushIcon from '@/material-icons/400-24px/brush.svg?react'; +import UploadFileIcon from '@/material-icons/400-24px/upload_file.svg?react'; + +import { DropdownIconButton } from './dropdown_icon_button'; const messages = defineMessages({ upload: { id: 'upload_button.label', defaultMessage: 'Add images, a video or an audio file' }, + doodle: { id: 'compose.attach.doodle', defaultMessage: 'Draw something' }, }); const makeMapStateToProps = () => { @@ -21,16 +25,12 @@ const makeMapStateToProps = () => { return mapStateToProps; }; -const iconStyle = { - height: null, - lineHeight: '27px', -}; - class UploadButton extends ImmutablePureComponent { static propTypes = { disabled: PropTypes.bool, onSelectFile: PropTypes.func.isRequired, + onDoodleOpen: PropTypes.func.isRequired, style: PropTypes.object, resetFileKey: PropTypes.number, acceptContentTypes: ImmutablePropTypes.listOf(PropTypes.string).isRequired, @@ -43,8 +43,12 @@ class UploadButton extends ImmutablePureComponent { } }; - handleClick = () => { - this.fileElement.click(); + handleSelect = (value) => { + if (value === 'upload') { + this.fileElement.click(); + } else { + this.props.onDoodleOpen(); + } }; setRef = (c) => { @@ -56,9 +60,32 @@ class UploadButton extends ImmutablePureComponent { const message = intl.formatMessage(messages.upload); + const options = [ + { + icon: 'cloud-upload', + iconComponent: UploadFileIcon, + value: 'upload', + text: intl.formatMessage(messages.upload), + }, + { + icon: 'paint-brush', + iconComponent: BrushIcon, + value: 'doodle', + text: intl.formatMessage(messages.doodle), + }, + ]; + return (
- +